Input
Only each tool's name is read. Descriptions are never displayed; scanning them for injected instructions is a different job (https://github.com/0xelitesystem/mcp-tool-poisoning-scanner).
Paste a tools/list result or one name per line.
Results
Rename map
A gateway can apply this map to tools/list and reverse it on tools/call. The reverse lookup is needed because the server still expects its original name. This page does not rewrite anyone's traffic. The algorithm: names that already use only A-Z a-z 0-9 _ - and fit are kept, in input order; every other name has each code point outside that set replaced with "_", is cut to fit with an underscore and six hex digits of the FNV-1a 32-bit hash of the original UTF-8 name when too long, and gets "_2", "_3" and so on until it is unique.
The rules, with sources
- MCP spec, 2025-11-25. Advisory (SHOULD). Tool names SHOULD be between 1 and 128 characters in length (inclusive). The following SHOULD be the only allowed characters: uppercase and lowercase ASCII letters (A-Z, a-z), digits (0-9), underscore (_), hyphen (-), and dot (.) Example valid tool names: getUser DATA_EXPORT_v2 admin.tools.list The same text and examples are in the 2026-07-28 revision, which adds that clients or proxies that aggregate tools from several servers "SHOULD implement a disambiguation strategy such as prefixing tool names with a server identifier", and that the serverInfo name "SHOULD NOT be relied upon for disambiguation". Source: https://modelcontextprotocol.io/specification/2025-11-25/server/tools and https://modelcontextprotocol.io/specification/2026-07-28/server/tools
- Anthropic Messages API. Documented. The name of the tool. Must match the regex ^[a-zA-Z0-9_-]{1,128}$. Source: https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools
- OpenAI Chat Completions, tools[].function.name. Documented. The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64. The reference states no minimum, so an empty name is treated as an input error under every rule. The Responses API reference describes the function name only as "The name of the function to call." with no character rule, so this page applies the Chat Completions text and says nothing about how the Responses API behaves. Sources: https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create and https://developers.openai.com/api/reference/resources/responses/methods/create
- Gemini API, FunctionDeclaration.name. Documented. Required. The name of the function. Must be a-z, A-Z, 0-9, or contain underscores, colons, dots, and dashes, with a maximum length of 128. The same reference describes FunctionCall.name and FunctionResponse.name differently: Required. The name of the function to call. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 128. This page does not say which one the service enforces. Source: https://ai.google.dev/api/generate-content
- Observed in public bug reports (not a published rule). The pattern
^[a-zA-Z0-9_-]{1,64}$appears in error strings quoted in public issues: anthropics/claude-code#858 (filed 2025-04-23) quotestools.26.custom.name: String should match pattern '^[a-zA-Z0-9_-]{1,64}$', and anthropics/claude-code#68850 (filed 2026-06-16) quotestools.N.FrontendRemoteMcpToolDefinition.name: String should match pattern '^[a-zA-Z0-9_-]{1,64}$'from Claude Desktop. This page does not say whether the pattern is still current.
Independent and unaffiliated with Anthropic, OpenAI, Google or the MCP project. Rules are quoted from their public documentation.
Self test
Runs on load and on demand (also with ?selftest in the address), against the same code that fills the table: the FNV-1a vectors, the three worked examples exactly, every rule against the edge-length vector, all five input shapes, duplicates, case-only pairs, astral characters, prefixes, a 2,000-name run, and a positive control written to fail.
Not run yet.
Show every check
| Check | Expected | Got | Result |
|---|