Circle MCP Server & CLI

A free, open source Circle MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents manage your members and spaces, draft posts, and run events and courses.

Navid Moazzezby Navid Moazzez·Updated Oct 5, 2026·18 min read·
Your computer
  1. 1

    Add it with a single command in a terminal.

    Put your own Admin V2 token in place of the example.

    claude mcp add circle \
    -e CIRCLE_API_TOKEN=YOUR_ADMIN_V2_TOKEN \
    -- npx -y @thenavidm/circle-mcp-cli@latest
  2. 2

    In Claude Code, type /mcp. Circle should show as connected.

    /mcp

Needs Node 22 or newer and a Circle Admin V2 token, on the Business plan or higher. Make one in a minute.

It's free and open source. If it saves you time, star it on GitHub, so more people find it.

Rate this tool

This free Circle MCP server and CLI gives your AI real access to your Circle community: members, spaces, posts, events, courses, paywalls and workflows. It reads and manages members and their access, drafts posts and comments, runs events and courses, reads form submissions, and handles paywalls, messages and workflows.

It's one install with two 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.

In this guide, I'll show you:

  • What the Circle MCP server & CLI is, and what you can ask it
  • How to install it and check that it works
  • When to use the MCP server, and when the CLI
  • Every tool, and how to keep your account safe

Every tool on this page comes from the server itself, and every cost was measured in Claude Code.

key_takeaways.mdTL;DR

Key takeaways

It gives Claude, Codex, Cursor and any other MCP app 170 tools for Circle: members, spaces, posts and comments, events, courses, forms, paywalls, messages and workflows.
It uses an Admin V2 token from Developers, then Tokens, which comes with Circle's Business plan and up.
Posts start as drafts, and every invite, message, payment change and workflow switch waits for your approval.
The same tools run as a CLI, which costs your AI nothing until it runs.

What is the Circle MCP server & CLI?

The Circle MCP server & CLI is a free, open source program that lets AI agents manage your Circle community for you, in two 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 to Circle's own API.

The CLI is the same program as commands. circle-cli list-spaces runs the same code your AI runs when you ask which spaces you have, whether an agent like Claude Code runs it or you do.

In an AI OS, the layer that connects your AI to your context, your data and your tools, a server like this is how your AI reaches Circle. I explain how the parts fit together in how to build an AI operating system, and here's how I use AI myself.

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 asking
Which posts this week have no replies yet?
Draft a welcome post for the Introductions space, and leave it unpublished.
Find jane@example.com and add them to the VIP access group.
Who's registered for Thursday's event?
How far along are members in the first section of my course?
Which members are top of the leaderboard this month?

The first one shows why this is useful. Your AI reads every new post and finds the questions nobody answered, so no member is left waiting.

It works well next to my Teachable MCP server and Kit MCP server, so your AI can enroll students in Teachable and email your members in the same chat. Every server I've made is on my MCP servers page.

For your courses, my free online course platform comparison and course platform finder help too. Circle is my pick for a community under your own brand in the best online course platforms.

How to install the Circle MCP server

Pick your app in the box at the top of this page. Each one is a single command or a pasted block, and they all run through npx, so there's nothing to install first.

Windsurf, Zed and Cline take the same server, though they don't have a tab in the box yet. Follow the box's Cursor tab, and put its block here instead:

AppWhere the block goes
WindsurfIn the Cascade panel, open the Actions menu (…) and choose Open MCP config file, then paste the block.
ClineClick the MCP Servers icon in the Cline panel, open the Configure tab, click Configure MCP Servers, and paste the block.
ZedGo to Settings, then AI, then MCP Servers, and choose Add Server, then Add Local Server. Enter the block's command, arguments and variables, and Zed saves them under context_servers.
Before you start0/3

Watch out: Circle counts every API request against a monthly allowance, starting at 5,000 on the Business plan, and every page of a long list counts. Ask for what you need, not everything.

Set up your Circle community

It takes a minute.

Create an Admin V2 token0/4

The token belongs to your community, and it can do anything an admin can. Your usage shows in the same Developers tab:

