Skip to main content

systemprompt_models/mcp/
deployment.rs

1use crate::ai::ToolModelConfig;
2use crate::auth::{JwtAudience, Permission};
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Serialize, Deserialize, Default)]
7pub struct ToolMetadata {
8    #[serde(default)]
9    pub terminal_on_success: bool,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub model_config: Option<ToolModelConfig>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct DeploymentConfig {
16    pub deployments: HashMap<String, Deployment>,
17    pub settings: Settings,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct Deployment {
22    pub binary: String,
23    pub package: Option<String>,
24    pub port: u16,
25    pub endpoint: String,
26    pub enabled: bool,
27    pub display_in_web: bool,
28    #[serde(default)]
29    pub dev_only: bool,
30    #[serde(default)]
31    pub schemas: Vec<SchemaDefinition>,
32    pub oauth: OAuthRequirement,
33    #[serde(default)]
34    pub tools: HashMap<String, ToolMetadata>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub model_config: Option<ToolModelConfig>,
37    #[serde(default)]
38    pub env_vars: Vec<String>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct SchemaDefinition {
43    pub file: String,
44    pub table: String,
45    pub required_columns: Vec<String>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct OAuthRequirement {
50    pub required: bool,
51    pub scopes: Vec<Permission>,
52    pub audience: JwtAudience,
53    pub client_id: Option<String>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct Settings {
58    pub auto_build: bool,
59    pub build_timeout: u64,
60    pub health_check_timeout: u64,
61    #[serde(default = "default_base_port")]
62    pub base_port: u16,
63    #[serde(default = "default_working_dir")]
64    pub working_dir: String,
65}
66
67const fn default_base_port() -> u16 {
68    5000
69}
70
71fn default_working_dir() -> String {
72    "/app".to_string()
73}