Skip to main content
Glama
arben-adm

Brave Search MCP Server

brave_web_search

Perform web searches using Brave Search API to retrieve relevant results for queries, with configurable result count options.

Instructions

Execute web search using Brave Search API with improved results

Args: query: Search terms count: Desired number of results (10-20)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
countNo

Implementation Reference

  • The handler function for 'brave_web_search' tool, including the MCP registration decorator. It performs a web search using the Brave API, formats up to 20 results with title, description, URL, and extra snippets.
    @self.mcp.tool() async def brave_web_search( query: str, count: Optional[int] = 20 ) -> str: """Execute web search using Brave Search API with improved results Args: query: Search terms count: Desired number of results (10-20) """ min_results = max(10, min(count, 20)) # Ensure between 10 and 20 all_results = await self._get_web_results(query, min_results) if not all_results: return "No results found for the query." formatted_results = [] for result in all_results[:min_results]: formatted_result = [ f"Title: {result.get('title', 'N/A')}", f"Description: {result.get('description', 'N/A')}", f"URL: {result.get('url', 'N/A')}" ] # Include additional context if available if result.get('extra_snippets'): formatted_result.append("Additional Context:") formatted_result.extend([f"- {snippet}" for snippet in result['extra_snippets'][:2]]) formatted_results.append("\n".join(formatted_result)) return "\n\n".join(formatted_results)
  • Supporting helper method that makes the actual HTTP request to Brave's web/search API, handles rate limiting, and falls back on error 422 by reducing count.
    async def _get_web_results(self, query: str, min_results: int) -> List[Dict]: """Fetch web results with pagination until minimum count is reached""" client = self.get_client() self.rate_limit.check() try: # Make a single request with the maximum allowed count response = await client.get( f"{self.base_url}/web/search", params={ "q": query, "count": min_results } ) response.raise_for_status() data = response.json() results = data.get("web", {}).get("results", []) return results except httpx.HTTPStatusError as e: if e.response.status_code == 422: # If we get a 422, try with a smaller count response = await client.get( f"{self.base_url}/web/search", params={ "q": query, "count": 10 # Fall back to smaller count } ) response.raise_for_status() data = response.json() return data.get("web", {}).get("results", []) raise # Re-raise other HTTP errors
  • src/server.py:57-57 (registration)
    Calls _setup_tools() in __init__ which defines and registers the tools including brave_web_search.
    self._setup_tools()
  • Input schema defined by type hints and docstring in the handler function.
    query: str, count: Optional[int] = 20 ) -> str: """Execute web search using Brave Search API with improved results Args: query: Search terms count: Desired number of results (10-20)

Other Tools

Latest Blog Posts

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/arben-adm/brave-mcp-search'

If you have feedback or need assistance with the MCP directory API, please join our Discord server