Repository navigation
First major release. The tool surface every client sees has changed, hence 1.0.0.
Typed wrapper tools (#39, #42)
- Every downstream tool is exposed as a typed MCP tool named
{server}__{tool}carrying the downstream input schema unchanged, so clients call it with real parameters instead of a JSON-string blob. find_tools(query)searches every registered server and returns typed names and schemas.WrapperMode(Lazy, the default, orEager). Lazy activation is per session: a session starts with eight consumer tools (about 5 KB oftools/list) and grows only as it discovers tools. One client's discovery never enlarges another client's list.- Administrative tools (register, update, unregister, update_skill, regenerate_summary, enable, disable) are hidden in Lazy mode until a session calls
show_admin_tools; they are also callable by name.enable_service/disable_servicemoved from consumer to administrative. RegisteredServer.Idis an immutable identity, backfilled on load. Server names are validated at registration because they become wrapper-name prefixes.viametric tag on tool invocations:wrapperorinvoke_tool.
HTTP host
- Default session mode is
StatefulForInitializeClients(McpAggregator:Http:SessionMode): clients using the legacyinitializehandshake (Claude Desktop through mcp-remote, Claude Code) get anMcp-Session-Idsession so per-session lists andlist_changedwork; 2026-07-28 clients stay stateless as SEP-2567 requires.
Recovery for small models
- Unknown server, unknown tool, wrapper-name-as-toolName, missing or mistyped arguments, and
invoke_toolaimed at the aggregator itself all return actionable error results with the real names or schema. - Runtime hints and the skill document tell a client that rejects a typed name as not found to use
invoke_toolwith the same arguments.
Measurement
tools/McpAggregator.Measureharness and results indocs/measurements/. On 8B-class models the typed surface raised first-call success from 25% / 10% / 0% to 100% / 90% / 40%; details and the Claude Desktop real-host run are indocs/typed-wrapper-tools.md.
Upgrade notes
- Clients that expected
enable_service/disable_servicein the initial list must callshow_admin_toolsor call them by name. - The HTTP host no longer runs stateless by default; set
McpAggregator:Http:SessionModetoStatelessto restore that. - Server names containing
__, longer than 64 characters, or equal to the aggregator's own name are rejected at registration.
🤖 Generated with Claude Code