PlanAdmin API requests a month
Business5,000
Enterprise and Circle Plus30,000
Circle Plus Platform250,000

The server sends the token the way Circle's API schema shows. If every request fails with 401, set CIRCLE_AUTH_SCHEME to Bearer, the way Circle's quick start shows.

To keep the token out of your app's config, save it alone in a file only you can read, and point CIRCLE_TOKEN_FILE at that file's full path instead.

Check that it works

Run the doctor with --network. It checks your settings, then reads your community's details to prove the token works. It never invites, posts or changes billing.

npx -y @thenavidm/circle-mcp-cli doctor --network

When every line has a check mark, restart your app and ask it which spaces you have. If every request fails with 401, try CIRCLE_AUTH_SCHEME=Bearer.

In Claude Code, /mcp also shows whether the Circle server is connected. It's one of the Claude Code commands worth knowing.

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
circle-cli
circle-cli list-spaces --per-page 5
circle-cli list-posts --space-id YOUR_SPACE_ID --per-page 10
circle-cli search-member --email jane@example.com
circle-cli get-leaderboard

The bare circle-cli lists every command, circle-cli which <words> finds the command for a task, and circle-cli <command> --help shows what a command takes. Every change, invite, message and export needs --confirm, the terminal's version of your approval.

circle-cli install <app> adds the server to Claude Code, Codex, Claude Desktop, Cursor, VS Code or Gemini CLI, in each app's own format.

These are the flags you'll use most:

FlagWhat it does
--jsonPrints JSON
--compactPrints the JSON on one line
--select a,b.cKeeps only those fields, and a dotted path goes deeper
--agentMachine mode: compact JSON, no prompts, and it never confirms anything
--confirmLets a write that asks first go ahead
--dry-runShows what a write would do, without doing it

A script can branch on the exit code:

Exit codeWhat it means
0It worked
1Something unexpected went wrong
2The command was typed wrong, or a write needed --confirm
3It wasn't found
4Circle rejected the credentials
5Circle failed or couldn't be reached
7You hit a rate limit, so wait and try again
10Nothing is set up yet

MCP server or CLI: which one?

Both are the same program with the same 170 tools. The difference is when your AI pays for them, in the tokens it reads.

Every message, in an app that loads every tool
MCP server
84,400 tokens
CLI
Nothing
Every message, in Claude Code
MCP server
2,500 tokens
CLI
Nothing
When Circle comes up
MCP server
Nothing more, or in Claude Code the tools it picks
CLI
950 tokens, once
20 messages with Circle in one, every tool loaded
MCP server
1,688,000 tokens
CLI
950 tokens
Works in Claude Desktop's chat
MCP server
Yes
CLI
No, there's no terminal there
Works in a script, a cron job or CI
MCP server
No
CLI
Yes

An app that loads every tool up front sends the full list with every message, whether you mention Circle or not. Claude Code doesn't by default: its tool search sends only the tool names and the server's instructions, and loads a tool's full definition when your AI reaches for it.

The CLI costs nothing until Circle comes up. Then your agent reads its skill file once and runs the commands it needs. With the skill added, Claude Code also lists its one-line description with every message, about 40 tokens.

When the whole conversation is about Circle, the gap closes. Then the MCP server is the better experience, because you ask in plain language and your AI never has to look up a command.

How to spend less

In Claude Code, leave tool search on, which it is unless you've set ENABLE_TOOL_SEARCH=false.

Turn the server off when you aren't working on your community. In Claude Code that's the /mcp panel, and every AI app has its own switch. CIRCLE_READ_ONLY=1 cuts it to the 66 reading tools.

Or install the CLI and connect the server later, on the days it earns its place. Every tool stays in reach, and the standing cost drops to nothing.

Every number here was measured on October 5, 2026 in Claude Code 2.1.286 with Claude Opus 5.5. It's the same one-line prompt with and without the server connected, once with tool search off so every tool loads, and once with Claude Code's default. The skill was measured the same way, and other apps and models count tokens a little differently.

Drafts, members and paid features

A new post starts as a draft. Its text is a Tiptap document, the format Circle's editor uses, so your AI writes it in that shape, and publishing is a separate change you approve.

