mcp-deepseek-search
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., "@mcp-deepseek-searchsearch for the latest MCP news this week and summarize the most authoritative results"
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.
mcp-deepseek-search
An Model Context Protocol server that exposes DeepSeek's web Search and Fetch tools to any MCP client — Claude Desktop, Claude Code, Cursor, Cline, ZCode, and more.
Works with any LLM: the search runs on DeepSeek's own search engine, but the results are returned to your existing model as ordinary tool output.
Features
deepseek_search— web search backed by DeepSeek's search engine, with two quality signals per result:rerank_score(0–3): relevance; ≥ 1.5 = highly relevantauthority(0–4,-1unknown): source authority; ≥ 3 = highly authoritative
deepseek_fetch— fetch a single page and get its main content as MarkdownPowerful query syntax:
site:,-site:,-term,"exact phrase",-"phrase",lang:zh,en,after:YYYY-MM-DD,before:YYYY-MM-DDBuilt-in throttling (stays under the 5 QPS account limit) and automatic retry on 408/429/5xx
Response-size friendly: summaries by default, full page text only on request
Related MCP server: DeepSeek Search MCP Server
Setup
Get an API key at platform.deepseek.com (web tools are billed at ¥5 per 1,000 successful calls, charged to your DeepSeek account — failed calls and empty results are not billed).
Add the server to your MCP client config:
Claude Desktop / Cursor / Cline / most clients
{
"mcpServers": {
"deepseek-web": {
"command": "npx",
"args": ["-y", "mcp-deepseek-search"],
"env": {
"DEEPSEEK_API_KEY": "sk-your-key-here"
}
}
}
}ZCode
Add the same mcpServers block to your ZCode MCP settings (Settings → MCP → Add server).
From source
git clone https://github.com/Matthewyin/deepseek-mcp
cd deepseek-mcp && npm install && npm run build
node dist/index.js # stdio MCP serverTools
deepseek_search
Parameter | Type | Required | Description |
| string | yes | 1–128 chars; supports the search syntax above |
| integer | no | 1–50 results, default 10 (does not affect billing) |
| string | no | The user's original question — improves intent matching when the query was rewritten |
| string | no | User IP to localize results (pass only with consent) |
| boolean | no | Include full page text per result (each truncated at 8,000 chars). Default |
Each result includes title, url, snippet (short, for display), summary (long, for feeding to a model), rerank_score, authority, site_name, date, and optionally content.
deepseek_fetch
Parameter | Type | Required | Description |
| string | yes | Plain |
Returns title + Markdown content (truncated at 30,000 chars).
Example
Ask your agent: "用 deepseek_search 搜一下最近一周关于 MCP 的大新闻,挑权威来源,再用 deepseek_fetch 读全文总结" — or in English: "Search for recent DeepSeek news, keep only results with authority ≥ 3, fetch the top one and summarize."
Notes & limits
Rate limit is 5 QPS per DeepSeek account (shared across all your API keys); the server throttles automatically.
HTTP 402 means your DeepSeek balance ran out; 401 means the key is invalid.
Page content depends on the target site's availability and access policy.
This is an unofficial community wrapper; not affiliated with DeepSeek.
Development
npm install
npm run build
DEEPSEEK_API_KEY=sk-... npm test # end-to-end test against the real APIReleases are automated via GitHub Actions: pushing a v* tag publishes to npm and the official MCP Registry.
License
Available Tools
2 toolsdeepseek_fetchDeepSeek Web FetchARead-only
Fetch a single web page and return its main content converted to Markdown (truncated at 30000 chars). Use after deepseek_search to read a specific result URL in full. Plain http/https URLs only; result availability depends on the target site's access policy.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page URL to fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint already declared, the description still earns credit by disclosing the output shape (Markdown of main content), a hard truncation at 30000 chars, and a non-deterministic failure mode ("result availability depends on the target site's access policy"). It doesn't cover things like redirect handling or timeouts on slow sites, but the key behaviors an agent needs are present.
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?
Three sentences, front-loaded with purpose and output format before constraints. Every clause carries operative information; nothing is redundant with the name or title.
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 one-parameter read tool with no output schema, the description covers what it returns, how much of it, what inputs are valid, and why it might fail. Nothing material is missing given the simplicity of the interface.
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 the baseline is 3; the description adds real value by constraining the accepted value to "plain http/https URLs only," which the schema cannot express. It doesn't mention the 8192-char cap, but that is already in the schema.
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 verb and resource ("Fetch a single web page") and immediately characterizes the output ("main content converted to Markdown, truncated at 30000 chars"). This is clearly distinguishable from the sibling deepseek_search, which finds URLs rather than reading them.
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?
Gives an explicit sequencing rule: "Use after deepseek_search to read a specific result URL in full," which routes the agent between the two siblings. It also states two constraints (plain http/https only, access-policy-dependent availability) but stops short of saying when *not* to fetch (e.g., non-article or auth-walled pages should be skipped).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deepseek_searchDeepSeek Web SearchARead-only
Web search powered by DeepSeek's search engine. Returns ranked results with two quality signals: rerank_score (0-3; >=1.5 means highly relevant) and authority (0-4; >=3 means highly authoritative source, -1 unknown). Query syntax: site: (limit to site), -site: (exclude site), -term (exclude word), "exact phrase", -"phrase" (exclude phrase), lang:zh,en (limit languages), after:YYYY or after:YYYY-MM-DD, before:YYYY-MM-DD. By default returns summaries only; set need_content=true to include full page text (larger response).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results to return, 1-50. Default 10. | |
| query | Yes | Search query, 1-128 Unicode chars. Supports site:, lang:, after:/before:, "phrases" and -exclusions. | |
| localization | No | User IP address used to localize results. Only pass it when appropriate and with consent. | |
| need_content | No | Include full page content per result (truncated at 8000 chars each). Default false. | |
| ori_question | No | The user's original question, if the query was rewritten. Improves intent understanding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds real value: it explains the meaning and thresholds of returned rerank_score and authority fields, and warns that need_content=true produces a larger response (up to 8000 chars per result per schema). No auth, rate-limit, or pagination behavior is discussed.
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?
Purpose and return semantics are front-loaded, and each block (scoring, syntax, content toggle) is distinct and useful. The operator grammar list is dense but earns its place as it cannot be inferred from the tool name alone.
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 no output schema, the description correctly takes on the burden of explaining the result fields and their scoring, and it covers the cost tradeoff of need_content. The main gap is relationship to the sibling deepseek_fetch and any pagination/result-cap behavior for a 1–50 count range.
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 goes beyond it by spelling out operator semantics (site:/‑site:, lang:zh,en, after:YYYY vs after:YYYY-MM-DD, phrase exclusion) and giving concrete interpretation thresholds for the score fields. It does not address the localization parameter, which the schema itself flags as consent-sensitive.
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 opening sentence names a specific verb (web search) and resource, and immediately describes the output shape (ranked results with quality signals). It does not explicitly distinguish itself from the sibling deepseek_fetch, though 'search' vs 'fetch' is inherently separable.
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?
Usage guidance is limited to parameter-level advice ('by default returns summaries only; set need_content=true...'), with no statement of when to choose this tool over deepseek_fetch (e.g., fetch a known URL vs discover URLs). The query operator list is more syntax help than tool-selection guidance.
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.
2 tool updates
v1.0.1- First observed
deepseek_fetch - First observed
deepseek_search
TDQS
Scored across 2 tools
The two tools have clearly distinct roles: deepseek_search performs ranked web search, while deepseek_fetch retrieves and converts a single page to Markdown. The description even states fetch should be used after search, eliminating ambiguity.
Both tools follow a consistent deepseek_<verb> pattern (search, fetch). The naming is predictable and easy to reason about.
Two tools is slightly below the typical 3-15 range, but the server has a narrow search-and-fetch purpose where each tool earns its place. No unnecessary tools are included.
The surface covers the full search/read workflow: query with advanced syntax and optional content, then fetch full page content for a specific URL. There are no obvious dead ends for a web search server.
Maintenance
Related MCP Connectors
Free web search for AI agents. No API key required. Hosted MCP in active development.
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.
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Related MCP Servers
- AlicenseAqualityCmaintenanceExposes DeepSeek's Search and Fetch REST APIs as two read-only MCP tools, letting any MCP-capable agent run ranked web searches and retrieve individual pages as truncated Markdown. Works with whichever model the host runs, over stdio or Streamable HTTP.2MIT
- AlicenseAqualityAmaintenanceEnables AI agents to perform real-time web search and fetch/parse webpages into clean Markdown through DeepSeek's Search and Fetch APIs. It provides configurable summaries, scoring, and robust retries for integration with MCP-compatible assistants.21MIT
- AlicenseAqualityBmaintenanceEnables MCP-capable AI clients to run web searches through DeepSeek's search engine and fetch individual webpages as Markdown. Search results include relevance scores, authority, and publication times, and support advanced query syntax such as site:, lang:, and date filters.20Apache 2.0
- AlicenseAqualityBmaintenanceEnables MCP clients such as Claude Code to run real-time web searches and fetch public web pages as Markdown through DeepSeek's official search and fetch APIs, with result pagination and response caching. Runs over stdio and only requires a DeepSeek API key, needing no browser, Docker, or database.21MIT