返回市场
提示服务器

提示服务器

作者:BeCrafter2 星标更新:2025-11-24

项目介绍

Prompt Manager

npm 版本 许可证: MIT Node.js 版本

基于MCP协议的提示词管理服务,支持HTTP流传输、Web管理界面和桌面应用程序。它可以将静态提示词模板转换成可以通过API调用的动态服务。

核心特性

  • 🛠️ MCP协议支持完全兼容模型上下文协议(MCP),可以集成到各种AI客户端
  • 🌐 HTTP流传输基于可流式传输的HTTP协议优化,提供稳定的长连接支持
  • 📁 递归扫描自动发现子目录中的提示词文件
  • ⚙️ 灵活配置支持命令行参数和环境变量配置
  • 🖥️ 原生桌面壳内置Electron菜单应用,一键启动/停止服务,并嵌入管理后台
  • 📋 管理界面提供一个Web管理界面,便于创建、编辑和管理提示词
  • 📦 模块化设计核心功能已被封装为独立库,可以在其他项目中复用

快速开始

1. 安装

# 全局安装
npm install -g @becrafter/prompt-manager

# 或作为项目依赖安装
npm install @becrafter/prompt-manager 

2. 启动服务器

# 使用默认配置启动
prompt-manager

# 指定提示词目录
prompt-manager --prompts-dir ./my-prompts

# 指定端口
prompt-manager --port 5621

默认情况下,服务将在 ~/.prompt-manager/prompts 创建并读取提示词目录。首次启动时,仓库中的 examples/prompts 将同步过去,以便快速体验。

3. 作为库使用

核心功能已被封装为独立库,可以在其他项目中使用:

# 安装核心库
npm install @becrafter/prompt-manager-core

在项目中使用:

import { startServer, stopServer, promptManager } from '@becrafter/prompt-manager-core';

async function main() {
  // 启动服务器
  await startServer({
    configOverrides: {
      promptsDir: './my-prompts',
      port: 3000
    }
  });

  // 加载提示词
  await promptManager.loadPrompts();
}

main();

4. CLI命令

新的命令行逻辑已集中到 app/cli 中,支持扩展命令分布。常见用法不变:

# 默认等价于 prompt-manager start
prompt-manager

# 显式使用 start/run 命令
prompt-manager start --port 6000
prompt-manager run --prompts-dir ./examples/prompts

# 获取帮助/版本信息
prompt-manager --help
prompt-manager --version

如果需要在未来添加自定义子命令,只需在 app/cli/commands 下添加相应实现,并在 app/cli/index.js 注册即可。

桌面菜单应用(Electron)

为了方便非技术人员运行服务,仓库中增加了一个位于 app/desktop 的Electron菜单栏应用。打包的应用将包括Node.js运行时,将 prompt-manager 的代码和依赖一起打包,无需额外的环境配置。

目录和结构

  • app/desktop/main.js:Electron主进程,负责托盘UI、服务生命周期和升级过程
  • app/desktop/assets/:托盘、安装图标和其他资源
  • app/desktop/package.json:单独的桌面项目配置和 electron-builder 打包描述

菜单功能

  • 启动/停止服务根据当前状态切换脚本,并直接调用服务 startServer/stopServer
  • 复制服务地址一键复制当前 http://127.0.0.1:<port> 地址,便于分享或调试
  • 打开管理后台嵌入内置服务到单独窗口 /admin 前端,可以直接登录管理提示词
  • 检查更新调用npm Registry获取最新版本,下载tarball,自动安装依赖,并保持 examples/prompts 示例内容(实际数据位于) ~/.prompt-manager/prompts 不受影响
  • 关于服务显示桌面、服务器、Electron、Chromium、Node.js等组件版本
  • 退出服务平滑停止Express服务,然后退出Electron进程

本地开发/调试

# 安装依赖(仓库根目录已经装好 server 依赖)
cd app/desktop
npm install

# 启动托盘应用(也可使用根目录脚本 npm run desktop:dev)
npm run dev

启动后,系统托盘中只会出现一个图标,所有交互都在菜单中完成。

打包发布

# 在仓库根目录执行,会调用 app/desktop 内的 electron-builder
npm run desktop:build

electron-builder 可以输出macOS .dmg、Windows .exe(NSIS) 和Linux .AppImage 安装包,extraResources 包括 prompt-manager 的源代码和依赖,确保离线可用性。

升级机制

