turbomcp_protocol/types/
prompts.rs1use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8
9use super::{
10 content::Content,
11 core::{Cursor, Role},
12};
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct Prompt {
17 pub name: String,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub title: Option<String>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub description: Option<String>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub arguments: Option<Vec<PromptArgument>>,
31
32 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
34 pub meta: Option<HashMap<String, serde_json::Value>>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct PromptArgument {
40 pub name: String,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub title: Option<String>,
46
47 #[serde(skip_serializing_if = "Option::is_none")]
49 pub description: Option<String>,
50
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub required: Option<bool>,
54}
55
56pub type PromptInput = HashMap<String, serde_json::Value>;
58
59#[derive(Debug, Clone, Serialize, Deserialize, Default)]
61pub struct ListPromptsRequest {
62 #[serde(skip_serializing_if = "Option::is_none")]
66 pub cursor: Option<Cursor>,
67 #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
69 pub _meta: Option<serde_json::Value>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct ListPromptsResult {
75 pub prompts: Vec<Prompt>,
77 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
79 pub next_cursor: Option<Cursor>,
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub _meta: Option<serde_json::Value>,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct GetPromptRequest {
88 pub name: String,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub arguments: Option<PromptInput>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub _meta: Option<serde_json::Value>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct GetPromptResult {
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub description: Option<String>,
104 pub messages: Vec<PromptMessage>,
106 #[serde(skip_serializing_if = "Option::is_none")]
108 pub _meta: Option<serde_json::Value>,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct PromptMessage {
114 pub role: Role,
116 pub content: Content,
118}