Skip to main content

gproxy_protocol/protocol/claude/common/
mcp.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::{CacheControl, JsonObject, McpServerType};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
8#[non_exhaustive]
9pub struct McpToolset {
10    pub mcp_server_name: String,
11    #[serde(rename = "type")]
12    pub type_: McpToolsetType,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub cache_control: Option<CacheControl>,
15    #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
16    pub configs: BTreeMap<String, McpToolConfig>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub default_config: Option<McpToolConfig>,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
22#[non_exhaustive]
23pub enum McpToolsetType {
24    #[serde(rename = "mcp_toolset")]
25    McpToolset,
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
29#[non_exhaustive]
30pub struct McpToolConfig {
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub defer_loading: Option<bool>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub enabled: Option<bool>,
35    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
36    pub extra: JsonObject,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
40#[non_exhaustive]
41pub struct McpServer {
42    pub name: String,
43    #[serde(rename = "type")]
44    pub type_: McpServerType,
45    pub url: String,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub authorization_token: Option<String>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub tool_configuration: Option<McpToolConfiguration>,
50    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
51    pub extra: JsonObject,
52}
53
54#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
55#[non_exhaustive]
56pub struct McpToolConfiguration {
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub allowed_tools: Option<Vec<String>>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub enabled: Option<bool>,
61    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
62    pub extra: JsonObject,
63}