b2match-mcp
Read-only MCP server for exploring B2match events and matchmaking data, with public tools plus authenticated tools for the logged-in viewer.
Fetch public event metadata, navigation, participants, organisations, opportunities, agenda, sessions, attendees, and speakers.
Check local auth status and list the viewer's joined events and own participation details.
Access authenticated schedule, meetings by status, availability, shared meeting slots, and meeting recommendations without booking or requesting meetings.
List conversations with last-message previews and get notification counters; full message/notification reads are gated because B2match may mark them read/seen.
Respect read-only safeguards: only GraphQL queries are allowed, known write mutations are blocked, tokens are not exposed, and no telemetry is collected.
Optionally expose guarded raw GraphQL read queries when enabled.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@b2match-mcpshow me matchmaking opportunities at this B2match event"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
b2match-mcp
Read-only MCP server for the B2match event and matchmaking platform.
This package is designed to be run locally by the user via npx and stdio MCP transport.
Disclaimer: This project is unofficial and is not affiliated with, endorsed by, or supported by B2match. It uses B2match's undocumented web GraphQL API, so field availability can change without notice. Use it in accordance with B2match's Terms of Service and GDPR. Participant profiles can be other people's personal data — keep exports local, respect each event's visibility rules, and do not harvest or republish personal data.
Read-only and privacy guarantees
The MCP server sends only GraphQL
queryoperations. Mutations and subscriptions are parsed and rejected before any network call.Known "read-looking" write operations are explicitly blocked, including profile-view, mark-as-read, session-attendance, and bookmark mutations.
B2match can still update its own read/seen counters when certain query fields are selected. See Server-side side effects.
It never calls Plausible, Sentry, Google Analytics, HubSpot, LinkedIn pixel, or any non-B2match analytics endpoint.
It makes no external calls other than
https://api.b2match.com/v4/queryand the B2match Google login URL opened by the CLI.No telemetry or analytics are collected by this package.
Tokens are never printed by tools or status commands.
Tokens are stored in the OS keychain when available, otherwise in a
0600config file.
Related MCP server: Swapcard MCP Server
Install / run
Requires Node.js 22 or newer. On macOS with Apple Silicon, the recommended install path is npx; no native build step is required for the auth storage path.
npx -y b2match-mcpFrom a checkout:
npm install
npm run build
node dist/cli.jsMCP client config
Claude Desktop
{
"mcpServers": {
"b2match": {
"command": "npx",
"args": ["-y", "b2match-mcp"]
}
}
}Cursor
{
"mcpServers": {
"b2match": {
"command": "npx",
"args": ["-y", "b2match-mcp"]
}
}
}VS Code
Add to .vscode/mcp.json or user MCP settings:
{
"servers": {
"b2match": {
"type": "stdio",
"command": "npx",
"args": ["-y", "b2match-mcp"]
}
}
}For local development from this checkout:
{
"mcpServers": {
"b2match": {
"command": "node",
"args": ["/absolute/path/to/b2match-mcp/dist/cli.js"]
}
}
}Authentication
Public event data works anonymously. Personal data such as viewer profile, active events, meetings, schedule, conversations, notifications, and availability requires a locally stored B2match session token.
macOS / Linux login
b2match-mcp login https://www.b2match.com/e/<event-slug>
# or: npx b2match-mcp login https://www.b2match.com/e/<event-slug>The default command:
Resolves the event anonymously and asks B2match for its Google login URL.
Launches your installed Chrome, Chromium, Edge, or Brave as a separate process.
Uses a dedicated persistent profile under the tool config directory, not your everyday browser profile.
Opens a remote-debugging port on
127.0.0.1for that dedicated profile only (not your everyday browser). The port is closed when login finishes or times out.Lets you complete Google sign-in and 2FA by hand. The CLI does not fill any form.
Waits for a JWT on the event tab URL (
www.b2match.com/e/<slug>?token=…) or the event session cookie, validates it with a cheap viewer query, stores it, and closes that browser window. Chrome can 404 the post-Google event page before a cookie is set; the URL token is the path that works in that case.
Repeat logins are usually one click because the dedicated profile keeps the Google session.
macOS may show a Keychain access prompt the first time the CLI stores or reads the token. Approve access for b2match-mcp/your terminal if you want Keychain storage. If access is denied or Keychain is unavailable, the CLI falls back to a private config file.
Paste-only / environment token
Use these only when the dedicated browser flow cannot run:
b2match-mcp login --paste
# or: npx b2match-mcp login --paste
B2MATCH_TOKEN='<session-cookie-value>' b2match-mcpB2MATCH_TOKEN is used in memory and is not persisted. Do not pass tokens on the command line; that leaks them into shell history.
Status / logout
b2match-mcp status
b2match-mcp logout
b2match-mcp logout --alllogout removes the stored B2match token only. logout --all also deletes the dedicated browser profile.
Dedicated browser profile
Login uses a dedicated Chromium profile at ~/.config/b2match-mcp/browser-profile (or $B2MATCH_MCP_CONFIG_DIR/browser-profile / $XDG_CONFIG_HOME/b2match-mcp/browser-profile). That profile keeps the Google session, so a later login is usually one click.
To wipe the Google session as well as the stored B2match token:
b2match-mcp logout --allTo delete only the profile and keep the stored token:
rm -rf ~/.config/b2match-mcp/browser-profilelogout without --all keeps the profile so the next login can reuse Google.
Storage locations
macOS: login Keychain via
/usr/bin/security(b2match-mcpservice,defaultaccount). After each save the CLI reads the item back; if the secret is missing or wrong it falls back to the private file and printskeychain read-back failed, stored in file.Linux:
secret-tool/ libsecret when installed and unlocked.Windows: private fallback file.
Fallback file:
$B2MATCH_MCP_CONFIG_DIR/auth.json,$XDG_CONFIG_HOME/b2match-mcp/auth.json, or~/.config/b2match-mcp/auth.json, written with0600permissions.b2match-mcp statusreportssource: "keychain-unreadable"(with a re-login hint) when a Keychain item exists but is empty or unreadable, instead of pretending you are logged out withsource: "none".Dedicated browser profile:
~/.config/b2match-mcp/browser-profile(same config directory).
If a token is a JWT, the CLI records its exp claim as expiresAt. B2match also has opaque tokens, in which case lifetime cannot be known locally. A 401 on an authenticated viewer check is reported as invalid/expired and remembered for the process. Public tools then continue anonymously without deleting the stored token.
Troubleshooting login
No supported browser found: install Chrome, Chromium, Edge, or Brave, or use
b2match-mcp login --paste.Google blocks the window: finish sign-in in the dedicated window if possible; otherwise use
--paste.Timeout / 404 after Google: the CLI also reads a JWT from the event tab URL if Chrome 404s before a cookie is set. Finish sign-in and wait; or use
--paste.Keychain prompt denied: run
b2match-mcp logout, thenloginagain and approve the prompt; or setB2MATCH_MCP_DISABLE_KEYCHAIN=1to use the private file fallback.statusshowskeychain-unreadable: the Keychain item is empty or corrupt and no usableauth.jsonwas found. Runb2match-mcp logoutthenloginagain. If a file token still works,statususessource: "file"and sets awarningabout the Keychain item instead.Wrong/expired token: run
b2match-mcp logout, sign in again, and repeatlogin.
Tools
Public/anonymous:
get_event- event metadata, dates, registration window, login methods, and navigation. Numeric ids and slugs return the same fields.list_participants- compact participant summaries with pagination and optional search. Setdetail=truefor the fuller list payload.get_participant- one participant profile, without firing profile-view tracking.list_organisations,get_organisation- organisation/participation pages. Menu paths such as/components/<id>are resolved automatically.list_opportunities,get_opportunity- marketplace entries. Menu paths are resolved automatically; unknown opportunities return an MCP not-found error.get_agenda,get_session,list_session_attendees,list_speakers.
Authenticated:
auth_statuslist_my_eventsmy_participationmy_schedulemy_meetings- meetings by status; unfiltered responses use a compact availability summary unlessdetail=truemy_availability- merged free ranges per day by default;detail=truefor the full timeslot gridfind_meeting_slotsmeeting_recommendationslist_conversations- last-message previews; does not mark conversations as readget_conversation- disabled by default because fetching messages marks the conversation as read; see side effectslist_notifications- unread/unseen counters by default; the full list resets unseen
Optional raw query:
graphql_readis registered only whenB2MATCH_ALLOW_RAW=1. It still rejects non-query operations and, unlessB2MATCH_ALLOW_SIDE_EFFECT_READS=1, queries that selectmessagesV2or the notification list.
Server-side side effects
This client never sends B2match mutations such as MarkConversationAsSeen or ReadNotification. B2match can still mutate its own read/seen state when a query selects certain fields:
get_conversation(messagesV2) marks that conversation as read (unread-conversations count decreases).list_notificationswith thenotifications(...)list field resets the unseen counter (unseen → 0). The unread counter is unchanged. FetchingnotificationsCounteralone does not reset unseen.list_conversations(includinglastMessageV2) has no known side effects.
Gating:
Default
list_notificationsreturns onlyunread/unseencounters.get_conversationand the full notification list requireB2MATCH_ALLOW_SIDE_EFFECT_READS=1and an explicit tool argument (acknowledge_marks_read/acknowledge_marks_seen).graphql_readrejects queries that selectmessagesV2or thenotificationslist unless the same env var is set.
Use list_conversations when you only need the last message.
Each event-scoped tool accepts a current event URL (https://www.b2match.com/e/<slug>), a legacy event URL (https://<slug>.b2match.io), a bare slug, or a numeric event id.
Authenticated tools return an MCP error when no token is stored, with instructions to log in. They say the token is invalid or expired only after a stored token receives HTTP 401.
Development
npm install
npm run build
npm testSee CONTRIBUTING.md for lint, format, coverage, Conventional Commits, and the read-only guard.
Live smoke test against a public event (opt-in, not run in CI):
B2MATCH_LIVE_SMOKE=1 B2MATCH_SMOKE_EVENT='https://www.b2match.com/e/<event-slug>' npm test -- tests/live-smoke.test.tsThe smoke test is skipped unless both environment variables are set.
Publishing
Releases are cut by Release Please from Conventional Commits on main. The same workflow (.github/workflows/release-please.yml) publishes with npm publish --provenance --access public when a release is created (OIDC trusted publishing only — no NODE_AUTH_TOKEN). Provenance requires a public repo. Configure npm trusted publishing against workflow release-please.yml. To republish an existing tag: gh workflow run release-please.yml -f publish_tag=vX.Y.Z. .github/workflows/publish.yml is a tip-of-branch manual republish only.
Verification status
Verified in this repo:
TypeScript build and unit tests.
Query-only enforcement, event identifier parsing, cookie-name helpers, dedicated-browser launch args, section-path resolution, compact participant summaries, and 401/auth-error policy.
Packed CLI
--help/status.Opt-in anonymous live smoke that exercises every public tool when
B2MATCH_SMOKE_EVENTis provided.
Requires a real login on a real machine:
Dedicated-profile Google login, Keychain prompt, URL-token or cookie capture.
Authenticated tools:
list_my_events,my_participation, schedule, meetings, availability, meeting slots, recommendations, conversations, and notifications.
License
MIT.
Available Tools
22 toolsauth_statusB2match auth statusARead-onlyIdempotent
Show whether a local B2match token is available and, when valid, who it belongs to. Never returns the token. Call this first when an authenticated tool (my_*, list_my_events, conversations, notifications) reports a login error; public tools work without a token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), but the description adds real value beyond them: it guarantees the token itself is never returned and that the response identifies the token owner. It does not say whether validity is checked locally or against the server, which matters given openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first defines the output meaning, the second defines the call trigger. The most actionable instruction (call this on a login error) is placed prominently and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return, and it does so (availability + owner identity, never the token). The one gap is whether the check is purely local or performs a remote validation, which openWorldHint=true makes relevant and which the description leaves ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document and the baseline of 4 applies. Nothing in the description misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: it reports whether a local B2match token exists and, if valid, which user it belongs to. That is clearly distinguishable from every sibling tool (list_my_events, get_participant, etc.), none of which is a diagnostic tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the trigger condition — call this first when an authenticated tool (my_*, list_my_events, conversations, notifications) reports a login error — and explicitly states the negative case: public tools work without a token. Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_meeting_slotsFind B2match meeting slotsARead-onlyIdempotent
Find free meeting slots shared by the logged-in viewer and selected participants on one day. Read-only: does not book or request a meeting. Use my_availability for your own free time only.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Day to search, as a days[].date value from my_availability; omit for the default day. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| duration | No | B2match MeetingDuration enum value (e.g. THIRTHY, B2match's spelling); omit for the event default. | |
| participant_ids | Yes | 1-10 participant ids (from list_participants) to meet with. | |
| is_long_term_networking | No | true searches the event's long-term networking calendar instead of the main meeting days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and idempotentHint=true, so the safety profile is known. The description restates this in domain terms ('does not book or request a meeting'), which is mildly useful emphasis but adds little new information. It says nothing about the 1-10 participant cap, permissions, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no waste; the core capability is front-loaded and the exclusion follows immediately. Every clause carries routing or scope information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with full schema coverage and annotations, this is nearly sufficient. The only gap is that no output schema exists and the description does not hint at the shape of the returned slots.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 — the schema already explains day, event, duration, participant_ids and the long-term flag in detail. The description only reinforces the 'one day' scoping already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find free meeting slots') plus the exact scope: shared by the viewer and selected participants, on one day. It explicitly distinguishes itself from my_availability, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context (mutual free time with chosen participants) and names one alternative with its condition ('Use my_availability for your own free time only'). It does not mention meeting_recommendations as a related-but-different option, so the routing picture is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agendaGet B2match agendaARead-onlyIdempotent
Fetch the event agenda: sessions and networking blocks with times. Use get_session for one session's details and my_schedule for your personal schedule. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so safety is covered. The description adds real behavioral context the annotations cannot: the menu path is auto-resolved and 'path' merely overrides that default. It stops short of describing result shape or volume, but for a read-only listing that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is returned, then disambiguation, then the override behavior. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool with full schema coverage and an annotation-declared safety profile, the description supplies everything needed to call it correctly. Only the shape of returned agenda blocks is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, including the 'omit to resolve automatically' semantics of path. The description's 'pass path to override' restates the schema rather than adding new meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the event agenda') and scopes the content ('sessions and networking blocks with times'). It also names the sibling tools it is not (get_session, my_schedule), so an agent can distinguish it without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use get_session for one session's details and my_schedule for a personal schedule. The condition selecting this tool versus those alternatives is stated rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationGet B2match conversationA
Fetch conversation messages. B2match marks that conversation as read when messagesV2 is fetched, even though this client never sends MarkConversationAsSeen. Disabled unless B2MATCH_ALLOW_SIDE_EFFECT_READS=1 and acknowledge_marks_read is true. Use list_conversations for last-message previews. Unknown ids return a not-found error.
| Name | Required | Description | Default |
|---|---|---|---|
| conversation_id | Yes | Conversation UUID from list_conversations. | |
| acknowledge_marks_read | No | Required with B2MATCH_ALLOW_SIDE_EFFECT_READS=1; fetching messages marks the conversation as read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only say readOnlyHint=false without explaining why; the description supplies the reason — fetching messages causes B2match to mark the conversation read even though this client never sends MarkConversationAsSeen. It also discloses the gating and the error outcome, which is exactly the context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, and each of the four sentences carries distinct information (side effect, gating, alternative, error). The aside about never sending MarkConversationAsSeen is implementation detail, but it is what justifies the non-read-only annotation, so it mostly earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers side effects, gating, alternatives and error behavior, which is the hard part for a two-parameter tool. With no output schema, the message payload shape and any pagination or result-limit behavior are left implicit, a minor remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond it by clarifying that both the environment flag and acknowledge_marks_read must hold, and by noting that unknown ids (the conversation_id parameter) produce a not-found error. It does not add format or sourcing detail beyond the schema's 'Conversation UUID from list_conversations'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource ('Fetch conversation messages') and immediately separates it from list_conversations, which is called out as the preview-oriented sibling. An agent can route between the two without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the condition that selects it ('Use list_conversations for last-message previews'), states the enablement precondition (B2MATCH_ALLOW_SIDE_EFFECT_READS=1 plus acknowledge_marks_read), and reports the not-found behavior for unknown ids.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet B2match eventARead-onlyIdempotent
Fetch public event metadata, dates, registration window, login methods, and navigation menu paths. Start here to resolve an event before calling the other event tools; use list_my_events to find events you joined. Works without login.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description still adds two useful signals beyond them: the data is 'public' (scope of what is exposed) and it 'works without login' (no auth prerequisite). It does not discuss rate limits, error behavior, or payload size, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is returned, then the routing rule and the auth note. No filler and no repetition of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description covers purpose, enumeration of returned content, entry-point sequencing, the alternative tool, and auth requirement. Nothing an agent needs before calling it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'event' parameter is documented at 100% coverage in the schema, including that it accepts a URL, slug/euid, or numeric id. The description's 'resolve an event' phrasing only loosely gestures at that flexibility and adds no format or precedence detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) plus the exact resource and its returned fields: event metadata, dates, registration window, login methods, navigation menu paths. It also names the sibling it is not (list_my_events), so the agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing guidance: 'Start here to resolve an event before calling the other event tools,' plus a named alternative for the joined-events case. That is when-to-use, when-to-use-something-else, and ordering all in one place.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_opportunityGet B2match opportunityARead-onlyIdempotent
Fetch a marketplace opportunity. Use the id or url from list_opportunities (published marketplace ids differ from opportunity ids on my_participation). Resolves the marketplace menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| opportunity_id | Yes | Published opportunity id or URL from list_opportunities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behaviour, yet the description adds a non-obvious runtime trait: the marketplace menu path is resolved automatically, with path as an escape hatch. It does not disclose failure modes (e.g. what happens if the id is from the wrong id space) or pagination/return shape, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, all front-loaded with the action first, then the id-sourcing rule, then the override. Every clause carries operational information; nothing is boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema the description could say more about what a fetched opportunity contains, but for a simple single-object read with fully documented parameters and a clear id contract, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning the schema cannot: the opportunity_id must be a published marketplace id rather than a participation id. The path parameter's auto-resolution behaviour is restated rather than extended, keeping it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Fetch a marketplace opportunity") and immediately distinguishes itself from the sibling list_opportunities, which supplies the id. An agent can tell this is the single-object lookup that follows the listing call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the prerequisite tool ("Use the id or url from list_opportunities"), warns that ids from my_participation are a different id space and will not work, and states the path override condition. That is a real when/when-not plus an alternative source, not just implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_organisationGet B2match organisationARead-onlyIdempotent
Fetch one organisation page (a participation: organisation details plus its representatives). Use list_organisations to find participation ids; use get_participant for a single person. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| participation_id | Yes | Participation id from list_organisations or my_participation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds genuine behavioral context beyond them: the menu path is auto-resolved and 'path' overrides that resolution, and it defines the payload shape (organisation plus representatives). It stops short of noting failure behavior for bad ids or event resolution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each doing distinct work: identity, sibling routing, and the path pre-condition. The core description of what is returned is front-loaded before the alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read tool with no output schema, the description covers purpose, siblings, and the path fallback well enough to call correctly. It could say a word about what happens when path is omitted and auto-resolution fails, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented including the path auto-resolution note and the origin of participation_id. The description restates the same facts (path as override, participation_id source) without adding new syntax or format detail, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Fetch one organisation page') with a parenthetical defining exactly what a page contains (organisation details plus its representatives). It explicitly distinguishes itself from list_organisations and get_participant, so the agent can pick correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names two concrete alternatives and the condition for each: list_organisations to obtain participation ids, get_participant for a single person. This is explicit when-to-use routing rather than implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_participantGet B2match participantARead-onlyIdempotent
Fetch one participant's full public profile without sending B2match's profile-view tracking mutation. Use list_participants to search or find ids; use my_participation for your own status.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| participant_id | Yes | Participant id from list_participants, list_session_attendees, or meeting_recommendations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds a genuinely non-obvious trait not present in the annotations: this fetch does not send B2match's profile-view tracking mutation, which materially affects side effects a caller might assume. Annotations already cover read-only/idempotent/non-destructive, and "public profile" signals field scoping, but error behavior (unknown participant_id) and rate limits are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core purpose and its unique behavioral trait front-loaded before the sibling routing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two well-documented required params, no nested objects, and full annotation coverage, the definition is nearly complete; "full public profile" conveys the return shape adequately in the absence of an output schema. Minor gap: no note on what happens when the participant is not found or not visible to the caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both `event` (URL/slug/euid/numeric id) and `participant_id` (source tools) are fully documented in the schema. The description only reinforces where ids come from, adding little beyond the existing parameter docs, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: "Fetch one participant's full public profile", with an explicit scope qualifier (public profile only) and a distinguishing behavioral note about the tracking mutation. An agent can tell this apart from list_participants and my_participation without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names two alternatives and the exact condition that selects each: list_participants for search/id discovery, my_participation for the caller's own status. That covers the realistic ambiguity for this tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessionGet B2match sessionARead-onlyIdempotent
Fetch one agenda session with its details and a first page of attendees. Provide session_id, or path to a session URL; path alone is enough. Use list_session_attendees to page through attendees only, get_agenda to find sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Session URL path from get_agenda; alternative to session_id. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| session_id | No | Session id from get_agenda. Optional when path is set. | |
| attendees_after | No | Attendee pagination cursor from a previous response. | |
| attendees_first | No | Attendee page size, capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds a genuinely useful behavioral fact beyond annotations: the call returns not just details but an embedded first page of attendees, which explains why the attendees_* params exist on a 'get' tool. It stops short of describing cursor semantics for attendees_after, which is left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: the output shape is front-loaded, the input rule follows, and the sibling routing comes last. Every sentence carries distinct information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing the return value, which it does ('details and a first page of attendees'). Combined with 100% schema coverage of the 5 params and full annotation coverage, an agent has what it needs. Minor gap: it doesn't say how large that first page is by default or how the cursor round-trips.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, including the session_id/path relationship. The description reinforces the either/or rule ('path alone is enough') but does not add format, limits, or cursor behavior beyond what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one agenda session with its details and a first page of attendees') and makes clear this is a single-item retrieval, distinguishing it from get_agenda (which lists sessions) and list_session_attendees (which pages attendees). An agent can select this tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternatives and the conditions that select them: 'Use list_session_attendees to page through attendees only, get_agenda to find sessions.' It also states an input-selection rule ('Provide session_id, or path to a session URL; path alone is enough'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsList B2match conversationsARead-onlyIdempotent
List the logged-in viewer's conversations with last-message previews, paginated. Does not mark conversations as read; prefer it over get_conversation unless full message history is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Opaque pagination cursor from a previous response. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | Page size, capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description adds real behavioral value on top: it discloses that listing does NOT mark conversations as read, and that results carry last-message previews rather than full history. It stops short of stating result ordering, preview truncation, or cursor expiry behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The core capability and pagination come first, followed by the side-effect note and sibling routing, which is the right order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, three-parameter list tool with full schema coverage and rich annotations, this is nearly complete: scope, previews, pagination, side-effect and alternative are all covered. The only gap is result ordering / cursor lifetime, which an agent might want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the meanings of 'event', 'first', and 'after' are already documented in the schema. The description only implies pagination ('paginated') without adding syntax or format detail beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List ... conversations') plus scope ('logged-in viewer's') and content ('last-message previews, paginated'). It also implicitly contrasts with get_conversation, so an agent can distinguish it from the sibling that returns full message history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the condition selecting it: 'prefer it over get_conversation unless full message history is needed.' That is a direct when/when-not rule, not an inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_eventsList my B2match eventsARead-onlyIdempotent
List events the logged-in viewer has joined, with ids/slugs usable as the event argument elsewhere. Requires login; use get_event for any single public event instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description adds genuine context beyond them: the login requirement and the fact that returned ids/slugs are reusable as the event argument elsewhere. It doesn't describe volume, ordering, or pagination of the result set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core scope stated first and the alternative routing second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden and does tell the agent what the ids/slugs are good for, but it omits the broader shape of each event entry and any pagination behavior. Complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; the description implicitly confirms there is no filtering input by framing it as 'events the viewer has joined'. Nothing further is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (list) plus scoped resource (events the logged-in viewer has joined), and it explicitly contrasts with get_event for single public events. An agent can distinguish this from my_participation or get_event without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the prerequisite (requires login) and names the alternative tool with the condition that selects it (get_event for any single public event). Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notificationsList B2match notificationsA
Returns unread/unseen notification counters by default. Fetching the notification list resets B2match's unseen counter (unseen goes to 0) even though this client never sends ReadNotification. The unread counter is unchanged. The full list requires B2MATCH_ALLOW_SIDE_EFFECT_READS=1 and acknowledge_marks_seen=true.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Opaque pagination cursor from a previous response. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | Page size, capped at 50. | |
| acknowledge_marks_seen | No | Required with B2MATCH_ALLOW_SIDE_EFFECT_READS=1 to fetch the full list; that request resets unseen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is exactly the behavior structured fields cannot convey: fetching the list resets the unseen counter to 0 even though the client never sends ReadNotification, while the unread counter is unchanged. The annotations (readOnlyHint=false, idempotentHint=false) are consistent with that disclosed side effect, and the description explains the gating env var. That is high-value, non-redundant disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, with the default behavior and the counter-reset side effect front-loaded ahead of the env-var gating. Every sentence carries functional information. The parenthetical aside about never sending ReadNotification is slightly dense on first read but justifies its place by explaining why the reset is surprising.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter read-with-side-effect tool with no output schema, the description covers return semantics (counters vs full list), the hidden mutation, and the precondition for the full fetch. It doesn't describe pagination behavior or what fields the full notification list returns, minor gaps given the schema documents the cursor and page size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents event, first, after, and acknowledge_marks_seen, including the cap of 50 and the side-effect coupling. The description adds only a restatement of the acknowledge_marks_seen requirement, which the schema already states nearly verbatim. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and behavior: it returns unread/unseen notification counters by default, and can return the full notification list under a condition. It is unambiguous about what the tool yields, though it never states the plain verb 'list notifications' and instead leads with the default mode. No sibling in the provided list overlaps with notifications, so no differentiation is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly splits the two modes of use: default call gives counters only, and the full list requires B2MATCH_ALLOW_SIDE_EFFECT_READS=1 plus acknowledge_marks_seen=true. It warns of the consequence of choosing the full-list mode (unseen resets). It stops short of stating when an agent should prefer one mode over the other or what to do when the env var is unavailable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_opportunitiesList B2match opportunitiesARead-onlyIdempotent
List published marketplace opportunities (offers/requests) of an event, paginated. Use get_opportunity for one entry's full details. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically. | |
| after | No | Opaque pagination cursor from a previous response. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | Page size, capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds useful behavioral detail beyond that: results are paginated and the menu path is resolved automatically unless overridden. It stops short of describing response shape or rate limits, but the added context is genuine.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core purpose front-loaded, followed by the sibling routing and path-override note. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter paginated read tool with full schema coverage and annotations, this is nearly complete. With no output schema, a brief note on what the paginated response contains would have closed the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter (path, after, event, first) is already documented, including the cursor and the 50-item cap. The description only restates the path auto-resolution behavior already present in the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list published marketplace opportunities — offers/requests — of an event) plus the pagination scope. It explicitly contrasts itself with get_opportunity, so an agent can distinguish it from the detail sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool and the condition that selects it: 'Use get_opportunity for one entry's full details.' It also explains the path parameter's default behavior (auto-resolve) versus explicit override. No explicit when-not or prerequisite guidance beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_organisationsList B2match organisationsARead-onlyIdempotent
List organisation pages (participations) of an event, paginated. Use get_organisation for one page, list_participants for people. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically. | |
| after | No | Opaque pagination cursor from a previous response. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | Page size, capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive; the description adds the paginated nature and the automatic menu-path resolution behavior, which is genuinely useful context beyond annotations. It does not describe the response shape, but no output schema exists so that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary purpose, followed by alternatives and then the notable path behavior. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list tool with full schema coverage and annotations covering the safety profile, the description covers purpose, alternatives, pagination, and path resolution. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the path override and pagination cursor. The description only restates the path override, adding no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (organisation pages/participations of an event) with scope and pagination. It explicitly distinguishes itself from get_organisation and list_participants, so an agent can pick the right tool without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the two alternatives and the condition that selects them: get_organisation for a single page, list_participants for people. It also notes the default path-resolution behavior and when to override it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_participantsList B2match participantsARead-onlyIdempotent
List public participants as a compact summary. Set detail=true for the fuller record; use get_participant for one profile.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Opaque pagination cursor from a previous response. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | Page size, capped at 50. | |
| query | No | Free-text search on participant name, organisation, or profile text. | |
| detail | No | true returns the full participant records instead of compact summaries (larger output). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/open-world, so the burden is light; the description adds genuinely new context by announcing the compact-versus-full output tradeoff and the 'public' scope of the results. It stops short of covering pagination or truncation behavior beyond the cursor defined in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the default behavior front-loaded before the two escalation paths. Every clause earns its place by changing how the agent would call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately signals the return shape (compact summaries vs full records) and the public-only scope. It could say more about page-size limits and cursor termination, but the required event parameter and filtering are fully covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters including detail and the cursor are already documented. The description restates the detail flag's effect but adds no format, default, or interaction detail beyond the schema and the -50 cap, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list public participants) plus the shape of the return (compact summary), and explicitly contrasts itself with get_participant so an agent can distinguish it from the single-profile sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: normal use for a compact list, detail=true for the fuller record, and get_participant when only one profile is needed. The alternatives and the condition that selects them are named rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_session_attendeesList B2match session attendeesARead-onlyIdempotent
Page through the attendees of one agenda session. Returns only the attendee list with a cursor, not the session details; use get_session for those. Provide session_id or path (from get_agenda).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Session URL path from get_agenda; alternative to session_id. | |
| after | No | Opaque pagination cursor from a previous response. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | Page size, capped at 50. | |
| session_id | No | Session id from get_agenda. Optional when path is set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description adds genuinely new behavior: results are paginated by an opaque cursor and the payload is attendee records only. It does not mention auth/permission requirements or rate limits, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and scope, then the sibling routing, then the addressing requirement. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list tool with full schema coverage and annotations covering the safety profile, the description covers what an agent needs to invoke it correctly. With no output schema, a hint about what an attendee record contains (fields available) would have closed the last gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the 'path is an alternative to session_id' relationship, so the schema already carries the parameter meaning. The description's restatement of that either/or adds little beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Page through the attendees of one agenda session') and immediately bounds scope by saying it does not return session details, routing to get_session instead. An agent can distinguish this from get_session, get_agenda and list_participants without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing ('use get_session for those') and prerequisite sourcing for the two addressing parameters ('session_id or path (from get_agenda)'). It stops short of naming the event-wide alternative (list_participants) or any exclusion conditions such as access prerequisites, so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_speakersList B2match speakersARead-onlyIdempotent
List the speakers shown on the event's speakers page, paginated. Use list_participants for all registered participants. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically. | |
| after | No | Opaque pagination cursor from a previous response. | |
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | Page size, capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds real behavior beyond that: results are paginated, the set is a narrower subset of the speakers page, and path resolution happens automatically. It doesn't describe return fields, but no output schema exists and the tool is a simple list, so this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what it lists, the alternative for a broader set, and how path behaves. The core purpose is front-loaded and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list tool with full schema coverage and no output schema, the description covers purpose, sibling differentiation, pagination, and path override. The only omission is any hint at what fields a speaker record contains, which is minor at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (event, path, after, first) are already documented with examples and limits. The description's note that path is auto-resolved overlaps with the schema's own wording, adding little new semantics. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the speakers shown on the event's speakers page") plus the pagination scope. It explicitly names the sibling list_participants as the wrong tool for the general case, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use list_participants for all registered participants" is an explicit when-to-use-this-instead routing rule. It also explains that the menu path is auto-resolved and that path is only for overriding, giving the agent clear guidance on the one ambiguous parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meeting_recommendationsGet B2match meeting recommendationsARead-onlyIdempotent
Fetch B2match's recommended and newest participants for the logged-in viewer to meet. Use list_participants to search all participants and find_meeting_slots to check shared free time.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior, so the safety profile is covered. The description adds genuinely useful context beyond that: results are personalized to the logged-in viewer and ranked as 'recommended and newest', which tells the agent the output is opinionated rather than a plain listing. It stops short of describing result volume or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, with the core purpose front-loaded before the sibling routing. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description conveys the essence of the return ('recommended and newest participants'), which is enough to know what comes back. It doesn't say whether the list is bounded or paginated, a minor gap for a single-parameter read tool whose annotations already cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter ('event') and schema description coverage is 100%, with accepted formats (URL, slug/euid, numeric id) already documented in the schema. The description adds no parameter detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and a precisely scoped resource: recommended and newest participants for the logged-in viewer. The viewer-scoping and the recommendation ordering distinguish it clearly from list_participants without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use list_participants to search all participants, find_meeting_slots to check shared free time. This names the alternatives and the tasks they cover, so an agent knows which tool to reach for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_availabilityGet my B2match availabilityARead-onlyIdempotent
Fetch the logged-in viewer's own meeting availability. Default is merged free ranges per day; set detail=true for the full timeslot grid. Use find_meeting_slots for slots shared with specific participants.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| detail | No | true returns the full timeslot grid instead of merged ranges. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the important behavioral detail about what is returned by default (merged free ranges per day) versus the full grid with detail=true. It could say more about authentication/event-scoping requirements, but the 'logged-in viewer' framing covers the essentials.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and immediately followed by mode behavior and the alternative tool. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description adequately explains what the tool returns in each mode (merged free ranges per day vs. full timeslot grid). For a read-only tool with two fully documented parameters and complete annotations, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both 'event' and 'detail'. The description restates the effect of detail=true but adds no syntax or format guidance beyond the schema, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the logged-in viewer's own meeting availability') with the scope of self clearly stated. It is distinguishable from siblings like find_meeting_slots without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool ('Use find_meeting_slots for slots shared with specific participants') and gives the condition that selects it. It also explains the default mode vs. the detail=true mode, leaving no routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_meetingsGet my B2match meetingsARead-onlyIdempotent
Fetch the logged-in viewer's meetings and meeting requests, optionally one status bucket. Unfiltered responses include a compact availability summary (merged free ranges per day) unless detail=true. Use my_schedule for the overall timetable and find_meeting_slots to find free times with others.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| detail | No | true returns the full availability timeslot grid instead of the summary. | |
| status | No | Return only this bucket; omit for all buckets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds real behavioral value the annotations don't: unfiltered responses include a compact availability summary (merged free ranges per day) unless detail=true. It stops short of describing result volume, pagination, or what a single meeting record contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences: capability and scoping first, output-mode caveat second, sibling routing last. No redundant restatement of annotations or the enum values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three simple params and no output schema, the description covers the essentials: required event context is implied by the domain, the status bucket behavior and the summary-vs-grid switch are explained. Missing is any sense of return volume/pagination or the fields of a meeting or request entry, which matters more given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by tying parameters to output shape — unfiltered (status omitted) yields an availability summary, and detail=true swaps to the full grid. That cross-parameter behavior is not obvious from the per-field schema text alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (fetch the viewer's meetings and meeting requests) plus a scoping note (optionally one status bucket). It is clearly distinguishable from my_schedule and find_meeting_slots, which are named as different tools for different jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to alternatives with conditions: my_schedule for the overall timetable, find_meeting_slots for finding free times with others. That leaves meetings/meeting-requests retrieval as this tool's clear niche.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_participationGet my event participationARead-onlyIdempotent
Fetch the logged-in viewer's own participant status, activation, permissions, organisation pages, and opportunities for one event. Use get_participant for someone else's public profile.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely new behavioral context: the scope is bound to the authenticated viewer and a single event, and it enumerates the categories of data returned, which is valuable given there is no output schema. It stops short of describing error states or what an empty/non-participant response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the identity/scope of the call is front-loaded and the disambiguation against the sibling follows immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with full annotation coverage, the description is nearly complete: it defines who the data belongs to, which event, and what fields come back, compensating for the absent output schema. The only gap is the failure/edge path (non-participant, invalid event reference), which an agent would likely need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single `event` parameter already documents accepted forms (URL, slug/euid, numeric id), so the description need not repeat it. The phrase "for one event" confirms cardinality (single, not list) but adds no format or validation detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and a precisely enumerated resource set (participant status, activation, permissions, organisation pages, opportunities) scoped to the logged-in viewer and one event. It also names the sibling it is not, get_participant, calling out that the sibling returns someone else's public profile, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Fetch the logged-in viewer's own..." establishes the selecting condition (self vs. others) and the second sentence names the alternative explicitly with its distinguishing trait. What is missing is any note on prerequisites (e.g. must be authenticated/registered for the event) or what happens when the viewer is not a participant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_scheduleGet my B2match scheduleARead-onlyIdempotent
Fetch the logged-in viewer's personal event schedule (booked sessions and meetings). Use get_agenda for the full public agenda and my_meetings for meeting requests by status. The PDF agenda URL is omitted unless include_pdf_link is true.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| include_pdf_link | No | true adds the downloadable PDF agenda URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds a real behavioral detail beyond them: the PDF agenda URL is conditionally omitted unless include_pdf_link is true, which tells the agent why a field may be absent. It does not describe pagination or the full return shape, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler; the core purpose and scope come first, then sibling routing, then the one conditional output nuance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with full annotation coverage and no output schema, the description covers purpose, alternatives, and the one surprising output condition. Only minor gaps remain (e.g., what happens if the viewer has no schedule, or whether registration is required), which are unlikely to block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both the event identifier format and the include_pdf_link flag are already documented. The description only restates the include_pdf_link behavior rather than adding constraints such as accepted slug/euid forms or defaults. Baseline 3 is appropriate when the schema carries the parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the logged-in viewer's personal event schedule') plus the concrete contents (booked sessions and meetings). It names the siblings it is not — get_agenda and my_meetings — so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use get_agenda for the full public agenda, use my_meetings for meeting requests by status, use this for the personal schedule. Each alternative comes with the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.2.1- Changed
find_meeting_slots4 fields changed- added
Input schema / properties / day / descriptionAdded value: +"Day to search, as a days[].date value from my_availability; omit for the default day." - added
Input schema / properties / duration / descriptionAdded value: +"B2match MeetingDuration enum value (e.g. THIRTHY, B2match's spelling); omit for the event default." - added
Input schema / properties / is_long_term_networking / descriptionAdded value: +"true searches the event's long-term networking calendar instead of the main meeting days." - added
Input schema / properties / participant_ids / descriptionAdded value: +"1-10 participant ids (from list_participants) to meet with."
- Changed
get_agenda1 field changed- added
Input schema / properties / path / descriptionAdded value: +"Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically."
- Changed
get_conversation1 field changed- added
Input schema / properties / conversation_id / descriptionAdded value: +"Conversation UUID from list_conversations."
- Changed
get_opportunity2 fields changed- added
Input schema / properties / opportunity_id / descriptionAdded value: +"Published opportunity id or URL from list_opportunities." - added
Input schema / properties / path / descriptionAdded value: +"Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically."
- Changed
get_organisation2 fields changed- added
Input schema / properties / participation_id / descriptionAdded value: +"Participation id from list_organisations or my_participation." - added
Input schema / properties / path / descriptionAdded value: +"Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically."
- Changed
get_participant1 field changed- added
Input schema / properties / participant_id / descriptionAdded value: +"Participant id from list_participants, list_session_attendees, or meeting_recommendations."
- Changed
get_session4 fields changed- added
Input schema / properties / attendees_after / descriptionAdded value: +"Attendee pagination cursor from a previous response." - added
Input schema / properties / attendees_first / descriptionAdded value: +"Attendee page size, capped at 50." - added
Input schema / properties / path / descriptionAdded value: +"Session URL path from get_agenda; alternative to session_id." - added
Input schema / properties / session_id / descriptionAdded value: +"Session id from get_agenda. Optional when path is set."
- Changed
list_opportunities1 field changed- added
Input schema / properties / path / descriptionAdded value: +"Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically."
- Changed
list_organisations1 field changed- added
Input schema / properties / path / descriptionAdded value: +"Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically."
- Changed
list_participants2 fields changed- added
Input schema / properties / detail / descriptionAdded value: +"true returns the full participant records instead of compact summaries (larger output)." - added
Input schema / properties / query / descriptionAdded value: +"Free-text search on participant name, organisation, or profile text."
- Changed
list_session_attendees4 fields changed- added
Input schema / properties / after / descriptionAdded value: +"Opaque pagination cursor from a previous response." - added
Input schema / properties / first / descriptionAdded value: +"Page size, capped at 50." - added
Input schema / properties / path / descriptionAdded value: +"Session URL path from get_agenda; alternative to session_id." - added
Input schema / properties / session_id / descriptionAdded value: +"Session id from get_agenda. Optional when path is set."
- Changed
list_speakers1 field changed- added
Input schema / properties / path / descriptionAdded value: +"Optional event menu path (e.g. /components/<id>) from get_event navigation; omit to resolve it automatically."
- Changed
my_availability1 field changed- added
Input schema / properties / detail / descriptionAdded value: +"true returns the full timeslot grid instead of merged ranges."
- Changed
my_meetings2 fields changed- added
Input schema / properties / detail / descriptionAdded value: +"true returns the full availability timeslot grid instead of the summary." - added
Input schema / properties / status / descriptionAdded value: +"Return only this bucket; omit for all buckets."
- Changed
my_schedule1 field changed- added
Input schema / properties / include_pdf_link / descriptionAdded value: +"true adds the downloadable PDF agenda URL."
22 tool updates
v0.1.0- First observed
auth_status - First observed
find_meeting_slots - First observed
get_agenda - First observed
get_conversation - First observed
get_event - First observed
get_opportunity - First observed
get_organisation - First observed
get_participant - First observed
get_session - First observed
list_conversations - First observed
list_my_events - First observed
list_notifications - First observed
list_opportunities - First observed
list_organisations - First observed
list_participants - First observed
list_session_attendees - First observed
list_speakers - First observed
meeting_recommendations - First observed
my_availability - First observed
my_meetings - First observed
my_participation - First observed
my_schedule
TDQS
Scored across 22 tools
Most tools have clearly distinct resource/action scopes, and descriptions actively cross-reference alternatives (e.g., list_participants vs get_participant vs my_participation). The scheduling cluster (my_schedule, my_meetings, my_availability, find_meeting_slots, meeting_recommendations) is the main area where an agent could still hesitate, but the descriptions provide enough differentiation.
Names overwhelmingly use snake_case with predictable get_/list_/find_/my_ verb or scope prefixes. A few outliers (auth_status, meeting_recommendations, list_my_events) and the my_* prefix mixing viewer scope with noun phrases are minor deviations rather than a broken pattern.
At 22 tools this is a heavy surface, with many parallel read operations across events, participants, organisations, opportunities, agenda, meetings, conversations, and notifications. Most tools do earn their place given the breadth of the platform, but the count sits in the borderline-heavy range.
Read/discovery coverage is broad, spanning events, participants, organisations, opportunities, agenda, speakers, meetings, conversations, and notifications. However, the surface is largely read-only: there is no send-message, meeting request/book/cancel, event registration, or profile-edit tool, which are notable gaps for an event-networking workflow.
Maintenance
Related MCP Connectors
Access authorized Linkame contacts, profiles, events, tickets and matching results.
Read Corsizio events, attendees and registrations, including payment status. Read-only.
Read your events, sales, orders and attendees from your AI assistant. OAuth sign-in, read only.
- mcpOAuthcom.getboothiq
Query your trade show leads, meetings, and events from BoothIQ
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with the Wisembly API to fetch and manage event data, including event details, participants, organizers, and locations.21ISC
- FlicenseCqualityBmaintenanceEnables interaction with the Swapcard event platform API, providing tools to manage events, people, sessions, exhibitors, documents, custom fields, meetings, webhooks, and analytics through natural language.32-
- FlicenseNot gradedqualityCmaintenanceEnables discovery and querying of public OpenBind structure-affinity datasets, experimental binding events, benchmark results, and live Fragalysis targets and observations through read-only REST endpoints without requiring an API key.-
- AlicenseNot gradedqualityCmaintenanceEnables read-only access to Crisp customer support, live chat, CRM, and helpdesk data, including conversations, contacts, knowledge base, campaigns, operators, visitors, and site settings, via the official REST API v1.MIT