async_openai/types/
mcp.rs1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::error::OpenAIError;
5
6#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
7#[serde(rename_all = "snake_case")]
8pub enum McpToolConnectorId {
9 ConnectorDropbox,
10 ConnectorGmail,
11 ConnectorGooglecalendar,
12 ConnectorGoogledrive,
13 ConnectorMicrosoftteams,
14 ConnectorOutlookcalendar,
15 ConnectorOutlookemail,
16 ConnectorSharepoint,
17}
18
19#[derive(Debug, Serialize, Deserialize, Clone, Builder, PartialEq, Default)]
20#[builder(
21 name = "MCPToolArgs",
22 pattern = "mutable",
23 setter(into, strip_option),
24 default
25)]
26#[builder(build_fn(error = "OpenAIError"))]
27pub struct MCPTool {
28 pub server_label: String,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub allowed_tools: Option<MCPToolAllowedTools>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
39 pub authorization: Option<String>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
54 pub connector_id: Option<McpToolConnectorId>,
55
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub headers: Option<serde_json::Value>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub require_approval: Option<MCPToolRequireApproval>,
63
64 #[serde(skip_serializing_if = "Option::is_none")]
66 pub server_description: Option<String>,
67
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub server_url: Option<String>,
71}
72
73#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
74#[serde(untagged)]
75pub enum MCPToolAllowedTools {
76 List(Vec<String>),
78 Filter(MCPToolFilter),
80}
81
82#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
83pub struct MCPToolFilter {
84 #[serde(skip_serializing_if = "Option::is_none")]
88 pub read_only: Option<bool>,
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub tool_names: Option<Vec<String>>,
92}
93
94#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
96#[serde(untagged)]
97pub enum MCPToolRequireApproval {
98 Filter(MCPToolApprovalFilter),
102 ApprovalSetting(MCPToolApprovalSetting),
106}
107
108#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
109#[serde(rename_all = "lowercase")]
110pub enum MCPToolApprovalSetting {
111 Always,
112 Never,
113}
114
115#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
116pub struct MCPToolApprovalFilter {
117 #[serde(skip_serializing_if = "Option::is_none")]
119 pub always: Option<MCPToolFilter>,
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub never: Option<MCPToolFilter>,
123}
124
125#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
126pub struct MCPListToolsTool {
127 pub input_schema: serde_json::Value,
129 pub name: String,
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub annotations: Option<serde_json::Value>,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 pub description: Option<String>,
137}