Skip to main content

vigil_types/
server.rs

1//! ServerProfile:一个 MCP server 或本地工具 server 的身份档案。
2
3use crate::principal::TrustLevel;
4use serde::{Deserialize, Serialize};
5
6/// 一个 MCP server 的身份档案 —— 启动命令、传输方式、信任等级、绑定的 sandbox profile。
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
8pub struct ServerProfile {
9    /// 唯一 id。
10    pub server_id: String,
11    /// 传输类型。
12    pub transport: TransportKind,
13    /// Stdio 启动时的 argv(完整命令);Http 时为 None。
14    pub command: Option<Vec<String>>,
15    /// Http 传输时的 URL;Stdio 时为 None。
16    pub url: Option<String>,
17    /// 首次登记时间(Unix epoch 秒)。
18    pub first_seen_at: i64,
19    /// Stdio 传输时:`sha256(argv)` 的十六进制;用于识别命令漂移。
20    pub command_hash: Option<String>,
21    /// 聚合后的工具描述符 hash;用于 I05 descriptor pinning。
22    pub descriptor_hash: Option<String>,
23    /// 信任等级。
24    pub trust_level: TrustLevel,
25    /// 绑定到某个 sandbox profile;None 表示继承默认最小权限。
26    pub sandbox_profile_id: Option<String>,
27}
28
29/// MCP 传输类型。
30#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
31#[non_exhaustive]
32#[serde(rename_all = "PascalCase")]
33pub enum TransportKind {
34    /// 本地子进程 stdio。
35    Stdio,
36    /// 远端 HTTP(Streamable HTTP / SSE)。
37    Http,
38}