API集成服务器

一个简约的模型上下文协议(MCP)服务器,提供与Supabase、Cal.com、Gmail和Twilio API的集成,适用于需要多服务集成的开发场景。

  • by sabrewolfai-dev
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 sabrewolfai-dev/crm-mcp-server

使用说明

带API集成的MCP服务器

一个极简主义的模型上下文协议(MCP)服务器,提供与Supabase、Cal.com、Gmail和Twilio API的集成。

特点/特性

  • Supabase 集成通过REST API进行数据库操作(CRUD)
  • Cal.com 集成活动日程安排与管理
  • Gmail 集成发送电子邮件并收取消息
  • Twilio集成发送短信、WhatsApp消息,并进行通话
  • MCP协议支持标准化工具定义和终点指标
  • 安全速率限制、CORS(跨域资源共享)和Helmet安全头部设置
  • 记录日志基于Winston的日志记录,支持文件和控制台输出

先决条件

  • Node.js 18.0.0 或更高版本
  • npm 或 yarn 包管理器
  • 账户和API密钥用于:
    • Supabase(可译为“超级数据库”或根据具体语境保持原名)
    • Cal.com(注:这个域名可能代表某个特定的在线日历或日程管理服务,但直接翻译时,我们通常保留其原样,因为域名没有固定的中文翻译。)
    • Gmail/Google 云端控制台
    • Twilio

安装

  1. 克隆仓库

    git clone <your-repo-url>
    cd mcp-server-integrations
    
  2. 安装依赖项

    npm install
    
  3. 设置环境变量

    cp env.example .env
    

    编辑 .env 使用您实际的API凭据(见下文“配置”部分)。

  4. 创建日志目录

    mkdir logs
    

配置

环境变量

复制 env.example 到;对于;给;向 .env 并进行以下配置:

服务器配置

  • PORT服务器端口(默认:3000)
  • NODE_ENV环境(开发/生产)
  • LOG_LEVEL日志级别(错误/警告/信息/调试)
  • ALLOWED_ORIGINS逗号分隔的允许的CORS来源列表

Supabase(可译为“苏帕斯数据库”或直接保留原名,根据上下文判断是否需要具体翻译)

  1. 首选 Supabase 并创建一个新项目
  2. 从“设置”>“API”中获取您的项目URL和匿名密钥
  3. 设置 SUPABASE_URL 并且 SUPABASE_ANON_KEY

Cal.com(注:这通常是一个假设或特定上下文中的域名,直接翻译为“卡尔点康”并无实际意义,因此保持原样作为专有名词)

  1. 首选 Cal.com(可译为“日历网”或保持原名,根据上下文决定是否需要具体翻译) 并创建一个账户
  2. 在“设置”>“开发者”中生成API密钥
  3. 设置 CAL_API_KEY

Gmail/谷歌

  1. 首选 Google 云控制台
  2. 创建一个新项目或选择现有项目
  3. 启用Gmail API
  4. 创建OAuth 2.0凭据
  5. 设定;套装;一套 GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET,和 GOOGLE_REDIRECT_URI
  6. 使用OAuth流程获取刷新令牌(参见Gmail设置部分)

Twilio(注:Twilio是一个提供通信服务的云平台,常用于开发应用程序中的电话、短信和视频功能,其直接翻译为“特威利奥”或保持原名使用较为常见,具体根据语境和习惯选择。)

  1. 首选 Twilio 控制台
  2. 从仪表板获取账户SID和身份验证令牌
  3. 购买一个电话号码
  4. 设定 TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN,以及 TWILIO_PHONE_NUMBER

Gmail OAuth 设置

要使用Gmail API,您需要完成OAuth流程:

  1. 启动服务器

    npm run dev
    
  2. 获取授权URL

    curl http://localhost:3000/api/gmail/auth-url
    
  3. 访问该网址 并授权该应用程序

  4. 用代币兑换代码

    curl -X POST http://localhost:3000/api/gmail/token \
      -H "Content-Type: application/json" \
      -d '{"code": "YOUR_AUTHORIZATION_CODE"}'
    
  5. 更新 .env 带有刷新令牌

使用方法

启动服务器

# Development mode with auto-reload
npm run dev

# Production mode
npm start

健康检查

curl http://localhost:3000/health

MCP 工具

获取可用工具:

