httpmcp_rust/handlers/prompts.rs
1use crate::context::RequestContext;
2use crate::error::Result;
3use crate::protocol::{Prompt, PromptMessage};
4use async_trait::async_trait;
5use std::collections::HashMap;
6
7/// Trait for implementing prompt providers
8///
9/// Implement this trait to provide prompts (templates, instructions) to MCP clients.
10/// All methods receive a RequestContext with access to headers and request metadata.
11#[async_trait]
12pub trait PromptProvider: Send + Sync {
13 /// List available prompts
14 ///
15 /// # Arguments
16 /// * `cursor` - Optional pagination cursor
17 /// * `ctx` - Request context with headers and metadata
18 ///
19 /// # Returns
20 /// A tuple of (prompts, next_cursor)
21 async fn list_prompts(
22 &self,
23 cursor: Option<&str>,
24 ctx: &RequestContext,
25 ) -> Result<(Vec<Prompt>, Option<String>)>;
26
27 /// Get a specific prompt with arguments
28 ///
29 /// # Arguments
30 /// * `name` - The name of the prompt to get
31 /// * `arguments` - Prompt arguments to populate the template
32 /// * `ctx` - Request context with headers and metadata
33 ///
34 /// # Returns
35 /// A tuple of (description, messages)
36 async fn get_prompt(
37 &self,
38 name: &str,
39 arguments: Option<HashMap<String, String>>,
40 ctx: &RequestContext,
41 ) -> Result<(Option<String>, Vec<PromptMessage>)>;
42}