关于 Sample MCP Server
Sample MCP Server 是面向需要处理 SQL Server 数据、Jira 和商品数据的团队的 TypeScript 服务。它结合 CRUD 与搜索工具、AI 辅助的 JQL 生成及 SSE 流式通信。
主要功能
- 01管理和搜索 SQL Server 记录
- 02搜索和管理 Jira 问题
- 03将自然语言转换为 JQL
- 04查询 DummyJSON 商品和用户
- 05通过 SSE 流式传输响应
适用场景
- 01查找或更新用户和供应商
- 02用自然语言查找 Jira 问题
- 03创建 Jira 问题和子任务
- 04按类别查询商品数据
MCP 相关
它向 MCP 客户端提供数据库、Jira、商品和应用状态工具,并通过 Server-Sent Events(SSE)通信。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
与 SQL 数据库集成的 MCP 服务
这是一个使用 TypeScript 和 Express.js 构建的模型上下文协议(MCP)服务,可全面集成 SQL 数据库、Jira API 以及用于数据处理和分析的智能 AI 工具。该服务使用服务器发送事件(SSE)进行实时通信,并提供持久化存储,以提升用户体验。
主要功能
🗄️ SQL 数据库集成
- 为用户、供应商、商品、货币和角色提供完整的 CRUD 操作
- 高级搜索和分页功能
- 强大的 SQL Server 连接管理
- 数据库健康监控和连接测试
🎯 Jira 集成
- 全面集成 Jira API,并支持 JQL(Jira 查询语言)
- 使用 AI 智能生成 JQL 查询
- 持久化存储 JQL 示例,并基于相似度进行去重
- 创建、搜索和管理问题
- Sprint 和项目分析
🤖 AI 驱动的功能
- 集成 OpenAI,实现智能工具路由和数据处理
- 实时流式响应,提升用户体验
- 可通过学习智能生成 JQL 查询
- 上下文数据分析和 Markdown 格式化
📊 数据管理
- 集成 DummyJSON API,获取产品数据
- 集成 DummyJSON API,获取用户数据
- 实时监控应用状态
- 持久化存储,并自动同步文件
🔄 实时通信
- 使用服务器发送事件(SSE)提供流式响应
- 管理多个并发会话
- 妥善处理错误和连接
可用工具
🗄️ SQL 数据库工具
用户管理
get-users- 获取用户列表,支持可选分页get-user-by-id- 根据 ID 获取特定用户的详细信息search-users- 按关键词搜索用户
供应商管理
get-vendors- 获取供应商列表,支持可选分页get-vendor-by-id- 根据 ID 获取特定供应商的详细信息search-vendors- 按关键词搜索供应商
商品管理
get-commodities- 获取商品列表,支持可选分页get-commodity-by-id- 根据 ID 获取特定商品的详细信息search-commodities- 按关键词搜索商品
货币管理
get-currencies- 获取货币列表,支持可选分页get-currency-by-id- 根据 ID 获取特定货币的详细信息search-currencies- 按关键词搜索货币
角色管理
get-roles- 获取角色列表,支持可选分页get-role-by-id- 根据 ID 获取特定角色的详细信息search-roles- 按关键词搜索角色
🎯 Jira 集成工具
get-jira-issue-by-id- 获取特定 Jira 问题的详细信息search-jira-issues- 使用智能 JQL 生成搜索 Jira 问题create-jira-issue- 使用指定的项目、摘要和问题类型创建 Jira 问题create-jira-subtask- 在现有 Jira 问题下创建子任务
📊 产品和外部 API 工具
get-products- 从 DummyJSON API 获取产品列表,支持可选分页get-product-by-id- 根据 ID 获取特定产品的详细信息search-products- 按关键词搜索产品get-products-by-category- 获取特定类别中的所有产品get-categories- 获取所有产品类别的列表
🔍 应用监控
get-application-status- 获取不同环境中特定应用的实时状态信息
🗄️ SQL 数据库集成
此 MCP 服务集成了全面的 SQL Server 功能,可用于企业级数据管理。
数据库设置
-
安装并配置 SQL Server
- 确保 SQL Server 已安装并正在运行
- 创建目标数据库
-
配置数据库连接
在项目根目录中创建
.env文件,并填写数据库凭据:# SQL Server Configuration MSSQL_USER=your_username MSSQL_PASSWORD=your_password MSSQL_HOST=your_server_host MSSQL_DATABASE=your_database_name # Alternative: Connection String MSSQL_CONNECTION_STRING=Server=yourserver;Database=yourdatabase;User Id=username;Password=password;Encrypt=false;TrustServerCertificate=true; # OpenAI Configuration (Required for AI features) OPENAI_API_KEY=your_openai_api_key LLM_MODEL=gpt-4 # Jira Configuration (Optional) JIRA_URL=https://your-domain.atlassian.net [email protected] JIRA_API_TOKEN=your_jira_api_token -
数据库架构
服务要求 SQL 数据库中包含以下表:
Users- 用户管理,包含角色和身份验证详情Vendors- 供应商信息Commodities- 商品数据Currencies- 货币信息Roles- 用户角色定义
测试数据库连接
验证数据库设置:
npm run build
npm run test-connection
🎯 Jira 集成
设置 Jira 集成
-
创建 Jira API 令牌
- 前往 https://id.atlassian.com/manage-profile/security/api-tokens
- 创建新的 API 令牌
- 将其添加到
.env文件中
-
配置 Jira 设置
JIRA_URL=https://your-domain.atlassian.net [email protected] JIRA_API_TOKEN=your_jira_api_token
智能 JQL 功能
该服务具备高级 JQL(Jira 查询语言)功能:
- AI 驱动的 JQL 生成:将自然语言查询转换为 JQL
- 持续学习:存储成功的 JQL 示例,以改进后续查询
- 智能去重:通过相似度检测防止 JQL 示例重复
- 实时同步:JQL 示例会立即保存到
data/jql-examples.json
JQL 查询示例
系统会从使用过程中学习,并可为以下查询生成 JQL:
- “显示当前冲刺中未解决的缺陷”
- “获取分配给 John Doe 的所有任务”
- “查找本周创建的高优先级问题”
- “显示所有已关闭的冲刺以进行速度分析”
🤖 AI 集成
OpenAI 配置
该服务使用 OpenAI 进行智能数据处理和查询生成:
-
获取 OpenAI API 密钥
- 访问 https://platform.openai.com/api-keys
- 创建新的密钥
- 将其添加到
.env文件中
-
支持的模型
- GPT-4(推荐)
- GPT-3.5-turbo
- 任何兼容 OpenAI 的模型
AI 功能
- 智能工具路由:根据用户查询自动确定要使用的工具
- 实时流式传输:实时传输响应,提升用户体验
- 上下文感知处理:在多次交互中保持上下文
- 数据格式化:自动将响应格式化为 Markdown 表格、图表或文本
🚀 安装与设置
前置条件
- Node.js(v16 或更高版本)
- npm 或 yarn
- SQL Server(用于数据库功能)
- OpenAI API 密钥(用于 AI 功能)
- Jira 账户(可选,用于 Jira 集成)
安装步骤
-
克隆仓库
git clone <repository-url> cd MCP-SERVER -
安装依赖项
npm install -
环境配置
复制示例环境文件并配置设置:
copy .env.example .env根据具体配置编辑
.env(请参阅上文的设置部分)。 -
构建项目
npm run build -
启动服务
npm run start
开发模式
如需在开发过程中启用自动重新编译和热重载:
npm run dev
🔧 VS Code 集成
可用任务
项目包含便于开发的 VS Code 任务:
- 按
Ctrl+Shift+P并选择“Tasks: Run Task” - 从可用任务中选择:
- Build MCP Server:编译 TypeScript 代码
- Start MCP Server:构建并启动服务
- Dev MCP Server (Watch Mode):启用自动重载的开发模式
调试
在 VS Code 中调试 MCP 服务:
- 按
F5或选择“Run > Start Debugging” - 选择“Launch MCP Server”配置
- 在调试控制台中查看调试输出
与 AI 助手配合使用
- 使用上述任务启动 MCP 服务
- 将 AI 助手(例如 GitHub Copilot)连接到服务
- 使用自然语言请求数据并执行操作
📁 项目结构
🏗️ 架构概览
graph TD
A[🎯 MCP Server] --> B[🎮 Controllers Layer]
A --> C[🏢 Services Layer]
A --> D[📋 Models Layer]
A --> E[⚙️ Configuration Layer]
B --> B1[👥 User Controller]
B --> B2[🎫 Jira Controller]
B --> B3[📦 Product Controller]
B --> B4[🏪 Vendor Controller]
B --> B5[📊 Commodity Controller]
B --> B6[💰 Currency Controller]
B --> B7[🔐 Role Controller]
C --> C1[🗄️ SQL Services]
C --> C2[🎫 Jira Service]
C --> C3[📦 Product Service]
C --> C4[👥 User Service]
C1 --> C1A[SQL User Service]
C1 --> C1B[SQL Vendor Service]
C1 --> C1C[SQL Commodity Service]
C1 --> C1D[SQL Currency Service]
C1 --> C1E[SQL Role Service]
D --> D1[🗃️ Database Models]
D --> D2[🌐 API Models]
D --> D3[📝 Type Definitions]
E --> E1[💾 Database Config]
E --> E2[🌐 API Config]
E --> E3[🗄️ MSSQL Config]
F[🌍 External Systems] --> F1[🗄️ SQL Server Database]
F --> F2[🎫 Jira API]
F --> F3[📦 DummyJSON API]
F --> F4[🤖 OpenAI API]
G[💾 Data Storage] --> G1[📄 JQL Examples JSON]
G --> G2[📊 Application Data]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e8f5e8
style D fill:#fff3e0
style E fill:#fce4ec
style F fill:#e0f2f1
style G fill:#f1f8e9
🔄 数据流架构
sequenceDiagram
participant 👤 Client
participant 🌐 SSE Transport
participant 🤖 AI Router
participant 🎮 Controller
participant 🏢 Service
participant 🗄️ Database
participant 🧠 OpenAI
👤->>🌐: 📝 Natural Language Request
🌐->>🤖: 🔀 Route Message
🤖->>🧠: 🔍 Analyze Intent
🧠-->>🤖: 🎯 Tool Selection
🤖->>🎮: ⚡ Execute Tool
🎮->>🏢: 🛠️ Business Logic
🏢->>🗄️: 📊 Data Query
🗄️-->>🏢: 📈 Raw Data
🏢-->>🎮: 🔧 Processed Data
🎮->>🧠: 📋 Format Request
🧠-->>🎮: 📄 Formatted Response
🎮-->>🌐: 🌊 Stream Response
🌐-->>👤: ⚡ Real-time Output
📂 详细文件结构
MCP-SERVER/
├── 📁 data/ # 💾 Persistent Data Storage
│ └── 📄 ... # 📄 Configuration files
│
├── 📁 src/ # 💻 Source Code
│ ├── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 app-data/ # 📊 Application Data
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 config/ # ⚙️ Configuration Files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 controllers/ # 🎮 MCP Tool Controllers
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 db-models/ # 🗃️ Database Models
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 llm-api/ # 🤖 AI Integration
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 models/ # 📋 Data Models
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 modules/ # 🔧 Core Server Modules
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 services/ # 🏢 Business Logic Services
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ ├── 📁 types/ # 📝 TypeScript Definitions
│ │ ├── 📄 ... # 📄 TypeScript files
│ │ └── 📄 ... # 📄 TypeScript files
│ │
│ └── 📁 utils/ # 🛠️ Utility Functions
│ └── 📄 ... # 📄 TypeScript files
│
├── 📁 scripts/ # 🔨 Build & Deployment
│ └── 📄 ... # 📄 JavaScript files
│
├── 📄 ... # 📄 HTML files
├── 📄 ... # 📄 Configuration files
├── 📄 ... # 📄 Configuration files
├── 📄 ... # 📄 Configuration files
└── 📄 ... # 📄 Documentation files
🔀 组件交互图
graph LR
subgraph "🌍 External APIs"
EXT1[🗄️ SQL Server]
EXT2[🎫 Jira API]
EXT3[📦 DummyJSON]
EXT4[🤖 OpenAI]
end
subgraph "🎯 MCP Server Core"
SSE[🌐 SSE Transport]
ROUTE[🤖 AI Router]
CTRL[🎮 Controllers]
SVC[🏢 Services]
end
subgraph "💾 Data Layer"
DB[(🗄️ Database)]
FILES[📄 JSON Files]
end
CLIENT[👤 Client] --> SSE
SSE --> ROUTE
ROUTE --> CTRL
CTRL --> SVC
SVC --> EXT1
SVC --> EXT2
SVC --> EXT3
SVC --> EXT4
SVC --> DB
SVC --> FILES
style CLIENT fill:#e3f2fd
style SSE fill:#f1f8e9
style ROUTE fill:#fff3e0
style CTRL fill:#fce4ec
style SVC fill:#e8f5e8
style DB fill:#e0f2f1
style FILES fill:#f3e5f5
🔍 API 参考与数据源
外部 API
- DummyJSON Products:https://dummyjson.com/products
- DummyJSON Users:https://dummyjson.com/users
- Jira REST API:Atlassian Cloud/Server REST API v2/v3
- OpenAI API:用于智能处理的 GPT 模型
响应格式
该服务支持多种响应格式:
- Markdown 表格:表格形式的结构化数据
- Markdown 文本:经过格式化并附带分析的文本
- 图表:使用图表库进行数据可视化
- JSON:原始结构化数据
🚦 服务通信
服务器发送事件(SSE)
该服务使用 SSE 进行实时通信:
- 端点:
/sse/stream - 消息端点:
/messages - 会话管理:通过 ID 自动管理会话
- 流式响应:实时数据流,带来更好的用户体验
CORS 配置
该服务已配置适当的 CORS 标头,以处理跨域请求。
💡 使用示例
基本查询
# Get all users with pagination
curl "http://localhost:3000/messages" -X POST \
-H "Content-Type: application/json" \
-d '{"message": "show me all users"}'
# Search for specific vendor
curl "http://localhost:3000/messages" -X POST \
-H "Content-Type: application/json" \
-d '{"message": "find vendor with name containing Microsoft"}'
# Get Jira issues
curl "http://localhost:3000/messages" -X POST \
-H "Content-Type: application/json" \
-d '{"message": "show me open bugs in current sprint"}'
自然语言查询
由 AI 驱动的服务可以理解自然语言:
- “显示所有分配给 John 的高优先级 Bug”
- “获取本月创建的最近 10 个供应商”
- “查找所有 USD 货币交易”
- “显示已关闭 Sprint 的速度图表”
- “列出所有具有管理员角色的用户”
JQL 学习示例
该服务会从 JQL 使用情况中学习:
User Query: "show me open bugs"
Generated JQL: project = SCRUM AND issuetype = Bug AND status != "Done" ORDER BY priority DESC
Saved: ✅ (New example learned)
User Query: "get open bugs"
Generated JQL: project = SCRUM AND issuetype = Bug AND status != "Done" ORDER BY priority DESC
Saved: ❌ (Duplicate detected - 85% similarity)
🛠️ 自定义
添加新工具
-
创建控制器
// src/controllers/myController.ts export function registerMyTools(server: McpServer) { server.tool('my-tool', 'Description', schema, handler); } -
在主文件中注册
// src/index.ts import { registerMyTools } from './controllers/myController.js'; registerMyTools(server);
扩展数据库模型
-
添加接口
// src/db-models/myModel.ts export interface MyModel { Id: number; Name: string; // ... other fields } -
创建服务
// src/services/myService.ts export class MyService { async getAll(): Promise<MyModel[]> { // Implementation } }
自定义 AI 提示词
编辑 src/llm-api/prompts.ts 中的提示词:
export const MyCustomPrompt = `
Your custom system prompt here...
Format responses as markdown tables.
`;
🐛 故障排除
常见问题
-
数据库连接失败
- 确认 SQL Server 正在运行
- 检查
.env文件中的凭据 - 使用
npm run test-connection进行测试
-
OpenAI API 错误
- 确认 API 密钥有效
- 检查模型是否可用
- 监控 API 使用限额
-
Jira 身份验证失败
- 确保 API 令牌正确
- 验证 Jira URL 格式
- 检查用户权限
-
端口已被占用
- 在配置中更改端口
- 终止现有进程:
npx kill-port 3000
调试模式
启用详细日志记录:
DEBUG=mcp:* npm run start
日志文件
查看以下位置的日志:
- 控制台输出中的实时日志
data/jql-examples.json中的 JQL 学习进度- SQL Server 日志中的数据库问题
📈 性能监控
可用指标
- 数据库连接健康状况
- API 响应时间
- JQL 查询成功率
- 内存使用模式
- 活跃会话数
健康检查
# Database health
curl "http://localhost:3000/messages" -X POST \
-H "Content-Type: application/json" \
-d '{"message": "check database health"}'
# Application status
curl "http://localhost:3000/messages" -X POST \
-H "Content-Type: application/json" \
-d '{"message": "get application status for MyApp in production"}'
🤝 贡献
- Fork 此仓库
- 创建功能分支
- 进行更改
- 视情况添加测试
- 提交拉取请求
开发指南
- 遵循 TypeScript 最佳实践
- 添加适当的错误处理
- 添加 JSDoc 注释
- 测试数据库操作
- 使用 Zod 模式验证所有输入
📄 许可证
本项目采用 ISC License 授权,详情请参阅 package.json 文件。
🆘 支持
如需支持或有任何疑问:
- 查看上方的故障排除部分
- 查看 GitHub 上的项目议题
- 查阅 MCP Protocol 文档
- 如遇 AI 相关问题,请查看 OpenAI API 文档
使用 Model Context Protocol (MCP) 倾心打造 ❤️
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。