mcpField
D
Deepseek Mcp Server

Deepseek Mcp Server

本地服务
mcp.tahirl.comAI 与智能体26今天更新

关于 Deepseek Mcp Server

Deepseek Mcp Server 将 MCP 客户端连接到 DeepSeek 模型,用于对话和代码补全。它支持多轮会话、可选推理、函数调用、结构化 JSON 校验及请求成本跟踪。

主要功能

  1. 01使用 DeepSeek 模型进行对话
  2. 02维护多轮会话
  3. 03启用思考模式和函数调用
  4. 04生成并校验 JSON 输出
  5. 05使用 Fill-in-the-Middle 补全代码
  6. 06跟踪用量和请求成本

适用场景

  1. 01通过 MCP 客户端使用 DeepSeek 对话
  2. 02在相关请求间保留上下文
  3. 03请求经 Schema 校验的 JSON 响应
  4. 04补全代码或文本中的空缺

MCP 相关

提供 `deepseek_chat`、`deepseek_fim` 和 `deepseek_sessions` 工具,以及查询模型、配置和用量信息的三个资源。客户端可通过 stdio 或 HTTP 连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"deepseek-mcp-server-arikusi": {
"command": "npx",
"args": [
"-y",
"@arikusi/deepseek-mcp-server"
],
"env": {
"DEEPSEEK_API_KEY": "<DEEPSEEK_API_KEY>"
}
}
}
}
启动命令npx -y @arikusi/deepseek-mcp-server
需要配置的环境变量
DEEPSEEK_API_KEY密钥DeepSeek API key

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@arikusi/deepseek-mcp-server2.4.0

工具

3

收录的工具列表 · 更新于 3 周前

参数类型必填说明
modelenum否要使用的模型。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
toolsarray否用于函数调用的工具定义数组。每个工具都包含 type "function" 和一个包含 name、description 与 parameters(JSON Schema)的 function 对象。
streamboolean否启用流式模式。流式传输完成后返回完整响应。
messagesarray是对话消息数组。每条消息包含 role(system/user/assistant/tool)和 content(字符串或用于多模态的内容部分数组)。工具消息必须包含 tool_call_id。
thinkingobject否切换思维链思考模式。使用 {type: "enabled"} 进行推理,使用 {type: "disabled"} 快速直接作答(此处为默认值)。启用后,temperature/top_p 将被忽略。
thinking.typeenum是enabled | disabled
json_modeboolean否启用 JSON 输出模式。模型将输出有效的 JSON。在提示词中包含单词 "json" 可获得最佳效果。两个模型均支持。
max_tokensnumber否要生成的最大 token 数。V4 模型最多支持输出 384000 个 token。
session_idstring否多轮对话的会话 ID。提供此参数时,会将此会话之前的消息添加到当前消息之前。如果会话不存在,则会自动创建。无状态的单轮请求请省略此参数。
temperaturenumber否采样温度(0-2)。数值越高,随机性越强。默认值:1.0。启用思考模式时会忽略此项。
tool_choiceany否控制模型调用哪个工具。"auto"(默认)、"none"、"required",或 {type:"function",function:{name:"..."}}
response_schemaobject否用于验证模型输出的 JSON Schema。启用 JSON 输出模式。服务端会验证解析后的结果;如果验证失败,最多会进行 RESPONSE_SCHEMA_MAX_RETRIES 次修复重试(将验证错误反馈给模型)。返回的内容是第一个符合 Schema 的对象;如果没有,则返回最后一次尝试的结果,并设置 schema.valid=false 和 schema.error。
reasoning_effortenum否思考模式启用时的推理力度:"high"(默认)或 "max"。仅在启用思考模式时生效。high | max

详细介绍

DeepSeek MCP 服务

DeepSeek MCP 服务

适用于 DeepSeek(deepseek-flash 和 deepseek-v4-pro,1M 上下文)的 MCP 服务,支持多轮会话、函数调用、思考模式和感知峰值的成本跟踪。

npm 版本 npm 下载量 许可证:MIT Node.js 版本 TypeScript DeepSeek V4.1 构建状态