菜单中的“检查更新”选项会:

  1. 读取当前运行的服务版本(app.getPath('userData')/prompt-manager/package.json
  2. 对比npm Registry上的最新版本
  3. 用户确认后,停止服务,下载最新tarball,并重写到运行目录
  4. 通过 npm install --omit=dev 在沙盒目录重新安装依赖
  5. 保留示例 examples/prompts 目录(如有),用户自定义数据保存在 ~/.prompt-manager/prompts 无需额外迁移

整个过程不需要系统级别的node/npm,真正实现了“即装即用”。

配置选项

命令行参数

参数缩写描述
--prompts-dir <目录>-p指定提示词文件所在的目录
--port <端口>-P指定服务器端口(默认:5621)
--help-h显示帮助信息
--version-v显示版本信息

环境变量

环境变量描述默认值
MCP_SERVER_NAME服务器名称prompt-manager
SERVER_PORT服务器端口5621
PROMPTS_DIR提示词目录路径~/.prompt-manager/prompts
MCP_SERVER_VERSION服务器版本0.0.19
LOG_LEVEL日志级别(error, warn, info, debug)info
MAX_PROMPTS最大提示词数量限制100
RECURSIVE_SCAN是否启用子目录递归扫描true
ADMIN_ENABLE是否启用管理界面true
ADMIN_PATH管理界面路径/admin
ADMIN_USERNAME管理员用户名admin
ADMIN_PASSWORD管理员密码admin

安装或首次运行时,会自动将 env.example 内容写入 ~/.prompt-manager/.env,如果文件不存在,便于在系统内共享配置。

API接口

MCP协议接口

服务器实现了MCP协议,支持以下工具:

  • search_prompts:搜索提示词
  • get_prompt:获取指定提示词的完整内容
  • reload_prompts:重新加载所有提示词

Web管理界面

获取提示词列表

GET /prompts[?search=关键词]

返回所有可用提示词的列表,支持搜索功能。

获取单个提示词详情

GET /api/prompts/:name[?path=文件路径]

返回指定名称的提示词的详细信息。

创建/更新提示词

POST /api/prompts

创建或更新提示词文件。

请求体示例:

{
  "name": "my-prompt",
  "group": "default",
  "yaml": "name: my-prompt\ndescription: 我的自定义提示词\nmessages:\n  - role: user\n    content:\n      text: 这是一个{{参数}}示例\n"
}

删除提示词

DELETE /api/prompts/:name[?path=文件路径]

删除指定的提示词文件。

切换提示词启用状态

POST /api/prompts/:name/toggle[?path=文件路径]

切换提示词的启用/禁用状态。

处理提示词

POST /process

处理指定的提示词,并支持参数替换。

请求体示例:

{
  "promptName": "code-review",
  "arguments": {
    "language": "JavaScript",
    "code": "function hello() { console.log('Hello'); }"
  }
}

分组管理

GET /api/groups

获取所有分组的列表。

POST /api/groups

创建一个新的分组。

PATCH /api/groups/rename

重命名分组。

PATCH /api/groups/status

更新分组激活状态。

DELETE /api/groups?path=分组路径

删除分组(仅当分组为空时)。

提示词格式

提示词文件应为YAML格式,并包含以下基本结构:

name: prompt-name
description: 提示词描述
messages:
  - role: user
    content:
      text: 提示词内容,支持 {{参数名}} 格式的参数替换
arguments:
  - name: 参数名
    description: 参数描述
    type: string|number|boolean
    required: true|false
enabled: true|false  # 是否启用该提示词

开发

项目结构

prompt-manager/
├── app/
│   ├── cli/            # 命令行命令分发与共享工具
│   └── desktop/        # Electron 菜单应用
├── packages/
│   ├── admin-ui/       # 内置管理后台静态资源
│   ├── server/         # 服务端核心逻辑
│   └── server/         # 核心库(@becrafter/prompt-manager-core)
├── examples/
│   └── prompts/        # 随包示例提示词(首次启动会同步到 ~/.prompt-manager/prompts)
├── scripts/            # 安装/维护脚本(如 env 同步)
├── bin/                # 可执行入口
└── package.json

核心库封装

核心服务功能已被封装为独立库,位于 packages/server,可以按以下方式使用:

# 在其他项目中安装
npm install @becrafter/prompt-manager-core

该库提供了以下主要功能:

  • 服务器启动/停止
  • 配置管理
  • 提示词管理
  • MCP协议支持
  • Web API接口

本地开发

# 克隆仓库
git clone https://github.com/BeCrafter/prompt-manager.git
cd prompt-manager

# 安装依赖
npm install

# 启动开发服务器
npm run dev

许可证

MIT 许可证