A2C-SMCP Computer Module (Rust Implementation)
Rust版本的A2C-SMCP Computer模块实现,提供MCP服务器连接管理和工具调用功能。
功能特性 / Features
核心功能 / Core Features
- 多服务器管理: 同时管理多个MCP服务器连接
- 连接类型支持: 支持STDIO、HTTP、SSE三种连接方式
- 工具冲突处理: 自动检测工具名冲突,支持别名机制
- 生命周期管理: 严格的进程和内存安全管理
- 输入抽象: 支持CLI、环境变量等多种输入方式
安全特性 / Security Features
- 进程安全: 使用tokio::process管理子进程,防止进程泄漏
- 内存安全: 使用Arc管理共享状态,避免数据竞争
- 超时控制: 所有操作支持超时机制,防止任务挂起
- 资源清理: 显式的shutdown机制,确保资源正确释放
架构设计 / Architecture
┌─────────────────────────────────────────────────────────────┐
│ MCPServerManager │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ Server Configs │ │ Active Clients │ │ Tool Mapping │ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ MCPClientProtocol │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │StdioClient │ │HttpClient │ │ SseClient │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ InputHandler │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ CLI Provider │ │ Env Provider │ │ Composite │ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
快速开始 / Quick Start
基本用法 / Basic Usage
use *;
use HashMap;
async
输入处理 / Input Handling
use *;
// 创建输入处理器 / Create input handler
let input_handler = new;
// 创建输入请求 / Create input request
let request = InputRequest ;
// 获取输入 / Get input
let context = new
.with_server_name
.with_tool_name;
let response = input_handler.get_input.await?;
println!;
配置说明 / Configuration
服务器配置 / Server Configuration
STDIO服务器 / STDIO Server
Stdio
HTTP服务器 / HTTP Server
Http
SSE服务器 / SSE Server
Sse
工具元数据 / Tool Metadata
ToolMeta
高级用法 / Advanced Usage
自定义输入提供者 / Custom Input Provider
use async_trait;
// 使用自定义提供者 / Use custom provider
let handler = with_provider;
工具冲突处理 / Tool Conflict Resolution
当多个服务器有同名工具时,必须使用别名解决冲突:
// 服务器1 / Server 1
Stdio
// 服务器2 / Server 2
Stdio
// 使用别名调用工具 / Call tools using aliases
manager.execute_tool.await?;
manager.execute_tool.await?;
错误处理 / Error Handling
match manager.execute_tool.await
性能优化 / Performance Optimization
并发控制 / Concurrency Control
// 启用自动连接和重连 / Enable auto connect and reconnect
manager.enable_auto_connect.await;
manager.enable_auto_reconnect.await;
// 并发启动多个服务器 / Start multiple servers concurrently
let server_configs = vec!;
manager.initialize.await?;
try_join!?;
缓存优化 / Cache Optimization
// 启用输入缓存 / Enable input caching
let handler = new.with_cache;
// 批量获取输入 / Batch get inputs
let requests = vec!;
let responses = handler.get_inputs.await?;
// 清理缓存 / Clear cache
handler.clear_cache.await;
测试 / Testing
运行测试套件:
# 运行所有测试 / Run all tests
# 运行特定测试 / Run specific tests
# 运行测试并显示输出 / Run tests with output
故障排除 / Troubleshooting
常见问题 / Common Issues
-
进程泄漏 / Process Leaks
- 确保调用
manager.close().await清理资源 - 使用显式的disconnect而不是依赖Drop trait
- 确保调用
-
连接超时 / Connection Timeouts
- 检查网络连接和防火墙设置
- 适当调整超时时间
-
工具冲突 / Tool Conflicts
- 使用alias机制解决同名工具冲突
- 检查forbidden_tools配置
-
内存使用 / Memory Usage
- 定期清理输入缓存
- 监控活动客户端数量
调试技巧 / Debugging Tips
// 启用详细日志 / Enable verbose logging
use tracing_subscriber;
init;
// 监控服务器状态 / Monitor server status
let status = manager.get_server_status.await;
for in status
// 检查工具映射 / Check tool mapping
let tools = manager.list_available_tools.await;
for tool in tools
贡献 / Contributing
欢迎提交Issue和Pull Request来改进这个项目。
许可证 / License
本项目采用MIT许可证。详见LICENSE文件。
更新日志 / Changelog
v0.1.0 (2025-12-15)
- 初始版本发布
- 实现基本的MCP客户端管理功能
- 支持STDIO、HTTP、SSE三种连接方式
- 实现输入抽象层
- 完整的测试覆盖