MCP tools from locally configured stdio server not exposed to model despite successful connection
Environment
- Claude Code version: CLI on Linux (Ubuntu 22.04, Linux 6.8.0-101-generic)
- Model: claude-opus-4-6
- MCP server: incidentio-mcp-golang (stdio transport, 44 tools)
- Configuration:
~/.claude/settings.jsonundermcpServers
Description
Tools from a locally configured MCP server (stdio transport) are not exposed to the model, even though the server connects successfully. This may relate to #11175.
Steps to Reproduce
- Install the incidentio MCP server:
``bash``
go install github.com/incident-io/incidentio-mcp-golang/cmd/mcp-server@latest
ln -s "$(go env GOPATH)/bin/mcp-server" "$(go env GOPATH)/bin/incidentio-mcp-golang"
- Configure in
~/.claude/settings.json:
``json``
{
"mcpServers": {
"incidentio": {
"command": "incidentio-mcp-golang",
"env": {
"INCIDENT_IO_API_KEY": "<key>"
}
}
}
}
- Start Claude Code (or run
/mcpto reconnect).
/mcpreports: "Reconnected to incidentio" — server connects fine.
- Try to discover or call any incidentio tool — none are available.
Evidence the Server Works Correctly
Manual JSON-RPC testing confirms the server is fully functional:
Initialize response (correct per MCP spec):
{
"capabilities": {"tools": {}},
"protocolVersion": "2024-11-05",
"serverInfo": {"name": "incidentio-mcp-server", "version": "0.1.0"}
}
tools/list response: Returns 44 properly formatted tools (get_incident, list_incidents, create_incident, etc.) with complete inputSchema definitions.
tools/call: Responds correctly when tools are invoked via JSON-RPC directly.
Observed Behavior
ToolSearchwith any query (e.g.,+incidentio,get_incident,select:mcp__incidentio__get_incident) returns no matching deferred tools.- The tools are not available as direct (non-deferred) tools either.
- Plugin MCP servers (Slack, Notion, Atlassian) in the same session all expose their tools correctly via ToolSearch.
Expected Behavior
Tools from locally configured MCP servers should be discoverable and callable, the same as plugin MCP servers.
Workaround
Calling the underlying REST API directly via curl with the API key from the config works as a fallback.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