opencode_sdk/types/
mcp.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct McpStatus {
10 #[serde(default)]
12 pub servers: Vec<McpServer>,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct McpServer {
19 pub name: String,
21 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub command: Option<String>,
24 #[serde(default)]
26 pub args: Vec<String>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub env: Option<HashMap<String, String>>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub status: Option<McpConnectionStatus>,
33 #[serde(default)]
35 pub tools: Vec<McpTool>,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub error: Option<String>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(rename_all = "kebab-case")]
44pub enum McpConnectionStatus {
45 Disconnected,
47 Connecting,
49 Connected,
51 Error,
53 #[serde(other)]
55 Unknown,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct McpTool {
62 pub name: String,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub description: Option<String>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub input_schema: Option<serde_json::Value>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
74#[serde(rename_all = "camelCase")]
75pub struct McpAddRequest {
76 pub name: String,
78 pub command: String,
80 #[serde(default)]
82 pub args: Vec<String>,
83 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub env: Option<HashMap<String, String>>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
90#[serde(rename_all = "camelCase")]
91pub struct McpAuthStartRequest {
92 #[serde(default, skip_serializing_if = "Option::is_none")]
94 pub callback_url: Option<String>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
99#[serde(rename_all = "camelCase")]
100pub struct McpAuthStartResponse {
101 pub url: String,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107#[serde(rename_all = "camelCase")]
108pub struct McpAuthCallbackRequest {
109 pub code: String,
111 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub state: Option<String>,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize)]
118#[serde(rename_all = "camelCase")]
119pub struct McpAuthenticateRequest {
120 pub token: String,
122}