MCP工具集
一个模块化的模型上下文协议(MCP)服务器,为文件系统操作、Gmail、Discord、Notion、LinkedIn等提供AI工具。
该服务器使用FastAPI构建,将多个工具集作为虚拟MCP端点公开,允许AI应用程序有选择地使用所需的工具。
特性
- 虚拟MCP服务器:单个进程,不同URL路径上的多个工具集
- 模块化工具集:系统、Gmail、Discord、Notion、LinkedIn(每个都可以独立访问)
- 安全:API密钥认证+路径沙盒
- 快速API:具有自动生成文档的现代异步Python框架
快速开始
1.安装依赖项
cd mcp-toolsets
pip install -r requirements.txt2.配置
# Copy the example config
cp .env.example .env
# Edit .env with your settings
nano .env3.跑步
python server.py服务器启动并将每个工具集作为虚拟MCP服务器公开:
http://127.0.0.1:8765/mcp/system → Filesystem/shell tools
http://127.0.0.1:8765/mcp/gmail → Email tools
http://127.0.0.1:8765/mcp/discord → Discord tools
http://127.0.0.1:8765/mcp/notion → Notion database tools
http://127.0.0.1:8765/mcp/linkedin → LinkedIn toolsAPI文件:http://127.0.0.1:8765/docs
4.连接您的MCP客户端
每个工具集都有自己的端点:
| 工具集 | URL |
|---|---|
| 系统 | http://127.0.0.1:8765/mcp/system |
| Gmail | http://127.0.0.1:8765/mcp/gmail |
| 不和谐 | http://127.0.0.1:8765/mcp/discord |
| 概念 | http://127.0.0.1:8765/mcp/notion |
| 领英 | http://127.0.0.1:8765/mcp/linkedin |
配置您的MCP客户端以连接到所需的工具集。每个工具集都公开了:
GET /tools-列出可用工具POST /execute-执行工具
配置
环境变量(通过 .env 文件):
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_API_KEY | dev-key-12345 | 用于身份验证的API密钥 |
MCP_PORT | 8765 | 要收听的端口 |
MCP_HOST | 127.0.0.1 | 要绑定的主机 |
MCP_BASE_DIR | ~ (home) | 文件系统操作的基本目录 |
MCP_ENABLED_TOOLSETS | system | 以逗号分隔的已启用工具集列表 |
LOG_LEVEL | INFO | 日志记录级别 |
API
所有端点都需要通过以下方式进行身份验证 Authorization: Bearer 头球
列出可用工具集
GET /mcp/toolsets每个工具集端点
每个工具集都有自己的端点:
GET /mcp/{toolset}/health - Health check
GET /mcp/{toolset}/tools - List tools
POST /mcp/{toolset}/execute - Execute a tool示例-列出系统工具:
GET /mcp/system/tools示例-执行一个工具:
POST /mcp/system/execute
Content-Type: application/json
{
"name": "list_directory",
"arguments": {
"path": "/Users/me/Documents"
}
}传统端点(所有工具)
为了向后兼容,这些端点为所有启用的工具提供服务:
GET /health - Health check (all toolsets)
GET /tools - List all tools
POST /execute - Execute any tool可用工具集
系统工具集(system)
| 工具 | 安全 | 描述 |
|---|---|---|
list_directory | ✅ | 列出文件和目录 |
read_file | ✅ | 读取带有行号的文件内容 |
save_file | ❌ | 将内容保存到文件 |
copy_file | ❌ | 复制或移动文件 |
run_command | ❌ | 运行shell命令 |
execute_python | ❌ | 执行Python代码 |
fetch_webpage | ✅ | 获取URL并转换为markdown |
persistent_shell | ❌ | 持久shell会话 |
Gmail工具集(gmail)
需要OAuth凭据。看 Gmail设置 在......下面
| 工具 | 安全 | 描述 |
|---|---|---|
send_email | ❌ | 发送电子邮件 |
reply_to_email | ❌ | 在帖子中回复电子邮件 |
search_emails | ✅ | 使用过滤器搜索电子邮件 |
get_email_content | ✅ | 获取完整的电子邮件内容 |
list_recent_emails | ✅ | 列出最近的电子邮件 |
list_email_attachments | ✅ | 列出电子邮件附件 |
download_email_attachments | ❌ | 下载附件 |
Gmail设置
- 创建谷歌云项目
- 首选 谷歌云控制台 - 创建新项目(或选择现有项目)
- 启用Gmail API
- 转到API和服务→ 图书馆 - 搜索“Gmail API”并启用它
- 创建OAuth凭据
- 转到API和服务→ 凭证 - 点击“创建凭据”→ “OAuth客户端ID” - 选择“桌面应用程序”作为应用程序类型 - 下载JSON文件
- 配置MCP服务器
# Save credentials in project directory
mv ~/Downloads/client_secret_xxx.json credentials.json
# Enable gmail toolset in .env
MCP_ENABLED_TOOLSETS=system,gmail- 首次运行-OAuth流程
- 启动服务器并调用任何Gmail工具 - 将打开一个浏览器窗口供Google登录 - 授予您的应用程序权限 - token.pickle 将保存以备将来使用
Discord工具集(discord)
需要Discord机器人令牌。看 Discord设置 在......下面
| 工具 | 安全 | 描述 |
|---|---|---|
list_discord_channels | ✅ | 列出可访问的频道 |
read_discord_messages | ✅ | 读取频道消息 |
send_discord_dm | ❌ | 发送直接消息 |
read_discord_dm_history | ✅ | 读取DM历史记录 |
send_discord_message | ❌ | 向频道发送消息 |
get_discord_user | ✅ | 获取用户信息 |
Discord设置
- 创建Discord应用程序
- 首选 Discord开发者门户 - 点击“新建应用程序”并命名
- 创建机器人
- 转到应用程序中的“Bot”部分 - 点击“添加机器人” - 在“特权网关意图”下,启用: - 消息内容意图 - 服务器成员意图
- 获取Bot令牌
- 在Bot部分,单击“重置令牌”以获取令牌 - 复制令牌(您只能看到一次!)
- 邀请机器人到服务器
- 转到“OAuth2”→ “URL生成器” - 选择范围: bot - 选择权限: Read Messages/View Channels, Send Messages, Read Message History - 复制生成的URL并在浏览器中打开 - 选择您的服务器并授权
- 配置MCP服务器
# Add to .env
DISCORD_BOT_TOKEN=your-bot-token-here
MCP_ENABLED_TOOLSETS=system,discord概念工具集(notion)
用于与Notion数据库交互的工具-读取模式、查询行、创建/更新条目。
| 工具 | 安全 | 描述 |
|---|---|---|
list_databases | ✅ | 列出与集成共享的所有数据库 |
get_database_schema | ✅ | 获取数据库结构和属性 |
query_database | ✅ | 从数据库查询行 |
query_database_filtered | ✅ | 使用Notion筛选器语法进行查询 |
get_database_row | ✅ | 按ID获取特定行 |
create_database_row | ❌ | 在数据库中创建新行 |
update_database_row | ❌ | 更新行属性(需要row_name才能查看) |
update_database_rows | ❌ | 一次更新多行(批量编辑) |
archive_database_row | ❌ | 存档(软删除)一行(需要row_name进行审阅) |
unarchive_database_row | ❌ | 还原已存档的行(需要row_name进行查看) |
search_notion | ✅ | 搜索数据库和页面 |
概念设置
- 创建概念集成
- 首选 我的集成 - 点击“新建集成” - 命名它(例如,“MCP服务器”) - 选择要连接的工作区 - 点击“提交”
- 获取集成令牌
- 在集成页面上,找到“内部集成令牌” - 点击“显示”并复制令牌(以开头 secret_)
- 通过集成共享数据库
- 打开要访问的每个Notion数据库 - 点击“…”→“添加连接” - 选择您的集成 - 这授予了对该数据库的集成访问权限
- 配置MCP服务器
# Add to .env
NOTION_API_KEY=secret_xxxxxxxxxxxxxxxxxxxxxxx
MCP_ENABLED_TOOLSETS=system,notion- 测试工具
# List databases
curl -X POST http://127.0.0.1:8765/mcp/notion/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "list_databases", "arguments": {}}'LinkedIn工具集(linkedin)
与LinkedIn交互的工具——个人资料查找、人员搜索、消息传递和批量数据检索。
⚠️ 重要:这使用了一个 非官方API 反向发动机LinkedIn的内部Voyager API。执行保守的利率限制以避免账户限制。负责任地使用。
| 工具 | 安全 | 描述 |
|---|---|---|
get_linkedin_profile | ✅ | 通过公共ID或URN获取配置文件 |
get_my_linkedin_profile | ✅ | 获取您自己的个人资料 |
get_linkedin_contact_info | ✅ | 获取联系信息(如果共享) |
search_linkedin_people | ✅ | 使用筛选器搜索人员 |
get_my_linkedin_connections | ✅ | 列出你的一级关系 |
list_linkedin_conversations | ✅ | 列出消息线程 |
get_linkedin_conversation | ✅ | 阅读对话中的消息 |
send_linkedin_message | ❌ | 发送直接消息 |
reply_to_linkedin_conversation | ❌ | 回复现有帖子 |
batch_get_linkedin_profiles | ❌ | 获取多个配置文件(最多20个) |
get_linkedin_rate_limit_status | ✅ | 检查剩余的每日限额 |
利率限制(保守默认值):
| 操作 | 延迟 | 每日限制 |
|---|---|---|
| 配置文件查找 | 10-30s | 500/天 |
| 搜索 | 30-60s | 100/天 |
| 消息 | 60-180s | 100/天 |
LinkedIn设置
LinkedIn身份验证可以通过3种方式完成(按优先顺序排列):
选项1:浏览器Cookie(推荐-自动)
如果您使用Brave、Chrome、Firefox或Edge登录LinkedIn,服务器将自动提取您的会话Cookie。只要确保:
- 您已在浏览器中登录LinkedIn
- 浏览器正在运行(或可以访问Cookie)
- 您正在以登录浏览器的同一用户身份运行Python
选项2:手动提取Cookie
如果自动cookie提取不起作用,您可以手动复制cookie:
- 在浏览器中打开LinkedIn 并确保您已登录
- 打开开发人员工具
- Chrome/Edge/Brave:按 F12 或 Ctrl+Shift+I (Windows)/ Cmd+Option+I (Mac) - Firefox:按 F12 或 Ctrl+Shift+I (Windows)/ Cmd+Option+I (Mac)
- 导航到Cookie
- Chrome/Edge/Brave:转到 应用 tab → 存储 → Cookie → https://www.linkedin.com - Firefox:转到 存储 tab → Cookie → https://www.linkedin.com
- 查找并复制这两个Cookie:
| Cookie名称 | 要复制的内容 |
|---|---|
li_at | 完整值(以开头的长字符串 AQ...) |
JSESSIONID | 完整值(在引号中,如 "ajax:123456789") |
> 💡 小贴士:双击值字段将其选中,然后复制。确保获得完整的值。
- 添加到您的
.env文件:
LINKEDIN_LI_AT=AQEDAQxxxxxxxxxxxxxx...
LINKEDIN_JSESSIONID='"ajax:1234567890123456789"'> ⚠️ 重要JSESSIONID格式:值必须包含双引号作为值的一部分。在.env中的整个内容周围使用单引号来保留它们: LINKEDIN_JSESSIONID='"ajax:..."'
选项3:用户名/密码
您也可以使用您的LinkedIn凭据进行身份验证,但如果LinkedIn要求2FA或显示CAPTCHA,则可能会失败:
# Add to .env
LINKEDIN_EMAIL=your-email@example.com
LINKEDIN_PASSWORD=your-password启用LinkedIn工具集
# Add to .env
MCP_ENABLED_TOOLSETS=system,linkedin测试身份验证
运行测试脚本以验证您的LinkedIn设置:
python test_linkedin_auth.py这将检查:
- 环境变量
- 浏览器cookie可用性
- 实际API连接
- 您的个人资料信息
故障排除
“LinkedIn身份验证失败”
- 确保您已在浏览器中登录LinkedIn
- 尝试关闭所有浏览器窗口并重新登录LinkedIn
- 如果自动提取失败,请使用选项2(手动Cookie)
- 检查您的Cookie是否未过期(通常持续数周)
用户名/密码出现“挑战”或2FA错误
- LinkedIn可能需要验证新登录
- 改用基于cookie的身份验证(选项1或2)
速率限制错误
- 该工具集强制执行保守的每日限制
- 使用
get_linkedin_rate_limit_status检查剩余配额 - 午夜重置限额
安全
- API密钥验证:所有请求都必须包含有效的API密钥
- 路径沙盒:所有文件系统操作仅限于
MCP_BASE_DIR - 安全标志:标记的工具
safe=False需要在插件中进行用户确认
发展
添加新工具集
- 创建
toolsets/my_toolset.py:
from .base import tool, RegisteredTool
@tool(
description="My awesome tool",
param1="Description of param1",
safe=True
)
def my_tool(param1: str) -> str:
return f"Result: {param1}"
TOOLS = [my_tool]- 注册
toolsets/__init__.py:
from . import my_toolset
register_toolset("my_toolset", my_toolset.TOOLS)- 启用
.env:
MCP_ENABLED_TOOLSETS=system,my_toolset在发展中奔跑
uvicorn server:app --reload --host 127.0.0.1 --port 8765项目结构
mcp-toolsets/
├── server.py # FastAPI main server
├── config.py # Configuration loading
├── requirements.txt # Python dependencies
├── test_linkedin_auth.py # LinkedIn auth test script
├── .env.example # Environment template
├── .env # Your local config (gitignored)
├── credentials.json # Gmail OAuth credentials (gitignored)
├── token.pickle # Gmail OAuth token (gitignored)
├── data/ # Runtime data (gitignored)
│ └── rate_limits/ # LinkedIn rate limit state
├── toolsets/
│ ├── __init__.py # Toolset registry
│ ├── base.py # @tool decorator
│ ├── system.py # Filesystem/shell tools
│ ├── gmail.py # Gmail tools
│ ├── discord.py # Discord tools
│ ├── notion.py # Notion database tools
│ └── linkedin.py # LinkedIn tools
├── integrations/
│ ├── __init__.py
│ ├── gmail_client.py # Gmail API client
│ ├── discord_client.py # Discord bot client
│ ├── notion_client.py # Notion API client
│ └── linkedin_client.py # LinkedIn API client
└── utils/
├── __init__.py
└── rate_limiter.py # Rate limiting utilities兼容客户端
此MCP服务器可与支持模型上下文协议的任何客户端配合使用:
- 黑曜石AI插件 -基于AI的黑曜石笔记处理
- 任何其他兼容MCP的AI客户端
许可证
麻省理工学院
