Manage members, spaces, posts, comments, events and tags in a Circle community via the Circle Admin API v2.
Circle ships in the w6w first-party pack. It declares 33 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.circleCircle is a community platform — spaces, courses, events, and paywalled memberships — and this app manages it through Circle’s own Admin API v2, the surface Circle itself recommends over its older v1.
It covers the operational core of running a community: members (list, get, search, invite, update, deactivate, ban), spaces and space membership, posts and comments, and events with attendee management. Tags let a workflow segment members, message-create sends a direct message or starts a group chat, and a general search reaches across spaces and posts at once.
Good for automating member onboarding — inviting someone and assigning them to spaces, groups and tags in one call — keeping community membership in sync with a CRM, publishing content or announcements from another system, and managing event attendees fed by an external registration form.
Three routes to the same 33 actions. The Workflow tab is generated from Circle's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
comment-create Comment on a post, or reply to another comment. Authored by the token's owner — this endpoint has no author override.
comment-delete Delete one comment. Circle may refuse with a 422 as well as 404 — its message is surfaced verbatim.
comment-list Page through comments, optionally narrowed to one post, one space, or a text match. Replies are returned flat, keyed by `parent_comment_id`.
community-get Fetch the community this connection's token belongs to, with its settings. Takes no parameters — the token identifies the community.
event-attendee-list Page through an event's RSVPs. Records carry the attendee's name, email and RSVP date, but not their member id.
event-list Page through events, optionally narrowed to one event space or a date window.
member-ban DESTRUCTIVE — deletes the member's posts, comments, likes and chat messages, then bans their email and IP addresses. There is no unban endpoint.
member-deactivate Deactivate a community member. Circle names this route 'deactivate' — their posts and comments stay. Use `member-ban` to remove content as well.
member-invite Create a community member by email, optionally adding them to spaces and tagging them in the same call.
member-list Page through the community roster, optionally filtered by status or member tags.
member-search Look up a single community member by email address. 404s if there is no match.
member-tag-list Page through the community's member tags. The source of the tag ids the member and tagging actions need.
member-update Edit a member's profile fields, spaces or tags. Association lists REPLACE.
message-create Send a direct message to one member, or open a group chat with several. Bodies are TipTap documents; plain text is wrapped for you.
post-delete Permanently delete a post and its comments. Circle publishes no restore route.
post-list Page through basic posts, optionally narrowed to a space, a space group, a status or a text match.
post-update Edit a post's title, body or settings. Only the fields you supply are touched; a supplied body replaces the whole document.
search Query Circle's own search index across posts, comments, members, spaces, lessons and events. Narrow by type for a uniform result shape.
space-create Create a space. The type is fixed at creation and decides what content it holds.
space-group-list Page through the community's space groups. The source of the `space_group_id` that `space-create` requires.
space-list Page through the community's spaces. The source of the numeric space ids every other action needs.
space-member-add Add one member to one space by email address. Additive — their other spaces are untouched.
space-member-list Page through the members of one space, with their membership settings.
space-member-remove Remove one member from one space by email address. Their other spaces and their community membership are untouched.
tagged-member-add Apply one member tag to one member. Additive — unlike `member-update`, which replaces the member's whole tag list.
tagged-member-remove Remove one member tag from one member. The tag itself, and every other member holding it, is untouched.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Circle's real ids.
{
"manifestVersion": "2",
"name": "circle-example",
"steps": [
{
"id": "comment-create",
"uses": {
"app": "io.w6w.circle",
"action": "comment-create",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"postId": "<postId>",
"body": "<body>"
}
}
]
}comment-create comment-list community-get event-attendee-add event-attendee-list +28 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Circle, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Circle. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "post-create",
payload: {
spaceId: "<value>",
name: "<value>",
// text: "<value>",
// bodyJson: "<value>",
// status: "<value>",
// publishedAt: "<value>",
// authorEmail: "<value>",
// slug: "<value>",
// topics: "<value>",
// isPinned: "<value>",
// skipNotifications: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action post-create --payload '{"spaceId":"<value>","name":"<value>"}' Give an AI agent Circle — without giving it Circle's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.circle#comment-create",
"input": {
"postId": "<postId>",
"body": "<body>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Circle connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Circle's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Circle itself is MIT, and the runtime that executes it is source-available (FSL).
Circle declares its own checks, so its health is a property of the app rather than something the host guesses at.
Atlassian Statuspage summary for status.circle.so. The verdict tracks the Developer API component group — the REST API this app calls — rather than Circle's global indicator, which also aggregates the mobile apps and the help centre. All components are reported.