关于 Deepseek Mcp Server
Deepseek Mcp Server 将 MCP 客户端连接到 DeepSeek 模型,用于对话和代码补全。它支持多轮会话、可选推理、函数调用、结构化 JSON 校验及请求成本跟踪。
主要功能
- 01使用 DeepSeek 模型进行对话
- 02维护多轮会话
- 03启用思考模式和函数调用
- 04生成并校验 JSON 输出
- 05使用 Fill-in-the-Middle 补全代码
- 06跟踪用量和请求成本
适用场景
- 01通过 MCP 客户端使用 DeepSeek 对话
- 02在相关请求间保留上下文
- 03请求经 Schema 校验的 JSON 响应
- 04补全代码或文本中的空缺
MCP 相关
提供 `deepseek_chat`、`deepseek_fim` 和 `deepseek_sessions` 工具,以及查询模型、配置和用量信息的三个资源。客户端可通过 stdio 或 HTTP 连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | enum | 否 | 要使用的模型。deepseek-v4-flash(默认,快速/经济)或 deepseek-v4-pro(能力最强),两者均支持 1M 上下文,最多可输出 384K token。默认关闭思考模式以提高速度;传入 thinking:{type:"enabled"} 可进行推理。已弃用的别名(仍可使用,但建议使用 v4 名称):deepseek-chat -> v4-flash 非思考模式,deepseek-reasoner -> v4-flash 思考模式。deepseek-v4-flash | deepseek-v4-pro | deepseek-chat | deepseek-reasoner |
| tools | array | 否 | 用于函数调用的工具定义数组。每个工具都包含 type "function" 和一个包含 name、description 与 parameters(JSON Schema)的 function 对象。 |
| stream | boolean | 否 | 启用流式模式。流式传输完成后返回完整响应。 |
| messages | array | 是 | 对话消息数组。每条消息包含 role(system/user/assistant/tool)和 content(字符串或用于多模态的内容部分数组)。工具消息必须包含 tool_call_id。 |
| thinking | object | 否 | 切换思维链思考模式。使用 {type: "enabled"} 进行推理,使用 {type: "disabled"} 快速直接作答(此处为默认值)。启用后,temperature/top_p 将被忽略。 |
| thinking.type | enum | 是 | enabled | disabled |
| json_mode | boolean | 否 | 启用 JSON 输出模式。模型将输出有效的 JSON。在提示词中包含单词 "json" 可获得最佳效果。两个模型均支持。 |
| max_tokens | number | 否 | 要生成的最大 token 数。V4 模型最多支持输出 384000 个 token。 |
| session_id | string | 否 | 多轮对话的会话 ID。提供此参数时,会将此会话之前的消息添加到当前消息之前。如果会话不存在,则会自动创建。无状态的单轮请求请省略此参数。 |
| temperature | number | 否 | 采样温度(0-2)。数值越高,随机性越强。默认值:1.0。启用思考模式时会忽略此项。 |
| tool_choice | any | 否 | 控制模型调用哪个工具。"auto"(默认)、"none"、"required",或 {type:"function",function:{name:"..."}} |
| response_schema | object | 否 | 用于验证模型输出的 JSON Schema。启用 JSON 输出模式。服务端会验证解析后的结果;如果验证失败,最多会进行 RESPONSE_SCHEMA_MAX_RETRIES 次修复重试(将验证错误反馈给模型)。返回的内容是第一个符合 Schema 的对象;如果没有,则返回最后一次尝试的结果,并设置 schema.valid=false 和 schema.error。 |
| reasoning_effort | enum | 否 | 思考模式启用时的推理力度:"high"(默认)或 "max"。仅在启用思考模式时生效。high | max |
详细介绍
DeepSeek MCP 服务
适用于 DeepSeek(deepseek-flash 和 deepseek-v4-pro,1M 上下文)的 MCP 服务,支持多轮会话、函数调用、思考模式和感知峰值的成本跟踪。
兼容 Claude Code、Gemini CLI、Cursor、Windsurf 以及任何兼容 MCP 的客户端。
已正式列入MCP Registry、Smithery、Glama、LobeHub 和 Fronteir AI。
**2.4.0 版跟进了 DeepSeek 的 V4.1 更名。**默认模型现为
deepseek-flash(V4.1 Flash),另有deepseek-v4-pro可选。两者的上下文窗口均为 1M 个 token,并支持可选的思维链推理。deepseek-v4-flash、deepseek-chat和deepseek-reasoner仍作为旧名称继续有效,发送时会转换为deepseek-flash,因此现有配置无需更改。
快速开始
远程(无需安装)
直接使用托管端点,无需安装 npm,也无需 Node.js。请自备 DeepSeek API 密钥:
Claude Code:
claude mcp add --transport http deepseek \
https://deepseek-mcp.tahirl.com/mcp \
--header "Authorization: Bearer YOUR_DEEPSEEK_API_KEY"
Cursor / Windsurf / VS Code:
{
"mcpServers": {
"deepseek": {
"url": "https://deepseek-mcp.tahirl.com/mcp",
"headers": {
"Authorization": "Bearer ${DEEPSEEK_API_KEY}"
}
}
}
}
本地(stdio)
Claude Code:
claude mcp add -s user deepseek npx @arikusi/deepseek-mcp-server -e DEEPSEEK_API_KEY=your-key-here
Gemini CLI:
gemini mcp add deepseek npx @arikusi/deepseek-mcp-server -e DEEPSEEK_API_KEY=your-key-here
作用范围选项(Claude Code):
-s user:在你的所有项目中可用(推荐)-s local:仅在当前项目中可用(默认)-s project:使用项目专属的.mcp.json文件
获取 API 密钥:https://platform.deepseek.com
功能
- DeepSeek V4.1 Flash 和 V4 Pro:
deepseek-flash和deepseek-v4-pro均支持 1M 上下文,并可选择启用思维链思考模式 - 多轮会话:通过
session_id参数在请求之间保留对话上下文 - 模型回退与熔断器:在模型之间自动回退,并通过熔断器防止故障级联
- MCP 资源:
deepseek://models、deepseek://config、deepseek://usage— 查询模型信息、配置和使用统计数据 - 思考模式:在任一模型上通过
thinking: {type: "enabled"}启用思维链推理 - JSON 输出模式:通过
json_mode: true返回结构化 JSON 响应 - 经过架构验证的 JSON:传入
response_schema,服务会根据该架构验证输出,并进行有次数上限的修复重试,同时对架构模式启用 ReDoS 防护 - 函数调用:兼容 OpenAI 的工具调用,最多支持 128 个工具定义
- 中间填充(FIM):通过
deepseek_fim工具补全前缀和后缀之间的代码与内容 - 缓存感知成本跟踪:自动计算成本并区分缓存命中与未命中,按请求运行时适用的峰时或非峰时费率计价
- 会话管理工具:通过
deepseek_sessions工具列出、删除和清除会话 - 可配置:基于环境变量进行配置,并支持验证
- 12 个提示词模板:涵盖调试、代码审查、函数调用等场景
- 流式支持:实时生成响应
- 支持多模态:支持文本 + 图像输入的内容部分类型(通过
ENABLE_MULTIMODAL=true启用) - 远程端点:托管于
deepseek-mcp.tahirl.com/mcp— 自带密钥(BYOK),无需安装 - HTTP 传输:通过 Streamable HTTP 实现可自托管的远程访问,并设置
TRANSPORT=http - 支持 Docker:多阶段 Dockerfile,带有用于容器化部署的健康检查
- 经过测试:366 项测试,行覆盖率约为 92%
- 类型安全:完整的 TypeScript 实现
- 兼容 MCP:适用于任何兼容 MCP 的命令行工具(Claude Code、Gemini CLI 等)
安装
前提条件
- Node.js 22+
- DeepSeek API 密钥(可在 https://platform.deepseek.com 获取)
手动安装
如果你更倾向于手动安装:
npm install -g @arikusi/deepseek-mcp-server
从源代码安装
- 克隆仓库
git clone https://github.com/arikusi/deepseek-mcp-server.git
cd deepseek-mcp-server
- 安装依赖
npm install
- 构建项目
npm run build
使用方法
配置完成后,你的 MCP 客户端即可使用 deepseek_chat、deepseek_fim 和 deepseek_sessions 工具,以及 3 个 MCP 资源。
提示词示例:
"Use DeepSeek to explain quantum computing"
"Ask DeepSeek Reasoner to solve: If I have 10 apples and buy 5 more..."
你的 MCP 客户端会自动调用 deepseek_chat 工具。
手动配置(高级)
如果你的 MCP 客户端不支持 add 命令,请手动将内容添加到配置文件中:
{
"mcpServers": {
"deepseek": {
"command": "npx",
"args": ["@arikusi/deepseek-mcp-server"],
"env": {
"DEEPSEEK_API_KEY": "your-api-key-here"
}
}
}
}
配置文件位置:
- Claude Code:
~/.claude.json(添加到projects["your-project-path"].mcpServers部分) - 其他 MCP 客户端:请查阅客户端文档,了解配置文件位置
可用工具
deepseek_chat
与 DeepSeek AI 模型聊天,并支持自动成本跟踪和函数调用。
参数:
messages(必需):对话消息数组role:「system」|「user」|「assistant」|「tool」content:消息文本tool_call_id(可选):tool角色消息必需
model(可选):「deepseek-flash」(默认)或「deepseek-v4-pro」。旧名称「deepseek-v4-flash」、「deepseek-chat」和「deepseek-reasoner」仍可接受,且会解析为 deepseek-flash(reasoner 始终会进行思考);建议使用「deepseek-flash」。temperature(可选):0-2,用于控制随机性(默认:1.0)。启用思考模式时会忽略此项。max_tokens(可选):要生成的最大 token 数(两种模型均支持最多 384000)stream(可选):启用流式模式(默认:false)tools(可选):用于函数调用的工具定义数组(最多 128 个)tool_choice(可选):「auto」|「none」|「required」|{type: "function", function: {name: "..."}}thinking(可选):切换思考模式,使用{type: "enabled"}进行推理,或使用{type: "disabled"}快速作答(默认不启用思考模式)reasoning_effort(可选):「high」(默认)或「max」,仅在思考模式启用时生效json_mode(可选):启用 JSON 输出模式(两种模型均支持)response_schema(可选):用于校验模型输出的 JSON Schema。启用 JSON 输出。服务端会校验解析后的结果;若校验失败,会向模型反馈校验错误,并最多进行RESPONSE_SCHEMA_MAX_RETRIES次修复重试(默认 2,设为 0 可禁用)。Schema 正则表达式模式会经过 ReDoS 检查,不安全的模式会被直接拒绝。session_id(可选):多轮对话的会话 ID。系统会自动在消息前附加之前的上下文。
响应包含:
- 带格式的内容(请求 JSON 输出时,会恢复为简洁的 JSON)
- 函数调用结果(如果使用了工具)
- 请求信息(token 数、模型、美元成本)
structuredContent.request:独立的单次请求用量和成本摘要(token 数、缓存命中/未命中、cost_usd以及定价所用的pricing_tier),并汇总所有修复重试structuredContent.effective和fallback:别名/思考模式解析后实际发送的内容,以及触发的任何静默模型回退structuredContent.schema:使用response_schema时为{valid, attempts, error?};无法恢复 JSON 输出时则包含json_parse_error
示例:
{
"messages": [
{
"role": "user",
"content": "Explain the theory of relativity in simple terms"
}
],
"model": "deepseek-flash",
"temperature": 0.7,
"max_tokens": 1000
}
推理示例(启用思考模式的 deepseek-flash):
{
"messages": [
{
"role": "user",
"content": "If I have 10 apples and eat 3, then buy 5 more, how many do I have?"
}
],
"model": "deepseek-flash",
"thinking": { "type": "enabled" }
}
思考模式会在 <thinking> 标签中返回思维链,随后给出最终答案。
DeepSeek V4 Pro 示例(最复杂的任务):
{
"messages": [
{
"role": "user",
"content": "Prove that the square root of 2 is irrational."
}
],
"model": "deepseek-v4-pro",
"thinking": { "type": "enabled" }
}
函数调用示例:
{
"messages": [
{
"role": "user",
"content": "What's the weather in Istanbul?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name"
}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto"
}
当模型决定调用函数时,响应会包含函数名称和参数所在的 tool_calls。然后,你可以使用具有匹配 tool_call_id 的 tool 角色消息发送结果。
思考模式示例:
{
"messages": [
{
"role": "user",
"content": "Analyze the time complexity of quicksort"
}
],
"model": "deepseek-flash",
"thinking": { "type": "enabled" }
}
启用思考模式时,会自动忽略 temperature 和 top_p。
JSON 输出模式示例:
{
"messages": [
{
"role": "user",
"content": "Return a json object with name, age, and city fields for a sample user"
}
],
"model": "deepseek-flash",
"json_mode": true
}
JSON 模式可确保模型输出有效的 JSON。为获得最佳效果,请在提示词中包含「json」一词。所有模型均支持此模式。
经 Schema 校验的 JSON 示例:
{
"messages": [
{
"role": "user",
"content": "Classify this review sentiment as json: \"Absolutely loved it\""
}
],
"model": "deepseek-flash",
"response_schema": {
"type": "object",
"properties": {
"sentiment": { "type": "string", "enum": ["positive", "negative", "neutral"] },
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
},
"required": ["sentiment", "confidence"],
"additionalProperties": false
}
}
服务端会根据 Schema 校验解析后的输出。如果输出不匹配,服务端会最多重试 RESPONSE_SCHEMA_MAX_RETRIES 次(默认 2),并将校验错误反馈给模型,然后返回第一个通过 Schema 校验的对象。如果始终不匹配,系统会通过 structuredContent.schema.valid = false 明确报告,而不会静默强行转换答案。Schema 中的正则表达式模式会经过灾难性回溯(ReDoS)检查;不安全的模式会被直接作为无效 Schema 拒绝。
多轮会话示例:
{
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
],
"session_id": "my-session-1"
}
在各个请求中使用相同的 session_id,以保持对话上下文。消息会存储在内存中,并自动附加到请求前面。在 HTTP 传输中,每个已连接的 MCP 会话都有独立的会话存储——由一个 HTTP 客户端创建的 session_id 对其他客户端不可见(见下文 HTTP 传输部分)。
deepseek_fim
中间填充(Fill-in-the-Middle)补全。提供一个 prompt(前缀)和可选的 suffix,模型会补全两者之间的文本。它专为代码补全和内容填充而设计,而非对话。FIM 在 DeepSeek 的 Beta 端点上以非思考模式运行,API 将输出上限设为 4096 个 token。
参数:
prompt(必填):间隙前的前缀文本。对于代码补全,这是光标之前的代码。suffix(可选):间隙后的文本。模型会填充prompt和suffix之间的空白。model(可选):"deepseek-flash"(默认值)或"deepseek-v4-pro"。仍接受旧名称"deepseek-v4-flash"、"deepseek-chat"和"deepseek-reasoner",并将其解析为 deepseek-flash(FIM 没有思考模式)。max_tokens(可选):要生成的最大 token 数,上限为 4096。temperature(可选):0-2,用于控制随机性(默认值:1.0)。stop(可选):一个停止字符串,或最多包含 16 个停止字符串的数组。
响应包含:
- 补全文本
- 请求信息(token 数、模型、以 USD 计的费用)
- 包含
text、usage、finish_reason、cost_usd和pricing_tier字段的结构化数据
示例(代码补全):
{
"prompt": "def fib(n):\n if n < 2:\n return n\n return ",
"suffix": "\n\nprint(fib(10))",
"model": "deepseek-flash",
"max_tokens": 64
}
模型会返回缺失的中间部分,例如 fib(n-1) + fib(n-2),并使用前缀和后缀作为上下文。npm/stdio 服务和托管工作进程端点均可使用。
deepseek_sessions
管理对话会话。
参数:
action(必填):"list" | "clear" | "delete"session_id(可选):当 action 为 "delete" 时必填
示例:
{"action": "list"}
{"action": "delete", "session_id": "my-session-1"}
{"action": "clear"}
可用资源
MCP 资源提供有关服务的只读数据:
| 资源 URI | 描述 |
|---|---|
deepseek://models | 可用模型及其能力、上下文限制和定价 |
deepseek://config | 当前服务配置(API 密钥已屏蔽) |
deepseek://usage | 实时用量统计(请求、token、费用、会话) |
模型回退与熔断器
当模型因可重试错误(429、503、超时)而失败时,服务会自动切换到另一个模型:
deepseek-flash失败 → 尝试deepseek-v4-prodeepseek-v4-pro失败 → 尝试deepseek-flash
旧名称(会解析为 deepseek-flash)会回退到 deepseek-v4-pro。
熔断器可防止故障级联:
- 连续失败达到
CIRCUIT_BREAKER_THRESHOLD次(默认值:5)后,熔断器会打开(快速失败模式) - 经过
CIRCUIT_BREAKER_RESET_TIMEOUT毫秒(默认值:30000)后,熔断器进入半开状态并发送探测请求 - 如果探测成功,熔断器会关闭并恢复正常运行
可通过 FALLBACK_ENABLED=false 禁用回退。
可用提示词
提示词模板(共 12 个):
核心推理
- debug_with_reasoning:通过逐步分析调试代码
- code_review_deep:全面审查代码(安全性、性能、质量)
- research_synthesis:研究主题并创建结构化报告
- strategic_planning:结合推理制定战略计划
- explain_like_im_five:用简单的术语解释复杂主题
高级
- mathematical_proof:严谨地证明数学命题
- argument_validation:分析论证中的逻辑谬误
- creative_ideation:生成创意并分析其可行性
- cost_comparison:比较各项任务的大模型成本
- pair_programming:通过讲解进行交互式编程
函数调用
- function_call_debug:调试函数调用中的工具定义和消息问题
- create_function_schema:根据自然语言为函数调用生成 JSON Schema
每个提示词都针对思考模式进行了优化(deepseek-flash,使用 thinking: {type: "enabled"}),以提供详细的推理过程。
模型
两种模型的上下文窗口均为 1M 个令牌,最多可输出 384K 个令牌,并支持函数调用、JSON 模式和可选的思维链思考。它们在此默认采用非思考模式,以加快响应速度;使用 thinking: {type: "enabled"} 可启用推理。
DeepSeek 按一天中的时段计费。周一至周五的 UTC 时间 01:00-04:00 和 06:00-10:00 为高峰时段,费用是非高峰时段的两倍;其他所有时段(包括周末)均为非高峰时段。此服务报告的费用采用请求运行时适用的费率。以下价格以美元计,单位为每 1M 个令牌,数据来自 DeepSeek 的定价页面,截至 2026-10-23。
deepseek-flash(默认)
- 模型:DeepSeek-V4.1-Flash-1017
- 适用场景:通用对话、编码、内容生成、Agent 循环
- 上下文:1M 个令牌
- 最大输出:384K 个令牌
- 非高峰时段:缓存命中 $0.003,缓存未命中 $0.15,输出 $0.60
- 高峰时段:缓存命中 $0.006,缓存未命中 $0.30,输出 $1.20
deepseek-v4-pro
- 模型:DeepSeek-V4-Pro-0813
- 适用场景:需要更大型号的复杂多步任务
- 上下文:1M 个令牌
- 最大输出:384K 个令牌
- 非高峰时段:缓存命中 $0.022,缓存未命中 $0.66,输出 $1.98
- 高峰时段:缓存命中 $0.044,缓存未命中 $1.32,输出 $3.96
根据 DeepSeek 自己的基准测试,V4.1 Flash 的表现优于 V4 Pro,因此 Flash 是大多数任务的更佳默认选择。
旧版名称
deepseek-v4-flash、deepseek-chat 和 deepseek-reasoner 仍可使用,并会解析为 deepseek-flash(chat = 非思考模式,reasoner = 思考模式)。DeepSeek 已停用这些名称背后的模型,现在无论使用哪个名称,都会提供 V4.1 Flash,因此此服务实际发送的是 deepseek-flash。deepseek-chat 和 deepseek-reasoner 将在下一个主要版本中移除。新配置应使用 deepseek-flash 或 deepseek-v4-pro。
配置
服务器通过环境变量进行配置。除 DEEPSEEK_API_KEY 外,所有设置均为可选。
| 变量 | 默认值 | 描述 |
|---|---|---|
DEEPSEEK_API_KEY | (必填) | 你的 DeepSeek API 密钥 |
DEEPSEEK_BASE_URL | https://api.deepseek.com | 自定义 API 端点 |
DEFAULT_MODEL | deepseek-flash | 请求的默认模型 |
SHOW_COST_INFO | true | 在响应中显示费用信息 |
REQUEST_TIMEOUT | 60000 | 请求超时时间,单位为毫秒 |
MAX_RETRIES | 2 | 失败请求的最大重试次数 |
SKIP_CONNECTION_TEST | false | 跳过启动时的 API 连接测试 |
MAX_MESSAGE_LENGTH | 100000 | 消息内容的最大长度(字符数) |
SESSION_TTL_MINUTES | 30 | 会话存活时间,单位为分钟 |
MAX_SESSIONS | 100 | 并发会话的最大数量 |
FALLBACK_ENABLED | true | 出错时启用自动模型回退 |
CIRCUIT_BREAKER_THRESHOLD | 5 | 熔断器开启前允许的连续失败次数 |
CIRCUIT_BREAKER_RESET_TIMEOUT | 30000 | 熔断器进入半开状态前的等待时间,单位为毫秒 |
MAX_SESSION_MESSAGES | 200 | 每个会话的最大消息数(滑动窗口) |
RESPONSE_SCHEMA_MAX_RETRIES | 2 | response_schema 验证失败时的修复重试次数(设为 0 可禁用) |
ENABLE_MULTIMODAL | false | 启用多模态(图像)输入支持 |
TRANSPORT | stdio | 传输模式:stdio 或 http |
HTTP_PORT | 3000 | HTTP 服务端口(当 TRANSPORT=http 时) |
HTTP_HOST | 127.0.0.1 | HTTP 传输的绑定地址。默认绑定到回环地址,避免新启动的服务暴露在外。设置为 0.0.0.0 可接受远程连接(仅在前置身份验证或代理时这样做) |
HTTP_AUTH_TOKEN | (未设置) | 设置后,POST /mcp 需要 Authorization: Bearer <token>。/health 仍保持开放。只要端口可从 localhost 以外访问,就强烈建议设置此项 |
HTTP_ALLOWED_HOSTS | (未设置) | 以逗号分隔的允许使用的 Host 标头列表,用于绑定到 0.0.0.0 时防范 DNS 重绑定(例如 mcp.example.com,localhost)。Docker 镜像默认值为 localhost,127.0.0.1,[::1] |
HTTP_ALLOW_UNPROTECTED_BIND | false | 设置为 true 后,即使未设置 HTTP_ALLOWED_HOSTS 或 HTTP_AUTH_TOKEN,也可绑定到 0.0.0.0。否则,服务器会拒绝在这种组合下启动 |
自定义配置示例:
claude mcp add -s user deepseek npx @arikusi/deepseek-mcp-server \
-e DEEPSEEK_API_KEY=your-key \
-e SHOW_COST_INFO=false \
-e REQUEST_TIMEOUT=30000
开发
项目结构
deepseek-mcp-server/
├── worker/ # Cloudflare Worker (remote BYOK endpoint)
│ ├── src/index.ts # Worker entry point
│ ├── wrangler.toml # Cloudflare config
│ └── package.json
├── src/
│ ├── index.ts # Entry point, bootstrap
│ ├── server.ts # McpServer factory (auto-version)
│ ├── deepseek-client.ts # DeepSeek API wrapper (circuit breaker + fallback)
│ ├── config.ts # Centralized config with Zod validation
│ ├── cost.ts # Cost calculation and formatting
│ ├── schemas.ts # Zod input validation schemas
│ ├── types.ts # TypeScript types + type guards
│ ├── errors.ts # Custom error classes
│ ├── session.ts # In-memory session store (multi-turn)
│ ├── circuit-breaker.ts # Circuit breaker pattern
│ ├── usage-tracker.ts # Usage statistics tracker
│ ├── transport-http.ts # Streamable HTTP transport (Express)
│ ├── tools/
│ │ ├── deepseek-chat.ts # deepseek_chat tool (sessions + fallback)
│ │ ├── deepseek-fim.ts # deepseek_fim tool (fill-in-the-middle)
│ │ ├── deepseek-sessions.ts # deepseek_sessions tool
│ │ └── index.ts # Tool registration aggregator
│ ├── resources/
│ │ ├── models.ts # deepseek://models resource
│ │ ├── config.ts # deepseek://config resource
│ │ ├── usage.ts # deepseek://usage resource
│ │ └── index.ts # Resource registration aggregator
│ └── prompts/
│ ├── core.ts # 5 core reasoning prompts
│ ├── advanced.ts # 5 advanced prompts
│ ├── function-calling.ts # 2 function calling prompts
│ └── index.ts # Prompt registration aggregator
├── dist/ # Compiled JavaScript
├── llms.txt # AI discoverability index
├── llms-full.txt # Full docs for LLM context
├── vitest.config.ts # Test configuration
├── package.json
├── tsconfig.json
└── README.md
构建
npm run build
监视模式(用于开发)
npm run watch
测试
# Run all tests
npm test
# Watch mode
npm run test:watch
# With coverage report
npm run test:coverage
本地测试
# Set API key
export DEEPSEEK_API_KEY="your-key"
# Run the server
npm start
服务器将启动并通过 stdio 等待 MCP 客户端连接。
远程端点(托管)
可使用托管的 BYOK(自带密钥)端点:
https://deepseek-mcp.tahirl.com/mcp
将 DeepSeek API 密钥作为 Authorization: Bearer <key> 发送。服务器端不会存储 API 密钥——每次请求都会直接使用你的密钥。由 Cloudflare Workers 提供支持(全球边缘网络,无冷启动)。
注意: 对于复杂查询,思考模式可能需要 30 秒以上。某些 MCP 客户端(例如 Claude Code)内置的工具调用超时可能会中断长时间运行的请求。对延迟有要求时,建议使用默认的非思考模式。
# Test health
curl https://deepseek-mcp.tahirl.com/health
# Test MCP (requires auth)
curl -X POST https://deepseek-mcp.tahirl.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_KEY" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{}},"id":1}'
HTTP 传输(自托管)
运行你自己的 HTTP 端点:
TRANSPORT=http HTTP_PORT=3000 DEEPSEEK_API_KEY=your-key node dist/index.js
测试健康检查端点:
curl http://localhost:3000/health
MCP 端点位于 POST /mcp(Streamable HTTP 协议)。
保护端点(暴露之前请阅读)。 在自托管 HTTP 模式下,服务会保存你的 DEEPSEEK_API_KEY,并在每次调用 deepseek_chat 时使用它。任何能访问 POST /mcp 的人都可以调用工具并消耗该密钥,因此端点不得在公共网络接口上开放。默认设置就是围绕这一点设计的:
HTTP_HOST默认为127.0.0.1,因此直接运行时只会监听环回地址,且 SDK 的 DNS 重绑定保护处于启用状态。机器之外的任何设备都无法访问它。- 若要接受远程连接,请设置
HTTP_HOST=0.0.0.0,并设置HTTP_AUTH_TOKEN(使/mcp要求提供Authorization: Bearer <token>)或HTTP_ALLOWED_HOSTS。如果绑定到0.0.0.0,却未设置上述两者,SDK 会完全关闭Host标头检查,导致任何你访问的网页都能通过 DNS 重绑定访问/mcp,因此服务会拒绝启动,而不是发出警告。如果你确实想开放端点,可设置HTTP_ALLOW_UNPROTECTED_BIND=true覆盖此拒绝行为。 - 对于面向互联网的部署,请在前面设置带 TLS 的身份验证反向代理,并将
HTTP_ALLOWED_HOSTS设置为你的真实主机名。
# Exposed deployment with a bearer token
TRANSPORT=http HTTP_HOST=0.0.0.0 HTTP_PORT=3000 \
HTTP_AUTH_TOKEN=$(openssl rand -hex 32) \
HTTP_ALLOWED_HOSTS=mcp.example.com \
DEEPSEEK_API_KEY=your-key node dist/index.js
# Calling it
curl -X POST http://mcp.example.com:3000/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{}},"id":1}'
HTTP_AUTH_TOKEN 是用于自托管端点的静态网关令牌,与 DeepSeek 密钥无关。它也不同于上文托管的 BYOK 端点;在该端点中,客户端会将自己的 DeepSeek 密钥作为 bearer 传递。
会话隔离(1.7.0+): 在 HTTP 传输中,每个已连接的 MCP 会话都有自己的 McpServer 实例和 SessionStore。对话历史记录、会话列表和删除操作仅限于创建它们的 MCP 会话,因此一个客户端无法读取、枚举或清除另一个客户端的会话。STDIO 传输本质上是单租户,不受影响。
Docker
# Build
docker build -t deepseek-mcp-server .
# Run, reachable only from the host's loopback, with a bearer token
docker run -d -p 127.0.0.1:3000:3000 \
-e DEEPSEEK_API_KEY=your-key \
-e HTTP_AUTH_TOKEN=your-token \
deepseek-mcp-server
# Or use docker-compose
DEEPSEEK_API_KEY=your-key HTTP_AUTH_TOKEN=your-token docker compose up -d
镜像在端口 3000 上运行 HTTP 传输,并执行健康检查。在容器内部,它绑定到 0.0.0.0(端口映射所必需),因此请在发布层控制暴露范围:上面的示例和附带的 docker-compose.yml 仅发布到 127.0.0.1。
仅在环回地址上发布并不足够,因为 DNS 重绑定的目标是你自己的浏览器已经能够访问的环回地址。因此,镜像默认设置了 HTTP_ALLOWED_HOSTS=localhost,127.0.0.1,[::1],以保留 Host 检查。要通过真实主机名发布?请将其添加到列表中,否则所有携带该主机名的请求都会收到 403。要在公共网络接口上发布?还需设置 HTTP_AUTH_TOKEN。
故障排除
“DEEPSEEK_API_KEY 环境变量未设置”
选项 1:使用正确的安装命令
# Make sure to include -e flag with your API key
claude mcp add deepseek npx @arikusi/deepseek-mcp-server -e DEEPSEEK_API_KEY=your-key-here
选项 2:手动编辑配置文件
如果安装时尚未设置 API 密钥,请编辑配置文件:
- 对于 Claude Code:打开
~/.claude.json(Windows:C:\Users\USERNAME\.claude.json) - 在项目路径下找到
"mcpServers"部分 - 添加包含 API 密钥的
env字段:
"deepseek": {
"type": "stdio",
"command": "npx",
"args": ["@arikusi/deepseek-mcp-server"],
"env": {
"DEEPSEEK_API_KEY": "your-api-key-here"
}
}
- 保存并重启 Claude Code
“连接 DeepSeek API 失败”
- 检查 API 密钥是否有效
- 确认已连接互联网
- 在 https://status.deepseek.com 检查 DeepSeek API 状态
MCP 客户端中未显示服务
- 确认
dist/index.js的路径正确 - 确保已运行
npm run build - 检查 MCP 客户端的日志中是否有错误
- 完全重启 MCP 客户端
macOS/Linux 上出现权限被拒绝
将文件设为可执行:
chmod +x dist/index.js
发布到 npm
与他人分享此 MCP 服务:
- 运行
npm login - 运行
npm publish --access public
用户随后可以通过以下命令安装:
npm install -g @arikusi/deepseek-mcp-server
贡献
欢迎贡献!提交 PR 之前,请阅读我们的贡献指南。
问题反馈
发现了错误或有功能请求?请使用我们的模板提交问题。
开发
# Clone the repo
git clone https://github.com/arikusi/deepseek-mcp-server.git
cd deepseek-mcp-server
# Install dependencies
npm install
# Build in watch mode
npm run watch
# Run tests
npm test
# Lint
npm run lint
更新日志
请参阅 CHANGELOG.md,了解版本历史和更新内容。
许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
支持
- 文档
- 错误报告
- 讨论
- 联系方式:GitHub Issues
资源
- DeepSeek Platform - 获取你的 API 密钥
- Model Context Protocol - MCP 规范
- DeepSeek API Documentation - API 参考
致谢
- 基于 Model Context Protocol SDK 构建
- 使用 OpenAI SDK 实现 API 兼容性
- 为 MCP 社区打造
由 @arikusi 制作
一个由社区维护的 DeepSeek API 独立 MCP 服务。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。