Skip to content

MCP server and client inventory

Repository snapshot: 2026-10-07, slice 1 of the v2 migration; the tasks and elicitation section was added 2026-10-24. The migration target is protocol revision 2025-11-25 and the split TypeScript SDK at exact stable 2.4.0. The parent ticket’s alpha warning is stale: the npm registry lists stable 2.0.0 through 2.4.0. Protocol revision and SDK major are independent; v1 can already negotiate 2025-11-25.

The inventory covers tracked manifests, npm and Bun lockfiles, SDK imports, vendored bundles, MCP launch configurations and the policy registry. Runtime user configuration and upstream server source are not shipped here: unknown is not a compliance claim. Policy counts below are enumerated policy tools, not a live tools/list; aliases share one implementation. The first four production implementations have source-derived counts instead.

Server / clientOwner and repository evidenceSDK versionTransportTool countMigration risk / disposition
luna-correlate servermarketplace/plugins/luna-correlate/{package.json,bun.lock,server.ts,.mcp.json}Before: monolith 1.32.1; pilot target: split server 2.4.0stdio, Bun5Low: low-level handlers retain JSON schemas, custom validation and text/error output. Exact pin; regression initializes, lists tools, calls offline series.load, rejects bad arguments/unknown tools and checks EOF.
jira serverscripts/jira/{package.json,package-lock.json,src/mcp.ts}; CLI mcp verbBefore: monolith 1.32.1; now split server 2.4.0 (spec 2025-11-25)stdio, Node14Migrated, low-level Server kept: Jira writes, attachments, transition and roadmap dispatch and typed errors unchanged.
telegram servermarketplace/plugins/telegram-himmel/{package.json,bun.lock,server.ts,.mcp.json}Before: monolith 1.32.1; now split server 2.4.0stdio, Bun; Telegram network I/O is not MCP transport4Migrated, low-level Server kept: tools, schemas, notifications, poller gate and EOF shutdown unchanged. tests/stdio.test.ts drives a non-owner session with a dummy token and a dead proxy, no live bot.
Obsidian Local REST API embedded servertemplates/luna-second-brain/.obsidian/plugins/obsidian-local-rest-api/{main.js,manifest.json}; plugin 5.4.0Already split @modelcontextprotocol/server, core, node bundle; exact SDK release not recordedStreamable HTTP (NodeStreamableHTTPServerTransport), sessionful/sessionless17 base + 2 signed-URL tools + 1 event-listener tool when enabled; extensions can add moreMedium: already v2 API (McpServer.registerTool, Standard Schema adapter). Re-vendor upstream, do not codemod compiled bundle; unknown exact pin needs upstream evidence.
fake-mcp test serverscripts/testing/fixtures/fake-mcp-server.mjsNone, handwritten JSON-RPCnewline-delimited stdio, Node1 (fake_echo)No dependency migration. Credential-free fixture echoes requested protocol; default 2025-06-18 is not a supported-version negotiation implementation.
stdio regression test clientmarketplace/plugins/luna-correlate/tests/stdio.test.tsNone, handwritten JSON-RPC test clientstdio subprocessCalls the pilot’s 5-tool listNo SDK object crossing. Uses literal 2025-11-25 initialize and offline fixtures.
Claude Code / Codex harness clientsscripts/mcp/build-mcp-profiles.mjs, scripts/lanes/plugin-profiles.json, scripts/codex/External binaries; no in-repo SDK client importsConfigured stdio / HTTPServer-dependentGenerated config is not an SDK client implementation. Upgrade client binaries separately; do not infer SDK from CLI version.
qmd / plugin_qmd_qmdmarketplace/plugins/qmd/.mcp.json, policy registryExternal service, exact SDK unknownHTTP http://localhost:8181/mcp4 policy entriesExternal package upgrade, not a repo codemod. Plugin and user registrations alias the same service.
shadcn / plugin_shadcn-mcp_shadcnmarketplace/plugins/shadcn-mcp/.mcp.jsonExternal shadcn@4.21.0; SDK unknownstdio (npx … mcp)7 policy entriesPin is application version, not SDK version; upstream dependency audit needed.
playwright / plugin_playwright_playwrightscripts/lanes/plugin-profiles.json mcpCatalog; profile generator; policy registryExternal @playwright/mcp@0.0.83 in worker-e2e; generator fallback uses @latest; SDK unknownstdio (npx)25 policy entriesBrowser side effects; audit upstream and resolve mutable fallback separately.
chrome-devtoolsscripts/mcp/build-mcp-profiles.mjs, .claude/mcp-profiles/profiles.jsonExternal chrome-devtools-mcp@latest; SDK unknownstdio (npx)Unknown, not enumeratedMutable upstream/browser tooling; no source codemod here.
context7 / remote / plugin / claude_ai_Context7Profile generator, profile definitions, policy registryHosted or external plugin; SDK unknownRemote HTTP https://mcp.context7.com/mcp for generator; connector/plugin transport not recorded2 policy entries eachHosted service cannot be migrated by this repo; query text egress remains governed by policy.
obsidian-vaultProfile definitions, policy registryExternal mcp-obsidian, Python SDK exact version unknownLocal server; on demand via the vault profile (spec in the on-demand registry, not ~/.claude.json)15 policy entriesREST API compatibility and vault-write safety; separate from embedded Obsidian server above.
plugin_obsidian-second-brain_vaultLane plugin profiles and policy registryExternal plugin SDK unknown; source not vendored hereNot recorded in tracked launch config12 policy entriesPlugin-owned migration; strict profiles may strip its server while keeping skills.
graphifyInstaller/upstream registration, policy registryExternal Python graphify/MCP dependency; exact SDK unknownLocal graph server; on demand via the graph profile (installer registers it in the on-demand registry, not ~/.claude.json)10 policy entriesPython service is outside TS codemod scope; preserve graph/data routing.
onepassword.claude/mcp-profiles/profiles.jsonUser-scope external SDK unknownResolved from user configurationUnknown, not enumeratedSecrets integration; operator-owned upgrade, not a repo migration.
tokensavePolicy registry and fleet cleanup referencesExternal SDK unknownLocal service; transport not pinned here6 policy entriesExternal code-index server, no implementation in tracked source.
himmelprobePolicy registryUnknown; no tracked implementation foundNot recorded1 policy entryRegistry entry alone is not evidence of an installed server.
claude_ai_Atlassian_MCP / plugin_atlassian_atlassianPolicy registryHosted / external SDK unknownConnector/plugin transport not recorded7 connector policy entries; plugin unenumeratedPrefer Jira CLI; hosted/backend policy is independent of SDK migration.
claude_ai_Claude_DocsPolicy registryHosted SDK unknownConnector transport not recorded8 policy entriesProvider-owned; no local codemod.
claude_ai_GmailPolicy registryHosted SDK unknownConnector transport not recorded30 policy entriesProvider-owned; sending/deleting policy unchanged.
claude_ai_Google_CalendarPolicy registryHosted SDK unknownConnector transport not recorded9 policy entriesProvider-owned; no local codemod.
claude_ai_Google_DrivePolicy registryHosted SDK unknownConnector transport not recorded11 policy entriesProvider-owned; sharing/deleting policy unchanged.
claude-in-chromePolicy registryExternal SDK unknownBrowser integration; transport not pinned here11 policy entriesOperator browser and arbitrary-JS surface; no local source migration.
plugin_builder-visual_agent-native-dispatchPolicy registryHosted Builder.io SDK unknownHosted transport not recordedUnknown, unenumeratedProvider-owned; egress guard remains authoritative.
himmel-bus serverImplemented: marketplace/plugins/himmel-bus/server/index.mjsSplit server/client 2.4.0 (exact pin)stdio, Node2 (send, read)New-on-v2, not a remaining v1 migration.

