#![doc = include_str!("../CRATE-README.md")]
#![warn(
missing_docs,
missing_debug_implementations,
rust_2018_idioms,
unreachable_pub
)]
#![deny(unsafe_code)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![allow(clippy::missing_errors_doc)]
#![allow(clippy::return_self_not_must_use)]
#![allow(clippy::multiple_crate_versions)]
#![allow(clippy::used_underscore_binding)]
#![allow(clippy::result_large_err)]
#[macro_use]
#[allow(unused_macros)]
mod generated_contracts;
pub mod assets;
pub mod client;
#[cfg(feature = "composition")]
pub mod composition;
pub mod error;
pub mod runtime;
pub mod secrets;
pub mod server;
pub mod shared;
pub mod types;
pub mod utils;
#[cfg(feature = "simd")]
pub mod simd;
#[cfg(feature = "streamable-http")]
pub mod axum {
pub use crate::server::axum_router::{
router, router_with_config, AllowedOrigins, RouterConfig,
};
}
pub use client::{Client, ClientBuilder, ToolCallResponse};
pub use error::{Error, ErrorCode, Result};
#[cfg(not(target_arch = "wasm32"))]
pub use server::cancellation::RequestHandlerExtra;
#[cfg(not(target_arch = "wasm32"))]
pub use server::task_store::{InMemoryTaskStore, StoreConfig, TaskStore, TaskStoreError};
#[cfg(not(target_arch = "wasm32"))]
pub use server::{
auth,
limits::PayloadLimits,
simple_prompt::{SimplePrompt, SyncPrompt},
simple_resources::{DynamicResourceHandler, ResourceCollection, StaticResource},
simple_tool::{SimpleTool, SyncTool},
state::State,
typed_prompt::TypedPrompt,
typed_tool::{SimpleToolExt, SyncToolExt, TypedSyncTool, TypedTool, TypedToolWithOutput},
ui::UIResourceBuilder,
McpServer, PromptHandler, ResourceHandler, SamplingHandler, Server, ServerBuilder, ToolHandler,
};
#[cfg(target_arch = "wasm32")]
pub use server::{
wasm_server::{
SimpleTool, WasmMcpServer, WasmMcpServerBuilder, WasmPrompt, WasmResource, WasmTool,
},
wasm_typed_tool::WasmTypedTool,
};
#[cfg(target_arch = "wasm32")]
pub use server::wasm_server::{WasmMcpServer as Server, WasmMcpServerBuilder as ServerBuilder};
#[cfg(target_arch = "wasm32")]
pub use server::wasm_typed_tool::WasmTypedTool as TypedTool;
#[cfg(feature = "macros")]
pub use pmcp_macros::{mcp_prompt, mcp_server, mcp_tool};
#[cfg(not(target_arch = "wasm32"))]
pub use shared::StdioTransport;
#[cfg(feature = "streamable-http")]
pub use server::tower_layers::{AllowedOrigins, DnsRebindingLayer, SecurityHeadersLayer};
pub use shared::{
batch::{BatchRequest, BatchResponse},
uri_template::UriTemplate,
AuthMiddleware, LoggingMiddleware, Middleware, MiddlewareChain, RetryMiddleware, Transport,
};
#[cfg(all(feature = "websocket", not(target_arch = "wasm32")))]
pub use shared::{WebSocketConfig, WebSocketTransport};
#[cfg(all(feature = "websocket-wasm", target_arch = "wasm32"))]
pub use shared::{WasmWebSocketConfig, WasmWebSocketTransport};
#[cfg(target_arch = "wasm32")]
pub use shared::{WasmHttpClient, WasmHttpConfig, WasmHttpTransport};
#[cfg(all(feature = "http", not(target_arch = "wasm32")))]
pub use shared::{HttpConfig, HttpTransport};
pub use types::{
AuthInfo, AuthScheme, CallToolRequest, CallToolResult, ClientCapabilities, ClientNotification,
ClientRequest, CompleteRequest, CompleteResult, CompletionArgument, CompletionReference,
Content, CreateMessageParams, CreateMessageResult, GetPromptResult, Implementation,
IncludeContext, ListResourcesResult, ListToolsResult, LoggingLevel, ModelPreferences,
ProgressNotification, ProgressToken, PromptMessage, ProtocolVersion, ReadResourceResult,
RequestId, ResourceInfo, Role, RootsCapabilities, SamplingCapabilities, SamplingMessage,
ServerCapabilities, ServerNotification, ServerRequest, TokenUsage, ToolCapabilities, ToolInfo,
UIMimeType, UIResource, UIResourceContents,
};
pub use types::CallToolResult as ToolResult;
#[cfg(not(target_arch = "wasm32"))]
pub use utils::{BatchingConfig, DebouncingConfig, MessageBatcher, MessageDebouncer};
pub use async_trait::async_trait;
pub use types::protocol::version::{
negotiate_protocol_version, DEFAULT_PROTOCOL_VERSION, LATEST_PROTOCOL_VERSION,
SUPPORTED_PROTOCOL_VERSIONS,
};
pub const DEFAULT_REQUEST_TIMEOUT_MS: u64 = 60_000;
#[allow(clippy::unused_async)]
pub async fn log(
_level: types::protocol::LogLevel,
_message: &str,
_data: Option<serde_json::Value>,
) {
}