sqlserver_mcp_catalog/core/
config_schema.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
14pub enum AuthMethod {
15 #[serde(rename = "sql_server")]
16 SqlServer,
17 #[serde(rename = "windows")]
18 Windows,
19 #[serde(rename = "azure_ad")]
20 AzureAd,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
24#[serde(rename_all = "lowercase")]
25pub enum Transport {
26 Stdio,
27 Http,
28}
29
30fn default_log_level() -> String {
31 "info".to_string()
32}
33fn default_rate_limit() -> u32 {
34 100
35}
36fn default_timeout_ms() -> u64 {
37 30_000
38}
39fn default_cache_size() -> u32 {
40 500
41}
42fn default_retry_attempts() -> u32 {
43 3
44}
45fn default_transport() -> Transport {
46 Transport::Stdio
47}
48fn default_host() -> String {
49 "127.0.0.1".to_string()
50}
51fn default_port() -> u16 {
52 3000
53}
54fn default_sql_port() -> u16 {
55 1433
56}
57fn default_pool_max_size() -> u32 {
58 10
59}
60fn default_trust_server_cert() -> bool {
61 true
62}
63
64fn default_api_version() -> String {
66 "2025".to_string()
67}
68#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct Config {
72 pub url: String,
78 pub auth_method: AuthMethod,
79 #[serde(default = "default_sql_port")]
80 pub sql_port: u16,
81 #[serde(default = "default_pool_max_size")]
84 pub pool_max_size: u32,
85 #[serde(default = "default_trust_server_cert")]
91 pub trust_server_cert: bool,
92 #[serde(default = "default_api_version")]
98 pub api_version: String,
99 #[serde(default = "default_log_level")]
100 pub log_level: String,
101 #[serde(default = "default_rate_limit")]
102 pub rate_limit: u32,
103 #[serde(default = "default_timeout_ms")]
104 pub timeout_ms: u64,
105 #[serde(default = "default_cache_size")]
106 pub cache_size: u32,
107 #[serde(default = "default_retry_attempts")]
108 pub retry_attempts: u32,
109 #[serde(default = "default_transport")]
110 pub transport: Transport,
111 #[serde(default = "default_host")]
112 pub host: String,
113 #[serde(default = "default_port")]
114 pub port: u16,
115 #[serde(default)]
116 pub cors_allow: Option<String>,
117}
118
119impl Config {
120 pub fn host_and_port(&self) -> (&str, u16) {
123 if let Some((host, port)) = self.url.rsplit_once(':')
124 && let Ok(port) = port.parse()
125 {
126 return (host, port);
127 }
128 (self.url.as_str(), self.sql_port)
129 }
130}