#![deny(missing_docs)]
pub mod auth;
pub mod capability;
pub mod debug;
pub mod error;
pub mod extension;
pub mod protocol;
pub mod protocol_version;
pub mod schema;
pub mod state;
pub mod types;
pub use capability::{
ClientCapabilities, ClientInfo, InitializeRequest, InitializeResult, PROTOCOL_VERSION,
SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerInfo, VersionNegotiationResult,
is_version_supported, negotiate_version, negotiate_version_detailed,
};
pub use error::{JsonRpcError, McpError, McpResultExt};
pub use protocol::{Message, Notification, ProgressToken, Request, RequestId, Response};
pub use protocol_version::ProtocolVersion;
pub use state::{Closing, Connected, Connection, Disconnected, Initializing, Ready};
pub mod prelude {
pub use serde::{Deserialize, Serialize};
pub use serde_json::json;
pub use crate::capability::{
ClientCapabilities, ClientInfo, InitializeRequest, InitializeResult, PROTOCOL_VERSION,
SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerInfo, VersionNegotiationResult,
is_version_supported, negotiate_version, negotiate_version_detailed,
};
pub use crate::error::{McpError, McpResultExt};
pub use crate::protocol::{Message, Notification, ProgressToken, Request, RequestId, Response};
pub use crate::protocol_version::ProtocolVersion;
pub use crate::schema::{Schema, SchemaBuilder, SchemaType};
pub use crate::state::{Closing, Connected, Connection, Disconnected, Initializing, Ready};
pub use crate::types::{
CallToolResult,
Content,
ContentAnnotations,
CreateMessageRequest,
CreateMessageResult,
ElicitAction,
ElicitRequest,
ElicitResult,
ElicitationSchema,
GetPromptResult,
ModelPreferences,
Prompt,
PromptArgument,
PromptMessage,
PromptOutput,
PropertySchema,
Resource,
ResourceContents,
ResourceTemplate,
Role,
SamplingMessage,
StopReason,
Task,
TaskError,
TaskId,
TaskProgress,
TaskStatus,
TaskSummary,
Tool,
ToolAnnotations,
ToolOutput,
};
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_prelude_imports() {
use crate::prelude::*;
let _tool = Tool::new("test");
let _caps = ServerCapabilities::new().with_tools();
let _conn: Connection<Disconnected> = Connection::new();
}
#[test]
fn test_protocol_version() {
assert_eq!(PROTOCOL_VERSION, "2025-11-25");
}
#[test]
fn test_error_context() {
use crate::error::McpResultExt;
fn might_fail() -> Result<(), McpError> {
Err(McpError::InternalMessage {
message: "something went wrong".to_string(),
})
}
let result = might_fail().context("while doing something important");
assert!(result.is_err());
let err = result.unwrap_err();
assert!(err.to_string().contains("while doing something important"));
}
}