1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(tag = "type", rename_all = "snake_case")]
6pub enum McpServerConfig {
7 Stdio(McpStdioServerConfig),
8 Sse(McpSseServerConfig),
9 Http(McpHttpServerConfig),
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct McpStdioServerConfig {
15 pub command: String,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub args: Option<Vec<String>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub env: Option<std::collections::HashMap<String, String>>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct McpSseServerConfig {
25 pub url: String,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub headers: Option<std::collections::HashMap<String, String>>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct McpHttpServerConfig {
33 pub url: String,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub headers: Option<std::collections::HashMap<String, String>>,
36}