ds-websearch-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., "@ds-websearch-mcp search the web for recent DeepSeek API updates"
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.
ds-websearch-mcp
A simple MCP server for DeepSeek Search and Fetch.
Quick Start
Requires Node.js 24 or later and a DeepSeek API key.
Add the following to your MCP client configuration, replacing the API key. npx downloads and runs the package automatically:
{
"mcpServers": {
"ds-websearch-mcp": {
"command": "npx",
"args": ["-y", "ds-websearch-mcp"],
"env": {
"DEEPSEEK_API_KEY": "your-api-key"
}
}
}
}Restart your MCP client to load the search and fetch tools.
Codex
Run with your API key:
codex mcp add ds-websearch-mcp --env DEEPSEEK_API_KEY=your-api-key -- npx -y ds-websearch-mcpOr add the following to ~/.codex/config.toml:
[mcp_servers.ds-websearch-mcp]
command = "npx"
args = ["-y", "ds-websearch-mcp"]
[mcp_servers.ds-websearch-mcp.env]
DEEPSEEK_API_KEY = "your-api-key"Restart Codex to load the tools.
HTTP
Run the server on the loopback interface:
DEEPSEEK_API_KEY=your-api-key npx -y ds-websearch-mcp --transport http --port 3000Connect an MCP client to http://127.0.0.1:3000/mcp.
Related MCP server: deepseek-web
Tools
search
Parameter | Default | Description |
| Required | Search query, including operators such as |
| API default: | Number of results. |
| Omitted | Original question, when useful for query understanding. |
| Omitted | Optional IP address used to localize results. |
|
| Include page content. |
|
| Maximum Unicode characters of page content per result. |
Preserves upstream fields and ranking, including summaries, relevance scores, dates, and authority. Nonempty page content receives a pagination object. max_length applies to page content, not summaries or the total JSON response.
When a search returns page content, all pages that need caching are admitted as one batch. If the batch exceeds the configured entry or byte capacity, the tool returns an error and keeps existing cursors valid. Reduce count, increase max_length so more pages are returned completely, or increase the cache capacity.
DeepSeek currently documents 1–128 characters for query and ori_question, and 1–50 for count.
fetch
Parameter | Default | Description |
| Omitted | Page URL to retrieve from DeepSeek. |
| Omitted |
|
|
| Maximum Unicode characters of page content to return. |
Supply exactly one of url and cursor. Returns url, title, content, and pagination:
{
"returned_length": 5000,
"total_length": 12400,
"next_cursor": "opaque-cursor",
"expires_at": "2026-10-20T12:15:00.000Z"
}Pass next_cursor to fetch to continue. A null cursor means the end of the page. Unicode code points count as characters; surrogate pairs are never split. Cursor reads use the same saved snapshot, make no additional DeepSeek requests, and can be replayed. max_length can change between reads.
Only pages with remaining content are retained. Expiry is fixed when stored and is not extended by reading. Least recently read snapshots are evicted when the entry or byte limit is reached. Cursors expire with their snapshot and do not survive process restarts; an expired or evicted cursor returns a tool error asking the caller to fetch the URL again. Final-page reads keep the snapshot available until expiry or eviction for reliable retries.
A page larger than the cache capacity cannot be retained and returns an explicit error. Increase CACHE_MAX_BYTES or request a max_length large enough to return the full page. The byte limit accounts for retained text as UTF-16; it is not a limit on total process memory. HTTP requests share one process-local cache; cursors are signed and contain an unguessable snapshot identifier.
Configuration
Environment variable | Default | Description |
| Required | DeepSeek bearer token. |
|
| API origin, useful for gateways or local testing. Requests use |
|
| Total deadline per API call, including retries and response reading. Maximum: |
|
| Fixed snapshot lifetime: 12 hours. Values outside the JavaScript |
|
| Retained text capacity: 256 MiB. |
|
| Maximum retained snapshots. |
|
| Maximum concurrent legacy HTTP sessions. |
|
| Idle lifetime for legacy HTTP sessions: 30 minutes. Sessions with active requests are not expired. |
Development
From a source checkout:
npm ci
npm run build
npm run check
npm test
npm pack --dry-runLicense
Licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only).
Available Tools
2 toolsfetchARead-onlyIdempotent
Read a web page as Markdown, or continue a cached page using next_cursor from search or fetch. Supply exactly one of url or cursor. Cursors read the same saved snapshot without another API request; they can expire or be evicted.
Inputs: url, cursor, max_length. Returns: url, title, content, pagination
searchARead-onlyIdempotent
Search the web using DeepSeek. Supports site:, -site:, quoted phrases, lang:, after:, and before:. The API currently documents a 128-character query limit. Page content is optional and paginated; read more with fetch(cursor).
Inputs: query (required), count, max_length, localization, +2 more. Returns: results
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
Search is for discovering web results via a query with operators, while fetch is for reading a specific URL or continuing a cached snapshot via cursor. The two tools have clearly distinct roles and no overlapping functionality.
Both names are single lowercase verbs (search, fetch), following a consistent verb-only convention. There are no mixed styles or inconsistent patterns.
Two tools is slightly below the typical 3–15 range, but each earns its place for this narrow search-and-fetch domain. The minimal surface is reasonable rather than thin, given the focused purpose.
Search plus fetch covers the full lifecycle: query the web, then retrieve full page content with pagination via cursors. No obvious gaps exist, and cursor expiry can be handled by re-searching.
Related MCP Connectors
Scrape, crawl and search the web for AI agents via MCP.
Web search API and MCP server for developers building AI agents.
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Web search and page reading for AI agents, including JSON APIs, RSS feeds and YouTube.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables 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.2677 npm1MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to perform web searches and fetch HTTP(S) pages as Markdown through Search and Fetch APIs.263 npmMIT
- AlicenseAqualityCmaintenanceExposes DeepSeek's web search and page-fetch tools to any MCP client, letting any LLM run searches with quality signals like rerank score and source authority, plus advanced query syntax. It also retrieves single pages as Markdown, with built-in throttling, retries, and size-conscious summaries.2101 npm2MIT
- AlicenseNot gradedqualityCmaintenanceExposes DeepSeek's search and fetch APIs as two MCP tools, letting any MCP-compatible AI agent perform web search with relevance and authority scores, then retrieve chosen pages as Markdown.75 npmMIT