Adding a member sends an invitation unless you skip it. Deactivating a member and deleting one are different tools, and deleting can't be undone.

Messages, comments, event reminders and workflows can all reach people, so each one asks first. Workflows use their own long IDs, which your AI reads from the workflow list.

Paywalls, charges, refunds and affiliate payouts are real money. Your AI reads them freely, and every change waits for you.

create_direct_upload only gets an upload slot. You upload the file to the link it returns, and the server never sends your token there.

Watch out: Circle allows 2,000 requests every 5 minutes, and every page of a list counts against your monthly allowance. A list with --all-pages stops at 1,000 items unless you set more.

Every Circle tool

The tables below list all 170 tools, grouped by what they're for. Of these, 66 only read, and 104 change something in your Circle community.

Members, tags and segments

create_lead
What it does
Adds a contact who isn't a member.
Kind
Asks first
delete_lead
What it does
Deletes a contact who isn't a member.
Kind
Asks first
list_member_spaces
What it does
Lists the spaces a member belongs to.
Kind
Reads
list_member_access_groups
What it does
Lists a member's access groups.
Kind
Reads
ban_community_member
What it does
Bans a community member.
Kind
Asks first
create_member
What it does
Adds a member, with an invitation unless you skip it.
Kind
Asks first
list_members
What it does
Lists community members.
Kind
Reads
delete_community_member
What it does
Deletes a member for good.
Kind
Asks first
remove_member
What it does
Deactivates a member.
Kind
Asks first
get_member
What it does
Shows a community member.
Kind
Reads
update_member
What it does
Updates a community member.
Kind
Asks first
search_member
What it does
Finds a member by email.
Kind
Reads
create_community_segment
What it does
Creates a community segment.
Kind
Asks first
list_segments
What it does
Lists community segments.
Kind
Reads
delete_community_segment
What it does
Deletes a community segment.
Kind
Asks first
update_community_segment
What it does
Updates a community segment.
Kind
Asks first
duplicate_community_segment
What it does
Duplicates a community segment.
Kind
Asks first
create_contact_note
What it does
Creates a contact note.
Kind
Asks first
list_contact_notes
What it does
Lists contact notes.
Kind
Reads
get_filter_configuration
What it does
Reads the filters shown on the member directory or a member space.
Kind
Reads
create_filter_control
What it does
Creates a member filter control.
Kind
Asks first
list_filter_controls
What it does
Lists the filters on the member directory and member spaces.
Kind
Reads
delete_filter_control
What it does
Deletes a filter control.
Kind
Asks first
get_filter_control
What it does
Reads a filter control.
Kind
Reads
update_filter_control
What it does
Changes a member directory or member space filter.
Kind
Asks first
create_member_tag
What it does
Creates a member tag.
Kind
Asks first
list_member_tags
What it does
Lists member tags.
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
Updates a member tag.
Kind
Asks first
list_page_profile_fields
What it does
Reads page profile fields.
Kind
Reads
archive_profile_field
What it does
Archives a profile field.
Kind
Asks first
create_profile_field
What it does
Creates a profile field.
Kind
Asks first
list_profile_fields
What it does
Lists your profile fields.
Kind
Reads
delete_profile_field
What it does
Deletes a profile field.
Kind
Asks first
update_profile_field
What it does
Updates a profile field.
Kind
Asks first
unarchive_profile_field
What it does
Unarchives a profile field.
Kind
Asks first
tag_member
What it does
Tags a member.
Kind
Asks first
untag_member
What it does
Takes a tag off a member.
Kind
Asks first
list_tagged_members
What it does
Lists tagged members.
Kind
Reads
get_tagged_member
What it does
Reads one member's tag.
Kind
Reads

Access groups and invitations

