{"name":"bridge","version":"1.0.0","protocol":{"name":"mcp","versions":["2025-06-18","2025-03-26"]},"endpoint":{"url":"https://staging.bridge-ai.social/api/v1/mcp","transport":"streamable-http","methods":["POST","GET"]},"auth":{"type":"bearer","tokenMintEndpoint":"https://staging.bridge-ai.social/api/mcp-tokens","oauth":{"authorizationServer":"https://staging.bridge-ai.social/.well-known/oauth-authorization-server","registrationEndpoint":"https://staging.bridge-ai.social/register","scopesSupported":["activities.log","activity.list","analytics.pipeline_summary","contacts.create","contacts.get","contacts.search","contacts.transfer","contacts.transfers.accept","contacts.transfers.decline","contacts.transfers.list","contacts.update","contacts.warm_intros","deals.create","deals.list","deals.move_stage","forwards.list","networking.asks.upsert","networking.offers.upsert","networking.profile.update","personal_notes","pipeline.create","pipeline.list","relationship_contexts.search","reminders.create","tags.manage"]}},"rateLimits":{"free":30,"pro":300,"enterprise":3000},"metaTools":[{"name":"bridge_undo","description":"Reverse a still-valid reversible action. Pass EITHER `undoToken` (first-party raw token from structuredContent._bridgeUndoToken, minted for THIS same MCP token) OR `executedWriteId` (the non-bearer handle from /api/v1/mcp/pending; use this for connected-agent actions). One-shot, expires at the prior result's `structuredContent.undoExpiresAt` (~30s window). Do NOT quote a raw undoToken in user-facing text; it is a sensitive credential meant for programmatic replay only.","annotations":{"title":"bridge_undo","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"undoToken":{"type":"string","minLength":20,"maxLength":128,"description":"RAW undo token from a prior tool result's structuredContent._bridgeUndoToken (also mirrored in _meta.undoToken). First-party (PAT) only. Provide EITHER this OR executedWriteId, never both."},"executedWriteId":{"type":"string","minLength":8,"maxLength":128,"description":"Non-bearer pending-review handle from /api/v1/mcp/pending (undoables[].executedWriteId). Use this for connected-agent (OAuth) actions. Provide EITHER this OR undoToken, never both."}}}},{"name":"bridge_cancel","description":"Decline a pending confirmation. Pass EITHER `confirmToken` (first-party raw token from structuredContent.confirmRequired.confirmToken) OR `pendingWriteId` (the non-bearer handle from /api/v1/mcp/pending; use this for connected-agent actions). The pending action is marked cancelled; no side effect runs. Sibling to bridge_undo but strictly for the pending-confirm state — cannot cancel a completed action. One-shot. Do NOT quote a raw confirmToken in user-facing text; it is a sensitive credential meant for programmatic replay only.","annotations":{"title":"bridge_cancel","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"confirmToken":{"type":"string","minLength":20,"maxLength":128,"description":"RAW confirm token from a prior tool result's structuredContent.confirmRequired.confirmToken (also mirrored in _meta.confirmToken). First-party (PAT) only. Provide EITHER this OR pendingWriteId, never both."},"pendingWriteId":{"type":"string","minLength":8,"maxLength":128,"description":"Non-bearer pending-review handle from /api/v1/mcp/pending (pendingConfirms[].pendingWriteId). Use this for connected-agent (OAuth) actions. Provide EITHER this OR confirmToken, never both."}}}}],"tools":[{"name":"bridge_activity_list","capabilityId":"activity.list","description":"Get the activity history (emails, meetings, calls, notes) for a specific contact. Use when the user asks about past interactions, communication history, or \"when did I last talk to…\". Pass the contact UUID — if you only have a name, call bridge_contacts_search first.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_activity_list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10},"type":{"type":"string","enum":["EMAIL","MEETING","CALL","NOTE","MESSAGE","SMS","LINKEDIN","WHATSAPP"]}},"required":["contactId"]}},{"name":"bridge_activity_log","capabilityId":"activities.log","description":"Log an activity (email, meeting, call, note, message, SMS, WhatsApp) for a contact. Use when the user says they had a meeting, call, message, or interaction with someone and wants to record it. Also the default way to save a new fact or update about a person (\"he is leading a new fund\"): use type NOTE. It appends to their timeline and never overwrites existing notes. Put where you met in the subject (\"Met at UCLA Anderson demo day\") so it is searchable. occurredAt defaults to now; for an earlier time pass ISO 8601 with the user's UTC offset. Pass the contact UUID — call bridge_contacts_search first if you only have a name.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_activity_log","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["EMAIL","MEETING","CALL","NOTE","MESSAGE","SMS","LINKEDIN","WHATSAPP"]},"subject":{"type":"string","minLength":1},"description":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"},"tags":{"type":"array","items":{"type":"string","minLength":1},"maxItems":20}},"required":["contactId","type","subject"]}},{"name":"bridge_commitments_list","capabilityId":"commitments.list","description":"Get open commitments (promises/action items) the user has made or that others have made to them. Use when the user asks \"what do I owe?\", \"what have I promised?\", \"what does [contact] owe me?\", \"what are my open commitments?\", \"what do I need to follow up on?\". Returns commitments AI-extracted from emails, meetings, and notes. Pass the contact UUID for the optional contactId filter — call bridge_contacts_search first if you only have a name.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_commitments_list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"direction":{"type":"string","enum":["I_OWE","THEY_OWE","ALL"]}}}},{"name":"bridge_contacts_create","capabilityId":"contacts.create","description":"Create a new contact. Call bridge_contacts_search first and reuse an existing contactId; ask before creating from a first name. displayName required. Optional: email, phone, company, title, location, notes, meetingContext, education, tags, linkedinUrl, websiteUrl, githubUsername, xHandle, instagramHandle. Copy name and company exactly as given. meetingContext = where you met. Applies immediately; undoable for 24h in Bridge. If deduplicated=true, the fields in notApplied were NOT saved; record them with bridge_activity_log. Pass the returned contactId to bridge_deals_create. Set education on school+year info (\"Brown 2027\") — seeds enrichment. A social URL goes in its matching field. bio, birthday, photo, custom fields cannot be set here. Tags: bridge_tags_manage. CRITICAL: only set email/phone/any social field when the user EXPLICITLY names BOTH the field and the value. NEVER infer from vague language, memory, or earlier search/OSINT — a wrong identity silently attaches another person. If asked to find a link, ask the user to paste it.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_contacts_create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"email":{"type":"string","format":"email"},"phone":{"type":"string","minLength":3,"maxLength":40},"company":{"type":["string","null"]},"title":{"type":["string","null"]},"location":{"type":["string","null"]},"notes":{"type":["string","null"]},"meetingContext":{"type":["string","null"]},"education":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string","minLength":1},"maxItems":20},"linkedinUrl":{"type":"string","format":"uri"},"websiteUrl":{"type":"string","format":"uri"},"githubUsername":{"type":"string","minLength":1,"maxLength":64},"xHandle":{"type":"string","minLength":1,"maxLength":64},"instagramHandle":{"type":"string","minLength":1,"maxLength":64}},"required":["displayName"],"additionalProperties":false}},{"name":"bridge_contacts_get","capabilityId":"contacts.get","description":"Get the full profile for a specific contact by UUID. Use after bridge_contacts_search to retrieve detailed information about a person, or when the user asks for details about a specific contact. Pass the contact UUID — call bridge_contacts_search first if you only have a name.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_contacts_get","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"}},"required":["contactId"]}},{"name":"bridge_contacts_search","capabilityId":"contacts.search","description":"Search the user's contacts by name, company, school, location, role, or keywords. Use when the user asks about people in their network, wants to find contacts matching criteria, or asks \"who do I know at…\" style questions. Also call it before creating or updating anyone, to reuse the existing contactId: name matches any part of the stored name, so if the full name finds nothing try the surname alone. contextKeywords match notes, meeting context and logged activity text (e.g. who the user met at an event). Each keyword is a case-insensitive substring and any one match counts, so pass the most specific phrase (\"demo day\") rather than broad words.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_contacts_search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string"},"company":{"type":"string"},"school":{"type":"string"},"location":{"type":"string"},"role":{"type":"string"},"contextKeywords":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}}},{"name":"bridge_contacts_transfer","capabilityId":"contacts.transfer","description":"Send one of the user's contacts to another Bridge user. The transfer is pending until the recipient accepts/declines or it expires (30 days). Both sides see status via bridge_contacts_transfers_list.","trustClass":"reversible","piiPolicy":"write_only","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_contacts_transfer","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"recipientUserId":{"type":"string","minLength":1,"maxLength":200,"description":"Bridge user id of the recipient. Self-transfer is rejected."},"contactId":{"type":"string","minLength":1,"maxLength":200,"description":"Connection id (must belong to the calling user). Call bridge_contacts_search to resolve a name first."},"reason":{"type":"string","maxLength":1000,"description":"Free-form context shown to the recipient."}},"required":["recipientUserId","contactId"]}},{"name":"bridge_contacts_transfers_accept","capabilityId":"contacts.transfers.accept","description":"Accept a pending contact transfer sent to you. The contact is added to your CRM, deduplicated against anyone you already know.","trustClass":"reversible","piiPolicy":"write_only","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_contacts_transfers_accept","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"transferId":{"type":"string","minLength":1,"maxLength":200,"description":"ContactTransfer id (from bridge_contacts_transfers_list)."}},"required":["transferId"]}},{"name":"bridge_contacts_transfers_decline","capabilityId":"contacts.transfers.decline","description":"Decline a pending contact transfer addressed to you. The sender sees the decline; no contact is added.","trustClass":"reversible","piiPolicy":"write_only","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_contacts_transfers_decline","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"transferId":{"type":"string","minLength":1,"maxLength":200,"description":"ContactTransfer id (from bridge_contacts_transfers_list)."}},"required":["transferId"]}},{"name":"bridge_contacts_transfers_list","capabilityId":"contacts.transfers.list","description":"List pending and historical contact transfers involving the user. direction=inbox (received), outbox (sent), or all.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_contacts_transfers_list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"direction":{"type":"string","enum":["inbox","outbox","all"],"default":"inbox"},"status":{"type":"string","enum":["pending","accepted","declined","revoked","expired"]},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25}}}},{"name":"bridge_contacts_update","capabilityId":"contacts.update","description":"Update a contact's profile fields. Use when the user explicitly tells you to change a field on a specific contact. Allowed fields: company, title, location, education, bio, notes, birthday, email, phone. CRITICAL: only set email or phone when the user explicitly names BOTH the field and the new value (e.g. \"set Sarah's email to sarah@new.co\"). NEVER infer email/phone changes from vague language (\"looks like Sarah moved jobs\"). Only change company or title when the user states the new value, and copy it exactly. notes REPLACES the whole existing note: to add a fact, meeting or update about someone, use bridge_activity_log instead, and set notes only when the user asks to rewrite the note. The name cannot be changed here. For tags, use bridge_tags_manage. Pass the contact UUID — call bridge_contacts_search first if you only have a name.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_contacts_update","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"company":{"type":["string","null"]},"title":{"type":["string","null"]},"location":{"type":["string","null"]},"education":{"type":["string","null"]},"bio":{"type":["string","null"]},"notes":{"type":["string","null"]},"birthday":{"type":["string","null"],"format":"date-time"},"email":{"type":["string","null"],"format":"email"},"phone":{"type":["string","null"],"minLength":3,"maxLength":40}},"required":["contactId"]}},{"name":"bridge_deals_create","capabilityId":"deals.create","description":"Create a new deal in a pipeline. Pass the pipeline UUID, stage UUID, and title. Optionally link a contact (UUID). Use bridge_pipelines_list to resolve pipeline/stage IDs and bridge_contacts_search to resolve contact IDs.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_deals_create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"pipelineId":{"type":"string","format":"uuid"},"stageId":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1},"contactId":{"type":"string","format":"uuid"},"allowOrphan":{"type":"boolean","default":false,"description":"Set true ONLY when creating a deliberately-unassigned deal (no contactId). Default false refuses orphan deals to prevent silent attribution loss."},"value":{"type":["number","null"]},"currency":{"type":"string","minLength":1,"maxLength":8},"expectedCloseDate":{"type":["string","null"],"format":"date-time"},"priority":{"type":"string","enum":["LOW","MEDIUM","HIGH","URGENT"]},"notes":{"type":["string","null"]}},"required":["pipelineId","stageId","title"]}},{"name":"bridge_deals_list","capabilityId":"deals.list","description":"List the user's deals. Optionally filter by pipeline UUID, stage UUID, contact UUID, or status. Use when the user asks \"what deals do I have\", \"show my pipeline\", or \"deals with [contact]\". Pass UUIDs for filters — call bridge_pipelines_list first to resolve pipeline/stage names, bridge_contacts_search for contact names.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_deals_list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"pipelineId":{"type":"string","format":"uuid"},"stageId":{"type":"string","format":"uuid"},"contactId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["OPEN","WON","LOST","ABANDONED"]},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}}}},{"name":"bridge_deals_move_stage","capabilityId":"deals.move_stage","description":"Move a deal to a different stage in its pipeline. Use when the user says \"move [deal] to [stage]\", \"[deal] won\", or \"mark as closed\". Pass the deal UUID + target stage UUID — call bridge_deals_list first to resolve the deal, bridge_pipelines_list to resolve the stage.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_deals_move_stage","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"dealId":{"type":"string","format":"uuid"},"toStageId":{"type":"string","format":"uuid"}},"required":["dealId","toStageId"]}},{"name":"bridge_inbox_list_forwards","capabilityId":"forwards.list","description":"Retrieve emails the user has recently forwarded to their Bridge inbox address (e.g. u_xxx@in.bridge-ai.social). Use when the user asks: \"did you get the email I forwarded?\", \"check my forwarded mail\", \"what just came in\", \"show me the email I sent over\". Returns sender, subject, snippet, matched contact (if any), and reply links. If nothing is returned, tell the user no recent forwards arrived and surface their forwarding address so they can verify they sent it to the right place.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_inbox_list_forwards","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"sinceMinutes":{"type":"integer","minimum":1,"maximum":43200},"limit":{"type":"integer","minimum":1,"maximum":25},"includeDismissed":{"type":"boolean"}}}},{"name":"bridge_networking_asks_upsert","capabilityId":"networking.asks.upsert","description":"Record what the user is looking for (an 'ask') on their networking profile, so the matcher can surface relevant people. Use when the user (via their own connected agent) states something they want — e.g. 'looking for a technical co-founder', 'raising a seed round', 'want intros to fintech operators'. This writes the USER'S OWN ask — never another person's. Pass a concise `what`; optionally a `why` for context.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_networking_asks_upsert","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"what":{"type":"string","minLength":1,"maxLength":2000},"why":{"type":["string","null"],"maxLength":2000}},"required":["what"]}},{"name":"bridge_networking_offers_upsert","capabilityId":"networking.offers.upsert","description":"Record something the user can offer or help with (an 'offer') on their networking profile, so the matcher can surface people who need it. Use when the user (via their own connected agent) states something they can give — e.g. 'happy to advise seed-stage founders', 'can intro to VCs', 'offering design feedback'. This writes the USER'S OWN offer — never another person's. Pass a concise `what`; optionally a `why` for context.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_networking_offers_upsert","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"what":{"type":"string","minLength":1,"maxLength":2000},"why":{"type":["string","null"],"maxLength":2000}},"required":["what"]}},{"name":"bridge_networking_profile_update","capabilityId":"networking.profile.update","description":"Set a single field on the user's OWN networking profile so the matcher has self-authored context. Use when the user (via their own connected agent) states a profile fact about THEMSELVES — e.g. their title, company, industry, bio, expertise, or what they're open to. Allowed fields: displayName, title, company, industry, location, bio, expertise, openTo, email, phone, linkedinUrl, twitterUrl. High-sensitivity fields the user has locked (e.g. email/phone) will be rejected — that is expected; ask the user to edit those in the app. This writes the USER'S OWN profile only.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_networking_profile_update","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"fieldName":{"type":"string","enum":["displayName","title","company","industry","location","bio","expertise","openTo","email","phone","linkedinUrl","twitterUrl"]},"value":{"type":"string","minLength":1,"maxLength":2000}},"required":["fieldName","value"]}},{"name":"bridge_pipelines_create","capabilityId":"pipeline.create","description":"Create a pipeline with its stages. Pass a name and a type; omit `stages` to seed the standard stages for that type, or pass your own ordered list. Optionally attach the pipeline to a Project by UUID. Call bridge_pipelines_list afterwards (or read the returned stage UUIDs) to file deals into it.","trustClass":"reversible","piiPolicy":"metadata_only","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_pipelines_create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"type":{"type":"string","enum":["SALES","INVESTOR_RELATIONS","RECRUITING","PARTNERSHIPS","NETWORKING","LP_FUNDRAISING","OUTREACH","CUSTOM"]},"description":{"type":["string","null"],"maxLength":2000},"projectId":{"type":"string","format":"uuid"},"stages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"isWinStage":{"type":"boolean"},"isLostStage":{"type":"boolean"}},"required":["name"]},"minItems":1,"maxItems":12}},"required":["name","type"]}},{"name":"bridge_pipelines_list","capabilityId":"pipeline.list","description":"List the user's sales/investor pipelines with their stages. Use when the user asks 'what pipelines do I have', 'show me my pipelines', or before referring to a specific pipeline by name.","trustClass":"safe","piiPolicy":"metadata_only","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_pipelines_list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}}},{"name":"bridge_pipelines_summary","capabilityId":"analytics.pipeline_summary","description":"Summarize a sales pipeline by stage with deal counts and total value. Use when the user asks 'show my pipeline', 'how is X pipeline doing', or compares stages. Returns each stage with deal count, total value, and top deals.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_pipelines_summary","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"pipelineName":{"type":"string"},"includeClosed":{"type":"boolean","default":false},"topPerStage":{"type":"integer","minimum":0,"maximum":10,"default":3}}}},{"name":"bridge_relationship_contexts_search","capabilityId":"relationship_contexts.search","description":"Search the user's private imported event, trip, cohort, or list contexts and return the contacts attached to each context with exact relationship classifications. Use for questions like \"who was listed in X?\" or \"who was on X trip/cohort?\". LISTED_ONLY means the person only appeared in the imported source. Shared context never means participants know each other.","trustClass":"safe","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_relationship_contexts_search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":160},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["query"]}},{"name":"bridge_reminders_create","capabilityId":"reminders.create","description":"Create a reminder for the user. Use when the user asks to be reminded about something — following up with a contact, a deadline, or any future task. dueAt is an exact time: resolve relative dates like \"next Tuesday\" from today in the user's time zone, use 9:00 local if no time was given, and pass it with that UTC offset (2026-10-13T09:00:00-07:00). Ask the user if you do not know their time zone. Pass the contact UUID for the optional contactId — call bridge_contacts_search first if you only have a name.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_reminders_create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"title":{"type":"string","minLength":1},"dueAt":{"type":"string","format":"date-time"},"contactId":{"type":"string","format":"uuid"},"recurrence":{"type":"string","enum":["none","daily","weekly","biweekly","monthly","quarterly"],"default":"none"}},"required":["title","dueAt"]}},{"name":"bridge_tags_manage","capabilityId":"tags.manage","description":"Add or remove tags on a contact. Use when the user says \"tag [contact] as [x]\" or \"remove the [x] tag from [contact]\". Pass the contact UUID — call bridge_contacts_search first if you only have a name. Provide at least one of addTags / removeTags.","trustClass":"reversible","piiPolicy":"sensitive_in_results","confirmRequired":false,"defaultOauthGrant":false,"annotations":{"title":"bridge_tags_manage","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"addTags":{"type":"array","items":{"type":"string","minLength":1},"maxItems":50},"removeTags":{"type":"array","items":{"type":"string","minLength":1},"maxItems":50}},"required":["contactId"]}},{"name":"bridge_warm_intros_evaluate","capabilityId":"contacts.warm_intros","description":"Find warm introduction paths to a target contact. Returns people who know the target well, split into \"Ready\" (strong on both sides — you can ask for the intro) and \"Opportunity\" (they know the target well but you need to build your relationship with them first). Use when the user asks \"how can I get introduced to X?\", \"warm intro to X\", \"who can introduce me to X?\", \"do I have any mutual connections with X?\". Pass the target contact UUID — call bridge_contacts_search first if you only have a name.","trustClass":"safe","piiPolicy":"metadata_only","confirmRequired":false,"defaultOauthGrant":true,"annotations":{"title":"bridge_warm_intros_evaluate","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"}},"required":["contactId"]}}],"generatedAt":"2026-10-12T05:19:51.372Z"}