# Prompts
从 MCP 服务器中列出并渲染 prompts
Prompts 是由服务器提供的可复用消息模板。一个 prompt 可以接收字符串值参数,并返回一系列可以输入到 LLM 对话中的 messages。
如果你对这个概念还不熟悉:可以把 prompt 理解为存储在服务器上的预先编写的聊天脚本(比如 “summarize” 或 “code review”)。你的 Client 可以先列出可用的脚本,然后将其中一个脚本渲染为实际的 messages(可以选择性地填充参数,比如 "language": "python")。
## 列出 prompt
查看可用的 prompt:
from dedalus_mcp.client import open_connection
async with open_connection("http://127.0.0.1:8000/mcp") as client:
prompts = await client.list_prompts()
for p in prompts.prompts:
print(f"{p.name}: {p.description}") # 打印 prompt 名称和描述
prompt 模式
每个 prompt 包含:
| Field | Type | Description |
|---|
name | str | prompt 标识符 |
description | str | None | prompt 的作用 |
arguments | list | None | 必填/可选参数 |
for p in prompts.prompts:
print(f"Name: {p.name}")
print(f"Description: {p.description}")
if p.arguments:
for arg in p.arguments:
required = "(必填)" if arg.required else "(可选)"
print(f" - {arg.name}: {arg.description} {required}")
获取 prompt
使用参数渲染 prompt:
result = await client.get_prompt("summarize", {"style": "brief"})
print(result.messages)
注意:模型上下文协议 (MCP) prompt 参数是字符串。如果某个服务器期望收到结构化输入(列表/字典),通常会要求你传入一个 JSON 字符串,并在服务端进行解析。
渲染后的 prompt 会返回一个 GetPromptResult:
| Field | Type | Description |
|---|
messages | list | 渲染后的消息序列 |
description | str | None | 可选描述 |
每条消息包含一个 role 和一个 content 块。许多 prompt 返回文本内容;有些可能返回非文本内容块。
from dedalus_mcp import types
result = await client.get_prompt("code-review", {"language": "python"})
for msg in result.messages:
content = msg.content
if isinstance(content, types.TextContent):
text = content.text
else:
text = f"<{content.type} content>"
print(f"[{msg.role}] {text}")
import asyncio
from dedalus_mcp.client import MCPClient
from dedalus_mcp import types
async def main():
client = await MCPClient.connect("http://127.0.0.1:8000/mcp")
try:
prompts = await client.list_prompts()
print("Available prompts:")
for p in prompts.prompts:
print(f" - {p.name}: {p.description}")
result = await client.get_prompt(
"explain-code",
{
"language": "python",
"code": "def fib(n): return n if n < 2 else fib(n-1) + fib(n-2)",
},
)
print("\nRendered prompt:")
for msg in result.messages:
if isinstance(msg.content, types.TextContent):
print(f"[{msg.role}] {msg.content.text}")
else:
print(f"[{msg.role}] <{msg.content.type} content>")
finally:
await client.close()
asyncio.run(main())
有些 prompt 不需要任何参数:
result = await client.get_prompt("greeting")
# 或显式传入:
result = await client.get_prompt("greeting", {})
from dedalus_mcp.client import open_connection
async with open_connection("http://127.0.0.1:8000/mcp") as client:
prompts = await client.list_prompts()
result = await client.get_prompt("analyze", {"data": "sample"})
Last modified on April 11, 2026