An open source Circle Admin API v2 MCP server and shared task CLI with 170 tools, private accounts and a Claude Desktop extension.
This free Circle MCP server and CLI gives your AI real access to Circle Admin API v2 community operations. Read members, spaces and posts, draft community content, inspect courses and events, and perform specifically requested administrative actions.
It's one install with 2 ways in. Claude, Codex, Cursor or any other MCP app calls its 170 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.
Here's what the Circle MCP server and CLI is, how to set it up in each app, and every tool it has.
What is the Circle MCP server & CLI?
The Circle MCP server & CLI is a free, open source program that lets AI agents work with community members, content, courses, events and workflows through the documented Admin API for you, in 2 ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.
You ask in plain language. Your AI picks the right tool, and the server makes the call directly to Circle Admin API v2.
The CLI is the same program as commands. circle-cli list-spaces runs the same code your AI runs when you ask which community spaces your token can access, whether an agent like Claude Code runs it or you do.
What can you ask it?
Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:
Try askingShow this community’s spaces and recent posts.
Find the intended member before changing access.
Draft my community post and leave it unpublished.
Read that existing post ID before any publishing update.
Inspect course sections and lessons.
Show form submissions and the requested live-room transcript.
Read this workflow before the activation I requested.
Circle already has an official hosted MCP with broad Admin API coverage. This local package adds a shared task CLI, private named token settings, schema-derived commands and bounded page retrieval. No dedicated task CLI was identified in the official pages reviewed; that is a scoped finding, not proof of absence. Tool counts do not prove broader coverage or measured efficiency.
How to install the Circle MCP server
Choose your client in the existing install box. One npm package supplies MCP and CLI; GitHub Releases supplies the Claude Desktop archive. Configure private account access before a network request.
Watch out: Installation does not grant community access. Keep tokens out of chat, public configs and repositories. The official hosted MCP uses its own OAuth connection; this local package uses an Admin API token.
Set up private Circle access
Obtain an Admin V2 token
- Sign in to the intended Circle community as an admin.
- Open Settings > Developers > Tokens.
- Create a token with type Admin V2 on an eligible plan.
- Store it only in private shell/client settings as
CIRCLE_API_TOKEN, or use the private file route below. - Run
circle-cli doctor, thencircle-cli doctor --networkfor a community read.
Follow the current quick start. Never use a Circle password, browser cookies, a member access token or a Google OAuth client as a substitute. The Admin API is intended for administrative integrations; member-facing experiences use the separate Headless APIs. The local package does not perform OAuth or host an authorization callback. login prints instructions without opening a browser or saving credentials.
Authentication discrepancy
The pinned OpenAPI security scheme specifies Authorization: Token AUTH_TOKEN; the quick-start prose and examples use Bearer. This version defaults to Token, preserving the schema and existing implementation. Explicitly set CIRCLE_AUTH_SCHEME=Bearer if your account requires the prose's scheme. Named accounts accept auth_scheme. No automatic auth fallback or write resubmission occurs. Both choices need live account validation; fixture checks establish only the outgoing request shape.
The token identifies the community. Requests use the fixed HTTPS origin app.circle.so, with its normal Host header. No arbitrary base URL or legacy community-ID override is exposed.
Private token file
Save only the token text in a regular file outside the checkout. Set CIRCLE_TOKEN_FILE to its absolute path. It takes precedence over the environment token, is limited to 64 KB, and refuses symlinks. Protect POSIX files with mode 0600 and Windows files/folders with user-only ACLs. The process caches the token in memory: restart after rotation. No automatic .env loader is included, and GUI clients may not inherit terminal variables.
Plans, usage and revocation
The official MCP is for admins on Business plans and above. Admin API allowances are Business 5,000; Enterprise/Circle Plus 30,000; Circle Plus Platform 250,000 requests/month. The documented rate limit is 2,000 requests per five minutes per IP and may change. Official MCP actions, local CLI calls, retries and every retrieved page consume the same community allowance. Many 4xx responses count too; usage may appear about five minutes later. Do not treat the old January 2025 enforcement paragraph as a current grace period.
Default local pacing is 200 ms per account/process; it is not a global quota manager. Other processes and tools share limits. Revoke a token through Circle and remove private client settings to disconnect. Uninstalling npm does not revoke access or delete community data.
Check that it works
Discovery and schemas work before authentication. The local doctor checks setup; the network doctor reads community details without printing private community content.
circle-cli --version
circle-cli doctor
circle-cli doctor --network
circle-cli list-spaces --per-page 5 --agentA successful read proves only that endpoint’s access. It does not validate every action, plan feature or delivery outcome. Start with read-only when connecting a new client.
Use the Circle CLI
The CLI is the same 170 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.
Every tool name becomes a command with dashes, so list_spaces runs as circle-cli list-spaces.
npm install -g @thenavidm/circle-mcp-cli@latest
circle-cli
circle-cli list-spaces --help
circle-cli schema create-post
circle-cli list-posts --space-id 7 --per-page 5 --agentThe bare circle-cli lists every command, and circle-cli <command> --help shows what a command takes. Every mutation needs --confirm for the requested action. --yes and --agent never replace it. Example IDs are illustrative; use resources discovered in your own community.
These flags work on every command:
| Flag | What it does |
|---|---|
| --json | Structured JSON |
| --compact | One-line JSON |
| --agent | Compact JSON, no prompts or color |
| --select a,b.c | Select local result fields |
| --confirm | Confirm the specific requested write |
| --account NAME | Select private local credentials |
| --payload JSON / --payload-file PATH | Complete body instead of body flags |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | Success |
| 2 | Invalid arguments or refused write |
| 3 | Resource not found |
| 4 | Authentication or permission failure |
| 5 | API or transport failure |
| 7 | Rate limit |
| 10 | Missing or invalid private configuration |
MCP server or CLI: which one?
Both surfaces call the same server tools. MCP connects them directly to an AI chat; the CLI gives an agent with a terminal the same operations as commands.
The token comparison is pending. We measure four real Claude Code usage differences: every tool loaded, default tool search, the skill read once, and its recurring description line. Commands, help, selected schemas, results and reasoning also contribute to complete task cost.
There is no measured efficiency percentage for this version yet. Standing context and the total cost of a successful task will be reported separately.
Community workflows
Draft, inspect, then publish only when requested
Discover the intended basic space first. A basic post requires space_id and name; content uses tiptap_body and a nested Tiptap document rather than an invented plain body field. These illustrative IDs must be replaced with real discovered IDs:
circle-cli list-spaces --per-page 5 --agent
circle-cli create-post --space-id 7 --name "Community notes" --tiptap-body '{"body":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Your actual post content."}]}]}}' --confirm --agent
circle-cli get-post --post-id 19 --agentThe wrapper defaults basic/image post creation to draft. Read that same post ID and inspect it in Circle. A later publishing/scheduling update needs the user's specific request and explicit status/confirmation. Review skip_notifications, timestamps and audience carefully. Do not overwrite a branded or complex document with a sample paragraph. See Tiptap concepts and rich text.
Members, invitations and messages
Search/read the intended member before access changes. create_member invites a member unless the supplied supported fields change that behavior; skip_invitation can suppress an invitation. Use documented member IDs, emails, access-group IDs and tags, not a user's password in a model prompt. remove_member deactivates a membership; delete_community_member is a distinct deletion operation. Read schemas before choosing one.
send_message uses rich_text_body and exactly one recipient route (user_email, user_emails or chat_room_uuid) per the pinned body union. Publishing, comments, messages, invitations, event reminders and workflow activation can contact people. Guard confirmation does not establish consent or successful delivery. Only perform the requested operation.
Events, courses and workflows
Events use a nested event object with event settings, location and reminder options, plus the operation's space input. Courses use current section/lesson IDs and documented bodies; progress updates have their own fields. Workflows use UUIDs, not the numeric IDs used by many other endpoints. Read and inspect the current workflow before confirmed activation. Deactivation, duplication and billing/subscription actions have different effects; tool availability never substitutes for the intended task.
Pagination, exports and uploads
Bounded pages
The 33 reviewed paginated reads use native page and per_page; no cursor is invented. all_pages starts at the requested page or page 1, keeps page size fixed, stops at max_items (default 1,000, maximum 10,000) or 100 requests, and refuses empty/repeated continuing pages. The local per_page cap is 100. Responses retain the provider's records/metadata and add collected/pages/truncated/resume.
circle-cli list-members --per-page 25 --agent
circle-cli list-members --all-pages --max-items 500 --per-page 25 --agentWhen a cap cuts through a page, resume contains that page, the fixed per_page and the count to skip after retrieving it again. When a full page is consumed, resume points to the next page with skip 0. Preserve the same query/filter/sort and do not change page size: doing so changes offset boundaries. This is not a consistent snapshot; concurrent community changes can shift records. The helper returns continuation state but does not offer an invented --skip API argument. One bounded result is not a complete backup guarantee.
Exports and quota
Export tools are confirmed writes that may enqueue jobs or return download links; acceptance is not proof of completion. Preserve returned IDs/status and follow the documented account workflow. Keep membership/billing data and download URLs private. Every page/retry consumes allowance; a long Retry-After is surfaced instead of shortened into an early retry.
File metadata and direct uploads
create_direct_upload creates the documented upload metadata/slot using blob key, filename, MIME type, byte_size and a Base64 MD5 checksum. It does not read a local file or complete the storage PUT for you. Follow the upload protocol: create metadata, upload the exact intended file to the returned signed storage URL with its returned headers, then use the returned signed_id where the content schema accepts it. The provider concept page illustrates Member API; this package uses the pinned Admin v2 direct_uploads route.
Never send the Admin token to the storage URL, expose private signed URLs in public output, or treat a slot as a completed upload. Embeds/SGIDs, basic-post covers, image galleries, lesson media and member avatars use different schema fields. This package does not host an uploader or webhook receiver; no incomplete file workflow is advertised as automatic.
Every Circle tool
Actual discovery supplies all 170 tools below: 66 reads and 104 confirmed writes. The full argument tables and circle-cli schema expose required IDs, body fields and native page controls. This package covers the pinned Admin v2 operations, not the separate Member API or every Circle UI workflow.
Access group members
add_to_access_group- What it does
- Add Member to Access Group.
- Kind
- Asks first
remove_from_access_group- What it does
- Remove Access Group Member.
- Kind
- Asks first
list_access_group_community_members- What it does
- List Access Group Community Members.
- Kind
- Reads
get_access_group_community_member- What it does
- Show Access Group Community Member.
- Kind
- Reads
Access groups
create_access_group- What it does
- Create Access Group.
- Kind
- Asks first
list_access_groups- What it does
- List Access Groups.
- Kind
- Reads
archive_access_group- What it does
- Archive Access Group.
- Kind
- Asks first
update_access_group- What it does
- Update Access Group.
- Kind
- Asks first
unarchive_access_group- What it does
- Unarchive Access Group.
- Kind
- Asks first
Advanced search
search- What it does
- Advanced Search.
- Kind
- Reads
Chat preferences
update_chat_preferences- What it does
- Update Chat Preferences.
- Kind
- Asks first
Chat room message imports
import_chat_room_message- What it does
- Import Chat Room Message.
- Kind
- Asks first
Comments
create_comment- What it does
- Create Comment.
- Kind
- Asks first
list_comments- What it does
- List Comments.
- Kind
- Reads
delete_comment- What it does
- Destroy Comment.
- Kind
- Asks first
get_comment- What it does
- Show Comment.
- Kind
- Reads
Communities
get_community- What it does
- Get community details.
- Kind
- Reads
update_community- What it does
- Update Community.
- Kind
- Asks first
Community leads
create_lead- What it does
- Create a non-member contact (lead).
- Kind
- Asks first
delete_lead- What it does
- Delete a non-member contact (lead).
- Kind
- Asks first
Community member charges
export_community_member_charges- What it does
- Export Community Member Charges.
- Kind
- Asks first
list_charges- What it does
- Community Member Charges List.
- Kind
- Reads
refund_community_member_charge- What it does
- Refund Community Member Charge.
- Kind
- Asks first
Community member spaces
list_member_spaces- What it does
- List Community Member Spaces.
- Kind
- Reads
Community member subscriptions
cancel_community_member_subscription- What it does
- Cancel Community Member Subscription.
- Kind
- Asks first
export_community_member_subscriptions- What it does
- Export Community Member Subscriptions.
- Kind
- Asks first
list_subscriptions- What it does
- Community Member Subscriptions List.
- Kind
- Reads
resume_community_member_subscription- What it does
- Resume Community Member Subscription.
- Kind
- Asks first
Community member access groups
list_member_access_groups- What it does
- List Community Member's Access Groups.
- Kind
- Reads
Community members
ban_community_member- What it does
- Ban Community Member.
- Kind
- Asks first
create_member- What it does
- Create/Invite a community member.
- Kind
- Asks first
list_members- What it does
- List Community Members.
- Kind
- Reads
delete_community_member- What it does
- Delete Community Member.
- Kind
- Asks first
remove_member- What it does
- Deactivate a community member.
- Kind
- Asks first
get_member- What it does
- Show a community member.
- Kind
- Reads
update_member- What it does
- Update a community member.
- Kind
- Asks first
search_member- What it does
- Search a community member.
- Kind
- Reads
Community segments
create_community_segment- What it does
- Create a community segment.
- Kind
- Asks first
list_segments- What it does
- List Community Segments.
- Kind
- Reads
delete_community_segment- What it does
- Delete a community segment.
- Kind
- Asks first
update_community_segment- What it does
- Update a community segment.
- Kind
- Asks first
duplicate_community_segment- What it does
- Duplicate a community segment.
- Kind
- Asks first
Contact notes
create_contact_note- What it does
- Create Contact Note.
- Kind
- Asks first
list_contact_notes- What it does
- List Contact Notes.
- Kind
- Reads
Course lesson progress
update_course_progress- What it does
- Update Course Lesson Progress.
- Kind
- Asks first
Course lessons
create_course_lesson- What it does
- Create a course lesson.
- Kind
- Asks first
list_course_lessons- What it does
- List course lessons.
- Kind
- Reads
delete_course_lesson- What it does
- Delete a course lesson.
- Kind
- Asks first
get_course_lesson- What it does
- Show a course lesson.
- Kind
- Reads
update_course_lesson- What it does
- Update a course lesson.
- Kind
- Asks first
reorder_course_lessons- What it does
- Reorder course lessons.
- Kind
- Asks first
Course sections
create_course_section- What it does
- Create a course section.
- Kind
- Asks first
list_course_sections- What it does
- List Course Sections.
- Kind
- Reads
delete_course_section- What it does
- Delete a course section.
- Kind
- Asks first
get_course_section- What it does
- Show a course section.
- Kind
- Reads
update_course_section- What it does
- Update a course section.
- Kind
- Asks first
Direct uploads
create_direct_upload- What it does
- Create Direct Upload.
- Kind
- Asks first
Embeds
create_embed- What it does
- Create Embed.
- Kind
- Asks first
get_embed- What it does
- Get Embed.
- Kind
- Reads
Event attendees
create_event_attendee- What it does
- Create Event Attendee.
- Kind
- Asks first
delete_event_attendee- What it does
- Delete Event Attendee.
- Kind
- Asks first
list_event_attendees- What it does
- List Event Attendees.
- Kind
- Reads
Events
create_event- What it does
- Create Event.
- Kind
- Asks first
list_events- What it does
- List Events.
- Kind
- Reads
delete_event- What it does
- Delete Event.
- Kind
- Asks first
get_event- What it does
- Get Event.
- Kind
- Reads
update_event- What it does
- Update Event.
- Kind
- Asks first
duplicate_event- What it does
- Duplicate Event.
- Kind
- Asks first
Filter kit configuration
get_filter_configuration- What it does
- Get the filters currently shown on the member directory or a member space.
- Kind
- Reads
Filter kit controls
create_filter_control- What it does
- Create a member filter control.
- Kind
- Asks first
list_filter_controls- What it does
- List member directory and member space filter controls.
- Kind
- Reads
delete_filter_control- What it does
- Delete a filter control.
- Kind
- Asks first
get_filter_control- What it does
- Get a filter control.
- Kind
- Reads
update_filter_control- What it does
- Update a member directory or member space filter control.
- Kind
- Asks first
Flagged contents
report_flagged_content- What it does
- Report Flagged Content.
- Kind
- Asks first
list_flagged_content- What it does
- List Flagged Contents.
- Kind
- Reads
Forms
delete_form- What it does
- Delete a form.
- Kind
- Asks first
get_form- What it does
- Show a form.
- Kind
- Reads
update_form- What it does
- Update a form.
- Kind
- Asks first
duplicate_form- What it does
- Duplicate a form.
- Kind
- Asks first
list_forms- What it does
- List Forms.
- Kind
- Reads
create_form_submission- What it does
- Create a form submission.
- Kind
- Asks first
get_form_submissions- What it does
- List form submissions.
- Kind
- Reads
Gamification
get_leaderboard- What it does
- Show Leaderboard.
- Kind
- Reads
Posts
create_image_post- What it does
- Create Image Post.
- Kind
- Asks first
list_image_posts- What it does
- List Image Posts.
- Kind
- Reads
delete_image_post- What it does
- Delete Image Post.
- Kind
- Asks first
get_image_post- What it does
- Show Image Post.
- Kind
- Reads
duplicate_image_post- What it does
- Duplicate Image Post.
- Kind
- Asks first
create_post- What it does
- Create Basic Post.
- Kind
- Asks first
list_posts- What it does
- List Basic Posts.
- Kind
- Reads
delete_post- What it does
- Delete Basic Post.
- Kind
- Asks first
get_post- What it does
- Show Basic Post.
- Kind
- Reads
update_post- What it does
- Update Basic Post.
- Kind
- Asks first
get_post_summary- What it does
- Get Post Summary.
- Kind
- Reads
Invitation links
create_invitation- What it does
- Create invitation link.
- Kind
- Asks first
list_invitations- What it does
- List Invitation Links.
- Kind
- Reads
delete_invitation_link- What it does
- Delete invitation link.
- Kind
- Asks first
update_invitation_link- What it does
- Update invitation link.
- Kind
- Asks first
revoke_invitation_link- What it does
- Revoke invitation link.
- Kind
- Asks first
Live
list_live_rooms- What it does
- List Live Rooms.
- Kind
- Reads
list_live_room_transcripts- What it does
- List Live Room Transcripts.
- Kind
- Reads
Locations
search_locations- What it does
- Search locations.
- Kind
- Reads
Member tags
create_member_tag- What it does
- Create Member Tag.
- Kind
- Asks first
list_member_tags- What it does
- Member Tags List.
- Kind
- Reads
delete_member_tag- What it does
- Deletes a member tag.
- Kind
- Asks first
get_member_tag- What it does
- Shows a member tag's details.
- Kind
- Reads
update_member_tag- What it does
- Update member tag.
- Kind
- Asks first
Messages
send_message- What it does
- Create Message.
- Kind
- Asks first
Page profile fields
list_page_profile_fields- What it does
- Get Page Profile Fields.
- Kind
- Reads
Payment method settings
get_payment_method_settings- What it does
- Retrieves the community's payment method preferences.
- Kind
- Reads
Paywall affiliate payouts
export_paywall_affiliate_payouts- What it does
- Export Paywall Affiliate Payouts.
- Kind
- Asks first
mark_paywall_affiliate_payouts_paid- What it does
- Mark Paywall Affiliate Payouts Paid.
- Kind
- Asks first
start_paywall_affiliate_payouts- What it does
- Start Paywall Affiliate Payouts.
- Kind
- Asks first
Paywall affiliates
list_paywall_affiliates- What it does
- Paywall Affiliates List.
- Kind
- Reads
invite_paywall_affiliates- What it does
- Invite Paywall Affiliates.
- Kind
- Asks first
update_paywall_affiliate- What it does
- Update Paywall Affiliate.
- Kind
- Asks first
Paywall coupons
delete_paywall_coupon- What it does
- Deletes a paywall coupon.
- Kind
- Asks first
Paywall groups
create_paywall_group- What it does
- Create Subscription Group.
- Kind
- Asks first
update_paywall_group- What it does
- Update Subscription Group.
- Kind
- Asks first
Paywalls
search_paywalls- What it does
- Search Paywalls.
- Kind
- Reads
delete_paywall- What it does
- Deletes a paywall.
- Kind
- Asks first
archive_paywall- What it does
- Archives a paywall.
- Kind
- Asks first
publish_paywall- What it does
- Publishes a paywall.
- Kind
- Asks first
unarchive_paywall- What it does
- Unarchives a paywall.
- Kind
- Asks first
Post followers
unfollow_post- What it does
- Unfollow a post.
- Kind
- Asks first
Profile fields
archive_profile_field- What it does
- Archive Profile Field.
- Kind
- Asks first
create_profile_field- What it does
- Create Profile Field.
- Kind
- Asks first
list_profile_fields- What it does
- Profile Fields List.
- Kind
- Reads
delete_profile_field- What it does
- Delete Profile Field.
- Kind
- Asks first
update_profile_field- What it does
- Update Profile Field.
- Kind
- Asks first
unarchive_profile_field- What it does
- Unarchive Profile Field.
- Kind
- Asks first
Connect settings
get_connect_settings- What it does
- Get Connect settings.
- Kind
- Reads
update_connect_settings- What it does
- Update Connect settings.
- Kind
- Asks first
Space group members
create_space_group_member- What it does
- Create Space Group Member.
- Kind
- Asks first
delete_space_group_member- What it does
- Destroy Space Group Member.
- Kind
- Asks first
list_space_group_members- What it does
- List Space Group Members.
- Kind
- Reads
get_space_group_member- What it does
- Show Space Group Member.
- Kind
- Reads
Space groups
create_space_group- What it does
- Create Space Group.
- Kind
- Asks first
list_space_groups- What it does
- List Space Groups.
- Kind
- Reads
delete_space_group- What it does
- Delete Space Group.
- Kind
- Asks first
get_space_group- What it does
- Show Space Group.
- Kind
- Reads
update_space_group- What it does
- Update Space Group.
- Kind
- Asks first
Space members
add_space_member- What it does
- Add Space Member.
- Kind
- Asks first
remove_space_member- What it does
- Remove Space Member.
- Kind
- Asks first
list_space_members- What it does
- List Space Members.
- Kind
- Reads
get_space_member- What it does
- Show Space Member.
- Kind
- Reads
Spaces
get_space_ai_summaries- What it does
- Summarize a space.
- Kind
- Reads
create_space- What it does
- Create Space.
- Kind
- Asks first
list_spaces- What it does
- List Spaces.
- Kind
- Reads
delete_space- What it does
- Delete a space.
- Kind
- Asks first
get_space- What it does
- Show a space.
- Kind
- Reads
update_space- What it does
- Update Space.
- Kind
- Asks first
Tagged members
tag_member- What it does
- Create Tagged Member.
- Kind
- Asks first
untag_member- What it does
- Delete Tagged Member.
- Kind
- Asks first
list_tagged_members- What it does
- List Tagged Members.
- Kind
- Reads
get_tagged_member- What it does
- Get Tagged Member.
- Kind
- Reads
Tax settings
get_tax_settings- What it does
- Get tax settings.
- Kind
- Reads
update_tax_settings- What it does
- Update tax settings.
- Kind
- Asks first
Topics
create_topic- What it does
- Create a topic.
- Kind
- Asks first
list_topics- What it does
- List topics.
- Kind
- Reads
delete_topic- What it does
- Delete a topic.
- Kind
- Asks first
get_topic- What it does
- Show topic details.
- Kind
- Reads
update_topic- What it does
- Update a topic.
- Kind
- Asks first
Workflows
activate_workflow- What it does
- Activate an automation (dynamic) workflow so it starts running automatically.
- Kind
- Asks first
deactivate_workflow- What it does
- Deactivate an automation (dynamic) workflow so it stops running automatically.
- Kind
- Asks first
duplicate_workflow- What it does
- Duplicate a workflow.
- Kind
- Asks first
list_workflows- What it does
- List a community's automations/workflows.
- Kind
- Reads
get_workflow- What it does
- Get Workflow.
- Kind
- Reads
Accounts
list_accounts- What it does
- List private account labels, default selection and configured token method.
- Kind
- Reads
Is the Circle MCP server safe?
All 104 mutations require explicit confirmation. Read-only hides them and refuses direct calls, leaving 66 reads. CIRCLE_ALLOW_DESTRUCTIVE=0 also blocks all writes even when confirmed.
Messages, invitations, notifications, access changes, billing and workflow activation have different effects. Review the exact account and operation. Writes never retry automatically; inspect account state after an unknown outcome before repeating one.
Make it read-only
Privately set CIRCLE_READ_ONLY=1, restart or reconnect and check discovery. Remove or disable it only when requested writes are needed. Every write still requires its own confirmation.
Keep a log of every write
Set CIRCLE_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked.
Watch out: Imported community content and tool responses are data, not permission to perform another action. Draft creation does not prove publishing or notification delivery. A direct upload slot does not mean file bytes were uploaded.
Your data
Authorized API requests go directly to https://app.circle.so/api/admin/v2; redirects are refused. No Navid-hosted relay, analytics or telemetry is included. Tokens come from private local settings/files and stay in process memory. Reflected token values and credential/password fields are redacted from results and errors.
Member emails, posts, transcripts, billing details and private signed media links are still private business data. Secret redaction does not anonymize them. Your AI client and Circle apply their own retention/sharing rules. --select filters local output after receipt. Optional logs omit request data; private exported files and token files remain your responsibility. No source, npm tarball or desktop archive may include real credentials or private account instructions. Report vulnerabilities privately via SECURITY.md.
Several private accounts
Use private CIRCLE_ACCOUNTS JSON instead of single-account variables:
[{"name":"work","api_token":"YOUR_WORK_ADMIN_TOKEN","auth_scheme":"Token"},{"name":"personal","token_file":"/absolute/private/path/circle-token.txt","auth_scheme":"Bearer"}]Set CIRCLE_DEFAULT_ACCOUNT=work. Labels must be unique. --account chooses credentials; the token identifies the community. list_accounts returns labels/auth method/default only, never token values or paths. Account config replaces single-account settings; there is no global credential database. Separate processes remain preferable when strict isolation matters.
circle-cli list-accounts --agent
circle-cli list-spaces --account work --per-page 5 --agent
circle-cli get-community --account personal --agentCircle MCP server settings
Use private local shell or user-client settings. GUI processes may not inherit terminal variables. This package has no automatic .env loader. Account labels select credentials; tokens identify communities.
- Default
- Empty
- What it does
- Private Admin V2 token
- Default
- Empty
- What it does
- Regular token-only file up to 64 KB; takes precedence
- Default
- Token
- What it does
- Explicit Token/Bearer scheme; no fallback
- Default
- Empty
- What it does
- Private named credential array; replaces single account
- Default
- First configured label
- What it does
- Default local account
- Default
- 0
- What it does
- Hide/refuse all writes
- Default
- 1
- What it does
- 0 blocks all writes
- Default
- None
- What it does
- Private guard-decision log
- Default
- 30000
- What it does
- Integer request deadline, 100–300000 ms
- Default
- 2
- What it does
- GET 429 retries, 0–5
- Default
- 200
- What it does
- Per-account/process pacing, 0–10000 ms
Troubleshooting
Run the doctor first. It names the step that failed and the fix.
| What you see | What to do |
|---|---|
| No configured account | Set a private CIRCLE_API_TOKEN or regular token-only CIRCLE_TOKEN_FILE. |
| 401/403 | Check Admin V2 token, community permissions, eligibility and explicit Token/Bearer scheme. |
| GUI token missing | Configure the actual GUI process or private user settings; terminal variables may not reach it. |
| Invalid body | Read schema; use Tiptap/nested event/message bodies and one body-input route. |
| First page only | Use native page/per_page or bounded all_pages; preserve resume metadata. |
| 429 | Each call/page consumes community quota. GET retries respect short Retry-After; longer delays return exit 7. |
| Unknown write outcome | Inspect existing community state before repeating; no automatic write retry. |
| Guard refusal | Check read-only/destructive settings and confirm only the requested mutation. |
| Desktop archive rejected | Check runtime and organization extension policy. |
| Upload not completed | create_direct_upload produces metadata/slot only; storage bytes are a separate authorized workflow. |
If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.
Complete client, OS and desktop setup
Put actual values only into private user settings. INSTALL.md ships in npm and provides the same complete setup. Browser-only clients use Circle’s official hosted MCP.
Claude Code
For a user-scoped connection, after privately configuring credentials:
claude mcp add --scope user circle -- npx -y @thenavidm/circle-mcp-cli@latest
claude mcp listUse the client's private local environment settings for the account variable if they are not inherited. Claude's -e NAME=value registration option writes values into its config; only use it locally through your secret manager, with no shared command transcript. Never place credentials in a project .mcp.json. Reconnect and ask Claude to verify credentials.
Alternatively install the CLI, make SKILL.md available to Claude, and use shell commands. Registering both surfaces is optional.
Codex
codex mcp add circle -- npx -y @thenavidm/circle-mcp-cli@latest
codex mcp listAccount credentials must reach the server through private environment settings. codex mcp add --env NAME=value stores values in your local config, so never commit that config or put secrets in a shared command. In TOML, the equivalent server is:
[mcp_servers.circle]
command = "npx"
args = ["-y", "@thenavidm/circle-mcp-cli@latest"]
env_vars = ["CIRCLE_API_TOKEN", "CIRCLE_TOKEN_FILE", "CIRCLE_AUTH_SCHEME"]env_vars forwards those names from the environment available to Codex. If that environment does not contain them, configure private env settings locally. Codex can also call the CLI directly with SKILL.md and --agent output.
Claude Desktop
Install the .mcpb extension
- Download
circle-2.0.0.mcpbfrom GitHub Releases. - In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
- Enter a private Admin token in the sensitive setting, or an absolute private token-file path. Leave the unused method empty. Set the authentication scheme to Token by default, or explicitly choose Bearer if your account requires the quick-start scheme described above.
- Enable read-only if you want only the 66 reads. Reconnect and ask for account verification.
The bundle includes production dependencies and no credentials. Use a regular private token-only file if you prefer file-based credentials. The manifest requires Node 22 or newer from a compatible host. Organization policy may restrict custom extensions. Manual bundle updates require installing the new version; no automatic directory updates are promised. GUI installation remains unverified separately from archive/protocol checks.
Manual config
Open Settings > Developer > Edit Config, or use your platform's config file:
| OS | Typical config path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json; confirm the location through Edit Config in your installed build |
{
"mcpServers": {
"circle": {
"command": "npx",
"args": ["-y", "@thenavidm/circle-mcp-cli@latest"],
"env": {
"CIRCLE_API_TOKEN": "YOUR_PRIVATE_ADMIN_TOKEN",
"CIRCLE_TOKEN_FILE": "",
"CIRCLE_AUTH_SCHEME": "Token"
}
}
}
}Replace the placeholders only in your private file. Merge the server entry into an existing mcpServers object instead of replacing other integrations. Fully quit and reopen Claude Desktop. Do not enable an extension and a manual entry with the same name; choose one route.
If a Windows launcher cannot execute npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@thenavidm/circle-mcp-cli@latest"]. An absolute node executable and installed dist/index.js path also avoids launcher/PATH problems.
Cursor
Use private user settings at ~/.cursor/mcp.json, or Settings > Tools & MCP. Cursor documents environment interpolation and envFile support.
{
"mcpServers": {
"circle": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/circle-mcp-cli@latest"],
"env": {
"CIRCLE_API_TOKEN": "${env:CIRCLE_API_TOKEN}",
"CIRCLE_TOKEN_FILE": "${env:CIRCLE_TOKEN_FILE}",
"CIRCLE_AUTH_SCHEME": "${env:CIRCLE_AUTH_SCHEME}"
}
}
}
}The environment values must exist for the Cursor process. If you use envFile, keep that file private and outside version control. A project's .cursor/mcp.json must not contain actual credentials. Reconnect the server after saving.
VS Code and Copilot
Use MCP: Open User Configuration. VS Code uses servers and secure inputs, rather than a mcpServers root:
{
"inputs": [
{"type": "promptString", "id": "circle-api-key", "description": "Circle Admin token (leave empty for a private token file)", "password": true},
{"type": "promptString", "id": "circle-token-file", "description": "Optional private token-file path (leave empty for Admin token)"}
],
"servers": {
"circle": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/circle-mcp-cli@latest"],
"env": {
"CIRCLE_API_TOKEN": "${input:circle-api-key}",
"CIRCLE_TOKEN_FILE": "${input:circle-token-file}",
"CIRCLE_AUTH_SCHEME": "Token"
}
}
}
}Start Circle through the MCP controls, approve trust if prompted, and enter credentials in the private input prompts. Workspace .vscode/mcp.json may contain this placeholder-only structure, but never resolved secret values. Remote development runs the server in the selected remote environment, so local file paths refer to that environment.
Windsurf
Open Cascade's MCP settings or edit the private user file ~/.codeium/windsurf/mcp_config.json. Use the Claude Desktop manual mcpServers block above with your locally configured env values. See Windsurf's current MCP documentation. Restart or reconnect Circle in Cascade; project files must not contain secrets.
Zed
Open Settings > AI > MCP Servers > Add Server > Add Local Server, or your user settings file. Zed uses context_servers:
{
"context_servers": {
"circle": {
"command": "npx",
"args": ["-y", "@thenavidm/circle-mcp-cli@latest"],
"env": {
"CIRCLE_API_TOKEN": "YOUR_PRIVATE_ADMIN_TOKEN",
"CIRCLE_TOKEN_FILE": "",
"CIRCLE_AUTH_SCHEME": "Token"
}
}
}
}Enter actual values only in private user settings. Check the active-server indicator before prompting. Do not wrap command and args inside a nested command object from older Zed examples.
Gemini CLI
Merge the Claude Desktop manual mcpServers block into your private ~/.gemini/settings.json. Configure the three env values locally, then restart Gemini CLI and inspect /mcp. See Gemini CLI's MCP configuration. Its project settings must not contain real credentials. You can instead use the CLI from an agent shell.
Other local stdio clients use the same command and arguments, adapted to their config format. A client that only accepts a remote MCP URL cannot connect directly: this package does not ship a public HTTP listener. ChatGPT's remote connector setup is not a substitute for local stdio installation.
Docker
Build locally from the reviewed source; no prebuilt registry image is claimed:
git clone https://github.com/thenavidm/circle-mcp-cli.git
cd circle-mcp-cli
docker build -t circle-mcp-cli .
docker run --rm -i -e CIRCLE_API_TOKEN circle-mcp-cli-e CIRCLE_API_TOKEN forwards the shell's already configured private value. MCP needs -i and stdio. For file-based tokens, mount the private token file read-only and set the absolute in-container CIRCLE_TOKEN_FILE path. Host paths do not automatically exist inside a container. Forward CIRCLE_AUTH_SCHEME when explicitly configured. This package never refreshes or rewrites tokens; restart after rotation.
Cline and other local MCP clients
Use the client's Add MCP server flow with command npx, arguments -y and @thenavidm/circle-mcp-cli@latest, stdio transport, and private local CIRCLE_API_TOKEN or CIRCLE_TOKEN_FILE settings. UI names depend on the installed client. Reconnect and discover tools before an account call. Browser-only clients need a remote HTTPS connector; use Circle's official server rather than this local stdio command.
Command inputs, JSON and output
Tool names become dashed commands; underscores are accepted too. Path parameter names follow the discovered schema, such as post_id → --post-id. Body tools accept individual top-level flags, complete --payload JSON, or --payload-file pointing to a regular JSON body file up to 5 MB. Do not mix those body routes. Path/query flags remain separate. Nested objects take JSON and array flags repeat once per item; a whole array is not a single item.
circle-cli get-post --help
circle-cli schema create-post
circle-cli list-members --member-tag-ids 3 --member-tag-ids 4 --per-page 10 --agent
circle-cli search --query "onboarding" --filters '{"space_ids":["7"]}' --agentIDs above are illustrative; use discovered resources from your own community. Nullable fields require an actual JSON null inside payload; --field null is a string. Nested Tiptap properties preserve upstream extensibility; unknown top-level body fields are refused. Body-required fields are validated during execution even when the wrapper schema allows an alternative payload route. Operations whose upstream request body is required need body flags or an explicit payload; a deliberately supplied empty object is sent as JSON, never omitted.
| Flag | Behavior |
|---|---|
| --help / schema COMMAND | Current argument help / full JSON Schema |
| --json | Structured JSON |
| --compact | One-line JSON |
| --agent | Compact JSON, no prompts or color |
| --select a,b.c | Keep selected fields, including nested objects/arrays |
| --no-color / --no-input | Noninteractive house flags |
| --yes | Never replaces write confirmation |
| --confirm | Confirm only the requested mutation |
| --account NAME | Select private local credentials |
| --payload JSON / --payload-file PATH | Complete request body, mutually exclusive with body flags |
| Exit | Meaning |
|---|---|
| 0 | Success |
| 2 | Invalid arguments or refused write |
| 3 | Resource not found |
| 4 | Authentication/permission failure |
| 5 | API/transport failure |
| 7 | Rate limit |
| 10 | Missing or invalid private configuration |
Results go to stdout, errors as JSON to stderr. Selection changes local output, not the original API response or quota charge. API success is not proof of notification delivery or a completed export.
Official MCP and community comparisons
- Surface
- Hosted OAuth MCP, https://app.circle.so/api/mcp
- Scope and tradeoff
- Broad Admin API v2 actions, admin Business+, read-only/full access, hosted setup; requests consume quota
- Surface
- Local stdio MCP + shared task CLI + desktop bundle
- Scope and tradeoff
- Pinned v2 operations, private named tokens, schema-derived commands/JSON, bounded pages and explicit write guards; token setup and local maintenance
- Surface
- Community MCP
- Scope and tradeoff
- Documents community audits, unanswered questions and onboarding workflows; inspect the pinned source rather than inferring behavior from README
- Surface
- Community local/HTTP MCP
- Scope and tradeoff
- Documents separate Member and Admin API layers plus Google OAuth/HTTP; different deployment and identity requirements
No dedicated Circle-published task CLI was identified in the official developer/MCP pages reviewed on October 2, 2026. This is a scoped finding, not proof of absence. Claude Code setup commands in MCP docs are MCP registration, not a Circle administration CLI. Neither our operation count nor a community README count proves broader capability, reliability or token savings. This release does not provide the separate Member API or Google authentication.
Current primary references: Admin API, quick start, limits, official OpenAPI, official MCP. See COMPARISON.md for review scope and pending evidence.
Versions and migration
- Date
- October 2, 2026
- Change
- Current Admin v2 operations, shared CLI, private accounts, write guards, desktop bundle and complete reference
- Date
- Legacy source
- Change
- MCP-only implementation, 62 declared tools, mixed v1/v2 and manually assembled routes
The OpenAPI document calls its info version v1 while the routes are Admin v2. Provenance records both; do not rename the API based on that info field. Original upstream SHA-256: 9bdd6e72611fe2af43e308ffadb9e9a64b0aa5d5763004839ac3b70de335f5a0. The public pinned snapshot removes one credential-like upload-key example; its SHA-256 is 3e6478f0ac859789a70b8356ac0c91901de99134f637832809497d555e897241. Examples are excluded from generated validation.
Many documented legacy names remain where current operations exist. Arguments and routes need migration: posts use /posts with space_id input, comments use /comments with post_id input, memberships and attendees use current top-level resources, and workflows require UUIDs. Unsupported v1-only like/unlike helpers are omitted. CIRCLE_COMMUNITY_ID is no longer used. Legacy HTML/body shortcuts are not silently converted to Tiptap. See CHANGELOG.md for the exact legacy-name migration table. Preserve the existing AGPL license.
Build/typecheck, 25 fixture/shared-CLI checks and real local discovery are verified. These checks cover every write guard, nested body validation, pagination, auth header shape, retry policy, secret redaction and actual CLI exit codes. Public release/artifact/CI evidence is recorded after publication. Live provider outcomes, desktop GUI installation and fresh model usage benchmarks remain pending.
Updates and removal
npm install -g @thenavidm/circle-mcp-cli@latest
circle-cli --version
claude mcp remove --scope user circle
codex mcp remove circle
npm uninstall -g @thenavidm/circle-mcp-cliRestart @latest MCP entries to resolve the new version; a running process does not update itself. Pin a reviewed version for reproducible automation. Read CHANGELOG.md and GitHub Releases before major updates. Manually installed desktop extensions need the new versioned .mcpb installed separately. No directory-driven automatic desktop update is claimed.
Remove each manual client entry and copied skill as appropriate. Uninstalling does not revoke tokens, delete community content, undo invitations or cancel workflows. Revoke tokens in Circle separately. Preserve private data before removing local private files. Do not overwrite an existing npm version to roll back.
Validation and remaining evidence
Build, typecheck and 25 behavior/shared-CLI checks pass. Real local discovery reports 170 tools and 66 in read-only mode. Every one of the 104 writes is guard-checked. The production dependency audit has zero findings; the development-only MCPB/node-forge advisory is documented in SECURITY.md and excluded from the desktop archive.
The exact source history, npm package and desktop archive are scanned for secrets. Public CI, public installation and downloaded desktop discovery are recorded after release. Live account outcomes, desktop GUI installation and fresh matched model usage/task measurements remain pending. No measured superiority claim is invented.
More tools for your creator business
Use these alongside your requested community work.
Circle MCP Server & CLI FAQs
Official alternatives, private tokens, client and desktop setup, drafts, pagination, uploads and safety.
It exposes structured operations to an AI client.
This package runs locally over stdio and connects directly to Circle.
circle-cli runs the same tools as shell commands through the shared MCP implementation.
Scripts and shell agents can use it.
Yes.
Its hosted OAuth MCP at https://app.circle.so/api/mcp provides broad Admin API v2 access for admins on eligible Business+ plans.
It adds a local task CLI, named private token settings, predictable JSON, schema-derived help and bounded page retrieval.
No overall coverage or efficiency advantage is claimed.
No dedicated task CLI was found in the official developer/MCP pages reviewed on October 2, 2026.
MCP setup through Claude Code is not a Circle task CLI; recheck current provider docs before making an absence claim.
The wrapper preserves AGPL-3.0-or-later.
Circle plan access and API allowances remain separate.
Installing npm does not upgrade a plan.
Open Settings > Developers > Tokens in the intended community as an admin.
Create an Admin V2 token and save it privately.
No.
Use private local shell/client settings or an owner-only regular token file outside repositories.
Never put it in issues, chats or shared configs.
The pinned schema says Token; quick-start prose says Bearer.
Token is the default, and an explicit private auth scheme setting supports Bearer.
There is no automatic fallback or write resubmission; live-account validation remains pending.
No.
It prints private token setup instructions without opening a browser or storing a credential.
Official hosted MCP OAuth is a separate route.
The versioned .mcpb bundles production dependencies and uses a sensitive token setting or private token-file path.
Host compatibility and organization custom-extension policy apply; GUI installation is separately unverified.
This package needs local stdio.
A remote-URL-only client needs Circle’s official hosted MCP instead, subject to current client support.
Create basic/image post defaults to draft.
Publishing or scheduling needs the specific requested status/update and confirmation.
Inspect the same post before changing delivery or notification options.
The current operations support those requests, with explicit confirmation and valid account permissions.
Read recipient/body schemas and review notification behavior; tool availability is not consent or proof of delivery.
No.
Mutating requests have zero automatic retries or auth fallback.
Inspect state after unknown outcomes before repeating any action.
all_pages is available only on the 33 native page/per_page reads, bounded by max_items and 100 requests.
Every page consumes quota; continuation state does not guarantee a consistent snapshot.
The cap stopped partway through a page.
Retrieve that same page with the same per_page/filter/sort and skip that many already-returned records locally.
There is no invented skip API argument.
Use named private credentials and --account.
The selected token identifies its community. list_accounts returns labels and auth method without tokens or paths.
No.
It creates the metadata/slot.
Complete the documented storage PUT for the exact intended file, then use its signed_id; never forward the Admin token to storage.
Fresh full/deferred loading, skill discovery and matched successful-task usage measurements are pending.
No character estimates, borrowed percentages or zero-token claim are substituted.
Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Learn more.
More MCP servers & CLIs
Related free tools
Free AI newsletterThe most actionable AI newsletter for founders
Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.
No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.
P.S. Sign up now to get free access to my ultimate AI tools guide for creators.











