使用说明
自定义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密钥(可选,用于电子表格语义匹配)
设置
- 安装依赖项:
npm install
- 构建项目:
npm run build
- 配置环境变量:
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(必填):主谷歌电子表格的URLsourceSpreadsheetUrl(必填):源谷歌电子表格的URLmasterUniqueColumn(必填):主数据中的唯一标识符列名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(必填):主电子表格的URLsourceSpreadsheetUrl(必填):源电子表格的URLmasterUniqueColumn(必填):主数据中的唯一列sourceUniqueColumn(必填):源中的唯一列matchModel(可选):要使用的OpenAI模型
输出:
- 两个电子表格中的唯一值示例
- 估计的匹配计数和准确性
- 样本匹配与推理
用例: 在实际转移之前验证匹配方法。
看 表格_TOOL.md 查看详细的文档和示例。
许可证
麻省理工学院