add_to_access_group
What it does
Adds a member to access group.
Kind
Asks first
remove_from_access_group
What it does
Removes an access group member.
Kind
Asks first
list_access_group_community_members
What it does
Lists access group community members.
Kind
Reads
get_access_group_community_member
What it does
Shows an access group community member.
Kind
Reads
create_access_group
What it does
Creates an access group.
Kind
Asks first
list_access_groups
What it does
Lists access groups.
Kind
Reads
archive_access_group
What it does
Archives an access group.
Kind
Asks first
update_access_group
What it does
Updates an access group.
Kind
Asks first
unarchive_access_group
What it does
Unarchives an access group.
Kind
Asks first
create_invitation
What it does
Creates an invitation link.
Kind
Asks first
list_invitations
What it does
Lists invitation links.
Kind
Reads
delete_invitation_link
What it does
Deletes an invitation link.
Kind
Asks first
update_invitation_link
What it does
Updates an invitation link.
Kind
Asks first
revoke_invitation_link
What it does
Revokes an invitation link.
Kind
Asks first

Spaces and topics

create_space_group_member
What it does
Creates a space group member.
Kind
Asks first
delete_space_group_member
What it does
Removes a member from a space group.
Kind
Asks first
list_space_group_members
What it does
Lists space group members.
Kind
Reads
get_space_group_member
What it does
Shows a space group member.
Kind
Reads
create_space_group
What it does
Creates a space group.
Kind
Asks first
list_space_groups
What it does
Lists space groups.
Kind
Reads
delete_space_group
What it does
Deletes a space group.
Kind
Asks first
get_space_group
What it does
Shows a space group.
Kind
Reads
update_space_group
What it does
Updates a space group.
Kind
Asks first
add_space_member
What it does
Adds a space member.
Kind
Asks first
remove_space_member
What it does
Removes a space member.
Kind
Asks first
list_space_members
What it does
Lists space members.
Kind
Reads
get_space_member
What it does
Shows a space member.
Kind
Reads
get_space_ai_summaries
What it does
Reads an AI summary of a space.
Kind
Reads
create_space
What it does
Creates a space.
Kind
Asks first
list_spaces
What it does
Lists spaces.
Kind
Reads
delete_space
What it does
Deletes a space.
Kind
Asks first
get_space
What it does
Shows a space.
Kind
Reads
update_space
What it does
Updates a space.
Kind
Asks first
create_topic
What it does
Creates a topic.
Kind
Asks first
list_topics
What it does
Lists topics.
Kind
Reads
delete_topic
What it does
Deletes a topic.
Kind
Asks first
get_topic
What it does
Shows topic details.
Kind
Reads
update_topic
What it does
Updates a topic.
Kind
Asks first
search
What it does
Searches your whole community.
Kind
Reads
create_comment
What it does
Creates a comment.
Kind
Asks first
list_comments
What it does
Lists comments.
Kind
Reads
delete_comment
What it does
Deletes a comment.
Kind
Asks first
get_comment
What it does
Shows a comment.
Kind
Reads
create_direct_upload
What it does
Gets an upload slot for a file, which you then upload yourself.
Kind
Asks first
create_embed
What it does
Creates an embed.
Kind
Asks first
get_embed
What it does
Reads an embed.
Kind
Reads
report_flagged_content
What it does
Reports content for review.
Kind
Asks first
list_flagged_content
What it does
Lists flagged contents.
Kind
Reads
create_image_post
What it does
Creates an image post, as a draft unless you publish it.
Kind
Asks first
list_image_posts
What it does
Lists image posts.
Kind
Reads
delete_image_post
What it does
Deletes an image post.
Kind
Asks first
get_image_post
What it does
Shows an image post.
Kind
Reads
duplicate_image_post
What it does
Duplicates an image post.
Kind
Asks first
unfollow_post
What it does
Unfollows a post.
Kind
Asks first
create_post
What it does
Creates a basic post, as a draft unless you publish it.
Kind
Asks first
list_posts
What it does
Lists basic posts.
Kind
Reads
delete_post
What it does
Deletes a basic post.
Kind
Asks first
get_post
What it does
Shows a basic post.
Kind
Reads
update_post
What it does
Updates a basic post.
Kind
Asks first
get_post_summary
What it does
Reads a post summary.
Kind
Reads

Messages, chat and live rooms

