b2match-mcp
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 20 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).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.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.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. Provenance requires a public repo. Configure npm trusted publishing against release-please.yml. NPM_TOKEN is a documented fallback only. .github/workflows/publish.yml is a manual republish trigger. After the first 0.1.0 release, remove "release-as": "0.1.0" from release-please-config.json.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds genuinely useful, non-redundant context — validation occurs locally and the token is never returned — which addresses the obvious security concern an agent would have.
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, front-loaded with the purpose and followed immediately by the security guarantee. No filler, no repetition of the title or annotations.
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 does the work by naming the two returned facts (availability, owner identity) and the one thing withheld (the token). It stops short of describing the failure/expiry shape or what the caller should do next, which is a minor gap for a simple status probe.
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; there is nothing for the description to disambiguate or annotate.
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 ('Show') and the exact resource/condition ('whether a local B2match token is available and, when valid, who it belongs to'). This is unmistakably distinct from every sibling, which are all domain-content tools rather than auth checks.
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?
Usage is implied rather than stated: an agent can infer this is a pre-flight auth check, but the description never says when to call it (e.g., before other tools) or what to do on failure. No alternatives are named because none exist, but the when-to-use framing is absent.
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 slotsBRead-onlyIdempotent
Read common free meeting slots for the viewer and selected participants. Does not book anything.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| duration | No | ||
| participant_ids | Yes | ||
| is_long_term_networking | No |
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 covered. The description reinforces this with 'Does not book anything,' a small additive clarification, but discloses nothing about cost, rate limits, or the semantics of the long-term-networking flag.
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, front-loaded with the core action and followed by the single most important non-behavioral caveat. Nothing is wasted and nothing is buried.
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 five parameters, no output schema, and no annotations gap around safety, the definition is only partially complete. It should clarify the format/units expected for 'day' and 'duration' and what the returned slots look like, none of which is recoverable from structured data.
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 only 20% (only 'event' is documented), so the description must carry the rest and does not. It vaguely gestures at participant_ids via 'selected participants' but says nothing about day, duration, or is_long_term_networking, leaving three parameters undocumented in both places.
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 object ('Read common free meeting slots') plus the scope ('for the viewer and selected participants'), which is enough to distinguish it from single-party siblings like my_availability. It never names an alternative sibling, so differentiation is inferred rather than explicit.
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?
'Does not book anything' implicitly tells the agent this is a pre-booking discovery step rather than a scheduling action, which is useful. However, no sibling is named as an alternative (e.g., my_availability vs. meeting_recommendations) and no condition is given for when this should be preferred.
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 agenda sessions and networking blocks. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| 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 readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful non-schema behavior — that the menu path is resolved automatically — but says nothing about result shape, size, or pagination for a list-style read.
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, no filler, and the core purpose is front-loaded ahead of the path-override caveat. 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 two-parameter, annotation-covered read tool with no output schema, the description supplies the purpose, the returned content categories, and the override behavior. It is slightly thin on return structure and the exact scope of an 'agenda', but nothing required 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 coverage is only 50%: 'event' is documented in the schema, but 'path' has no description there. The description compensates for exactly that gap by explaining 'path' is an override for an automatically resolved value, which an agent could not infer from a bare string parameter.
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 concrete verb plus the two resources it returns ('agenda sessions and networking blocks'), which is specific enough for an agent to pick it over get_session (a single session) or get_event (event metadata). It does not name any sibling explicitly, so it stops short of full differentiation.
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?
Usage is only implied: an agent infers this is the way to pull an event's agenda. There is no statement of when to use it versus get_session, list_session_attendees, or my_schedule, and no prerequisites or exclusions are given. The only guidance offered concerns the path override.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationGet B2match conversationARead-only
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 | ||
| 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 description discloses genuinely valuable behavior beyond the annotations: the server-side read-marking side effect, the feature-flag gating, the acknowledge_marks_read requirement, and not-found behavior for unknown ids. However, this directly conflicts with the readOnlyHint=true annotation, so the agent receives contradictory safety signals about whether the call mutates state.
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?
The core action is front-loaded and every sentence carries information (side effect, gating, alternative, error behavior). It is dense — four ideas packed into one paragraph — but no sentence is 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 tool with a hidden side effect, the description covers the essential call-time concerns: gating, required acknowledgement, side effect, alternative tool, and error behavior. No output schema exists, so return values need not be described. Only the annotation conflict keeps it from being fully complete.
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?
With only 50% schema description coverage, the description compensates by explaining acknowledge_marks_read's gating role ('Disabled unless ... acknowledge_marks_read is true') and conversation_id's failure mode ('Unknown ids return a not-found error'). This adds meaning beyond the bare schema for both parameters.
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+resource ('Fetch conversation messages') and immediately distinguishes itself from the sibling by contrasting full messages against list_conversations' last-message previews. An agent can tell the two 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?
Explicitly routes the agent: 'Use list_conversations for last-message previews,' and states the enabling condition (B2MATCH_ALLOW_SIDE_EFFECT_READS=1 and acknowledge_marks_read=true). It implies rather than spells out 'use this when you need full message bodies,' so it falls just short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet B2match eventBRead-onlyIdempotent
Fetch public event metadata, dates, registration window, login methods, and navigation.
| 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 readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds one genuinely useful behavioral fact — that only public event data is returned, not the caller's private participation — but nothing about caching, auth requirements, or failure modes for an invalid event identifier.
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?
A single sentence, front-loaded with the verb and resource, listing returned content without filler. Nothing is wasted or buried.
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?
Because no output schema exists, the description must carry return-value information, and it does by enumerating the fetched fields. It stops short of stating prerequisites (e.g., that the event must exist or be accessible) or how it relates to the many sibling event-scoped tools.
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?
With a single parameter and 100% schema description coverage, the schema already explains that 'event' accepts a URL, slug/euid, or numeric id. The description adds nothing about accepted identifier forms, 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 resource (public event metadata) and enumerates the content returned: dates, registration window, login methods, navigation. The word 'public' implicitly separates it from user-scoped siblings like list_my_events or my_participation, though it never names them.
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?
There is no when-to-use or when-not-to-use guidance and no alternative tool is named. An agent must infer from the name alone that this is the entry point for resolving an event before calling the more specific sibling tools.
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 | ||
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| opportunity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower, and the description still adds real behavior: the marketplace menu path is resolved automatically and can be overridden via path. It does not mention failure modes for invalid ids or the shape of the returned opportunity, keeping it at a 4.
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 tightly packed sentences, front-loaded with the action and followed by the id-sourcing caveat and the path-override behavior. The parenthetical carries non-obvious routing information, so nothing reads as 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, idempotent single-resource fetch with no output schema, the description covers what is needed to call it correctly: which id to supply, where to get it, and how path resolution behaves. Since no output schema exists, a brief note on what the returned opportunity contains would make it complete.
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 only 33% (only event is documented in the schema), so the description must compensate. It does explain opportunity_id's accepted forms and sourcing, and clarifies path as an override for auto-resolution; event remains covered by the schema. The one gap is that opportunity_id's type/format nuances rely mostly on the surrounding prose.
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 resource (a marketplace opportunity) and disambiguates itself from siblings by specifying which ids to use: those from list_opportunities rather than the different opportunity ids surfaced by my_participation. An agent can tell this apart from list_opportunities 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 clear context for correct invocation, naming list_opportunities as the id source and warning that marketplace ids differ from my_participation ids. It does not state explicit when-not-to-use conditions or name a competing retrieval tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_organisationGet B2match organisationBRead-onlyIdempotent
Fetch an organisation/participation page. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| participation_id | Yes |
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 a genuine behavioral trait absent from structured fields: automatic menu-path resolution with an explicit override. It stops short of auth requirements, failure modes, or what happens when resolution fails.
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, front-loaded with the action and followed by the path behavior. Every clause carries information, though the 'organisation/participation page' phrase trades precision for brevity.
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, so the description would ideally hint at what is returned, yet it does not. With 33% schema coverage and no explanation of why a participation_id is required to fetch an organisation, meaningful gaps remain for a three-parameter tool, though the annotations carry the safety dimension.
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 only 33%: only 'event' is described in the schema, while 'participation_id' is undocumented everywhere. The description explains that 'path' is an override for auto-resolution, adding intent beyond the bare string type, but gives no syntax or format for the path and says nothing about participation_id.
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 clear verb ('Fetch') plus resource ('organisation/participation page'), and the name/title line up with the sibling list_organisations by being the singular fetch. However, the pairing of 'organisation/participation page' is ambiguous — an agent can't tell whether the primary resource is an organisation or a participation, nor how this differs from get_participant.
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?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_organisations or get_participant. The only conditional statement is about the path override, which is a parameter mechanic rather than usage 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 participantBRead-onlyIdempotent
Fetch a participant profile without sending B2match's profile-view tracking mutation.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| participant_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious context: that this fetch suppresses B2match's profile-view tracking mutation, which an agent could not infer from structured fields. It stops short of auth or error behavior, so not 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?
A single front-loaded sentence with zero filler. The differentiating detail (no tracking mutation) is placed immediately after the core action.
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 tool with no output schema, the description covers the action, the return concept, and one behavioral nuance. It leaves the participant_id format and any error/not-found behavior unaddressed, which is a modest but real 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 only 50%: 'event' is documented but 'participant_id' has no description in either the schema or the description. With a bare, undocumented identifier parameter, the description should have compensated with format or accepted-value guidance and does not.
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 resource ('participant profile'), which is clearly distinguishable from sibling list tools like list_participants. The added clause about skipping the tracking mutation further narrows what this tool uniquely does, though it never names a sibling explicitly.
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 gives no when-to-use guidance, no prerequisites, and does not name an alternative such as get_event or list_participants. The only hint is the implied preference for an untracked fetch, which is a behavioral note rather than usage direction.
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 a session route. Provide session_id, or path to a session URL. Path alone is enough; session_id is not required when path is set.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| session_id | No | ||
| attendees_after | No | ||
| attendees_first | No |
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 usefully adds the path/session_id precedence rule, but says nothing about the paging behavior implied by attendees_first/attendees_after. With annotations carrying the safety burden, a 3 is appropriate.
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 with no waste; the parameter-precedence rule is front-loaded after the purpose statement. 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 5-parameter, read-only tool with no output schema and low schema coverage, the description covers the critical path/session_id decision but omits the attendee-pagination parameters and any note on what is returned. Adequate but with clear gaps.
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 only 20% (just 'event'), so the description must compensate. It clarifies path and session_id as alternatives, covering two of the undocumented parameters, but leaves attendees_after and attendees_first unexplained.
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 a session route') that an agent can distinguish from siblings like get_event and list_session_attendees. 'Route' is slightly jargon-y, but the intent (retrieve one session) is unambiguous.
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 invocation guidance on which parameter to supply ('Provide session_id, or path ... Path alone is enough'), which is genuinely useful. However, it offers no when-to-use context relative to alternatives such as get_event or list_session_attendees, so selection guidance is only implied.
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 authenticated conversations and last-message previews. This list does not mark conversations as read.
| 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 safety (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower, but the description adds a genuinely useful non-obvious trait: that listing does not mark conversations as read. That is a real behavioral disclosure beyond the annotation 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 tight sentences, front-loaded with the core action and followed by the key side-effect note. No wasted words.
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?
A simple read-only list tool with full annotation coverage, complete parameter schema, and no output schema to explain. The description is largely complete; it could have named the sibling alternative, but nothing essential to calling the tool 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 fully documents the cursor, event, and page-size parameters. The description adds nothing about parameter usage, which is acceptable given the baseline rule when schema coverage is high.
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 (conversations), plus the added scope of 'last-message previews' and that it's limited to authenticated conversations. It clearly contrasts with the sibling get_conversation by being a list rather than a single fetch, though it does not name that sibling explicitly.
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?
There is no explicit when-to-use guidance or routing to alternatives like get_conversation. The only usage-adjacent sentence ('does not mark conversations as read') is a behavioral trait rather than a condition for selecting this tool.
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 eventsBRead-onlyIdempotent
List events visible from the authenticated viewer account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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's one added behavioral fact is that results are scoped to the authenticated viewer, which is genuinely useful context. It says nothing about ordering, pagination, or result size for an openWorld listing.
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?
A single front-loaded sentence with no filler or redundancy. Every word carries information and the scoping qualifier comes immediately after the verb+resource.
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 zero-parameter read tool with annotations covering safety, the definition is close to sufficient. With no output schema, though, the agent has no idea what an event object looks like or whether the list is paginated, which is a real gap for an openWorld listing endpoint.
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 nothing for the description to disambiguate. Baseline 4 applies; no parameter-related omissions are possible.
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+resource ('List events') and scopes it to the authenticated viewer account, which separates it from the global/other-user listings. It does not, however, differentiate itself from the sibling get_event or clarify what a B2match 'event' contains, so an agent must infer the list-vs-single distinction.
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?
No when-to-use guidance, no prerequisites, and no mention of any alternative such as get_event for fetching a single event. The agent is left to infer that this is the entry-point listing tool purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notificationsList B2match notificationsARead-only
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?
Goes well beyond the annotations by disclosing that fetching resets B2match's unseen counter to 0 even though this client never sends ReadNotification, that the unread counter is unaffected, and that the full list requires a gated env flag. That is exactly the non-obvious side-effect information an agent needs before calling a nominally read-only tool.
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, front-loaded with the default behavior and followed by the side-effect and gating details in order of importance. No filler, though the phrasing is terse enough that a reader may need to re-read the env-var sentence.
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 return values, and it only characterizes them as counters versus a full list without describing notification fields or the shape of either mode. The side-effect disclosure is thorough, but the return-format gap leaves the definition minimally viable for a list tool.
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 after, event, first, and acknowledge_marks_seen are already documented in the schema (including acknowledge_marks_seen's env-var coupling). The description restates acknowledge_marks_seen's effect and adds that unseen resets, but adds nothing about after/first semantics, so the baseline of 3 is correct.
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 the tool returns notification counters (unread/unseen) by default and can return a full list under a flag, which is a concrete resource and behavior. It does not name a sibling tool, but no sibling in the list is a close competitor (the rest are events, participants, meetings, conversations). The 'list' aspect is slightly underemphasized because the opening sentence leads with counters rather than the notification collection.
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 establishes clear context for the two modes: default behavior (counters) versus the full list, plus the explicit prerequisite B2MATCH_ALLOW_SIDE_EFFECT_READS=1 combined with acknowledge_marks_seen=true. It stops short of the 5-level bar because it names no when-not condition or alternative tools.
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 marketplace opportunities. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| 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 readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds a genuine behavioral detail the annotations do not: that the menu path is auto-resolved unless overridden. It says nothing about result volume, pagination behavior beyond the cursor in the schema, 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?
Two short sentences, front-loaded with the purpose before the path caveat. Very tight, though the override sentence is slightly cryptic without knowing what a menu path is.
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, so the description could say more about what an opportunity record contains and how results are scoped/paginated. Since pagination parameters (after, first) are documented in the schema, the main residual gap is result scope relative to sibling tools.
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 75%, with `path` being the one undocumented parameter; the description compensates directly by explaining that path overrides automatic menu-path resolution. It still omits the expected format/syntax of path and doesn't restate scoping for `event`.
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 (marketplace opportunities), which contrasts cleanly with the singular sibling get_opportunity. It is clear what the tool returns at a category level, though it never says whether it lists for the current user, the event, or globally.
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 second sentence gives conditional guidance for the path parameter ('pass path to override'), which is useful. However, there is no guidance on when to use list_opportunities versus get_opportunity, or whether the event scope is required context.
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 event organisation pages. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| 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, open-world and non-destructive behavior, so the safety profile is covered. The description usefully adds the automatic menu-path resolution behavior, but says nothing about result volume, rate limits, or failure modes when a path is passed incorrectly.
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, front-loaded with the action, with the path-resolution note following. Nothing is wasteful, though the phrasing is terse enough that it could have afforded one more clarifying clause without bloat.
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 paginated list tool with strong readOnly annotations and no output schema, this covers the essentials but omits what a page of results contains and how the after cursor interacts with first. Adequate but with clear gaps given no output schema exists to carry return-shape information.
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 75%; the description fills the notable gap by explaining that path is auto-resolved and only needed to override, which is exactly the param left undocumented in the schema. The other parameters (event, after, first) are already described in the schema, so no further compensation is required.
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+resource ('List event organisation pages'), which clearly separates it from the singular get_organisation sibling. It stops short of explicitly naming that sibling or defining what a 'page' contains, so it is clear but not maximally differentiating.
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 clause 'Resolves the menu path automatically; pass path to override' gives implicit guidance on when to supply path. There is no stated when-to-use vs get_organisation or list_participants, and no prerequisites, so usage remains inferred.
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 | ||
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuinely useful behavior beyond that: only public participants are returned, and the default response is a compact summary unless detail=true. It says nothing about pagination limits or rate behavior, which the schema only partially covers.
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 waste, and the primary purpose is front-loaded before the alternatives. 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 list tool with no output schema, the description covers scope, default vs. detailed output, and the sibling alternative; pagination is handled by the schema's after/first descriptions. Only the undocumented query parameter and any rate/limit behavior are 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 60%, and the description compensates for the most consequential gap by explaining what detail=true actually changes (compact summary vs. fuller record). The query parameter remains undocumented in both schema and description, which keeps this short of a 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 (List) and resource (participants), plus a scoping qualifier (public) and output shape (compact summary). It explicitly differentiates itself from the sibling get_participant, so an agent can choose 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 two clear alternatives with their selecting conditions: set detail=true for the fuller record, use get_participant for a single profile. That is strong routing guidance, but it offers no explicit when-not-to-use case (e.g., versus list_session_attendees for a session-scoped roster).
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 attendeesCRead-onlyIdempotent
List attendees for a session. Returns only the attendees connection, not the full session route. Provide session_id or path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| after | No | ||
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| first | No | ||
| session_id | No |
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 the safety profile is covered. The description adds useful return-shape context (only the attendees connection, not the full route), but says nothing about pagination behavior despite exposing after/first.
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 the purpose and result scope front-loaded; nothing is padded. The final sentence is terse to the point of underspecification, but the structure itself is efficient.
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 five parameters at 20% coverage, no output schema, and no annotations gap to hide behind, the description should explain the session-identifier alternatives and pagination. It does neither, leaving an agent to guess how after/first behave.
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 only 20% (just 'event'), so the description must compensate and largely does not. It clarifies that session_id or path identify the session, but leaves the relationship between them ambiguous and never explains after/first pagination semantics.
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 attendees for a session") and scopes the result precisely: "Returns only the attendees connection, not the full session route." That implicitly separates it from the get_session sibling, though it never names the sibling outright.
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?
"Provide session_id or path" is an input hint, not usage guidance. The description never says when to choose this over get_session, get_participant, or list_participants, nor any prerequisites such as needing an event context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_speakersList B2match speakersBRead-onlyIdempotent
List event speakers. Resolves the menu path automatically; pass path to override.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| 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 readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact — that the menu path is auto-resolved and only needs to be passed to override it — but says nothing about return shape, pagination behavior, or auth requirements.
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 with the core purpose front-loaded and no filler. The second sentence is somewhat cryptic ('menu path' is never defined), which slightly undercuts an otherwise tight structure.
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 conveying what a speaker record looks like, and it does not. For a listing tool with four parameters, it is minimally viable but leaves the return content and result size entirely to inference.
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 75%, so the schema already documents after, event and first. The description only touches the path parameter, but it does add real meaning there (normally auto-resolved, pass only to override). The 'menu path' concept itself is unexplained, so the added value is limited.
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 event speakers'), which is unambiguous on its own. However, it draws no boundary against sibling list tools such as list_participants or list_session_attendees, so an agent cannot tell from the description alone which list to reach for.
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?
No when-to-use context, no prerequisites, and no mention of alternatives like list_participants. The only guidance is the internal 'pass path to override' note, which addresses parameter mechanics rather than tool selection.
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 recommendationsBRead-onlyIdempotent
Fetch authenticated recommended and newest participants to meet.
| 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?
The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so safety and idempotency are covered. The description adds that results are authenticated and include recommended plus newest participants, which is useful context, but it does not explain ranking, result shape, 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?
The description is a single concise sentence with no wasted words, and the core action is front-loaded. It could be slightly more structured by separating recommendation logic from authentication context, but it is efficient overall.
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 read-only lookup with complete schema coverage and rich annotations, the description is adequate but thin. Since there is no output schema, it should ideally explain what kind of participant data is returned or how "recommended" is determined; instead it leaves those details 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?
There is only one parameter and schema description coverage is 100%, so the schema fully documents the event identifier. The description adds no additional semantics about accepted formats or filtering behavior, making the baseline 3 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?
The description uses the specific verb "Fetch" and identifies the resource as "recommended and newest participants to meet." It is distinct from list_participants because it emphasizes recommendations rather than a general listing, though the phrase "authenticated recommended and newest" is slightly awkward and does not explicitly name the sibling alternative.
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 implies a discovery use case, finding participants to meet, but does not explicitly state when to use this tool instead of list_participants, my_meetings, or find_meeting_slots. No exclusions or prerequisites are given beyond "authenticated."
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 authenticated availability. Default is merged free ranges per day; set detail=true for the full timeslot grid.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| detail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so that burden is lifted. The description adds real behavioral value beyond them: it discloses the default return shape (merged free ranges per day) and the alternate verbose mode (full timeslot grid), plus 'authenticated' signals an auth requirement.
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 tightly written sentences with zero filler, and the default behavior is front-loaded before the opt-in flag. Every clause carries actionable 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?
With no output schema, the description usefully characterizes both return modes, which is the main thing an agent needs. It is slightly incomplete on temporal scope (what window of availability is returned, and timezone handling), but covers the branching decision fully.
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 only 50%: 'event' is documented in the schema but 'detail' has no schema description. The description compensates by explaining what detail=true actually returns ('the full timeslot grid') versus the default, which is more than the bare boolean default=false provides.
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 resource ('authenticated availability'), and the 'merged free ranges per day' phrasing clarifies it is the caller's own availability rather than generic event data. It does not name any sibling (e.g. my_schedule, find_meeting_slots) to disambiguate, so it is clear but undifferentiated.
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 gives explicit guidance for choosing between the two output modes (default merged ranges vs detail=true grid), which is genuine usage instruction. However it offers no when-to-use guidance relative to sibling tools like my_schedule or find_meeting_slots, so tool selection remains inferred.
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 authenticated meetings, optionally returning one status bucket. Unfiltered responses include a compact availability summary (merged free ranges per day) unless detail=true.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | B2match event URL, slug/euid, or numeric event id. | |
| detail | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description still adds real context beyond them: unfiltered responses include a 'compact availability summary (merged free ranges per day)' unless detail=true, and status filters to one bucket. What detail=true actually adds is only implied, not stated.
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, zero filler, and the core purpose is front-loaded before the conditional behavior. Each clause carries information the agent cannot get from the structured fields.
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 and a three-parameter tool, the description carries extra burden. It explains the availability-summary behavior and bucket filtering, but never describes the meeting record shape or exactly what detail=true returns, leaving the return contract partially inferred.
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 only 33%, with detail and status documented nowhere in the schema. The description compensates by explaining that status selects a single status bucket and that detail toggles the availability summary in unfiltered responses. That is meaningful added meaning, though the exact effect of detail=true on the returned meeting payload remains unclear.
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 resource ('authenticated meetings') and clarifies the scope is the authenticated user's own meetings. However, it does not differentiate from nearby siblings like my_schedule or my_availability, and the mention of an 'availability summary' overlaps conceptually with my_availability, which could cause an agent to hesitate between them.
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 describes what happens when status is absent ('optionally returning one status bucket') but gives no when-to-use guidance or exclusions relative to siblings like my_schedule, my_availability, or find_meeting_slots. The agent must infer the decision boundary on its own.
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 authenticated participant status, activation, permissions, organisation pages, and opportunities for one event.
| 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 adds that this aggregates multiple sub-resources (status, permissions, organisation pages, opportunities) for a single event, which is useful context, but says nothing about auth failure modes or data freshness.
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?
A single front-loaded sentence with no wasted words and the scope ('for one event') placed at the end to bound the operation. The crammed list of returned facets reads slightly like an enumeration rather than prose, but nothing is superfluous.
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, enumerating the returned facets (status, activation, permissions, organisation pages, opportunities) is the key completeness contribution and it is present. For a read-only tool whose annotations already convey safety, this is close to sufficient, though auth prerequisites remain unstated.
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 is fully documented in the schema (URL, slug/euid, numeric id). The description only echoes the one-event scoping already conveyed by the required parameter, adding no extra syntax or format 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 (Fetch) and a well-defined resource set (authenticated participant status, activation, permissions, organisation pages, opportunities) scoped to one event. This distinguishes it from broader siblings like get_event and list_participants, but it does not explicitly contrast itself with nearby 'my_*' tools such as list_my_events or my_schedule.
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?
Usage is implied by the 'my_/authenticated participant' framing and the 'for one event' scope, but the description never states when to reach for this tool instead of get_participant, list_my_events, or my_schedule. No prerequisites or exclusions are given.
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 authenticated viewer's event schedule. 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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely new behavior beyond the annotations: the PDF agenda URL is conditionally omitted unless include_pdf_link is true, which is a non-obvious output-shaping rule.
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, no filler. The core operation is front-loaded and the conditional parameter behavior follows immediately after.
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, so the description carries the return-value burden; it states what is fetched and how the optional PDF link affects the result. Minor gap: no mention of schedule contents or empty-schedule behavior, but nothing that would cause a mis-call.
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 50%, with the undocumented parameter being include_pdf_link. The description directly compensates by explaining its effect on the returned payload, so the gap is closed rather than left to inference.
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 authenticated viewer's event schedule'), which is clearly a personal schedule rather than an event-wide artifact. It does not explicitly distinguish itself from close siblings like get_agenda or list_my_events, so the agent must infer the boundary from the names.
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?
Usage is implied by the qualifier 'authenticated viewer's', which signals this is the self-scoped counterpart to event-level tools such as get_agenda. There is no explicit when-to-use statement and no named alternative or exclusion condition.
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.
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 map to a distinct resource+action, and the descriptions do a good job distinguishing near-neighbors (e.g. list_participants vs get_participant vs my_participation, and list_opportunities' published ids vs my_participation's opportunity ids). Some overlap remains between the 'my_' cluster (my_schedule, my_availability, my_meetings) and the agenda/session tools, but boundaries are largely workable.
The dominant pattern is a clean verb_noun convention (get_event, list_participants, get_session, find_meeting_slots). Deviations are the consistent 'my_' viewer-scoped group (my_participation, my_schedule, my_availability, my_meetings) plus a couple of noun-style names (auth_status, meeting_recommendations), which is readable but not a single uniform pattern.
22 tools is on the heavier side but justified by a genuinely broad domain covering events, participants, organisations, opportunities, agenda, sessions, speakers, meetings, availability, conversations, and notifications. Almost every tool targets a distinct resource, so few feel redundant, though a couple could arguably be merged.
Coverage of read/list/get operations is thorough across resources, but the surface is lopsided: there is no send-message operation for the conversation tools, no meeting booking beyond find_meeting_slots, and no create/update actions anywhere, leaving common writing workflows as dead ends. For a read-mostly client this is largely workable but leaves notable gaps.
Maintenance
Related MCP Connectors
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
Anonymous, read-only cross-venue discovery of partner-approved venues, cities, destinations.
Event ticketing: create and publish events, read orders, attendees and sales analytics.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables interaction with the Wisembly API to fetch and manage event data, including event details, participants, organizers, and locations.21-
- 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