这是一个提供灵活且可配置的两阶段推理和响应生成系统的 Model Context Protocol (MCP) 服务器。它是原始项目 Deepseek-Thinking-Claude-3.5-Sonnet-CLINE-MCP 的一个分支,通过支持多种 AI 提供商和模型来显著扩展其能力,这些提供商和模型用于推理和编码/响应生成。
原始项目专门设计为使用 DeepSeek R1 进行推理,并使用 Claude 3.5 Sonnet 进行响应生成,两者都仅通过 OpenRouter 访问。这个分支将架构泛化以支持更广泛的提供商和模型。以下是主要差异的概述:
多提供商支持: 不再局限于 OpenRouter,此分支现在可以使用:
可配置的推理和编码模型: 原始项目中推理使用的是 DeepSeek,最终响应使用的是 Claude,都是硬编码的。此分支允许独立配置推理和编码/响应生成模型。你可以混合匹配提供商。例如,你可以使用 Gemini 进行推理,使用 OpenAI 生成最终响应。
providers.json 配置: 引入了一个新的 providers.json 文件来管理可用模型及其特定参数(如温度、top_p 等)针对每个提供商。这使得添加新模型或调整现有模型变得容易,而无需修改核心代码。
环境变量配置: 推理和编码提供商/模型的选择现在主要通过环境变量控制:
REASONING_PROVIDER:指定推理阶段的提供商(例如,openai,gemini,deepseek,openrouter,anthropic,vertex)。REASONING_MODEL:指定用于推理的模型(例如,gpt-4,gemini-pro,deepseek/deepseek-r1)。CODING_PROVIDER:指定编码/响应生成阶段的提供商。CODING_MODEL:指定用于最终响应的模型。动态客户端初始化: 代码现在根据 REASONING_PROVIDER 和 CODING_PROVIDER 设置动态初始化必要的 API 客户端。这避免了不必要的初始化和依赖关系。
统一的 getReasoning 和 getFinalResponse: 提供商特定逻辑被抽象到 getReasoning 和 getFinalResponse 函数中,使核心任务处理逻辑与提供商无关。
保留核心 MCP 结构: 分支保留了使用 MCP 的核心结构,因此它可以与任何 MCP 客户端集成,就像原始实现一样。它定义了 generate_response 和 check_response_status 工具,方式与原始实现相同。
保留 Cline 集成: 类似于原始项目,分支旨在与 Cline(Claude 桌面扩展)集成。
保留对话历史记录功能: 分支实现了使用 Cline 对话历史记录作为上下文的功能。
无硬编码模型: 新实现中没有硬编码模型,模型在 .env 文件和 providers.json 中定义。
两阶段处理:
灵活的提供商和模型选择:
providers.json 和环境变量轻松配置模型及其参数。智能对话管理(继承自原始项目):
优化参数(可配置):
temperature,top_p 和 repetition_penalty 在 providers.json 中按模型配置。响应轮询(继承自原始项目):
generate_response(获取任务 ID)和 check_response_status(检查状态)的轮询机制。这处理了 LLM 调用的异步性质。要通过 Smithery 自动安装 Reasoning-Coder for Claude Desktop:
npx -y @smithery/cli install @mario-andreschak/mcp-reasoning-coding --client claude
克隆此仓库:
git clone https://github.com/mario-andreschak/mcp-reasoning-coding.git
cd /mcp-reasoning-coding
安装依赖项:
npm install
创建 .env 文件: 此文件将保存你的 API 密钥和提供商/模型选择。示例:
# --- 至少需要一个 API 密钥 ---
OPENROUTER_API_KEY=your_openrouter_key
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
DEEPSEEK_API_KEY=your_deepseek_key
GEMINI_API_KEY=your_gemini_key
VERTEX_PROJECT_ID=your_vertex_project_id # 用于 Vertex AI
VERTEX_REGION=your_vertex_region # 用于 Vertex AI
# --- 提供商和模型选择 ---
REASONING_PROVIDER=openrouter
REASONING_MODEL=deepseek/deepseek-r1
CODING_PROVIDER=openrouter
CODING_MODEL=anthropic/claude-3.5-sonnet:beta
重要: 你只需提供打算使用的提供商的 API 密钥。例如,如果你只使用 OpenAI,则不需要 OPENROUTER_API_KEY。
providers.json 文件: 此文件定义了每个提供商的可用模型及其参数。将此文件放置在 src 文件夹中。示例(src/providers.json):
{
"openrouter": {
"deepseek/deepseek-r1": {
"temperature": 0.7,
"top_p": 1
},
"anthropic/claude-3.5-sonnet:beta": {
"temperature": 0.7,
"top_p": 1,
"repetition_penalty": 1
},
"deepseek/deepseek-chat":{
"temperature": 0.7,
"top_p": 1
}
},
"openai": {
"gpt-4": {
"temperature": 0.7,
"top_p": 1
},
"gpt-3.5-turbo": {
"temperature": 0.7,
"top_p": 1
}
},
"anthropic": {
"claude-3-opus-20240229": {
"temperature": 0.7,
"top_p": 1
}
},
"deepseek": {
"deepseek-coder": {
"temperature": 0.7,
"top_p": 1
}
},
"gemini":{
"gemini-pro":{
}
},
"vertex": {
"gemini-1.5-pro-002":{
}
}
}
extra_params: 你可以在模型定义中使用 extra_params 键添加提供商特定的参数。查阅每个提供商的 API 文档以了解可用选项。构建服务器:
npm run build
添加到你的 Cline MCP 设置(通常在 ~/.vscode/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json):
{
"mcpServers": {
"reasoning-coding": {
"command": "/path/to/node",
"args": ["/path/to/your-fork/build/index.js"], // 调整路径
"env": {
// 你的 .env 变量将被继承,所以这里不需要重复它们
},
"disabled": false,
"autoApprove": []
}
}
}
替换 /path/to/node 和 /path/to/your-fork/build/index.js 为正确的路径。
服务器提供了与原始项目相同的两个工具:
generate_response使用配置的推理和编码模型生成响应。
{
"prompt": string, // 必需:问题或提示
"showReasoning"?: boolean, // 可选:显示推理过程
"clearContext"?: boolean, // 可选:清除对话历史
"includeHistory"?: boolean // 可选:包含 Cline 对话历史
}
check_response_status检查响应生成任务的状态。
{
"taskId": string // 必需:来自 generate_response 的任务 ID
}
初始请求: 调用 generate_response 获取 taskId。
const result = await use_mcp_tool({
server_name: "reasoning-coding",
tool_name: "generate_response",
arguments: {
prompt: "解释相对论理论。",
showReasoning: true
}
});
const taskId = JSON.parse(result.content[0].text).taskId;
状态检查: 使用 taskId 轮询 check_response_status 直到状态为 complete(或 error)。
const status = await use_mcp_tool({
server_name: "reasoning-coding",
tool_name: "check_response_status",
arguments: { taskId }
});
// 当完成时的状态响应示例:
{
"status": "complete",
"reasoning": "...", // 如果 showReasoning 为 true
"response": "..." // 最终响应
"error": undefined // 如果发生错误,将具有值
}
为了开发并自动重建:
npm run watch
推理阶段:
getReasoning 函数,传入用户的提示(以及可能的 Cline 对话历史)。REASONING_PROVIDER 环境变量,调用适当的提供商特定函数(例如,getReasoningOpenAI,getReasoningGemini)。REASONING_MODEL)生成推理。响应阶段:
getFinalResponse 函数,传入原始提示和第一阶段的推理。CODING_PROVIDER 环境变量,调用适当的提供商特定函数。CODING_MODEL)生成最终响应,结合推理。MCP 处理: ReasoningCodingServer 类处理 MCP 通信、任务管理和上下文管理。它使用 getReasoning 和 getFinalResponse 函数来协调两阶段过程。
MIT 许可证 - 查看 LICENSE 文件以获取详细信息。