mcpbeat

DC Member API MCP Server

io.github.dynamitecircle/dc
answering

DC Member API is answering right now. Last checked 8 min ago. It exposes 85 tools. Last commit 15 Jul 2026.

Read and act on your own Dynamite Circle membership data via the public DC Member API.

Uptime history 40 hours of history
40 hours agonow
100.0%
Uptime 24h
91 of 91 checks
85
Tools
read from the server
224 ms
Response time
average over 24h
5
Stars
last commit 15 Jul 2026

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 8 min ago.

run in your terminal
claude mcp add dc --transport http https://api.dynamitecircle.com/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "dc": {
      "url": "https://api.dynamitecircle.com/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.dc]
url = "https://api.dynamitecircle.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "dc": {
      "url": "https://api.dynamitecircle.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "dc": {
      "url": "https://api.dynamitecircle.com/mcp"
    }
  }
}

Available tools 85

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

rooms
rooms
GET /rooms — List your subscribed rooms Returns every room you are subscribed to (DMs, group DMs, channels you follow, discussions, activities, event rooms), sorted by `lastActivityAt` descending. Cursor-paginated. To filter by type use `GET /rooms/inbox/:type` (e.g. `/rooms/inbox/dm` for DMs only).
rooms_archive_create
POST /rooms/:roomID/archive — Archive a room Archive a room — hides it from the inbox sidebar without unsubscribing. Use `unarchive` to bring it back. **Access:** the caller must be a member/subscriber. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.
rooms_browse
GET /rooms/browse/:type — Browse public channels by type Browse publicly-joinable rooms of a given type that you are NOT yet subscribed to. The same surface the in-app Browse Channels modal shows. DC BLACK rooms are filtered out for DC tier members.
rooms_by_id
GET /rooms/:roomID — Get a single room Get a single room's metadata + its latest daily AND weekly AI summaries (when they exist). **Access:** members and subscribers of the room, plus any DCer for browsable public channels/discussions/quick-questions. Private rooms, DMs, group DMs, and event/city rooms you are not a member of return 403. Reading this endpoint does **not** mark the room as read or modify any unread state. **AI summaries:** the latest daily digest is embedded under `aiSummaryDaily`, the latest weekly digest under `aiSummaryWeekly`. Rooms that don't have a given type yet return `null` for that slot. For history (older summaries), call `GET /rooms/:roomID/summaries/daily` or `/weekly`. **See also:** For specific content (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` is faster than paginating `/rooms/:roomID/messages` or reading summaries. The AI summaries cover broad activity per window; search is the tool for targeted lookup.
rooms_inbox
GET /rooms/inbox/:type — List your rooms by type Returns your subscribed rooms filtered to a single type. Same shape as `GET /rooms` but scoped — e.g. `/rooms/inbox/dm` returns DMs only, `/rooms/inbox/group` returns group DMs.
rooms_messages
GET /rooms/:roomID/messages — List messages in a room List messages in a room you are a member of. **Read-only — no write side effects, no unread-state mutation, no reactions/posts/edits.** Cursor-paginated newest-first. **Access:** strict — the caller must be a subscribed member of the room (same `seen` doc check used by the web inbox). For browsable public channels, any DCer can read. Private rooms, DMs (`dm`), group DMs (`group`), event rooms, and city/country/mastermind rooms hard-block non-members with 403. Hidden/deleted/sunk messages are excluded. **Pagination:** pass `?before=<nextCursor>` from a previous response to fetch the next (older) page. Default page size 50, max 50. **See also:** For specific content in this room (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` searches body text directly — far faster than paginating with `?before`. This endpoint is the right call when you want a chronological window (last N messages, conversation reconstruction); search is the right call when you want a topic.
rooms_mute_create
POST /rooms/:roomID/mute — Mute a room Mute notifications for a room. Sets `mutedUntilAt` to a far-future timestamp (no expiry) — the room stays muted until explicitly unmuted. The room still appears in the inbox; only notifications are suppressed. **Access:** the caller must be a member/subscriber of the room. ⚠️ WRITE operation: this mutates your DC account data.
rooms_pin_create
POST /rooms/:roomID/pin — Pin a room Pin a room to the top of the inbox. For subscription-type rooms the caller is auto-subscribed if not already (mirrors the in-app behavior — you can't pin what you don't follow). **Access:** the caller must already have an interaction history with the room (DMs and group DMs require having received at least one message). Idempotent. ⚠️ WRITE operation: this mutates your DC account data.
rooms_subscribe_create
POST /rooms/:roomID/subscribe — Subscribe to a room Subscribe to a public channel, discussion, quick-question room, or event room. The caller is added to the room's `seen` subcollection with `flags.isSubscribed: true` and starts receiving its updates in their inbox. **Access:** the room must be enabled, non-archived, non-private, non-hidden, and of a subscribable type (`channel`, `discussion`, `quick-question`, `event`). Event rooms additionally require a valid ticket to the linked event — call `/events/:eventID` first to verify ticket status. DMs and group DMs cannot be subscribed/unsubscribed via the API; they are managed in-app only. **Idempotent:** subscribing when already subscribed is a no-op (returns 200 with the current state). ⚠️ WRITE operation: this mutates your DC account data.
rooms_summaries
GET /rooms/:roomID/summaries/:type — List past daily or weekly summaries List past summaries of a given type for a room, newest first. Cursor-paginated — pass `cursor` from the previous response to fetch the next (older) page. Each summary covers a non-overlapping window (one per day for daily, one per week for weekly). Use this for catch-up workflows ("show me the last 7 daily summaries before I rejoin the conversation"). Same access gate as `GET /rooms/:roomID`. **See also:** Summaries cover broad activity per window. For specific content (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` is faster than reading multiple summaries.
rooms_summary
GET /rooms/:roomID/summary/:type — Get the latest daily or weekly summary Get the latest single summary of a given type for a room. **Type is required** — daily and weekly summaries cover different windows and live in separate slots. Pass the type you want as a path segment. For history (multiple past summaries) use `GET /rooms/:roomID/summaries/:type`. Same access gate as `GET /rooms/:roomID`. **See also:** AI summaries cover broad activity per window. For specific content (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` is faster than reading summaries.
rooms_unarchive_create
POST /rooms/:roomID/unarchive — Unarchive a room Unarchive a previously-archived room. Restores it to the inbox sidebar. **Access:** the caller must be a member/subscriber. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.
rooms_unmute_create
POST /rooms/:roomID/unmute — Unmute a room Unmute a previously-muted room. Clears `mutedUntilAt`. **Access:** the caller must be a member/subscriber of the room. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.
rooms_unpin_create
POST /rooms/:roomID/unpin — Unpin a room Unpin a previously-pinned room. Returns it to its normal place in the inbox sort order. **Access:** the caller must be a member/subscriber. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.
rooms_unsubscribe_create
POST /rooms/:roomID/unsubscribe — Unsubscribe from a room Unsubscribe from a public channel, discussion, quick-question, or event room. The caller's `seen` doc is updated to `flags.isSubscribed: false`, the badge count is cleared, and the room drops out of the inbox sidebar. **Access:** the caller must already be a subscriber. DMs and group DMs cannot be unsubscribed via the API. **Idempotent:** unsubscribing when already unsubscribed is a no-op. ⚠️ WRITE operation: this mutates your DC account data.
search_rooms
GET /search/rooms — Search rooms Search rooms by name, description, and topic. Returns rooms that match the query AND that you have access to (subscribed-or-browsable; private rooms / DMs / group DMs you're NOT a member of are filtered out). **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.
event
event
GET /events/:eventID — Get event details Returns full details for a specific event, including your ticket status.
event_agenda
GET /events/:eventID/agenda — Get your personal agenda for an event Returns the sessions and meetups **YOU** have on your personal agenda for an event: - Sessions you bookmarked from the schedule. - Meetups you RSVPd to. **Access:** caller must hold a valid ticket to the event. Use `POST /events/:eventID/schedule/:sessionID/bookmark` and `POST /events/:eventID/meetups/:meetupID/rsvp` to manage entries.
event_agenda_get
GET /events/:eventID/agenda/:userID — Get another attendee's agenda for an event Returns another attendee's personal agenda for an event — the sessions they bookmarked + meetups they RSVPd to. Use this so an AI agent can plan together with another DCer (find a coffee window, suggest sessions to overlap, propose a meetup). **Access:** open to any active DCer who can see the event. The target must hold a valid ticket — otherwise there is no agenda to return (404).
event_agendas
GET /events/:eventID/agendas — Get multiple attendees' agendas in one call Returns the agendas (bookmarked sessions + meetup RSVPs) for **multiple** attendees in a single call. Use when an AI agent needs to plan around several DCers at once — comparing schedules, finding shared sessions, building a meetup invite list. **Query**: `userIDs=A,B,C` — comma-separated. Max 20 IDs per call. **Behavior**: silently drops IDs that don't hold a valid ticket (so the AI doesn't need to pre-filter). Returns only the agendas for confirmed attendees, in the order requested. **Access:** open to any active DCer who can see the event (non-attendee target IDs are silently dropped).
event_attendees
GET /events/:eventID/attendees — List event attendees List the confirmed attendees of an event — DCers holding a `valid` paid ticket OR a `valid`/`maybe` RSVP status. Refunded/canceled tickets are excluded. Hidden and guest profiles are filtered out. Profiles returned use the same shape as the rest of the API (`GET /profile-match`, `GET /trips/:tripID/discovery`, etc.) — full public-other-person view including businessName, socials, expertise, plus privacy-gated annualRevenue + teamSize where shared. **Access:** any active DCer can view event attendees, matching the in-app attendee tab. **Pagination:** newest first; page with `?limit=` (1-100, default 100) plus the opaque `?cursor=` from the previous response's `nextCursor` (`null` when there are no more).
event_free_slots_create
POST /events/:eventID/free-slots — Find shared free time slots across attendees Computes shared **free slots** across a set of event attendees — the time windows where they're NOT in a bookmarked session or meetup. Use to find a coffee window with one DCer, or a junto-style lunch slot for a group. **Body**: `userIDs[]` (1-20), `minDurationMinutes` (default 30, min 15, max 480), optional `eventDayDate: YYYY-MM-DD` to scope to a single event day. **Slot grid**: derived from the event's session schedule, partitioned into `minDurationMinutes` windows. For each window we subtract each user's bookmarked sessions + meetup RSVPs. **Sort**: slots ranked by `len(freeFor)` desc — fully-shared windows first, then partial overlaps. **Auth**: caller must hold a valid ticket. Non-attendee IDs are silently dropped. ⚠️ WRITE operation: this mutates your DC account data.
event_meetup_attendees
GET /events/:eventID/meetups/:meetupID/attendees — List meetup attendees Returns the list of attendees who have RSVPd to a specific meetup. Same profile shape as `/events/:eventID/attendees`. **Access:** any active DCer who can see the event.
event_meetup_rsvp
POST /events/:eventID/meetups/:meetupID/rsvp — RSVP to / leave a meetup Join or leave a meetup. Requires a valid ticket for the event. The meetup's `rsvpCount` is updated atomically and idempotently. When the meetup has a linked chat channel, this mirrors the DC app side effects too: joining subscribes you to the meetup chat and leaving removes you from it. ⚠️ WRITE operation: this mutates your DC account data.
event_meetups
GET /events/:eventID/meetups — List event meetups Returns the approved member-organized meetups for an event, sorted chronologically. Only approved meetups are returned. **Access:** any active DCer who can see the event can view approved meetup listings + attendee lists. Only RSVPing to a meetup (and the resulting chat-channel access) requires a valid ticket. **Time-zone handling:** meetups use explicit wall-clock fields (`date` = YYYY-MM-DD, `startTime` / `endTime` = HH:mm) plus the event's `timezone` (IANA). Pair them when localizing.
event_rsvp
POST /events/:eventID/rsvp — RSVP to a free event RSVP to an event that uses free RSVP (not ticketed). Only works for events with rsvpEnabled: true. ⚠️ WRITE operation: this mutates your DC account data.
event_schedule
GET /events/:eventID/schedule — Get event schedule Returns the full schedule (sessions) for an event, sorted chronologically. **Access:** any active DCer who can see the event can view its public schedule. Personal agenda actions still require a valid ticket. **Time-zone handling:** session `startAt` / `endAt` are returned as ISO 8601 strings whose digits represent the **venue-local wall-clock time** (e.g. a 9 AM Mexico City session returns `2026-05-08T09:00:00.000Z`, NOT `15:00:00Z`). The session's `timezone` field carries the IANA zone (e.g. `America/Mexico_City`) — pair them when localizing. This matches the convention used by the DC ICS feed.
event_schedule_attendees
GET /events/:eventID/schedule/:sessionID/attendees — List session attendees (people who bookmarked it) Returns the list of attendees who have **bookmarked** a specific session into their agenda. Same profile shape as `/events/:eventID/attendees`. **Access:** any active DCer who can see the event.
event_schedule_bookmark
POST /events/:eventID/schedule/:sessionID/bookmark — Bookmark / unbookmark a session Add or remove a session from your personal agenda — this is the API equivalent of the bookmark/star icon on a session card in the DC app. Requires a valid ticket for the event. Counter `rsvpCount` on the session doc is updated atomically and idempotently: repeating the same desired state does not increment or decrement the counter again. ⚠️ WRITE operation: this mutates your DC account data.
event_sponsors
GET /events/:eventID/sponsors — List event sponsors Returns the sponsors for an event, ordered by tier (primary → supporting) then display order. Deleted sponsors are filtered out. **Access:** any active DCer who can see the event — sponsors are public.
follows
follows_chapter_create
POST /follows/chapters/:cityID — Follow a chapter Follow a DC chapter (city hub). Idempotent. Target must exist in the chapters list (discover via `GET /chapters`). Cap 50 — hitting it returns `409 follow_limit_reached`. This list also drives the `/locator/digest` `favoritePeople` and `favoriteCities` sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere. ⚠️ WRITE operation: this mutates your DC account data.
follows_chapter_delete
DELETE /follows/chapters/:cityID — Unfollow a chapter Unfollow a DC chapter. Idempotent — unfollowing a chapter you weren't following is a no-op. ⚠️ WRITE operation: this mutates your DC account data.
follows_chapters
GET /follows/chapters — List followed chapters List the DC chapters (city hubs) you are currently following. Each entry is a mini-chapter with the chapter's Google Place ID — useful for creating trips or surfacing activity in that city. Cap: 50 follows. This list also drives the `/locator/digest` `favoritePeople` and `favoriteCities` sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere.
follows_profiles
GET /follows/profiles — List followed DCers List the DCers you are currently following. Returns the same mini-profile shape used by every other list endpoint, so each entry roundtrips cleanly with `GET /profile/:userID` or `POST /follows/profiles/:userID`. Cap: 150 follows; the response `cap` echoes that so a client can warn the user as they approach the limit. This list also drives the `/locator/digest` `favoritePeople` and `favoriteCities` sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere.
follows_profiles_by_id_create
POST /follows/profiles/:userID — Follow a DCer Follow a DCer. Idempotent — calling it twice with the same userID is safe (no-op the second time). Target must exist and be publicly visible (hidden + guest profiles are refused with 404). You cannot follow yourself. When the cap of 150 is reached, returns `409 follow_limit_reached` with a hint to unfollow someone first. The response includes the new `profile` mini-card and updated `count` so the caller can render the change without re-fetching. This list also drives the `/locator/digest` `favoritePeople` and `favoriteCities` sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere. ⚠️ WRITE operation: this mutates your DC account data.
follows_profiles_by_id_delete
DELETE /follows/profiles/:userID — Unfollow a DCer Unfollow a DCer. Idempotent — unfollowing someone you weren't following is a no-op (still returns 200 with the updated `count`). Use it whenever you want to stop seeing a DCer in your `/locator/digest` favoritePeople section. ⚠️ WRITE operation: this mutates your DC account data.
trip
trip
GET /trips/:tripID — Get a single trip Single-trip read with the full payload. **This is the canonical endpoint for "who should I meet on this trip?"** — the response embeds a complete `discovery` block (ranked top-10 picks with AI summaries, the full pool of locals + visitors, events in town, and date-overlapping trips). If you only want the discovery block without the trip body, use `GET /trips/:tripID/discovery`. **Key discovery fields agents almost always want:** - `discovery.people` — **ranked top-10 DCers to meet** on this trip, each carrying `score` (higher = better match), mini `profile` (userID, userName, displayName, photo, headline), `reason` (`local` / `visiting` / `event-attendee`), `overlapDays`, `detail`. Sourced from a vector-search + business-context ranking, not just date overlap. - `discovery.whyToMeet` — **AI-written "why you should meet them" paragraph** for each of the top-10, keyed by userID, each `{ text, generatedAt }`. The most useful AI signal in the whole trip product — agents should surface this verbatim when introducing a match. - `discovery.fullPool` — every visible DCer travelling or local during the trip window (typically 5–10× larger than `/trips/overlaps`, which only returns date-window matches). Same row shape as `people` but no `score`. - `discovery.overlappingTrips` — other DCers travelling at the same time/place, each with mini profile attached so no second fetch is needed. This is the same data that `/trips/overlaps` returns, embedded here for convenience. - `discovery.events` — events in the destination city during the trip window. - `discovery.generatedAt` — when the discovery cache was last refreshed. **Also included:** `points` — up to 20 venue/idea notes with optional Google Place data, plus a linked `roomID` for the auto-created trip coordination room. Hidden + guest profiles are filtered out from all discovery lists. The `discovery` block is `null` for newly-created trips until the background sync task runs (~seconds — call `POST /trips/:tripID/refresh` to force-recompute). Open to any authenticated DCer (you can read other DCers' trips too).
trip_delete
DELETE /trips/:tripID — Delete a trip Permanently delete one of your trips. Removes the trip doc and its linked chat room (`trip.roomID`). The destination chapter's upcoming-trip count is recomputed in the background. **Owner-only** — you can only delete trips you created. The action is irreversible; deleted trips don't go to a trash collection. ⚠️ WRITE operation: this mutates your DC account data.
trip_discovery
GET /trips/:tripID/discovery — Get the discovery block for a trip Discovery-only read for a trip. Returns the same `discovery` block as `GET /trips/:tripID` (people, fullPool, whyToMeet, events, overlappingTrips) without the trip body. Useful for callers that just want "who should I meet on this trip?" — the AI agent gets the ranked top-10 + their `whyToMeet` paragraphs in a single request. Use `?include=` to subset the response — comma-separated from `people,fullPool,whyToMeet,events,overlappingTrips`. Default is all. Common patterns: - `?include=people,whyToMeet` — top-10 picks + their AI-written "why you should meet them" paragraphs (keyed by userID, each carrying `{ text, generatedAt }`) - `?include=fullPool` — every visible DCer travelling/local during the trip window - `?include=events` — just events in the destination city during the trip window Open to any authenticated DCer; hidden + guest profiles are filtered out.
trip_refresh_create
POST /trips/:tripID/refresh — Trigger a trip refresh Owner-only sync trigger. Enqueues a deduped background job that recomputes the trip's discovery (overlapping people, events, AI blurbs). Spammy reloads coalesce. Returns 202 Accepted immediately; the cached `discovery` block on the trip doc updates when the job completes. ⚠️ WRITE operation: this mutates your DC account data.
trip_update
PATCH /trips/:tripID — Update a trip Update one or more fields on an existing trip. Only include the fields you want to change. To change destination, provide either `placeID` or `eventID` and the full location will be re-resolved. **Trip points**: passing `points` replaces the entire array (it's not a patch within the array). Up to 20 items, same shape as `POST /trips`: `{ note: string (max 280 chars), noteHTML?: string, placeID?: string }`. To clear all points, pass `points: []`. ⚠️ WRITE operation: this mutates your DC account data.
alerts
alerts
GET /alerts — List your alerts Returns the user's alerts, ordered by creation date (newest first). Maximum 50 results.
alerts_by_id_delete
DELETE /alerts/:alertID — Deactivate an alert Soft-delete an alert by setting `active: false`. The alert's history is preserved for past digests. Use `PATCH /alerts/:alertID` with `active: true` to reactivate. ⚠️ WRITE operation: this mutates your DC account data.
alerts_by_id_update
PATCH /alerts/:alertID — Update an alert Update one or more fields on an existing alert. Only provide the fields you want to change. ⚠️ WRITE operation: this mutates your DC account data.
alerts_create
POST /alerts — Create an alert Create a new alert. The system will search for matching content and deliver digests on the configured frequency. Maximum 10 active alerts per user. ⚠️ WRITE operation: this mutates your DC account data.
virtual
virtual_event
GET /virtual-events/:sessionID — Get Live Call details Returns the same payload shape as one entry from `GET /virtual-events` for a single online Live Call — `sessionID`, `name`, `description`, `kind` (which audience tier the session is open to), `scheduledAt` / `scheduledEndAt` (ISO 8601), `duration` in minutes, `attendeeCount`, `chatRoomID`, `isLive`, `meetUrl` (the video-call join link, returned regardless of your RSVP state), `myRsvp` (your current `yes`/`no`/`maybe` or `null`), and `status`. DC BLACK callers also see DC BLACK-only sessions; DC tier callers get `tier_restricted` (403) on those.
virtual_event_attendees
GET /virtual-events/:sessionID/attendees — List Live Call attendees List the attendees of a Live Call — the DCers who RSVPd `yes` or `maybe` (the same set behind `attendeeCount`, mirroring how `GET /events/:eventID/attendees` counts RSVPs). Profiles use the standard other-person shape (identical to `GET /events/:eventID/attendees` and `GET /profile-match`): public fields plus privacy-gated `annualRevenue` + `teamSize` where the member shares them. Hidden and guest profiles are filtered out. **Access:** any active DCer who can see the Live Call. DC BLACK-only calls stay tier-gated — DC-tier callers get `tier_restricted` (403). **Pagination:** page with `?limit=` (1-100, default 100) plus the opaque `?cursor=` from the previous response's `nextCursor` (`null` when there are no more). See `GET /virtual-events/:sessionID` for the call itself, and `GET /events/:eventID/attendees` for the in-person equivalent.
virtual_event_rsvp
POST /virtual-events/:sessionID/rsvp — RSVP to Live Call RSVP to a Live Call. The user is added to the matching attendance list on the session doc (`participantIDs` for `yes`, `maybeIDs` for `maybe`, `notIDs` for `no`) and removed from the others. Three statuses: - `yes` — you intend to attend; you'll show up in `attendeeCount`. - `maybe` — soft attendance signal. - `no` — you're declining. Use this to back out after a prior `yes` or `maybe`. **Note:** the `meetUrl` (join link) on `GET /virtual-events/:sessionID` is **not** gated on your RSVP — it's returned whenever the host has set one, regardless of attendance state. RSVPing is purely an attendance signal. **Idempotent** — re-RSVPing with the same status is a no-op. ⚠️ WRITE operation: this mutates your DC account data.
virtual_events
GET /virtual-events — List Live Calls Returns upcoming Live Calls (online sessions like Connect Calls, Happy Hour, Welcome Call, plus DC BLACK-only calls). Add `?past=true` to include past calls.
invites
invites
GET /invites — List your invites List the referral invites credited to you. Two source types appear: - **`manual`** — invites you sent via `POST /invites` (the explicit email-an-invitee flow). - **`permaCode`** — applicants who signed up through your shareable permacode link (`GET /invites/permacode`). Each record tracks where the prospective member is in the funnel (`new` → `invited` → `started` → `submitted` → `approved`/`rejected`/`expired`), the invite type, the invitee's name + email, and timestamps. Read-only.
invites_create
POST /invites — Send an invite Send a referral invite to someone. The server queues a templated email (delivered via a background task) that points the invitee at the apply flow with you pre-credited as the referrer. The created invite shows up in `GET /invites` immediately at status `new`. ⚠️ WRITE operation: this mutates your DC account data.
invites_permacode
GET /invites/permacode — Get your permacode Returns your permanent referral code. Share this link to let people apply with your referral.
locator
locator_digest
GET /locator/digest — Get locator digest Returns your weekly locator digest — the same data that powers the Friday locator email. Use this to surface trip/event activity around the people and cities a member already follows. The response is composed of four independent sections; pass `?sections=<csv>` to skip any you don't need. Each section is described in full below. - **`homeCity`** — Activity in the city you have set as your home chapter. Null if you have no home city, or if you don't belong to any chapter yet. - **`favoriteCities`** — Per-city digest for cities you have favorited (besides your home city). Each entry lists upcoming trips/events into that city + new ones added since last week. - **`favoritePeople`** — Recent activity from members you follow: their new trips, upcoming trips, recently purchased tickets, and events they've RSVPd to. - **`myTrips`** — For each of your own upcoming trips, the people you're likely to overlap with (chapter leads, local members, and other DCers visiting the same city in the same window). Pass a comma-separated subset to `?sections=...` to omit sections you don't use — useful for narrow integrations and faster responses.
locator_settings
GET /locator/settings — Get your Friday locator email settings Returns the four toggles that control the Friday locator email digest. The digest is a weekly outbound email surfacing new events, tickets, and trips relevant to you.
locator_settings_update
PATCH /locator/settings — Update your Friday locator email settings Update any subset of the Friday locator email toggles. Send only the fields you want to change. ⚠️ WRITE operation: this mutates your DC account data.
profile
profile
GET /profile — Get your own profile Returns your own full profile — every field the in-app profile editor surfaces to you, plus tier-derived state. Same shape regardless of tier (DC and DC BLACK members get identical own-profile payloads). Use `PATCH /profile` to update editable fields.
profile_match_create
POST /profile-match — Match DCers from a description (or recommend if omitted) **AI-powered profile matchmaker.** Match DCers against a natural-language description, or — when `query` is omitted — recommend DCers based on your own profile (chapter, industry, expertise, goals). Returns ranked results from a profile-vector search (Gemini embeddings + reranking under the hood). The caller's LLM synthesizes any narrative on top. Stricter rate limits than the standard CRUD endpoints because of the embedding/rerank cost. **Two modes**: - **With `query`**: free-form description ("DCers in Lisbon who run SaaS"). - **Without `query`**: AI builds an implicit query from your profile and returns "DCers you should meet". Useful for cold-start "who should I message this week?" prompts. **Optional structured filters** (combine with either mode, all AND-ed): - `locationChapterPlaceID` — narrow to DCers whose home / base location matches this Google Place ID. Use for "based in X" queries. Resolve via `GET /places/search`. - `locationCurrentPlaceID` — narrow to DCers currently in this place (auto-derived from their last GPS / active trip). Use for "currently in X" / "visiting X" queries. - `eventID` — narrow to DCers holding a valid ticket to this event ("DCers attending DCMEX who run logistics"). Refunded / canceled tickets are excluded. - `isDCB` — when `true`, narrow to DC BLACK members only. - `businessIndustry` — exact match on the DCer's primary business industry. - `minTeamSize` — "at least this size" filter on team headcount (only matches DCers whose team-size visibility is shared with all DCers). - `minAnnualRevenue` — "at least this revenue" filter on annual revenue (only matches DCers whose revenue visibility is shared with all DCers). - `gender` — exact match on the DCer's self-reported gender. **Note: Gender is sparsely populated — most DCers leave it blank.** Use this as a "narrow if set" hint rather than a hard requirement; combine with `query` for best results. ⚠️ WRITE operation: this mutates your DC account data.
profile_update
PATCH /profile — Update profile fields Update allowed profile fields. Only the fields you include will be changed. Location, photo, and gender cannot be updated via API. ⚠️ WRITE operation: this mutates your DC account data.
trips
trips
GET /trips — List your trips Returns your upcoming trips by default. Add `?past=true` to include past trips. **For "who should I meet on this trip?"** fetch `GET /trips/:tripID` (or the discovery-only `GET /trips/:tripID/discovery`) — both return the ranked top-10 DCers + AI-written summaries + the full pool of locals and visitors in town during the trip window. The list response below does NOT include the discovery block (lazy by design — discovery is a much heavier payload).
trips_create
POST /trips — Create a trip Create a new trip. Provide exactly one of `placeID` or `eventID` — the server resolves the location (city, country, country code) automatically. Use `GET /places/search` to find a placeID by city/country name first, or pass an `eventID` from `/events` to create a trip to that event's city. **Trip points** (optional `points` array, up to 20 per trip): each item is `{ note: string (max 280 chars), noteHTML?: string, placeID?: string }`. The optional `placeID` is resolved against Google Places at write time and the full Place object (city, country, lat/lon, name, etc.) is stored on the trip — so reads don't do any lookups. `noteHTML` preserves the same rich text field the web trip editor stores for formatted notes, links, and mentions; `note` remains the required plain-text fallback. Notes without a placeID are valid ("remember to book a coworking space"). Pass an unknown / expired Google placeID → 400 with a clear error. ⚠️ WRITE operation: this mutates your DC account data.
trips_overlaps
GET /trips/overlaps — Find overlapping trips Find other members whose trips overlap with yours by city + date range. **This is a narrow date-window match, NOT the AI-ranked discovery pool.** For the full set of DCers you could meet on a trip — including locals in town and AI-written "why you should meet them" summaries — fetch `GET /trips/:tripID/discovery` (or `GET /trips/:tripID`, which embeds the same `discovery` block). The discovery pool is typically 5–10× larger than `/trips/overlaps` because it includes locals and event attendees in addition to date-overlap visitors, and it carries ranked top-10 picks with AI summaries that this endpoint does not. Use `/trips/overlaps` for the simple "who is travelling here at the same time as me" question. Use `/trips/:tripID/discovery` for "who should I meet on this trip?".
announcements
announcements
GET /announcements — List recent announcements Returns the most recent announcements from DC's broadcast channels — official updates from the DC team and chapter staff (DC, DCBKK, DCMEX, DC BLACK, etc.). Same content you see in the app's announcements channels, in a flat newest-first feed. Visibility mirrors the app: DC members see DC-scope announcements; DC BLACK members and staff additionally see DC BLACK announcements. There is no posting, replying, or per-channel filtering — announcements are intentionally one-way and minimal.
announcements_latest
GET /announcements/latest — Latest announcement per channel (quick overview) Returns the **single most recent announcement from each visible channel** — a one-shot overview rather than a paged feed. Useful as a "what's new across DC?" quick check before drilling into the full feed via `GET /announcements`. Visibility rules are identical to `/announcements`: DC members see DC-scope channels; DC BLACK members and staff additionally see DC BLACK channels. No pagination — the result size equals the number of dispatch channels you can see (currently ~4).
calendar
calendar
GET /calendar — Get your iCalendar feed URL + settings Returns your iCalendar feed URLs and the toggles that control which event categories the feed includes. **Three URLs are returned:** - `httpsURL` — paste into any calendar app that accepts an HTTPS subscription - `webcalURL` — same URL with the `webcal://` scheme; macOS / iOS Calendar opens it directly - `googleURL` — one-click Google Calendar subscribe link The feed includes events you have tickets to, virtual calls, your trips, chapter events, and flagship events — exactly what each `include*` toggle below controls. Tokens are deterministic, so the URLs never change for a given member.
calendar_update
PATCH /calendar — Update calendar feed settings Update any subset of your calendar feed toggles. Send only the toggles you want to change — omitted fields are left untouched. Returns `{ updated: true }` on success; re-fetch `GET /calendar` if you need the full toggle set + feed URLs (the URLs themselves are stable and don't change when toggles update). ⚠️ WRITE operation: this mutates your DC account data.
chapters
chapters
GET /chapters — List chapters List all DC chapters (city-based community hubs), sorted by member count. Each chapter has a Google Place ID — pass it to `POST /trips` to create a trip to that chapter's city. **See also:** For a chapter by city or country name (`q='Lisbon'`, `q='Thailand'`), `POST /search/chapters` searches city + country names directly — faster than paginating this member-count-sorted list.
search_chapters
GET /search/chapters — Search chapters Search DC chapters by city or country name. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.
events
events
GET /events — List upcoming events Returns upcoming DC events, sorted by date. Add `?past=true` to include past events. **See also:** For events by name or topic (`q='productivity'`, `q='DCBKK 2026'`), `POST /search/events` searches title + description directly — faster than paginating this date-sorted list. Combine with `?cityID`, `?country`, `?since`, `?until` filters for narrower scopes.
search_events
GET /search/events — Search events Search enabled DC events by name, description, host, and venue. No default time filter — pass `?since=` or `?until=` (ISO 8601 dates) to constrain. They compose: pass both for an explicit window. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.
interests
interests
GET /interests — Get your interests config Returns the user's interests configuration — the set of tags they have subscribed or unsubscribed from. Returns an empty `{ tags: {}, createdAt: null, updatedAt: null }` shape when no config exists yet.
interests_create
POST /interests — Subscribe or unsubscribe from interests Subscribe or unsubscribe from interest tags in a single call. Pass a `updates` map of `{ slug: { subscribed: boolean } }` with up to 20 entries. Slugs that are not in the known interest definitions are silently ignored at the name-lookup step (the subscription is still recorded). ⚠️ WRITE operation: this mutates your DC account data.
membership
membership
GET /membership — Get your membership state Returns your full membership state: role, lifecycle dates, trial status, billing/subscription details, and a link to the Stripe Customer Portal where you can manage your subscription, payment methods, and download invoices.
membership_invoices
GET /membership/invoices — List your Stripe invoices Returns your Stripe invoices, newest first. Each entry includes a hosted-invoice URL and a PDF link, both safe to share — perfect for self-serve receipts. Returns an empty array for legacy paypal/chargify members or members with no Stripe customer.
notifications
notifications
GET /notifications — Get your notification preferences Returns your push + email preferences per notification category. Defaults are applied for any preference you have never explicitly set. Email is `null` for `reaction` / `myReaction` because email is not supported for those categories. For the Friday locator email digest, see `GET /locator/settings` — that's a separate concern (outbound digest, not per-event push/email).
notifications_update
PATCH /notifications — Update your notification preferences Update any subset of your notification preferences. Send only the categories/channels you want to change — the rest stay as-is. Email is rejected for `reaction` / `myReaction` (not supported). ⚠️ WRITE operation: this mutates your DC account data.
chapter
chapter
GET /chapters/:cityID — Get a single chapter Get full details for a single chapter, including up to 100 home-chapter members and the list of DCers currently visiting via active trips. - `members` — DCers whose **home chapter** is this city (up to 100). - `currentVisitors` — DCers with an active trip to this city (`startDate <= now <= endDate`). Each entry carries a mini `profile` block, the visitor's `tripID`, and trip start/end dates. Use this to answer "who is in <city> right now?" — both locals (via `members`) and visitors (here). Hidden + guest profiles are filtered from both lists.
inbox
inbox_unread
GET /inbox/unread — Get unread counts Returns your total unread message count and per-room breakdown. Only includes rooms you are subscribed to or are a member of.
limits
limits
GET /limits — Get your effective rate limits + current usage Returns the effective per-minute and per-day rate limits for your API key, **plus current usage** (how many calls you have already made in the current minute and day windows, when each window resets, and how many calls you have left). Limits derive from your membership tier (DC member: 10/min, 300/day; DC BLACK member and staff: 60/min, 3000/day) unless an admin has set per-key overrides — overrides win when present. The same usage data is also exposed on every API response via the `X-RateLimit-Remaining`, `X-RateLimit-Reset`, `X-RateLimit-Daily-Remaining`, and `X-RateLimit-Daily-Reset` headers. Use this endpoint when you want a JSON snapshot, or the headers when you want to read it on every call.
messages
search_messages
GET /search/messages — Search messages (incl. your private DMs) Search message bodies across every room you can access. **This is the key surface for "catch me up on what was said about X"** — your private DMs, group DMs, and any room you're a member of are all searchable. Messages from rooms you don't belong to are filtered out before any results return. Scope to one room with `?roomID=` (the room is double-gated against your membership — passing a roomID you're not in returns 403, not silently-empty results). Scope to one author with `?userID=`. The two compose: `?roomID=<id>&userID=<id>` returns just messages by that author in that one room. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.
place
place
GET /places/:placeID — Get place details Fetch full details for one Google Place ID. Useful for verifying a placeID before sending it to `POST /trips` (which only accepts `type: "city"` placeIDs and rejects venues with a 400). Same shape as a single entry from `GET /places/search`.
places
places_search
GET /places/search — Search Google Places Search for places by name. Use this to look up a Google Place ID before creating a trip or referencing a venue. Results include a `type` field that classifies each match as `city` (a chapter-level locality usable for trips) or `venue` (a specific establishment, address, or country/region match — usable for events/meetups but rejected by `POST /trips`). Filter on `type === "city"` if you're building a trip-creation flow; pass either type to event/meetup APIs. Every result also includes the full enriched location (`description`, `lat`, `lon`, `region`, `regionCode`, `utcOffsetMins`) so the same payload can be passed straight to `POST /trips` without a follow-up `GET /places/:placeID` lookup.
profiles
search_profiles
GET /search/profiles — Search profiles Full-text search across DCer profiles — headlines, bios, business descriptions, expertise, hobbies, etc. Returns matching profile records with privacy gates applied (hidden + guest profiles filtered out). For structured/AI-driven matchmaking ("DCers in Lisbon who run SaaS"), prefer `POST /profile-match` — it has a richer ranking pipeline and filters. This endpoint is the plain full-text fallback. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.
report
report_issue_create
POST /report-issue — Report an issue or feedback Submit a bug report, feedback, or question to the DC team. Optionally include a base64-encoded screenshot (PNG, JPEG, or WebP, up to 4 MB raw). **Privacy note:** Screenshots and report text are sent unredacted to the DC team. Don't include passwords, payment details, or other secrets. ⚠️ WRITE operation: this mutates your DC account data.
search
search
GET /search — Cross-resource omni-search Cross-resource search across profiles, rooms, messages (incl. private DMs + group DMs you're in), events, and chapters in one round trip. Returns the top-N matches per resource, grouped by resource. Use this when you don't yet know which resource carries the answer — agents typically call this first, then drill into a specific `GET /search/<resource>` for more depth on a single bucket. There's no page param: when you hit the per-resource limit and want more, switch to the per-resource endpoint for that one. The events slice has a baked-in forward-looking default (events ending in the last 30 days or later, and currently enabled) — this matches the in-app "Search across DC" surface. Use `GET /search/events` directly to look further back in time. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.
tickets
tickets
GET /tickets — List your tickets Returns your tickets across events, newest first. Defaults to the tickets you're holding (`valid` plus `maybe`) — "what am I attending". Pass `?status=valid`, `?status=maybe`, or `?status=refunded` to narrow to one.

Endpoints

URLTransportStateLatencyChecked
https://api.dynamitecircle.com/mcp streamable-http answering 215 ms 8 min ago

DC Member API — questions

Answers built from our own checks of this server.

What can DC Member API do?
It exposes 85 tools, read directly from the server on our last check. Among them: alerts, alerts_by_id_delete, alerts_by_id_update, alerts_create, announcements, announcements_latest and 79 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is DC Member API mostly used for?
Its tools cluster around rooms, event and follows. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is DC Member API working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 224 ms. The bar chart above shows every period we have measured.
How do I connect DC Member API?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does DC Member API need an API key?
No. DC Member API completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 85 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is DC Member API?
It answers our handshake in 224 ms on average, which is faster than 58% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is DC Member API open source?
Yes — it is published under the MIT licence, written in Python, 5 stars on GitHub and 1 open issue. The source link is on this page, so you can read exactly what it does with your data before you connect it.