mcprotocol_rs/protocol/
mod.rs1pub mod message;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6pub use message::*;
7
8pub const PROTOCOL_VERSION: &str = "2024-11-05";
10pub const JSONRPC_VERSION: &str = "2.0";
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14#[serde(untagged)]
15pub enum RequestId {
16 String(String),
17 Number(i64),
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize, Default)]
22pub struct ClientCapabilities {
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub roots: Option<RootCapability>,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub sampling: Option<Value>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub experimental: Option<Value>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, Default)]
36pub struct ServerCapabilities {
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub prompts: Option<FeatureCapability>,
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub resources: Option<ResourceCapability>,
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub tools: Option<FeatureCapability>,
46 #[serde(skip_serializing_if = "Option::is_none")]
48 pub logging: Option<Value>,
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub experimental: Option<Value>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct RootCapability {
57 #[serde(default)]
59 pub list_changed: bool,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct ResourceCapability {
65 #[serde(default)]
67 pub subscribe: bool,
68 #[serde(default)]
70 pub list_changed: bool,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct FeatureCapability {
76 #[serde(default)]
78 pub list_changed: bool,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct ImplementationInfo {
84 pub name: String,
86 pub version: String,
88}
89
90#[derive(Debug, Clone, Copy, PartialEq, Eq)]
92pub enum Role {
93 Host,
95 Client,
97 Server,
99}