context_server: Add missing types for MCP spec to protocol 2024-11-05 (#21498)

This commit syncs missing types for the mcp spec 2024-11-05.

Release Notes:

- N/A
This commit is contained in:
David Soria Parra 2024-12-04 15:45:25 +00:00 committed by GitHub
parent d8732adfb2
commit 0ee99c6d9c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 79 additions and 5 deletions

View file

@ -164,7 +164,7 @@ impl SlashCommand for ContextServerSlashCommand {
.messages .messages
.into_iter() .into_iter()
.filter_map(|msg| match msg.content { .filter_map(|msg| match msg.content {
context_server::types::MessageContent::Text { text } => Some(text), context_server::types::MessageContent::Text { text, .. } => Some(text),
_ => None, _ => None,
}) })
.collect::<Vec<String>>() .collect::<Vec<String>>()

View file

@ -167,11 +167,18 @@ pub struct InitializeResponse {
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct ResourcesReadResponse { pub struct ResourcesReadResponse {
pub contents: Vec<ResourceContents>, pub contents: Vec<ResourceContentsType>,
#[serde(rename = "_meta", skip_serializing_if = "Option::is_none")] #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
pub meta: Option<HashMap<String, serde_json::Value>>, pub meta: Option<HashMap<String, serde_json::Value>>,
} }
#[derive(Debug, Deserialize)]
#[serde(untagged)]
pub enum ResourceContentsType {
Text(TextResourceContents),
Blob(BlobResourceContents),
}
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct ResourcesListResponse { pub struct ResourcesListResponse {
@ -181,6 +188,7 @@ pub struct ResourcesListResponse {
#[serde(rename = "_meta", skip_serializing_if = "Option::is_none")] #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
pub meta: Option<HashMap<String, serde_json::Value>>, pub meta: Option<HashMap<String, serde_json::Value>>,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct SamplingMessage { pub struct SamplingMessage {
@ -188,6 +196,35 @@ pub struct SamplingMessage {
pub content: MessageContent, pub content: MessageContent,
} }
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateMessageRequest {
pub messages: Vec<SamplingMessage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_preferences: Option<ModelPreferences>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_prompt: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_context: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f64>,
pub max_tokens: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_sequences: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateMessageResult {
pub role: Role,
pub content: MessageContent,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_reason: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct PromptMessage { pub struct PromptMessage {
@ -206,11 +243,33 @@ pub enum Role {
#[serde(tag = "type")] #[serde(tag = "type")]
pub enum MessageContent { pub enum MessageContent {
#[serde(rename = "text")] #[serde(rename = "text")]
Text { text: String }, Text {
text: String,
#[serde(skip_serializing_if = "Option::is_none")]
annotations: Option<MessageAnnotations>,
},
#[serde(rename = "image")] #[serde(rename = "image")]
Image { data: String, mime_type: String }, Image {
data: String,
mime_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
annotations: Option<MessageAnnotations>,
},
#[serde(rename = "resource")] #[serde(rename = "resource")]
Resource { resource: ResourceContents }, Resource {
resource: ResourceContents,
#[serde(skip_serializing_if = "Option::is_none")]
annotations: Option<MessageAnnotations>,
},
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MessageAnnotations {
#[serde(skip_serializing_if = "Option::is_none")]
pub audience: Option<Vec<Role>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<f64>,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
@ -460,6 +519,11 @@ pub enum ClientNotification {
Initialized, Initialized,
Progress(ProgressParams), Progress(ProgressParams),
RootsListChanged, RootsListChanged,
Cancelled {
request_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
reason: Option<String>,
},
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
@ -532,6 +596,16 @@ pub struct ListToolsResponse {
pub meta: Option<HashMap<String, serde_json::Value>>, pub meta: Option<HashMap<String, serde_json::Value>>,
} }
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListResourceTemplatesResponse {
pub resource_templates: Vec<ResourceTemplate>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<String>,
#[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
pub meta: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct ListRootsResponse { pub struct ListRootsResponse {