#![cfg_attr(docsrs, feature(doc_cfg))]
pub const MCP_PROTOCOL_VERSION: &str = "2025-11-25";
pub mod protocol;
pub mod result;
pub mod server;
pub mod tool;
pub mod transport;
#[cfg(feature = "macros")]
#[cfg_attr(docsrs, doc(cfg(feature = "macros")))]
pub mod macro_adapter;
#[cfg(feature = "client")]
pub mod client;
pub mod circuit_breaker;
pub mod hub;
pub mod hub_common;
pub mod server_hub;
pub mod transport_factory;
pub use protocol::{
CallToolParams, CallToolResult, ClientInbound, JsonRpcError, JsonRpcId, JsonRpcMessage,
JsonRpcNotification, JsonRpcPayload, JsonRpcRequest, JsonRpcResponse, ListToolsParams,
ListToolsResult, McpCapabilities, McpServerInfo, McpToolDefinition, ServerOutbound,
ToolContent, ToolInputSchema,
};
pub use protocol::{
Annotations,
BaseMetadata,
BooleanSchema,
CancelTaskParams,
CompleteArgument,
CompleteContext,
CompleteParams,
CompleteResult,
CompletionData,
CreateMessageParams,
CreateMessageResult,
CreateTaskResult,
ElicitAction,
ElicitRequestFormParams,
ElicitRequestParams,
ElicitRequestUrlParams,
ElicitResult,
ElicitationCompleteParams,
GetTaskParams,
GetTaskPayloadParams,
Icon,
IconTheme,
Implementation,
ListRootsResult,
ListTasksParams,
ListTasksResult,
LoggingLevel,
LoggingMessageParams,
ModelHint,
ModelPreferences,
NumberSchema,
ProgressNotificationParams,
ProgressToken,
PromptReference,
RelatedTaskMetadata,
ResourceTemplateReference,
Role,
Root,
SamplingContent,
SamplingMessage,
SetLevelParams,
StringSchema,
StringSchemaFormat,
Task,
TaskMetadata,
TaskStatus,
TaskStatusNotificationParams,
TaskSupport,
ToolAnnotations,
ToolChoice,
ToolChoiceMode,
ToolExecution,
ToolResultContent,
ToolUseContent,
};
pub use transport::{
ClientInfo, InitializeCapabilities, InitializeParams, InitializeResult,
McpServerConnectionConfig, McpTransport, McpTransportError, RestartPolicy, ServerCapabilities,
ServerInfo, TransportTypeId,
};
pub use transport::{
ElicitationCapabilities, PromptsCapabilities, ResourcesCapabilities, RootsCapabilities,
SamplingCapabilities, ServerToolCapabilities, TasksCapabilities, ToolCapabilities,
};
pub use result::{error_result, success_result, tool_err, tool_ok, IntoCallToolResult, ToolResult};
pub use tool::{
all_tools, tools_in_group, BoxFuture, DynTool, FnTool, McpTool, ToolCallResult, ToolEntry,
ToolFactory, ToolProvider, ToolRegistry,
};
#[doc(hidden)]
pub use inventory;
pub use server::{
McpServer, McpServerChannels, McpServerConfig, McpServerConfigBuilder, ServerError,
ServerStatus,
};
#[cfg(feature = "stdio-server")]
#[cfg_attr(docsrs, doc(cfg(feature = "stdio-server")))]
pub use server::stdio::McpStdioServer;
#[cfg(feature = "http-server")]
#[cfg_attr(docsrs, doc(cfg(feature = "http-server")))]
pub use server::http::McpHttpServer;
pub use hub::McpHub;
pub use server_hub::McpServerHub;
#[cfg(feature = "client")]
#[cfg_attr(docsrs, doc(cfg(feature = "client")))]
pub use client::stdio::{AsyncStdioTransport, StdioTransportAdapter, TokioStdioTransport};
#[cfg(feature = "client")]
#[cfg_attr(docsrs, doc(cfg(feature = "client")))]
pub use client::http::{HttpTransport, HttpTransportAdapter};
#[cfg(feature = "macros")]
#[cfg_attr(docsrs, doc(cfg(feature = "macros")))]
pub mod macros {
pub use model_context_protocol_macros::{mcp_server, mcp_tool};
}
#[cfg(feature = "macros")]
#[cfg_attr(docsrs, doc(cfg(feature = "macros")))]
pub use macro_adapter::{MacroServer, MacroServerAdapter};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_protocol_version() {
assert_eq!(MCP_PROTOCOL_VERSION, "2025-11-25");
}
#[test]
fn test_version() {
assert!(!VERSION.is_empty());
}
#[tokio::test]
async fn test_hub_basic() {
let hub = McpHub::new();
assert!(!hub.list_servers().is_empty() || hub.list_servers().is_empty());
}
}