Brave Search MCP Server
OfficialThe Brave Search MCP Server provides comprehensive search capabilities through the Brave Search API, supporting web, local, image, video, news, and AI-powered summarization searches.
Core Search Capabilities:
Web Search: Comprehensive web searches with advanced filtering for country, language, result types, content safety, freshness, and custom re-ranking via goggles
Local Search: Find local businesses and places with ratings, hours, and AI-generated descriptions (requires Pro plan)
Image Search: Search images with metadata like dimensions, URLs, and properties
Video Search: Find videos with extensive metadata including title, description, duration, and thumbnails
News Search: Access current news articles with freshness controls and breaking news indicators
AI Summarization: Generate AI-powered summaries from web search results (requires Pro plan with summary key)
Technical Features:
Flexible Transport: Operates via STDIO (default) or HTTP transport modes
Configurable Settings: Customize behavior through environment variables or command-line arguments for API keys, ports, logging levels, and tool enabling/disabling
API Integration: Seamlessly integrates with Brave Search API, with free and Pro plans offering different feature access levels
Integrates with Brave Search API to provide comprehensive search capabilities including web search, local business search, image search, video search, news search, and AI-powered summarization
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Brave Search MCP Serverfind recent news about AI advancements"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Brave Search MCP Server
An MCP server implementation that integrates the Brave Search API, providing comprehensive search capabilities including web search, local business search, place search, image search, video search, news search, LLM context, and AI-powered summarization. This project supports both STDIO and HTTP transports, with STDIO as the default mode.
Migration
1.x to 2.x
Default transport now STDIO
To follow established MCP conventions, the server now defaults to STDIO. If you would like to continue using HTTP, you will need to set the BRAVE_MCP_TRANSPORT environment variable to http, or provide the runtime argument --transport http when launching the server.
Response structure of brave_image_search
Version 1.x of the MCP server would return base64-encoded image data along with image URLs. This dramatically slowed down the response, as well as consumed unnecessarily context in the session. Version 2.x removes the base64-encoded data, and returns a response object that more closely reflects the original Brave Search API response. The updated output schema is defined in src/tools/images/schemas/output.ts.
Related MCP server: Brave Search MCP
Tools
Web Search (brave_web_search)
Performs comprehensive web searches with rich result types and advanced filtering options.
Parameters:
query(string, required): Search terms (max 400 chars, 50 words)country(string, optional): Country code (default: "US")search_lang(string, optional): Search language (default: "en")ui_lang(string, optional): UI language (default: "en-US")count(number, optional): Results per page (1-20, default: 10)offset(number, optional): Pagination offset (max 9, default: 0)safesearch(string, optional): Content filtering ("off", "moderate", "strict", default: "moderate")freshness(string, optional): Time filter ("pd", "pw", "pm", "py", or date range)text_decorations(boolean, optional): Include highlighting markers (default: true)spellcheck(boolean, optional): Enable spell checking (default: true)result_filter(array, optional): Filter result types (default: ["web", "query"])goggles(array, optional): Custom re-ranking definitionsunits(string, optional): Measurement units ("metric" or "imperial")extra_snippets(boolean, optional): Get additional excerpts (Pro plans only)summary(boolean, optional): Enable summary key generation for AI summarization
Local Search (brave_local_search)
Searches for local businesses and places with detailed information including ratings, hours, and AI-generated descriptions.
Parameters:
Same as
brave_web_searchwith automatic location filteringAutomatically includes "web" and "locations" in result_filter
Note: Requires Pro plan for full local search capabilities. Falls back to web search otherwise.
Video Search (brave_video_search)
Searches for videos with comprehensive metadata and thumbnail information.
Parameters:
query(string, required): Search terms (max 400 chars, 50 words)country(string, optional): Country code (default: "US")search_lang(string, optional): Search language (default: "en")ui_lang(string, optional): UI language (default: "en-US")count(number, optional): Results per page (1-50, default: 20)offset(number, optional): Pagination offset (max 9, default: 0)spellcheck(boolean, optional): Enable spell checking (default: true)safesearch(string, optional): Content filtering ("off", "moderate", "strict", default: "moderate")freshness(string, optional): Time filter ("pd", "pw", "pm", "py", or date range)
Image Search (brave_image_search)
Searches for images with metadata including URLs, dimensions, and confidence scores.
Parameters:
query(string, required): Search terms (max 400 chars, 50 words)country(string, optional): Country code (default: "US")search_lang(string, optional): Search language (default: "en")count(number, optional): Results per page (1-200, default: 50)safesearch(string, optional): Content filtering ("off", "strict", default: "strict")spellcheck(boolean, optional): Enable spell checking (default: true)
News Search (brave_news_search)
Searches for current news articles with freshness controls and breaking news indicators.
Parameters:
query(string, required): Search terms (max 400 chars, 50 words)country(string, optional): Country code (default: "US")search_lang(string, optional): Search language (default: "en")ui_lang(string, optional): UI language (default: "en-US")count(number, optional): Results per page (1-50, default: 20)offset(number, optional): Pagination offset (max 9, default: 0)spellcheck(boolean, optional): Enable spell checking (default: true)safesearch(string, optional): Content filtering ("off", "moderate", "strict", default: "moderate")freshness(string, optional): Time filter (default: "pd" for last 24 hours)extra_snippets(boolean, optional): Get additional excerpts (Pro plans only)goggles(array, optional): Custom re-ranking definitions
Summarizer Search (brave_summarizer)
Generates AI-powered summaries from web search results using Brave's summarization API.
Parameters:
key(string, required): Summary key from web search results (usesummary: truein web search)entity_info(boolean, optional): Include entity information (default: false)inline_references(boolean, optional): Add source URL references (default: false)
Usage: First perform a web search with summary: true, then use the returned summary key with this tool.
Place Search (brave_place_search)
Searches for points of interest (POIs) in a specified geographic area using Brave's Place Search API. Returns rich, structured place data including name, address, opening hours, contact info, ratings, photos, categories, and timezone.
Parameters:
query(string, optional): Query string used to refine the POI search (max 400 chars, 50 words). When omitted, returns general points of interest in the supplied area.latitude(number, optional): Latitude of the search center (-90 to 90). Typically paired withlongitude.longitude(number, optional): Longitude of the search center (-180 to 180). Typically paired withlatitude.location(string, optional): Location string used as an alternative tolatitude/longitude. For US locations prefer the form<city> <state> <country name>(e.g.,san francisco ca united states); for non-US locations use<city> <country name>(e.g.,tokyo japan).radius(number, optional): Search radius around the supplied coordinates, in meters. If omitted, the search is performed globally.count(number, optional): Number of results to return (1-50, default 20).country(string, optional): Two-letter country code (defaultUS).search_lang(string, optional): Search language (defaulten).ui_lang(string, optional): UI language (defaulten-US).units(string, optional): Distance units (metricorimperial, defaultmetric).safesearch(string, optional): Safe search level (off,moderate,strict, defaultstrict).spellcheck(boolean, optional): Whether to spellcheck the query (defaulttrue).geoloc(string, optional): Optional geolocation token used to refine results.
Optional request headers:
api-version(string, optional): Brave API version (YYYY-MM-DD)accept(string, optional): Response media type (application/jsonor*/*)cache-control(string, optional): Useno-cacheto request fresh contentuser-agent(string, optional): User agent originating the request
LLM Context (brave_llm_context)
Retrieves pre-extracted web content optimized for AI agents, LLM grounding, and RAG pipelines.
Parameters:
query(string, required): Search query (max 400 chars, 50 words)country(string, optional): Search country codesearch_lang(string, optional): Search language codecount(number, optional): Maximum number of search results considered (1-50)spellcheck(boolean, optional): Enable spell checkingmaximum_number_of_urls(number, optional): Maximum number of URLs to include (1-50)maximum_number_of_tokens(number, optional): Approximate maximum number of context tokens (1024-32768)maximum_number_of_snippets(number, optional): Maximum number of snippets to include (1-256)context_threshold_mode(string, optional): Threshold mode ("disabled", "strict", "lenient", "balanced")maximum_number_of_tokens_per_url(number, optional): Maximum tokens per URL (512-8192)maximum_number_of_snippets_per_url(number, optional): Maximum snippets per URL (1-100)goggles(string or array, optional): Goggle URL or definition for custom re-rankingfreshness(string, optional): Time filter ("pd", "pw", "pm", "py", or date range)enable_local(boolean, optional): Enable local recallenable_source_metadata(boolean, optional): Include source metadata enrichment
Optional request headers:
x-loc-lat(number, optional): Client latitude (-90 to 90)x-loc-long(number, optional): Client longitude (-180 to 180)x-loc-city(string, optional): Client city namex-loc-state(string, optional): Client state or region codex-loc-state-name(string, optional): Client state or region namex-loc-country(string, optional): Client country codex-loc-postal-code(string, optional): Client postal codeapi-version(string, optional): Brave API version (YYYY-MM-DD)accept(string, optional): Response media type ("application/json" or "/")cache-control(string, optional): Useno-cacheto request fresh contentuser-agent(string, optional): User agent originating the request
Configuration
Getting an API Key
Sign up for a Brave Search API account
Choose a plan:
Search: The real-time search data your chatbots & agents need to generate answers. Complete search results (URLs, text, news, images, and more), with additional LLM context optimized for AI.
Answers: Summarized, completed answers to any question. Answers grounded on a single search or multiple searches for better accuracy & reduced hallucinations.
Generate your API key from the developer dashboard
Environment Variables
The server supports the following environment variables:
BRAVE_API_KEY: Your Brave Search API key (required unlessBRAVE_API_KEY_FILEis set)BRAVE_API_KEY_FILE: Path to a file containing your Brave Search API key. When set, this takes precedence overBRAVE_API_KEY. Useful for Docker secrets and similar mounted-secret setups.BRAVE_MCP_TRANSPORT: Transport mode ("http" or "stdio", default: "stdio")BRAVE_MCP_PORT: HTTP server port (default: 8080)BRAVE_MCP_HOST: HTTP server host (default: "127.0.0.1"). Binds to loopback only by default; set to "0.0.0.0" to expose the server on all interfaces (required inside containers and on Amazon Bedrock AgentCore). Only do this on a trusted network, since the HTTP endpoint is unauthenticated.BRAVE_MCP_ALLOWED_ORIGINS: Space- or comma-separated list of additionalOriginheader values permitted for the HTTP transport. Loopback origins are always allowed; browser requests carrying any otherOriginare rejected with HTTP 403 to guard against DNS rebinding. Set this when a browser-based client on a real domain needs access.BRAVE_MCP_ALLOWED_HOSTS: Space- or comma-separated list of hostnames permitted in theHostheader of the HTTP transport. Matching is on the hostname only and is case-insensitive; a numeric port in an entry (e.g.mcp.example.com:8080) is accepted but ignored for matching. Optional, opt-in defense-in-depth: when unset (default) theHostheader is not validated, so reverse-proxy and custom-domain deployments are unaffected. When set, only loopback hosts and the listed hostnames are accepted; any otherHost(including malformed/non-numeric ports) is rejected with HTTP 403.BRAVE_MCP_LOG_LEVEL: Desired logging level("debug", "info", "notice", "warning", "error", "critical", "alert", or "emergency", default: "info")BRAVE_MCP_ENABLED_TOOLS: When used, specifies a space-separated whitelist for supported toolsBRAVE_MCP_DISABLED_TOOLS: When used, specifies a space-separated blacklist for supported toolsBRAVE_MCP_STATELESS: HTTP stateless mode (default: "true"). When running on Amazon Bedrock Agentcore, set to "true".
Command Line Options
node dist/index.js [options]
Options:
--brave-api-key <string> Brave API key
--brave-api-key-file <string> Path to file containing Brave API key
--transport <stdio|http> Transport type (default: stdio)
--port <number> HTTP server port (default: 8080)
--host <string> HTTP server host (default: 127.0.0.1)
--allowed-origins <origins...> Allowed Origin header values for HTTP transport (DNS rebinding protection)
--allowed-hosts <hosts...> Allowed Host header values for HTTP transport (opt-in DNS rebinding protection)
--logging-level <string> Desired logging level (one of _debug_, _info_, _notice_, _warning_, _error_, _critical_, _alert_, or _emergency_)
--enabled-tools Tools whitelist (only the specified tools will be enabled)
--disabled-tools Tools blacklist (included tools will be disabled)
--stateless <boolean> HTTP Stateless flagInstallation
Usage with Claude Desktop
Add this to your claude_desktop_config.json:
Docker
{
"mcpServers": {
"brave-search": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "BRAVE_API_KEY", "docker.io/mcp/brave-search"],
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}NPX
{
"mcpServers": {
"brave-search": {
"command": "npx",
"args": ["-y", "@brave/brave-search-mcp-server", "--transport", "http"],
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Usage with VS Code
For quick installation, use the one-click installation buttons below:
For manual installation, add the following to your User Settings (JSON) or .vscode/mcp.json:
Docker
{
"inputs": [
{
"password": true,
"id": "brave-api-key",
"type": "promptString",
"description": "Brave Search API Key",
}
],
"servers": {
"brave-search": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "BRAVE_API_KEY", "mcp/brave-search"],
"env": {
"BRAVE_API_KEY": "${input:brave-api-key}"
}
}
}
}NPX
{
"inputs": [
{
"password": true,
"id": "brave-api-key",
"type": "promptString",
"description": "Brave Search API Key",
}
],
"servers": {
"brave-search-mcp-server": {
"command": "npx",
"args": ["-y", "@brave/brave-search-mcp-server", "--transport", "stdio"],
"env": {
"BRAVE_API_KEY": "${input:brave-api-key}"
}
}
}
}Build
Docker
docker build -t mcp/brave-search:latest .Local Build
npm install
npm run buildDevelopment
Prerequisites
Node.js 22.x or higher
npm
Brave Search API key
Setup
Clone the repository:
git clone https://github.com/brave/brave-search-mcp-server.git
cd brave-search-mcp-serverInstall dependencies:
npm installBuild the project:
npm run buildTesting via Claude Desktop
Add a reference to your local build in claude_desktop_config.json:
{
"mcpServers": {
"brave-search-dev": {
"command": "node",
"args": ["C:\\GitHub\\brave-search-mcp-server\\dist\\index.js"], // Verify your path
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Testing via MCP Inspector
Build and start the server:
npm run build
node dist/index.jsIn another terminal, start the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsSTDIO is the default mode. For HTTP mode testing, add --transport http to the arguments in the Inspector UI.
Available Scripts
npm run build: Build the TypeScript projectnpm run watch: Watch for changes and rebuildnpm run format: Format code with Prettiernpm run format:check: Check code formattingnpm run prepare: Format and build (runs automatically on npm install)npm run inspector: Launch an instance of MCP Inspectornpm run inspector:stdio: Launch a instance of MCP Inspector, configured for STDIO
Docker Compose
For local development with Docker:
docker-compose up --buildSet BRAVE_API_KEY (or BRAVE_API_KEY_FILE) in your shell or a .env file before starting the stack. The default docker-compose.yml also accepts BRAVE_API_KEY_FILE when the path is valid inside the container (for example, from a bind mount or Docker secret).
Docker Compose secrets (optional)
To avoid putting the API key in an environment variable, you can use Docker Compose secrets. The server reads the key from the path in BRAVE_API_KEY_FILE, which must exist inside the container.
Copy the example secret file and add your key:
cp secrets/brave_api_key.txt.example secrets/brave_api_key.txtStart the stack with the optional secrets override:
docker compose -f docker-compose.yml -f docker-compose.secrets.example.yml up --buildThe override mounts the secret at /run/secrets/brave_api_key and sets BRAVE_API_KEY_FILE accordingly. See docker-compose.secrets.example.yml for the full configuration.
License
This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
Available Tools
8 toolsbrave_image_searchbrave_image_searchAInspect
Performs an image search using the Brave Search API. Helpful for when you need pictures of people, places, things, graphic design ideas, art inspiration, and more. When relaying results in a markdown environment, it may be helpful to include images in the results (e.g., ).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-200, default 50). Combine this parameter with `offset` to paginate search results. | |
| query | Yes | The user's search query. Query cannot be empty. Limited to 400 characters and 50 words. | |
| country | No | Search query country, where the results come from. The country string is limited to 2 character country codes of supported countries. | US |
| safesearch | No | Filters search results for adult content. The following values are supported: 'off' - No filtering. 'strict' - Drops all adult content from search results. | strict |
| spellcheck | No | Whether to spellcheck provided query. | |
| search_lang | No | Search language preference. The 2 or more character language code for which the search results are provided. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | |
| count | Yes | |
| items | Yes | |
| might_be_offensive | Yes | Whether the image might be offensive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only openWorldHint in annotations, the description carries most of the behavioral burden. It does clarify the result is an image search and provides practical Markdown-formatting guidance, but it does not disclose any authentication, quota, network, or side-effect caveats. For a safe read-only search tool, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose is in the first sentence, and the use-cases plus Markdown example are additive rather than redundant. The sentence has a slight looseness ('and more') but still every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a network image search tool with a detailed input schema and output schema, the description provides all the main common use cases and a helpful Markdown display tip. It lacks only an explicit routing to sibling search tools, but the schema and output schema already cover the technical details an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% and all six parameters already have thorough descriptions, defaults, and bounds. The tool description adds no extra parameter-level meaning, so it remains at the baseline score of 3 for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states a specific verb+resource: 'Performs an image search using the Brave Search API.' The use cases (people, places, design ideas) make its scope unmistakable and distinguish it from the sibling web, video, news, and local search tools without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It offers concrete guidance on when to use the tool: when pictures of people, places, things, art inspiration, or design ideas are requested. However, it does not explicitly tell the agent when not to use it or steer it toward a sibling alternative, so it falls one short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_llm_contextbrave_llm_contextAInspect
Retrieves pre-extracted, relevance-ranked web content using Brave's LLM Context API, optimized for AI agents, LLM grounding, and RAG pipelines. Unlike a traditional web search that returns links and short descriptions, this tool returns the actual substance of matching pages — text chunks, tables, code blocks, and structured data — so the model can reason over it directly.
When to use:
- Grounding answers in fresh, relevant web content (RAG)
- Giving an AI agent ready-to-use page content from a single search call
- Question answering and fact-checking against current sources
- Gathering source material for research without manually fetching pages
- When you need the contents of pages, not just titles, descriptions, and URLs
When relaying results in markdown-supporting environments, cite the source URLs from the "sources" map.| Name | Required | Description | Default |
|---|---|---|---|
| count | No | The maximum number of search results considered to select the LLM context data. The default is 20 and the maximum is 50. | |
| query | Yes | The user's search query term. Query can not be empty. Maximum of 400 characters and 50 words in the query. | |
| accept | No | The default supported media type is application/json. | |
| country | No | The search query country, where the results come from. The country string is limited to 2 character country codes of supported countries. | |
| goggles | No | Goggles act as a custom re-ranking on top of Brave's search index. The parameter supports both a url where the Goggle is hosted or the definition of the Goggle. Multiple goggle URLs and/or definitions can be provided in an array. For more details, refer to the Goggles repository (i.e., https://github.com/brave/goggles-quickstart). | |
| freshness | No | Filters search results by when they were discovered. The following values are supported: 'pd' - Discovered within the last 24 hours. 'pw' - Discovered within the last 7 days. 'pm' - Discovered within the last 31 days. 'py' - Discovered within the last 365 days. 'YYYY-MM-DDtoYYYY-MM-DD' - Timeframe is also supported by specifying the date range e.g. 2022-04-01to2022-07-30. | |
| x-loc-lat | No | The latitude of the client's geographical location in degrees, to provide relevant local results. The latitude must be greater than or equal to -90.0 degrees and less than or equal to +90.0 degrees. | |
| spellcheck | No | Whether to enable spellcheck on the query. | |
| user-agent | No | The user agent originating the request. Brave search can utilize the user agent to provide a different experience depending on the device as described by the string. The user agent should follow the commonly used browser agent strings on each platform. For more information on curating user agents, see RFC 9110. | |
| x-loc-city | No | The generic name of the client city | |
| x-loc-long | No | The longitude of the client's geographical location in degrees, to provide relevant local results. The longitude must be greater than or equal to -180.0 and less than or equal to +180.0 degrees. | |
| api-version | No | The API version to use. This is denoted by the format YYYY-MM-DD. Default is the latest that is available. Read more about API versioning at https://api-dashboard.search.brave.com/documentation/guides/versioning. | |
| search_lang | No | The search language preference. The 2 or more character language code for which the search results are provided. | |
| x-loc-state | No | A code which could be up to three characters, that represent the client's state/region. The region is the first-level subdivision (the broadest or least specific) of the ISO 3166-2 code. | |
| enable_local | No | Whether to enable local recall. Not setting this value means auto-detect and uses local recall if any of the localization headers are provided. | |
| cache-control | No | Brave Search will return cached content by default. To prevent caching set the Cache-Control header to no-cache. This is currently done as best effort. | |
| x-loc-country | No | The two letter country code for the client’s country. For a list of country codes, see ISO 3166-1 alpha-2 | |
| x-loc-state-name | No | The name of the client’s state/region. The region is the first-level subdivision (the broadest or least specific) of the ISO 3166-2 code. | |
| x-loc-postal-code | No | The client’s postal code | |
| context_threshold_mode | No | The mode to use to determine the threshold for including content in context. Default is balanced. | |
| enable_source_metadata | No | Enable source metadata enrichment (site_name, favicon) in the sources attribute of the response. | |
| maximum_number_of_urls | No | Maximum number of different URLs to include in LLM context. | |
| maximum_number_of_tokens | No | Approximate maximum number of tokens to include in context. The default is 8192 and maximum is 32768. | |
| maximum_number_of_snippets | No | Maximum number of different snippets (or chunks of text) to include in LLM context. The default is 50 and maximum is 256. | |
| maximum_number_of_tokens_per_url | No | Maximum number of tokens to include per URL. The default is 4096 and maximum is 8192. | |
| maximum_number_of_snippets_per_url | No | Maximum number of snippets to include per URL. The default is 50 and maximum is 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | Yes | Metadata for each referenced URL, keyed by URL. Known fields include title, hostname, and age; site_name, favicon, and thumbnail are present when enable_source_metadata is true. Unknown fields are preserved as-is. |
| grounding | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include openWorldHint, so the description carries the burden of explaining behavior. It discloses that this is a retrieval operation returning actual page substance, relevance-ranked content, and a 'sources' map for citation. It does not mention auth, rate limits, or network side effects, but 'Retrieves ... using API' plus the content-type detail is meaningful beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, a 'When to use' list, and a citation note. Some bullets overlap (RAG grounding, agent content, research material), but the overall length is justified for a tool with many use cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema and output schema, the description is largely complete: it states what the tool returns, when to use it, and how to cite sources. It could be more explicit about when to prefer brave_web_search, but nothing essential for selecting or invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 26 parameters. The description adds no parameter-level semantics beyond referencing the 'sources' map in the output, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Retrieves pre-extracted, relevance-ranked web content') and names the API. It explicitly contrasts with traditional web search by emphasizing content substance over links/descriptions, which differentiates it from sibling search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a dedicated 'When to use' bullet list covering RAG, agent grounding, QA, and research. It implies the alternative (traditional web search) by saying results are needed when you want page contents, not just titles/URLs, but it does not name a sibling tool or give an explicit when-not-to-use section.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_local_searchbrave_local_searchAInspect
Brave Local Search API provides enrichments for location search results. Access to this API is available only through the Brave Search API Pro plans; confirm the user's plan before using this tool (if the user does not have a Pro plan, use the brave_web_search tool). Searches for local businesses and places using Brave's Local Search API. Best for queries related to physical locations, businesses, restaurants, services, etc.
Returns detailed information including:
- Business names and addresses
- Ratings and review counts
- Phone numbers and opening hours
Use this when the query implies 'near me', 'in my area', or mentions specific locations (e.g., 'in San Francisco'). This tool automatically falls back to brave_web_search if no local results are found.| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-20, default 10). Applies only to web search results (i.e., has no effect on locations, news, videos, etc.) | |
| query | Yes | Search query (max 400 chars, 50 words) | |
| units | No | The measurement units. If not provided, units are derived from search country. | |
| offset | No | Pagination offset (max 9, default 0) | |
| country | No | Search query country, where the results come from. The country string is limited to 2 character country codes of supported countries. | US |
| goggles | No | Goggles act as a custom re-ranking on top of Brave's search index. The parameter supports both a url where the Goggle is hosted or the definition of the Goggle. Multiple goggle URLs and/or definitions can be provided in an array. For more details, refer to the Goggles repository (i.e., https://github.com/brave/goggles-quickstart). | |
| summary | No | This parameter enables summary key generation in web search results. This is required for summarizer to be enabled. | |
| ui_lang | No | The language of the UI. The 2 or more character language code for which the search results are provided. | en-US |
| freshness | No | Filters search results by when they were discovered. The following values are supported: 'pd' - Discovered within the last 24 hours. 'pw' - Discovered within the last 7 days. 'pm' - Discovered within the last 31 days. 'py' - Discovered within the last 365 days. 'YYYY-MM-DDtoYYYY-MM-DD' - Timeframe is also supported by specifying the date range e.g. 2022-04-01to2022-07-30. | |
| safesearch | No | Filters search results for adult content. The following values are supported: 'off' - No filtering. 'moderate' - Filters explicit content (e.g., images and videos), but allows adult domains in search results. 'strict' - Drops all adult content from search results. The default value is 'moderate'. | moderate |
| spellcheck | No | Whether to spellcheck the provided query. | |
| search_lang | No | Search language preference. The 2 or more character language code for which the search results are provided. | en |
| result_filter | No | Result filter (default ['web', 'query']) | |
| extra_snippets | No | A snippet is an excerpt from a page you get as a result of the query, and extra_snippets allow you to get up to 5 additional, alternative excerpts. Only available under Free AI, Base AI, Pro AI, Base Data, Pro Data and Custom plans. | |
| text_decorations | No | Whether display strings (e.g. result snippets) should include decoration markers (e.g. highlighting characters). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are limited (no hints visible in the prompt), but the description discloses key behaviors: it automatically falls back to brave_web_search if no local results are found, it returns business names/addresses/ratings/hours (though this is result content), and it notes the Pro plan requirement. This goes beyond what annotations would provide, though the description does not mention whether it makes network calls or any rate limits. Given no annotations, this is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise, with useful details packed in. The key use case and fallback are front-loadedaving some redundancy (e.g., 'location search results' near the start). It is structured well with bullets for return info. Slight verbosity but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 10 parameters in the schema with descriptions, the description adds context about return types (business names, addresses, ratings, hours) and fallback behavior sematically. It does not mention output format, but the schema covers parameter constraints. It also explains the plan requirement. Overall complete for an API tool description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema is rich with descriptions for every parameter (count, units, country, etc.), so coverage is high. The description adds usage context (e.g., 'Use this when...') and the fallback behavior, which is not in the schema. It also explains the output fields (business names, addresses, ratings, phone, hours) that are not in the schema. Slight deduction because it doesn't clarify how parameters like 'summary' or 'freshness' apply specifically to local results, but overall adds meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches for local businesses and places using Brave's Local Search API (spelled out in the opening). It distinguishes itself from brave_web_search by stating it is for physical locations, businesses, restaurants, services, and specifies it falls back to brave_web_search. The verb 'search' and resource 'local businesses and places' is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'when the query implies physical locations, businesses, restaurants, services, etc.' Also gives example triggers ('in my area', specific locations). It notes access restriction (Pro plan only) and tells the agent to check the user's plan, with a fallback to brave_web_search. This is excellent usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_news_searchbrave_news_searchAInspect
This tool searches for news articles using Brave's News Search API based on the user's query. Use it when you need current news information, breaking news updates, or articles about specific topics, events, or entities.
When to use:
- Finding recent news articles on specific topics
- Getting breaking news updates
- Researching current events or trending stories
- Gathering news sources and headlines for analysis
Returns a JSON list of news-related results with title, url, and description. Some results may contain snippets of text from the article.
When relaying results in markdown-supporting environments, always cite sources with hyperlinks.
Examples:
- "According to [Reuters](https://www.reuters.com/technology/china-bans/), China bans uncertified and recalled power banks on planes".
- "The [New York Times](https://www.nytimes.com/2025/06/27/us/technology/ev-sales.html) reports that Tesla's EV sales have increased by 20%".
- "According to [BBC News](https://www.bbc.com/news/world-europe-65910000), the UK government has announced a new policy to support renewable energy".| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-50, default 20) | |
| query | Yes | Search query (max 400 chars, 50 words) | |
| offset | No | Pagination offset (max 9, default 0) | |
| country | No | Search query country, where the results come from. The country string is limited to 2 character country codes of supported countries. | US |
| goggles | No | Goggles act as a custom re-ranking on top of Brave's search index. The parameter supports both a url where the Goggle is hosted or the definition of the Goggle. Multiple goggle URLs and/or definitions can be provided in an array. For more details, refer to the Goggles repository (i.e., https://github.com/brave/goggles-quickstart). | |
| ui_lang | No | User interface language preferred in response. Usually of the format <language_code>-<country_code>. For more, see RFC 9110. | en-US |
| freshness | No | Filters search results by when they were discovered. The following values are supported: 'pd' - Discovered within the last 24 hours. 'pw' - Discovered within the last 7 Days. 'pm' - Discovered within the last 31 Days. 'py' - Discovered within the last 365 Days. 'YYYY-MM-DDtoYYYY-MM-DD' - Timeframe is also supported by specifying the date range e.g. 2022-04-01to2022-07-30. | |
| safesearch | No | Filters search results for adult content. The following values are supported: 'off' - No filtering. 'moderate' - Filter out explicit content. 'strict' - Filter out explicit and suggestive content. The default value is 'moderate'. | moderate |
| spellcheck | No | Whether to spellcheck provided query. | |
| search_lang | No | Search language preference. The 2 or more character language code for which the search results are provided. | en |
| extra_snippets | No | A snippet is an excerpt from a page you get as a result of the query, and extra_snippets allow you to get up to 5 additional, alternative excerpts. Only available under Free AI, Base AI, Pro AI, Base Data, Pro Data and Custom plans. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no readOnly or destructive annotations, the description carries the behavioral burden. It explicitly states the return format ('JSON list of news-related results with title, url, and description') and notes that some results may contain snippets. It also adds citation instructions for markdown environments. It does not cover error handling or rate limits, but the read-only nature of a search is implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, starting with the core purpose and followed by usage contexts, return format, and examples. The three citation examples are somewhat repetitive but reinforce a key behavior. Overall, it is appropriately sized with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Though the tool has 11 parameters, the schema fully documents them, and the description fills the gap left by the missing output schema by describing the JSON response and citation expectations. For a search tool with no side effects and clear sibling differentiation, the definition covers everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the input schema, giving 100% schema description coverage. The tool description does not add parameter-specific details beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'searches for news articles using Brave's News Search API.' It clearly distinguishes this from sibling tools like brave_web_search by emphasizing news-specific use cases such as breaking news and current events. The scope is unambiguous and immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' section lists concrete scenarios: finding recent news articles, getting breaking updates, researching current events, and gathering sources. However, it does not explicitly state when not to use this tool or name alternative sibling tools, so it provides clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_place_searchbrave_place_searchAInspect
Searches Brave's Place Search API. A single call may populate any combination of 'results' (POIs), 'cities', 'addresses', 'streets', and 'location' (the resolved search area), depending on the query's shape.
When to use:
- POIs near coordinates or a named area (e.g. "coffee shops in Paris") -> 'results', each with structured business data (postal address, hours, contact, ratings, photos, categories, timezone).
- Browsing general POIs (omit 'query'; supply 'latitude'+'longitude' or 'location').
- Disambiguating a bare city name (e.g. "springfield") -> 'cities'.
- Resolving a specific address (e.g. "350 5th avenue" with NYC coords) -> 'addresses' (often plus 'streets').
- Looking up a street by name (e.g. "michigan avenue" with Chicago coords) -> 'streets'.
Inputs:
- Anchor the search via 'latitude'+'longitude' or 'location' (or both). With neither, 'query' is required.
- 'addresses' / 'streets' only surface when the query is address-/street-shaped AND geographically anchored.
- 'location' format: US -- '<city> <state> <country>' (e.g. 'san francisco ca united states'); non-US -- '<city> <country>' (e.g. 'tokyo japan'). Capitalization and commas don't matter.
- 'count' caps results (max 50, default 20). 'radius' (meters) biases toward closer results; it does NOT hard-limit the search area.| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results to return. Maximum is 50. Default is 20. | |
| query | No | Query string. Shape influences the response: POI-like queries -> `results`; bare/ambiguous city names -> `cities`; address- or street-shaped queries with a geographic anchor -> `addresses` and/or `streets`. If omitted, returns general POIs in the supplied area. | |
| units | No | Units of measurement for distance values. Defaults to 'metric'. | |
| accept | No | The default supported media type is application/json. | |
| geoloc | No | Optional geolocation token used to refine results. | |
| radius | No | Bias toward results closer to the supplied coordinates, in meters. NOT a hard cutoff -- the API may still return more distant results. If omitted, the search is performed globally. | |
| country | No | Two-letter country code (ISO 3166-1 alpha-2) used to scope the search. Defaults to 'US'. | |
| ui_lang | No | User interface language for the response, usually of the form '<language>-<region>'. Defaults to 'en-US'. | |
| latitude | No | Latitude of the geographical coordinates around which to search, in degrees (-90 to 90). Typically paired with `longitude`. | |
| location | No | Location string to search around, used as an alternative to `latitude` and `longitude`. For US locations prefer the form '<city> <state> <country name>' (e.g. 'san francisco ca united states'); for non-US locations use '<city> <country name>' (e.g. 'tokyo japan'). No commas or special characters needed; capitalization does not matter. | |
| longitude | No | Longitude of the geographical coordinates around which to search, in degrees (-180 to 180). Typically paired with `latitude`. | |
| safesearch | No | Safe search level for the query results. 'off' - No filtering. 'moderate' - Filter out explicit content. 'strict' - Filter out explicit and suggestive content. Defaults to 'strict'. | |
| spellcheck | No | Whether to apply spellcheck before executing the search. Defaults to true. | |
| user-agent | No | The user agent originating the request. Brave Search can utilize the user agent to provide a different experience depending on the device as described by the string. The user agent should follow the commonly used browser agent strings on each platform. For more information on curating user agents, see RFC 9110. | |
| api-version | No | The API version to use. This is denoted by the format YYYY-MM-DD. Default is the latest that is available. Read more about API versioning at https://api-dashboard.search.brave.com/documentation/guides/versioning. | |
| search_lang | No | Language for the search results. Defaults to 'en'. | |
| cache-control | No | Brave Search will return cached content by default. To prevent caching set the Cache-Control header to no-cache. This is currently done as best effort. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | Top-level response discriminator. Always "locations" for Place Search. |
| query | No | |
| cities | No | City matches for the query. Typically populated when the query is a bare or ambiguous city name (e.g. "springfield", "san francisco"). |
| results | No | Points of interest matching the search. Populated for POI-shaped queries. |
| streets | No | Street matches. Typically populated when the query is a street name AND is geographically anchored via `latitude`+`longitude` or a specific `location`. |
| location | No | The search area as resolved by the API (e.g. coordinates + city name). Useful for confirming the API interpreted the input as expected and for grounding follow-up queries. |
| addresses | No | Address matches. Typically populated when the query is a street + number AND is geographically anchored via `latitude`+`longitude` or a specific `location`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that a single call may populate any combination of fields based on query shape, that 'radius' is a bias rather than a hard limit, and that 'count' caps results. It also details 'location' format requirements. These behaviors extend well beyond the openWorldHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear headings and bullet points, leading with purpose before details. It is dense with information but not redundant; every sentence contributes to selection or invocation understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all key usage scenarios, parameter interdependencies, and edge cases (e.g., radius not hard-limiting, location format). Given the output schema and full schema coverage, it omits only what is already structured, making it complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even with 100% schema coverage, the description adds significant meaning: it maps query shapes to response types, requires geographic anchors for address/street queries, clarifies 'location' formatting, and explains radius/count behavior. This goes far beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Searches Brave's Place Search API' and enumerates the response categories (results, cities, addresses, streets, location). The title and content unambiguously differentiate it from sibling search tools by focusing on places and geographic data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to use' section lists five distinct scenarios with concrete examples (POIs near coordinates, general browsing, city disambiguation, address resolution, street lookup). It also explains anchor requirements and query prerequisites, giving agents explicit decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_summarizerbrave_summarizerAInspect
Retrieves AI-generated summaries of web search results using Brave's Summarizer API. This tool processes search results to create concise, coherent summaries of information gathered from multiple sources.
When to use:
- When you need a concise overview of complex topics from multiple sources
- For quick fact-checking or getting key points without reading full articles
- When providing users with summarized information that synthesizes various perspectives
- For research tasks requiring distilled information from web searches
Returns a text summary that consolidates information from the search results. Optional features include inline references to source URLs and additional entity information.
Requirements: Must first perform a web search using brave_web_search with summary=true parameter. Requires a Pro AI subscription to access the summarizer functionality.| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The key is equal to value of field key as part of the Summarizer response model. | |
| entity_info | No | Returns extra entities info with the summary response. | |
| inline_references | No | Adds inline references to the summary response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include openWorldHint=true, offering no read/destructive hints. The description carries the burden and does so well: it says 'Retrieves' and 'Returns a text summary,' clearly implying a non-mutating read operation. It also discloses the subscription requirement. While it doesn't discuss error handling or rate limits, for a read-only summarizer the key behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening statement, a bulleted 'When to use' section, return details, and requirements. Each section is concise and front-loaded with the core purpose. No redundant sentences; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters, no output schema, and only openWorldHint annotation, the description covers the return type ('text summary'), prerequisite workflow, and optional features. It does not explain potential errors or the exact format of the key beyond referencing the response model, but for a tool of this simplicity it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by linking the optional boolean parameters to their features ('inline references to source URLs' and 'additional entity information'). It also explains the source of the required 'key' by referencing the prior web search with summary=true, which is crucial for parameter usage. This goes beyond the schema's minimal description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieves AI-generated summaries'), a clear resource (web search results via Brave's Summarizer API), and explicitly differentiates from sibling search tools by focusing on summarization rather than search. It is immediately obvious what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'When to use' list with concrete scenarios (overviews, fact-checking, synthesis). It also states a hard prerequisite: 'Must first perform a web search using brave_web_search with summary=true parameter,' which effectively tells the agent the required precondition and the sibling tool to use. This is clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_video_searchbrave_video_searchAInspect
Searches for videos using Brave's Video Search API and returns structured video results with metadata.
When to use:
- When you need to find videos related to a specific topic, keyword, or query.
- Useful for discovering video content, getting video metadata, or finding videos from specific creators/publishers.
Returns a JSON list of video-related results with title, url, description, duration, and thumbnail_url.| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-50, default 20). Combine this parameter with `offset` to paginate search results. | |
| query | Yes | The user's search query. Query cannot be empty. Limited to 400 characters and 50 words. | |
| offset | No | Pagination offset (max 9, default 0). Combine this parameter with `count` to paginate search results. | |
| country | No | Search query country, where the results come from. The country string is limited to 2 character country codes of supported countries. | US |
| ui_lang | No | User interface language preferred in response. Usually of the format <language_code>-<country_code>. For more, see RFC 9110. | en-US |
| freshness | No | Filters search results by when they were discovered. The following values are supported: 'pd' - Discovered within the last 24 hours. 'pw' - Discovered within the last 7 days. 'pm' - Discovered within the last 31 days. 'py' - Discovered within the last 365 days. 'YYYY-MM-DDtoYYYY-MM-DD' - timeframe is also supported by specifying the date range (e.g. '2022-04-01to2022-07-30'). | |
| safesearch | No | Filters search results for adult content. The following values are supported: 'off' - No filtering. 'moderate' - Filter out explicit content. 'strict' - Filter out explicit and suggestive content. The default value is 'moderate'. | moderate |
| spellcheck | No | Whether to spellcheck provided query. | |
| search_lang | No | Search language preference. The 2 or more character language code for which the search results are provided. | en |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide only openWorldHint=true, which is minimal. The description mentions it 'returns structured video results with metadata' and lists the return fields, but doesn't disclose potential behaviors like pagination limits (offset max 9 is in schema, not description), rate limits, or any error conditions. For a read-only search tool, the safety profile is implied but not explicitly stated. This is adequate but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient: a one-sentence function summary, a 'When to use' bullet list, and a one-line return format summary. It is front-loaded with the core purpose and key use cases. Each bullet adds value without redundancy. Slightly more than necessary but well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters but only 1 required (query). The schema provides exhaustive descriptions for every parameter, and the description covers the purpose and return format. Since there is no output schema, the description's note about 'JSON list of video-related results with title, url, description, duration, and thumbnail_url' compensates for missing output schema. Combined complexity is high, but the description plus schema cover everything an agent needs to call it correctly. Missing: explicit statement that it's read-only, but openWorldHint=true implies it's a safe world state. Overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 9 parameters are already documented in the schema. The description adds no additional parameter semantics beyond what the schema provides. Baseline 3 is correct since the schema does the heavy lifting; no extra value from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Searches for videos'), the resource ('Brave's Video Search API'), and clearly differentiates from siblings by mentioning video-specific output fields (title, url, duration, thumbnail_url). It is immediately clear this is distinct from web, image, news, and local search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a 'When to use' section that lists concrete conditions: 'need to find videos related to a specific topic... discovering video content, getting video metadata, or finding videos from specific creators/publishers'. It doesn't explicitly state when NOT to use it or name alternatives, but the context is clear and sufficient for an agent to select it appropriately among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_web_searchbrave_web_searchAInspect
Performs web searches using the Brave Search API and returns comprehensive search results with rich metadata.
When to use:
- General web searches for information, facts, or current topics
- Location-based queries (restaurants, businesses, points of interest)
- News searches for recent events or breaking stories
- Finding videos, discussions, or FAQ content
- Research requiring diverse result types (web pages, images, reviews, etc.)
Returns a JSON list of web results with title, description, and URL.
When the "results_filter" parameter is empty, JSON results may also contain FAQ, Discussions, News, and Video results.| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-20, default 10). Applies only to web search results (i.e., has no effect on locations, news, videos, etc.) | |
| query | Yes | Search query (max 400 chars, 50 words) | |
| units | No | The measurement units. If not provided, units are derived from search country. | |
| offset | No | Pagination offset (max 9, default 0) | |
| country | No | Search query country, where the results come from. The country string is limited to 2 character country codes of supported countries. | US |
| goggles | No | Goggles act as a custom re-ranking on top of Brave's search index. The parameter supports both a url where the Goggle is hosted or the definition of the Goggle. Multiple goggle URLs and/or definitions can be provided in an array. For more details, refer to the Goggles repository (i.e., https://github.com/brave/goggles-quickstart). | |
| summary | No | This parameter enables summary key generation in web search results. This is required for summarizer to be enabled. | |
| ui_lang | No | The language of the UI. The 2 or more character language code for which the search results are provided. | en-US |
| freshness | No | Filters search results by when they were discovered. The following values are supported: 'pd' - Discovered within the last 24 hours. 'pw' - Discovered within the last 7 days. 'pm' - Discovered within the last 31 days. 'py' - Discovered within the last 365 days. 'YYYY-MM-DDtoYYYY-MM-DD' - Timeframe is also supported by specifying the date range e.g. 2022-04-01to2022-07-30. | |
| safesearch | No | Filters search results for adult content. The following values are supported: 'off' - No filtering. 'moderate' - Filters explicit content (e.g., images and videos), but allows adult domains in search results. 'strict' - Drops all adult content from search results. The default value is 'moderate'. | moderate |
| spellcheck | No | Whether to spellcheck the provided query. | |
| search_lang | No | Search language preference. The 2 or more character language code for which the search results are provided. | en |
| result_filter | No | Result filter (default ['web', 'query']) | |
| extra_snippets | No | A snippet is an excerpt from a page you get as a result of the query, and extra_snippets allow you to get up to 5 additional, alternative excerpts. Only available under Free AI, Base AI, Pro AI, Base Data, Pro Data and Custom plans. | |
| text_decorations | No | Whether display strings (e.g. result snippets) should include decoration markers (e.g. highlighting characters). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any behavioral traits beyond the action of performing a search. It does not mention whether the operation is read-only, any rate limits, authentication requirements, or side effects, which is a significant gap given the lack of readOnlyHint or destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear opening statement, a bulleted list of use cases, and a note about results_filter. The structure is well-organized and easy to scan without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a high-level overview of the return value ('comprehensive search results with rich metadata') and includes usage scenarios. While it does not detail the output structure (no output schema exists), it provides enough context to understand the tool's function and key behaviors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides thorough descriptions for all parameters (100% coverage), and the description adds extra context, such as the behavior of result_filter when empty and how it affects returned result types. This goes beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: performing web searches via the Brave Search API and returning comprehensive results. It distinguishes itself from sibling search tools by explicitly mentioning 'web searches' and the general nature of the results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' section lists several concrete scenarios, such as general web searches, location-based queries, and news searches. However, it does not explicitly contrast with sibling tools (e.g., when to use local search instead), leaving some ambiguity about edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v2.1.3- Changed
brave_image_search2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
brave_llm_context2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
brave_local_search1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
brave_news_search1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
brave_place_search20 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / properties / addresses / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / addresses / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / addresses / items / properties / pois / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / addresses / items / properties / pois / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / addresses / items / properties / pois_nearby / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / addresses / items / properties / pois_nearby / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / cities / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / cities / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / location / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / location / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / results / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / results / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / streets / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / streets / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / streets / items / properties / pois / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / streets / items / properties / pois / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Output schema / properties / streets / items / properties / pois_nearby / items / properties / coordinates / itemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - } -] - added
Output schema / properties / streets / items / properties / pois_nearby / items / properties / coordinates / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + } +]
- Changed
brave_summarizer1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
brave_video_search1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
brave_web_search1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
1 tool update
v2.0.82- Changed
brave_place_search55 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Query string to search for points of interest in an area. If no query is provided, the endpoint will return general points of interest in the given area."New value: +"Query string. Shape influences the response: POI-like queries -> `results`; bare/ambiguous city names -> `cities`; address- or street-shaped queries with a geographic anchor -> `addresses` and/or `streets`. If omitted, returns general POIs in the supplied area." - changed
Input schema / properties / radius / descriptionPrevious value: -"Search radius around the supplied coordinates, in meters. If omitted, the search is performed globally."New value: +"Bias toward results closer to the supplied coordinates, in meters. NOT a hard cutoff -- the API may still return more distant results. If omitted, the search is performed globally." - added
Output schema / properties / addressesAdded value: +{ + "description": "Address matches. Typically populated when the query is a street + number AND is geographically anchored via `latitude`+`longitude` or a specific `location`.", + "items": { + "additionalProperties": {}, + "properties": { + "coordinates": { + "description": "Latitude/longitude of the address", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "distance": { + "additionalProperties": {}, + "description": "Distance from the user's geolocation, if available.", + "properties": { + "units": { + "description": "The name of the unit associated with the quantity.", + "type": "string" + }, + "value": { + "description": "The quantity of the unit.", + "type": "number" + } + }, + "required": [ + "value", + "units" + ], + "type": "object" + }, + "name": { + "description": "The name of the address.", + "type": "string" + }, + "pois": { + "description": "List of POIs located at this address.", + "items": { + "additionalProperties": {}, + "properties": { + "action": { + "additionalProperties": {}, + "description": "The action associated with the result.", + "properties": { + "type": { + "description": "The type representing the action.", + "type": "string" + }, + "url": { + "description": "A URL representing the action to be taken.", + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + "categories": { + "description": "List of category labels.", + "items": { + "type": "string" + }, + "type": "array" + }, + "contact": { + "additionalProperties": {}, + "description": "The contact of the location.", + "properties": { + "email": { + "description": "Contact email for the business.", + "type": "string" + }, + "telephone": { + "description": "Contact telephone number for the business.", + "type": "string" + } + }, + "type": "object" + }, + "coordinates": { + "description": "Latitude/longitude pair for the location, when available.", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "distance": { + "additionalProperties": {}, + "description": "Distance from the user's geolocation, if available.", + "properties": { + "units": { + "description": "The name of the unit associated with the quantity.", + "type": "string" + }, + "value": { + "description": "The quantity of the unit.", + "type": "number" + } + }, + "required": [ + "value", + "units" + ], + "type": "object" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "icon_category": { + "description": "Suggested icon category (e.g. \"cafe\").", + "type": "string" + }, + "id": { + "description": "Temporary identifier for the location, valid for ~8 hours. Can be used with brave_local_search-style endpoints to fetch additional information.", + "type": "string" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "opening_hours": { + "additionalProperties": {}, + "description": "The opening hours of the location.", + "properties": { + "current_day": { + "description": "Opening hours for the current day. May contain multiple entries when the location closes and reopens during the day.", + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "days": { + "description": "Opening hours for the rest of the week. Each entry may itself be either a single day-hours object or an array of day-hours objects (when a day has multiple open/close intervals).", + "items": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "pictures": { + "additionalProperties": {}, + "description": "Pictures associated with the result.", + "properties": { + "results": { + "description": "Thumbnail entries for the location.", + "items": { + "additionalProperties": {}, + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "type": "array" + }, + "viewMoreUrl": { + "description": "URL where additional pictures can be viewed.", + "type": "string" + } + }, + "type": "object" + }, + "postal_address": { + "additionalProperties": {}, + "description": "The postal address of the location.", + "properties": { + "addressLocality": { + "description": "The address locality or subregion associated with the location.", + "type": "string" + }, + "addressRegion": { + "description": "The region associated with the location. Usually a state.", + "type": "string" + }, + "country": { + "description": "The country associated with the location.", + "type": "string" + }, + "displayAddress": { + "description": "The displayed address string.", + "type": "string" + }, + "postalCode": { + "description": "The postal code associated with the location.", + "type": "string" + }, + "streetAddress": { + "description": "The street address associated with the location.", + "type": "string" + }, + "type": { + "const": "PostalAddress", + "type": "string" + } + }, + "required": [ + "type", + "displayAddress" + ], + "type": "object" + }, + "price_range": { + "description": "Price classification string for the business (e.g. \"$\", \"$$\").", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "profiles": { + "description": "External profiles (e.g. data providers) associated with the result.", + "items": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "provider_url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "URL of the upstream provider for this result. May be an empty string." + }, + "rating": { + "additionalProperties": {}, + "description": "The rating of the result.", + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "results": { + "description": "Web results related to this location.", + "items": { + "additionalProperties": {}, + "properties": { + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "meta_url": { + "additionalProperties": {}, + "properties": { + "favicon": { + "description": "The favicon used for the URL.", + "type": "string" + }, + "hostname": { + "description": "The lowercased domain name extracted from the URL.", + "type": "string" + }, + "netloc": { + "description": "The network location part extracted from the URL.", + "type": "string" + }, + "path": { + "description": "The hierarchical path of the URL useful as a display string.", + "type": "string" + }, + "scheme": { + "description": "The protocol scheme extracted from the URL.", + "type": "string" + } + }, + "required": [ + "scheme", + "netloc" + ], + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both" + ], + "type": "object" + }, + "type": "array" + }, + "reviews": { + "additionalProperties": {}, + "description": "Reviews associated with the result.", + "properties": { + "results": { + "description": "A list of trip advisor reviews for the entity.", + "items": { + "additionalProperties": {}, + "properties": { + "author": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "date": { + "description": "The date when the review was published.", + "type": "string" + }, + "description": { + "description": "A description seen in the review.", + "type": "string" + }, + "rating": { + "additionalProperties": {}, + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "title": { + "description": "The title of the review.", + "type": "string" + } + }, + "required": [ + "title", + "description", + "date" + ], + "type": "object" + }, + "type": "array" + }, + "reviews_in_foreign_language": { + "description": "Any reviews available in a foreign language.", + "type": "boolean" + }, + "viewMoreUrl": { + "description": "A URL to a web page where more information on the result can be seen.", + "type": "string" + } + }, + "type": "object" + }, + "serves_cuisine": { + "description": "List of cuisine categories served.", + "items": { + "type": "string" + }, + "type": "array" + }, + "thumbnail": { + "additionalProperties": {}, + "description": "The thumbnail associated with the location.", + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "timezone": { + "description": "IANA timezone identifier for the location.", + "type": "string" + }, + "timezone_offset": { + "description": "UTC offset of the location's timezone, in minutes.", + "type": "number" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "type": { + "const": "location_result", + "description": "Result type identifier.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + }, + "zoom_level": { + "description": "Suggested zoom level when displaying on a map.", + "type": "number" + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both", + "type", + "provider_url", + "zoom_level" + ], + "type": "object" + }, + "type": "array" + }, + "pois_nearby": { + "description": "List of POIs nearby this address.", + "items": { + "additionalProperties": {}, + "properties": { + "action": { + "additionalProperties": {}, + "description": "The action associated with the result.", + "properties": { + "type": { + "description": "The type representing the action.", + "type": "string" + }, + "url": { + "description": "A URL representing the action to be taken.", + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + "categories": { + "description": "List of category labels.", + "items": { + "type": "string" + }, + "type": "array" + }, + "contact": { + "additionalProperties": {}, + "description": "The contact of the location.", + "properties": { + "email": { + "description": "Contact email for the business.", + "type": "string" + }, + "telephone": { + "description": "Contact telephone number for the business.", + "type": "string" + } + }, + "type": "object" + }, + "coordinates": { + "description": "Latitude/longitude pair for the location, when available.", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "distance": { + "additionalProperties": {}, + "description": "Distance from the user's geolocation, if available.", + "properties": { + "units": { + "description": "The name of the unit associated with the quantity.", + "type": "string" + }, + "value": { + "description": "The quantity of the unit.", + "type": "number" + } + }, + "required": [ + "value", + "units" + ], + "type": "object" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "icon_category": { + "description": "Suggested icon category (e.g. \"cafe\").", + "type": "string" + }, + "id": { + "description": "Temporary identifier for the location, valid for ~8 hours. Can be used with brave_local_search-style endpoints to fetch additional information.", + "type": "string" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "opening_hours": { + "additionalProperties": {}, + "description": "The opening hours of the location.", + "properties": { + "current_day": { + "description": "Opening hours for the current day. May contain multiple entries when the location closes and reopens during the day.", + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "days": { + "description": "Opening hours for the rest of the week. Each entry may itself be either a single day-hours object or an array of day-hours objects (when a day has multiple open/close intervals).", + "items": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "pictures": { + "additionalProperties": {}, + "description": "Pictures associated with the result.", + "properties": { + "results": { + "description": "Thumbnail entries for the location.", + "items": { + "additionalProperties": {}, + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "type": "array" + }, + "viewMoreUrl": { + "description": "URL where additional pictures can be viewed.", + "type": "string" + } + }, + "type": "object" + }, + "postal_address": { + "additionalProperties": {}, + "description": "The postal address of the location.", + "properties": { + "addressLocality": { + "description": "The address locality or subregion associated with the location.", + "type": "string" + }, + "addressRegion": { + "description": "The region associated with the location. Usually a state.", + "type": "string" + }, + "country": { + "description": "The country associated with the location.", + "type": "string" + }, + "displayAddress": { + "description": "The displayed address string.", + "type": "string" + }, + "postalCode": { + "description": "The postal code associated with the location.", + "type": "string" + }, + "streetAddress": { + "description": "The street address associated with the location.", + "type": "string" + }, + "type": { + "const": "PostalAddress", + "type": "string" + } + }, + "required": [ + "type", + "displayAddress" + ], + "type": "object" + }, + "price_range": { + "description": "Price classification string for the business (e.g. \"$\", \"$$\").", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "profiles": { + "description": "External profiles (e.g. data providers) associated with the result.", + "items": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "provider_url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "URL of the upstream provider for this result. May be an empty string." + }, + "rating": { + "additionalProperties": {}, + "description": "The rating of the result.", + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "results": { + "description": "Web results related to this location.", + "items": { + "additionalProperties": {}, + "properties": { + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "meta_url": { + "additionalProperties": {}, + "properties": { + "favicon": { + "description": "The favicon used for the URL.", + "type": "string" + }, + "hostname": { + "description": "The lowercased domain name extracted from the URL.", + "type": "string" + }, + "netloc": { + "description": "The network location part extracted from the URL.", + "type": "string" + }, + "path": { + "description": "The hierarchical path of the URL useful as a display string.", + "type": "string" + }, + "scheme": { + "description": "The protocol scheme extracted from the URL.", + "type": "string" + } + }, + "required": [ + "scheme", + "netloc" + ], + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both" + ], + "type": "object" + }, + "type": "array" + }, + "reviews": { + "additionalProperties": {}, + "description": "Reviews associated with the result.", + "properties": { + "results": { + "description": "A list of trip advisor reviews for the entity.", + "items": { + "additionalProperties": {}, + "properties": { + "author": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "date": { + "description": "The date when the review was published.", + "type": "string" + }, + "description": { + "description": "A description seen in the review.", + "type": "string" + }, + "rating": { + "additionalProperties": {}, + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "title": { + "description": "The title of the review.", + "type": "string" + } + }, + "required": [ + "title", + "description", + "date" + ], + "type": "object" + }, + "type": "array" + }, + "reviews_in_foreign_language": { + "description": "Any reviews available in a foreign language.", + "type": "boolean" + }, + "viewMoreUrl": { + "description": "A URL to a web page where more information on the result can be seen.", + "type": "string" + } + }, + "type": "object" + }, + "serves_cuisine": { + "description": "List of cuisine categories served.", + "items": { + "type": "string" + }, + "type": "array" + }, + "thumbnail": { + "additionalProperties": {}, + "description": "The thumbnail associated with the location.", + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "timezone": { + "description": "IANA timezone identifier for the location.", + "type": "string" + }, + "timezone_offset": { + "description": "UTC offset of the location's timezone, in minutes.", + "type": "number" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "type": { + "const": "location_result", + "description": "Result type identifier.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + }, + "zoom_level": { + "description": "Suggested zoom level when displaying on a map.", + "type": "number" + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both", + "type", + "provider_url", + "zoom_level" + ], + "type": "object" + }, + "type": "array" + }, + "postal_address": { + "additionalProperties": {}, + "description": "The postal address of the address.", + "properties": { + "addressLocality": { + "description": "The address locality or subregion associated with the location.", + "type": "string" + }, + "addressRegion": { + "description": "The region associated with the location. Usually a state.", + "type": "string" + }, + "country": { + "description": "The country associated with the location.", + "type": "string" + }, + "displayAddress": { + "description": "The displayed address string.", + "type": "string" + }, + "postalCode": { + "description": "The postal code associated with the location.", + "type": "string" + }, + "streetAddress": { + "description": "The street address associated with the location.", + "type": "string" + }, + "type": { + "const": "PostalAddress", + "type": "string" + } + }, + "required": [ + "type", + "displayAddress" + ], + "type": "object" + }, + "type": { + "description": "Result is \"address\" when the result refers to an explicit street + number, but \"street\" when it refers only to the street itself.", + "enum": [ + "address", + "street" + ], + "type": "string" + }, + "zoom_level": { + "description": "Suggested zoom level when displaying on a map.", + "type": "number" + } + }, + "required": [ + "type", + "name", + "coordinates", + "pois", + "pois_nearby", + "zoom_level" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / citiesAdded value: +{ + "description": "City matches for the query. Typically populated when the query is a bare or ambiguous city name (e.g. \"springfield\", \"san francisco\").", + "items": { + "additionalProperties": {}, + "properties": { + "coordinates": { + "description": "Latitude/longitude of the city", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "country": { + "description": "ISO country code for the city", + "type": "string" + }, + "name": { + "description": "Name of the city", + "type": "string" + }, + "thumbnail": { + "additionalProperties": {}, + "description": "Primary image for the city", + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "type": { + "const": "city", + "type": "string" + } + }, + "required": [ + "type", + "name", + "country", + "coordinates", + "thumbnail" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / location / descriptionPrevious value: -"The resolved search-area metadata, when available."New value: +"The search area as resolved by the API (e.g. coordinates + city name). Useful for confirming the API interpreted the input as expected and for grounding follow-up queries." - changed
Output schema / properties / location / properties / coordinates / itemsPrevious value: -{ - "type": "number" -}New value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - changed
Output schema / properties / results / descriptionPrevious value: -"Array of points-of-interest matching the search."New value: +"Points of interest matching the search. Populated for POI-shaped queries." - added
Output schema / properties / results / items / properties / action / descriptionAdded value: +"The action associated with the result." - added
Output schema / properties / results / items / properties / contact / descriptionAdded value: +"The contact of the location." - changed
Output schema / properties / results / items / properties / coordinates / itemsPrevious value: -{ - "type": "number" -}New value: +[ + { + "type": "number" + }, + { + "type": "number" + } +] - added
Output schema / properties / results / items / properties / distance / descriptionAdded value: +"Distance from the user's geolocation, if available." - added
Output schema / properties / results / items / properties / family_friendly / descriptionAdded value: +"Whether the result is family friendly." - added
Output schema / properties / results / items / properties / is_source_both / descriptionAdded value: +"Whether the result is from both local and global sources." - added
Output schema / properties / results / items / properties / is_source_local / descriptionAdded value: +"Whether the result is from local sources." - added
Output schema / properties / results / items / properties / opening_hours / descriptionAdded value: +"The opening hours of the location." - added
Output schema / properties / results / items / properties / pictures / descriptionAdded value: +"Pictures associated with the result." - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / altAdded value: +{ + "description": "The alt text for the thumbnail.", + "type": "string" +} - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / bg_colorAdded value: +{ + "description": "The background color of the thumbnail.", + "type": "string" +} - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / duplicatedAdded value: +{ + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" +} - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / heightAdded value: +{ + "description": "The height of the thumbnail.", + "type": "number" +} - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / logoAdded value: +{ + "description": "Whether the thumbnail is a logo.", + "type": "boolean" +} - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / original / formatAdded value: +"uri" - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / themeAdded value: +{ + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" +} - added
Output schema / properties / results / items / properties / pictures / properties / results / items / properties / widthAdded value: +{ + "description": "The width of the thumbnail.", + "type": "number" +} - added
Output schema / properties / results / items / properties / pictures / properties / results / items / requiredAdded value: +[ + "src" +] - added
Output schema / properties / results / items / properties / postal_address / descriptionAdded value: +"The postal address of the location." - added
Output schema / properties / results / items / properties / postal_address / requiredAdded value: +[ + "type", + "displayAddress" +] - added
Output schema / properties / results / items / properties / profile / descriptionAdded value: +"The profile associated with the result." - added
Output schema / properties / results / items / properties / provider_url / anyOfAdded value: +[ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } +] - removed
Output schema / properties / results / items / properties / provider_url / typeRemoved value: -"string" - added
Output schema / properties / results / items / properties / rating / descriptionAdded value: +"The rating of the result." - added
Output schema / properties / results / items / properties / results / items / properties / family_friendly / descriptionAdded value: +"Whether the result is family friendly." - added
Output schema / properties / results / items / properties / results / items / properties / is_source_both / descriptionAdded value: +"Whether the result is from both local and global sources." - added
Output schema / properties / results / items / properties / results / items / properties / is_source_local / descriptionAdded value: +"Whether the result is from local sources." - added
Output schema / properties / results / items / properties / results / items / properties / profile / descriptionAdded value: +"The profile associated with the result." - added
Output schema / properties / results / items / properties / results / items / properties / url / anyOfAdded value: +[ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } +] - changed
Output schema / properties / results / items / properties / results / items / properties / url / descriptionPrevious value: -"Primary URL associated with the location."New value: +"Primary URL associated with the location. May be an empty string." - removed
Output schema / properties / results / items / properties / results / items / properties / url / typeRemoved value: -"string" - changed
Output schema / properties / results / items / properties / results / items / requiredPrevious value: -[ - "title", - "url" -]New value: +[ + "title", + "url", + "is_source_local", + "is_source_both" +] - added
Output schema / properties / results / items / properties / reviews / descriptionAdded value: +"Reviews associated with the result." - added
Output schema / properties / results / items / properties / thumbnail / descriptionAdded value: +"The thumbnail associated with the location." - added
Output schema / properties / results / items / properties / thumbnail / properties / altAdded value: +{ + "description": "The alt text for the thumbnail.", + "type": "string" +} - added
Output schema / properties / results / items / properties / thumbnail / properties / bg_colorAdded value: +{ + "description": "The background color of the thumbnail.", + "type": "string" +} - added
Output schema / properties / results / items / properties / thumbnail / properties / duplicatedAdded value: +{ + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" +} - added
Output schema / properties / results / items / properties / thumbnail / properties / heightAdded value: +{ + "description": "The height of the thumbnail.", + "type": "number" +} - added
Output schema / properties / results / items / properties / thumbnail / properties / logoAdded value: +{ + "description": "Whether the thumbnail is a logo.", + "type": "boolean" +} - added
Output schema / properties / results / items / properties / thumbnail / properties / original / formatAdded value: +"uri" - added
Output schema / properties / results / items / properties / thumbnail / properties / themeAdded value: +{ + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" +} - added
Output schema / properties / results / items / properties / thumbnail / properties / widthAdded value: +{ + "description": "The width of the thumbnail.", + "type": "number" +} - added
Output schema / properties / results / items / properties / thumbnail / requiredAdded value: +[ + "src" +] - added
Output schema / properties / results / items / properties / url / anyOfAdded value: +[ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } +] - changed
Output schema / properties / results / items / properties / url / descriptionPrevious value: -"Primary URL associated with the location."New value: +"Primary URL associated with the location. May be an empty string." - removed
Output schema / properties / results / items / properties / url / typeRemoved value: -"string" - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "title", - "url" -]New value: +[ + "title", + "url", + "is_source_local", + "is_source_both", + "type", + "provider_url", + "zoom_level" +] - added
Output schema / properties / streetsAdded value: +{ + "description": "Street matches. Typically populated when the query is a street name AND is geographically anchored via `latitude`+`longitude` or a specific `location`.", + "items": { + "additionalProperties": {}, + "properties": { + "coordinates": { + "description": "Latitude/longitude of the address", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "distance": { + "additionalProperties": {}, + "description": "Distance from the user's geolocation, if available.", + "properties": { + "units": { + "description": "The name of the unit associated with the quantity.", + "type": "string" + }, + "value": { + "description": "The quantity of the unit.", + "type": "number" + } + }, + "required": [ + "value", + "units" + ], + "type": "object" + }, + "name": { + "description": "The name of the address.", + "type": "string" + }, + "pois": { + "description": "List of POIs located at this address.", + "items": { + "additionalProperties": {}, + "properties": { + "action": { + "additionalProperties": {}, + "description": "The action associated with the result.", + "properties": { + "type": { + "description": "The type representing the action.", + "type": "string" + }, + "url": { + "description": "A URL representing the action to be taken.", + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + "categories": { + "description": "List of category labels.", + "items": { + "type": "string" + }, + "type": "array" + }, + "contact": { + "additionalProperties": {}, + "description": "The contact of the location.", + "properties": { + "email": { + "description": "Contact email for the business.", + "type": "string" + }, + "telephone": { + "description": "Contact telephone number for the business.", + "type": "string" + } + }, + "type": "object" + }, + "coordinates": { + "description": "Latitude/longitude pair for the location, when available.", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "distance": { + "additionalProperties": {}, + "description": "Distance from the user's geolocation, if available.", + "properties": { + "units": { + "description": "The name of the unit associated with the quantity.", + "type": "string" + }, + "value": { + "description": "The quantity of the unit.", + "type": "number" + } + }, + "required": [ + "value", + "units" + ], + "type": "object" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "icon_category": { + "description": "Suggested icon category (e.g. \"cafe\").", + "type": "string" + }, + "id": { + "description": "Temporary identifier for the location, valid for ~8 hours. Can be used with brave_local_search-style endpoints to fetch additional information.", + "type": "string" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "opening_hours": { + "additionalProperties": {}, + "description": "The opening hours of the location.", + "properties": { + "current_day": { + "description": "Opening hours for the current day. May contain multiple entries when the location closes and reopens during the day.", + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "days": { + "description": "Opening hours for the rest of the week. Each entry may itself be either a single day-hours object or an array of day-hours objects (when a day has multiple open/close intervals).", + "items": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "pictures": { + "additionalProperties": {}, + "description": "Pictures associated with the result.", + "properties": { + "results": { + "description": "Thumbnail entries for the location.", + "items": { + "additionalProperties": {}, + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "type": "array" + }, + "viewMoreUrl": { + "description": "URL where additional pictures can be viewed.", + "type": "string" + } + }, + "type": "object" + }, + "postal_address": { + "additionalProperties": {}, + "description": "The postal address of the location.", + "properties": { + "addressLocality": { + "description": "The address locality or subregion associated with the location.", + "type": "string" + }, + "addressRegion": { + "description": "The region associated with the location. Usually a state.", + "type": "string" + }, + "country": { + "description": "The country associated with the location.", + "type": "string" + }, + "displayAddress": { + "description": "The displayed address string.", + "type": "string" + }, + "postalCode": { + "description": "The postal code associated with the location.", + "type": "string" + }, + "streetAddress": { + "description": "The street address associated with the location.", + "type": "string" + }, + "type": { + "const": "PostalAddress", + "type": "string" + } + }, + "required": [ + "type", + "displayAddress" + ], + "type": "object" + }, + "price_range": { + "description": "Price classification string for the business (e.g. \"$\", \"$$\").", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "profiles": { + "description": "External profiles (e.g. data providers) associated with the result.", + "items": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "provider_url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "URL of the upstream provider for this result. May be an empty string." + }, + "rating": { + "additionalProperties": {}, + "description": "The rating of the result.", + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "results": { + "description": "Web results related to this location.", + "items": { + "additionalProperties": {}, + "properties": { + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "meta_url": { + "additionalProperties": {}, + "properties": { + "favicon": { + "description": "The favicon used for the URL.", + "type": "string" + }, + "hostname": { + "description": "The lowercased domain name extracted from the URL.", + "type": "string" + }, + "netloc": { + "description": "The network location part extracted from the URL.", + "type": "string" + }, + "path": { + "description": "The hierarchical path of the URL useful as a display string.", + "type": "string" + }, + "scheme": { + "description": "The protocol scheme extracted from the URL.", + "type": "string" + } + }, + "required": [ + "scheme", + "netloc" + ], + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both" + ], + "type": "object" + }, + "type": "array" + }, + "reviews": { + "additionalProperties": {}, + "description": "Reviews associated with the result.", + "properties": { + "results": { + "description": "A list of trip advisor reviews for the entity.", + "items": { + "additionalProperties": {}, + "properties": { + "author": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "date": { + "description": "The date when the review was published.", + "type": "string" + }, + "description": { + "description": "A description seen in the review.", + "type": "string" + }, + "rating": { + "additionalProperties": {}, + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "title": { + "description": "The title of the review.", + "type": "string" + } + }, + "required": [ + "title", + "description", + "date" + ], + "type": "object" + }, + "type": "array" + }, + "reviews_in_foreign_language": { + "description": "Any reviews available in a foreign language.", + "type": "boolean" + }, + "viewMoreUrl": { + "description": "A URL to a web page where more information on the result can be seen.", + "type": "string" + } + }, + "type": "object" + }, + "serves_cuisine": { + "description": "List of cuisine categories served.", + "items": { + "type": "string" + }, + "type": "array" + }, + "thumbnail": { + "additionalProperties": {}, + "description": "The thumbnail associated with the location.", + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "timezone": { + "description": "IANA timezone identifier for the location.", + "type": "string" + }, + "timezone_offset": { + "description": "UTC offset of the location's timezone, in minutes.", + "type": "number" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "type": { + "const": "location_result", + "description": "Result type identifier.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + }, + "zoom_level": { + "description": "Suggested zoom level when displaying on a map.", + "type": "number" + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both", + "type", + "provider_url", + "zoom_level" + ], + "type": "object" + }, + "type": "array" + }, + "pois_nearby": { + "description": "List of POIs nearby this address.", + "items": { + "additionalProperties": {}, + "properties": { + "action": { + "additionalProperties": {}, + "description": "The action associated with the result.", + "properties": { + "type": { + "description": "The type representing the action.", + "type": "string" + }, + "url": { + "description": "A URL representing the action to be taken.", + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + "categories": { + "description": "List of category labels.", + "items": { + "type": "string" + }, + "type": "array" + }, + "contact": { + "additionalProperties": {}, + "description": "The contact of the location.", + "properties": { + "email": { + "description": "Contact email for the business.", + "type": "string" + }, + "telephone": { + "description": "Contact telephone number for the business.", + "type": "string" + } + }, + "type": "object" + }, + "coordinates": { + "description": "Latitude/longitude pair for the location, when available.", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "distance": { + "additionalProperties": {}, + "description": "Distance from the user's geolocation, if available.", + "properties": { + "units": { + "description": "The name of the unit associated with the quantity.", + "type": "string" + }, + "value": { + "description": "The quantity of the unit.", + "type": "number" + } + }, + "required": [ + "value", + "units" + ], + "type": "object" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "icon_category": { + "description": "Suggested icon category (e.g. \"cafe\").", + "type": "string" + }, + "id": { + "description": "Temporary identifier for the location, valid for ~8 hours. Can be used with brave_local_search-style endpoints to fetch additional information.", + "type": "string" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "opening_hours": { + "additionalProperties": {}, + "description": "The opening hours of the location.", + "properties": { + "current_day": { + "description": "Opening hours for the current day. May contain multiple entries when the location closes and reopens during the day.", + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "days": { + "description": "Opening hours for the rest of the week. Each entry may itself be either a single day-hours object or an array of day-hours objects (when a day has multiple open/close intervals).", + "items": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "properties": { + "abbr_name": { + "description": "Short name of the day of the week (e.g. \"Mon\").", + "type": "string" + }, + "closes": { + "description": "Closing time in 24h format (e.g. \"17:00\").", + "type": "string" + }, + "full_name": { + "description": "Full name of the day of the week (e.g. \"Monday\").", + "type": "string" + }, + "opens": { + "description": "Opening time in 24h format (e.g. \"09:00\").", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "pictures": { + "additionalProperties": {}, + "description": "Pictures associated with the result.", + "properties": { + "results": { + "description": "Thumbnail entries for the location.", + "items": { + "additionalProperties": {}, + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "type": "array" + }, + "viewMoreUrl": { + "description": "URL where additional pictures can be viewed.", + "type": "string" + } + }, + "type": "object" + }, + "postal_address": { + "additionalProperties": {}, + "description": "The postal address of the location.", + "properties": { + "addressLocality": { + "description": "The address locality or subregion associated with the location.", + "type": "string" + }, + "addressRegion": { + "description": "The region associated with the location. Usually a state.", + "type": "string" + }, + "country": { + "description": "The country associated with the location.", + "type": "string" + }, + "displayAddress": { + "description": "The displayed address string.", + "type": "string" + }, + "postalCode": { + "description": "The postal code associated with the location.", + "type": "string" + }, + "streetAddress": { + "description": "The street address associated with the location.", + "type": "string" + }, + "type": { + "const": "PostalAddress", + "type": "string" + } + }, + "required": [ + "type", + "displayAddress" + ], + "type": "object" + }, + "price_range": { + "description": "Price classification string for the business (e.g. \"$\", \"$$\").", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "profiles": { + "description": "External profiles (e.g. data providers) associated with the result.", + "items": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "provider_url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "URL of the upstream provider for this result. May be an empty string." + }, + "rating": { + "additionalProperties": {}, + "description": "The rating of the result.", + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "results": { + "description": "Web results related to this location.", + "items": { + "additionalProperties": {}, + "properties": { + "description": { + "description": "Short description of the location (e.g. \"Plaza\", \"Theater\").", + "type": "string" + }, + "family_friendly": { + "description": "Whether the result is family friendly.", + "type": "boolean" + }, + "fetched_content_timestamp": { + "description": "The timestamp of the content when it was fetched.", + "type": "number" + }, + "is_source_both": { + "description": "Whether the result is from both local and global sources.", + "type": "boolean" + }, + "is_source_local": { + "description": "Whether the result is from local sources.", + "type": "boolean" + }, + "language": { + "description": "The language of the page.", + "type": "string" + }, + "meta_url": { + "additionalProperties": {}, + "properties": { + "favicon": { + "description": "The favicon used for the URL.", + "type": "string" + }, + "hostname": { + "description": "The lowercased domain name extracted from the URL.", + "type": "string" + }, + "netloc": { + "description": "The network location part extracted from the URL.", + "type": "string" + }, + "path": { + "description": "The hierarchical path of the URL useful as a display string.", + "type": "string" + }, + "scheme": { + "description": "The protocol scheme extracted from the URL.", + "type": "string" + } + }, + "required": [ + "scheme", + "netloc" + ], + "type": "object" + }, + "page_age": { + "description": "The age of the page as a date string.", + "type": "string" + }, + "page_fetched": { + "description": "The date the page was last fetched as a date string.", + "type": "string" + }, + "profile": { + "additionalProperties": {}, + "description": "The profile associated with the result.", + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both" + ], + "type": "object" + }, + "type": "array" + }, + "reviews": { + "additionalProperties": {}, + "description": "Reviews associated with the result.", + "properties": { + "results": { + "description": "A list of trip advisor reviews for the entity.", + "items": { + "additionalProperties": {}, + "properties": { + "author": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "date": { + "description": "The date when the review was published.", + "type": "string" + }, + "description": { + "description": "A description seen in the review.", + "type": "string" + }, + "rating": { + "additionalProperties": {}, + "properties": { + "bestRating": { + "description": "Highest possible rating value.", + "type": "number" + }, + "is_tripadvisor": { + "description": "Whether the rating originates from Tripadvisor.", + "type": "boolean" + }, + "profile": { + "additionalProperties": {}, + "properties": { + "img": { + "type": "string" + }, + "long_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ratingValue": { + "description": "The current value of the rating.", + "type": "number" + }, + "reviewCount": { + "description": "Number of reviews backing the rating.", + "type": "number" + } + }, + "type": "object" + }, + "title": { + "description": "The title of the review.", + "type": "string" + } + }, + "required": [ + "title", + "description", + "date" + ], + "type": "object" + }, + "type": "array" + }, + "reviews_in_foreign_language": { + "description": "Any reviews available in a foreign language.", + "type": "boolean" + }, + "viewMoreUrl": { + "description": "A URL to a web page where more information on the result can be seen.", + "type": "string" + } + }, + "type": "object" + }, + "serves_cuisine": { + "description": "List of cuisine categories served.", + "items": { + "type": "string" + }, + "type": "array" + }, + "thumbnail": { + "additionalProperties": {}, + "description": "The thumbnail associated with the location.", + "properties": { + "alt": { + "description": "The alt text for the thumbnail.", + "type": "string" + }, + "bg_color": { + "description": "The background color of the thumbnail.", + "type": "string" + }, + "duplicated": { + "description": "Whether the thumbnail is duplicated.", + "type": "boolean" + }, + "height": { + "description": "The height of the thumbnail.", + "type": "number" + }, + "logo": { + "description": "Whether the thumbnail is a logo.", + "type": "boolean" + }, + "original": { + "description": "The original URL of the image.", + "format": "uri", + "type": "string" + }, + "src": { + "description": "The served URL of the picture thumbnail.", + "type": "string" + }, + "theme": { + "description": "The theme of the thumbnail (e.g. \"light\", \"dark\").", + "type": "string" + }, + "width": { + "description": "The width of the thumbnail.", + "type": "number" + } + }, + "required": [ + "src" + ], + "type": "object" + }, + "timezone": { + "description": "IANA timezone identifier for the location.", + "type": "string" + }, + "timezone_offset": { + "description": "UTC offset of the location's timezone, in minutes.", + "type": "number" + }, + "title": { + "description": "The display title of the location.", + "type": "string" + }, + "type": { + "const": "location_result", + "description": "Result type identifier.", + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Primary URL associated with the location. May be an empty string." + }, + "zoom_level": { + "description": "Suggested zoom level when displaying on a map.", + "type": "number" + } + }, + "required": [ + "title", + "url", + "is_source_local", + "is_source_both", + "type", + "provider_url", + "zoom_level" + ], + "type": "object" + }, + "type": "array" + }, + "postal_address": { + "additionalProperties": {}, + "description": "The postal address of the address.", + "properties": { + "addressLocality": { + "description": "The address locality or subregion associated with the location.", + "type": "string" + }, + "addressRegion": { + "description": "The region associated with the location. Usually a state.", + "type": "string" + }, + "country": { + "description": "The country associated with the location.", + "type": "string" + }, + "displayAddress": { + "description": "The displayed address string.", + "type": "string" + }, + "postalCode": { + "description": "The postal code associated with the location.", + "type": "string" + }, + "streetAddress": { + "description": "The street address associated with the location.", + "type": "string" + }, + "type": { + "const": "PostalAddress", + "type": "string" + } + }, + "required": [ + "type", + "displayAddress" + ], + "type": "object" + }, + "type": { + "description": "Result is \"address\" when the result refers to an explicit street + number, but \"street\" when it refers only to the street itself.", + "enum": [ + "address", + "street" + ], + "type": "string" + }, + "zoom_level": { + "description": "Suggested zoom level when displaying on a map.", + "type": "number" + } + }, + "required": [ + "type", + "name", + "coordinates", + "pois", + "pois_nearby", + "zoom_level" + ], + "type": "object" + }, + "type": "array" +}
TDQS
The tools are largely distinct, covering web, image, video, news, local, place, summarizer, and LLM context. The only potential overlap is between brave_local_search and brave_place_search, but their descriptions clearly differentiate use cases (queries like 'near me' vs. structured place lookups), so agents can select correctly.
All tools follow the same 'brave_<descriptive>' pattern, making it predictable and easy to infer functionality. Names are clear and consistently snake_case.
With 8 tools, the set is well-scoped for a search server—covering general search, specialized content types, and advanced features like summarization and context retrieval without being bloated.
The toolset covers a comprehensive range of search needs: general web, images, videos, news, local businesses, places, summarization, and LLM-context retrieval. This appears to fully address the domain of a search API.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Brave Search MCP — independent web index (no Google/Bing dependency)
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Scrape, crawl and search the web for AI agents via MCP.
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Related MCP Servers
- -licenseNot gradedqualityAmaintenanceAn MCP server implementation that integrates the Brave Search API, providing both web and local search capabilities.20,92790,042MIT
- AlicenseAqualityDmaintenanceAn MCP Server implementation that integrates the Brave Search API, providing, Web Search, Local Points of Interest Search, Image Search, Video Search, News Search and LLM Context Search capabilities5259125GPL 3.0
- AlicenseBqualityDmaintenanceEnables web search capabilities through the Brave Search API, including web search, local POI lookups, and rich search results retrieval for MCP-compatible clients.421MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates the Brave Search API to provide comprehensive web and local search capabilities. It enables users to perform general web queries, search for news, and find local business information with smart fallback functionality.20,927MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/brave/brave-search-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server