Skip to content

deps!: migrate MCP adapter to @modelcontextprotocol/sdk v2 - #156

Merged
antfu merged 1 commit into
mainfrom
deps/mcp-sdk-v2
Aug 2, 2026
Merged

deps!: migrate MCP adapter to @modelcontextprotocol/sdk v2#156
antfu merged 1 commit into
mainfrom
deps/mcp-sdk-v2

Conversation

@antfubot

@antfubot antfubot commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

What

Migrates the MCP adapter from the v1 @modelcontextprotocol/sdk package to the v2 scoped packages (@modelcontextprotocol/server + @modelcontextprotocol/client).

The v2 SDK splits the monolithic package into scoped packages. This project only uses the low-level Server, its stdio / web-standard streamable-HTTP transports, and the Client (tests), so the surface is small.

Why

Stay current with the actively-maintained MCP SDK line; v1 is superseded by the v2 package split (MCP 2026-07-28 revision).

Changes

  • Deps: catalog @modelcontextprotocol/sdk@modelcontextprotocol/server + @modelcontextprotocol/client (^2.0.0). The optional peer dependency is now @modelcontextprotocol/server; @modelcontextprotocol/client is a test-only devDependency.
  • Adapter source: import Server / transports / isInitializeRequest from @modelcontextprotocol/server (and /server/stdio). The web-standard HTTP transport is retained since h3 hands us web Request/Response.
  • Handler registration: the four low-level setRequestHandler(Schema, …) calls now use v2's method-string form (tools/list, tools/call, resources/list, resources/read) — the v1 schema constants were removed in v2.
  • Types: v2 spec-types handler returns, so projectTool is typed Tool.
  • Tests: Client / StreamableHTTPClientTransport / InMemoryTransport import from @modelcontextprotocol/client.
  • Docs & skill: updated the peer-dependency name across docs/** and the devframe skill.

Verification

pnpm typecheck, pnpm lint, pnpm build, and pnpm test (972 tests / 90 files) all pass.


This PR was created with the help of an agent.

@netlify

netlify Bot commented Aug 1, 2026

Copy link
Copy Markdown

Deploy Preview for devfra ready!

Name Link
🔨 Latest commit dcf3446
🔍 Latest deploy log https://app.netlify.com/projects/devfra/deploys/6a6e7097c526720009089ead
😎 Deploy Preview https://deploy-preview-156--devfra.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@antfubot antfubot changed the title deps: migrate to @modelcontextprotocol/sdk v2 deps!: migrate MCP adapter to @modelcontextprotocol/sdk v2 Aug 1, 2026
@antfu
antfu merged commit eebdb13 into main Aug 2, 2026
12 checks passed
antfubot added a commit that referenced this pull request Aug 2, 2026
Reconcile MCP SDK v2 migration (#156) with Standard Schema support:
keep both the new @modelcontextprotocol/server Tool import and the
@standard-schema/spec import in build-server, and add @standard-schema/spec
alongside the v2 MCP catalog entries.
antfubot added a commit that referenced this pull request Aug 3, 2026
main landed two breaking changes this branch didn't know about:
- deps!: migrate MCP adapter to @modelcontextprotocol/sdk v2 (#156) —
  the monolithic package split into @modelcontextprotocol/server +
  @modelcontextprotocol/client; setRequestHandler moved from imported
  schema constants to method-string form.
- feat(rpc)!: support Standard Schema for RPC definitions (#157) —
  RpcArgsSchema/RpcReturnSchema key off StandardSchemaV1 instead of
  valibot's GenericSchema; @valibot/to-json-schema dropped; single-arg
  JSON-Schema unwrapping removed (always arg0/arg1 now).

Adaptations:
- connect.ts: import from @modelcontextprotocol/server(+/stdio) and
  @modelcontextprotocol/client (dynamic, still peer-optional); handler
  registration uses 'tools/list'/'tools/call' method strings.
- devframe's package.json: @modelcontextprotocol/client added as an
  optional peer (connect.ts uses it to dial discovered instances) and
  bundled correctly via tsdown's onlyBundle (client pulls in
  @modelcontextprotocol/core, pkce-challenge, eventsource[-parser],
  jose — all now declared).
- Renumbered DF0042 (registry write failure) and DF0043 (missing MCP
  SDK) to DF0045/DF0046 — both collided with codes main allocated to
  unrelated diagnostics (capabilities.build:false; RPC arg/return
  validation) while this branch was in flight.
- AgentTool/AgentToolInput.args and DevframeCommandAgentOptions.args
  retyped from valibot's GenericSchema[] to StandardSchemaV1[].
  host-agent.ts no longer eagerly converts args to inputSchema (that
  module is gone); a kind: 'tool' entry now carries args raw, mirroring
  how an RPC-backed tool defers to ctx.rpc.definitions — the MCP
  adapter's computeInputSchema converts either on demand.
- hub's commands→agent bridge: coercePositionalArgs no longer detects
  a single-object schema to unwrap (that convention is gone project-
  wide); always maps arg0/arg1/... positionally, matching RPC-backed
  tool coercion.
- Tests updated for the new args-carried-raw contract, plus a new
  end-to-end MCP-adapter test proving Standard Schema args convert to
  JSON Schema over the real wire (arg0-keyed, not unwrapped).
- Removed the now-fully-redundant devframe/utils/valibot-json-schema
  module and its registrations (superseded by the upstream
  to-json-schema.ts, which already covers every validator via
  ~standard.jsonSchema, degrading to a permissive object schema for
  validators without one — e.g. valibot).

Verified: 1020 unit tests, typecheck (21/21), lint, full build, and
17/17 Playwright e2e (incl. both connector round-trips through the
real stdio/HTTP MCP v2 pipeline) all green.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants