mcpField
N
Neva

Neva

本地服务
romanemreis.github.io开发工具64 天前更新

关于 Neva

Neva 是用于构建 MCP 客户端和服务端的 Rust SDK,面向开发异步 MCP 系统的开发者。它整合核心 MCP 实体、本地或远程传输,并支持身份验证、结构化数据和多轮请求。

主要功能

  1. 01构建 MCP 客户端和服务端
  2. 02支持 stdio 与 Streamable HTTP 传输
  3. 03定义和使用工具、资源及提示词
  4. 04支持异步与同步处理器
  5. 05支持 bearer 身份验证和基于角色的访问控制
  6. 06结构化输出与多轮请求处理

适用场景

  1. 01构建 Rust MCP 服务端
  2. 02通过 stdio 连接 MCP 客户端
  3. 03实现远程双向 MCP 通信
  4. 04处理多轮工具请求

MCP 相关

Neva 提供用于实现 MCP 客户端和服务端的 SDK。服务端可公开工具、资源和提示词;客户端可通过 stdio 或 Streamable HTTP 连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Neva

为 Rust 提供闪电般快速且易于配置的 Model Context Protocol (MCP) 服务和客户端 SDK。 通过简单的配置和易用的 API,它提供了快速构建 MCP 客户端和服务所需的一切, 并与最新的 MCP 规范完全对齐。

latest latest License: MIT CI Release

💡 注意:此项目目前处于预览阶段。可能会在不提前通知的情况下引入破坏性变更。

Tutorial | API 文档 | 示例

主要功能

  • 客户端和服务端 SDK - 一个库即可借助 Rust 的强大功能构建 MCP 客户端和服务。
  • 性能 - 异步运行,由 Tokio 驱动。
  • 传输方式 - stdio 用于本地集成,Streamable HTTP 用于远程双向通信。
  • 工具、资源和提示词 - 全面支持定义和使用主要 MCP 实体。
  • 异步或同步处理器 - 需要等待时编写 async fn,否则使用普通的 fn。如果函数体会阻塞,则添加 blocking,它会在 Tokio 的阻塞线程池而不是运行时工作线程上运行。
  • 身份验证和授权 - 支持 bearer token 身份验证、基于角色的访问控制等,满足高安全性要求。
  • 结构化数据 - 开箱即用地支持输出验证、嵌入式资源和资源链接。
  • 安全的多轮往返请求 - 在调用过程中向客户端请求输入的处理器会在每一轮从头重新运行,因此幂等性由 neva 管理:ctx.memo 只计算一次,ctx.once 只执行一次副作用,ctx.on_commit 会将其延迟到最终结果时执行;如果响应丢失,则会重放已提交的答案,而不会重复扣款。
  • 机密请求状态 - 在多轮之间传递进度的 requestState 数据块使用 ChaCha20-Poly1305 加密,而非仅进行签名,因此客户端回传该数据块时,ctx.memo 缓存的内容仍不可读。
  • 将工具交给模型 - 启用 svir 功能后,MCP 服务的工具会成为一个 svir Toolbox:可以通过 RemoteTools 使用远程服务的工具,也可以在同一进程中通过服务自身的管道调用使用 #[tool] 编写一次的函数。提示词和资源会成为 svir 消息,而服务的采样请求则由模型作答。
  • Registry 发布 - 用于 MCP Registry 的 server.json 会根据服务已知的信息生成:其版本、传输方式以及 Cargo 正在构建的 crate。上传前会检查 Registry 的限制,而不是等上传时才检查。
  • 规范对齐 - 旨在跟进最新的 MCP 规范并涵盖其核心功能。

快速开始

MCP 客户端
依赖项
[dependencies]
neva = { version = "0.9.0", features = ["client-full"] }
tokio = { version = "1", features = ["full"] }
代码
use neva::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Error> {
    let mut client = Client::new()
        .with_options(|opt| opt
            .with_stdio("npx", ["-y", "@modelcontextprotocol/server-everything"])
            .with_timeout(Duration::from_secs(5)));
    
    client.connect().await?;

    // List tools
    for tool in client.tools().list_all().await? {
        println!("- {}", tool.name);
    }

    // Call a tool
    let args = [
        ("message", "Hello MCP!")
    ];
    let result = client.tools().call("echo", args).await?;
    println!("{:?}", result.content);

    client.disconnect().await
}
MCP 服务端
依赖项
[dependencies]
neva = { version = "0.9.0", features = ["server-full"] }
tokio = { version = "1", features = ["full"] }
代码
use neva::prelude::*;

#[tool(descr = "A say hello tool")]
async fn hello(name: String) -> String {
    format!("Hello, {name}!")
}

#[resource(uri = "res://{name}", descr = "Some details about resource")]
async fn get_res(name: String) -> ResourceContents {
    ResourceContents::new(format!("res://{name}"))
        .with_mime("plain/text")
        .with_text(format!("Some details about resource: {name}"))
}

// Nothing to await here, so a plain `fn` will do.
#[prompt(descr = "Analyze code for potential improvements")]
fn analyze_code(lang: String) -> PromptMessage {
    PromptMessage::user()
        .with(format!("Language: {lang}"))
}

#[tokio::main]
async fn main() {
    App::new()
        .with_options(|opt| opt
            .with_stdio()
            .with_name("Sample MCP server")
            .with_version("1.0.0"))
        .run()
        .await;
}

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。