You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Parity with protoc-gen-go-mcp v0.3.0 (Topeka Go → Rust) #2
Port Topeka's Go plugin, stablekernel/protoc-gen-go-mcpv0.3.0 (reference commit 9e072f9), to Rust. Parity means that, for the same .proto, the Rust plugin generates an MCP server exposing the same tools with the same names, descriptions and input schemas, and the server behaves the same on tools/call: argument and result encoding, error handling and validation.
Protobuf/gRPC stack: prost + tonic + pbjson. The generated MCP code sits next to the output of protoc-gen-prost, protoc-gen-tonic and protoc-gen-prost-serde. pbjson's protojson-compatible serde is the counterpart of Go's protojson.
Argument validation: rmcp, unlike the Go SDK, does not validate tool arguments against inputSchema. The generated code validates them itself with the jsonschema crate before decoding, so invalid arguments become a tool error and never reach the backend, as they do in Go.
Plan (sub-issues, in dependency order)
The sub-issues are listed under this issue, with blocked by links between them. Roughly:
Scaffold: Cargo workspace, plugin skeleton, example crate, CI basics.
In parallel: comment and naming helpers; JSON Schema builder; release-please and release binaries.
Codegen: tool definitions and the server skeleton, then the golden test and the CI regeneration check, then the handlers.
The end-to-end test with a cross-implementation parity fixture, and the mcp-vibe example.
README parity.
Out of scope (matches Go 0.3.0)
Streaming RPCs (skipped by the generator, as in Go).
MCP resources and prompts.
Publishing to crates.io, and a build.rs (prost-build/tonic-build) integration API. Possible follow-ups.
Parity was verified against a live Go 0.3.0 mcp-vibe. For the same stdio session:
serverInfo matches.
tools/list (all 5 tools) is JSON-identical.
tools/call result texts, including the gRPC error text, are identical.
Documented differences (README → Differences from protoc-gen-go-mcp):
Any is pbjson-shaped.
Non-finite floats in results are null.
There's no editions support (prost-reflect and protoc-gen-prost don't support editions).
Left for a human:
Add TOKEN_BOT_GITHUB_TOKEN to the release environment. release-please fails on every push to main until then. After that it opens the 0.1.0 release PR, and merging that triggers the 6-platform binary build, which already passed a dry run.
Activity
chore: add agent guidance and sf-factory config (#15)
erikist commentedon Oct 10, 2026
🔍 Status 2026-10-10: the parity milestone is implemented. Every factory issue is merged:
mcp-vibeParity was verified against a live Go 0.3.0
mcp-vibe. For the same stdio session:serverInfomatches.tools/list(all 5 tools) is JSON-identical.tools/callresult texts, including the gRPC error text, are identical.Documented differences (README → Differences from protoc-gen-go-mcp):
Anyis pbjson-shaped.null.Left for a human:
TOKEN_BOT_GITHUB_TOKENto thereleaseenvironment. release-please fails on every push tomainuntil then. After that it opens the 0.1.0 release PR, and merging that triggers the 6-platform binary build, which already passed a dry run.main.~/.cargo/registry.The
sf-rmcpfactory is drained (idle, nothing dispatching).