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)]
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}