Paste tools from OpenAI, Anthropic, Gemini or MCP, even from several servers. Get name errors, weak descriptions, schema mistakes, name collisions and a token estimate per tool.
The linter reads tool definitions in the OpenAI, Anthropic, Gemini or MCP shape and reports name errors, weak descriptions, schema mistakes, name collisions and an estimated token cost for every tool. Names are checked against the rule of the provider you pick: OpenAI Chat Completions allows letters, digits, underscore and dash up to 64 characters, Anthropic the same set up to 128, Gemini adds colon and dot, and the MCP specification says names should be letters, digits, underscore, dash and dot up to 128. A name with a space, such as list files, is an Error for the three providers; for MCP it is a Warning, because the specification words its name rules as SHOULD, not MUST. Descriptions are checked for presence, for sentence count, and for wording that says when to call the tool or what it does not do. Schemas are checked for a top-level object type, required entries that are not properties, empty enums, parameters with no description or no type, and local $ref pointers that lead nowhere.
Paste an object whose keys are server names and whose values are tool lists, and the linter compares names across servers. The MCP specification says tool names should be unique within one server and that a client merging several servers may meet collisions, for example two servers that each expose a search tool, and should prefix names with a server identifier. Here that case is a Collision warning. The same name twice inside one server is an Error. Names that differ only by case or separators, such as getUser and get_user, are a Near-duplicate warning, and names one character apart, such as list_users and list_user, are a note, because a model can pick the wrong one. Identical descriptions on two tools are flagged too, since the model has nothing to tell them apart by.
Each tool is serialized as the compact JSON you pasted and its length in characters is divided by 4 and rounded up. A tool whose JSON is 400 characters is therefore about 100 tokens. This is a rule of thumb, not a tokenizer: real counts depend on the model and on how a provider renders the definition into its prompt. Use it to see which tools are the heaviest and how a list grows, then count exactly with your provider's tool. Definitions are billed as input tokens on every request that includes them, which is why a long list is worth trimming. OpenAI suggests fewer than 20 functions at the start of a turn, as a soft suggestion, and the linter adds a note above that count.
The description checks are heuristics written for this tool, not rules from a provider. Anthropic advises at least 3 to 4 sentences per description; the when-to-use check only looks for common wording, so a good description phrased unusually can still get a note. The linter does not call any API, does not test whether a model picks the right tool, does not check strict-mode rules (the JSON Schema strict mode tool on this site does) and does not convert between formats (the AI tool schema converter does). It reads up to 500 tools and 500,000 characters, and shows the first 600 findings.
OpenAI Chat Completions allows a-z, A-Z, 0-9, underscore and dash, 1 to 64 characters. Anthropic allows the same set up to 128 characters. A dot or space, as in search.docs or list files, is rejected by both, so rename it to search_docs or list_files.
Paste an object that maps each server name to its tools, for example {"github": [...], "docs": {"tools": [...]}}. Any name used by two servers is listed as a Collision with the server names. The usual fix is a prefix such as github_search and docs_search.
The tool estimates each definition as characters divided by 4. A tool of 400 characters counts as about 100 tokens, and the total is the sum. It is an estimate, so confirm with your provider's token counter before you rely on a budget.
Anthropic advises at least 3 to 4 sentences: what the tool does, when to use it and when not to, what each parameter means, and what it does not return. The linter warns on fewer than 3 sentences and notes a missing when-to-use or limits wording.
The required list names a field, such as depth, that is not under properties. A model cannot fill in a field the schema does not define, and strict validators reject the schema. Add the property or remove it from required.
No. They are processed in your browser, in this tab, and no server receives them. The provider you choose is saved in this browser, the tool definitions are not.