| Crates.io | neva |
| lib.rs | neva |
| version | 0.2.5 |
| created_at | 2025-04-07 15:13:50.115375+00 |
| updated_at | 2025-12-14 12:10:52.30169+00 |
| description | MCP SDK for Rust |
| homepage | |
| repository | https://github.com/RomanEmreis/neva |
| max_upload_size | |
| id | 1624349 |
| size | 872,530 |
Blazingly fast and easily configurable Model Context Protocol (MCP) server and client SDK for Rust. With simple configuration and ergonomic APIs, it provides everything you need to quickly build MCP clients and servers, fully aligned with the latest MCP specification.
💡 Note: This project is currently in preview. Breaking changes can be introduced without prior notice.
Tutorial | API Docs | Examples
[dependencies]
neva = { version = "0.2.5", 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
let tools = client.list_tools(None).await?;
for tool in tools.tools {
println!("- {}", tool.name);
}
// Call a tool
let args = [
("message", "Hello MCP!")
];
let result = client.call_tool("echo", args).await?;
println!("{:?}", result.content);
client.disconnect().await
}
[dependencies]
neva = { version = "0.2.5", 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}"))
}
#[prompt(descr = "Analyze code for potential improvements")]
async 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;
}