多平台集成服务

一个集成了Zoom、GitHub和Google Sheets API的模型上下文协议服务器,使AI助手能够管理会议、仓库和电子表格数据。

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

使用说明

自定义MCP服务器

一种集成了以下功能的模型上下文协议(MCP)服务器 变焦, GitHub,以及 谷歌表格 API,使AI助手能够管理会议、存储库和电子表格数据。

特性

Zoom集成

  • zoom_list_meetings -列出用户的所有会议
  • zoom_get_meeting -获取详细的会议信息
  • zoom_create_meeting -创建新会议
  • zoom_delete_meeting -删除会议

GitHub 集成

  • github_list_repos -列出存储库
  • github_get_repo -获取存储库详细信息
  • github_list_issues -列出存储库问题
  • github_create_issue -创建新问题
  • github_create_pull_request -创建拉取请求
  • 完整的存储库管理、分支操作、提交、文件等

电子表格集成(语义匹配)

  • spreadsheet_transfer_data -使用LLM支持的语义匹配在电子表格之间传输数据
  • spreadsheet_preview_matching -无需数据传输即可预览匹配
  • 支持任何唯一的列类型(城市、产品、名称等)
  • 信心评分和不匹配报告
  • 安全测试的干运行模式

安装

先决条件

  • Node.js 18+
  • 缩放API凭据(可选)
  • GitHub个人访问令牌(可选)
  • Google Sheets API密钥(可选,用于电子表格功能)
  • OpenAI API密钥(可选,用于电子表格语义匹配)

设置

  1. 安装依赖项:
npm install
  1. 构建项目:
npm run build
  1. 配置环境变量:
cp .env.example .env
# Edit .env with your credentials

配置

创建一个 .env 使用API凭据提交文件:

# Zoom OAuth 2.0 (Server-to-Server OAuth App)
# 1. Go to https://marketplace.zoom.us/develop/apps
# 2. Create "Server-to-Server OAuth" app
# 3. Copy Account ID, Client ID, and Client Secret
ZOOM_ACCOUNT_ID=your_zoom_account_id
ZOOM_CLIENT_ID=your_zoom_client_id
ZOOM_CLIENT_SECRET=your_zoom_client_secret

# GitHub Token (from https://github.com/settings/tokens)
GITHUB_TOKEN=your_github_token

# Google Sheets API Key
# 1. Go to https://console.cloud.google.com/
# 2. Enable Google Sheets API
# 3. Create API Key in Credentials
GOOGLE_SHEETS_API_KEY=your_google_sheets_api_key

# OpenAI API Key (for spreadsheet semantic matching)
# Get from https://platform.openai.com/api-keys
OPENAI_API_KEY=your_openai_api_key

看 表格_TOOL.md 获取详细的电子表格工具文档。

用法

运行服务器

开发模式:

npm run dev

生产:

npm run build
npm start

OpenCode集成

添加到您的OpenCode配置(~/.opencode/config.json 或 opencode.jsonc):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "productivity-server": {
      "type": "local",
      "command": ["node", "/path/to/custom-mcp-server/build/index.js"],
      "enabled": true,
      "environment": {
        "ZOOM_ACCOUNT_ID": "your_zoom_account_id",
        "ZOOM_CLIENT_ID": "your_zoom_client_id",
        "ZOOM_CLIENT_SECRET": "your_zoom_client_secret",
        "GITHUB_TOKEN": "your_github_token",
        "GOOGLE_SHEETS_API_KEY": "your_google_sheets_api_key",
        "OPENAI_API_KEY": "your_openai_api_key"
      }
    }
  }
}

配合提示使用:

配置后,您可以在提示中引用服务器:

List my Zoom meetings using productivity-server

或者创建GitHub问题:

Create a GitHub issue in my-repo about bug fix using productivity-server

启用/禁用工具:

您还可以在配置中使用通配符启用或禁用特定工具:

{
  "mcp": {
    "productivity-server": { ... }
  },
  "tools": {
    "productivity-server_*": true
  }
}

项目结构

src/
├── index.ts              # Server entry point
├── config/               # Configuration
│   └── index.ts
├── providers/            # API clients
│   ├── zoom/
│   │   ├── client.ts
│   │   └── types.ts
│   ├── github/
│   │   ├── client.ts
│   │   └── types.ts
│   └── spreadsheet/
│       ├── google-client.ts   # Google Sheets API client
│       ├── matcher.ts         # Semantic matching with OpenAI
│       └── types.ts           # Spreadsheet types
├── tools/                # MCP tools
│   ├── zoom-tools.ts
│   ├── github-tools.ts
│   └── spreadsheet-tools.ts   # Spreadsheet transfer tools
└── utils/                # Utilities
    └── logger.ts

