Skip to content

Targets

What you can point toolprint scan at.

A config file

npx toolprint scan ./.vscode/mcp.json
npx toolprint scan --config ~/Library/Application\ Support/Claude/claude_desktop_config.json

Every server in the file becomes a target. toolprint understands the shapes real clients use:

Key Client
mcpServers Claude Desktop, Claude Code, Cursor, Windsurf, Gemini CLI, IBM Bob, Pi
servers VS Code
mcp.servers VS Code settings.json
context_servers Zed
amp.mcpServers Amp
mcp OpenCode (array command, environment for env)

An entry marked "enabled": false is reported as skipped, not scanned — it is not in your agent's hands.

Project-scoped servers

Claude Code keeps per-project servers under projects.<dir>.mcpServers inside ~/.claude.json, so that file can have no top-level mcpServers at all while your agent still reaches several servers in a given repo. toolprint reads the scope matching the working directory, and reports the others rather than quietly missing them:

toolprint: skipped Claude Code (~/.claude.json): 2 other project scope(s) in this config
were not scanned — run toolprint from those directories to cover them

Run toolprint from a project's directory to cover that project's servers.

Auto-discovery

With no target and no --config, toolprint looks in the working directory for, in order:

.mcp.json
mcp.json
.vscode/mcp.json
.cursor/mcp.json

A URL

npx toolprint scan https://mcp.example.com/mcp

Transport is inferred: a type/transport hint containing sse selects SSE, otherwise streamable HTTP. For authenticated servers see Authentication.

An npm package

npx toolprint scan npx:@modelcontextprotocol/server-everything

Shorthand for running npx -y <package> as a stdio server.

A raw command

npx toolprint scan "node ./my-server.js"

Split naively on whitespace — fine for simple commands. For anything needing quoting, use a config file or npx:.

Every client on this machine

A repo's mcp.json is rarely the whole story. --all-clients discovers and scans the MCP config of every agent client installed on this machine:

npx toolprint scan --all-clients
npx toolprint scan --client cursor --client zed

Server ids are namespaced by client (claude-code:github, cursor:github) so one lockfile can hold servers from several clients without collisions.

Clients toolprint knows

Scanned (JSON configs): claude-code · claude-desktop · cursor · vscode · windsurf · zed · gemini-cli · amp · opencode · ibm-bob · pi

Detected but not scanned — their configs are TOML or YAML, which toolprint cannot parse yet: codex · goose · hermes · deepseek

These are reported explicitly:

toolprint: skipped Codex (~/.codex/config.toml): TOML configs are not supported yet — not scanned

A trust tool must never imply coverage it does not have, so an unscannable config is announced rather than omitted. Notes go to stderr, keeping --json and --sarif on stdout clean.

A config that simply has no MCP servers in it — a large settings.json, say — is skipped quietly. That is not a coverage gap; there is nothing there to scan.

The SkillRoute bridge

The client table is vendored from SkillRoute's harness manifests, so toolprint needs no Python and no extra install. If you do have the skillroute CLI, --use-skillroute additionally asks it where clients actually live:

npx toolprint scan --all-clients --use-skillroute

This executes the skillroute binary, so — like --probe — it is opt-in. If the CLI is missing or returns something unexpected, the scan continues on the built-in table and says why. See Integrations.

Skill bundles

npx toolprint scan --skills
npx toolprint scan --skills ./vendor/skills

See Skill Bundles.