Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often.
Brave Search MCP server tool surface audit
- Token footprint
- ~25,498
- Tools
- 8
- Findings
- 8
- Scanned
Every conversation with the Brave Search MCP server begins with 8 tool definitions already in context — about 25,498 tokens of it. MCP Surface Lint scores that surface 96 out of 100 (grade A), with 8 scored findings spread across 2 of the six rule categories.
The spread runs from 100/100 for naming down to 85/100 for surface. It is catalogued here under Search and Browsing, 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 13% of it before the conversation starts, and keeps consuming it on every turn. That averages 3,187 tokens per tool definition, counted with the o200k_base encoding.
Compared with the Search and Browsing median of 2,728 tokens, Brave Search is roughly 835% above.
Findings
Findings are listed by severity; the rule pages explain the reasoning in full.
7 findings come from `schemas/complexity-budget`. Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often. On this surface it fires on `brave_web_search`, `brave_local_search` and `brave_news_search`, among 2 others.
`surface/token-budget` contributes one finding. The serialized tools/list payload is injected into every conversation that connects the server, before any work happens. Its token cost is a per-message tax. It applies to the surface as a whole rather than to one tool.
warn 8 findings
Findings that measurably degrade tool selection.
Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often.
Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often.
Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often.
Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often.
Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often.
Deeply nested inputs, very wide property lists, and stacked oneOf/anyOf force the model to solve a constraint puzzle before every call. Flatter, narrower inputs get filled correctly more often.
The serialized tools/list payload is injected into every conversation that connects the server, before any work happens. Its token cost is a per-message tax.
info 6 findings
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.
brave_web_search/properties/country; brave_local_search/properties/country
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.
brave_web_search/properties/search_lang; brave_local_search/properties/search_lang
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.
brave_web_search/properties/ui_lang; brave_local_search/properties/ui_lang; brave_place_search/properties/ui_lang
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.
brave_web_search/properties/safesearch; brave_local_search/properties/safesearch; brave_place_search/properties/safesearch
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.
brave_llm_context/properties/search_lang; brave_place_search/properties/search_lang
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.
brave_llm_context/properties/accept; brave_place_search/properties/accept
What this surface does well
4 of the six categories come through clean: naming, descriptions, annotations and design. In practice that means the tool names follow one convention end to end, every tool carries a description long enough to disambiguate it, read and write operations are machine-distinguishable before a client runs them and the surface is shaped around user intents rather than mirrored REST endpoints.
Tool inventory
`brave_place_search` is the most expensive definition at 17,302 tokens — about 68% of the whole surface — against 309 for `brave_summarizer`. Every tool carries a description, ranging from 315 to 1,390 characters.
All 8 declare annotations, so a client can tell a read from a write before running one. Input schemas average 13 top-level parameters and nest 2 levels deep at their worst.
All 8 tools as published, heaviest first. Token counts use the o200k_base encoding and are approximate.
| Tool | Tokens | Description | Params | Required | Depth | Annotations |
|---|---|---|---|---|---|---|
brave_place_search | 17,302 | 1390 chars | 17 | 0 | 1 | yes |
brave_llm_context | 2,556 | 887 chars | 26 | 1 | 2 | yes |
brave_local_search | 1,418 | 801 chars | 15 | 1 | 2 | yes |
brave_web_search | 1,398 | 682 chars | 15 | 1 | 2 | yes |
brave_news_search | 1,005 | 1175 chars | 11 | 1 | 2 | yes |
brave_image_search | 817 | 315 chars | 6 | 1 | 1 | yes |
brave_video_search | 691 | 441 chars | 9 | 1 | 1 | yes |
brave_summarizer | 309 | 903 chars | 3 | 1 | 1 | yes |
How this compares
Brave Search ranks 4 of 4 scanned Search and Browsing servers, 3 points below the category median of 99.
The closest comparisons in this directory are Hugging Face, Exa and Fetch, which sit nearest on score and face the same kind of surface-design pressure.
- Category
- Search and Browsing
- Rank in category
- 4
- Category median score
- 99
- Category median tokens
- 2,728
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 Brave Search'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.