Tasks and elicitation (protocol 2026-07-28)

Target row: protocol revision 2026-07-28 adds tasks and elicitation. The 2026-10-24 audit recorded that tasks need a 2026-07-28 connection and a Claude Code client of 2.1.304 or later (this station runs 2.1.310); neither is verified against the specification here. The 2025-11-25 migration target above is unchanged; 2026-07-28 is the next target, not yet adopted. Nothing here is a live probe: a cell is unverified unless a source file is named. The “No” cells mean the inspected local source does not use tasks or the 2026-07-28 input-required elicitation flow; external and hosted servers stay unverified.

ServerTasksElicitationEvidence
qmd (fork)Possible: SDK 2.3.1 bundles 2026-07-28 code; not yet returned from a queryUnverifiedA query returning a task is not yet verified
himmel-busNo: send and read are plain callsNomarketplace/plugins/himmel-bus/server/index.mjs, SDK 2.4.0
jira MCPNo: 14 plain tool callsNoscripts/jira/src/mcp.ts, SDK 2.4.0; not registered on this station
luna-correlateNo: 5 plain tool callsNomarketplace/plugins/luna-correlate/server.ts, SDK 2.4.0
graphify MCPUnverifiedUnverifiedExternal Python server, SDK unknown
obsidian-vaultUnverified; pins mcp 1.28.1 (v1), so unlikelyUnverifiedExternal mcp-obsidian
context7UnverifiedUnverifiedHosted service
AtlassianUnverifiedUnverifiedHosted connector or plugin; prefer the Jira CLI

