MCP Tool Name Portability Checker

Paste an MCP server's tools/list result, or a plain list of tool names, and see name by name which documented consumer rule accepts it as is: the MCP spec, the Anthropic Messages API, OpenAI Chat Completions and the Gemini API. It flags names a client prefix pushes over a length limit and names that collide once dots, colons and spaces are replaced, and it builds a deterministic, collision-free rename map. Everything runs in your browser.

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).

Rules to check

Client prefix (optional)

Claude Code's hooks documentation says "MCP tools follow the naming pattern mcp__<server>__<tool>". Its MCP documentation gives the plugin form as mcp__plugin_<plugin-name>_<server-name>__<tool-name>, "where any character outside A-Z, a-z, 0-9, _, and - is replaced with _". The rename map below uses that same replacement rule. This page states no Claude Code length limit and no renaming behaviour for servers outside plugins, because the documentation read states neither. Sources: https://code.claude.com/docs/en/hooks and https://code.claude.com/docs/en/mcp

Paste a tools/list result or one name per line.

Results

Each name against each selected rule

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) quotes tools.26.custom.name: String should match pattern '^[a-zA-Z0-9_-]{1,64}$', and anthropics/claude-code#68850 (filed 2026-06-16) quotes tools.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
Self test results
CheckExpectedGotResult