兼容 Claude Code、Gemini CLI、Cursor、Windsurf 以及任何兼容 MCP 的客户端。
已正式列入MCP Registry、Smithery、Glama、LobeHub 和 Fronteir AI。

官方 MCP Registry LobeHub

Glama 徽章

**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 等)

安装

前提条件
手动安装

如果你更倾向于手动安装:

npm install -g @arikusi/deepseek-mcp-server
从源代码安装
  1. 克隆仓库
git clone https://github.com/arikusi/deepseek-mcp-server.git
cd deepseek-mcp-server
  1. 安装依赖
npm install
  1. 构建项目
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-pro
  • deepseek-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_URLhttps://api.deepseek.com自定义 API 端点
DEFAULT_MODELdeepseek-flash请求的默认模型
SHOW_COST_INFOtrue在响应中显示费用信息
REQUEST_TIMEOUT60000请求超时时间,单位为毫秒
MAX_RETRIES2失败请求的最大重试次数
SKIP_CONNECTION_TESTfalse跳过启动时的 API 连接测试
MAX_MESSAGE_LENGTH100000消息内容的最大长度(字符数)
SESSION_TTL_MINUTES30会话存活时间,单位为分钟
MAX_SESSIONS100并发会话的最大数量
FALLBACK_ENABLEDtrue出错时启用自动模型回退
CIRCUIT_BREAKER_THRESHOLD5熔断器开启前允许的连续失败次数
CIRCUIT_BREAKER_RESET_TIMEOUT30000熔断器进入半开状态前的等待时间,单位为毫秒
MAX_SESSION_MESSAGES200每个会话的最大消息数(滑动窗口)
RESPONSE_SCHEMA_MAX_RETRIES2response_schema 验证失败时的修复重试次数(设为 0 可禁用)
ENABLE_MULTIMODALfalse启用多模态(图像)输入支持
TRANSPORTstdio传输模式:stdio 或 http
HTTP_PORT3000HTTP 服务端口(当 TRANSPORT=http 时)
HTTP_HOST127.0.0.1HTTP 传输的绑定地址。默认绑定到回环地址,避免新启动的服务暴露在外。设置为 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_BINDfalse设置为 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 的人都可以调用工具并消耗该密钥,因此端点不得在公共网络接口上开放。默认设置就是围绕这一点设计的:

  1. HTTP_HOST 默认为 127.0.0.1,因此直接运行时只会监听环回地址,且 SDK 的 DNS 重绑定保护处于启用状态。机器之外的任何设备都无法访问它。
  2. 若要接受远程连接,请设置 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 覆盖此拒绝行为。
  3. 对于面向互联网的部署,请在前面设置带 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 密钥,请编辑配置文件:

  1. 对于 Claude Code:打开 ~/.claude.json(Windows:C:\Users\USERNAME\.claude.json)
  2. 在项目路径下找到 "mcpServers" 部分
  3. 添加包含 API 密钥的 env 字段:
"deepseek": {
  "type": "stdio",
  "command": "npx",
  "args": ["@arikusi/deepseek-mcp-server"],
  "env": {
    "DEEPSEEK_API_KEY": "your-api-key-here"
  }
}
  1. 保存并重启 Claude Code
“连接 DeepSeek API 失败”
  1. 检查 API 密钥是否有效
  2. 确认已连接互联网
  3. 在 https://status.deepseek.com 检查 DeepSeek API 状态
MCP 客户端中未显示服务
  1. 确认 dist/index.js 的路径正确
  2. 确保已运行 npm run build
  3. 检查 MCP 客户端的日志中是否有错误
  4. 完全重启 MCP 客户端
macOS/Linux 上出现权限被拒绝

将文件设为可执行:

chmod +x dist/index.js

发布到 npm

与他人分享此 MCP 服务:

  1. 运行 npm login
  2. 运行 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 文件。

支持

资源

致谢


由 @arikusi 制作

一个由社区维护的 DeepSeek API 独立 MCP 服务。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。