模块化AI工具集服务器

一个基于FastAPI的模块化MCP服务器,提供文件系统操作、Gmail、Discord、Notion和LinkedIn等多种AI工具集,支持按需选择使用。

  • by Maximophone
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Maximophone/mcp-toolsets

使用说明

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.txt

2.配置

# Copy the example config
cp .env.example .env

# Edit .env with your settings
nano .env

3.跑步

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 tools

API文件: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 <api_key> 头球

列出可用工具集

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设置

  1. 创建谷歌云项目

  2. 启用Gmail API

    • 转到API和服务→ 图书馆
    • 搜索“Gmail API”并启用它
  3. 创建OAuth凭据

    • 转到API和服务→ 凭证
    • 点击“创建凭据”→ “OAuth客户端ID”
    • 选择“桌面应用程序”作为应用程序类型
    • 下载JSON文件
  4. 配置MCP服务器

    # Save credentials in project directory
    mv ~/Downloads/client_secret_xxx.json credentials.json
    
    # Enable gmail toolset in .env
    MCP_ENABLED_TOOLSETS=system,gmail
    
  5. 首次运行-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设置

  1. 创建Discord应用程序

  2. 创建机器人

    • 转到应用程序中的“Bot”部分
    • 点击“添加机器人”
    • 在“特权网关意图”下,启用:
      • 消息内容意图
      • 服务器成员意图
  3. 获取Bot令牌

    • 在Bot部分,单击“重置令牌”以获取令牌
    • 复制令牌(您只能看到一次!)
  4. 邀请机器人到服务器

    • 转到“OAuth2”→ “URL生成器”
    • 选择范围: bot
    • 选择权限: Read Messages/View Channels, Send Messages, Read Message History
    • 复制生成的URL并在浏览器中打开
    • 选择您的服务器并授权
  5. 配置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 ✅ 搜索数据库和页面

概念设置

  1. 创建概念集成

    • 首选 我的集成
    • 点击“新建集成”
    • 命名它(例如,“MCP服务器”)
    • 选择要连接的工作区
    • 点击“提交”
  2. 获取集成令牌

    • 在集成页面上,找到“内部集成令牌”
    • 点击“显示”并复制令牌(以开头 secret_)
  3. 通过集成共享数据库

    • 打开要访问的每个Notion数据库
    • 点击“…”→“添加连接”
    • 选择您的集成
    • 这授予了对该数据库的集成访问权限
  4. 配置MCP服务器

    # Add to .env
    NOTION_API_KEY=secret_xxxxxxxxxxxxxxxxxxxxxxx
    MCP_ENABLED_TOOLSETS=system,notion
    
  5. 测试工具

    # 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:

  1. 在浏览器中打开LinkedIn 并确保您已登录

  2. 打开开发人员工具

    • Chrome/Edge/Brave:按 F12 或 Ctrl+Shift+I (Windows)/ Cmd+Option+I (Mac)
    • Firefox:按 F12 或 Ctrl+Shift+I (Windows)/ Cmd+Option+I (Mac)
  3. 导航到Cookie

    • Chrome/Edge/Brave:转到 应用 tab → 存储 → Cookie → https://www.linkedin.com
    • Firefox:转到 存储 tab → Cookie → https://www.linkedin.com
  4. 查找并复制这两个Cookie:

    Cookie名称 要复制的内容
    li_at 完整值(以开头的长字符串 AQ...)
    JSESSIONID 完整值(在引号中,如 "ajax:123456789")

    💡 小贴士:双击值字段将其选中,然后复制。确保获得完整的值。

  5. 添加到您的 .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 检查剩余配额
  • 午夜重置限额

安全

  1. API密钥验证:所有请求都必须包含有效的API密钥
  2. 路径沙盒:所有文件系统操作仅限于 MCP_BASE_DIR
  3. 安全标志:标记的工具 safe=False 需要在插件中进行用户确认

发展

添加新工具集

  1. 创建 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]
  1. 注册 toolsets/__init__.py:
from . import my_toolset
register_toolset("my_toolset", my_toolset.TOOLS)
  1. 启用 .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客户端

许可证

麻省理工学院