提示记录器

一个最小化的模型上下文协议(MCP)服务器,允许MCP感知客户端(如支持MCP的VS Code Copilot Chat)将提示持久化到Git仓库中作为Markdown文件(带有YAML前置元数据)。每次保存都会创建一个新文件,提交并推送到配置的远程仓库。

  • by alexniklev
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 alexniklev/prompt-logger

使用说明

提示记录器——MCP服务器

一个最小的模型上下文协议(MCP)服务器,允许支持MCP的客户端(例如支持MCP的VS Code Copilot Chat)将提示作为Markdown文件(带YAML frontmatter)持久化到Git存储库中。每次保存都会创建一个新文件,提交并推送到配置的远程。

当前作用域:单个工具(SavePrompt)。检索/列出是存根或未来的路线图项目。

为什么

在正常的Git工作流程中,将有趣的提示/对话捕获为不可变的、版本化的工件,以便它们可以:

  • 已审核(历史、差异)
  • 已审核并标记
  • 跨会话/团队成员重用
  • 由其他自动化处理(索引、分析、嵌入管道)

功能(现已实现)

  • 将提示保存到Git存储库中(本地+推送)
  • 使用时间戳+slug自动生成文件名
  • YAML frontmatter created_at (UTC ISO 8601)
  • 最小、依赖性轻的代码路径
  • 运行MCP stdio传输

路线图/计划

  • 添加元数据注入(作者、标签、模型、会话id)
  • 可选延迟推送(切换即时推送与仅本地推送)
  • 列表/搜索提示工具
  • 获取单个提示工具(实际文件读取)
  • 尺寸限制(MAX_PROMPT_SIZE)
  • Git作者身份环境变量
  • 可选分支定位
  • 稳健的错误表面(JSON结构化工具输出)

文件布局

保存的提示示例(由当前实现生成):

---
created_at: 2025-01-05T14:22:33.1234567Z
---

What is the weather in Sofia tomorrow?

文件名格式

prompt-YYYYMMDD_HHmms-<optional-slug>.md

  • YYYYMMDD_HHmms =UTC时间戳(可排序,毫秒精度)
  • <optional-slug> =提示的第一行非空行,小写,修剪,消毒(字母数字)+ - / _,最多40个字符)
  • 例子: prompt-20250105_142233512-what-is-the-weather-in-sofia.md

暴露的工具(MCP)

工具 说明 参数
SavePrompt 将提示文本保存到仓库,提交,推送。返回路径+提交信息(今天提交SHA占位符)。 prompt (字符串,必填)
GetPrompt 占位符(返回一个存根字符串)。 prompt (字符串)

SavePrompt返回形状(当前字符串形式)

Saved: prompts/prompt-20250105_142233512-example.md
Commit: committed
Pushed: True

如果失败:

Error: <reason>

(计划:通过工具API返回结构化JSON。)

环境变量(当前支持)

变量 目的 默认值
REPO_PATH 要写入的现有Git工作副本的路径。 当前工作目录
PROMPTS_FOLDER 用于存储提示文件的目录(相对于repo根目录)。 prompts

路线图中提到的其他变量(作者身份、推送控制、大小限制)尚未实现,此处有意省略。

Git远程/身份验证

代码假定repo位于 REPO_PATH 已经配置了远程和适当的凭据,可用于 git (SSH代理、凭证管理器等)。它只是运行:

git pull
git add <file>
git commit -m "Add prompt <filename>"
git push

快速开始

  1. 准备Git仓库(现有的或新的):
    git init prompt-archive
    cd prompt-archive
    git remote add origin <your-remote>
    git pull origin main || true
    
  2. 克隆此项目(或在工作区中添加为工具服务)。
  3. (可选)设置环境变量:
    set REPO_PATH=path\to\prompt-archive
    set PROMPTS_FOLDER=prompts
    
  4. 运行MCP服务器:
    dotnet run --project src/PromptLoggerMcpServer
    
  5. 配置 .vscode/mcp.json (支持MCP的VS代码):
    {
      "servers": {
        "PromptLoggerMcpServer": {
          "type": "stdio",
          "command": "dotnet",
          "args": [
            "run",
            "--project",
            "src/PromptLoggerMcpServer"
          ],
          "env": {
            "REPO_PATH": "C:/dev/prompt-archive"
          }
        }
      }
    }
    
  6. 在Copilot Chat(或另一个MCP客户端)中,调用该工具:
    /tool PromptLoggerMcpServer.SavePrompt prompt="What is the weather in Sofia tomorrow?"
    
  7. 检查回购:
    git log --oneline -1
    ls prompts/
    

错误处理

典型故障原因:

  • REPO_PATH 不是Git仓库(缺失 .git 目录)
  • 空提示文本
  • Git命令失败(网络/身份验证/非快进)

错误以简单字符串的形式返回,以 Error:.

限制/注意事项

  • 总是立即推送(还不能选择退出)
  • 无结构化JSON响应
  • 无重复数据删除/哈希(每次调用=新文件)
  • 时间戳之外没有元数据丰富
  • GetPrompt 是一个存根
  • 没有并发协调(同时写入可能会竞争,但文件名使用毫秒精度;在极端并行的情况下仍然可能)

发布说明

1.0.0(初始)

  • 初始MCP服务器脚手架
  • SavePrompt 具有git pull/add/commit/push工作流的工具
  • 时间戳+slug文件名策略
  • YAML frontmatter created_at
  • 基本错误消息
  • 存根 GetPrompt 工具

发展

dotnet build
dotnet run --project src/PromptLoggerMcpServer

贡献

欢迎发布问题/PR。重点领域:元数据、检索工具、结构化输出、测试。

许可证

MIT(如果存在,请参阅许可证;否则在公开分发之前添加一个)。

参考文献

  • 模型上下文协议:https://modelcontextprotocol.io/
  • 协议规范:https://spec.modelcontextprotocol.io/
  • VS代码MCP服务器指南:https://code.visualstudio.com/docs/copilot/chat/mcp-servers
  • NuGet MCP指南:https://aka.ms/nuget/mcp/guide

未来的改进将在问题跟踪器中跟踪。欢迎提出建议。