政策MCP
模型上下文协议(MCP)服务器,用于接收策略文档(PDF、Word、Markdown)并将其暴露给AI助手。

   
特性
- 多格式支持:上传PDF、Word(.docx)和Markdown(.md)策略文档
- 元数据抽取:自动从文档属性中提取标题、版本、日期和作者
- 全文检索:使用相关性评分搜索所有已加载的策略
- MCP协议:通过AI助手的模型上下文协议公开策略
- 网页用户界面:用于上传和管理策略的基于浏览器的界面
- 远程部署:作为具有流式HTTP MCP传输的HTTP服务器运行
快速开始
本地开发
# Install dependencies
npm install
# Build the project
npm run build
# Start the server
npm start服务器将在以下时间启动 http://localhost:3000:
- 网页用户界面:
http://localhost:3000-用于上传和管理策略文档的浏览器界面 - MCP端点:
http://localhost:3000/mcp-用于AI助手集成 - 健康检查:
http://localhost:3000/health-服务器状态和指标
打开浏览器 http://localhost:3000 访问web界面并开始上传策略文档。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT | 3000 | 服务器端口 |
HOST | 0.0.0.0 | 服务器主机绑定 |
CORS_ORIGIN | * | CORS允许的来源 |
MCP_AUTH_MODE | none | MCP端点身份验证: none, api-key,或 jwt |
MCP_AUTH_API_KEY | - | MCP端点的API密钥(如果 MCP_AUTH_MODE=api-key) |
MCP_AUTH_JWT_SECRET | - | 用于令牌验证的JWT密钥(如果 MCP_AUTH_MODE=jwt) |
WEB_AUTH_MODE | none | Web/API端点身份验证: none, api-key,或 jwt |
WEB_AUTH_API_KEY | - | web终结点的API密钥(如果 WEB_AUTH_MODE=api-key) |
WEB_AUTH_JWT_SECRET | - | 用于令牌验证的JWT密钥(如果 WEB_AUTH_MODE=jwt) |
看 .env.example 有关完整配置选项和 文档/授权.md 用于身份验证设置。
MCP工具
| 工具 | 说明 |
|---|---|
scan_document | 扫描文档(PDF、Word或Markdown)并提取政策信息 |
search_policies | 按关键字搜索已加载的策略 |
list_policies | 列出所有已加载的策略及其摘要 |
get_policy | 按ID获取特定策略的完整内容 |
API 参考
Web API
| 方法 | 路径 | 描述 |
|---|---|---|
GET | /api/policies | 列出所有策略(可选 ?category= 过滤器) |
GET | /api/policies/:id | 按ID获取单一策略 |
POST | /api/policies | 上传文档(多部分表单 file 字段,支持PDF/DOCX/MD) |
DELETE | /api/policies/:id | 删除策略 |
GET | /api/search | 搜索策略(?query= 必修的, ?category= 可选) |
GET | /api/categories | 获取独特类别列表 |
MCP协议(流式HTTP)
| 方法 | 路径 | 描述 |
|---|---|---|
POST | /mcp | MCP请求处理(初始化、工具调用) |
GET | /mcp | 服务器到客户端通知(SSE) |
DELETE | /mcp | 会话终止 |
健康与探头
| 路径 | 描述 |
|---|---|
/health | 使用状态、版本、策略计数进行健康检查 |
/ready | Kubernetes就绪性探测 |
/live | Kubernetes活性探测 |
部署
数字海洋应用平台
单击上面的“部署到DO”按钮,或:
- 分叉此存储库
- 在中创建新应用程序 数字海洋应用平台
- 连接您的分叉存储库
- 这
.do/deploy.template.yaml将自动配置部署
手动部署
# Build for production
npm ci
npm run build
# Start the server
node dist/index.js确保 HOST=0.0.0.0 已为云部署设置。
建筑
┌─────────────────────────────────────────────────────────┐
│ HTTP Server (Express) │
│ │
│ ┌────────────┐ ┌────────────┐ ┌──────────────────┐ │
│ │ /mcp │ │ /api/* │ │ / (static) │ │
│ │ MCP Proto │ │ REST API │ │ Web UI │ │
│ └─────┬──────┘ └─────┬──────┘ └──────────────────┘ │
│ │ │ │
│ └───────┬───────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ PolicyStore (in-memory) │ │
│ │ │ │
│ │ • addPolicy() • searchPolicies() │ │
│ │ • getPolicy() • listPolicies() │ │
│ │ • removePolicy() • getAllPolicies() │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘发展
脚本
| 命令 | 描述 |
|---|---|
npm run build | 编译TypeScript并复制静态文件 |
npm start | 运行生产服务器 |
npm run dev | 开发观看模式 |
npm run lint | 运行ESLint |
npm run format | 使用Prettier格式化代码 |
项目结构
src/
├── index.ts # Express server, MCP setup, API routes
├── policy-store.ts # In-memory policy storage with search
├── auth-manager.ts # Authentication middleware (API key, JWT)
├── types.ts # TypeScript interfaces
├── parsers/
│ ├── index.ts # Unified document parser router
│ ├── pdf-parser.ts # PDF text extraction and metadata
│ ├── docx-parser.ts # Word document parsing with mammoth
│ ├── markdown-parser.ts # Markdown parsing with gray-matter
│ └── shared.ts # Shared parsing utilities
└── public/
└── index.html # Web UI (single-page app)已知限制
- 内存存储:服务器重新启动时策略丢失
- 无OCR:不支持带图像的扫描PDF
- 基本断面检测:复杂的文档格式可能无法正确解析
- 单词格式丢失:Word文档转换为纯文本,失去格式
- Markdown限制:高级标记功能(表、代码块)被扁平化为文本
文档
其他文件可在 docs/ 目录:
贡献
欢迎投稿!请阅读我们的 贡献指南 有关我们的开发过程、代码风格以及如何提交pull请求的详细信息。在贡献之前,一定要查看许可条款。
许可证
本项目根据商业源许可证1.1(BUSL-1.1)获得许可。看 许可证 了解详情。
许可证允许免费用于非生产目的。如需生产使用,请联系 地平线数字工程.
