Skip to main content
Version: 1.1.0

Prompts

Prompts allow the client to request predefined prompt templates from your server.

Handler Methodsโ€‹

async fn handle_list_prompts_request(
&self, _params: Option<PaginatedRequestParams>, _runtime: Arc<dyn McpServer>,
) -> Result<ListPromptsResult, RpcError> {
Ok(ListPromptsResult {
prompts: vec![Prompt {
name: "greeting".into(),
description: Some("A friendly greeting".into()),
title: None,
arguments: vec![PromptArgument {
name: "name".into(),
description: Some("Who to greet".into()),
required: Some(true),
title: None,
}],
icons: vec![],
meta: None,
}],
meta: None, next_cursor: None,
})
}

async fn handle_get_prompt_request(
&self, params: GetPromptRequestParams, _runtime: Arc<dyn McpServer>,
) -> Result<GetPromptResult, RpcError> {
if params.name == "greeting" {
let name = params.arguments.and_then(|a| a.get("name").cloned())
.unwrap_or("world".into());
Ok(GetPromptResult {
description: None,
messages: vec![PromptMessage {
role: Role::User,
content: ContentBlock::TextContent(TextContent::new(
format!("Hello, {name}!"),
None,
None,
)),
}],
meta: None,
})
} else {
Err(RpcError::invalid_params().with_message("unknown prompt"))
}
}

Add the prompts capability to ServerCapabilities in your InitializeResult (see Quickstart for the full setup):

capabilities: ServerCapabilities {
prompts: Some(ServerCapabilitiesPrompts::default()),
..Default::default()
},