Multiple projects
Avoid stale global paths and keep each agent connected to the intended repository.
Install and initialize Signalint separately in each repository. The local server checks the root selected when it starts; opening another editor tab does not automatically change an already-running server’s root.
The global configuration trap
Section titled “The global configuration trap”A shared MCP entry with a fixed path can silently point every workspace at the same repository:
{ "mcpServers": { "signalint": { "command": "npx", "args": ["--no-install", "signalint-mcp"], "cwd": "/path/to/an-old-project" } }}The JSON above illustrates the problem—do not copy it into a user/global configuration. The same risk applies to a stale SIGNALINT_PROJECT_ROOT environment value.
Prefer project-specific entries
Section titled “Prefer project-specific entries”For clients that support it, place the entry in the repository’s own MCP configuration. A cwd then belongs to that project alone.
The v1 emitter decides cwd from path containment and the registry’s supportsCwd flag. Normal user targets outside the project omit it and receive a warning. An unusual home/user config path inside the project boundary can still receive cwd, even though its registry scope is user. Inspect the actual entry; the warning is not proof that the field was omitted.
A global entry without cwd avoids pinning the old repository, but correctness still depends on the directory chosen by the client. Always verify it.
How the server selects a root
Section titled “How the server selects a root”For a normally launched MCP server:
- A valid
SIGNALINT_PROJECT_ROOTenvironment value selects an explicit root. - Otherwise, the server uses the process working directory chosen by the client.
The root is canonicalized. An invalid environment override logs a warning and falls back to the process working directory. Embedded API callers can also supply an explicit server cwd option, which takes precedence.
The server writes the resolved path to stderr at startup and exposes it in ping’s structured result.
Verify every connection
Section titled “Verify every connection”Call ping with {}:
{ "pong": true, "projectRoot": "/path/to/the-current-project"}These ping-root instructions assume default both mode: text mode omits ping’s structured root, and compact checks omit their root. Use full output while confirming your target.
Then run the CLI doctor from that project:
npx --no-install signalint doctorDoctor can flag stale cwd entries in detected configs. Reconnect the MCP process after changing roots or client settings, and discard IDs from the previous connection.
Checklist when switching repositories
Section titled “Checklist when switching repositories”- Is Signalint installed in the new project?
- Does that project have its own reviewed
signalint.config.json? - Does the MCP configuration launch in the correct directory?
- Are any shared
cwdor environment overrides stale? - Does
pingreturn the new canonical root?
Use the client-specific guides for supported file locations and command shapes.