LM Studio的MCP Hello World
这是一个用Rust编写的最小的、独立的MCP(模型上下文协议)服务器,专门设计为 LM 工作室.
💡 目的
虽然官方的MCP SDK提供了高级抽象,但LM Studio目前有具体的、未记录的要求(黄金法则),这可能会导致标准实现失败。
\[!注意\] 这些观察结果是在调试会话期间收集的 2026-02-05 同时试图让MCP服务器在LM Studio中工作。随着LM Studio的快速发展,这些应该被视为当前的“提示”,而不是官方规范。
该项目使用标准输入/输出上的原始JSON-RPC从头开始实现协议,以准确演示如何满足当今的这些要求。
🏆 人工智能辅助开发集成指南
AI助手喜欢 谷歌反重力 已经对标准MCP规范有了深入的了解。通过简单地提供这4个“桥接规则”作为外部约束,您通常可以一次性为LM Studio生成一个完全兼容的小型MCP服务器:
基于一些尝试和错误 2026-02-05,以下实现细节似乎可以确保与当前版本的LM Studio的稳定集成:
- 二进制位置:当二进制文件位于特定目录结构中时,LM Studio看起来最稳定。
- 推荐路径: ~/.lmstudio/extensions/plugins/mcp/ / - 配置您的 mcp.json 指向此位置的二进制文件。
- 协议版本验证:在
initialize握手时,LM Studio发送protocolVersion(例如。,2025-06-18).将此确切版本镜像回客户端可以提高兼容性。
// snippet from main.rs
"initialize" => {
let client_version = req.params.as_ref()
.and_then(|p| p.get("protocolVersion"))
.and_then(|v| v.as_str())
.unwrap_or("2024-11-05");
let response = JsonRpcResponse {
jsonrpc: "2.0".to_string(),
result: Some(serde_json::json!({
"protocolVersion": client_version, // Mirror client's version
"capabilities": { "tools": {} },
"serverInfo": { "name": "mcp-hello-world", "version": "0.1.0" }
})),
id: req.id,
};
}- 严格的JSON-RPC合规性(否
null错误):LM Studio的解析器可能对以下内容敏感null价值观。对于成功的响应,省略以下内容更安全error完全字段,而不是将其设置为null.
#[derive(Debug, Serialize)]
struct JsonRpcResponse {
pub jsonrpc: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub result: Option,
#[serde(skip_serializing_if = "Option::is_none")] // Field is omitted if None
pub error: Option,
pub id: Option,
}- 工具调用响应结构:工具输出必须包装在
content数组并包含isError旗帜。
"tools/call" => {
let response = JsonRpcResponse {
jsonrpc: "2.0".to_string(),
result: Some(serde_json::json!({
"content": [{ "type": "text", "text": "Hello, World!" }],
"isError": false
})),
error: None,
id: req.id,
};
}🚀 入门指南
先决条件
- 锈 (货物)
构建
cargo build --release运行(独立)
您可以在终端中手动测试服务器:
# Send an initialize request
echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-06-18"},"id":1}' | ./target/release/mcp-hello-world🛠 特性
- 标准握手:支持
initialize和notifications/initialized. - 问候工具:提供简单
hello验证功能的工具。 - 文件记录:用途
flexi_logger将日志输出到与可执行文件位于同一目录中的文件中,有助于后台调试。
📄 许可证
麻省理工学院
