use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
pub struct McpConfig {
pub enabled: bool,
pub transport: String,
pub path: String,
pub require_auth: bool,
#[serde(default)]
pub include: Vec<String>,
#[serde(default)]
pub exclude: Vec<String>,
#[serde(default)]
pub read_only: bool,
#[serde(default)]
pub session_state: bool,
}
impl Default for McpConfig {
fn default() -> Self {
Self {
enabled: false,
transport: "http".to_string(),
path: "/mcp".to_string(),
require_auth: true,
include: Vec::new(),
exclude: Vec::new(),
read_only: false,
session_state: false,
}
}
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
pub struct ValidationConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_query_depth: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_query_complexity: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_response_bytes: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_page_size: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_offset: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_semi_additive_cells: Option<u64>,
}
impl ValidationConfig {
pub fn validate(&self) -> anyhow::Result<()> {
if self.max_offset == Some(0) {
anyhow::bail!(
"[validation] max_offset = 0 would refuse every offset page. Set the deepest \
offset clients may page to, or leave the key unset for no ceiling."
);
}
if self.max_semi_additive_cells == Some(0) {
anyhow::bail!(
"[validation] max_semi_additive_cells = 0 would refuse every aggregate over a \
semi-additive measure. Set the most cells such an aggregate may read, or leave \
the key unset for the default."
);
}
Ok(())
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
pub struct DebugConfig {
pub enabled: bool,
pub database_explain: bool,
pub expose_sql: bool,
}
impl Default for DebugConfig {
fn default() -> Self {
Self {
enabled: false,
database_explain: false,
expose_sql: true,
}
}
}