gproxy_protocol/claude/common/
mcp.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::{CacheControl, McpServerType};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
8#[cfg_attr(not(feature = "exhaustive"), 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 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
20 pub rest: serde_json::Map<String, serde_json::Value>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24#[non_exhaustive]
25pub enum McpToolsetType {
26 #[serde(rename = "mcp_toolset")]
27 McpToolset,
28}
29
30#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
31#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
32pub struct McpToolConfig {
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub defer_loading: Option<bool>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub enabled: Option<bool>,
37 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
38 pub rest: serde_json::Map<String, serde_json::Value>,
39}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
42#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
43pub struct McpServer {
44 pub name: String,
45 #[serde(rename = "type")]
46 pub type_: McpServerType,
47 pub url: String,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub authorization_token: Option<String>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub tool_configuration: Option<McpToolConfiguration>,
52 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
53 pub rest: serde_json::Map<String, serde_json::Value>,
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
57#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
58pub struct McpToolConfiguration {
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub allowed_tools: Option<Vec<String>>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub enabled: Option<bool>,
63 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
64 pub rest: serde_json::Map<String, serde_json::Value>,
65}