返回市场
MCP-推理编码

MCP-推理编码

作者:mario-andreschak14 星标更新:2025-03-05

项目介绍

Reasoning-Coder MCP Server

smithery 徽章

smithery 徽章

这是一个提供灵活且可配置的两阶段推理和响应生成系统的 Model Context Protocol (MCP) 服务器。它是原始项目 Deepseek-Thinking-Claude-3.5-Sonnet-CLINE-MCP 的一个分支,通过支持多种 AI 提供商和模型来显著扩展其能力,这些提供商和模型用于推理和编码/响应生成。

与原始项目相比的关键变化和改进

原始项目专门设计为使用 DeepSeek R1 进行推理,并使用 Claude 3.5 Sonnet 进行响应生成,两者都仅通过 OpenRouter 访问。这个分支将架构泛化以支持更广泛的提供商和模型。以下是主要差异的概述:

  • 多提供商支持: 不再局限于 OpenRouter,此分支现在可以使用:

    • OpenRouter
    • OpenAI
    • Anthropic (Claude)
    • DeepSeek
    • Google Gemini
    • Google Vertex AI
  • 可配置的推理和编码模型: 原始项目中推理使用的是 DeepSeek,最终响应使用的是 Claude,都是硬编码的。此分支允许独立配置推理和编码/响应生成模型。你可以混合匹配提供商。例如,你可以使用 Gemini 进行推理,使用 OpenAI 生成最终响应。

  • providers.json 配置: 引入了一个新的 providers.json 文件来管理可用模型及其特定参数(如温度、top_p 等)针对每个提供商。这使得添加新模型或调整现有模型变得容易,而无需修改核心代码。

  • 环境变量配置: 推理和编码提供商/模型的选择现在主要通过环境变量控制:

    • REASONING_PROVIDER:指定推理阶段的提供商(例如,openaigeminideepseekopenrouteranthropicvertex)。
    • REASONING_MODEL:指定用于推理的模型(例如,gpt-4gemini-prodeepseek/deepseek-r1)。
    • CODING_PROVIDER:指定编码/响应生成阶段的提供商。
    • CODING_MODEL:指定用于最终响应的模型。
  • 动态客户端初始化: 代码现在根据 REASONING_PROVIDERCODING_PROVIDER 设置动态初始化必要的 API 客户端。这避免了不必要的初始化和依赖关系。

  • 统一的 getReasoninggetFinalResponse 提供商特定逻辑被抽象到 getReasoninggetFinalResponse 函数中,使核心任务处理逻辑与提供商无关。

  • 保留核心 MCP 结构: 分支保留了使用 MCP 的核心结构,因此它可以与任何 MCP 客户端集成,就像原始实现一样。它定义了 generate_responsecheck_response_status 工具,方式与原始实现相同。

  • 保留 Cline 集成: 类似于原始项目,分支旨在与 Cline(Claude 桌面扩展)集成。

  • 保留对话历史记录功能: 分支实现了使用 Cline 对话历史记录作为上下文的功能。

  • 无硬编码模型: 新实现中没有硬编码模型,模型在 .env 文件和 providers.json 中定义。

功能

  • 两阶段处理:

    • 使用可配置模型进行初始推理(例如,DeepSeek,GPT-4,Gemini Pro)。
    • 使用可配置模型进行最终响应/代码生成(例如,Claude,GPT-4,DeepSeek Chat)。
    • 将第一阶段的推理注入第二阶段的上下文中。
  • 灵活的提供商和模型选择:

    • 从 OpenRouter,OpenAI,Anthropic,DeepSeek,Gemini 和 Vertex AI 中选择,用于推理和编码阶段。
    • 通过 providers.json 和环境变量轻松配置模型及其参数。
  • 智能对话管理(继承自原始项目):

    • 使用文件修改时间检测活跃的 Cline 对话。
    • 处理多个并发对话。
    • 自动过滤已结束的对话。
    • 支持上下文清除。
  • 优化参数(可配置):

    • 尊重模型特定的上下文限制(例如,DeepSeek 推理为 50,000 字符,响应模型有更大的限制)。
    • 参数如 temperaturetop_prepetition_penaltyproviders.json 中按模型配置。
  • 响应轮询(继承自原始项目):

    • 使用 generate_response(获取任务 ID)和 check_response_status(检查状态)的轮询机制。这处理了 LLM 调用的异步性质。

安装

通过 Smithery 安装

要通过 Smithery 自动安装 Reasoning-Coder for Claude Desktop:

npx -y @smithery/cli install @mario-andreschak/mcp-reasoning-coding --client claude

手动安装

  1. 克隆此仓库

    git clone https://github.com/mario-andreschak/mcp-reasoning-coding.git
    cd /mcp-reasoning-coding
    
  2. 安装依赖项:

    npm install
    
  3. 创建 .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

  4. 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 文档以了解可用选项。
  5. 构建服务器:

    npm run build
    

使用 Cline

添加到你的 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
}

响应轮询(与原始项目相同)

  1. 初始请求: 调用 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;
    
  2. 状态检查: 使用 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

工作原理(扩展)

  1. 推理阶段:

    • 调用 getReasoning 函数,传入用户的提示(以及可能的 Cline 对话历史)。
    • 根据 REASONING_PROVIDER 环境变量,调用适当的提供商特定函数(例如,getReasoningOpenAIgetReasoningGemini)。
    • 使用选定的模型(来自 REASONING_MODEL)生成推理。
    • 返回推理结果。
  2. 响应阶段:

    • 调用 getFinalResponse 函数,传入原始提示和第一阶段的推理。
    • 根据 CODING_PROVIDER 环境变量,调用适当的提供商特定函数。
    • 使用选定的模型(来自 CODING_MODEL)生成最终响应,结合推理。
    • 返回响应结果。
  3. MCP 处理: ReasoningCodingServer 类处理 MCP 通信、任务管理和上下文管理。它使用 getReasoninggetFinalResponse 函数来协调两阶段过程。

许可证

MIT 许可证 - 查看 LICENSE 文件以获取详细信息。

致谢

  • 基于原始 Deepseek-Thinking-Claude-3.5-Sonnet-CLINE-MCP 项目。
  • 受 Skirano 的 RAT(检索增强思维)概念启发。