Found by driving the published bridges over stdio against all three relayers.
What happens
@mysten-incubation/memwal-mcp@0.0.14-dev.0 serves a 9-tool cold-start list that includes memwal_remember_status. The prod relayer does not implement that tool. Measured:
0.0.14-dev.0 -> PROD
tools/list (cold start) 9 tools ... includes memwal_remember_status
tools/list (after swap) 8 tools ... memwal_remember_status GONE
memwal_remember_status -> MCP error -32602: Tool memwal_remember_status not found
0.0.14-dev.0 -> DEV (control, relayer has the tool)
tools/list (after swap) 9 tools ... includes memwal_remember_status
memwal_remember_status -> "remember job not found: 000...000" (reaches the tool)
So during the cold-start window — before the relayer's tools/list_changed swap — an agent on 0.0.14-dev.0 against prod or staging can call a tool that does not exist there.
Why it matters more than a normal drift
The same run produced this:
0.0.14-dev.0 -> PROD
memwal_remember 90.67s ERROR
Tool error: remember job timed out after 90000ms (job_id=f3430edf-66c8-4b40-b3a9-c9732438768f)
The agent is handed a job_id and told to settle it — and on prod there is no memwal_remember_status to settle it with. The recovery path the message points at does not exist in that channel.
For comparison, 0.0.13 against the same prod relayer returned 34.86s ok with a real blob_id.
Full matrix, same session
| bridge |
relayer |
recall |
remember |
| 0.0.13 |
prod |
2.87s |
34.86s ok |
| 0.0.13 |
staging |
3.88s |
25.92s ok |
| 0.0.13 |
dev |
7.08s |
29.91s ok |
| 0.0.14-dev.0 |
prod |
2.08s |
90.67s ERROR |
| 0.0.14-dev.0 |
staging |
2.73s |
31.41s ok |
| 0.0.14-dev.0 |
dev |
6.48s |
27.47s ok |
The single prod timeout is one sample and could be queue variance rather than a deterministic regression — but the missing status tool is deterministic and verified in both directions.
Suggestions
- Gate the cold-start advertisement of
memwal_remember_status on the relayer actually serving it, or drop it from the static list and let the post-swap list introduce it.
- Do not let a pending/timeout message name a tool that is absent from the current
tools/list.
- More generally: the cold-start list is written against dev's sidecar, but a published bridge is routinely pointed at prod and staging, which lag. Worth asserting in the release check that the static list is a subset of what the oldest supported relayer serves.
Where
packages/mcp/src/auth-required.ts (static cold-start tool definitions)
packages/mcp/src/bridge.ts (the tools/list_changed swap)
services/server/scripts/mcp/tools/remember.ts (the timeout message that names memwal_remember_status)
Found by driving the published bridges over stdio against all three relayers.
What happens
@mysten-incubation/memwal-mcp@0.0.14-dev.0serves a 9-tool cold-start list that includesmemwal_remember_status. The prod relayer does not implement that tool. Measured:So during the cold-start window — before the relayer's
tools/list_changedswap — an agent on0.0.14-dev.0against prod or staging can call a tool that does not exist there.Why it matters more than a normal drift
The same run produced this:
The agent is handed a
job_idand told to settle it — and on prod there is nomemwal_remember_statusto settle it with. The recovery path the message points at does not exist in that channel.For comparison,
0.0.13against the same prod relayer returned34.86s okwith a realblob_id.Full matrix, same session
The single prod timeout is one sample and could be queue variance rather than a deterministic regression — but the missing status tool is deterministic and verified in both directions.
Suggestions
memwal_remember_statuson the relayer actually serving it, or drop it from the static list and let the post-swap list introduce it.tools/list.Where
packages/mcp/src/auth-required.ts(static cold-start tool definitions)packages/mcp/src/bridge.ts(thetools/list_changedswap)services/server/scripts/mcp/tools/remember.ts(the timeout message that namesmemwal_remember_status)