systemprompt_models/mcp/
deployment.rs1use 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}