mcprotocol_rs/protocol/
mod.rs

1pub mod message;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6pub use message::*;
7
8/// Current protocol version
9pub const PROTOCOL_VERSION: &str = "2024-11-05";
10pub const JSONRPC_VERSION: &str = "2.0";
11
12/// Represents a unique identifier for JSON-RPC requests
13#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14#[serde(untagged)]
15pub enum RequestId {
16    String(String),
17    Number(i64),
18}
19
20/// Client capabilities
21#[derive(Debug, Clone, Serialize, Deserialize, Default)]
22pub struct ClientCapabilities {
23    /// Root directory capabilities
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub roots: Option<RootCapability>,
26    /// Sampling capabilities
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub sampling: Option<Value>,
29    /// Experimental features
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub experimental: Option<Value>,
32}
33
34/// Server capabilities
35#[derive(Debug, Clone, Serialize, Deserialize, Default)]
36pub struct ServerCapabilities {
37    /// Prompt capabilities
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub prompts: Option<FeatureCapability>,
40    /// Resource capabilities
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub resources: Option<ResourceCapability>,
43    /// Tool capabilities
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub tools: Option<FeatureCapability>,
46    /// Logging capabilities
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub logging: Option<Value>,
49    /// Experimental features
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub experimental: Option<Value>,
52}
53
54/// Root directory capability
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct RootCapability {
57    /// Support for list change notifications
58    #[serde(default)]
59    pub list_changed: bool,
60}
61
62/// Resource capability
63#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct ResourceCapability {
65    /// Support for subscribing to changes
66    #[serde(default)]
67    pub subscribe: bool,
68    /// Support for list change notifications
69    #[serde(default)]
70    pub list_changed: bool,
71}
72
73/// Feature capability with list change support
74#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct FeatureCapability {
76    /// Support for list change notifications
77    #[serde(default)]
78    pub list_changed: bool,
79}
80
81/// Implementation information
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct ImplementationInfo {
84    /// Implementation name
85    pub name: String,
86    /// Implementation version
87    pub version: String,
88}
89
90/// Represents the role of an MCP participant
91#[derive(Debug, Clone, Copy, PartialEq, Eq)]
92pub enum Role {
93    /// A host application that initiates connections
94    Host,
95    /// A connector within the host application
96    Client,
97    /// A service that provides context and capabilities
98    Server,
99}