提示记录器——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-.md
YYYYMMDD_HHmms=UTC时间戳(可排序,毫秒精度)- `
=提示的第一行非空行,小写,修剪,消毒(字母数字)+-/_`,最多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: (计划:通过工具API返回结构化JSON。)
环境变量(当前支持)
| 变量 | 目的 | 默认值 |
|---|---|---|
REPO_PATH | 要写入的现有Git工作副本的路径。 | 当前工作目录 |
PROMPTS_FOLDER | 用于存储提示文件的目录(相对于repo根目录)。 | prompts |
路线图中提到的其他变量(作者身份、推送控制、大小限制)尚未实现,此处有意省略。
Git远程/身份验证
代码假定repo位于 REPO_PATH 已经配置了远程和适当的凭据,可用于 git (SSH代理、凭证管理器等)。它只是运行:
git pull
git add
git commit -m "Add prompt "
git push快速开始
- 准备Git仓库(现有的或新的):
git init prompt-archive
cd prompt-archive
git remote add origin
git pull origin main || true- 克隆此项目(或在工作区中添加为工具服务)。
- (可选)设置环境变量:
set REPO_PATH=path\to\prompt-archive
set PROMPTS_FOLDER=prompts- 运行MCP服务器:
dotnet run --project src/PromptLoggerMcpServer- 配置
.vscode/mcp.json(支持MCP的VS代码):
{
"servers": {
"PromptLoggerMcpServer": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"src/PromptLoggerMcpServer"
],
"env": {
"REPO_PATH": "C:/dev/prompt-archive"
}
}
}
}- 在Copilot Chat(或另一个MCP客户端)中,调用该工具:
/tool PromptLoggerMcpServer.SavePrompt prompt="What is the weather in Sofia tomorrow?"- 检查回购:
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
______________________________________________________________________
未来的改进将在问题跟踪器中跟踪。欢迎提出建议。
