{"record":{"id":"b32fa906d8fb3ca4","repo":"modelcontextprotocol/servers","slug":"unknown-tool-name-b32fa9","errorCode":null,"errorMessage":"Unknown tool: {name}","messagePattern":"Unknown tool: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/time/src/mcp_server_time/server.py","lineNumber":209,"sourceCode":"                    if not timezone:\n                        raise ValueError(\"Missing required argument: timezone\")\n\n                    result = time_server.get_current_time(timezone)\n\n                case TimeTools.CONVERT_TIME.value:\n                    if not all(\n                        k in arguments\n                        for k in [\"source_timezone\", \"time\", \"target_timezone\"]\n                    ):\n                        raise ValueError(\"Missing required arguments\")\n\n                    result = time_server.convert_time(\n                        arguments[\"source_timezone\"],\n                        arguments[\"time\"],\n                        arguments[\"target_timezone\"],\n                    )\n                case _:\n                    raise ValueError(f\"Unknown tool: {name}\")\n\n            return [\n                TextContent(type=\"text\", text=json.dumps(result.model_dump(), indent=2))\n            ]\n\n        except Exception as e:\n            raise ValueError(f\"Error processing mcp-server-time query: {str(e)}\")\n\n    options = server.create_initialization_options()\n    async with stdio_server() as (read_stream, write_stream):\n        await server.run(read_stream, write_stream, options)\n","sourceCodeStart":191,"sourceCodeEnd":221,"githubUrl":"https://github.com/modelcontextprotocol/servers/blob/76d64c822f5125032f89eb71dbdb94e42b434821/src/time/src/mcp_server_time/server.py#L191-L221","documentation":"The time server's call_tool match (server.py:188-209) has a case _ at line 208-209 raising ValueError('Unknown tool: {name}') for any name other than get_current_time or convert_time. As with 44-47, this is caught and re-wrapped by error 49 before reaching the client.","triggerScenarios":"Invoking a tool name the time server does not offer: a typo ('get_time'), an older/newer name, or a name that belongs to a different MCP server.","commonSituations":"Client hardcoded a stale tool name; version skew between client and mcp-server-time; a tool name intended for the git server routed here by mistake.","solutions":["Use only names advertised by list_tools (get_current_time, convert_time).","Align client and server versions.","Fix the typo; double-check routing if multiple MCP servers are connected."],"exampleFix":"// before\n//   session.call_tool(\"get_time\", ...)    -> Unknown tool\n// after\n//   session.call_tool(\"get_current_time\", ...)","handlingStrategy":"validation","validationCode":"known = {t.name for t in (await session.list_tools()).tools}\nif name not in known:\n    raise ValueError(f\"{name!r} not offered by time server; choose from {sorted(known)}\")\nawait session.call_tool(name, arguments)","typeGuard":"async def is_known_tool(session, name: str) -> bool:\n    return name in {t.name for t in (await session.list_tools()).tools}","tryCatchPattern":"try:\n    await session.call_tool(name, arguments)\nexcept Exception as e:\n    if \"Unknown tool\" in str(e):\n        # refresh list_tools and retry with a corrected name\n        ...\n    raise","preventionTips":["Use only names advertised by list_tools (get_current_time, convert_time).","Pin client and mcp-server-time versions together.","Verify routing when multiple MCP servers are in play."],"tags":["time","dispatch","version-skew","python"],"backgroundTag":null,"analyzedSha":"76d64c822f5125032f89eb71dbdb94e42b434821","analyzedAt":"2026-08-12T10:02:41.718Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}