多语言模型统一接口服务器

Universal MCP Server是一个统一接口中心,支持与多种大型语言模型(LLM)提供商交互,适用于需要集成多语言模型的应用开发场景。

  • by Dream-Pixels-Forge
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Dream-Pixels-Forge/universal-blender-mcp

使用说明

通用MCP服务器

通用MCP服务器作为一个中心枢纽,通过统一的接口与各种大型语言模型(LLM)提供商进行交互。它允许Blender插件等应用程序利用不同的LLM,而无需为每个LLM实现单独的集成。

特性

  • 多提供商支持:与各种LLM提供商集成,包括:
    • 双子座
    • 克劳德
    • OpenAI
    • 通义
    • 奥拉玛
    • 深度求索
    • OpenCode(登月计划)
  • 统一接口:为发送消息、处理工具调用和流式响应提供一致的API。
  • 适配器模式:可扩展的架构允许轻松添加新的LLM提供者。
  • 配置灵活性:支持通过环境变量和YAML文件进行配置。

安装

需要 紫外线 (Python包/项目管理器)。

  1. 克隆仓库:

    git clone <repository-url>
    cd universal-blender-mcp
    
  2. 同步依赖关系 (创建 .venv 并安装所有内容):

    uv sync
    

配置

服务器的行为和适配器连接是通过配置文件和环境变量进行管理的。

  1. 主要配置(config/universal_config.yaml): 此文件可能包含服务器的全局设置,如默认模型、日志级别等。

  2. 适配器特定配置:

    • API密钥:大多数适配器都需要API密钥。建议将这些设置为环境变量(例如。, GOOGLE_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, KIMI_API_KEY).
    • 型号名称、主机等。:这些通常可以通过环境变量或在 universal_config.yaml 如果适配器支持它。有关具体的配置选项,请参阅各个适配器实现。

用法

运行服务器

要启动通用MCP服务器:

uv run universal-blender-mcp

或者直接通过模块:

uv run python -m server.universal_mcp_server

服务器将启动,加载可用适配器,并监听传入连接。

从客户端连接(例如Blender插件)

客户端应用程序通常会通过HTTP请求或类似协议与正在运行的服务器通信。具体的交互方法将取决于 universal_mcp_server.py 被实现以公开其功能。

交互流示例(概念性):

  1. 发送请求:客户端向服务器发送请求,指定所需的LLM提供程序、消息内容和任何工具。
  2. 服务器路由请求:服务器根据请求选择适当的适配器。
  3. 适配器交互:适配器处理请求,可能会调用底层LLM API或CLI。
  4. 响应:服务器向客户端返回LLM的响应。

示例:使用Gemini适配器(从客户端的角度)

客户端将配置Gemini适配器(例如,通过确保 GOOGLE_API_KEY 设置),然后向服务器发送消息。服务器会将此路由到 GeminiCLIAdapter.

# Example client-side code (conceptual)
import requests
import json

SERVER_URL = "http://localhost:8000" # Assuming server runs on localhost:8000

def send_to_llm(provider: str, message: str, tools: Optional[List[Dict]] = None):
    payload = {
        "provider": provider,
        "message": message,
        "tools": tools
    }
    response = requests.post(f"{SERVER_URL}/send", json=payload)
    return response.json()

# Example usage
response_data = send_to_llm("gemini", "Hello, Gemini! What's the weather like today?")
print(response_data)

发展

设置

uv sync --group dev --group test

运行测试

uv run pytest

掉毛

uv run ruff check .
uv run ruff format .

添加新适配器

要添加对新LLM提供程序的支持,请执行以下操作:

  1. 在中创建一个新的Python文件 server/cli_adapters/ (例如。, new_llm_adapter.py).
  2. 创建一个继承自的类 BaseCLIAdapter.
  3. 实施所需的方法:
    • _get_provider():返回 CLIProvider 新LLM的枚举。
    • connect():实现逻辑以检查LLM是否可用(CLI或API键)。
    • send_message():处理发送消息和接收响应。
    • stream_message():如果LLM支持,则实现流式传输。
    • format_tools():将工具定义转换为LLM的特定格式。
    • parse_tool_calls():从LLM的响应中提取工具调用。
  4. 更新 server/cli_adapters/__init__.py 如果需要动态加载,则包括新适配器。
  5. 在中注册新适配器 server/tool_registry.py 或类似。

目录结构

.
├── server/
│   ├── cli_adapters/     # Adapter implementations for LLM providers
│   │   ├── __init__.py
│   │   ├── base_adapter.py   # Base class for adapters
│   │   ├── gemini_adapter.py
│   │   ├── ...             # Other adapter files
│   │   └── __pycache__/
│   ├── config_manager.py
│   ├── tool_registry.py
│   ├── universal_mcp_server.py # Main server script
│   └── __pycache__/
├── shared/               # Shared utilities and protocols
│   ├── constants.py
│   ├── protocol.py       # Defines common data structures (e.g., MCPResponse)
│   └── __pycache__/
├── config/               # Configuration files
│   └── universal_config.yaml
├── tests/                # Test suite
├── .gitignore
├── mcp.json              # Cursor MCP config (template)
├── mcp.yaml              # OpenCode MCP config (template)
├── claude_desktop_config.json  # Claude Desktop config (template)
├── pyproject.toml        # Project metadata & dependencies
└── uv.lock               # Locked dependencies (auto-generated by uv)

贡献

欢迎投稿!请按照以下步骤操作:

  1. 分叉存储库。
  2. 为您的功能或错误修复创建一个新分支。
  3. 进行更改,并确保它们遵循现有的代码风格和约定。
  4. 为您的更改添加单元测试。
  5. 提交拉取请求。

许可证

此项目以[LICENSE文件名]获得许可-请参阅 许可证 文件以获取详细信息。