syn-search-mcp
Click on "Deploy 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., "@syn-search-mcp Search the web for the latest developments in Rust async runtimes"
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.
π syn-search-mcp
An MCP server that adds web search using Synthetic's Search API. Built for OpenCode, works with any MCP client.
Port of the pi-synthetic-search Pi extension to a standalone MCP server.
Features
synthetic_searchtool β automatically available to the LLM alongside built-in tools4-tier payload control to protect your context window:
Result count limit β caps at 5 results by default (configurable, max 10)
detail_levelparameter β LLM chooses its own tradeoff:summaryβ title + URL + date only (~50 tokens/result)snippetβ + 300-char text excerpt (~100 tokens/result)ai-summaryβ full text sent to AI summarizer with optional focus prompt (~300-500 tokens total)fullβ complete untruncated text (LLM opts in for deep reads)
summary_promptparameter β when usingai-summary, the LLM can provide conversation context to focus the summarizer on what mattersOverall truncation β safety net at 2000 lines / 50KB; full output saved to a temp file the LLM can
read
AI Summarizer β uses Synthetic's chat completions API (
syn:small:text) to condense search results into focused, query-relevant summariesGraceful error handling β missing key, 401, 429, network failures
Abort-aware β respects client cancellation (e.g. Esc in OpenCode) during in-flight requests
Related MCP server: Synthetic Search MCP Server
Setup
1. Build
cd syn-search-mcp
npm install
npm run buildRequires Node.js 18+.
2. Get a Synthetic API key
Sign up at synthetic.new and grab your API key (starts with syn_).
3. Add to OpenCode
Global β ~/.config/opencode/opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"syn-search": {
"type": "local",
"command": ["node", "/path/to/syn-search-mcp/dist/index.js"],
"environment": {
"SYNTHETIC_API_KEY": "{env:SYNTHETIC_API_KEY}"
},
"enabled": true
}
}
}Project-local β same object under mcp in an opencode.json at the project root.
The key is read from SYNTHETIC_API_KEY (set in your shell or passed via the environment block). You can also hardcode it there instead of {env:...}.
4. Restart OpenCode
The tool is exposed as syn-search_synthetic_search. Ask it anything that needs search:
Search the web for the latest TypeScript 5.x featuresTool parameters
Parameter | Type | Default | Description |
| string | (required) | Search terms |
|
|
| Result detail level |
| string | (none) | Context/instructions for the AI summarizer (only used with |
| number |
| Max results to return (1β10) |
detail_level guide
Mode | Output size | Tokens (est.) | Use case |
| ~500B | ~150 | Quick scan β "does anything relevant exist?" |
| ~2KB | ~550 | Relevance check β "is this worth digging into?" |
| ~1-3KB | ~300-500 | Real questions β focused, context-aware extraction |
| Up to 300KB+ | ~66K+ | Deep dive β only when raw content is needed |
ai-summary example
{
"query": "Docker multi-stage builds",
"detail_level": "ai-summary",
"summary_prompt": "User is trying to reduce a Node.js Docker image from 1.2GB to under 200MB. Focus on layer caching, Alpine vs Debian, and COPY vs ADD patterns."
}The summarizer becomes a lightweight sub-agent β the main LLM delegates research focus via summary_prompt, and only relevant info returns to the context window.
Truncation
When output exceeds 2000 lines or 50KB, it's truncated with a notice; the full output is written to a temp file:
[Output truncated: showing 1210 of 8954 lines (48.8KB of 297.3KB).
7744 lines (248.5KB) omitted.
Full output saved to: /tmp/syn-search-mcp-XXXX/search-results.txt
β use the read tool to view it.]Environment variables
Variable | Default | Description |
| (required) | Synthetic API key ( |
|
| Chat model used for |
|
| Truncation line limit |
|
| Truncation byte limit |
| (unset) | Set to |
Error handling
Scenario | Behavior |
| isError result with setup instructions |
Invalid API key (401) | isError result with key-check guidance |
Rate limited (429) | isError result with retry advice |
Network failure | isError result with connection guidance |
Empty results | Informational message (not an error) |
Request cancelled (Esc) |
|
Summarizer returns empty content | isError result suggesting |
Errors return isError: true tool results so the LLM knows the search failed and can react accordingly.
Testing
# smoke test against the live API (uses SYNTHETIC_API_KEY from your env)
node scripts/smoke-test.mjs summary
node scripts/smoke-test.mjs ai-summary
# interactive MCP inspector
npx @modelcontextprotocol/inspector node dist/index.jsLicense
MIT
Available Tools
1 toolsynthetic_searchSynthetic SearchARead-only
Search the web via Synthetic's Search API. Returns top results with titles, URLs, and text snippets. Use detail_level='ai-summary' (recommended for real questions) to get AI-summarized results with an optional summary_prompt to focus on what matters. Use 'full' for complete text. Output truncated to 2000 lines or 50.0KB; full output saved to a temp file when exceeded.
Inputs: query (required), max_results, detail_level, summary_prompt.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of selecting the wrong tool for a task. The single tool's purpose is clearly defined as web search.
The single tool name 'synthetic_search' follows a clean verb_noun pattern. With only one tool, there is no conflicting naming convention to introduce confusion.
A server with just one tool feels thin, even for a narrowly scoped search service. However, the tool is substantive and handles multiple detail levels, so it is a borderline case rather than an egregious under-provision.
The tool covers the core search lifecycle wellβretrieving results, summaries, and full text. It lacks explicit pagination or advanced filtering options, but the built-in truncation and temp-file output mitigate common gaps.
Maintenance
Related MCP Connectors
Provides AI assistants with access to Seltz's powerful Web Search capabilities.
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.
Web search and page fetch for AI agents. Results come from a shared cache; cached calls cost less.
Related MCP Servers
- AlicenseBqualityDmaintenanceExposes the Synthetic API as an MCP tool to enable web searching within Claude and other compatible applications. It provides formatted search results including titles, URLs, and text snippets for enhanced model context.166 npm22MIT
- AlicenseAqualityDmaintenanceProvides privacy-focused web search capabilities with zero-data-retention for MCP-enabled applications. It allows users to execute search queries and retrieve ranked results using the Synthetic Search API.17 npmMIT
- AlicenseAqualityDmaintenanceEnables MCP clients to perform intelligent web searches via Traylinx's Agentic Search API, returning text summaries and structured data like HTML, images, and news.1MIT
- FlicenseCqualityCmaintenanceEnables MCP clients to perform web searches through multiple AI models, with dual-mode routing for fast or cited results and consensus-based multi-engine querying to cross-verify information.2-