deps!: migrate MCP adapter to @modelcontextprotocol/sdk v2 - #156
Merged
Conversation
✅ Deploy Preview for devfra ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Migrates the MCP adapter from the v1
@modelcontextprotocol/sdkpackage 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 theClient(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
@modelcontextprotocol/sdk→@modelcontextprotocol/server+@modelcontextprotocol/client(^2.0.0). The optional peer dependency is now@modelcontextprotocol/server;@modelcontextprotocol/clientis a test-only devDependency.Server/ transports /isInitializeRequestfrom@modelcontextprotocol/server(and/server/stdio). The web-standard HTTP transport is retained since h3 hands us webRequest/Response.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.projectToolis typedTool.Client/StreamableHTTPClientTransport/InMemoryTransportimport from@modelcontextprotocol/client.docs/**and the devframe skill.Verification
pnpm typecheck,pnpm lint,pnpm build, andpnpm test(972 tests / 90 files) all pass.This PR was created with the help of an agent.