Skip to main content
Discover MCP servers, hooks, and telemetry configuration across your harness configs. scan is read-only — it shows what you have without modifying any files. To install session telemetry hooks, use observal doctor patch. MCP commands and URLs are never rewritten.

Synopsis

Use --inventory for local-only, bounded harness evidence. It returns a versioned JSON document with inventory and diagnostics, or a table showing the harness, scope, component type, name, and privacy-safe source path. URLs have userinfo, fragments, and all query parameters removed; suspicious credentials in the URL path make a launch incomplete. Token values, raw prompts, and command arguments are not printed. Unrecognized or unsafe launches have launch: null and a diagnostic, not a guessed Registry identity. An empty inventory succeeds with an empty list. It never contacts Observal, writes a lockfile, or submits a component. Package-manager installations alone are not scanned or treated as configured capabilities. Component names and source filenames are user-supplied, so review the output before sharing it externally. To find approved resources for a task, use observal discover. To submit something you found locally, you choose to run the corresponding observal registry <type> submit --draft command; inventory never starts that workflow.

Options

If you run observal scan with no flags, it auto-detects every installed harness and scans each in turn.

What it does

  1. Finds MCP config files:
    • Claude Code: ~/.claude/settings.json
    • Kiro: .kiro/settings/mcp.json (project) or ~/.kiro/settings/mcp.json (home)
    • Cursor: .cursor/mcp.json
    • Copilot: .vscode/mcp.json
    • Antigravity: .agents/mcp_config.json or ~/.gemini/antigravity-cli/mcp_config.json
    • Goose: ~/.config/goose/config.yaml (the extensions key)
    • Copilot CLI: ~/.copilot/mcp-config.json
  2. Lists every MCP server found and its direct command or URL.
  3. Reports installed session telemetry hooks.
No files are written and no registration happens. Default table-mode scan may query the Registry when authenticated to show unregistered names; use --inventory for a guaranteed local-only scan.

Example

Output:

Scoping to a single harness

What to do next

Once you see what’s installed, instrument it:

Exit codes