- Client 通过
prompts/list发现 prompts(每个 prompt 可以包含arguments和元数据)。 - Client 通过携带字符串值
arguments的prompts/get渲染一个 prompt。 - 服务器执行你的 prompt 渲染器。
- 服务器返回一个
GetPromptResult,其中包含messages(以及可选的description),具体格式遵循模型上下文协议 (MCP) 规范。
@prompt(...) 定义 prompts,并通过 server.collect(...)(或在 with server.binding(): ... 中)注册它们。
装饰器签名
prompt(...):prompt(name: str, *, description=None, title=None, arguments=None, icons=None, meta=None)
fn(arguments: dict[str, str] | None)→ 返回 messages / 映射 /GetPromptResult/None
基础 prompt
description 用于告诉 Client/LLM 这个 prompt 的用途。arguments=[...] 定义了 Client 应该向 prompts/get 传递哪些内容。
参数(必填 vs 可选)
arguments=[...] 中将参数标记为 required=True 时,才会将这些参数视为必填。
INVALID_PARAMS 的模型上下文协议 (MCP) 错误。
复杂参数值(列表/字典)
返回格式
- messages 的列表/可迭代对象,其中每一项可以是:
(role, content)元组- 形如
{"role": "...", "content": ...}的映射 PromptMessage实例
- 具有显式控制的 映射:
- 必需:
"messages" - 可选:
"description"
- 必需:
GetPromptResultNone(不会生成任何消息)
str(Dedalus 会抛出 TypeError,从而确保你始终提供 role + content)。
显式控制(映射)
消息内容
content,你可以使用:
- 一个
str(会自动转换为文本内容) - 一个完整的内容块映射对象(例如
{"type": "text", "text": "..."}) - 来自
dedalus_mcp.types的内容块实例(例如TextContent、ImageContent等)
异步 prompt
async def。
装饰器选项
上下文访问
get_context() 访问上下文(用于日志记录、进度跟踪等)。
注意:get_context() 只能在活动的 MCP 请求处理器内部使用;在请求之外调用会引发 LookupError 异常。
测试
prompts/get):