Circle社区MCP服务器

一个为Circle社区提供97种工具支持的完整MCP服务器,涵盖成员管理、空间管理、内容管理、事件管理等功能。

  • by DeepakChander
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 DeepakChander/circle-mcp

使用说明

Circle MCP服务器——Circle社区的完整MCP服务器

最全面 模型上下文协议 (MCP)服务器 圆形 社区。 97个工具,涵盖成员、空间、帖子、评论、事件、课程、访问组、标签、游戏化和完整的Admin V2 API-所有这些都可以从Cursor、Claude Code、VS Code、Windsurf和Claude Desktop访问。

为什么选择Circle MCP?

功能 圆形MCP服务器
工具总数 97
Circle Admin V2 API覆盖范围 78工具
API成员(用户) 19工具
OAuth 2.1+PKCE 是
可流式HTTP传输 是
只读安全模式 是
适用于Cursor、Claude Code、VS Code、Windsurf、Claude Desktop 是
终端用户零配置 是
Docker+PM2就绪 是

面向最终用户的零配置设置

您的组织管理员为您提供了一个URL。将其粘贴到IDE中,然后开始使用Circle社区工具:

{
  "mcpServers": {
    "circle": {
      "url": "https://your-domain.com/mcp"
    }
  }
}

就是这样。首次使用工具后,通过Google OAuth在浏览器中进行身份验证。


运作原理

  1. 用户粘贴MCP URL 在他们的IDE中(光标、克劳德代码、VS代码、Windsurf、克劳德桌面)
  2. 首次使用工具 使用PKCE触发基于浏览器的Google OAuth
  3. 服务器检查 如果谷歌电子邮件是Circle社区的注册成员
  4. 如果是 --97个工具可用(个人资料、课程、帖子、活动、管理员等)
  5. 如果不 --拒绝访问(“电子邮件未在此社区注册”)
  6. 令牌自动刷新 --30天内无需重新身份验证

快速入门(适用于组织管理员)

1.克隆和安装

git clone https://github.com/DeepakChander/circle-mcp.git
cd circle-mcp
npm install

2.设置谷歌云OAuth

  1. 首选 Google 云控制台 --创建项目
  2. API和服务 > 图书馆 >启用 Google+API
  3. API和服务 > OAuth同意屏幕 >配置(外部,添加测试用户)
  4. API和服务 > 凭证 > 创建凭据 > OAuth 2.0客户端ID
    • 类型: Web应用程序
    • 授权重定向URI: http://localhost:3000/callback
  5. 复制 客户端ID 和 客户端密钥

3.获取Circle API证书

  1. 登录您的Circle社区管理面板
  2. 设置 > API >生成一个 无头访问令牌
  3. 设置 > API >得到你的 管理员V2令牌 (78个管理工具需要)
  4. 注意你的社区URL(例如。, https://community.yourorg.com)

4.配置环境

cp .env.example .env

编辑 .env:

# Circle LMS (Required)
CIRCLE_HEADLESS_TOKEN=your_circle_headless_token
CIRCLE_ADMIN_V2_TOKEN=your_circle_admin_v2_token
CIRCLE_COMMUNITY_URL=https://your-community.circle.so
CIRCLE_HEADLESS_BASE_URL=https://app.circle.so

# Google OAuth (Required)
GCP_CLIENT_ID=your-client-id.apps.googleusercontent.com
GCP_CLIENT_SECRET=GOCSPX-your-secret
GCP_REDIRECT_URI=http://localhost:3000/callback

# Server
SERVER_URL=http://localhost:3000
PORT=3000

5.构建和运行

npm run build
npm run start:http

6.验证

# Health check
curl http://localhost:3000/health

# OAuth metadata
curl http://localhost:3000/.well-known/oauth-authorization-server

IDE设置

光标

创建 .cursor/mcp.json 在您的项目中:

{
  "mcpServers": {
    "circle": {
      "url": "https://your-domain.com/mcp"
    }
  }
}

克劳德代码(CLI)

claude mcp add circle --transport http https://your-domain.com/mcp

VS Code

增添 .vscode/settings.json:

{
  "mcp.servers": {
    "circle": {
      "type": "http",
      "url": "https://your-domain.com/mcp"
    }
  }
}

帆板运动

编辑 ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "circle": {
      "url": "https://your-domain.com/mcp"
    }
  }
}

