gproxy_protocol/protocol/claude/common/
mcp.rs1use 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}