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