ngsi ld mcp
使用Rust和Axum的MCP(模型上下文协议)服务器实现。
特性
- HTTP服务器:基于Axum的HTTP服务器,支持SSE(服务器发送事件)
- MCP协议:使用rmcp实现完整的模型上下文协议
- 工具支持:定义和公开AI模型交互工具
- 资源管理:通过适当的URI处理提供资源
- 提示模板:支持动态提示模板
- 实时通信:SSE用于实时双向通信
- 信号处理:通过适当的信号处理实现优雅的关机
- 安全:用于生产部署的内置安全功能
安全特性
此服务器包括安全功能:
- 运输安全:使用可配置绑定地址进行web部署的安全SSE模式
- 输入消毒:所有输入都经过适当的验证和消毒
- 结构化日志记录:JSON日志可防止日志注入攻击
- 优雅地关闭:正确清理终端信号
- 错误处理:不会泄露实现细节的安全错误消息
用法
基本用法
# Start the server in STDIO mode (default)
cargo run
# Start the server in SSE mode with HTTP endpoints
cargo run -- --transport sse --sse-addr 127.0.0.1:8080
# Start with custom configuration
cargo run -- --log-dir /var/log/mcp --api-url https://api.example.com
# Use a configuration file
cargo run -- --config-file server.toml
# Start with debug logging (standard Rust logging)
RUST_LOG=debug cargo run配置
所有服务器配置都是通过命令行参数完成的:
ngsi-ld-mcp [OPTIONS]
Options:
-t, --transport Transport type to use [default: stdio] [possible values: stdio, sse]
--sse-addr SSE server bind address [default: 127.0.0.1:3400]
--sse-keep-alive SSE keep-alive interval in seconds [default: 30]
--log-dir Log directory path [default: logs]
--api-url API URL for backend services [default: http://localhost:1026/ngsi-ld/v1]
-c, --config-file Optional configuration file path (TOML format)
-h, --help Print help
-V, --version Print version运输方式
STDIO模式 (默认):
- 服务器通过标准输入/输出进行通信
- 适用于直接过程通信
- 由桌面MCP客户端使用,如Cursor/VS Code
SSE模式:
- 服务器为SSE通信公开HTTP端点
/sse-实时消息的服务器发送事件端点/message-客户端消息的POST端点- 适用于基于web的客户端和远程连接
配置文件
如果您更喜欢使用配置文件(指定为 --config-file),创建一个TOML文件:
log_dir = "logs"
api_url = "http://localhost:1026/ngsi-ld/v1"
transport = "stdio"
sse_addr = "127.0.0.1:3400"
sse_keep_alive = 30注意:命令行参数始终覆盖配置文件设置。
API终点
MCP协议端点
POST /mcp/sse-MCP通信的服务器发送事件端点GET /health-健康检查端点GET /schema-OpenAPI模式端点
开发终点
GET /docs-Swagger UI文档(仅限开发)
实施
添加工具
工具定义见 src/handlers/ 并注册于 src/main.rs:
use agenterra_rmcp::prelude::*;
#[tool]
async fn my_tool(
#[description("Input parameter")] input: String,
) -> Result> {
Ok(format!("Processed: {}", input))
}添加资源
资源通过MCP协议进行管理,可以表示文件、数据库或任何可访问的数据:
use agenterra_rmcp::prelude::*;
async fn list_resources() -> Vec {
vec![
Resource {
uri: "file:///example.txt".to_string(),
name: Some("Example File".to_string()),
description: Some("An example resource".to_string()),
mime_type: Some("text/plain".to_string()),
}
]
}添加提示
可以为动态内容生成定义提示模板:
use agenterra_rmcp::prelude::*;
async fn get_prompt(name: &str, args: &serde_json::Value) -> Option
{
match name {
"example" => Some(PromptMessage {
role: MessageRole::User,
content: MessageContent::Text("Example prompt".to_string()),
}),
_ => None,
}
}依赖项
- rmcp:MCP协议实施
- 阿克苏姆:HTTP web框架
- 东京:异步运行时
- 序列化与反序列化:序列化支持
- 阴谋家:JSON模式生成
- 追踪:测井和仪器
- 信号钩:优雅关机的信号处理
出版限制
⚠️ 重要:此项目使用git依赖项,无法以当前形式发布到crates.io。
这 rmcp 依赖关系直接从官方的ModelContextProtocol GitHub存储库中引用,以确保访问最新功能(包括身份验证支持)。要将此项目发布到crates.io,您需要:
- 等待官方
rmcp在crates.io上发布,其中包括auth特征 - 或者删除需要git依赖项的功能
- 或者在本地提供依赖项
此限制确保您在开发过程中可以访问完整的官方MCP SDK功能。
发展
建筑
cargo build运行测试
cargo test格式化
cargo fmt代码检查
cargo clippy热重载运行
对于开发,您可以使用 cargo watch:
cargo install cargo-watch
cargo watch -x run项目结构
ngsi-ld-mcp/
├── Cargo.toml # Rust project manifest
├── src/
│ ├── handlers/ # MCP request handlers
│ │ ├── mod.rs # Handler module exports
│ │ └── {endpoint}.rs # Individual endpoint handlers
│ ├── schemas/ # JSON schema files (created during generation)
│ ├── common.rs # Common utilities and error handling
│ ├── config.rs # Server configuration
│ ├── server.rs # MCP server implementation
│ ├── signal.rs # Signal handling for graceful shutdown
│ ├── transport.rs # Transport layer (STDIO/SSE)
│ └── main.rs # Server entry point
├── .env # Environment variables
└── README.md # Project documentation结构组织如下:
handlers/-包含所有MCP工具实现,每个端点一个文件schemas/-工具参数的JSON模式文件(自动生成)common.rs-用于API通信和错误处理的共享实用程序config.rs-配置管理和命令行解析server.rs-带协议处理的核心MCP服务器实现signal.rs-优雅关机的信号处理(信号处理、信号情报)transport.rs-支持STDIO和SSE模式的传输层main.rs-应用程序入口点和服务器初始化
生产部署
构建发布二进制文件
cargo build --releaseDocker部署
创建一个 Dockerfile:
FROM rust:1.70 as builder
WORKDIR /app
COPY . .
RUN cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/ngsi-ld-mcp /usr/local/bin/server
EXPOSE 3000
CMD ["server"]环境配置
对于生产,请考虑:
- 设置适当
RUST_LOG层级 - 配置正确的错误处理
- 设置监控和指标
- 实施速率限制
- 添加身份验证中间件
许可证
该项目根据MIT许可证获得许可。
