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";
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(untagged)]
14pub enum RequestId {
15 String(String),
16 Number(i64),
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize, Default)]
21pub struct ClientCapabilities {
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub roots: Option<RootCapability>,
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub sampling: Option<Value>,
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub experimental: Option<Value>,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, Default)]
35pub struct ServerCapabilities {
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub prompts: Option<FeatureCapability>,
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub resources: Option<ResourceCapability>,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub tools: Option<FeatureCapability>,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub logging: Option<Value>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub experimental: Option<Value>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct RootCapability {
56 #[serde(default)]
58 pub list_changed: bool,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct ResourceCapability {
64 #[serde(default)]
66 pub subscribe: bool,
67 #[serde(default)]
69 pub list_changed: bool,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct FeatureCapability {
75 #[serde(default)]
77 pub list_changed: bool,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct ImplementationInfo {
83 pub name: String,
85 pub version: String,
87}
88
89#[derive(Debug, Clone, Copy, PartialEq, Eq)]
91pub enum Role {
92 Host,
94 Client,
96 Server,
98}