update_chat_preferences
What it does
Updates chat preferences.
Kind
Asks first
import_chat_room_message
What it does
Imports a chat room message.
Kind
Asks first
list_live_rooms
What it does
Lists live rooms.
Kind
Reads
list_live_room_transcripts
What it does
Lists live room transcripts.
Kind
Reads
send_message
What it does
Sends a direct message to a member or a chat room.
Kind
Asks first

Events

create_event_attendee
What it does
Creates an event attendee.
Kind
Asks first
delete_event_attendee
What it does
Deletes an event attendee.
Kind
Asks first
list_event_attendees
What it does
Lists event attendees.
Kind
Reads
create_event
What it does
Creates an event.
Kind
Asks first
list_events
What it does
Lists events.
Kind
Reads
delete_event
What it does
Deletes an event.
Kind
Asks first
get_event
What it does
Reads an event.
Kind
Reads
update_event
What it does
Updates an event.
Kind
Asks first
duplicate_event
What it does
Duplicates an event.
Kind
Asks first

Courses

update_course_progress
What it does
Updates a member's progress in a lesson.
Kind
Asks first
create_course_lesson
What it does
Creates a course lesson.
Kind
Asks first
list_course_lessons
What it does
Lists course lessons.
Kind
Reads
delete_course_lesson
What it does
Deletes a course lesson.
Kind
Asks first
get_course_lesson
What it does
Shows a course lesson.
Kind
Reads
update_course_lesson
What it does
Updates a course lesson.
Kind
Asks first
reorder_course_lessons
What it does
Reorders course lessons.
Kind
Asks first
create_course_section
What it does
Creates a course section.
Kind
Asks first
list_course_sections
What it does
Lists course sections.
Kind
Reads
delete_course_section
What it does
Deletes a course section.
Kind
Asks first
get_course_section
What it does
Shows a course section.
Kind
Reads
update_course_section
What it does
Updates a course section.
Kind
Asks first

Forms and the leaderboard

delete_form
What it does
Deletes a form.
Kind
Asks first
get_form
What it does
Shows a form.
Kind
Reads
update_form
What it does
Updates a form.
Kind
Asks first
duplicate_form
What it does
Duplicates a form.
Kind
Asks first
list_forms
What it does
Lists forms.
Kind
Reads
create_form_submission
What it does
Creates a form submission.
Kind
Asks first
get_form_submissions
What it does
Lists form submissions.
Kind
Reads
get_leaderboard
What it does
Shows a leaderboard.
Kind
Reads

Paywalls, payments and affiliates

export_community_member_charges
What it does
Exports member charges.
Kind
Asks first
list_charges
What it does
Lists member charges.
Kind
Reads
refund_community_member_charge
What it does
Refunds a member charge.
Kind
Asks first
cancel_community_member_subscription
What it does
Cancels a member's subscription.
Kind
Asks first
export_community_member_subscriptions
What it does
Exports member subscriptions.
Kind
Asks first
list_subscriptions
What it does
Lists member subscriptions.
Kind
Reads
resume_community_member_subscription
What it does
Resumes a member's subscription.
Kind
Asks first
get_payment_method_settings
What it does
Reads your community's payment method settings.
Kind
Reads
export_paywall_affiliate_payouts
What it does
Exports paywall affiliate payouts.
Kind
Asks first
mark_paywall_affiliate_payouts_paid
What it does
Marks affiliate payouts as paid.
Kind
Asks first
start_paywall_affiliate_payouts
What it does
Starts paying out your affiliates.
Kind
Asks first
list_paywall_affiliates
What it does
Lists your paywall affiliates.
Kind
Reads
invite_paywall_affiliates
What it does
Invites paywall affiliates.
Kind
Asks first
update_paywall_affiliate
What it does
Updates a paywall affiliate.
Kind
Asks first
delete_paywall_coupon
What it does
Deletes a paywall coupon.
Kind
Asks first
create_paywall_group
What it does
Creates a subscription group.
Kind
Asks first
update_paywall_group
What it does
Updates a subscription group.
Kind
Asks first
search_paywalls
What it does
Searches 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
get_tax_settings
What it does
Reads tax settings.
Kind
Reads
update_tax_settings
What it does
Updates tax settings.
Kind
Asks first