克劳德桌面版

编辑 claude_desktop_config.json:

{
  "mcpServers": {
    "circle": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://your-domain.com/mcp"]
    }
  }
}

全部97个工具

Circle MCP服务器提供 97工具 跨越两个API层:

  • 成员API(19个工具) --通过Google OAuth进行身份验证的每个用户工具。每个用户只能访问自己的数据。
  • Admin V2 API(78个工具) --使用Circle admin V2令牌的完全管理功能。管理成员、空间、帖子、事件、课程、访问组、标签和社区设置。

成员API工具(19个工具)

这些工具代表经过身份验证的用户进行操作。

配置文件(2个工具)

工具 说明
get_my_profile 获取您的Circle个人资料详细信息
update_my_profile 更新姓名、简介、标题、位置、网站

课程(2个工具)

工具 说明
get_my_courses 列出您已注册的课程
get_course_details 获取特定课程的详细信息

帖子(5个工具)

工具 说明
get_posts 列出来自某个空间或所有空间的帖子
create_post 在空间中创建新帖子
update_post 编辑自己的帖子
delete_post 删除您自己的帖子
like_post 喜欢或不喜欢某个帖子

空格(1个工具)

工具 说明
get_spaces 列出所有社区空间

活动(2个工具)

工具 说明
get_events 列出即将举行的活动
rsvp_event 注册活动

评论(4个工具)

工具 说明
get_comments 获取帖子评论
add_comment 对帖子发表评论
delete_comment 删除您自己的评论
like_comment 喜欢或不喜欢评论

订阅源和通知(3个工具)

工具 说明
get_feed 获取您的个性化家庭订阅源
get_notifications 获取您的通知
get_messages 获取您的直接消息

管理V2 API工具(78个工具)

通过Circle admin V2 API提供完整的管理功能。需要 CIRCLE_ADMIN_V2_TOKEN 在你的 .env在以下情况下,破坏性操作(创建、更新、删除)将被禁用 READ_ONLY_MODE=true.

会员管理(7个工具)

工具 类型 描述
admin_list_members 阅读 按页码列出所有社区成员
admin_get_member 读取 按ID获取特定成员
admin_search_members 阅读 通过电子邮件、姓名或查询搜索成员
admin_invite_member 写 通过电子邮件邀请新成员
admin_update_member 写入 更新会员资料、管理员/主持人状态
admin_ban_member 写 禁止社区成员
admin_remove_member 写入 从社区中删除成员

空间管理(13种工具)

工具 类型 描述
admin_list_spaces 阅读 列出所有社区空间
admin_get_space 读取 按ID获取特定空间
admin_list_space_groups 阅读 列出所有空间组
admin_get_space_group 阅读 获取特定的空间组
admin_list_space_members 读取 列出空间成员
admin_create_space 写入 创建新空间
admin_update_space 写入 更新空间设置
admin_delete_space 写入 删除空格
admin_create_space_group 写入 创建新的空间组
admin_update_space_group 写入 更新空间组
admin_delete_space_group 写入 删除空间组
admin_add_space_member 写入 向空间添加成员
admin_remove_space_member 写入 从空间中删除成员

内容管理(15个工具)

工具 类型 描述
admin_list_posts 阅读 列出带有可选空格/状态过滤器的帖子
admin_get_post 阅读 通过ID获取特定帖子
admin_list_comments 阅读 列出按帖子筛选的评论
admin_get_comment 阅读 按ID获取特定评论
admin_list_topics 阅读 列出按空格筛选的主题
admin_list_all_comments 阅读 列出社区中的所有评论
admin_create_post 写 在空间中创建新帖子
admin_update_post 撰写 更新现有帖子
admin_delete_post 写 删除帖子
admin_create_comment 写 在帖子上发表评论
admin_update_comment 写 更新评论
admin_delete_comment 写 删除评论
admin_create_topic 编写 创建新主题
admin_update_topic 撰写 更新主题
admin_delete_topic 写 删除主题

事件管理(8个工具)

