prompt-discovery-mcp
Version:
基于Nacos的动态提示词MCP服务器,支持智能推荐和实时热更新
274 lines (211 loc) • 12.4 kB
Markdown
# PromptDiscovery:基于 Nacos 的动态提示词 MCP 服务器
## 你是否也曾遇到这些痛点?
- 团队里积累了大量优质Prompt,但难以共享和管理,散落在各自的文档或笔记里。
- 每次想用某个Prompt,都需要费力地从文档库中搜索、复制、粘贴,效率低下。
- 业务需求变化快,Prompt需要频繁更新,但每次更新都得修改代码、重启服务,流程繁琐。
- 静态的Prompt无法满足动态需求,更无法根据使用情况进行智能推荐和排序。
如果这些问题让你感同身受,那么 `PromptDiscovery` 正是你需要的解决方案!
借助 **Nacos** 作为动态配置中心,将您的Prompt资产提升到了全新的高度:**一个可集中管理、动态更新、智能推荐的“提示词即服务(Prompt as a Service)”平台**。
## PromptDiscovery 的神奇效果
- **告别手动管理**:所有Prompt在Nacos配置中心统一管理,团队成员可以像维护配置一样轻松维护Prompt。
- **动态热更新**:在Nacos中修改Prompt后,服务**无需重启**即可实时生效。无论是新增、修改还是删除,所有连接的客户端(如Cursor、Raycast)都能立刻使用最新的Prompt。
- **自然语言调用**:通过自然语言对话,AI能自动理解你的意图,并从Nacos中发现最匹配的Prompt来执行任务。
- **智能推荐与排序**:内置强大的推荐算法,能根据你的编码上下文、历史使用频率和最近使用情况,智能推荐最相关的Prompt。
- **高可用保障**:集成了完善的本地缓存和断线重连机制。即使Nacos服务暂时不可用,依然能使用缓存的Prompt,保障开发流程不中断。
---
## 核心工作流:动态配置的实现
下图展示了 `PromptDiscovery` 如何与 Nacos 协作,实现提示词的动态管理和实时更新。
```mermaid
graph TD
subgraph "客户端 (e.g., Cursor)"
User[开发者]
end
subgraph "PromptDiscovery 服务"
Server[MCP Server]
NacosService[NacosService]
Cache[内存/本地缓存]
end
subgraph "配置中心"
Admin[管理员]
Nacos[Nacos Server]
end
%% 流程一:工具调用
User -- "1. 调用工具<br/>(e.g., searchPrompts)" --> Server
Server -- "2. 转发请求" --> NacosService
NacosService -- "3. 从缓存读取Prompts" --> Cache
Cache -- "4. 返回结果" --> NacosService
NacosService -- "5. 返回结果" --> Server
Server -- "6. 响应用户" --> User
%% 流程二:动态更新
Admin -- "A. 在Nacos后台更新配置" --> Nacos
Nacos -- "B. 推送配置变更" --> NacosService
NacosService -- "C. 监听器接收变更<br/>并更新缓存" --> Cache
style Admin fill:#EF8B4D,stroke:#333,stroke-width:2px
style User fill:#3460F3,stroke:#333,stroke-width:2px
```
**工作流解释:**
1. **工具调用流程 (左侧):**
* 开发者在Cursor等客户端中调用一个工具 (1)。
* MCP服务器接收请求并交由 `NacosService` 处理 (2)。
* `NacosService` 直接从内存或本地文件缓存中快速读取所有Prompt数据 (3, 4)。
* 处理完毕后,将结果返回给客户端 (5, 6)。**此过程不直接请求Nacos**,保证了高并发和低延迟。
2. **动态更新流程 (右侧):**
* 当管理员在Nacos控制台修改并发布Prompt配置时 (A),Nacos会主动推送一个变更通知 (B)。
* `NacosService` 内置的监听器会捕获到这个通知。
* 监听到变更后,`NacosService`会立刻重新从Nacos拉取最新的配置,并更新其管理的**内存及本地文件缓存** (C)。
* 这个过程对用户是完全透明的,下一次工具调用就会自动使用到最新的Prompt。
这个架构的核心优势在于**读写分离**:常规的读取操作通过高速缓存进行,而配置的写入和更新则通过Nacos的推送机制异步完成,既保证了性能,又实现了配置的动态热加载。
---
## 主要功能
- 📦 **Nacos动态配置**:所有Prompt存储于Nacos,实现配置与代码分离,支持团队级协作和权限管理。
- 🔄 **实时热加载**:监听Nacos配置变更,实现Prompt的动态、实时更新,无需重启服务。
- 🧠 **智能上下文推荐**:强大的`suggestPrompts`工具,精准分析代码上下文,智能匹配最合适的Prompt。
- 📊 **使用情况追踪**:通过`trackPromptUsage`工具记录Prompt的使用频率和最后使用时间,为智能推荐提供数据支持。
- 🛠️ **标准MCP工具集**:提供`getAllPrompts`, `getPromptsByTags`, `getPromptById`, `searchPrompts`等一系列标准化工具,方便查询和使用。
- 🔌 **即插即用**:轻松与Cursor, Raycast, Windsurf等所有支持MCP的工具集成。
- 🛡️ **强大的容错机制**:即使在网络不佳或Nacos宕机的情况下,也能通过本地缓存提供服务,保证了系统的鲁棒性。
---
## 目录结构
```
PromptDiscovery/
├── src/
│ ├── index.ts # MCP服务器主入口,负责工具注册和启动
│ └── services/
│ └── NacosService.ts # 核心服务,负责与Nacos交互、缓存管理和推荐算法
├── .cache/ # 本地缓存目录,存储Nacos配置的副本
├── package.json
└── README.md
```
---
## 快速开始
1. **配置Nacos**
* 确保你有一个可用的Nacos服务。
* 在Nacos中创建一个新的配置,例如:
* **Data ID:** `prompt_config`
* **Group:** `DEFAULT_GROUP`
* **配置格式:** JSON
* **配置内容 (示例):**
```json
[
{
"id": "xiaohongshu_writer",
"title": "小红书文案生成助手",
"description": "小红书文案生成助手",
"tags": ["文案生成"],
"content": "#角色\n\n你是一个小红书营销专家,擅长创作吸引年轻时尚受众的内容。你了解流行趋势、热门话题和小红书的平台特点,能够撰写真实、相关且符合平台风格的营销文案。
},
{
"id": "translation_assistant",
"title": "翻译助手",
"description": "翻译助手",
"tags": ["翻译"],
"content": "#角色\n\n 你是一位翻译家,可以将不同语言的文字翻译成目标语言“英文”,同时保持原文的风格和语气。你需要准确地传达信息和文化内涵,避免直译,注重目标语言的表达效果。"
}
]
```
2. **安装依赖**
```bash
npm install
```
3. **配置服务**
* 打开 `src/index.ts` 文件。
* 修改 `NacosService` 的构造函数参数,填入你的Nacos服务器地址和认证信息。
```typescript
const nacosService = new NacosService({
serverAddr: '你的Nacos地址:8848', // e.g., '127.0.0.1:8848'
username: 'nacos', // Nacos用户名
password: 'nacos', // Nacos密码
group: 'DEFAULT_GROUP',
configId: 'prompt_config',
});
```
4. **启动服务器**
```bash
npm start
```
启动后,`PromptDiscovery` 会自动连接Nacos,获取最新的Prompt列表,并作为MCP工具对外提供服务。
---
## 如何使用
### 与 Cursor 集成
1. 打开 Cursor 的 `mcp.json` 文件 (通常位于 `~/.cursor/mcp.json`)。
2. 添加以下配置,**请将路径替换为你项目的绝对路径**:
```json
{
"mcpServers": {
"PromptDiscovery": {
"command": "npx",
"args":[
"prompt-discovery-mcp"
],
"env":{
"NACOS_ADDR": "<NACOS-ADDR>, optional, default is 127.0.0.1:8848",
"NACOS_USERNAME": "<NACOS-USERNAME>, optional, default is nacos",
"NACOS_PASSWORD": "<NACOS-PASSWORD>, required",
"NACOS_GROUP":"<NACOS-USERNAME>, optional, default is DEFAULT_GROUP",
"NACOS_DATA_ID": "<NACOS_DATA_ID>, required",
}
}
}
}
```
3. **重要提示**:在启动前,需要先构建项目:
```bash
npm run build
```
4. 重启Cursor,你就可以在对话中通过 `@PromptDiscovery` 或直接调用其工具了。
---
## 端到端使用场景 (In Cursor)
以下是一些在Cursor中使用`PromptDiscovery`的真实工作流示例。
### 场景一:智能推荐 - “小红书内容生成”
假设你正在为小红书平台创作一篇关于“旅行攻略”的笔记。
1. **选中主题**:在Cursor编辑器中,选中你想要生成内容的主题或关键词(例如“巴厘岛旅行攻略”)。
2. **打开聊天,提出请求**:
> @PromptDiscovery 请为我选中的主题生成一篇小红书风格的旅行攻略。
3. **背后发生了什么**:
* Cursor将你的请求和选中的主题(上下文)发送给`PromptDiscovery`。
* `PromptDiscovery`的`suggestPrompts`工具被自动调用。
* 推荐算法分析上下文中的“小红书”、“旅行攻略”等关键词,并匹配到Nacos中预设的`xiaohongshu-travel-guide`这个Prompt。
* `PromptDiscovery`返回填充好内容的完整Prompt给Cursor的AI。
4. **结果**:AI会根据这个高质量的Prompt,为你生成一篇符合小红书风格、吸引人的旅行攻略内容。
### 场景二:动态更新与验证 - “新增一个旅游助手Prompt”
团队拓展了业务范围,需要一个能规划旅游行程的助手。这个场景将演示如何添加一个新Prompt并立即在客户端验证其效果。
1. **管理员操作:在Nacos添加新Prompt**
* 登录Nacos控制台,找到`prompt_config`配置并编辑。
* 在JSON数组的末尾添加新的Prompt对象。根据规范,我们为它补充`title`字段:
```json
{
"id": "travel_assistant",
"title": "自驾游小助手",
"description": "自驾游小助手",
"tags": ["旅游"],
"content": "## 角色 \n\n 你是一位自驾游顾问专家,专注于根据特定目的地为用户量身定制深度自驾游攻略。"
}
```
* 点击“发布”保存。`PromptDiscovery`服务会自动监测到变更并热加载。
2. **开发者验证:在Cursor中搜索新Prompt**
* **无需任何重启操作**。
* 回到Cursor聊天窗口,使用`searchPrompts`工具通过关键词进行搜索:
> @PromptDiscovery searchPrompts keyword: "旅游"
3. **结果与反馈**
* `PromptDiscovery`服务会立即返回包含`travel_assistant`这个Prompt的搜索结果。
* 这证明了从Nacos配置更新到客户端实时生效的完整端到端流程是成功的。接下来,你就可以直接使用这个新Prompt了。
这个流程充分体现了**配置即服务**的强大之处:Prompt的管理与使用完全分离,实现了真正的动态化和团队协作。
---
## 如何扩展和管理Prompt
**这是 `PromptDiscovery` 最强大的地方!**
你再也不需要修改任何代码来管理Prompt了。
1. **登录Nacos控制台**。
2. 找到你配置的 `prompt_config`。
3. 直接在控制台的编辑器中**新增、修改或删除**JSON数组中的Prompt对象。
4. 点击“发布”。
**完成了!** `PromptDiscovery` 服务会自动接收到更新,所有客户端都能立刻使用到最新的Prompt。这个过程是完全无缝的,真正实现了提示词的动态化、服务化管理。
---
## 核心工具详解
* `suggestPrompts`: 你的日常主力工具。在你编码时,只需 `@PromptDiscovery` 并描述你的需求,它会自动推荐最相关的Prompt。
* `searchPrompts`: 当你有明确的关键词时,用它来快速搜索Prompt。
* `getAllPrompts`: 获取当前所有可用的Prompt列表。
* `trackPromptUsage`: 该工具通常由其他工具(如`suggestPrompts`)自动调用,用于优化推荐结果,你也可以手动调用它来影响排序。
---
## 贡献与反馈
如果你对这个项目有任何建议、发现了Bug,或者有新的想法,欢迎提交Issue或Pull Request!
---