模型上下文协议演示

一个基于.NET和官方.NET MCP SDK的最小端到端演示项目,展示如何通过MCP协议提供、发现和使用LLM提示,并通过PromptLoader进行高级提示管理。

  • by dljones555
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 dljones555/MinimalMcpDemo

使用说明

#最小值cpdemo🚀

一个最小的端到端演示 模型上下文协议(MCP) 使用。NET与官方 .NET MCP SDK该项目演示了如何通过MCP协议提供、发现和使用LLM提示,并通过PromptLoader进行高级提示管理。


🏗️ 项目结构

  • McpPromptServer:
    一个暴露提示文件的最小MCP服务器(*.prompt.md 以及更多)通过使用MCP协议的HTTP/SSE。

    • PromptLoader集成: 高级提示管理、基于文件夹的组织(根)、提示链接、版本控制和过滤。
    • 资源和根支持: 提示按根(顶级文件夹)分组,并作为MCP资源公开,以便于发现和过滤。
    • 列出可用的提示和资源。
    • 使用流畅的API根据请求提供提示内容。
  • McpPromptClient:
    连接到MCP服务器、列出可用提示/资源、获取提示内容并使用这些提示与LLM端点(例如Azure OpenAI)交互的控制台客户端。

    • 支持根/资源选择和提示过滤。
  • PromptLoader:
    用于加载、组织和编写提示的可重用库。

    • 流利的API: 轻松从文件夹/文件加载提示,组合/链接提示,并以可读的方式应用配置:

            var ctx = await PromptContext
                .FromFolder()
                .WithConfig(config)
                .LoadAsync();

            string combined = ctx.Get("Sales").CombineWithRoot().AsString();
  • 可通过以下方式配置 appsettings.json
  • 支持即时版本控制(使用Git版本文件)、链接和多格式(Markdown、YAML、Jinja等)。

📦 关键技术


📝 用法

1.启动MCP提示服务器

.net运行--项目McpPromptServer

提示从 Prompts/ 目录(或中配置的 appsettings.json).

2.设置您的LLM API密钥

设置 GH_TOKEN 您的LLM提供商API密钥的环境变量(例如Azure OpenAI):

  • Windows(cmd): 设置GH_TOKEN=your_api_key
  • Windows(PowerShell): $env:GH_TOKEN=“your_api_key”
  • Linux/macOS: 导出GH_TOKEN=your_api_key

3.运行客户端

.net运行--项目McpPromptClient

  • 使用 /resources 查看可用的提示根/资源。
  • 使用 /root [name] 选择一个根。
  • 使用 /listprompts 查看当前根目录中的可用提示。
  • 使用 /getprompt [name] 获取提示。
  • 键入您的消息,使用所选提示与LLM聊天。
  • 类型 /exit 退出。

📂 提示格式和配置

提示可以是Markdown(*.prompt.md)、纯文本、YAML、Jinja等。把它们放在 Prompts/ 或 PromptSets/ 目录,或在中配置文件夹 appsettings.json.

示例 appsettings.json PromptLoader部分:

"PromptLoader": {
  "PromptListType": "named",
  "PromptList": ["system", "instructions", "examples", "groundings", "guardrails", "output"],
  "ConstrainPromptList": true,
  "PromptsFolder": "Prompts",
  "PromptSetFolder": "PromptSets",
  "SupportedPromptExtensions": [".txt", ".prompt", ".yml", ".jinja", ".jinja2", ".prompt.md", ".md"],
  "PromptSeparator": "\n{filename}:\n---\n",
  "CascadeOverride": true
  • 提示列表类型: 如何解释提示列表:named、numeric、none。
  • 提示列表: 加载/组合的特定命名提示
  • 约束提示列表: 布尔值。仅在列表中加载提示
  • PromptSet文件夹/Prompts文件夹: 在哪里可以找到提示集/文件
  • 支持PrompTextensions: 要加载的文件类型
  • 提示分隔符: 组合时如何加入提示
  • 级联覆盖 : 更深的文件夹是否以相同的名称覆盖根提示(例如系统提示)

🤝 参考文献


✨ 为什么?

对于任何希望:

  • 构建或集成符合MCP的提示服务器/客户端。
  • 在中尝试高级提示管理、根/资源和LLM编排。网。
  • 使用或扩展流畅的API进行提示操作。
  • 了解MCP和提示操作生态系统。