Repository navigation
Open the shared board's session for clients that never initialize - #23
Merged
emanuele-em merged 1 commit intoNov 4, 2026
Conversation
BurnOutTrader
marked this pull request as ready for review
November 3, 2026 22:46
BurnOutTrader
marked this pull request as draft
November 3, 2026 23:13
Clients on MCP 2026-07-28, like Claude Code 2.1.309, send no initialize: they name themselves in each request's _meta. A joined kanzo mcp copied the client's initialize into the one it sends the host, so for these clients it sent "params": null, the host refused it, and every tool call came back as "The shared board answered 400." Build that initialize from the request's _meta when there was none, at the newest protocol that still has one. add_comment reads its default author the same way: from _meta on 2026-07-28 requests, which also stops a stateless HTTP client that gives no name being credited as "rmcp", and from initialize otherwise, as before.
BurnOutTrader
force-pushed
the
fix/stateless-clients-on-joined-board
branch
from
November 3, 2026 23:20
5cbe89b to
4726bbc
Compare
BurnOutTrader
marked this pull request as ready for review
November 3, 2026 23:23
ResourcesIf merged, nothing moves by more than noise. Agents
Program
Memory
Speed
Storage
Measured on GitHub's ubuntu-26.04 runner, median of 3 rounds with the builds taking turns. Changes in bold are past noise: 1% for sizes, 5% for memory, 15% for times. Agents' text is in bytes: add an |
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.
Fixes #24.
Clients on MCP
2026-07-28never sendinitialize. They sendserver/discover, then namethemselves in every request's
_meta. Claude Code 2.1.309 is one such client. rmcp 3.8.0serves these clients fine on a private board, but on a joined board every tool call returns
The shared board answered 400.A joined
kanzo mcpopens its session on the host by forwarding the client's owninitialize(peer_info()). These clients never sent one, so Kanzo forwards"params": null. The host answers400 Bad Request: Session ID is required, and answers thesame to
notifications/initializedand to thetools/call.This change builds that
initializefrom the request's_metawhen the client never sentone:
2025-11-25, rmcp'sLATEST_WITH_INITIALIZE, since2026-07-28itself has noinitialize.agentwhen the request gives no name.initializeis forwarded exactly as before.add_commenttakes its default author the same way: from_metaon a2026-07-28request,and from
initializeotherwise, as before. Over HTTP, rmcp gives a stateless request astand-in
initializenamedrmcp, so a stateless client that gave no name was credited asrmcp. It is now credited asagent, as it is over stdio.A joined board still opens one host session per
kanzo mcpprocess, so that session keepsthe name from the process's first call. Clients send the same name on every call, so this
shows only if a client's name changes partway through.
Three new tests run the real server in process:
claude-code. Onmainit gets the 400.initialize, and a different name in_meta, is still credited withits
initializename.agent.Two unit tests pin the forwarded
initialize: its version, its name and capabilities takenfrom
_meta, and a client's owninitializepassed on unchanged.I tested it against a board shared from another machine:
lists the projects.
initializestill works.kanzo mcpruns this build.No MCP reply changes size.
cargo fmt --check,cargo clippy --all-targets -- -D warningsandcargo testpasson the board changes