httpmcp_rust/
lib.rs

1//! # httpmcp-rust
2//!
3//! A fast, simple, production-ready library for building MCP (Model Context Protocol) servers
4//! using Streamable HTTP.
5//!
6//! ## Features
7//!
8//! - **Simple API**: Function-based registration with builder pattern
9//! - **Fast**: Built on actix-web with async/await
10//! - **Production-ready**: OAuth 2.0, SSE with resumption, proper error handling
11//! - **Type-safe**: Strong typing throughout
12//! - **Extensible**: Easy to add custom resources, tools, and prompts
13//!
14//! ## Quick Start
15//!
16//! ```rust,no_run
17//! use httpmcp_rust::{HttpMcpServer, RequestContext, ResourceMeta, ToolMeta, Result};
18//! use httpmcp_rust::protocol::{Resource, ResourceContents};
19//! use serde_json::{json, Value};
20//! use std::collections::HashMap;
21//!
22//! async fn list_resources(
23//!     _cursor: Option<String>,
24//!     _ctx: RequestContext,
25//! ) -> Result<(Vec<Resource>, Option<String>)> {
26//!     Ok((vec![Resource {
27//!         uri: "file:///example.txt".to_string(),
28//!         name: "Example".to_string(),
29//!         description: Some("Example file".to_string()),
30//!         mime_type: Some("text/plain".to_string()),
31//!     }], None))
32//! }
33//!
34//! async fn read_resource(uri: String, _ctx: RequestContext) -> Result<Vec<ResourceContents>> {
35//!     Ok(vec![ResourceContents {
36//!         uri,
37//!         mime_type: Some("text/plain".to_string()),
38//!         text: Some("Hello, MCP!".to_string()),
39//!         blob: None,
40//!     }])
41//! }
42//!
43//! async fn echo_tool(args: HashMap<String, Value>, _ctx: RequestContext) -> Result<Value> {
44//!     Ok(json!({"echo": args.get("message")}))
45//! }
46//!
47//! #[tokio::main]
48//! async fn main() -> std::io::Result<()> {
49//!     let server = HttpMcpServer::builder()
50//!         .name("my-server")
51//!         .version("1.0.0")
52//!         .resource(
53//!             "file:///example.txt",
54//!             ResourceMeta::new().name("Example").mime_type("text/plain"),
55//!             list_resources,
56//!             read_resource,
57//!         )
58//!         .tool(
59//!             "echo",
60//!             ToolMeta::new()
61//!                 .description("Echo a message")
62//!                 .param("message", "string", "Message to echo")
63//!                 .required(&["message"]),
64//!             echo_tool,
65//!         )
66//!         .build()
67//!         .expect("Failed to build server");
68//!
69//!     server.run("127.0.0.1:8080").await
70//! }
71//! ```
72
73pub mod auth;
74pub mod context;
75pub mod error;
76pub mod handler_types;
77pub mod handlers;
78pub mod jsonrpc;
79pub mod metadata;
80pub mod middleware;
81pub mod protocol;
82pub mod server;
83pub mod sse;
84pub mod transport;
85
86// Re-export commonly used types
87pub use context::RequestContext;
88pub use error::{McpError, Result};
89pub use metadata::{PromptMeta, ResourceMeta, ToolMeta};
90pub use server::{HttpMcpServer, HttpMcpServerBuilder};
91
92// Re-export protocol types
93pub use protocol::{
94    Implementation, Prompt, PromptArgument, PromptContent, PromptMessage, PromptsGetParams,
95    PromptsGetResult, PromptsListParams, PromptsListResult, Resource, ResourceContents,
96    ResourceTemplate, ResourcesListParams, ResourcesListResult, ResourcesReadParams,
97    ResourcesReadResult, ServerCapabilities, Tool, ToolContent, ToolsCallParams, ToolsCallResult,
98    ToolsListResult,
99};