工具 类型 描述
admin_list_events 读取 使用空间/状态筛选器列出事件
admin_get_event 读取 按ID获取特定事件
admin_list_event_attendees 阅读 列出活动的与会者
admin_create_event 编写 创建新事件(虚拟、面对面、混合)
admin_update_event 写入 更新事件详细信息
admin_delete_event 写入 删除事件
admin_add_event_attendee 写入 将成员添加为与会者
admin_remove_event_attendee 写入 从活动中删除与会者

课程管理(11个工具)

工具 类型 描述
admin_list_courses 阅读 列出社区中的所有课程
admin_get_course 阅读 按ID获取特定课程
admin_list_course_sections 阅读 列出课程的各个部分
admin_list_course_lessons 阅读 在课程部分列出课程
admin_create_course_section 编写 创建新的课程部分
admin_update_course_section 编写 更新课程部分
admin_delete_course_section 写入 删除课程部分
admin_create_course_lesson 编写 创建新课程
admin_update_course_lesson 编写 更新课程
admin_delete_course_lesson 写 删除一节课
admin_complete_lesson 写 为成员标记课程完成

访问组管理(9个工具)

工具 类型 描述
admin_list_access_groups 读取 列出所有访问组
admin_get_access_group 读取 获取特定访问组
admin_list_access_group_members 读取 列出访问组中的成员
admin_create_access_group 写入 创建新的访问组
admin_update_access_group 写入 更新访问组
admin_archive_access_group 写入 存档访问组
admin_unarchive_access_group 写入 取消存档访问组
admin_add_access_group_member 写入 将成员添加到访问组
admin_remove_access_group_member 写入 从访问组中删除成员

参与度和标签(9个工具)

工具 类型 描述
admin_get_leaderboard 阅读 获取游戏化排行榜
admin_list_member_tags 读取 列出所有成员标签
admin_list_member_tags_for_member 读取 列出分配给成员的标签
admin_search_members_by_email 阅读 通过电子邮件地址查找成员
admin_create_member_tag 写入 创建新成员标签
admin_update_member_tag 写入 更新成员标签
admin_delete_member_tag 写入 删除成员标签
admin_tag_member 写入 为成员分配标签
admin_send_member_message 写 向成员发送直接消息

社区设置(6个工具)

工具 类型 描述
admin_get_community 阅读 获取社区信息和设置
admin_list_profile_fields 读取 列出自定义配置文件字段
admin_list_all_topics 阅读 列出整个社区的所有主题
admin_list_all_course_sections 阅读 列出所有课程部分
admin_list_all_course_lessons 阅读 列出所有课程
admin_update_community 写 更新社区名称和描述

建筑

IDE (Cursor / Claude Code / VS Code / Windsurf / Claude Desktop)
    |
    |  POST /mcp  (Streamable HTTP + JSON-RPC)
    |  Authorization: Bearer <mcp_token>
    |
    v
+---------------------------------------------------+
|  Express HTTP Server                               |
|                                                    |
|  OAuth 2.1 Endpoints:                              |
|  GET  /.well-known/oauth-protected-resource        |
|  GET  /.well-known/oauth-authorization-server      |
|  POST /register  (Dynamic Client Registration)     |
|  GET  /authorize (redirects to Google OAuth)       |
|  GET  /callback  (Google -> Circle auth -> token)  |
|  POST /token     (code exchange + refresh)         |
|                                                    |
|  MCP Endpoints (Streamable HTTP):                  |
|  POST   /mcp  (JSON-RPC tool calls)               |
|  GET    /mcp  (SSE notifications)                  |
|  DELETE /mcp  (session termination)                |
+-------------------------+-------------------------+
                          |
            +-------------+-------------+
            |                           |
            v                           v
+------------------------+  +------------------------+
|  Circle Headless API   |  |  Circle Admin V2 API   |
|  (Per-User, 19 tools)  |  |  (Admin, 78 tools)     |
|  /api/v1/              |  |  /api/admin/v2/        |
+------------------------+  +------------------------+

OAuth流

