Skip to content

Merge upstream: streamable HTTP transport, library refactor, string64 - #13

Merged
codebutler merged 7 commits into
masterfrom
dbak/merge-upstream-streamable-http
Aug 4, 2026
Merged

Merge upstream: streamable HTTP transport, library refactor, string64#13
codebutler merged 7 commits into
masterfrom
dbak/merge-upstream-streamable-http

Conversation

@DanielPBak

@DanielPBak DanielPBak commented Jul 28, 2026

Copy link
Copy Markdown

Merges adiom-data/grpcmcp master (4 commits) into our fork, preserving all fork features.

From upstream

  • Streamable HTTP MCP transport (-transport http|sse, http is default when hostport is set) — prerequisite for retiring the /sse endpoint and the local sse-proxy shim
  • Library refactor: core moved into a grpcmcp package usable as an embedded Go library
  • --string64: expose 64-bit int fields as strings only in JSON schemas
  • Dependency updates (mcp-go v0.54.1)

Fork features preserved

  • --require-method-option and --short-names/--very-short-names now plug in via new Config.MethodFilter and Config.ToolName hooks
  • --forward-operator-identity reworked from an SSE context func to a ToolHeaderProvider reading the inbound request header — now works on both SSE and streamable HTTP transports (was SSE-only)
  • int64/uint64 JSON schema bounds stay clamped to MAX_SAFE_INTEGER in non-strict mode

Verified: go vet ./... and go test ./... pass on all packages.

🤖 Generated with Claude Code

https://claude.ai/code/session_015YK7Pua7bJCJYXzgqmGurD

Mark C and others added 7 commits May 29, 2026 19:01
In SSE mode, capture the X-Operator-Identity header (minted by a trusted
edge proxy after verifying the operator's client cert) from each inbound
message request and attach it as metadata on the outbound gRPC call, so
the backend can attribute agent calls to the human operator.
…tring64

Adopts upstream's grpcmcp library package. Fork features are preserved:
- --require-method-option and --short-names/--very-short-names now plug in
  via new Config.MethodFilter and Config.ToolName hooks
- --forward-operator-identity reworked from an SSE context func to a
  ToolHeaderProvider reading the inbound request header, so it works on
  both SSE and streamable HTTP transports
- int64/uint64 JSON schema bounds stay clamped to MAX_SAFE_INTEGER in
  non-strict mode

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015YK7Pua7bJCJYXzgqmGurD
@codebutler
codebutler merged commit efef800 into master Aug 4, 2026
1 check passed
codebutler added a commit that referenced this pull request Aug 4, 2026
Periodically re-runs gRPC reflection (every 5 minutes when `-reflect` is set) and atomically replaces the MCP tool set via `SetTools`, so new backend RPCs appear in jarvis without restarting grpcmcp. Enables `WithToolCapabilities` so clients receive `tools/list_changed` notifications.

**Reworked on top of #13** (upstream library refactor): extracts `grpcmcp.Tools()` from `NewServer` so the refresh loop can rebuild the tool set through the same code path as initial registration, and adds `Config.ServerOptions` for pass-through server options. Also extracts the short-name collision prescan into `buildToolNamer` so refreshes recompute collisions against the new schema.

Stacked on #13 — will retarget to master once it merges.

Verified: `go vet ./...` and `go test ./...` pass on all packages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_015YK7Pua7bJCJYXzgqmGurD
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