DeepSeek MCP服务器
一款与DeepSeek的API集成的生产级MCP服务器,具有先进的代码审查功能、高效的文件管理和API帐户管理。
特性
- 多模型支持:从各种DeepSeek模型中选择,包括DeepSeek聊天和DeepSeek编码器
- 代码审查重点:内置系统提示,用于详细的代码分析,并带有markdown输出
- 自动文件处理:具有直接路径集成的内置文件管理
- API账户管理:检查余额并估计代币使用情况
- JSON模式支持:请求结构化JSON响应以便于解析
- 高级错误处理:通过结构化错误日志记录进行优雅降级
- 改进的重试逻辑:API调用的可配置指数退避的自动重试
- 安全:可配置的文件类型限制和大小限制
- 性能监控:请求延迟和吞吐量的内置指标收集
先决条件
- 转到1.21+
- DeepSeek API密钥
- 对MCP协议的基本理解
安装和快速启动
# Clone and build
git clone https://github.com/your-username/DeepseekMCP
cd DeepseekMCP
go build -o bin/mcp-deepseek
# Start server with environment variables
export DEEPSEEK_API_KEY=your_api_key
export DEEPSEEK_MODEL=deepseek-chat
./bin/mcp-deepseek配置
克劳德桌面
{
"mcpServers": {
"deepseek": {
"command": "/Your/project/path/bin/mcp-deepseek",
"env": {
"DEEPSEEK_API_KEY": "YOUR_API_KEY",
"DEEPSEEK_MODEL": "deepseek-chat"
}
}
}
}环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
DEEPSEEK_API_KEY | DeepSeek API密钥 | *必需* |
DEEPSEEK_MODEL | 可用型号的型号ID | deepseek-chat |
DEEPSEEK_SYSTEM_PROMPT | 代码审查系统提示 | *默认代码审查提示* |
DEEPSEEK_SYSTEM_PROMPT_FILE | 包含系统提示的文件路径 | 空 |
DEEPSEEK_MAX_FILE_SIZE | 最大上传大小(字节) | 10485760 (10 MB) |
DEEPSEEK_ALLOWED_FILE_TYPES | 逗号分隔的MIME类型 | \[常见文本/代码类型\] |
DEEPSEEK_TIMEOUT | API超时(秒) | 90 |
DEEPSEEK_MAX_RETRIES | API最大重试次数 | 2 |
DEEPSEEK_INITIAL_BACKOFF | 初始退避时间(秒) | 1 |
DEEPSEEK_MAX_BACKOFF | 最大退避时间(秒) | 10 |
DEEPSEEK_TEMPERATURE | 模型温度(0.0-1.0) | 0.4 |
示例 .env:
DEEPSEEK_API_KEY=your_api_key
DEEPSEEK_MODEL=deepseek-chat
DEEPSEEK_SYSTEM_PROMPT="Your custom code review prompt here"
# Alternative: load system prompt from file
# DEEPSEEK_SYSTEM_PROMPT_FILE=/path/to/prompt.txt
DEEPSEEK_MAX_FILE_SIZE=5242880 # 5MB
DEEPSEEK_ALLOWED_FILE_TYPES=text/x-go,text/markdown
DEEPSEEK_TEMPERATURE=0.7核心API工具
目前,服务器提供以下工具:
deepseek_ask
用于代码分析、审查和具有可选文件路径包含的常规查询。
{
"name": "deepseek_ask",
"arguments": {
"query": "Review this Go code for concurrency issues...",
"model": "deepseek-chat",
"systemPrompt": "Optional custom review instructions",
"file_paths": ["main.go", "config.go"],
"json_mode": false
}
}deepseek模型
列出所有可用的DeepSeek模型及其功能。
{
"name": "deepseek_models",
"arguments": {}
}deepseek_balance
检查您的DeepSeek API帐户余额和可用性状态。
{
"name": "deepseek_balance",
"arguments": {}
}deepseek_token_estimate
估计文本或文件的令牌计数,以帮助进行配额管理。
{
"name": "deepseek_token_estimate",
"arguments": {
"text": "Your text to estimate...",
"file_path": "path/to/your/file.go"
}
}支持的型号
默认情况下支持以下DeepSeek模型:
| 型号ID | 描述 |
|---|---|
deepseek-chat | 平衡性能和效率的通用聊天模型 |
deepseek-coder | 编码和技术任务的专用模型 |
deepseek-reasoner | 针对推理和解决问题任务进行优化的模型 |
*注意:实际可用的模型可能会因您的API访问级别而异。服务器将自动发现并提供您可以通过DeepSeek API访问的所有模型。*
支持的文件类型
| 扩展名 | MIME类型 |
|---|---|
| .go | text/x-go |
| .py | 文本/x-python |
| .js | 文本/javascript |
| .md | text/makdown |
| .java | 文本/x-java |
| .c/.h | text/x-c |
| .cpp/.hpp | 文本/x-c++ |
| 25+更多 | (参见 getMimeTypeFromPath 在deepseek.go) |
操作说明
- 降级模式:初始化错误时自动进入安全模式
- 审计日志:所有操作都记录了时间戳和元数据
- 安全:处理前通过MIME类型和大小验证文件内容
文件处理
服务器直接通过 deepseek_ask 工具:
- 在中指定本地文件路径
file_paths数组参数 - 服务器自动执行以下操作:
- 从提供的路径读取文件 - 根据文件扩展名确定正确的MIME类型 - 将文件内容上传到DeepSeek API - 将文件用作查询的上下文
这种直接的文件处理方法消除了对单独的文件上传/管理端点的需要。
JSON模式支持
对于需要结构化数据输出的集成,服务器支持JSON模式:
- 结构化响应:从DeepSeek模型请求格式正确的JSON响应
- 解析程序友好:是CI/CD管道和自动化系统的理想选择
- 易于集成:简单设置
json_mode: true在您的请求中
JSON模式示例:
{
"name": "deepseek_ask",
"arguments": {
"query": "Analyze this code and return a JSON object with: issues_found (array of strings), complexity_score (number 1-10), and recommendations (array of strings)",
"model": "deepseek-chat",
"json_mode": true,
"file_paths": ["main.go", "config.go"]
}
}这将返回一个格式良好的JSON响应,您的应用程序可以直接解析该响应。
发展
命令行选项
服务器支持以下命令行选项来覆盖环境变量:
# Override the DeepSeek model to use
./bin/mcp-deepseek -deepseek-model=deepseek-coder
# Override the system prompt
./bin/mcp-deepseek -deepseek-system-prompt="Your custom prompt here"
# Override the temperature setting (0.0-1.0)
./bin/mcp-deepseek -deepseek-temperature=0.8运行测试
要运行测试,请执行以下操作:
go test -v ./...跑步林特尔
golangci-lint run格式化代码
gofmt -w .许可证
贡献
欢迎投稿!请随时提交拉取请求。
- 分叉项目
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求