1. IDE sends POST /mcp (no token)
2. Server returns 401 + WWW-Authenticate header
3. IDE discovers OAuth metadata via .well-known endpoints
4. IDE registers as OAuth client (POST /register)
5. IDE opens browser to /authorize with PKCE challenge
6. Server redirects to Google OAuth
7. User signs in with Google
8. Google redirects back to /callback with auth code
9. Server exchanges Google code for email
10. Server verifies email exists in Circle community
11. Server generates MCP authorization code
12. IDE exchanges code for MCP access token (POST /token)
13. IDE sends POST /mcp with Bearer token — 97 tools available!

生产部署

环境变化

设置 本地主机 生产
SERVER_URL http://localhost:3000 https://your-domain.com
GCP_REDIRECT_URI http://localhost:3000/callback https://your-domain.com/callback
NODE_ENV development production
ALLOWED_ORIGINS * https://your-domain.com

Nginx+SSL

sudo apt install nginx certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

Nginx配置:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # SSE support
        proxy_buffering off;
        proxy_cache_bypass $http_upgrade;
        proxy_read_timeout 300s;
    }
}

用PM2跑步

npm run build
pm2 start dist/http-server.js --name circle-mcp
pm2 save

码头工人

docker build -t circle-mcp .
docker run -d --env-file .env -p 3000:3000 --name circle-mcp circle-mcp

多组织支持

这是开源的。每个组织都使用自己的Circle+Google OAuth凭据部署自己的实例。部署是完全独立的。

例子: AcademyX希望为他们的社区提供Circle MCP。

  1. 克隆此仓库并配置 .env 拥有AcademyX的Circle+GCP证书
  2. 部署和指向 mcp.academyx.com 到服务器
  3. 给学生: {"mcpServers": {"circle": {"url": "https://mcp.academyx.com/mcp"}}}

只有AcademyX成员(在其Circle社区中注册的电子邮件)可以进行身份验证。


安全

功能 实现
PKCE(S256) 对所有OAuth流都是强制性的。防止授权码被拦截。
状态参数 通过谷歌重定向。防止CSRF。
不透明令牌 UUID,而不是JWT。服务器端查找。可立即撤销。
令牌到期 访问时间:1小时。刷新:30天。验证码:10分钟。
代币轮换 刷新授权发放新的刷新令牌;旧的被删除了。
会员检查 电子邮件必须存在于Circle社区中。非会员被拒绝。
只读模式 设置 READ_ONLY_MODE=true 禁用所有写入/删除操作。
管理员V2隔离 管理工具仅在以下情况下注册 CIRCLE_ADMIN_V2_TOKEN 已配置。
超文本传输安全协议 生产中需要(Nginx+Let’s Encrypt)。
定期清理 每5分钟清除一次过期的令牌、代码和过时的注册。

环境变量

变量 必填 默认 描述
CIRCLE_HEADLESS_TOKEN 是 - 圈API无头令牌(成员API)
CIRCLE_ADMIN_V2_TOKEN 无 - Circle Admin V2 API令牌(启用78个管理工具)
CIRCLE_COMMUNITY_URL 是 -- 您的Circle社区URL
CIRCLE_HEADLESS_BASE_URL 没有 https://app.circle.so 圈出API基础URL
GCP_CLIENT_ID 是 -- 谷歌OAuth客户端ID
GCP_CLIENT_SECRET 是 -- 谷歌OAuth客户端密码
GCP_REDIRECT_URI 是的 http://localhost:3000/callback OAuth重定向URI
SERVER_URL 没有 http://localhost:3000 公共服务器URL
PORT 没有 3000 服务器端口
HOST 没有 0.0.0.0 服务器主机
NODE_ENV 没有 development 环境
LOG_LEVEL 没有 info 日志记录级别
READ_ONLY_MODE 没有 false 禁用所有写入操作
MCP_TOKEN_EXPIRY 没有 3600 访问令牌TTL(秒)
MCP_REFRESH_TOKEN_EXPIRY 没有 2592000 刷新令牌TTL(30天)
ENABLE_RATE_LIMITING 没有 true 速率限制API调用
MAX_REQUESTS_PER_MINUTE 没有 60 速率限制阈值
ALLOWED_ORIGINS 没有 * CORS允许的来源

项目结构

