使用说明
mcp提示服务器
一个TypeScript MCP(模型上下文协议)服务器,将Claude Desktop连接到本地 prompts/ 文件夹。Claude可以直接列出、读取和保存提示文件,无需复制粘贴。
作为一个展示集成工程模式的组合项目构建:事件驱动架构、ETL管道、运行时验证和安全意识设计。
该项目是一个三个项目系列的一部分,旨在加深对Claude API和更广泛的人类生态系统的理解,包括MCP服务器、VS代码扩展和Claude API本身如何相互关联并协同工作。
这是什么
这是一个MCP服务器——Claude Desktop启动并通过stdin/stdout(stdio上的JSON-RPC)与之通信的本地进程。它公开了Claude在对话中随时可以调用的三个工具:
| 工具 | 它做什么 |
|---|---|
list_prompts |
列出所有 .txt 和 .md 文件在 prompts/ 文件夹 |
read_prompt |
读取并返回特定文件的内容 |
save_prompt |
将文本另存为新的时间戳 .txt 文件 |
为什么它存在
两个配套项目-- claude-prompt-reader 和 save-selected-text --通过VS Code中的文件事件触发Claude。这个项目采取了下一步:公开与Claude Desktop可以自主调用的MCP工具相同的提示工作流,而无需任何手动触发。
这三个项目共同构成了如何在堆栈的不同层构建AI相邻工具的完整图景:
| 项目 | 触发器 | 模式 |
|---|---|---|
claude-prompt-reader |
文件保存事件 | 事件驱动ETL |
save-selected-text |
右键选择 | 用户发起的ETL |
mcp-prompt-server |
克劳德自己的推理 | 自主工具使用 |
MCP架构的工作原理
MCP有两个方面:
克劳德桌面=客户端。 它在启动时连接到您的服务器,发现可用的工具,并根据对话决定何时调用它们。
此服务器=服务器。 它注册工具,等待stdio上的JSON-RPC请求,运行请求的逻辑,并返回结果。
You type in Claude Desktop
↓
Claude decides to call a tool
↓
Claude Desktop sends JSON-RPC request over stdio
↓
This server runs the tool and returns the result
↓
Claude uses the result to form its response
每个工具调用都是无状态的——服务器接收请求、执行工作并做出响应。没有会话状态,调用之间没有内存。
ETL模式
每个工具都遵循相同的提取→ 变换→ 企业数据管道中使用的负载模式:
list_prompts
- 摘录:阅读
prompts/目录 - 转换:过滤器
.txt和.md仅限文件 - 加载:以文本形式返回文件列表
read_prompt
- 提取:从磁盘读取特定文件
- 转换:清除文件名(目录遍历保护)
- 加载:以文本形式返回文件内容
save_prompt
- 提取:接收来自Claude的文本输入
- 转换:验证内容,生成ISO 8601时间戳
- 加载:将文件写入磁盘(成功写入模式)
安全设计
目录遍历保护 — read_prompt 使用以下命令从文件名中删除所有路径组件 path.basename() 在构建文件路径之前。恶意输入,如 ../../etc/passwd 被简化为 passwd,它将不存在于提示文件夹中。
写成功 — save_prompt 仅在所有验证通过后写入磁盘。在任何文件操作开始之前,空内容都会被拒绝。这反映了数据库写入中使用的事务完整性模式。
最小特权 --Claude Desktop需要明确的用户权限才能运行任何MCP服务器。每次新对话都需要用户重新启用切换。
技术栈
- TypeScript --严格模式,ES模块
@modelcontextprotocol/sdk--MCP服务器实现zod--运行时输入验证和TypeScript类型推断fs/path--用于文件操作的Node.js标准库- 摩卡+西农 --使用存根进行独立文件系统测试的单元测试
入门指南
先决条件
- Node.js 18+
- 已安装Claude Desktop
- Anthropic API密钥(用于Claude Desktop)
安装
git clone https://github.com/kaidez/mcp-prompt-server.git
cd mcp-prompt-server
npm install
npm run build
连接到克劳德桌面
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"mcp-prompt-server": {
"command": "node",
"args": ["/Users/YOUR_USERNAME/repos/mcp-prompt-server/dist/index.js"]
}
}
}
重新启动克劳德桌面。在新对话中,单击 + → 连接器→ 启用 mcp-prompt-server.
用法
连接后,在Claude Desktop中自然说话:
List my prompt files
Read the contents of test.txt
Save this as a new prompt: What makes a great integration engineer?
Claude将自动调用相应的工具。
项目结构
mcp-prompt-server/
├── src/
│ ├── index.ts # MCP server — all three tools
│ └── test/
│ └── suite/
│ └── index.test.ts # 9 unit tests (Mocha + Sinon)
├── prompts/ # Prompt files live here
│ └── test.txt
├── dist/ # Compiled output (git-ignored)
├── skills/
│ └── prompt-manager/
│ └── SKILL.md # Agent Skills layer
├── package.json
└── tsconfig.json
测试
9个单元测试,涵盖快乐路径、悲伤路径和保安:
npm test
| # | 测试 | 覆盖率 |
|---|---|---|
| 1 | 服务器名称和版本 | 标识 |
| 2 | list_prompts 返回文件 |
快乐路径 |
| 3 | list_prompts 返回空消息 |
悲伤路径 |
| 4 | list_prompts 过滤非.txt/.md文件 |
Guard |
| 5 | read_prompt 返回文件内容 |
快乐路径 |
| 6 | read_prompt 处理丢失的文件 |
悲伤的路径 |
| 7 | read_prompt 阻止目录遍历 |
安全 |
| 8 | save_prompt 写入文件并返回名称 |
快乐路径 |
| 9 | save_prompt 拒绝空内容 |
悲伤的路径 |
我接下来要添加什么
- Python端口 --使用重建的相同服务器
mcp开发包 - 对话历史 --将克劳德的回复与提示文件一起保存
update_prompt工具 --按名称编辑现有文件delete_prompt工具 --使用确认保护删除文件- 远程传输 --从stdio切换到Streamable HTTP以实现网络访问
配套项目
所有三个项目都是作为一个系列构建的,以更好地理解Claude API和Anthropic生态系统,特别是API、MCP协议和VS代码工具如何相互关联。
| 项目 | 直接使用Claude API | 说明 |
|---|---|---|
claude-prompt-reader |
✅ 是 | VS代码扩展名--手表 prompts/ 文件夹,将文件发送到 api.anthropic.com/v1/messages 关于保存 |
save-selected-text |
✅ 是 | VS代码扩展名--将突出显示的文本保存到 prompts/ 并通过右键单击发送到Claude API |
mcp-prompt-server (本项目) |
❌ 否 | MCP服务器--将提示文件公开为Claude Desktop通过stdio自主调用的工具 |
主要区别: 这两个VS Code扩展直接对以下对象进行HTTP调用 api.anthropic.com/v1/messages 使用API密钥。此MCP服务器不这样做-它通过stdio(JSON-RPC)与Claude Desktop通信,Claude Desktop在内部处理API层。理解这个边界——Claude API生活在哪里与MCP生活在哪里——是构建这个系列的核心经验之一。
为什么这种架构很重要
MCP将Claude从会话助手转变为可以与本地系统交互的自主代理。这里使用的stdio传输与语言服务器、编译器和构建工具中使用的IPC模式相同——经过实战考验的Unix基础设施被重新用于AI工具。
无状态、基于工具的设计直接映射到企业集成模式:每个工具都是一个离散的、可测试的单元,具有定义的输入、定义的输出,没有隐藏的副作用。这与您为REST端点、消息队列消费者或iPaaS(集成平台即服务)平台(如Workato或Boomi)中的工作流节点编写的合同相同。