使用说明
通用MCP服务器
通用MCP服务器作为一个中心枢纽,通过统一的接口与各种大型语言模型(LLM)提供商进行交互。它允许Blender插件等应用程序利用不同的LLM,而无需为每个LLM实现单独的集成。
特性
- 多提供商支持:与各种LLM提供商集成,包括:
- 双子座
- 克劳德
- OpenAI
- 通义
- 奥拉玛
- 深度求索
- OpenCode(登月计划)
- 统一接口:为发送消息、处理工具调用和流式响应提供一致的API。
- 适配器模式:可扩展的架构允许轻松添加新的LLM提供者。
- 配置灵活性:支持通过环境变量和YAML文件进行配置。
安装
需要 紫外线 (Python包/项目管理器)。
-
克隆仓库:
git clone <repository-url> cd universal-blender-mcp -
同步依赖关系 (创建
.venv并安装所有内容):uv sync
配置
服务器的行为和适配器连接是通过配置文件和环境变量进行管理的。
-
主要配置(
config/universal_config.yaml): 此文件可能包含服务器的全局设置,如默认模型、日志级别等。 -
适配器特定配置:
- API密钥:大多数适配器都需要API密钥。建议将这些设置为环境变量(例如。,
GOOGLE_API_KEY,OPENAI_API_KEY,ANTHROPIC_API_KEY,KIMI_API_KEY). - 型号名称、主机等。:这些通常可以通过环境变量或在
universal_config.yaml如果适配器支持它。有关具体的配置选项,请参阅各个适配器实现。
- API密钥:大多数适配器都需要API密钥。建议将这些设置为环境变量(例如。,
用法
运行服务器
要启动通用MCP服务器:
uv run universal-blender-mcp
或者直接通过模块:
uv run python -m server.universal_mcp_server
服务器将启动,加载可用适配器,并监听传入连接。
从客户端连接(例如Blender插件)
客户端应用程序通常会通过HTTP请求或类似协议与正在运行的服务器通信。具体的交互方法将取决于 universal_mcp_server.py 被实现以公开其功能。
交互流示例(概念性):
- 发送请求:客户端向服务器发送请求,指定所需的LLM提供程序、消息内容和任何工具。
- 服务器路由请求:服务器根据请求选择适当的适配器。
- 适配器交互:适配器处理请求,可能会调用底层LLM API或CLI。
- 响应:服务器向客户端返回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提供程序的支持,请执行以下操作:
- 在中创建一个新的Python文件
server/cli_adapters/(例如。,new_llm_adapter.py). - 创建一个继承自的类
BaseCLIAdapter. - 实施所需的方法:
_get_provider():返回CLIProvider新LLM的枚举。connect():实现逻辑以检查LLM是否可用(CLI或API键)。send_message():处理发送消息和接收响应。stream_message():如果LLM支持,则实现流式传输。format_tools():将工具定义转换为LLM的特定格式。parse_tool_calls():从LLM的响应中提取工具调用。
- 更新
server/cli_adapters/__init__.py如果需要动态加载,则包括新适配器。 - 在中注册新适配器
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)
贡献
欢迎投稿!请按照以下步骤操作:
- 分叉存储库。
- 为您的功能或错误修复创建一个新分支。
- 进行更改,并确保它们遵循现有的代码风格和约定。
- 为您的更改添加单元测试。
- 提交拉取请求。
许可证
此项目以[LICENSE文件名]获得许可-请参阅 许可证 文件以获取详细信息。