Workflows

activate_workflow
What it does
Turns on a workflow, which can start messaging people.
Kind
Asks first
deactivate_workflow
What it does
Turns off a workflow.
Kind
Asks first
duplicate_workflow
What it does
Duplicates a workflow.
Kind
Asks first
list_workflows
What it does
Lists your workflows.
Kind
Reads
get_workflow
What it does
Reads a workflow.
Kind
Reads

Community settings and your accounts

get_community
What it does
Reads community details.
Kind
Reads
update_community
What it does
Updates a community.
Kind
Asks first
search_locations
What it does
Searches locations.
Kind
Reads
get_connect_settings
What it does
Reads connect settings.
Kind
Reads
update_connect_settings
What it does
Updates connect settings.
Kind
Asks first
list_accounts
What it does
Lists the communities you've set up, without their tokens.
Kind
Reads

Is the Circle MCP server safe?

A post, an invite or a message reaches real members, and paywall changes touch real money. So 104 tools ask first: every change to members, access, spaces, posts, events, courses, forms, paywalls and workflows, and every message and export. They're the ones marked "Asks first" in the tool tables above.

Reading your community never asks, because it changes nothing, though each read still counts against your monthly allowance.

When your AI calls one of them, the call needs a yes first. Where you use it decides who gives it:

  • Claude Code (2.1.246 and later) asks you before every call, in every one of its permission modes.
  • An app that can show forms asks you in a form.
  • Any other app takes your AI's confirm: true as the yes, so tell your AI to check with you first.
  • An agent with no person to ask needs CIRCLE_CONFIRM=model, so its confirm: true counts in every app.
  • In a terminal, you add --confirm to the command.

If the answer is no, nothing reaches Circle.

Make it read-only

Set CIRCLE_READ_ONLY=1 and every tool that asks first disappears from the tool list, leaving 66 reading tools.

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, with what it was about to do and who approved it.

Watch out: Posts, comments and messages are written by your members, and one can try to give your AI orders. Treat them as data, and use CIRCLE_READ_ONLY=1 for an agent working on its own.

Your data

Your requests go straight to Circle, with no server of ours in between and no tracking. Your token stays in your app's config, your shell or your token file.

Members, charges and form submissions are personal data, so keep exports and their download links private.

To cut access, revoke the token under Developers, then Tokens, and remove the server from your app's config.

Connect more than one Circle community

Each token belongs to one community, so each community is its own account here. Set CIRCLE_ACCOUNTS to a JSON list with a name and a token, or a token file, for each community, and CIRCLE_DEFAULT_ACCOUNT to the one that acts when a tool names none. Every tool takes an optional account.

A community never borrows another one's token, so a change meant for one can't land in the other.

Circle MCP server settings

Every setting is an environment variable, in your app's config or your shell.

CIRCLE_API_TOKEN
Default
none
What it does
Holds your Admin V2 token
CIRCLE_TOKEN_FILE
Default
none
What it does
Points at a private file holding the token, instead
CIRCLE_AUTH_SCHEME
Default
Token
What it does
Bearer sends the token the way Circle's quick start shows
CIRCLE_ACCOUNTS
Default
none
What it does
Lists several communities, as JSON
CIRCLE_DEFAULT_ACCOUNT
Default
the first one
What it does
Picks the community that acts when a tool names none
CIRCLE_REQUEST_TIMEOUT_MS
Default
30000
What it does
Gives up on a Circle request after this many milliseconds
CIRCLE_MIN_REQUEST_INTERVAL_MS
Default
200
What it does
Waits this many milliseconds between requests
CIRCLE_MAX_RETRIES
Default
2
What it does
Retries a rate-limited read this many times, and never a write
CIRCLE_READ_ONLY
Default
off
What it does
1 hides every tool that changes something
CIRCLE_ALLOW_DESTRUCTIVE
Default
on
What it does
0 refuses the tools that ask first
CIRCLE_AUDIT_LOG
Default
none
What it does
Names a file that gets one line per attempted write
CIRCLE_SURFACE
Default
full
What it does
search lists three tools that find, describe and run the rest
CIRCLE_TOOL_TIMEOUT_MS
Default
none
What it does
Gives up on any tool after this many milliseconds
CIRCLE_CONFIRM
Default
human
What it does
model lets your AI's confirm: true approve on its own, for an agent with no person to ask
CIRCLE_HTTP_PORT
Default
8787
What it does
Sets the port for --http
CIRCLE_HTTP_HOST
Default
127.0.0.1
What it does
Sets the address for --http, and any other needs a token
CIRCLE_HTTP_TOKEN
Default
none
What it does
Sets the bearer token every --http request needs
CIRCLE_HTTP_ALLOWED_ORIGINS
Default
none
What it does
Lists other websites allowed to call --http, comma separated
CIRCLE_DEBUG
Default
off
What it does
1 prints debug lines