Blockers

  • Per the audit, a subagent’s MCP calls do not become tasks; whether a server may still create one depends on the client advertising task support and the server’s decision, which is unverified here.
  • Per the audit, claude -p without --output-format stream-json gets no tasks; this is unverified against the Claude CLI reference.
  • claude --bg and third-party-provider sessions are pending the probe in HIMMEL-7304.

Pilot migration

The official @modelcontextprotocol/codemod@2.3.1 v1-to-v2 . is run at the pilot package root, first with --dry-run. It replaces the server/stdio imports and schema-constant handler registration with literal method names (tools/list, tools/call). Keep the low-level Server: replacing it with high-level McpServer.registerTool would also change schema validation and unknown-tool error dispatch, contrary to this pilot’s behavior-preservation contract. The five JSON schemas and business logic remain unchanged.

The codemod emits a caret dependency; tighten it to exact 2.4.0, regenerate bun.lock, and remove the v1 monolith only after no imports remain. The plugin manifest advances from 0.2.6 through 0.2.7 and 0.2.8 to 0.2.9 (schema-baseline and warm-upgrade review fixes); the existing wire server identity is intentionally unchanged. Tests use no client SDK and never pass objects between SDK majors. Startup always refreshes dependencies with bun install --frozen-lockfile --no-summary, sending installer diagnostics to stderr so stdout remains JSON-RPC-only. An existing node_modules directory is not evidence that the new dependency is installed. The stdio regression starts an isolated package with an existing but empty dependency directory. Dependency installation may contact the package registry; it is separate from tool egress. Only factors.cache retains the existing public-network tool path; the new stdio test calls no network tool.

Staged completion

  • Jira CLI server migration (done, #2140).
  • telegram-himmel server migration (done, #2144).
  • Doctor/CI lint against new v1 dependencies/imports, with explicit vendored/external policy (done, see below).

The v1 gate

bash scripts/lint/check-mcp-sdk-v1.sh refuses a tracked package.json dependency on, a lockfile entry for (npm, bun, yarn, pnpm; direct or transitive), or an import/require of @modelcontextprotocol/sdk. It runs as the no-mcp-sdk-v1 pre-commit hook, as doctor row C58-mcp-sdk-v1 (WARN), and scripts/lint/test-check-mcp-sdk-v1.sh runs it on the real tree in the shell suite. Every first-party server is already on v2, so the gate is global.

Vendored third-party bundles (*/.obsidian/plugins/*) are not scanned as source: a bundle embedding the v1 monolith is refused, and one embedding the v2 packages prints a NOTE that its exact version is unknown. Externally configured servers (npx, hosted, .mcp.json) are not scanned; the gate prints a NOTE saying so. Neither is ever reported as compliant.

Slice 1 does not complete the migration. Exact unknown external/bundled versions are not silently counted as compliant.

Reproduce the inventory

From the repository root, inspect git grep -n @modelcontextprotocol/ and git ls-files '*package.json' '*bun.lock' '*package-lock.json' '*mcp*'. Read the embedded bundle’s node_modules/@modelcontextprotocol/… comments, this.tool registrations, and HTTP transport construction; do not execute it outside Obsidian. Cross-check .mcp.json, .claude/mcp-profiles/profiles.json, scripts/mcp/build-mcp-profiles.mjs, scripts/lanes/plugin-profiles.json and scripts/guardrails/mcp-policy.json. There are no tracked production TS SDK client imports at this snapshot.

Run the pilot through bash scripts/plugin-test.sh luna-correlate, which bootstraps dependencies before bun test. Record actual RED/GREEN evidence in the PR/handover; this inventory is not a claim that an unrun test passed.

References: official v1-to-v2 migration guide, server package registry, MCP specification 2025-11-25.