Search MCP
# Search MCP
The Universal MCP Server exposes tools for your workflows and is designed for prompt-first usage in MCP-compatible clients.
## Installation
### Prerequisites
- Node.js 18+
- Set `SEARCH_MCP_...` in your environment
### Get an API key
- If your tools require an external API, obtain a key from the provider’s docs/console.
- Otherwise, you can skip this step.
### Build locally
```bash
cd /path/to/search-mcp
npm i
npm run build
```
## Setup: Claude Code (CLI)
Use this one-liner (replace with your real values):
```bash
claude mcp add URL-Context-MCP -s user -e SEARCH_MCP_API_KEY="sk-your-real-key" -- npx @taiyokimura/url-context-mcp@latest
```
To remove:
```bash
claude mcp remove Search MCP
```
## Setup: Cursor
Create .cursor/mcp.json in your client (do not commit it here):
```json
{
"mcpServers": {
"url-context-mcp": {
"command": "npx",
"args": ["@taiyokimura/url-context-mcp@latest"],
"env": { "SEARCH_MCP_API_KEY": "sk-your-real-key" },
"autoStart": true
}
}
}
```
## Other Clients and Agents
<details>
<summary>VS Code</summary>
Install via URI or CLI:
```bash
code --add-mcp '{"name":"url-context-mcp","command":"npx","args":["@taiyokimura/url-context-mcp@latest"],"env":{"SEARCH_MCP_API_KEY":"sk-your-real-key"}}'
```
</details>
<details>
<summary>Claude Desktop</summary>
Follow the MCP install guide and reuse the standard config above.
</details>
<details>
<summary>LM Studio</summary>
- Command: npx
- Args: ["@taiyokimura/url-context-mcp@latest"]
- Env: SEARCH_MCP_API_KEY=sk-your-real-key
</details>
<details>
<summary>Goose</summary>
- Type: STDIO
- Command: npx
- Args: @taiyokimura/url-context-mcp@latest
- Enabled: true
</details>
<details>
<summary>opencode</summary>
Example ~/.config/opencode/opencode.json:
```json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"url-context-mcp": {
"type": "local",
"command": ["npx", "@taiyokimura/url-context-mcp@latest"],
"enabled": true
}
}
}
```
</details>
<details>
<summary>Qodo Gen</summary>
Add a new MCP and paste the standard JSON config.
</details>
<details>
<summary>Windsurf</summary>
See docs and reuse the standard config above.
</details>
## Setup: Codex (TOML)
Example (Serena):
```toml
[mcp_servers.serena]
command = "uvx"
args = ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server", "--context", "codex"]
```
This server (minimal):
```toml
[mcp_servers.url-context-mcp]
command = "npx"
args = ["@taiyokimura/url-context-mcp@latest"]
# Optional:
# SEARCH_MCP_API_KEY = "sk-your-real-key"
# MCP_NAME = "url-context-mcp"
```
## Configuration (Env)
- SEARCH_MCP_API_KEY: Your API key (if applicable)
- MCP_NAME: Server name override (default: url-context-mcp)
## Available Tools
- web_search
- inputs: object { query: string (required), count?: number, offset?: number, safeSearch?: 'off'|'moderate'|'strict', country?: string, freshness?: 'pd'|'pw'|'pm'|'py', enableRichCallback?: boolean }
- outputs: object (Brave Web Search API JSON)
- local_pois
- inputs: object { ids: string[] (1-20) }
- outputs: object (Local POI API JSON)
- local_descriptions
- inputs: object { ids: string[] (1-20) }
- outputs: object (Local descriptions API JSON)
- rich_fetch
- inputs: object { callback_key: string }
- outputs: object (Rich results JSON)
## Example invocation (MCP tool call)
```json
{
"tool": "web_search",
"inputs": {
"query": "weather in munich",
"enableRichCallback": true
}
}
```
## Troubleshooting
- 401 auth errors: check SEARCH_MCP_API_KEY
- Ensure Node 18+
- Local runs: npx search-mcp after npm run build
- Inspect publish artifacts: npm pack --dry-run
## References
- MCP SDK: https://modelcontextprotocol.io/docs/sdks
- Architecture: https://modelcontextprotocol.io/docs/learn/architecture
- Server Concepts: https://modelcontextprotocol.io/docs/learn/server-concepts
- Specification: https://modelcontextprotocol.io/specification/2025-06-18/server/index
- Brave Search API: https://api.search.brave.com/app/documentation
## Name Consistency & Troubleshooting
- Always use CANONICAL_ID (url-context-mcp) for identifiers and keys.
- Use CANONICAL_DISPLAY (URL-Context MCP) only for UI labels.
- Do not mix legacy keys after registration.
Consistency Matrix:
- npm package name → @taiyokimura/url-context-mcp
- Binary name → url-context-mcp
- MCP server name (SDK metadata) → url-context-mcp
- Env default MCP_NAME → url-context-mcp
- Client registry key → url-context-mcp
- UI label → URL-Context MCP
Conflict Cleanup:
- Remove any stale keys (e.g., old display names) and re-add with url-context-mcp only.
- Cursor: configure in the UI; this project intentionally omits .cursor/mcp.json.
TDQS
Scored across 4 tools
The tools have some overlap in purpose, particularly between local_descriptions and local_pois, which both fetch location information using the same API and could be confused. However, web_search and rich_fetch are distinct in targeting general web search and rich results respectively, and the descriptions help clarify the differences.
The naming is mostly consistent with a clear pattern of using descriptive terms like 'local', 'web', and 'rich', all in snake_case. The only minor deviation is that rich_fetch uses 'fetch' while others use more specific verbs like 'search' or 'descriptions', but overall the pattern is readable and predictable.
With 4 tools, this server is well-scoped for a search-focused purpose, covering local descriptions, local points of interest, rich results, and general web search. Each tool earns its place without feeling excessive or insufficient for the domain.
The tool surface covers key search operations for both web and local domains, with minor gaps such as no explicit tool for image or news search, but agents can likely work around this using the provided tools. The inclusion of rich_fetch as a callback from web_search adds useful functionality.