Troubleshooting

Run the doctor first. It names the step that failed and the fix.

What you seeWhat to do
Every request fails with 401Set CIRCLE_AUTH_SCHEME=Bearer, and check that the token is an Admin V2 token
A 403 errorYour plan or your admin role doesn't allow that tool
A post or message is refusedA post needs a Tiptap document, and a message needs exactly one recipient: an email, a list of emails or a chat room
A workflow ID is refusedWorkflows use their long IDs from the workflow list, not numbers
A 429 errorYou're over 2,000 requests in 5 minutes, or past your monthly allowance. Wait, and read fewer pages
An upload didn't finishThe upload slot is only the first step. Upload the file to the link it returned
"…so it will not run without confirm: true"That's the safety check working. Approve it when your app asks

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.

More free tools for your community

Teach your courses on Teachable, or email your members with Kit.

FAQs about the Circle MCP server & CLI

Here are the questions people ask most about the Circle MCP server and CLI.

The Circle MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor manage your Circle community.

It has 170 tools for members, spaces, posts, events, courses, paywalls, messages and workflows, and the same tools run as a CLI that agents like Claude Code and Codex use, or that you type yourself.

An MCP server is a standard way to give an AI app real access to a tool, so it can act instead of guessing.

MCP stands for Model Context Protocol, and Claude, Codex, Cursor and many other AI apps speak it.

Every server I've made is on my MCP servers page.

The Circle CLI is the same program as the Circle MCP server, run as commands.

AI agents like Claude Code, Codex and OpenCode run them for you, and you can type them in a terminal or a script.

One npm package installs both.

Use the Circle MCP server in an AI app with no terminal, like Claude Desktop's chat, and the CLI in a terminal, a script or a cron job.

In an AI app that can run commands, like Claude Code, Codex or Cursor, the CLI is the lighter choice, because it costs nothing until it runs.

Yes, the Circle MCP server is free and open source under the AGPL-3.0-or-later license.

Circle's Admin API comes with its Business plan and up, with a monthly request allowance that grows with the plan.

You need the Business plan or higher, because Circle's Admin API comes with those plans.

Business includes 5,000 requests a month, and higher plans include more.

No, a new post starts as a draft, and publishing it is a separate change that asks first.

Yes, adding a member sends an invitation unless you skip it.

Messages, comments and event reminders can reach people too, so they all ask first.

Yes, the Circle MCP server connects as many communities as you set up in CIRCLE_ACCOUNTS, each with its own token.

Every tool takes an optional account, and a community never borrows another one's token.

To disconnect the Circle MCP server, revoke its token under Developers, then Tokens, which cuts access right away.

Then remove the server from your AI app's config.

The Circle MCP server works with any app that speaks MCP.

That includes Claude Code, Claude Desktop, Codex, Cursor, VS Code, Windsurf, Zed, Cline, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Antigravity and Hermes.

I did.

I'm Navid Moazzez, and I made the Circle MCP server & CLI as one of my free tools on navid.me.

You can read more about me.

The code is on GitHub under the AGPL-3.0-or-later license, and the package is on npm.

More MCP servers & CLIs

Related free tools

Navid Moazzez

AI business strategist

Navid Moazzez helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life.

Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Read the affiliate disclaimer.

Free AI newsletter

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

Loved by 10,000+ readers
Loved by 10,000+ readers