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