dseek-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., "@dseek-mcpsearch the web for the latest DeepSeek model release and summarize the top 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.
deepseek-search
把 DeepSeek 官方自研搜索引擎(Search / Fetch API)封装成 零依赖的 SDK、命令行工具和 MCP 服务器, 让 Agent、RAG 与脚本可以直接检索实时网页、抓取网页正文。
官方接口文档:网页搜索与抓取
端点:
POST /v1/tools/search、POST /v1/tools/fetch(Base URLhttps://api.deepseek.com)特性:零第三方依赖、Node ≥ 18.17、原生
fetch、指数退避重试、本地参数校验、DSH / Claude Desktop / Cursor / Codex 通用 MCP
入口 | 适合场景 |
| 终端查询、脚本集成、快速验证 Key |
| 给 DeepSeek Harness、Claude Desktop、Cursor、Codex 等挂上 |
| 在自己的 Node 程序里做检索增强 |
本项目是非官方社区实现,仅调用 DeepSeek 公开 API,不修改、不重发任何官方服务。
1. 快速开始
git clone https://github.com/fengyuan19990207-max/deepseek-search.git
cd deepseek-search
# 只需一个 DeepSeek API Key(https://platform.deepseek.com/api_keys)
export DEEPSEEK_API_KEY=sk-xxxxxxxx # Windows PowerShell: $env:DEEPSEEK_API_KEY='sk-xxxxxxxx'
node bin/dseek.mjs search "DeepSeek 自研搜索引擎" --count 3无需 npm install:仓库没有运行时依赖。
可选:把 CLI 装到全局
npm install -g .
dseek search "site:github.com mcp server" -n 5API Key 从哪里读
按优先级自动查找,只在本进程内使用,不会打印或写回:
--api-key参数环境变量
DEEPSEEK_API_KEY$DSH_HOME/credentials.json中的DEEPSEEK_API_KEY字段$DSH_HOME/.env中的DEEPSEEK_API_KEY=...当前目录
.env~/.deepseek-search.json中的apiKey字段
Related MCP server: trawlia-mcp
2. 命令行
# 基本搜索
dseek search "DeepSeek V4 模型 发布" -n 5
# 只要标题和链接(不要分数/日期/摘要)
dseek search "本地部署 大模型" --no-meta
# 带上网页正文(need_content=true,返回更慢)
dseek search "RAG 检索增强 最佳实践" -n 3 --content
# 搜索语法:限定站点、语言、时间
dseek search "mcp server" --site github.com --site huggingface.co --lang en --after 2025
# 排除站点与关键词
dseek search "显卡评测" --exclude-site zhihu.com --exclude 广告
# 原始 JSON(便于 jq 等工具处理)
dseek search "Rust 异步运行时" -n 5 --json
# 抓取网页正文(Markdown)
dseek fetch https://api-docs.deepseek.com/zh-cn/guides/search/ --max-chars 2000真实输出示例:
$ dseek search "DeepSeek 自研搜索引擎" --count 3
1. [更新日志 | DeepSeek API Docs](https://api-docs.deepseek.com/zh-cn/updates/)
score 2.38 ★ · authority 3 ★ · DeepSeek
Search / Fetch API 已上线,使用自研搜索引擎,支持网页搜索与抓取……
2. [DeepSeek API支持网页搜索与抓取 每千次请求5元](https://app.qudong.com/article/526513.html)
score 2.37 ★ · authority 3 ★ · 2026-10-17 16:00:00 · 驱动中国
DeepSeek发布公告,其API现已支持网页搜索与抓取,按请求次数计费……
# 3 条结果 · 349ms退出码:0 成功、1 请求失败、2 参数/用法错误。
支持的搜索语法
query 里的操作符原样交给搜索服务,可组合使用:
操作符 | 示例 | 说明 |
|
| 限定站点;多个用空格 + |
|
| 排除站点 |
|
| 排除包含关键词的网页 |
|
| 排除包含短语的网页 |
|
| 精确匹配短语 |
|
| 限定语言 |
|
| 只保留该日期之后发布 |
|
| 只保留该日期之前发布 |
CLI 侧对应参数:--site(可重复)、--exclude-site、--exclude、--lang、--after、--before。
3. MCP 服务器(给 Agent 挂搜索引擎)
bin/mcp-server.mjs 是一个 stdio 传输、零依赖、单文件的 MCP 服务器,暴露两个工具:
工具 | 作用 |
| 检索实时网页,返回标题、URL、摘要、可选正文、发布时间、权威性、相关度分数 |
| 抓取单个网页,返回 Markdown 正文 |
3.1 DeepSeek Harness(DSH)
把下面这段追加到 $DSH_HOME/profiles/<profile>/cordis.patch.yml(profile 通常是 desktop),
把 <NODE>、<REPO>、<DSH_HOME> 换成实际路径,保存即热加载:
- insert:
- id: mcp-deepseek-search
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: deepseek
transport: stdio
command: '<NODE>/node.exe'
args:
- '<REPO>/bin/mcp-server.mjs'
env:
DSH_HOME: '<DSH_HOME>' # 让服务器从 credentials.json 自动取 Key
# DEEPSEEK_API_KEY: 'sk-...' # 也可以显式给
toolCallTimeoutMs: 120000
failOnStartupError: false加载成功后,模型侧会多出 mcp__deepseek__deepseek_search 与 mcp__deepseek__deepseek_fetch。
本仓库已在 DSH 中实测:写入配置后工具热加载生效,无需重启。
参考片段见 examples/dsh-cordis.patch.yml。
3.2 Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"deepseek": {
"command": "node",
"args": ["/绝对路径/deepseek-search/bin/mcp-server.mjs"],
"env": { "DEEPSEEK_API_KEY": "sk-..." }
}
}
}3.3 Cursor / 其他 MCP 客户端
~/.cursor/mcp.json:
{
"mcpServers": {
"deepseek": {
"command": "node",
"args": ["/绝对路径/deepseek-search/bin/mcp-server.mjs"],
"env": { "DEEPSEEK_API_KEY": "sk-..." }
}
}
}3.4 Codex CLI
~/.codex/config.toml:
[mcp_servers.deepseek]
command = "node"
args = ["/绝对路径/deepseek-search/bin/mcp-server.mjs"]
[mcp_servers.deepseek.env]
DEEPSEEK_API_KEY = "sk-..."3.5 手动验证 MCP 服务器
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
| node bin/mcp-server.mjs诊断日志只写 stderr,stdout 只输出协议消息,不会污染 MCP 通道。
4. SDK 用法
import { DeepSeekSearch, formatResultsMarkdown } from 'deepseek-search';
const client = new DeepSeekSearch(); // Key 自动发现
const { results, meta } = await client.search({
query: 'DeepSeek 自研搜索引擎 lang:zh after:2026',
count: 5,
needContent: false, // true 时才返回网页正文
oriQuestion: 'DeepSeek 什么时候上线了搜索 API?',
});
console.log(formatResultsMarkdown(results, { summaryChars: 200 }));
console.log(meta); // { count, elapsedMs, attempts }
const page = await client.fetch({ url: results[0].url });
console.log(page.title, page.content.length);也提供一次性函数:search(query, options)、fetchPage(url, options)。
自定义行为:
const client = new DeepSeekSearch({
apiKey: 'sk-...',
baseURL: 'https://api.deepseek.com', // 或自建代理
timeoutMs: 30_000,
maxAttempts: 3, // 408/429/5xx 才重试,指数退避 + 抖动
retryDelayMs: 500,
signal: undefined, // 支持 AbortSignal
});5. 响应字段
deepseek_search 每条结果:
字段 | 类型 | 说明 |
| number | 综合相关性分数 0~3,≥ 1.5 为优质 |
| string | 标题 |
| string | 链接 |
| string | 短摘要(100~200 字符),适合前端展示 |
| string | 长摘要(600~800 字符),适合给模型读 |
| string | 网页正文, |
| string | null | 站点名 |
| string | null | 站点图标 URL |
| string | null | 发布时间(UTC,RFC 3339) |
| integer | 权威性 0~4( |
deepseek_fetch 返回 { title, content },content 为 Markdown。
6. 错误、限速与计费
HTTP | 含义 | 本库行为 |
400 | 请求不合法 | 抛错,不重试 |
401 | Key 缺失或无效 | 抛错,不重试 |
402 | 账户余额不足 | 抛错,不重试 |
403 | Fetch 被安全策略拒绝 | 抛错,不重试 |
404 | Fetch 拿不到可用正文 | 抛错,不重试 |
408 / 429 / 5xx | 超时、超过 QPS、服务端错误 | 指数退避自动重试(默认 3 次) |
限速:Search 与 Fetch 各自 5 QPS(账号级,与 Key 无关),Fetch 另有按域名的限制。
计费:按成功请求次数,每 1,000 次 5 元;失败、空结果、超时不收费;
count不影响价格。说明:在 DeepSeek Harness / Claude Code / Codex 中经 Server 端工具调用触发的 Search / Fetch 目前未计费, 自北京时间 2026-11-01 00:00 起按次收费。
7. 目录结构
deepseek-search/
├── bin/
│ ├── dseek.mjs # CLI
│ └── mcp-server.mjs # 零依赖 MCP 服务器(stdio)
├── src/
│ ├── client.mjs # /v1/tools/search、/v1/tools/fetch 客户端
│ ├── format.mjs # Markdown / 文本 / JSON 渲染
│ └── index.mjs # 统一出口
├── test/
│ ├── client.test.mjs # 客户端与格式化单测(本地 Mock API)
│ ├── mcp-server.test.mjs # MCP 端到端(spawn 子进程 + Mock API)
│ ├── cli.test.mjs # CLI 参数解析、搜索语法拼接、退出码
│ └── helpers.mjs # Mock DeepSeek API
├── examples/
│ ├── search.mjs
│ └── dsh-cordis.patch.yml
└── .github/workflows/ci.yml8. 开发与测试
node --test test/client.test.mjs test/mcp-server.test.mjs test/cli.test.mjs # 29 个用例:客户端、格式化、CLI、MCP 端到端,全部离线
node ./bin/dseek.mjs --versionCI 在 Ubuntu / Windows 上覆盖 Node 18/20/22/24。
9. 相关链接
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Scrape, crawl and search the web for AI agents via MCP.
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
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.
Web data tools for AI agents: pages as markdown, search, maps, commerce, jobs, AI answers.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to perform multi-engine web search, fetch web pages, and extract clean Markdown content via MCP, with no API keys required.375 PyPI8MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search the live web and extract readable page content as MCP tools, with ranked results, domain filters, and news support.20 npmMIT
- AlicenseBqualityBmaintenanceEnables AI agents to perform web searches and extract full-text content from web pages via standard MCP tools, with fallback search and semantic reranking.22MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform web research over MCP: search with a real browser, fetch JS-rendered pages, download PDFs and convert them to Markdown, then search and page through large documents using bounded previews so the context window isn't flooded.BSD Zero Clause