curl http://localhost:3000/api/mcp/tools

API 端点

Supabase(可译为“苏帕巴斯”或根据具体语境保留原名,因其是一个特定的技术或服务名称)

# Query database
curl -X POST http://localhost:3000/api/supabase/query \
  -H "Content-Type: application/json" \
  -d '{
    "table": "users",
    "operation": "select",
    "filters": {"active": true}
  }'

Cal.com(注:这个网址或应用名直接翻译为中文并无特定含义,通常保留原样或根据上下文进行意译,如“日历.com”或“Cal应用”等,但在此直接给出原样翻译以保持一致性)

# Schedule event
curl -X POST http://localhost:3000/api/cal/schedule \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Meeting",
    "startTime": "2024-01-15T10:00:00Z",
    "endTime": "2024-01-15T11:00:00Z",
    "attendees": ["user@example.com"]
  }'

# Get events
curl http://localhost:3000/api/cal/events

Gmail(谷歌邮箱)

# Send email
curl -X POST http://localhost:3000/api/gmail/send \
  -H "Content-Type: application/json" \
  -d '{
    "to": "recipient@example.com",
    "subject": "Test Email",
    "body": "<h1>Hello World</h1>"
  }'

# Get messages
curl http://localhost:3000/api/gmail/messages

Twilio

# Send SMS
curl -X POST http://localhost:3000/api/twilio/sms \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+1234567890",
    "message": "Hello from MCP Server!"
  }'

发展

项目结构

src/
├── server.js          # Main server file
├── services/          # API service integrations
│   ├── supabase.js   # Supabase service
│   ├── cal.js        # Cal.com service
│   ├── gmail.js      # Gmail service
│   └── twilio.js     # Twilio service
└── utils/
    └── logger.js     # Winston logger configuration

添加新服务

  1. 在(指定位置)创建一个新的服务文件 src/services/
  2. 实现包含所需方法的服务类
  3. 添加终端节点到 src/server.js
  4. 更新MCP工具定义
  5. 添加环境变量到 env.example

测试

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

部署

Docker

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN mkdir logs
EXPOSE 3000
CMD ["npm", "start"]

生产环境的环境变量

确保在您的生产环境中设置所有必需的环境变量:

  • 为所有API密钥使用强且唯一的值
  • 设定 NODE_ENV=production
  • 配置适当 ALLOWED_ORIGINS
  • 设置适当的日志记录和监控

GitHub仓库设置

  1. 初始化Git仓库

    git init
    git add .
    git commit -m "Initial commit: MCP Server with API integrations"
    
  2. 创建GitHub仓库

    • 前往GitHub并创建一个新仓库
    • 不要用 README 初始化(我们已经有了一个)
  3. 将本地仓库连接到GitHub

    git remote add origin https://github.com/yourusername/your-repo-name.git
    git branch -M main
    git push -u origin main
    
  4. 设置 GitHub Actions (可选) 创造 .github/workflows/ci.yml:

    name: CI
    on: [push, pull_request]
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - uses: actions/setup-node@v3
            with:
              node-version: '18'
          - run: npm ci
          - run: npm test
    

安全考虑因素

  • 永远不要承诺 .env 文件提交到版本控制系统
  • 使用特定环境的API密钥
  • 实施适当的速率限制
  • 验证所有输入数据
  • 在生产环境中使用HTTPS
  • 定期轮换API密钥

故障排除

常见问题

  1. 端口已被使用

    # Change PORT in .env or kill existing process
    lsof -ti:3000 | xargs kill -9
    
  2. API认证错误

    • 验证API密钥是否正确
    • 检查API配额和限制
    • 确保Gmail的OAuth流程正确无误
  3. CORS 错误

    • 将您的前端URL添加到 ALLOWED_ORIGINS
    • 检查浏览器开发者工具以查找具体错误

日志

检查日志中的 logs/ 目录:

  • combined.log所有日志
  • error.log仅错误日志

做出贡献

  1. 为仓库创建分支
  2. 创建一个特性分支
  3. 进行你的更改
  4. 如适用,请添加测试
  5. 提交一个拉取请求

许可证

MIT 许可证 - 详见 LICENSE 文件。

支持

对于问题和疑问:

  • 查看故障排除部分
  • 审查每个服务的API文档
  • 在GitHub上打开一个议题(或问题)