API 文档

缩放工具

zoom_list_meetings

列出用户的所有Zoom会议。

输入:

  • userId (可选):用户ID(默认值:当前用户)
  • pageSize (可选):每页结果(1-300,默认值:30)

输出: 包含ID、主题、开始时间、持续时间和加入URL的会议列表。

zoom_getmeeting

获取特定会议的详细信息。

输入:

  • meetingId (必填):会议ID

zoom_create_meting

创建新的Zoom会议。

输入:

  • topic (必填):会议标题
  • type (可选):1=即时,2=计划(默认),3=循环_无固定,8=循环_固定
  • startTime (可选):ISO 8601日期时间
  • duration (可选):持续时间(分钟)(默认值:60)
  • timezone (可选):时区(默认:UTC)
  • password (可选):会议密码
  • agenda (可选):会议描述

zoom_delete_meeting

删除Zoom会议。

输入:

  • meetingId (必填):要删除的会议ID

GitHub工具

github列表返回

列出用户的存储库。

输入:

  • username (可选):GitHub用户名(默认:经过身份验证的用户)
  • page (可选):页码(默认:1)
  • perPage (可选):每页结果(1-100,默认值:30)

github _ getrepo

获取存储库详细信息。

输入:

  • owner (必填):存储库所有者
  • repo (必填):存储库名称

github列表问题

列出存储库问题。

输入:

  • owner (必填):存储库所有者
  • repo (必填):存储库名称
  • state (可选):按状态筛选-打开、关闭、全部(默认:打开)
  • page (可选):页码(默认:1)
  • perPage (可选):每页问题数(默认值:30)

github创建问题

创建新问题。

输入:

  • owner (必填):存储库所有者
  • repo (必填):存储库名称
  • title (必填):发行标题
  • body (可选):问题描述
  • labels (可选):标签名称数组
  • assignees (可选):用户名数组

github创建包请求

创建新的pull请求。

输入:

  • owner (必填):存储库所有者
  • repo (必填):存储库名称
  • title (必填):PR标题
  • head (必填):变更分行
  • base (必填):目标分支
  • body (可选):PR描述
  • draft (可选):创建为草稿(默认值:false)

电子表格工具

电子表格_transfer_data

使用LLM支持的语义匹配在Google表格之间传输数据。

输入:

  • masterSpreadsheetUrl (必填):主谷歌电子表格的URL
  • sourceSpreadsheetUrl (必填):源谷歌电子表格的URL
  • masterUniqueColumn (必填):主数据中的唯一标识符列名
  • sourceUniqueColumn (必填):源中的唯一标识符列名
  • valueColumns (必需):要传输的列映射数组
    • sourceColumn:源中的列名
    • masterColumn:master中的列名
    • operation:插入、更新、求和或求平均值
  • options (可选):
    • dryRun:预览而不更新(默认值:false)
    • confidenceThreshold:最小匹配置信度0-1(默认值:0.8)
    • matchModel:OpenAI模型(默认:gpt-4o-mini)

例子:

{
  "masterSpreadsheetUrl": "https://docs.google.com/spreadsheets/d/MASTER_ID/edit",
  "sourceSpreadsheetUrl": "https://docs.google.com/spreadsheets/d/SOURCE_ID/edit",
  "masterUniqueColumn": "Kota",
  "sourceUniqueColumn": "Nama Wilayah",
  "valueColumns": [
    {
      "sourceColumn": "Populasi 2024",
      "masterColumn": "Jumlah Penduduk",
      "operation": "update"
    }
  ],
  "options": {
    "dryRun": true,
    "confidenceThreshold": 0.8
  }
}

输出:

  • 成功状态和模拟运行标志
  • 汇总统计数据(匹配、不匹配、平均置信度)
  • 带有置信度得分的详细映射
  • 不匹配项目及其原因列表
  • 更新的电子表格URL(如果不是模拟运行)

电子表格_预览_匹配

预览语义匹配,不进行数据传输。

输入:

  • masterSpreadsheetUrl (必填):主电子表格的URL
  • sourceSpreadsheetUrl (必填):源电子表格的URL
  • masterUniqueColumn (必填):主数据中的唯一列
  • sourceUniqueColumn (必填):源中的唯一列
  • matchModel (可选):要使用的OpenAI模型

输出:

  • 两个电子表格中的唯一值示例
  • 估计的匹配计数和准确性
  • 样本匹配与推理

用例: 在实际转移之前验证匹配方法。

看 表格_TOOL.md 查看详细的文档和示例。

许可证

麻省理工学院