ai-search-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BRAVE_API_KEY | No | Required when using the 'brave' engine. | |
| SEARCH_ENGINE | No | Single engine or comma-separated engine chain (e.g. brave,tavily). Set to 'auto' for region-based automatic selection. | auto |
| SEARCH_REGION | No | Default region for engine auto-selection and search tool, e.g. cn-zh. | |
| TAVILY_API_KEY | No | Required when using the 'tavily' engine. | |
| FETCH_MAX_LENGTH | No | Maximum Markdown length in characters for fetch_page/research pages. | 8000 |
| SEARCH_CACHE_TTL | No | Cache TTL in seconds (0 disables cache). | 600 |
| SEARCH_LOG_LEVEL | No | Log level: debug, info, warn, error, or off. | info |
| SEARCH_LOG_QUERY | No | Set to '0' to mask query terms in logs for privacy. | 1 |
| SEARCH_CACHE_FILE | No | Cache persistence file path, e.g. ./.cache/search.json. | |
| SEARCH_HTTP_PROXY | No | Proxy address, e.g. http://127.0.0.1:7890 (falls back to HTTPS_PROXY/HTTP_PROXY). | |
| SEARCH_TIMEOUT_MS | No | Per-request timeout in milliseconds. | 10000 |
| SEARCH_USER_AGENT | No | Custom User-Agent override. | |
| SEARCH_MAX_RESULTS | No | Default number of results (1-20). | 10 |
| SEARCH_LANG_ROUTING | No | Set to '1' to prefer Baidu/Sogou for Chinese queries. | 0 |
| SEARCH_MAX_DELAY_MS | No | Maximum random delay between requests in milliseconds (0 disables). | 2000 |
| SEARCH_MIN_DELAY_MS | No | Minimum random delay between requests in milliseconds (0 disables). | 500 |
| SEARCH_SELECTOR_FILE | No | Local selectors override file path (JSON) for parsing rules. | |
| SEARCH_RATE_PER_MINUTE | No | Max requests per minute per engine (0 disables rate limiting). | 8 |
| SEARCH_SELECTOR_OVERRIDE_URL | No | Remote selectors override URL (e.g. GitHub Gist) to fetch at startup. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| searchA | Search the web and return structured results. Output: {"query":str,"queryRewritten":str?,"queryYear":int?,"engine":str,"engineSwitched":bool,"cached":bool, "total":int,"deduped":int,"freshnessApplied":bool,"freshnessAutoInferred":bool?, "results":[{"id":str,"title":str,"url":str,"snippet":str,"domain":str}]} Use the "id" of a result with fetch_page to deep-read a page. |
| fetch_pageA | Fetch a page and return its content as structured Markdown. Pass either "url" or the "id" returned by search/research (id looks up the already-seen URL). extractMode "summary" returns de-noised mainText (saves tokens); "full" returns the full page Markdown. Output: {"url":str,"title":str,"description":str,"headings":[{level:int,text:str}], "mainText":str,"markdown":str,"length":int,"truncated":bool,"cached":bool} |
| researchA | One-call research: search + fetch the top pages and return an evidence brief. Use this instead of chaining search/fetch_page yourself. Pages are selected for domain diversity (top hit per domain, then by rank) so one anti-bot 403 site can't sink the brief. Output: {"query":str,"engine":str,"cached":bool, "overview":{"total":int,"results":[{"id":str,"title":str,"url":str,"snippet":str,"domain":str}]}, "pages":[{"id":str,"url":str,"rank":int,"title":str,"headings":[{level:int,text:str}],"content":str,"length":int,"truncated":bool}|{"url":str,"rank":int,"error":str}]} Base your answer on the pages' content and cite their URLs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: search for web results, fetch_page for retrieving a specific page's content, and research for combining search and deep-reading. There is no overlap or chance of misselection.
All tool names follow the same snake_case, verb_noun pattern (fetch_page, search, research). Although 'search' and 'research' are single-word verbs, the pattern is consistent and predictable.
With only 3 tools, the server is well-scoped for a web search and research workflow. Each tool earns its place with minimal redundancy.
The tool surface covers the full research lifecycle: search to discover results, fetch_page to retrieve content, and research to combine both efficiently. No critical gaps exist for the stated purpose.