{"serverId":"mcp-registry/io.github.dynamitecircle/dc","tools":[{"name":"alerts_by_id_delete","fixed":{"name":"alerts_by_id_delete","description":"DELETE /alerts/:alertID — Deactivate an alert\n\nSoft-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.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["alertID"],"properties":{"alertID":{"type":"string","description":"The alert ID to delete"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"alerts_by_id_update","fixed":{"name":"alerts_by_id_update","description":"PATCH /alerts/:alertID — Update an alert\n\nUpdate one or more fields on an existing alert. Only provide the fields you want to change.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["alertID"],"properties":{"name":{"type":"string","description":"New alert name"},"active":{"type":"boolean","description":"Whether the alert is active"},"alertID":{"type":"string","description":"The alert ID to update"},"description":{"type":"string","description":"New alert description"},"notifyDaily":{"type":"boolean","description":"Whether daily digests are enabled"},"notifyWeekly":{"type":"boolean","description":"Whether weekly digests are enabled"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":215,"tokensAfter":215},{"name":"alerts_create","fixed":{"name":"alerts_create","description":"POST /alerts — Create an alert\n\nCreate a new alert. The system will search for matching content and deliver digests on the configured frequency. Maximum 10 active alerts per user.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["description","notifyDaily","notifyWeekly"],"properties":{"description":{"type":"string","description":"Alert description — what the alert should look for (max 500 chars)"},"notifyDaily":{"type":"boolean","description":"Whether daily digests are enabled"},"notifyWeekly":{"type":"boolean","description":"Whether weekly digests are enabled"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":194,"tokensAfter":194},{"name":"calendar_update","fixed":{"name":"calendar_update","description":"PATCH /calendar — Update calendar feed settings\n\nUpdate 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).\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","properties":{"includeMyTrips":{"type":"boolean","description":"Boolean"},"includeMyTickets":{"type":"boolean","description":"Boolean"},"includeEventAgenda":{"type":"boolean","description":"Boolean"},"includeVirtualCalls":{"type":"boolean","description":"Boolean"},"includeDCBlackEvents":{"type":"boolean","description":"Boolean"},"includeFlagshipEvents":{"type":"boolean","description":"Boolean"},"includeHomeChapterEvents":{"type":"boolean","description":"Boolean"},"includeOtherChapterEvents":{"type":"boolean","description":"Boolean"},"includeFollowedChapterEvents":{"type":"boolean","description":"Boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":315,"tokensAfter":315},{"name":"event_agenda_get","fixed":{"name":"event_agenda_get","description":"GET /events/:eventID/agenda/:userID — Get another attendee's agenda for an event\n\nReturns 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).\n\n**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).","inputSchema":{"type":"object","required":["eventID","userID"],"properties":{"userID":{"type":"string","description":"Target attendee userID"},"eventID":{"type":"string","description":"Event ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":207,"tokensAfter":207},{"name":"event_free_slots_create","fixed":{"name":"event_free_slots_create","description":"POST /events/:eventID/free-slots — Find shared free time slots across attendees\n\nComputes 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.\n\n**Body**: `userIDs[]` (1-20), `minDurationMinutes` (default 30, min 15, max 480), optional `eventDayDate: YYYY-MM-DD` to scope to a single event day.\n\n**Slot grid**: derived from the event's session ","inputSchema":{"type":"object","required":["eventID","userIDs"],"properties":{"eventID":{"type":"string","description":"Event ID"},"userIDs":{"type":"array","items":{"type":"string"},"description":"Attendee userIDs to compare (1-20). Non-attendees silently dropped."},"eventDayDate":{"type":"string","description":"Optional. Scope to a single event day (YYYY-MM-DD venue-local). Omit for the full event range."},"minDurationMinutes":{"type":"number","description":"Minimum slot duration in minutes (default 30, range 15-480)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":310,"tokensAfter":310},{"name":"event_schedule","fixed":{"name":"event_schedule","description":"GET /events/:eventID/schedule — Get event schedule\n\nReturns the full schedule (sessions) for an event, sorted chronologically.\n\n**Access:** any active DCer who can see the event can view its public schedule. Personal agenda actions still require a valid ticket.\n\n**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 se","inputSchema":{"type":"object","required":["eventID"],"properties":{"eventID":{"type":"string","description":"Event ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"event_schedule_attendees","fixed":{"name":"event_schedule_attendees","description":"GET /events/:eventID/schedule/:sessionID/attendees — List session attendees (people who bookmarked it)\n\nReturns the list of attendees who have **bookmarked** a specific session into their agenda. Same profile shape as `/events/:eventID/attendees`.\n\n**Access:** any active DCer who can see the event.","inputSchema":{"type":"object","required":["eventID","sessionID"],"properties":{"eventID":{"type":"string","description":"Event ID"},"sessionID":{"type":"string","description":"Session ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"event_schedule_bookmark","fixed":{"name":"event_schedule_bookmark","description":"POST /events/:eventID/schedule/:sessionID/bookmark — Bookmark / unbookmark a session\n\nAdd 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.\n\nRequires 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.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["eventID","sessionID","bookmarked"],"properties":{"eventID":{"type":"string","description":"Event ID"},"sessionID":{"type":"string","description":"Session ID"},"bookmarked":{"type":"boolean","description":"`true` to add to agenda, `false` to remove"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":240,"tokensAfter":240},{"name":"follows_chapter_create","fixed":{"name":"follows_chapter_create","description":"POST /follows/chapters/:cityID — Follow a chapter\n\nFollow 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`.\n\nThis list also drives the `/locator/digest` `favoritePeople` and `favoriteCities` sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["cityID"],"properties":{"cityID":{"type":"string","description":"Chapter ID (Google Place ID). Get from `GET /chapters` (each entry has `cityID`) or `GET /places/search` (`type === \"city\"`)."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":221,"tokensAfter":221},{"name":"follows_chapter_delete","fixed":{"name":"follows_chapter_delete","description":"DELETE /follows/chapters/:cityID — Unfollow a chapter\n\nUnfollow a DC chapter. Idempotent — unfollowing a chapter you weren't following is a no-op.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["cityID"],"properties":{"cityID":{"type":"string","description":"Chapter ID to unfollow."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"follows_profiles_by_id_create","fixed":{"name":"follows_profiles_by_id_create","description":"POST /follows/profiles/:userID — Follow a DCer\n\nFollow 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.\n\nWhen 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.\n\n","inputSchema":{"type":"object","required":["userID"],"properties":{"userID":{"type":"string","description":"userID of the DCer to follow. Discover via `GET /profile-match` or `GET /chapters/:cityID` members lists."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"follows_profiles_by_id_delete","fixed":{"name":"follows_profiles_by_id_delete","description":"DELETE /follows/profiles/:userID — Unfollow a DCer\n\nUnfollow 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.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["userID"],"properties":{"userID":{"type":"string","description":"userID of the DCer to unfollow."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":158,"tokensAfter":158},{"name":"interests_create","fixed":{"name":"interests_create","description":"POST /interests — Subscribe or unsubscribe from interests\n\nSubscribe 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).\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["updates"],"properties":{"updates":{"type":"object","description":"Map of interest tag slug → `{ subscribed: boolean }`. Max 20 entries. Keys must match `/^[a-z0-9-]+$/`.","additionalProperties":true}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"invites","fixed":{"name":"invites","description":"GET /invites — List your invites\n\nList the referral invites credited to you. Two source types appear:\n- **`manual`** — invites you sent via `POST /invites` (the explicit email-an-invitee flow).\n- **`permaCode`** — applicants who signed up through your shareable permacode link (`GET /invites/permacode`).\n\nEach 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","inputSchema":{"type":"object","properties":{"limit":{"type":"number","default":50,"description":"Max results (1-100)."},"cursor":{"type":"string","description":"Cursor from a previous response's `nextCursor`. Pass to fetch the next page."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":226,"tokensAfter":226},{"name":"invites_create","fixed":{"name":"invites_create","description":"POST /invites — Send an invite\n\nSend 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`.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["fullName","email"],"properties":{"email":{"type":"string","description":"Invitee email address. Where the invite email is sent."},"whyDC":{"type":"string","description":"Optional. Short note about why they would be a good fit for DC — surfaces in the admin review queue if the application reaches it."},"fullName":{"type":"string","description":"Invitee full name. Used in the email greeting + matched against existing applications for dedup."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":254,"tokensAfter":254},{"name":"invites_permacode","fixed":{"name":"invites_permacode","description":"GET /invites/permacode — Get your permacode\n\nReturns your permanent referral code. Share this link to let people apply with your referral.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"locator_settings","fixed":{"name":"locator_settings","description":"GET /locator/settings — Get your Friday locator email settings\n\nReturns 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.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"locator_settings_update","fixed":{"name":"locator_settings_update","description":"PATCH /locator/settings — Update your Friday locator email settings\n\nUpdate any subset of the Friday locator email toggles. Send only the fields you want to change.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","properties":{"trips":{"type":"boolean","description":"Include new trips to your area"},"events":{"type":"boolean","description":"Include new events in your area"},"enabled":{"type":"boolean","description":"Master toggle for the Friday digest"},"tickets":{"type":"boolean","description":"Include DCers you follow getting event tickets"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":188,"tokensAfter":188},{"name":"notifications_update","fixed":{"name":"notifications_update","description":"PATCH /notifications — Update your notification preferences\n\nUpdate 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).\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["categories"],"properties":{"categories":{"type":"object","description":"Per-category push/email toggles. Pass only the categories + channels you want to change.","additionalProperties":true}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"places_search","fixed":{"name":"places_search","description":"GET /places/search — Search Google Places\n\nSearch for places by name. Use this to look up a Google Place ID before creating a trip or referencing a venue.\n\nResults 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","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search query (city name, country, address, etc.)"},"limit":{"type":"number","default":10,"description":"Max results (1-20)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":223,"tokensAfter":223},{"name":"profile_match_create","fixed":{"name":"profile_match_create","description":"POST /profile-match — Match DCers from a description (or recommend if omitted)\n\n**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).\n\nReturns 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 ","inputSchema":{"type":"object","properties":{"isDCB":{"type":"boolean","description":"Optional. When `true`, narrows results to DC BLACK members only."},"limit":{"type":"number","description":"Max results (1-50, default 50). Hard cap at 50 — match is expensive; narrow with filters instead of paginating."},"query":{"type":"string","description":"Free-form description of the DCers you want to find. Omit to get recommendations based on your own profile."},"gender":{"type":"string","description":"Optional. Exact-match filter on the DCer's self-reported gender. Allowed values: `Man`, `Woman`, `Non-binary`, `Prefer not to say`. **Note: Gender is sparsely populated — most DCers leave it blank** — combine with `query` rather than relying on this alone."},"eventID":{"type":"string","description":"Optional. DC event ID — narrows results to DCers with a valid ticket (RSVP yes/maybe or paid). Pair with `query` for \"DCers attending X who do Y\"."},"minTeamSize":{"type":"string","description":"Optional. \"At least this team size\" filter — matches DCers whose team-size bucket is >= this value, ordered as `None < 1-2 < 3-5 < 6-9 < 10-14 < 15-19 < 20-34 < 35-49 < 50-74 < 75-99 < 100+`. `Prefer not to say` also exists in the bucket vocabulary but is treated as \"unknown\" and always filtered out. Only DCers who set their team-size visibility to \"all DCers\" are matched; the rest are excluded silently."},"skipReranking":{"type":"boolean","description":"Optional. When `true`, skip the keyword reranker and return results in raw vector-similarity order. Useful when the query is fuzzy/semantic (where exact keyword overlap would add noise) or when comparing reranked vs raw ordering."},"businessIndustry":{"type":"string","description":"Optional. Exact-match filter on the DCer's primary business industry. Allowed values: `SaaS & Tech`, `Marketing Agency`, `Productized Services`, `Ecommerce & Amazon`, `Courses and Info Products`, `Affiliate, Content Creation, or Ad Revenue`, `Professional Services & Industry Specific Consulting`, `Real Estate and Investing`, `Coaching`, `Other`."},"minAnnualRevenue":{"type":"string","description":"Optional. \"At least this revenue\" filter on annual revenue. Pass any revenue label (e.g. `$1M+`, `$250K+`, `$100K+`); the filter parses to a number and matches DCers at-or-above. Only DCers who set their revenue visibility to \"all DCers\" are matched; the rest are excluded silently."},"locationChapterPlaceID":{"type":"string","description":"Optional. Google Place ID — narrows results to DCers based here (\"based in X\"). Resolve via `GET /places/search`."},"locationCurrentPlaceID":{"type":"string","description":"Optional. Google Place ID — narrows results to DCers currently here, whether they live there or are visiting. **Sparsely populated** — `currentLocation` is self-reported and most DCers leave it null, so this filter under-recalls. For \"who is in <city> right now?\" prefer creating a trip via `POST /trips` and reading `GET /trips/:tripID` — the `discovery.fullPool` block lists locals AND visitors during the trip window. Resolve placeIDs via `GET /places/search`."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":1033,"tokensAfter":1033},{"name":"profile_update","fixed":{"name":"profile_update","description":"PATCH /profile — Update profile fields\n\nUpdate allowed profile fields. Only the fields you include will be changed. Location, photo, and gender cannot be updated via API.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","properties":{"diet":{"enum":["No Restrictions","Vegan","Vegetarian","Gluten-Free","Dairy/Lactose-Free"],"type":"string","description":"Dietary restrictions — used when DC plans event meals."},"github":{"type":"string","description":"GitHub username only (no URL prefix). 1-39 chars per GitHub's rules: letters, digits, `-`. Required to be granted access to the public DC client repo — set this to opt in."},"hobbies":{"type":"string","description":"Your non-business hobbies — games, camping, art, sports, anything (up to 1600 chars)."},"twitter":{"type":"string","description":"Twitter/X username only (no URL prefix). 1-15 chars: letters, digits, `_`."},"facebook":{"type":"string","description":"Facebook username only (no URL prefix). 5-50 chars: letters, digits, `.`."},"headline":{"type":"string","description":"One-sentence elevator pitch shown at the top of your DC profile (max 64 chars)."},"linkedin":{"type":"string","description":"LinkedIn username only (no URL prefix). 1-50 chars: letters, digits, `.`, `_`, `-`."},"nickname":{"type":"string","description":"Display name override — what other DCers see in addition to your real name (max 256 chars)."},"teamSize":{"enum":["None","1-2","3-5","6-9","10-14","15-19","20-34","35-49","50-74","75-99","100+","Prefer not to say"],"type":"string","description":"Number of full-time and part-time team members in your primary business. Predefined bracket."},"whatsApp":{"type":"string","description":"WhatsApp phone number in international format — `+` followed by 5-16 digits, no dashes or spaces. Required if you want to be added to the DC WhatsApp community. Always private — only visible to DC staff."},"expertise":{"type":"string","description":"Areas you might consider yourself an expert in — skills you can use to help other members (up to 1600 chars)."},"focusmate":{"type":"string","description":"Focusmate username only (no URL prefix). 3-50 chars: letters, digits, `_`, `-`."},"instagram":{"type":"string","description":"Instagram username only (no URL prefix). 1-30 chars: letters, digits, `.`, `_`."},"shirtSize":{"enum":["XS","S","M","L","XL","XXL","XXXL"],"type":"string","description":"T-shirt size — used when DC sends event swag."},"spouseName":{"type":"string","description":"Name of your spouse or partner — used only for the DCBKK partner pass. Always private (DC staff only)."},"businessName":{"type":"string","description":"Name of the main business you run or are primarily focused on right now (max 256 chars). You can list other businesses in `otherBusinesses`."},"annualRevenue":{"enum":["No real income yet, it's still getting off the ground.","I recently exited a business.","$10K+","$50K+","$100K+","$250K+","$300K+","$600K+","$1M+","$2M+","$3M+","$4M+","$7M+","$10M+","$20M+","$35M+","$60M+","$100M+","Prefer not to say"],"type":"string","description":"Approximate annual revenue (in U.S. dollars) of your primary business over the last 12 months. Predefined bracket."},"businessWebsite":{"type":"string","description":"Public website for your primary business — single URL only (max 256 chars)."},"otherBusinesses":{"type":"string","description":"Other businesses you currently operate. Feel free to share URL, short description, and year started for each (up to 1600 chars)."},"yearsInBusiness":{"enum":["Less than one year","1-2 years","3-6 years","7-9 years","10-15 years","15-20 years","More than 20 years"],"type":"string","description":"How long you have been on the entrepreneurial path. Used for matching with other members. Predefined bracket."},"businessIndustry":{"enum":["AI","SaaS & Tech","Marketing Agency","Productized Services","Ecommerce & Amazon","Courses and Info Products","Affiliate, Content Creation, or Ad Revenue","Professional Services & Industry Specific Consulting","Real Estate and Investing","Coaching","Other"],"type":"string","description":"Category your primary business fits into. Must be one of the predefined industries."},"currentChallenge":{"type":"string","description":"Your current business challenge or goal. Used internally to match you with other members who can help (up to 1600 chars)."},"peopleOfInterest":{"type":"string","description":"What kinds of community members you would like to connect with. Used to send recommendations of relevant DCers (up to 1600 chars). Set `peopleOfInterestIsPrivate: true` to keep this visible only to DC staff."},"relevantLocations":{"type":"string","description":"Cities or regions you frequently visit. Helps surface trip overlaps with other members (up to 1600 chars)."},"teamSizeIsPrivate":{"type":"boolean","description":"Visibility of your team size. `true` = hidden from other DCers (only DC staff can see it); `false` = visible to all DCers."},"previousBusinesses":{"type":"string","description":"Previous business exits and entrepreneurial experience worth listing (up to 1600 chars)."},"askMeAnythingTopics":{"type":"string","description":"Topics other members can ask you about, in your field of expertise (up to 1600 chars)."},"businessDescription":{"type":"string","description":"Description of your primary business. Plain text or HTML, up to 1600 chars."},"annualRevenueIsPrivate":{"type":"boolean","description":"Visibility of your revenue. `true` = hidden from other DCers (only DC staff can see it); `false` = visible to all DCers."},"peopleOfInterestIsPrivate":{"type":"boolean","description":"Visibility of your \"who I want to meet\" answer. `true` = hidden from other DCers (only DC staff can see it); `false` = visible to all DCers."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":1629,"tokensAfter":1629},{"name":"report_issue_create","fixed":{"name":"report_issue_create","description":"POST /report-issue — Report an issue or feedback\n\nSubmit 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).\n\n**Privacy note:** Screenshots and report text are sent unredacted to the DC team. Don't include passwords, payment details, or other secrets.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"A short description of the issue or feedback (1–4000 chars)."},"context":{"type":"object","description":"Optional structured debug context — anything useful for triage (last error, request payload, endpoint, etc.). Up to 32 keys.","additionalProperties":true},"severity":{"type":"string","description":"Severity: bug | feedback | question. Defaults to \"bug\"."},"screenshot":{"type":"string","description":"Optional base64-encoded screenshot. Accepts raw base64 OR a data URL (e.g. `data:image/png;base64,...`). PNG, JPEG, or WebP only. Max 4 MB raw, clamped to 4096×4096; re-encoded server-side to strip EXIF."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":332,"tokensAfter":332},{"name":"rooms_archive_create","fixed":{"name":"rooms_archive_create","description":"POST /rooms/:roomID/archive — Archive a room\n\nArchive 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.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"rooms_browse","fixed":{"name":"rooms_browse","description":"GET /rooms/browse/:type — Browse public channels by type\n\nBrowse 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.","inputSchema":{"type":"object","required":["type"],"properties":{"type":{"type":"string","description":"Room type to browse. Allowed: `channel`, `discussion`, `quick-question`."},"limit":{"type":"number","default":50,"description":"Max results (1-100)"},"cursor":{"type":"string","description":"Cursor from a previous response's `nextCursor`. Pass to fetch the next page."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":194,"tokensAfter":194},{"name":"rooms_mute_create","fixed":{"name":"rooms_mute_create","description":"POST /rooms/:roomID/mute — Mute a room\n\nMute 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.\n\n**Access:** the caller must be a member/subscriber of the room.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":159,"tokensAfter":159},{"name":"rooms_pin_create","fixed":{"name":"rooms_pin_create","description":"POST /rooms/:roomID/pin — Pin a room\n\nPin 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.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":174,"tokensAfter":174},{"name":"rooms_subscribe_create","fixed":{"name":"rooms_subscribe_create","description":"POST /rooms/:roomID/subscribe — Subscribe to a room\n\nSubscribe 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.\n\n**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 — cal","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":196,"tokensAfter":196},{"name":"rooms_unarchive_create","fixed":{"name":"rooms_unarchive_create","description":"POST /rooms/:roomID/unarchive — Unarchive a room\n\nUnarchive a previously-archived room. Restores it to the inbox sidebar. **Access:** the caller must be a member/subscriber. Idempotent.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"rooms_unmute_create","fixed":{"name":"rooms_unmute_create","description":"POST /rooms/:roomID/unmute — Unmute a room\n\nUnmute a previously-muted room. Clears `mutedUntilAt`. **Access:** the caller must be a member/subscriber of the room. Idempotent.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"rooms_unpin_create","fixed":{"name":"rooms_unpin_create","description":"POST /rooms/:roomID/unpin — Unpin a room\n\nUnpin a previously-pinned room. Returns it to its normal place in the inbox sort order. **Access:** the caller must be a member/subscriber. Idempotent.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"rooms_unsubscribe_create","fixed":{"name":"rooms_unsubscribe_create","description":"POST /rooms/:roomID/unsubscribe — Unsubscribe from a room\n\nUnsubscribe 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.\n\n**Access:** the caller must already be a subscriber. DMs and group DMs cannot be unsubscribed via the API.\n\n**Idempotent:** unsubscribing when already unsubscribed is a no-op.\n\n⚠️ WRITE operation: this mutates your DC acco","inputSchema":{"type":"object","required":["roomID"],"properties":{"roomID":{"type":"string","description":"Room ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":197,"tokensAfter":197},{"name":"search","fixed":{"name":"search","description":"GET /search — Cross-resource omni-search\n\nCross-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.\n\nUse 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 ","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search text (1-500 chars). Required."},"limit":{"type":"number","default":5,"description":"Per-resource hits cap (1-25). The same cap applies to each resource — so `limit=5` returns up to 5 profiles + 5 rooms + 5 messages + 5 events + 5 chapters."},"userID":{"type":"string","description":"Scope each resource to this DCer's content — their profile, messages they authored, rooms they created, events they host, chapters they belong to. The @-mention pattern from the in-app search."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":320,"tokensAfter":320},{"name":"search_chapters","fixed":{"name":"search_chapters","description":"GET /search/chapters — Search chapters\n\nSearch DC chapters by city or country name.\n\n**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.","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search text. Required."},"page":{"type":"number","default":1,"description":"1-indexed page number."},"limit":{"type":"number","default":20,"description":"Max hits per page (1-100)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"search_events","fixed":{"name":"search_events","description":"GET /search/events — Search events\n\nSearch 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.\n\n**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 comp","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search text. Required."},"page":{"type":"number","default":1,"description":"1-indexed page number."},"limit":{"type":"number","default":20,"description":"Max hits per page (1-100)."},"since":{"type":"string","description":"Events ending on or after this date (ISO 8601)."},"until":{"type":"string","description":"Events starting on or before this date (ISO 8601)."},"cityID":{"type":"string","description":"Events whose chapter city is this Google Place ID."},"userID":{"type":"string","description":"Scope to events hosted by this DCer."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g. `TH`, `MX`)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":365,"tokensAfter":365},{"name":"search_messages","fixed":{"name":"search_messages","description":"GET /search/messages — Search messages (incl. your private DMs)\n\nSearch 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.\n\nScope to one room with `?roomID=` (the room is double-gated against your membership — passing a roomID you're not in returns 403, not silent","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search text. Required."},"page":{"type":"number","default":1,"description":"1-indexed page number."},"limit":{"type":"number","default":20,"description":"Max hits per page (1-100)."},"roomID":{"type":"string","description":"Scope to a single room. Must be a room you are a member of — otherwise returns 403. Discover roomIDs via `GET /rooms`, `GET /inbox/unread`, or `trip.roomID` on `GET /trips/:tripID`."},"userID":{"type":"string","description":"Scope to messages authored by this DCer."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":325,"tokensAfter":325},{"name":"search_profiles","fixed":{"name":"search_profiles","description":"GET /search/profiles — Search profiles\n\nFull-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).\n\nFor 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.\n\n**Query syntax (`q=`):** plain words match with prefix + t","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search text. Required."},"page":{"type":"number","default":1,"description":"1-indexed page number."},"limit":{"type":"number","default":20,"description":"Max hits per page (1-50)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":240,"tokensAfter":240},{"name":"search_rooms","fixed":{"name":"search_rooms","description":"GET /search/rooms — Search rooms\n\nSearch 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).\n\n**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 b","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search text. Required."},"page":{"type":"number","default":1,"description":"1-indexed page number."},"type":{"type":"string","description":"Room type filter. Allowed: `channel`, `dm`, `group`, `discussion`, `quick-question`, `event`."},"limit":{"type":"number","default":20,"description":"Max hits per page (1-100)."},"userID":{"type":"string","description":"Scope to rooms created by this DCer."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":299,"tokensAfter":299},{"name":"trip_delete","fixed":{"name":"trip_delete","description":"DELETE /trips/:tripID — Delete a trip\n\nPermanently 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.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["tripID"],"properties":{"tripID":{"type":"string","description":"The trip ID to delete"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":170,"tokensAfter":170},{"name":"trip_refresh_create","fixed":{"name":"trip_refresh_create","description":"POST /trips/:tripID/refresh — Trigger a trip refresh\n\nOwner-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.\n\n⚠️ WRITE operation: this mutates your DC account data.","inputSchema":{"type":"object","required":["tripID"],"properties":{"tripID":{"type":"string","description":"The trip ID to refresh"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":166,"tokensAfter":166},{"name":"trip_update","fixed":{"name":"trip_update","description":"PATCH /trips/:tripID — Update a trip\n\nUpdate 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.\n\n**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: []`.\n\n⚠️ WRITE o","inputSchema":{"type":"object","required":["tripID"],"properties":{"note":{"type":"string","description":"Updated note"},"points":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional. Replace the entire `points` array (not a patch within). Up to 20 items, same shape as `POST /trips`. Pass `[]` to clear all points."},"tripID":{"type":"string","description":"The trip ID to update"},"endDate":{"type":"string","description":"New end date (ISO 8601)"},"eventID":{"type":"string","description":"New destination — DC event ID (uses event's city). Pass `null` to unlink without changing the location."},"placeID":{"type":"string","description":"New destination — Google Place ID"},"startDate":{"type":"string","description":"New start date (ISO 8601)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":380,"tokensAfter":380},{"name":"trips_create","fixed":{"name":"trips_create","description":"POST /trips — Create a trip\n\nCreate 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.\n\n**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 resol","inputSchema":{"type":"object","required":["startDate","endDate"],"properties":{"note":{"type":"string","description":"Trip note"},"points":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional. Up to 20 trip points (venues / ideas / notes). Each item: `{ note: string (max 280 chars), noteHTML?: string, placeID?: string }`. The optional `placeID` is resolved against Google Places at write time. Notes without a place are valid."},"endDate":{"type":"string","description":"End date (ISO 8601)"},"eventID":{"type":"string","description":"DC event ID. Server uses the event's city placeID. **Pass exactly one of `placeID` or `eventID`** — sending both rejects with 400."},"placeID":{"type":"string","description":"Google Place ID for the destination. Look one up via `GET /places/search`. **Pass exactly one of `placeID` or `eventID`** — sending both rejects with 400."},"startDate":{"type":"string","description":"Start date (ISO 8601)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":432,"tokensAfter":432}],"toolsChanged":43,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}