SQL数据库集成服务器

一个基于TypeScript和Express.js的MCP服务器,提供SQL数据库集成、Jira API集成和AI驱动的数据处理与分析功能,适用于企业级数据管理和实时通信场景。

  • by shahidain
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 shahidain/mcp-server

使用说明

带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查询生成
  • 上下文数据分析和标记格式

📊 数据管理

  • 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集成。

数据库设置

  1. 安装和配置SQL Server

    • 确保SQL Server已安装并正在运行
    • 创建目标数据库
  2. 配置数据库连接

    创建一个 .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
    JIRA_USERNAME=your_email@example.com
    JIRA_API_TOKEN=your_jira_api_token
    
  3. 数据库模式

    服务器需要SQL数据库中的以下表:

    • Users -具有角色和身份验证详细信息的用户管理
    • Vendors -供应商/供货商信息
    • Commodities -产品商品数据
    • Currencies -货币信息
    • Roles -用户角色定义

测试数据库连接

验证您的数据库设置:

npm run build
npm run test-connection

🎯 Jira集成

设置Jira集成

  1. 创建Jira API代币

    • 首选https://id.atlassian.com/manage-profile/security/api-tokens
    • 创建新的API令牌
    • 将其添加到您的 .env 文件
  2. 配置Jira设置

    JIRA_URL=https://your-domain.atlassian.net
    JIRA_USERNAME=your_email@example.com
    JIRA_API_TOKEN=your_jira_api_token
    

智能JQL功能

该服务器包括高级JQL(Jira查询语言)功能:

  • 人工智能驱动的JQL生成:将自然语言查询转换为JQL
  • 持续学习:存储成功的JQL示例,以改进未来的查询
  • 智能重复数据删除:使用相似性检测防止重复的JQL示例
  • 实时同步:JQL示例将立即保存到 data/jql-examples.json

JQL查询示例

系统从使用中学习,并可以为以下查询生成JQL:

  • “显示当前sprint中打开的bug”
  • “将所有任务分配给John Doe”
  • “查找本周创建的具有高优先级的问题”
  • “显示所有闭合冲刺以进行速度分析”

🤖 人工智能集成

OpenAI配置

服务器使用OpenAI进行智能数据处理和查询生成:

  1. 获取OpenAI API密钥

    • 访问https://platform.openai.com/api-keys
    • 创建新的密钥
    • 将其添加到您的 .env 文件
  2. 支持的型号

    • GPT-4(推荐)
    • GPT-3.5涡轮增压
    • 任何与OpenAI兼容的模型

AI功能

  • 智能刀具路径:根据用户查询自动确定使用哪个工具
  • 实时流媒体:实时响应流,提供更好的用户体验
  • 上下文感知处理:在多个交互中保持上下文
  • 数据格式:自动将响应格式化为标记表、图表或文本

🚀 安装和设置

先决条件

  • Node.js(v16或更高版本)
  • npm或纱线
  • SQL Server(用于数据库功能)
  • OpenAI API密钥(用于AI功能)
  • Jira帐户(可选,用于Jira集成)

安装步骤

  1. 克隆存储库

    git clone <repository-url>
    cd MCP-SERVER
    
  2. 再进行

    npm install
    
  3. 环境配置

    复制示例环境文件并配置您的设置:

    copy .env.example .env
    

    编辑 .env 使用您的特定配置(请参阅上面的设置部分)。

  4. 构建项目

    npm run build
    
  5. 启动服务器

    npm run start
    

开发模式

对于具有自动重新编译和热重新加载功能的开发:

npm run dev

🔧 VS代码集成

可用任务

该项目包括易于开发的VS Code任务:

  1. 按 Ctrl+Shift+P 然后选择“任务:运行任务”
  2. 从可用任务中选择:
    • 构建MCP服务器:编译TypeScript代码
    • 启动MCP服务器:构建并启动服务器
    • 开发MCP服务器(监视模式):自动重新加载的开发模式

调试

在VS代码中调试MCP服务器:

  1. 按 F5 或选择“运行>开始调试”
  2. 选择“启动MCP服务器”配置
  3. 在调试控制台中查看调试输出

使用AI助手

  1. 使用上述任务启动MCP服务器
  2. 将您的AI助手(如GitHub Copilot)连接到服务器
  3. 使用自然语言请求数据并执行操作

📁 项目结构

🏗️ 架构概述

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

  • 虚拟JSON产品: https://dummyjson.com/products
  • 虚拟JSON用户: https://dummyjson.com/users
  • Jira REST API:Atlassian云/服务器REST API v2/v3
  • OpenAI API:用于智能处理的GPT模型

响应格式

服务器支持多种响应格式:

  • Markdown表格:表格式的结构化数据
  • Markdown文本:带分析的格式化文本
  • 图表:使用图表库进行数据可视化
  • 对象符号:原始结构化数据

🚦 服务器通信

服务器发送事件(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的所有高优先级错误”
  • “获取本月创建的最后10个供应商”
  • “查找所有美元货币交易”
  • “显示封闭冲刺的冲刺速度图”
  • “列出所有具有管理员角色的用户”

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)

🛠️ 定制

添加新工具

  1. 创建控制器

    // src/controllers/myController.ts
    export function registerMyTools(server: McpServer) {
      server.tool('my-tool', 'Description', schema, handler);
    }
    
  2. 在主页注册

    // src/index.ts
    import { registerMyTools } from './controllers/myController.js';
    registerMyTools(server);
    

扩展数据库模型

  1. 添加接口

    // src/db-models/myModel.ts
    export interface MyModel {
      Id: number;
      Name: string;
      // ... other fields
    }
    
  2. 创建服务

    // 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.
`;

🐛 故障排除

常见问题

  1. 数据库连接失败

    • 验证SQL Server是否正在运行
    • 检查凭据 .env 文件
    • 测试用 npm run test-connection
  2. OpenAI API错误

    • 验证API密钥是否有效
    • 检查型号可用性
    • 监控API使用限制
  3. Jira身份验证失败

    • 确保API令牌正确无误
    • 验证JIRA URL格式
    • 检查用户权限
  4. 端口已在使用中

    • 更改配置中的端口
    • 终止现有进程: 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"}'

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

开发指南

  • 遵循TypeScript的最佳实践
  • 添加适当的错误处理
  • 包括JSDoc注释
  • 测试数据库操作
  • 使用Zod模式验证所有输入

📄 许可证

此项目在ISC许可证下获得许可-有关详细信息,请参阅package.json文件。

🆘 支持

有关支持和问题:

  • 检查上面的故障排除部分
  • 在GitHub上查看项目问题
  • 查阅MCP协议文档
  • 查看OpenAI API文档以了解AI相关问题

内置于❤️ 使用模型上下文协议(MCP)