Very long tool descriptions are paid for in every conversation. Detail that only matters once a parameter is used belongs in that parameter's description.
Supabase MCP server tool surface audit
- Token footprint
- ~3,328
- Tools
- 19
- Findings
- 27
- Scanned
Supabase's MCP server publishes 19 tools. Loaded into a conversation, those definitions occupy roughly 3,328 tokens of context before anyone types a word. MCP Surface Lint scores that surface 96 out of 100 (grade A), with 27 scored findings spread across 3 of the six rule categories.
Its strongest category is surface at 100/100; the weakest is design at 88/100. It is catalogued here under Data and Databases, alongside other servers agents reach for in the same kind of work.
Token footprint
Measured against a 200,000-token window, the surface consumes about 2% of it before the conversation starts, and keeps consuming it on every turn. That averages 175 tokens per tool definition, counted with the o200k_base encoding.
That lands exactly on the Data and Databases median of 3,328 tokens.
Findings
Every finding below names the rule behind it and the tool it fired on.
17 findings come from `schemas/param-desc-missing`. Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes. On this surface it fires on `get_cost`, `confirm_cost` and `list_tables`, among 11 others.
`design/list-no-limit` accounts for 9 findings. A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less. On this surface it fires on `search_docs`, `list_organizations` and `list_projects`, among 6 others.
`descriptions/too-long` contributes one finding. Very long tool descriptions are paid for in every conversation. Detail that only matters once a parameter is used belongs in that parameter's description. On this surface it fires on `search_docs`.
warn 27 findings
Findings that measurably degrade tool selection.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
A list/search tool with no limit or pagination parameter can dump an unbounded payload into the context window. The caller must be able to ask for less.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
Undescribed parameters get filled by guesswork. Every property the model must populate deserves a sentence saying what it means and what shape it takes.
info 1 finding
Advisory only — these deduct nothing from the score.
When the same enum is reused across tools but not every combination is valid (e.g. not every product supports every tier), the schema cannot say so — the model finds out via runtime errors. Flag shared enums for a validity review.
get_cost/properties/type; confirm_cost/properties/type
What this surface does well
Supabase scores a full 100 in surface, naming and annotations, which is to say the surface stays inside a sensible tool and token budget, the tool names follow one convention end to end and read and write operations are machine-distinguishable before a client runs them.
Tool inventory
Cost is concentrated in `query_logs`: 795 tokens, some 24% of everything Supabase ships, while `list_organizations` costs 83. Every tool carries a description, ranging from 31 to 1,809 characters.
All 19 declare annotations, so a client can tell a read from a write before running one. Across the surface, schemas carry 1 top-level parameters on average and reach a maximum depth of 2; 2 tools take no input.
All 19 tools as published, heaviest first. Token counts use the o200k_base encoding and are approximate.
| Tool | Tokens | Description | Params | Required | Depth | Annotations |
|---|---|---|---|---|---|---|
query_logs | 795 | 493 chars | 4 | 2 | 1 | yes |
search_docs | 482 | 1809 chars | 1 | 1 | 1 | yes |
list_tables | 188 | 168 chars | 3 | 3 | 2 | yes |
get_advisors | 180 | 385 chars | 2 | 2 | 1 | yes |
get_publishable_keys | 172 | 435 chars | 1 | 1 | 1 | yes |
confirm_cost | 161 | 220 chars | 3 | 3 | 1 | yes |
get_cost | 148 | 198 chars | 2 | 2 | 1 | yes |
execute_sql | 142 | 198 chars | 2 | 2 | 1 | yes |
list_branches | 115 | 179 chars | 1 | 1 | 1 | yes |
get_edge_function | 109 | 67 chars | 2 | 2 | 1 | yes |
get_organization | 98 | 61 chars | 1 | 1 | 1 | yes |
list_projects | 98 | 126 chars | 0 | 0 | 0 | yes |
generate_typescript_types | 95 | 41 chars | 1 | 1 | 1 | yes |
get_project | 95 | 36 chars | 1 | 1 | 1 | yes |
list_edge_functions | 94 | 47 chars | 1 | 1 | 1 | yes |
get_project_url | 92 | 31 chars | 1 | 1 | 1 | yes |
list_migrations | 90 | 37 chars | 1 | 1 | 1 | yes |
list_extensions | 89 | 37 chars | 1 | 1 | 1 | yes |
list_organizations | 83 | 53 chars | 0 | 0 | 0 | yes |
How this compares
Within Data and Databases this is rank 2 of 3 scanned servers — exactly on the category median of 96.
The closest comparisons in this directory are MongoDB, PostgreSQL and Brave Search, which sit nearest on score and face the same kind of surface-design pressure.
- Category
- Data and Databases
- Rank in category
- 2
- Category median score
- 96
- Category median tokens
- 3,328
A fix plan turns these findings into an ordered set of changes with the token saving of each one.
This page is a static analysis of Supabase's published tools/list surface on the date shown. It is not a security review, a performance benchmark, or a judgement of the product behind the surface. Read how the score is computed, or browse every audited server.