跳转到主要内容

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 包含:
FieldTypeDescription
namestrprompt 标识符
descriptionstr | Noneprompt 的作用
argumentslist | 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
FieldTypeDescription
messageslist渲染后的消息序列
descriptionstr | 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())

无参数 prompts

有些 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"})