DeepSeek Web 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., "@DeepSeek Web MCPsearch the web for DeepSeek API docs site:api-docs.deepseek.com"
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.
DeepSeek Web MCP
English | 中文
An MCP server that calls DeepSeek's official Search and Fetch APIs directly. It returns search results and page content without calling a chat model to generate an answer.
This is a community project, not an official DeepSeek product. It is licensed under MIT.
Installation
You need Node.js 22 or newer and a DeepSeek API key.
Add the server to an MCP client that supports stdio. The client downloads and runs the npm package with npx; no separate installation is needed. Set DEEPSEEK_API_KEY through your client's secret manager if available. Otherwise, keep the key in a private local configuration file and never commit it to Git.
{
"mcpServers": {
"deepseek-web": {
"command": "npx",
"args": ["-y", "deepseek-web-mcp@0.1.0"],
"env": {
"DEEPSEEK_API_KEY": "YOUR_DEEPSEEK_API_KEY"
}
}
}
}The MCP client starts the server as a child process. The server does not open a web page or listen on an HTTP port. If started directly in a terminal, it waits for MCP messages without displaying a prompt.
Related MCP server: deepseek-search-mcp
Tools
Tool | Official endpoint | Result |
|
| Ranked search results with URLs, summaries, and optional page content |
|
| Page title and Markdown content |
search
{
"query": "DeepSeek site:api-docs.deepseek.com",
"count": 3,
"need_content": true
}query is required. It must contain 1 to 128 Unicode characters and cannot be all whitespace. DeepSeek's search operators are passed through, including site:, -site:, quoted phrases, lang:, after:, and before:.
Optional parameter | Meaning | Default |
| Number of results, from 1 to 50 |
|
| Include page content when available |
|
| Original user question, up to 128 Unicode characters; accepts | Omitted |
| IP address used to localize results | Omitted |
An empty search returns {"results":[]} and is not an error. Setting need_content to true does not guarantee content for every result.
fetch
{
"url": "https://api-docs.deepseek.com/guides/search"
}url is required and limited to 8192 characters. It must use HTTP or HTTPS and cannot contain a username or password. DeepSeek fetches the page. The local MCP process does not connect to the target site.
Both tools return MCP structuredContent and the same JSON as text for clients that do not use structured results. Additional fields returned by the API are preserved. Page content is passed through as received, including any Markdown escapes.
Cost and data handling
Search queries, original questions, localization IPs, and target URLs are sent to DeepSeek. Authentication uses the DEEPSEEK_API_KEY environment variable. The server does not store the key or log request content. Standard output is reserved for MCP messages.
Each tool call sends one API request. There are no automatic retries. Requests time out after 30 seconds and respond to client cancellation. A timeout or cancellation does not guarantee that DeepSeek stops processing the request.
DeepSeek lists both Search and Fetch at USD 0.75 per 1,000 successful requests that produce results. Check the official guide for current prices and limits. Free usage arrangements for products such as DeepSeek Harness do not imply that this server's direct API requests are free.
HTTP failures are returned as MCP tool errors with a status code. Upstream error bodies and exception details are not forwarded, to avoid exposing credentials. Treat web content as untrusted data, not instructions.
Testing
Run the local tests without an API key or network calls to DeepSeek:
npm testTo test against the real APIs, first set DEEPSEEK_API_KEY in your environment, then run:
npm run test:liveThe live test starts the CLI, completes the MCP stdio handshake, and calls both tools. It verifies search results and the fetched official documentation. It makes two billable API requests and prints counts, content length, and elapsed time without printing the key.
Development
To run from source:
git clone https://github.com/habitssss/deepseek-web-mcp.git
cd deepseek-web-mcp
npm ciFor a source checkout, use "command": "node" and "args": ["/absolute/path/deepseek-web-mcp/cli.js"] in your MCP configuration instead of npx.
The code uses JavaScript ES modules and needs no build step. server.js defines the tools and API requests. cli.js starts the stdio transport. Run npm test after changes, and run the live test when changing API arguments or response handling.
Available Tools
2 toolsfetchARead-onlyIdempotent
Retrieve one public web page through DeepSeek and return its title and Markdown content. Use to read a known URL. No chat model is called.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds real context beyond them: only public pages are reachable (implying no auth or paywalled content), and 'No chat model is called' rules out any expectation of LLM summarization or reasoning over the page.
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 short sentences with no filler: action and return value first, usage directive second, clarification third. Fully front-loaded.
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?
Output schema exists, so return values need not be explained, and the annotations cover the safety profile. Scope (single page, public only) is stated. Minor gap: no mention of failure behavior for unreachable or non-public URLs, which matters for a fetch tool.
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?
Only one parameter and schema coverage is 0%, so the description must carry the semantics. 'Known URL' and 'public web page' give implied format and scope, but nothing is said about URL validation, redirects, or what happens on non-public targets. A 3 is fair for a self-evident single 'url' string.
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 (retrieve), resource (one public web page), and a defined output (title and Markdown content). 'Use to read a known URL' functionally separates it from the sibling search tool, which finds URLs the agent doesn't already have.
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?
'Use to read a known URL' gives clear when-to-use context and implicitly routes away from search for unknown URLs. It stops short of an explicit 'do not use for search/discovery' exclusion, but the selection condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotent
Search the web with DeepSeek and return ranked results, source URLs, and summaries. Use for current information. No chat model is called.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results, from 1 to 50. | |
| query | Yes | Search query. Supports site:, -site:, quoted phrases, lang:, after:, and before:. | |
| localization | No | Optional IP address used to localize results. | |
| need_content | No | Include page content when available. | |
| ori_question | No | Original user question, up to 128 Unicode characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, open-world, idempotent behavior, so safety is covered. The description adds a genuinely useful behavioral fact the annotations cannot convey: 'No chat model is called', clarifying this is raw retrieval rather than an LLM-synthesized answer.
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 short sentences, front-loaded with the verb and resource, then usage, then the disambiguating constraint. Nothing is redundant and every sentence carries information.
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 an output schema present and rich annotations, the description need not explain return values or safety. It covers purpose, usage trigger, and the chat-model caveat, leaving only the fetch-vs-search routing implicit.
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 description coverage is 100%, so the query operator syntax, count bounds, localization, need_content, and ori_question are all fully documented in the schema. The description adds no parameter-level meaning beyond it, which is the baseline 3 case.
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 ('Search the web') plus the output shape (ranked results, source URLs, summaries). It clearly contrasts with the sibling 'fetch', which retrieves a known URL, though it never names the sibling or that distinction explicitly.
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?
'Use for current information' implies the trigger condition but does not state when not to use it or route the agent to the sibling 'fetch'. The usage context is present but thin for a tool that overlaps with a retrieval counterpart.
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
v0.1.0- First observed
fetch - First observed
search
TDQS
Scored across 2 tools
fetch and search target clearly distinct operations: retrieving a known URL versus discovering URLs via query. The descriptions reinforce the boundary ('read a known URL' vs 'current information'), leaving no realistic chance of misselection.
Both names are lowercase single verbs in a consistent style, so the set reads predictably. It's a minor deviation from the stronger verb_noun convention (fetch_page, search_web) that would encode the resource.
Two tools is on the thin side for a web-access server, though each earns its place. It sits at the borderline where a couple of adjacent capabilities (e.g. batch fetch) might be expected.
fetch plus search cover the core read-only web domain with no dead ends for the stated purpose. Minor gaps exist around bulk retrieval, pagination, or content-type controls, but agents can work around them.
Maintenance
Related MCP Connectors
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Real-time web search for AI agents: ranked results, source URLs, and optional AI answers.
Search the agentic web. 4,100+ sites, 11 tools incl. check_url + verify_mcp for probe-before-use.
Web search, scraping, RAG answers with citations, and translation as MCP tools.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables MCP clients to run web searches via DeepSeek's open platform API, with optional web page fetching that returns Markdown content, and supports query syntax for source, language, and time filters.1MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to run web searches and fetch web page contents through DeepSeek's Search and Fetch APIs, returning structured JSON results with configurable tool names and multiple transport options.22MIT
- AlicenseNot gradedqualityCmaintenanceEnables agents to run web searches with query operators and to fetch web pages as Markdown through DeepSeek's native Search/Fetch JSON API. It acts as a fallback for hosts whose built-in web tools are unavailable or return errors such as HTTP 403, rather than retrying them repeatedly.MIT
- 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