# 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！

---