circle-mcp/
├── src/
│   ├── index.ts                      # Stdio entry point
│   ├── http-server.ts                # HTTP server entry point (production)
│   ├── server.ts                     # MCP server factory
│   ├── auth/
│   │   ├── mcp-oauth-server.ts       # OAuth 2.1 Authorization Server
│   │   ├── session-manager.ts        # Token-to-email + session tracking
│   │   ├── gcp-auth.ts               # Google OAuth 2.0 client
│   │   ├── auth.ts                   # Circle headless authentication
│   │   ├── integrated-auth-manager.ts
│   │   ├── token-manager.ts          # In-memory token storage
│   │   └── types.ts
│   ├── api/
│   │   ├── client.ts                 # Circle Headless API client
│   │   ├── admin-v2-client.ts        # Circle Admin V2 API client
│   │   └── endpoints.ts              # API URL builders
│   ├── tools/
│   │   ├── index.ts                  # Tool registration hub
│   │   ├── auth-wrapper.ts           # Auth wrappers
│   │   ├── profile.ts                # Member: Profile (2 tools)
│   │   ├── courses.ts                # Member: Courses (2 tools)
│   │   ├── posts.ts                  # Member: Posts (5 tools)
│   │   ├── spaces.ts                 # Member: Spaces (1 tool)
│   │   ├── events.ts                 # Member: Events (2 tools)
│   │   ├── notifications.ts          # Member: Notifications (1 tool)
│   │   ├── messages.ts               # Member: Messages (1 tool)
│   │   ├── feed.ts                   # Member: Feed (1 tool)
│   │   ├── comments.ts               # Member: Comments (4 tools)
│   │   ├── admin-members.ts          # Admin: Members (7 tools)
│   │   ├── admin-spaces.ts           # Admin: Spaces (13 tools)
│   │   ├── admin-content.ts          # Admin: Content (15 tools)
│   │   ├── admin-events.ts           # Admin: Events (8 tools)
│   │   ├── admin-courses.ts          # Admin: Courses (11 tools)
│   │   ├── admin-access.ts           # Admin: Access Groups (9 tools)
│   │   ├── admin-engagement.ts       # Admin: Engagement (9 tools)
│   │   └── admin-community.ts        # Admin: Community (6 tools)
│   ├── config/
│   │   ├── config.ts                 # Environment config loader
│   │   └── constants.ts              # API endpoint constants
│   ├── types/
│   │   ├── mcp.ts                    # MCP types
│   │   ├── circle.ts                 # Circle API types
│   │   └── index.ts
│   ├── prompts/
│   │   └── index.ts
│   ├── resources/
│   │   └── index.ts
│   └── utils/
│       ├── logger.ts                 # Winston logger
│       ├── errors.ts
│       ├── response-handler.ts
│       └── validators.ts
├── .env.example
├── package.json
├── tsconfig.json
├── Dockerfile
├── docker-compose.yml
├── nginx.conf
└── ecosystem.config.js               # PM2 config

脚本

npm run build        # Compile TypeScript
npm run start        # Start stdio server (local dev)
npm run start:http   # Start HTTP server (production)
npm run dev          # Dev mode with watch (stdio)
npm run dev:http     # Dev mode with watch (HTTP)
npm run typecheck    # Type check without emitting
npm run test         # Run tests

故障排除

redirect_uri_mismatch 来自谷歌

您的GCP OAuth重定向URI不匹配。在 Google 云控制台 >凭据>您的OAuth客户端,准确添加:

  • 本地主机: http://localhost:3000/callback
  • 生产: https://your-domain.com/callback

“电子邮件未在此社区中注册”

Google帐户电子邮件不是Circle社区的成员。必须先将用户添加到Circle。

管理工具未出现

确保 CIRCLE_ADMIN_V2_TOKEN 设置在您的 .env.Admin V2工具仅在配置令牌时注册。

端口3000已在使用中

改变 PORT 在 .env 并更新 GCP_REDIRECT_URI 因此。

MCP未在IDE中连接

  1. 验证服务器是否正在运行: curl http://localhost:3000/health
  2. 检查OAuth元数据: curl http://localhost:3000/.well-known/oauth-authorization-server
  3. 确保IDE配置中的URL以结尾 /mcp

贡献

欢迎投稿!请打开问题或拉取请求。


许可证

麻省理工学院


建于 模型上下文协议 和 圈API