Skip to content

feat: migrate from mark3labs/mcp-go to toolhive-core/mcpcompat (go-sdk)#5729

Open
JAORMX wants to merge 3 commits into
mainfrom
feat/remove-mcp-go
Open

feat: migrate from mark3labs/mcp-go to toolhive-core/mcpcompat (go-sdk)#5729
JAORMX wants to merge 3 commits into
mainfrom
feat/remove-mcp-go

Conversation

@JAORMX

@JAORMX JAORMX commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

What this does

Pure import swap: every github.com/mark3labs/mcp-go/{mcp,server,client,client/transport} import is replaced with the go-sdk-backed compatibility shim in toolhive-core (github.com/stacklok/toolhive-core/mcpcompat/*). No call-site logic changes — the shim mirrors mcp-go's API. This moves ToolHive's MCP protocol handling onto the official modelcontextprotocol/go-sdk, and removes the direct github.com/mark3labs/mcp-go dependency from ToolHive (it remains only as a transitive // indirect requirement pulled in by other modules).

Dependency

Pinned to the released github.com/stacklok/toolhive-core v0.0.27, which includes stacklok/toolhive-core#150 (the mcp-go → go-sdk compatibility shim) plus all the incremental shim fixes that were previously picked up as pre-release commits.

Verification

All run against toolhive-core v0.0.27:

go build ./...   → EXIT=0
go vet ./...     → EXIT=0
task test        → EXIT=0 (unit tests, excluding e2e)
task lint        → 0 issues

Remaining transitive mcp-go dependency

mark3labs/mcp-go stays as a // indirect requirement because toolhive-core/registry/types still references mcp.Tool directly (publisher_provided_types.go, registry_types.go). That is a toolhive-core-side change, tracked separately. No ToolHive source imports mcp-go directly.

Known behavioral caveats (inherited from the shim)

  1. SendNotificationToAllClients in the stdio bridge forwards only progress/message notifications — tools/list_changed and other methods are dropped because go-sdk v1.6.1 exposes no public generic notification sender.
  2. Per-session dynamic tool dispatch (vMCP projection) needs runtime validation.
  3. SessionIdManager isn't yet wired to go-sdk's session lifecycle.
  4. Transport 401→auth-error mapping is best-effort.

@github-actions github-actions Bot added size/M Medium PR: 300-599 lines changed and removed size/M Medium PR: 300-599 lines changed labels Jul 6, 2026
@codecov

codecov Bot commented Jul 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 70.77%. Comparing base (9662681) to head (3156cb9).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5729      +/-   ##
==========================================
+ Coverage   70.70%   70.77%   +0.06%     
==========================================
  Files         683      683              
  Lines       69194    69194              
==========================================
+ Hits        48923    48970      +47     
+ Misses      16687    16625      -62     
- Partials     3584     3599      +15     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions github-actions Bot added size/M Medium PR: 300-599 lines changed and removed size/M Medium PR: 300-599 lines changed labels Jul 6, 2026
@JAORMX JAORMX force-pushed the feat/remove-mcp-go branch from 651a3fe to 8201028 Compare July 6, 2026 14:25
@github-actions github-actions Bot added size/M Medium PR: 300-599 lines changed and removed size/M Medium PR: 300-599 lines changed labels Jul 6, 2026
rdimitrov
rdimitrov previously approved these changes Jul 6, 2026
JAORMX and others added 3 commits July 7, 2026 14:02
Swaps all github.com/mark3labs/mcp-go/{mcp,server,client,client/transport}
imports to the go-sdk-backed compatibility shim in toolhive-core
(github.com/stacklok/toolhive-core/mcpcompat/*). No call-site logic changes —
the shim mirrors mcp-go's API. This moves ToolHive's MCP protocol handling
onto the official modelcontextprotocol/go-sdk.

Depends on stacklok/toolhive-core#150; the toolhive-core dependency is pinned
to that branch commit and should be bumped to the released version once #150
merges.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bump github.com/stacklok/toolhive-core to the mcpcompat shim commit that
closes the server/client compatibility gaps exercised by the vMCP and MCP
test suites (pulls the required cel-go v0.29.1). Also fix gci import
grouping in three files flagged by lint (toolhive-core shares the
github.com/stacklok/toolhive prefix, so its imports group with toolhive's).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
JAORMX added a commit to stacklok/toolhive-core that referenced this pull request Jul 7, 2026
Stop registry/types from importing github.com/mark3labs/mcp-go/mcp
directly. Switch both publisher_provided_types.go and registry_types.go
to import the mcpcompat/mcp shim (aliased as `mcp`), whose Tool type is
a type alias for mcpgo.Tool — identical type, wire-compatible,
source-compatible. Zero call-site changes.

This was the last non-shim import of mcp-go in the module; the only
remaining reference is the intentional chokepoint in mcpcompat/mcp/alias.go.

Unblocks stacklok/toolhive#5729 from carrying mcp-go as a transitive
indirect dep.
@JAORMX JAORMX force-pushed the feat/remove-mcp-go branch from 200d32f to 3156cb9 Compare July 7, 2026 11:41
@github-actions github-actions Bot added size/M Medium PR: 300-599 lines changed and removed size/M Medium PR: 300-599 lines changed labels Jul 7, 2026
@JAORMX JAORMX marked this pull request as ready for review July 7, 2026 11:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/M Medium PR: 300-599 lines changed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants