编码器-mcp-client
 
用于与以下对象交互的Rust客户端库 MCP(模型上下文协议) 服务器,专为 KODEGEN.017424- 数据库查询和模式探索工具。
特性
✨ 类型安全MCP客户端
- 适用于所有100+KODEGEN工具的强类型响应结构
- 编译时类型检查
call_tool_typed() - 对两者的支持
camelCase和snake_case字段名称
🚀 异步高效
- 基于Tokio构建,用于高性能异步操作
- 克隆客户端句柄成本低廉(内部基于Arc)
- 具有合理默认值的可配置超时
🔌 多个传输
- HTTP/SSE(服务器发送事件)
- 流式HTTP
- 运输选择方便
🛡️ 稳健的错误处理
- 具有上下文的全面错误类型
- 清除调试错误消息
- 带有操作详细信息的超时跟踪
安装
添加到您的 Cargo.toml:
[dependencies]
kodegen_mcp_client = "0.1"要求:
- 锈蚀夜间工具链
- Tokio异步运行时
快速开始
use kodegen_mcp_client::{create_streamable_client, tools, X_SESSION_PWD, X_SESSION_GITROOT};
use reqwest::header::{HeaderMap, HeaderValue};
use serde_json::json;
#[tokio::main]
async fn main() -> Result> {
// Build session context headers
let mut headers = HeaderMap::new();
let cwd = std::env::current_dir()?;
headers.insert(X_SESSION_PWD, HeaderValue::from_str(&cwd.to_string_lossy())?);
// Add git root if available
if let Some(git_root) = find_git_root(&cwd) {
headers.insert(X_SESSION_GITROOT, HeaderValue::from_str(&git_root.to_string_lossy())?);
}
// Create client connection with session headers
let (client, _conn) = create_streamable_client("http://localhost:8000/mcp", headers).await?;
// List available tools
let tools = client.list_tools().await?;
println!("Available tools: {}", tools.len());
// Call a tool with JSON arguments
let result = client.call_tool(
tools::LIST_SCHEMAS,
json!({}),
).await?;
println!("Result: {:?}", result);
Ok(())
}
fn find_git_root(start: &std::path::Path) -> Option {
let mut current = start.to_path_buf();
loop {
if current.join(".git").exists() {
return Some(current);
}
if !current.pop() {
return None;
}
}
}使用示例
类型安全工具调用
使用强类型响应而不是手动JSON解析:
use kodegen_mcp_client::responses::StartSearchResponse;
use kodegen_mcp_client::tools;
// Type-safe tool call with automatic deserialization
let response: StartSearchResponse = client
.call_tool_typed(tools::START_SEARCH, json!({
"path": "/project",
"pattern": "*.rs",
"searchType": "files"
}))
.await?;
// Use the typed response
println!("Search session ID: {}", response.session_id);可克隆的客户端句柄
客户端句柄的克隆成本很低,可以跨任务共享:
use reqwest::header::HeaderMap;
let (client, _conn) = create_streamable_client(url, HeaderMap::new()).await?;
// Clone the client for concurrent operations
let client2 = client.clone();
tokio::spawn(async move {
client2.list_tools().await
});
// Original client still works
client.call_tool(tools::READ_FILE, args).await?;自定义超时
use reqwest::header::HeaderMap;
use tokio::time::Duration;
let (client, _conn) = create_streamable_client(url, HeaderMap::new()).await?;
// Set custom timeout (default is 10 minutes)
let client = client.with_timeout(Duration::from_secs(60));GitHub集成
use kodegen_mcp_client::responses::{GitHubIssuesResponse, GitHubIssue};
let response: GitHubIssuesResponse = client
.call_tool_typed(tools::LIST_ISSUES, json!({
"owner": "myorg",
"repo": "myrepo",
"state": "open"
}))
.await?;
for issue in response.issues {
println!("#{}: {}", issue.number, issue.title);
}数据库操作
use kodegen_mcp_client::tools;
// Execute SQL query
let result = client.call_tool(tools::EXECUTE_SQL, json!({
"query": "SELECT * FROM users WHERE active = true",
"database": "production"
})).await?;
// Get table schema
let schema = client.call_tool(tools::GET_TABLE_SCHEMA, json!({
"table_name": "users",
"schema": "public"
})).await?;建筑
手柄+连接方式
该库使用双结构模式进行资源管理:
KodegenClient:用于执行MCP操作的克隆手柄成本低廉
- 跨异步任务自由克隆和共享 - 包裹 Arc 内部用于高效克隆 - 线程安全且可共享
KodegenConnection:不可克隆的生命周期管理器
- 只要连接保持活动状态,就必须保持 - 提供 close() 用于优雅关机 - 断开连接时自动取消连接
use reqwest::header::HeaderMap;
let (client, _conn) = create_streamable_client(url, HeaderMap::new()).await?;
// client: Clone freely
// _conn: Hold until shutdown desired (auto-cleanup on drop)可用工具类别
该库提供对100+KODEGEN的类型安全访问。ᴀ多种类别的工具:
- 文件系统 (14个工具):文件操作、搜索、目录管理
- 终端 (5个工具):命令执行、流程管理
- 数据库 (7个工具):模式探索、查询执行、连接池
- Git (20个工具):存储库操作、分支、提交、工作树
- GitHub (25个工具):问题、PR、评论、代码搜索、存储库
- 克劳德特工 (5个工具):多代理编排、生成、通信
- 网络爬虫 (4个工具):网站爬行、搜索、内容提取
- 配置 (2个工具):服务器配置管理
- 提示 (4个工具):模板管理和渲染
- 顺序思维 (1个工具):思维链推理
所有工具名称在 tools 模块。
错误处理
该库提供了具有上下文的全面错误类型:
use kodegen_mcp_client::ClientError;
match client.call_tool(tools::READ_FILE, args).await {
Ok(result) => println!("Success: {:?}", result),
Err(ClientError::Timeout(msg)) => eprintln!("Timeout: {}", msg),
Err(ClientError::ParseError(msg)) => eprintln!("Parse error: {}", msg),
Err(ClientError::Connection(msg)) => eprintln!("Connection failed: {}", msg),
Err(e) => eprintln!("Other error: {}", e),
}错误变体:
Protocol:MCP协议错误Timeout:操作超时(包括持续时间)ParseError:响应反序列化失败Connection:传输连接失败ServiceError,InitError,Io,JoinError:低级错误
运输选项
流式HTTP(推荐)
use kodegen_mcp_client::create_streamable_client;
use reqwest::header::HeaderMap;
let (client, conn) = create_streamable_client("http://localhost:8000/mcp", HeaderMap::new()).await?;HTTP/SSE(服务器发送事件)
use kodegen_mcp_client::transports::http::create_http_client;
let (client, conn) = create_http_client("http://localhost:8000/mcp").await?;发展
建筑
cargo build # Debug build
cargo build --release # Release build测试
cargo test # Run all tests
cargo test --lib # Library tests only装订和格式化
cargo clippy # Run linter
cargo fmt # Format code文档
cargo doc --open # Build and open docs许可证
根据Apache 2.0或MIT条款双重许可。
看 许可证.md 了解详情。
链接
- 首页: https://kodegen.ai
- 仓库:
- MCP协议: https://modelcontextprotocol.io
______________________________________________________________________
版权所有©2025大卫·枫树/KODEGEN。ᴀɪ
