| name | dc |
| description | Read and act on your own Dynamite Circle membership data via the public Member API — profile (read+update), trips (CRUD), events + RSVP, virtual events + RSVP, tickets, invites (send), inbox, rooms, chapters, places lookup, locator digest. Self-contained single-file Python client (CLI / library / MCP), or a hosted MCP endpoint with zero install. |
| tags | dc, dynamite-circle |
DC Member API Skill
Read and act on your own Dynamite Circle membership data via the public DC
Member API at https://api.dynamitecircle.com — your profile, trips, events,
tickets, invites, inbox, rooms, chapters, announcements, and locator digest.
Reads and writes are always scoped to you (the owner of the API key).
There are two ways to use it, and one of them needs nothing installed:
| Path | What it is | Pick it when |
|---|
| Local client (this file) | One stdlib-only Python file: a CLI (dc …), a Python library (from dynamitecircle import DC), and a local stdio MCP server (dc --mcp) | You're an agent that can run Python or shell — you get a CLI, scriptable library calls, and a local server you can pin/run offline |
| Hosted MCP | A remote MCP endpoint: https://api.dynamitecircle.com/mcp (Streamable HTTP) | You're an MCP-capable chat app and want zero install + always-current tools (no updates to manage) |
Rule of thumb for an agent: if you can execute commands, prefer the local
client (richest: CLI + library + MCP, works offline, version-pinnable). If
you're a hosted assistant that only speaks MCP, use the hosted URL. Both
authenticate with the same dk_ key.
Install the local client
Three ways to get the client, from quickest to most isolated:
pip install dynamitecircle
pip install 'dynamitecircle[mcp]'
uvx --from 'dynamitecircle[mcp]' dc --help
git clone https://github.com/dynamitecircle/dc.git && cd dc
Command form in this doc: examples use the installed dc command. From
a clone, replace dc with python3 py/dc.py (e.g. python3 py/dc.py profile).
Setup (get + save your key)
Each member needs their own personal API key. Generate one from the DC
profile dropdown → DC Member API Key. Keys look like dk_<api-key> and
are revocable from the same dropdown.
dc setup --api-key dk_<api-key>
dc self-test
self-test should end with connected as userID[<id>] <Your Name>.
Alternatively, set DC_API_KEY in the environment instead of running setup
— an explicit env var always wins over .env.dc. This is how the hosted MCP
and ephemeral uvx installs receive the key (e.g. the env block of an MCP
server config).
Discovering endpoints
You don't need to memorize the surface — discover it live:
dc help
dc help trips
dc workflows
Authoritative references:
https://www.dynamitecircle.com/developers/ — full human reference, every endpoint/param/response, regenerated on every deploy (always current)
https://api.dynamitecircle.com/openapi.json — the OpenAPI spec (machine-readable)
https://api.dynamitecircle.com/.well-known/mcp.json — MCP discovery descriptor (transport, auth, install)
~80 commands. That's a lot to scan, and some MCP clients cap how many
tools they load. Don't read them all — call dc workflows first to get
the handful of ordered recipes for common goals, then dc help <command>
for the specific ones you need.
Read vs. write (MCP annotations)
Every MCP tool is annotated: reads carry readOnlyHint: true; writes carry
readOnlyHint: false (and destructiveHint: true for trip_delete), plus a
"⚠️ Write operation" note in the description. Reads (profile, trips,
search, …) are safe to run freely; writes (trip_create, profile_update,
event_rsvp, …) mutate your account. Clients that honor annotations can
auto-approve reads and prompt on writes.
Pagination
Every list-returning command takes the same cursor pagination flags:
<command> [--limit N] [--cursor TOKEN]
--limit N — page size (1-100; default varies by endpoint)
--cursor TOKEN — opaque continuation token from the previous response
Responses are wrapped in the standard envelope:
{
"items": [...],
"count": 42,
"cursor": "opaque-token-or-null",
"has_more": true
}
Any non-paginated extras the API returned (e.g. totalUnread on inbox)
are passed through under an extra key.
Output formats
dc profile
dc profile --json
dc profile --python
dc --format python profile
Version warnings
Every API response carries an X-API-Version header. The skill compares
it against its own DC_API_VERSION constant. When the server's major or
minor is ahead of the skill, you'll see a one-shot warning on stderr
prompting you to update:
⚠ DC API has new features available (server 1.3.0, this skill built for 1.2.0).
Update the dc client: cd <your dc clone> && git pull
Patch differences (e.g. server 1.2.5 vs skill 1.2.0) are silent — they're
bug fixes only. The warning fires once per process so it doesn't spam
script users.
Local development
Override the API base URL to test against a local server (e.g. when
running the API on localhost:8083):
dc --api-url http://localhost:8083 profile
DC(api_url="http://localhost:8083")
Commands
Setup & diagnostics
dc setup --api-key dk_<api-key>
dc self-test
dc workflows
Follows (DCers + chapters)
Manage your follow list — the same state the in-app Follow buttons
read and write. Drives the /locator/digest favoritePeople and
favoriteCities sections, so following someone here means their trip
- event + ticket activity shows up in your locator digest.
Caps: 150 followed DCers + 50 followed chapters. Hitting the cap
returns 409 follow_limit_reached — unfollow before retrying.
dc follows-profiles
dc follows-chapters
dc follow-profile 27
dc unfollow-profile 27
dc follow-chapter ChIJ82ENKDJgHTERIEjiXbIAAQE
dc unfollow-chapter ChIJ82ENKDJgHTERIEjiXbIAAQE
All mutations idempotent. Cannot follow yourself. Target must exist
(and for profiles: be publicly visible).
Search
Full-text search across the DC corpus — profiles, rooms, messages
(incl. your private DMs + group DMs you're a member of), events,
chapters. Privacy is scoped to your API key's owner.
dc search "remote work"
dc search "SaaS" --user-id 940
dc search-messages "hiring in Lisbon"
dc search-messages "budget" --room-id abc123
dc search-messages "hiring" --user-id 940
dc search-profiles "SaaS founder"
dc search-rooms "outsourcing"
dc search-rooms "Asia" --type channel
dc search-events "DCBKK"
dc search-events "DC" --country TH
dc search-events "retreat" --since 2026-01-01
dc search-chapters "Bangkok"
Query syntax (q=): plain words match with prefix + typo
tolerance. Wrap a phrase in double quotes for an exact ordered match —
'"remote work"'. AND/OR/NOT/parentheses are not parsed in q= —
use the structured filter args (--room-id, --user-id, --type,
--country, --since, --until) for boolean composition.
Profile
dc profile
dc profile-update --headline 'CEO at Acme'
dc profile-update --github octocat
dc limits
Announcements
Read-only access to DC's broadcast channels (DC, DCBKK, DCMEX, DC BLACK, etc.).
Same content visible in the app's announcements channels — DCC members see
DC-scope announcements; DCB / Accel / Admin members additionally see DC BLACK.
dc announcements
dc announcements --limit 25
dc announcements --limit 10 --cursor <token>
dc announcements-latest
Trips
dc trips
dc trips --limit 10 --cursor <token>
dc trips --past
dc overlaps
dc trip-create \
--start-date 2026-12-01 --end-date 2026-12-05 --place-id ChIJ-ZRLfIQzMBQR2bAQQ8sZh90
dc trip-create \
--start-date 2026-12-01 --end-date 2026-12-05 --place-id ChIJ-ZRLfIQzMBQR2bAQQ8sZh90 \
--points '[{"note":"Coffee near the venue","noteHTML":"<p>Coffee near the venue</p>"}]'
dc trip-create \
--start-date 2026-11-01 --end-date 2026-11-05 --event-id sWnllj1DW2jLMZ1n2KWB
dc trip-update <tripID> --end-date 2026-12-06
dc trip-update <tripID> --points '[]'
dc trip-delete <tripID>
Events (in-person)
dc events
dc events --past --limit 5
dc event <eventID>
dc event-attendees <eventID> --limit 50
dc event-rsvp <eventID> --status yes
Event extras (require an event ticket)
These endpoints return rich event-day content. They require you to hold a
valid ticket for the event — calls without a ticket return 403.
Time fields on the schedule are wall-clock ISO strings paired with the
event's IANA timezone — the digits are venue-local, NOT real UTC.
Always combine startAt + timezone together when displaying.
dc event-schedule <eventID>
dc event-agenda <eventID>
dc event-meetups <eventID>
dc event-sponsors <eventID>
dc session-attendees <eventID> <sessionID>
dc meetup-attendees <eventID> <meetupID>
dc session-bookmark <eventID> <sessionID>
dc session-bookmark <eventID> <sessionID> --bookmarked false
dc meetup-rsvp <eventID> <meetupID>
dc meetup-rsvp <eventID> <meetupID> --joined false
Virtual events (online sessions/calls)
dc virtual-events
dc virtual-events --past
dc virtual-event <sessionID>
dc virtual-event-rsvp <sessionID> --status maybe
dc virtual-event-attendees <sessionID> --limit 50
Tickets
dc tickets
dc tickets --status valid
Invites
dc invites
dc permacode
dc invite-create --email new@friend.com --full-name 'New Friend'
Inbox
dc inbox
Rooms
dc rooms
dc rooms --type channel
dc browse-rooms channel
dc browse-rooms channel --limit 20 --cursor <token>
Chapters (city hubs)
dc chapters
dc chapters --limit 5 --cursor <token>
dc chapter ChIJ82ENKDJgHTERIEjiXbIAAQE
Places (Google Places lookup)
Helpers for resolving a Google Place ID before creating a trip.
dc places-search --q 'Tokyo Japan' --limit 5
dc place ChIJ51cu8IcbXWARiRtXIothAS4
Locator
dc locator
dc locator --sections homeCity,favoriteCities
MCP server
Two ways to expose these commands as MCP tools — pick one:
Hosted (no install, always current): point your client at
https://api.dynamitecircle.com/mcp (Streamable HTTP; OAuth or dk_ Bearer).
For Claude Code: claude mcp add --transport http dc https://api.dynamitecircle.com/mcp.
Local stdio server (offline-capable, version-pinnable). Tools are
auto-derived from the registered commands; CLI and library users don't need
the mcp package.
pip install 'dynamitecircle[mcp]' && dc --mcp
python3 py/dc.py --mcp
Auto-updating local config (no clone; pulls latest on every launch):
{
"mcpServers": {
"dc": {
"type": "stdio",
"command": "uvx",
"args": ["--refresh", "--from", "dynamitecircle[mcp]", "dc", "--mcp"],
"env": { "DC_API_KEY": "dk_<api-key>" }
}
}
}
Static path config (Claude Desktop / Cursor, from a clone):
{
"mcpServers": {
"dc": {
"command": "python3",
"args": ["/absolute/path/to/dc/py/dc.py", "--mcp"]
}
}
}
Full per-client setup: docs/mcp-info.md.
Import usage
from dynamitecircle import DC
dc = DC()
dc.profile()
dc.trips(cursor="abc")
dc.events(past=True, limit=5)
dc.chapters()
dc.places_search(q="Tokyo Japan")
dc.locator(sections="homeCity,favoriteCities")
dc.profile_update({"headline": "CEO at Acme"})
dc.trip_create(start_date="2026-12-01", end_date="2026-12-05", place_id="ChIJ-ZRLfIQzMBQR2bAQQ8sZh90")
dc.event_rsvp("<eventID>", "yes")
dc.invite_create(email="new@friend.com", full_name="New Friend")
Rate limits
Member API rate limits apply:
| Tier | Per minute | Per day |
|---|
| DC Community | 10 | 300 |
| DC BLACK | 60 | 3,000 |
Headers on every response: X-RateLimit-Limit, X-RateLimit-Remaining,
X-RateLimit-Reset, X-RateLimit-Daily-Remaining.