Skip to main content
Glama

Server Details

Post deals, host events, import contacts and keep notes and memory across every assistant.

Ownership verified
Status
Healthy
Uptime
91.3% over 42 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A4.1/5.0

Scored across 44 tools

Disambiguation4/5

Most tools target a distinct resource+action and the descriptions aggressively cross-reference siblings (e.g. calendar_add vs event_create, todo_add vs note_save). However, several meta/orientation tools overlap heavily (pulse, whoami, help, core, mcp_servers all answer 'where am I / what should I call'), and the catalog-discovery cluster (accounts, explore_connectors, search_catalog, execute, plus bare search/fetch) creates real boundary confusion.

Naming Consistency3/5

The bulk of tools share a predictable connections_<domain>_<verb> snake_case pattern, which is readable and roughly consistent. But two tools (search, fetch) drop the prefix entirely, and many tools are bare nouns (accounts, apps, links, whoami, ping, pulse) with no verb, mixing conventions within the same roster.

Tool Count2/5

44 tools is far past the comfortable band and several are thinly split (script_get does two jobs, help duplicates pulse's capability map, search/fetch shadow search_catalog). The platform is broad, which justifies a large surface, but the count is still heavy and shows signs of under-consolidation.

Completeness5/5

Coverage is unusually full: contacts, todos, notes, calendar, events, deals, email, scripts (save/get/delete/restore) and workspace/company lifecycle are all represented, and connections_execute plus connections_search_catalog serve as a catch-all for any endpoint without a dedicated tool. No obvious dead ends in the domain.

Available Tools

44 tools
connections_accountsList connected accounts/instancesA
Read-only
Inspect

THE answer to 'is connected?' - every connected account/instance this company has (service, instance, accountId, region), filterable with service and narrowed with match (looking for one plane's instance? pass match - the full list is ~50 rows). Pass an instance as connections_execute's instance to target one. Two kinds: a normal row holds a credential in this vault; a kind:'brokered' row is owned by ANOTHER first-party plane (named in via) that holds the credential - notably every Stripe account linked through Pay, which you reach with Pay endpoints per the row's callWith, NOT with service:'stripe'. Stripe can appear BOTH ways at once and they are different accounts: a brokered row is Pay's Connect link, while a normal stripe row is a secret key this workspace pasted directly and IS called with service:'stripe' as its own instance - so read the row's kind before choosing how to call it. A brokeredUnavailable field means that plane could not be reached, so the list is INCOMPLETE - never read it as 'not connected'.

ParametersJSON Schema
NameRequiredDescriptionDefault
matchNoOnly accounts whose instance name, account name or account id contains this text (case-insensitive), e.g. 'accounts' for the Accounts plane. Instance names follow `<plane>@connections.icu` for most planes and `Main.Connections` for Main. Combines with `service`.
serviceNoOnly accounts for this service slug (aws, stripe, github, cloudflare, …). Omit for every connected account.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, but the description adds substantial behavioral detail: two row kinds (normal vs brokered), the `via` and `callWith` fields, and the critical caveat that Stripe can appear both ways with different semantics. It also discloses the incompleteness risk from brokeredUnavailable, far exceeding what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place. It is front-loaded with the core purpose and filters, then logically progresses to usage with connections_execute and the nuanced brokered/Stripe handling. The structure guides the agent from high-level to edge cases without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description enumerates expected fields (service, instance, accountId, region) and introduces `kind`, `via`, `callWith`, and `brokeredUnavailable`. It also explains how to consume the result for targeting connections_execute, making the tool fully actionable for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are documented. The description adds meaning by explaining how `match` narrows (e.g., instance names follow `<plane>@connections.icu`) and that `service` filters by slug. It also clarifies the combination of filters, going beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (list) and resource (connected accounts/instances) with clear scope: 'every connected account/instance this company has'. It distinguishes itself from siblings by explicitly routing usage to connections_execute and clarifying that Stripe brokered rows are handled via Pay endpoints, not this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ('THE answer to is <service> connected?') and how-to-filter guidance with `service` and `match`. It also gives exclusions: brokered Stripe accounts should use Pay endpoints, and warns that brokeredUnavailable means the list is incomplete, so it must not be read as 'not connected'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_appsApps and add-ons - the Chrome add-ons for Connections Email, Connections Schedule and NotesA
Read-only
Inspect

What Connections offers outside this chat: Connections Email, Connections Schedule and Notes each have a Chrome add-on. Returns each add-on's name, browser, status, install_url, a one-line summary and its highlights, plus say, one sentence to hand the member as-is. install_url is null while an add-on is not on the Chrome Web Store (status coming_soon): tell the member it is coming, never invent a store link. Read-only, no side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the added 'Read-only, no side effects' line is partly redundant. What is genuinely additive is the disclosure that install_url is null for coming_soon add-ons and that the `say` field is a ready-to-relay sentence, which tells the agent how to behave on edge cases rather than just what data comes back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences that are front-loaded with the payload (what is returned) before the edge-case handling and the read-only reassurance. Dense with information and free of filler, though the closing 'Read-only, no side effects' repeats the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 return-value burden and does so by enumerating the returned fields and explaining the two special ones (`say`, null install_url). For a zero-parameter, read-only lookup with annotations covering safety, nothing needed to invoke or relay it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema has nothing to document and the baseline of 4 applies. The description correctly says nothing about inputs instead of padding with irrelevant argument talk.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what is returned: Chrome add-ons for Connections Email, Schedule and Notes, with per-add-on name, browser, status, install_url, summary and highlights. That distinguishes it cleanly from the many sibling tools (email_get, calendar_list, etc.). It is descriptive rather than verb-led, but the resource and scope are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It establishes the context of use ('What Connections offers outside this chat') and gives a concrete conditional handling rule for install_url being null (status coming_soon) plus a 'never invent a store link' guardrail. It does not name sibling alternatives or explicit when-not-to-call conditions, 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.

connections_calendar_addAdd an event to the member's own calendarA
Destructive
Inspect

Use this when the member asks to add, put or schedule something on their calendar, book or block out time, or save a meeting, appointment or call at a set time ('add it to my calendar', 'put lunch with Sam on my calendar Friday at noon', 'block out 2-4pm tomorrow'). Creates ONE event on the member's own Connections calendar, the one the Connections Calendar add-on and the Connections calendar app show, visible only to them. starts_at is an ISO date-time carrying the member's UTC offset (2027-01-15T10:00:00-06:00 is 10am US Central); ends_at defaults to one hour later; all_day:true makes it a whole-day event. The reply names what was added and when, so say it back. For a public event with its own page, tickets or RSVPs use connections_event_create; for a to-do with no time slot use connections_todo_add.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesWhat it is, in the member's words ('Lunch with Sam').
all_dayNotrue = a whole-day event with no time slot. Default false.
ends_atNoOptional end, same format. Default: one hour after starts_at (for all_day, the same day).
starts_atYesStart, as an ISO 8601 date-time WITH the member's UTC offset, e.g. 2027-01-15T10:00:00-06:00. For an all-day event, midnight at their offset (2027-01-15T00:00:00-06:00).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the bar is lower; the description adds real context beyond them — the event is private to the member, exactly one event is created, and the reply should be read back to the member. It does not explain that repeated calls create duplicates (idempotentHint=false) or what the destructive hint means for a pure-add operation, which are the remaining gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: the trigger conditions come first, then behavior, then defaults, then alternatives. The quoted example phrases are bulky but functional; the description runs long for a four-parameter tool, though each sentence carries routing or behavioral weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by describing what the reply contains and instructing the agent to say it back. Combined with the privacy scope, the defaults, and explicit sibling routing, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so title, starts_at, ends_at and all_day are already documented with defaults and format. The description restates the same facts (UTC offset example, one-hour default, all_day meaning) rather than adding new semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('Creates ONE event on the member's own Connections calendar') and immediately delimits scope as the private, member-only calendar. It also names the two nearest siblings it is not (connections_event_create, connections_todo_add), so an agent can disambiguate 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening sentence enumerates the triggering phrasings ('add it to my calendar', 'block out 2-4pm tomorrow') and the closing sentence gives explicit when-not routing: public event with page/tickets/RSVPs → connections_event_create, to-do with no time slot → connections_todo_add. Both the selection and exclusion conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_calendar_listWhat is on the member's calendarA
Read-only
Inspect

Use this when the member asks what is on their calendar or schedule, whether they are free or busy at some time, what they have today, tomorrow or this week, or when something on their calendar is. Returns the events on the member's own Connections calendar in a window, soonest first: the ones they added plus the ones other sources put there (their hosted events, note deadlines, a connected Google Calendar), each with its id, title, starts_at, ends_at, all_day and source. Answer these questions from this list rather than from chat history. The window is from (default now) for days days (default 7, at most 62).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow many days the window covers from `from` (1-62, default 7).
fromNoOptional window start, an ISO 8601 date-time with the member's UTC offset (2027-01-15T00:00:00-06:00). Default: now.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnlyHint and non-destructive behavior. The description adds meaningful context: it returns events from multiple sources, lists the returned fields, orders events 'soonest first,' and instructs the agent to answer from this list rather than chat history. It does not mention absence/pagination behavior, but that is a minor gap given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but front-loads the primary use case, then delivers return shape and window behavior in dense, information-packed sentences. Every sentence contributes value and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description enumerates the returned fields (id, title, starts_at, ends_at, all_day, source), the ordering, the window semantics, and the data sources. It also tells the agent to prefer this list over chat history. For a read-only list tool with two optional parameters, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are already described with types and defaults. The description restates the window semantics ('default 7, at most 62') but adds little beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Use this when the member asks what is on their calendar or schedule' and identifies the resource as 'the member's own Connections calendar.' It further distinguishes itself from siblings by listing aggregated sources such as hosted events, note deadlines, and connected Google Calendar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly enumerates trigger phrasings: 'what is on their calendar or schedule, whether they are free or busy... today, tomorrow or this week, or when something on their calendar is.' It does not explicitly name alternative tools or when-not conditions, but the trigger list is clear enough for routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_claim_companyOne-time claim: bind THIS registration to a companyA
Destructive
Inspect

Bind this UNASSIGNED registration to a company - allowed exactly ONCE, and only while no company is assigned. Confirm the choice with the human in chat first. After a claim (or any Studio assignment) the binding is locked: changing or clearing it is Studio-only (https://studio.connections.icu/dev/mcp-servers) and there is deliberately no unclaim/swap tool. Pass company = a companyId from connections_list_companies, or an exact company name.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYescompanyId (preferred) or exact company name from connections_list_companies.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the basic annotations (readOnlyHint=false, destructiveHint=true) by detailing the irreversible nature of the claim: allowed exactly once, locked afterward, and that changing/clearing is Studio-only. It also explicitly notes that no unclaim/swap tool exists, giving the agent a clear understanding of the long-term consequences. This fully discloses the mutating and potentially destructive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat verbose but every sentence carries crucial information (unassigned condition, once-only rule, human confirmation, lock, Studio-only override, no unclaim, parameter source). It is front-loaded with the purpose and then explains constraints. A slightly tighter phrasing could reduce redundancy, but the length is justified given the number of important caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully equips an agent to decide when to use the tool and what to expect: it covers the target state (unassigned), the mutation (binding), the restriction (once, locked), the source for the parameter, and the downstream limitation (Studio-only changes). There is no output schema, but the tool returns a confirmation or error implicitly, and that is sufficient. No critical context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already defines `company` as a required string, and the description adds that it can be either a companyId from connections_list_companies or an exact company name. This enriches the schema by providing a format/source, but it does not clarify edge cases like case sensitivity or behavior when an exact name matches multiple companies. Still, it covers the essential semantics beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the exact action ('bind this UNASSIGNED registration to a company') and immediately distinguishes it from siblings by emphasizing the one-time, unassigned-only nature. It also cross-references connections_list_companies, eliminating ambiguity about which tool to use for listing companies. This is a precise verb+resource+constraint specification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly defines when the tool should be used ('only while no company is assigned'), states the prerequisite of confirming with a human, and warns about the post-claim lock and the absence of an unclaim/swap tool. It also provides a direct pointer to connections_list_companies for obtaining a valid companyId, offering complete actionable guidance without needing to inspect other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_contacts_getOne contact in full, with recent touchesA
Read-only
Inspect

Use this when the member asks for details about one specific contact - their full info, how they were met, or recent history with that person. Pass the id from connections_contacts_list. Returns every field on the contact record (context, location label, relationship signals, tags, favorite/follow-up flags) plus, by default, their most recent relationship touches (notes, meetings, calls, messages, emails, introductions) from the contact's timeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe contact id from connections_contacts_list.
timeline_limitNoMax touches to include when include_timeline is true (1-100, default 10).
include_timelineNoDefault true: also fetch the contact's recent relationship touches. false skips that second read.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral detail: it returns every field on the contact record, includes recent relationship touches by default, and explains that include_timeline=false skips a second read. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the primary use case, then proceeds to the required parameter and return behavior. Every sentence contributes useful information, with no filler or repetition of schema details beyond what adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only detail tool: it explains when to use it, where to get the required id, what fields are returned, and how the optional timeline parameter affects behavior. Since there is no output schema, the description appropriately compensates by describing the return payload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 important semantic context beyond the schema: it identifies where the `id` value comes from (connections_contacts_list), clarifies that timeline data is fetched by default, and explains the purpose of include_timeline. This helps the agent use the parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (get details for one specific contact) and resource (contact record), and explicitly distinguishes it from the list sibling by requiring an `id` from connections_contacts_list. It clearly communicates what the tool returns: full contact fields plus recent touches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('when the member asks for details about one specific contact') and tells the agent to pass the `id` from connections_contacts_list. It does not explicitly contrast with connections_contacts_list beyond that, but the usage context is clear enough for an agent to select this tool over its sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_contacts_listMy contacts - who the member knows, and who needs following upA
Read-only
Inspect

Use this when the member asks about their contacts, who they know, their network, people they have met, or who needs following up. Returns the member's own Connections contacts - name, email, phone, company, job title, tags, and whether each needs a follow-up - newest-updated first. Pass query to search by name, email, company, job title or tag; needs_follow_up: true to see only the people waiting on one. Get one contact's full record and recent history with connections_contacts_get {id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional: only contacts carrying this tag/folder (a Connections contact folder or label).
limitNoMax contacts to return (1-100, default 25).
queryNoOptional text to search by: matches name, email, phone, company, job title or tag. Words are scored, not required together - a contact matching one word still shows, more matches rank higher.
detailNocompact (default): id, name, email, phone, company, job_title, tags, needs_follow_up. full: every field on the contact record, including relationship signals, favorite/color, location and timestamps.
fieldsNoOptional: return exactly these fields instead of the compact/full set, e.g. ['id','name','phone']. Overrides `detail` when given.
offsetNoContacts to skip, for paging past the first page (default 0).
companyNoOptional: only contacts whose company contains this text.
needs_follow_upNotrue = only contacts flagged as needing a follow-up. false = only ones that are not. Omit to see both.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond them: results are the member's own contacts, ordering is newest-updated first, and query words are scored rather than required together. It stops short of discussing pagination behavior or result-size implications, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the usage trigger before the return and parameter notes. Dense but every clause carries information; minor redundancy between the description and the rich schema keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though there is no output schema, the description enumerates the compact return shape (name, email, phone, company, job title, tags, needs_follow_up) and ordering, and covers the main filter options. Combined with 100% schema coverage, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 description reinforces a couple of the key parameters (query, needs_follow_up: true) but adds little the schema does not already state in more detail, so it does not exceed the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list the member's own Connections contacts) and enumerates the returned fields, so an agent knows exactly what this returns. It also distinguishes itself from the sibling connections_contacts_get for single-record retrieval, so it is identifiable 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit when-to-use trigger list ('member asks about their contacts, who they know, their network, people they have met, or who needs following up') and routes the agent to connections_contacts_get {id} for the single-contact case. The alternative and its selecting condition are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_contacts_logLog a note or touch on one of the member's contactsA
Destructive
Inspect

Use this when the member says they talked to, met or called someone and wants it kept on that person's record - "log a coffee with Sam", "note that Avery wants an intro to Dana". Pass the contact as id (from connections_contacts_list) or as name, with email to tell two people of the same name apart. Adds one note to the contact's timeline, dated now unless occurred_at is given, and returns the recorded touch. It only ever writes to the member's own contacts. A name that fits more than one contact writes nothing and returns the candidates to choose from. Needs the contacts:write scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe contact id from connections_contacts_list. Use this when you have it.
nameNoThe contact's name, when you do not have the id. An ambiguous name writes nothing and returns candidates.
noteYesWhat happened, in the member's words (up to 4000 characters).
emailNoThe contact's email, to tell apart two contacts who share a name.
channelNoHow it happened (default note).
occurred_atNoWhen it happened, ISO-8601 with an offset (default: now).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: it writes only to the member's own contacts (consistent with openWorldHint=false), appends exactly one note dated now unless occurred_at is supplied, returns the recorded touch, and silently writes nothing but returns candidates on an ambiguous name. The destructiveHint=true flag is not echoed, but the appending-write semantics and blast radius are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger scenario before mechanics, and every sentence carries information (trigger, parameter routing, write behavior, ambiguity semantics, scope). It is dense and slightly long, but nothing is filler or redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 covers the return value ('returns the recorded touch') and the degenerate return (candidate list on ambiguous names), and with six parameters it explains how to supply the identifying ones. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds selection logic the schema doesn't: prefer `id` from connections_contacts_list, fall back to `name`, and use `email` only to disambiguate same-name contacts. It doesn't restate enum values or the 4000-char note limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Log a note or touch on one of the member's contacts') with concrete example utterances, and distinguishes itself from the read-side siblings (connections_contacts_get / connections_contacts_list) and from connections_note_save by naming the target record. An agent can select 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the exact trigger condition ('when the member says they talked to, met or called someone and wants it kept on that person's record') plus two paraphrased user utterances. It also states the resolution path when only a name is known and the required contacts:write scope, so usage is fully determined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_copy_connectionCopy a connected service into another of the member's workspacesA
Destructive
Inspect

Copy one connected service (Cloudflare, GitHub, AWS, ...) from one of the member's workspaces into another, so the receiving workspace uses the same account without a new sign-in. The copy SHARES the source's credential - nothing secret is duplicated, read into this conversation or returned. Allowed only while the member's cross-workspace access is ON (connections_cross_workspace_access) and BOTH workspaces are solely theirs; otherwise the reply is cross_workspace_refused with a reason and the settings link - say that and do not retry; when the member asked you to do it, mint a one-tap link with connections_copy_connection_link and send them that instead. Name the source EXACTLY ONE way: connectionId (the source row's id, from GET /v1/connected-services in the source workspace), or service (the connector slug, e.g. "ssh") + instance (that connection's instance name) - naming both forms together returns conflicting_source, and naming neither returns missing_source. fromProject defaults to whichever of the member's own workspaces holds that connection, the one this assistant is bound to included; pass it when service + instance matches in more than one workspace (the reply is ambiguous_source, listing each candidate's project_id) or to search only one. A not_found names the workspace searched - pass fromProject, or switch to service + instance, rather than guessing. Pass overwrite with a connection id in the TARGET workspace to replace a dead or duplicate connection in one act: the copy lands first, the old row is disconnected, and the copy takes its name. Returns {connectionId, projectId, instanceName, sharesCredential}.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceNoWith `instance`, instead of connectionId: the connector slug of the connection to copy (e.g. "ssh").
instanceNoWith `service`, instead of connectionId: that connection's instance name in the source workspace.
overwriteNoOptional: a connection id IN THE RECEIVING WORKSPACE to replace; the copy takes its name.
toProjectYesThe receiving workspace's project id, ref or company id.
fromProjectNoThe source workspace's project id, ref or company id. Omit to use whichever of the member's own workspaces holds the connection.
connectionIdNoThe SOURCE connection's id (a UUID from /v1/connected-services). Or omit it and pass service + instance instead - exactly one of the two forms.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false; the description adds crucial context — the copy shares the credential, no secret is duplicated or returned, and overwrite replaces a dead/duplicate row in a single act. Also discloses error codes and their meaning, which goes well beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then constraints, then parameter rules, then return shape. A few clauses (e.g. the error-code enumeration) could be trimmed, but each earns its place given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers preconditions, safety profile, parameter selection rules, error recovery, the sibling hand-off, and the return shape {connectionId, projectId, instanceName, sharesCredential}. For a destructive, open-world mutation tool with no output schema, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline is 3, but the description adds real semantic constraints: exactly one naming form (connectionId XOR service+instance), the resulting error codes (conflicting_source, missing_source, ambiguous_source), and overwrite's target-workspace scoping. It earns above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: copy a connected service from one of the member's workspaces into another, sharing the same credential. Distinguishes clearly from connections_copy_connection_link, which it names as the alternative for user-initiated copies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit preconditions (cross-workspace access ON, both workspaces solely owned), explicit routing to connections_copy_connection_link when the member asked, and explicit do-not-retry on cross_workspace_refused. Also gives guidance on when to pass fromProject and how to recover from not_found/ambiguous_source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_coreHydra Core - the workspace's decision flowchart for AI chatsAInspect

Use this when an AI chat starts a task and needs to know how to do it: whether to do it itself or delegate, how big it is, which manager, worker or tool it goes to, and the brief to hand them. One flowchart per workspace, kept in the CrAInium and edited live. action run (default) walks it: send the answers you have (by question id) and facts such as { message }; it answers the next question to answer (status ask) or the outcome with the path taken, the people, the tools and a brief (status done). Most tasks end at the first questions with outcome myself: go do it. action head lists the flowchart's quick exits: the questions a chat answers itself before it acts, and which answers end there, so those need no call. action find lists the CrAInium docs and staff in this workspace that match a query or a message, as addresses to read, never their text. action get returns the flow (format outline for a readable view); edit changes it with ops (add_node, update_node, remove_node, add_edge, update_edge, remove_edge, set) and save replaces the whole graph, both with base_version and a why; revert brings an older version back; history lists versions; log lists recent runs; brief gives a chat back its last delegate brief after a compact; turns stores one ledger row per chat turn from a PC's hook: whether the chat walked the core and whether it delegated. Every version is kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNorevert: the version to bring back.
opsNoedit: [{ op: 'add_node', node: {id, type, ...} }, { op: 'update_node', id, set: {...} }, { op: 'remove_node', id }, { op: 'add_edge', edge: {from, to, when} }, { op: 'update_edge', id, set }, { op: 'remove_edge', id }, { op: 'set', set: { title, start, notes } }]. Node types: ask (text, answers), check (test: { fact, op, value }), do (say, use), person (name, role, mode consult|hire|lead, brief), end (outcome, say).
whyNoedit/save/revert: what changed and why, kept with the version.
chatNorun/log/brief: this chat's key, so its runs and brief can be found again.
flowNoWhich flowchart (default main).
kindNolog: which core_events rows (default run).
rowsNoturns: one row per chat turn, 1 to 200: { uid (the turn's key, 1-80 letters, digits, . _ : or -), chat, at (ISO time), called, delegated, version, pc }. called true means the chat walked the flowchart.
factsNorun: facts the flowchart's checks read, e.g. { message: '<the request>' }. find: { message } in place of query.
graphNosave: the whole flowchart { title, start, notes, nodes, edges }.
limitNohistory/log: how many (default 50, at most 500); find: docs to list (default 8, at most 20).
queryNofind: the words to match against the workspace's docs and staff (default facts.message).
actionNorun (default) walks the flowchart; head reads its quick exits; find reads matching docs and staff; get reads it; edit/save/revert change it; history, log, brief and turns read or store the record.
formatNoget: graph (default) or a readable outline.
answersNorun: answers so far, by question id, e.g. { need: 'no', mid: 'no', who: 'delegate', tier: 3 }.
companyNoThe workspace (project id) when this account belongs to more than one.
versionNoget: an older version to read.
folderPathNoA local folder bound to a workspace; picks that workspace's flowchart.
base_versionNoedit/save/revert: the version you read (0 for a new flowchart). A newer save is answered stale_version.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations present the bar is lower, and the description still adds real behavioral context: default action, the ask/done status protocol and return shape (outcome, path, people, tools, brief), versioning semantics ('Every version is kept'), the stale_version conflict response tied to base_version, and the list of edit ops. The one gap is that save 'replaces the whole graph' while destructiveHint is false — the versioning/revert story justifies that, so I do not treat it as a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the default action, and most sentences do carry action-specific meaning. But 11 actions are compressed into a single unbroken paragraph of run-on clauses, and a bulleted per-action structure would have made the routing far easier to scan. Several clauses are also compressed to the point of ambiguity ('turns stores one ledger row per chat turn from a PC's hook').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 18 parameters, nested objects, 11 actions and no output schema, the description covers the necessary ground: what each action does, the default, the conflict behavior, and the shape of responses for the main read actions. It is close to complete, though a couple of actions (turns input contract, find's return ordering) are only thinly described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 partitioning the 18 parameters across the 11 actions (chat for run/log/brief, ops/why/base_version for edit/save/revert, facts/answers for run, rows for turns, query/limit for find). The one thing it does not add is the syntax of the answers/facts objects beyond the schema's own examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete resource (the workspace's decision flowchart / CrAInium flow) and enumerates all 11 actions with distinct verbs (walk, list, find, get, edit, save, revert, history, log, brief, store). It is clearly distinguishable from siblings such as connections_execute or connections_notes_search. However, the core identity is embedded in a dense wall of text rather than front-loaded as a single clear statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a strong when-to-use trigger ('when an AI chat starts a task and needs to know how to do it'), states that run is the default, and even implies exclusions ('head lists the flowchart's quick exits... so those need no call'). It does not compare itself to any sibling tool or state when this tool should be avoided in favor of another, so it stops 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.

connections_cross_workspace_accessMay I work across this account's workspaces?A
Read-onlyIdempotent
Inspect

Whether this account has told us you may work across ALL the workspaces it solely owns without asking first. CALL IT BEFORE you ask the member to confirm any cross-workspace act - creating a workspace, copying or moving a connected service into another one, switching this connection. If enabled is true, just do it and report what you did afterwards; do not ask. If it is false, ask them first, exactly as you would today. This setting can only be changed by the member, in Studio settings - the reply carries the link to send them. Workspaces SHARED with other people are never covered whatever the setting says - always ask before touching one of those, because copying a live credential in hands it to everyone it is shared with. Read-only, cheap, no side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description reinforces this with 'Read-only, cheap, no side effects.' The description adds valuable behavioral context beyond annotations: the setting can only be changed by the member in Studio settings, the reply carries a link to send them, and shared workspaces are never covered. It doesn't describe the exact response shape, but with no output schema and annotations covering safety, this is strong. Minor deduction for not detailing the response fields beyond 'enabled' and the link.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, when to call, conditional behavior, exception for shared workspaces, and a closing safety note. It is front-loaded with the core question and immediately gives the action rule. No fluff or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only check tool, the description is complete. It covers the decision logic, the exception case, the limitation (only member can change), and the follow-up action (send the link). The sibling list shows many action-oriented tools, and this description fully equips an agent to decide when to call this check versus just acting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is trivially complete (100% coverage). The description adds meaning by explaining what the response's `enabled` field means and how to act on it, which is more than the empty schema provides. Baseline for 0 params is 4, and the description earns it by interpreting the key output field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to check whether the account has granted permission to work across all solely-owned workspaces without asking. It uses a specific verb ('check'/'call it before') and resource ('cross-workspace access'), and distinguishes it from sibling tools by framing it as a pre-flight authorization check rather than an action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'CALL IT BEFORE you ask the member to confirm any cross-workspace act' and lists concrete examples (creating a workspace, copying/moving a connected service, switching connections). It also gives clear conditional behavior: if enabled, proceed without asking; if false, ask first. It even specifies an exclusion: shared workspaces are never covered, always ask. This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_deal_createPost a deal to DealsA
Destructive
Inspect

Use this when the member asks to post a deal, list a raise, sell a business or asset, or look for a partner, buyer or investment on Deals. Creates one deal. publish true (the default) makes it live immediately when title and full_description are both present; false saves a draft to finish later. A public listing is seen by everyone on the marketplace. Posting a LIVE listing needs a paid plan: on an account without one the reply says so instead of creating anything, and a draft can still be saved on any plan. Set dry_run true to see the exact call and outcome without creating anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesOne line naming the deal.
regionNoCity or region. Optional, and it is what makes a listing findable by region.
dry_runNotrue previews the exact call and its outcome without creating or changing anything.
publishNotrue (default) makes the deal live now if every required field is present. false saves it as a draft.
summaryNoOne or two sentences, shown on the marketplace feed.
categoryNoe.g. 'real-estate', 'saas', 'services'. Optional, and it is what makes a listing findable by category.
passwordNoRequired when visibility is 'private' - the access password for the deal's page.
visibilityNopublic (default) is listed on the marketplace. private needs `password` too and is reachable only by direct link.
deal_intentNoWhether the member is selling/raising ('selling') or looking for capital, a partner or a buyer ('looking').
capital_soughtNoOptional amount being raised or asked.
min_investmentNoOptional minimum investment or ticket size.
expected_returnsNoOptional, free text.
full_descriptionNoThe full pitch/details. Required to publish - with title, it is the whole publish requirement.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (not read-only, destructive, non-idempotent, open world). The description adds substantial behavior the annotations cannot carry: publish defaults to live and requires title plus full_description, drafts save on any plan, live listings need a paid plan and fail with an explanatory reply rather than creating anything, public listings are visible to everyone, and dry_run previews without side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger phrase and then the publish/plan/dry-run semantics in tightly packed sentences. It is slightly dense at six sentences, but each carries distinct constraints rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, non-idempotent mutation tool with no output schema, the description covers the essential gaps: default publish behavior, the live-listing paywall and its failure mode, draft fallback, visibility implications, and a dry_run escape hatch. An agent has what it needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a 3 is the baseline, but the description adds genuine cross-parameter meaning: publish only goes live when title and full_description are both present, and visibility/password/publish interact with the plan gating. It stops short of explaining region/category findability beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (creates one deal on Deals) and enumerates the member intents that trigger it (post a deal, list a raise, sell a business, find a partner/buyer/investor), which cleanly separates it from the read-only sibling connections_deals_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use triggers tied to user phrasing and explains the publish-true vs publish-false branch. It does not name a sibling alternative (e.g. connections_deals_list for browsing deals), so the routing guidance 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.

connections_deals_listDeals - browse deals or the member's own listingsA
Read-only
Inspect

Use this when the member asks about Deals, deals, listings, what is for sale, raises, or their own postings. Returns rows from the public marketplace feed (scope 'feed', the default - always active, public listings) or the member's own listings across every status, including drafts (scope 'mine'). Filter by category, region or a free-text query; the feed also ranks a query by relevance. Each row carries its title, summary, category, region, capital sought, status and a link. To post a new deal, use connections_deal_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax deals to return (1-60, default 20).
queryNoOptional free-text search over the title, summary and description.
scopeNofeed (default) = the public marketplace. mine = only the member's own listings, every status included.
detailNocompact (default) = the fields needed to answer most questions. full = every field the deal carries.
fieldsNoOptional explicit field projection over each row; wins over `detail` when given.
offsetNoPagination offset, default 0.
regionNoOptional exact-match region or city filter.
statusNoOptional status filter. The public feed only ever holds 'active' listings - drafts and closed deals only ever show under scope 'mine'.
categoryNoOptional exact-match category filter, e.g. 'real-estate', 'saas', 'services'.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe read (readOnlyHint true, destructiveHint false). The description adds real context beyond that: the feed is 'always active, public listings', 'mine' includes every status including drafts, and the feed ranks a query by relevance. It stops short of describing pagination behavior, but the safety profile is already covered structurally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger conditions, then scope semantics, then filters, then the alternative tool. Well-organized and mostly tight, though the row-field enumeration slightly overlaps with schema-documented outputs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 enumerates what each row carries (title, summary, category, region, capital sought, status, link) and covers both scopes plus the posting alternative. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 limit, query, scope, detail, fields, offset, region, status and category with defaults and enums. The description reaffirms scope semantics and filtering but adds little syntax the schema lacks, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list/browse) and resource (deals/listings), enumerates the trigger phrasings, and distinguishes the two scopes ('feed' vs 'mine'). It also names the sibling connections_deal_create as the posting alternative, so an agent can separate it from nearby tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('when the member asks about Deals, listings, what is for sale, raises, or their own postings') and routes the write case to connections_deal_create ('To post a new deal, use...'). No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_email_getLook up one sent email and what happened to itA
Read-only
Inspect

Use this when the member asks whether an email arrived, bounced, was opened or clicked. Returns one message this workspace sent (by the id connections_email_send or connections_emails_list gave) with its full event timeline - delivered, opened, clicked, bounced, complained.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe message id a send returned.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context beyond that: it returns one workspace-sent message with a full timeline of delivered, opened, clicked, bounced, and complained events, and requires an id from prior send/list calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the usage trigger, and contains no filler. Every sentence contributes either the when-to-use condition or the return behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple: one required parameter, no output schema, and read-only annotations. The description fully covers what the agent needs: when to call it, what identifier to pass, and what the response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single 'id' parameter fully, so the baseline is 3. The description adds extra value by clarifying that the id comes specifically from connections_email_send or connections_emails_list and that it refers to a message this workspace sent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('look up' / 'Returns') with a clear resource: one sent email and its event timeline. It distinguishes itself from send/list siblings by focusing on retrieval of a single message's delivery outcomes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when the member asks whether an email arrived, bounced, was opened or clicked,' giving a clear trigger condition. It does not explicitly contrast with alternatives, but it references that the id comes from connections_email_send or connections_emails_list, which is helpful routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_email_sendSend an email from the member's own domainA
Destructive
Inspect

Use this when the member asks to send or email someone from their own business domain (Connections Send). Sends ONE real message, now or at a scheduled time; it lands in the recipient's inbox and cannot be recalled, and dry_run:true returns the exact message without sending it. The sender must be on a domain this workspace has connected and verified. When nothing goes out, the reply is an error naming why: a suppressed recipient, an unverified domain, a spent daily ceiling, or no credits. To check on a sent message use connections_email_get; to see what went out use connections_emails_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoOptional carbon-copy recipients.
toYesOne recipient address, or several.
bccNoOptional blind-copy recipients.
fromYesThe sender, on a domain this workspace has connected and verified. May be 'Name <you@yours.com>'.
htmlNoThe HTML body. Not with `template`.
textNoThe plain-text body. Send text, html, or both. Not with `template`.
dry_runNotrue previews the exact call with nothing sent.
subjectNoThe subject line. Required unless `template` names a stored template that carries one.
audienceNoDoes this person already know the sender? warm = they know you or asked for this mail; cold = no prior relationship. Required for every recipient, no default: a send with no audience returns an error. One value covers the whole message; recipient_audience sets it per address and wins.
reply_toNoWhere replies should go, when that is not the sender.
templateNoThe name of a template stored in this workspace (e.g. 'order-receipt'), used INSTEAD of text/html. Its placeholder values go in `variables`.
variablesNoValues for the template's {{placeholders}}, as a flat object. Every placeholder needs one.
referencesNoThe thread's earlier Message-IDs, oldest first (the References header of the message being answered). Only read with in_reply_to, which is appended when missing.
in_reply_toNoWhen this answers an email someone sent (a vendor's support ticket, say): that message's Message-ID, e.g. '<abc@zendesk.com>'. The reply then joins their existing thread; without it, their system opens a new one.
scheduled_atNoOptional send time: an ISO instant WITH a timezone ('2026-10-01T09:00:00Z') or a relative time ('in 2 hours'). A time with no timezone returns an error asking for the zone. Omit to send now.
idempotency_keyNoYour own key for this message. Sending the same key twice returns the first result instead of sending again - set it whenever a retry is possible.
recipient_audienceNoThe audience per address, as a flat object: { 'person@yours.com': 'warm' }. Wins over audience for the addresses it names.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and openWorld=true, but the description goes well beyond them: messages 'cannot be recalled', they land in the recipient's inbox, the sender must be on a connected+verified domain, and failures return a named reason (suppressed recipient, unverified domain, spent daily ceiling, no credits). That is exactly the operational context an agent needs before firing an irreversible send.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: trigger first, then irreversibility plus the dry-run escape hatch, then failure modes, then sibling routing. Every clause carries information and nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter, nested-object, destructive tool with no output schema, the description covers the risky and ambiguous parts (irreversibility, verification prerequisite, error taxonomy, scheduling semantics are in the schema). The one gap is what a successful call returns — no output schema exists, so a phrase about the success payload (message id / status / scheduled confirmation) would close the loop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 description still adds meaning by explaining that dry_run:true returns the exact message without sending and by tying the `from` parameter to the verified-domain requirement. The idempotency_key note ('returns the first result instead of sending again') is consistent with a default idempotentHint of false rather than contradicting it, since idempotency only holds when the key is supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('send or email someone from their own business domain') with the product name (Connections Send) and scope ('ONE real message, now or at a scheduled time'). It clearly separates itself from the read-side siblings connections_email_get and connections_emails_list, which it names explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trigger condition is stated up front ('when the member asks to send or email someone'), and the routing to alternatives for other intents is explicit: connections_email_get to check status, connections_emails_list to see what went out. It also names dry_run:true as the non-sending preview path, so the agent knows when not to actually send.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_emails_listList emails the member's workspace sentA
Read-only
Inspect

Use this when the member asks what emails they sent, what went out recently, or which sends did not go out or are still scheduled. Newest first; the outcome filter separates delivered mail from mail that did not go out. Each row carries its id (for connections_email_get), sender, recipients, subject, outcome and when.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax messages to return (1-100, default 25).
beforeNoAn ISO instant - return messages older than this, for paging.
outcomeNoOptional filter. accepted = handed to the mail system; the others are sends that did not go out (or not yet).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given that readOnlyHint=true and destructiveHint=false already cover the safety profile, the description adds genuinely useful behavioral context: results are 'newest first,' the outcome filter separates delivered from non-delivered mail, and each row contains id, sender, recipients, subject, outcome, and timestamp. This is beyond what annotations provide and helps the agent set expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is two sentences with zero fluff. Use cases are front-loaded in the first sentence; ordering, filter semantics, and output fields are in the second. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three optional parameters and no output schema, the description is complete: it states scope (workspace emails), ordering, filtering semantics, and row contents. It does not explain pagination via `before` or the default `limit`, but those are documented in the input schema, so the description's job is largely done.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 semantic value by explaining the outcome filter's meaning and that accepted means handed to the mail system while the others did not go out (or are scheduled). This clarifies the enum values beyond the schema's own descriptions, lifting the score to 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with specific use cases ('what emails they sent, what went out recently, or which sends did not go out or are still scheduled') and clearly identifies the resource (emails in the member's workspace). It distinguishes itself from the sibling connections_email_get by noting that each row carries an id for that tool, so the agent can tell list from get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use scenarios and clarifies how the outcome filter should be interpreted ('accepted = handed to the mail system; the others are sends that did not go out'). It does not explicitly say 'use connections_email_get for a single email' or state when not to use this tool, but the pointer to the id for email_get is a useful routing hint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_event_createCreate a public hosted event (a page with RSVPs)A
Destructive
Inspect

Use this when the member asks to create, host, plan or set up a PUBLIC event that others attend ('host an event', 'set up a meetup', 'create an event page for X'). Creates ONE hosted event on Connections - its own public page with RSVPs and tickets - as a draft, in the workspace this connection is bound to; a draft is private until published. It does not put anything on the member's own calendar: for 'add it to my calendar', a meeting, an appointment or blocked-out time, use connections_calendar_add. Pass dry_run:true first to see exactly what would be created without creating anything, and show that to the member before writing for real. Every other setting - tickets, registration questions, capacity, approval, the cover, and later changes to any of these - goes through events_manage_hosted_events (create-event / update-event) with the event's id.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe event's name, in the member's words.
dry_runNotrue = return exactly what would be created and create nothing. Default false.
ends_atNoOptional end time: an ISO date/time string, or unix seconds.
locationNoOptional public location label: a city, venue name, or 'virtual'.
starts_atNoOptional start time: an ISO date/time string, or unix seconds.
descriptionNoOptional description of the event, shown on its public page.
guests_see_who_cameNoAfter the event, checked-in guests see who else came (the 'Who did you meet?' recap). Default true; false turns it off, e.g. for a large event. Each guest can still hide themselves.
guest_list_visibilityNoWho sees the guest list before the event: public (names), count_only (just the number), hidden. Default hidden.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only flag non-read-only, destructive, non-idempotent), the description discloses that the event is created as a private draft until published, that it has no side effect on the member's calendar, and prescribes a dry_run-first workflow. These are substantive behavioral facts an agent could not infer from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and the core behavior, and every clause (draft state, calendar exclusion, dry_run, config routing) carries distinct information. It is dense and slightly long, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers what gets created, its draft/privacy state, the alternative tool for scheduling, the dry_run safeguard, and where downstream edits live. Nothing needed 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.

Parameters4/5

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 real value for dry_run by instructing the agent to run it first and surface the result to the member before writing. It does not add syntax detail for the other seven params, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Creates ONE hosted event... its own public page with RSVPs and tickets') and immediately differentiates from the calendar sibling. An agent can distinguish this from connections_calendar_add and connections_events_list 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger phrasing ('host an event', 'set up a meetup'), an explicit exclusion ('for add it to my calendar, a meeting, an appointment or blocked-out time, use connections_calendar_add'), and routes all remaining configuration to events_manage_hosted_events. When-to-use, when-not, and the alternative are all named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_events_listThe member's events - what is coming up, what they are hostingA
Read-only
Inspect

Use this when the member asks about the events they host, what is coming up that they are hosting, or their upcoming hosted events (for what is on their own calendar, use connections_calendar_list). Returns the hosted events on Connections tied to this connection's workspace - unfinished ones by default, soonest first, each with its date, location and public link. If this workspace holds none of the member's events but their account has some in another workspace, the reply names that workspace and the exact page that reconnects it, instead of reporting a bare empty list.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax events to return (1-100, default 20).
queryNoOptional topic filter over an event's title and location ('demo day', 'houston'). Words are scored, not AND-ed.
detailNocompact (default) = the fields most questions need. full = every field this tool shapes, including registration windows and the description.
fieldsNoOptional: return only these field names on each event. Wins over `detail` when given.
offsetNoHow many matching events to skip first, for paging. Default 0.
upcomingNotrue (default) = only events that have not ended yet, soonest first. false = every event, most recent first.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint and destructiveHint, so the description's job is to add behavioral context. It does: it explains the default filtering (unfinished events, soonest first), the fields returned (date, location, public link), and the cross-workspace fallback (names the other workspace and reconnection page). This goes beyond the structured annotations to give the agent a complete behavioral model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph but is information-dense. It front-loads the usage guidance and provides the return format and edge-case behavior without fluff. While not broken into sections, it is still efficient and each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters but no output schema, the description adequately covers the tool's context: it explains the main use case, the alternative, the default sorting/filtering, the returned fields, and the cross-workspace edge case. An agent has enough information to invoke the tool correctly in the intended scenario.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description reinforces the default behavior (unfinished, soonest first) which maps to the 'upcoming' parameter, but it does not add syntax details or examples beyond the schema. Per calibration, a baseline of 3 is appropriate when the schema carries the full parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it lists events the member hosts (upcoming, hosted), and directly distinguishes it from connections_calendar_list (their own calendar). It also specifies the returned data (date, location, public link). This is a specific verb-resource pairing with clear sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description begins with an explicit when-to-use directive ('Use this when the member asks about the events they host...') and provides a direct alternative ('for what is on their own calendar, use connections_calendar_list'). It also explains the fallback behavior when the workspace holds none of the member's events, giving clear guidance on expected behavior in edge cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_executeExecute a catalog endpoint or workflowA
Destructive
Inspect

Run ONE endpoint of the Connections operator catalog by endpoint_id (or service+tool_name) with its params. The catalog is Connections' own first-party OpenAPI (https://studio.connectionsapi.com/v1/openapi.json, per-plane specs at https://studio.connectionsapi.com/connect); each row carries its HTTP method and host. Money-moving operations on a payment provider - refunds, payouts, balance transfers, charges, payment-intent captures, on Pay or on a connected provider such as Stripe - return an error that links to the payment dashboard, where a person performs them; that provider's other writes, such as creating a product or a customer, still run here. Alternatively run a multi-step WORKFLOW (pass workflow: a saved name or an inline {steps:[…]} definition; steps reference {{params.x}} and {{steps..}} from prior outputs). First-party endpoints run as the signed-in member; a connected third-party service is called with the credential stored for it in the company's vault, attached on the server. Target a specific connected account with instance (an instanceName from connections_accounts, or a 12-digit AWS account id). FAST PATH - executor-native ops (service 'aws'): rds_query {db:, sql} queries a plane DB by NAME (no ARNs; its catalog result lists the accepted names); aws_sweep {tool_name, params?, instances?} runs one op across every connected account and reports requested/eligible/swept/skipped/complete; probe {targets:[{url, expectStatus?, bodyContains?}]} checks deployed endpoints; logs_tail {functionName, minutes?, filter?} returns a Lambda's recent log lines; qr_code {value, format?, sizePx?} turns any link or text into a scannable QR code (SVG markup and/or a PNG data URL). AWS response shaping params (any aws op): outputFilter (JMESPath subset, e.g. 'Functions[].{name:FunctionName,mod:LastModified}') filters server-side before returning and reports outputFilterMatched:false with a bounded raw snippet when the path misses; paginateAll:true follows NextToken/Marker server-side and merges (cap 20 pages/5MB); includeEnv:true adds a Lambda's non-sensitive environment values to the reply (omitted by default).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNoPath/query/body values per the endpoint's parameters schema (or the workflow inputs).
projectNoWhich COMPANY/workspace a Studio console call acts on (Studio's ?project=) - a company id, project id or ref; omit for your default. Accepted here or inside `params`. A ref this account cannot reach returns 404 project_not_found and nothing is created.
serviceNoWith `tool_name`, the first-party plane or connected service to run against (e.g. "aws", "studio", "notes", "pay"). Use this pair when you know the op by name; use `endpoint_id` when you have one from connections_search_catalog.
instanceNoWhich connected account/instance of the service to use (default 'default').
workflowNoA saved workflow name, or an inline { steps: [{id, service, tool, params}], output } to chain multiple ops in one call. Each call has a ~24s time budget (the HTTP endpoint's 29s hard ceiling) - practically ~20-30 steps at typical per-step latency, fewer for a heavier op. A batch that would run past it STOPS STARTING new steps (never mid-step) and answers 200 with {ok:false, partial:true, stopped_reason:'time_budget', steps, stoppedAtIndex, stoppedAtStep, trace, output} carrying every step that DID run - never a bare 500. Resume by re-sending only the remaining steps (from stoppedAtIndex on) as a fresh inline workflow; do not resend the whole batch, or an already-run non-idempotent step runs twice.
tool_nameNoWith `service`, the op to run (e.g. "rds_query"). On its OWN - no endpoint_id and no service - it reaches a tool on this server directly, which is how a client whose tool list is out of date still calls a new tool.
endpoint_idNoThe id from a search result.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give a coarse destructive/openWorld profile; the description adds what actually happens: third-party calls use vault credentials attached server-side, first-party endpoints run as the signed-in member, the ~24s workflow budget stops before starting a new step and returns ok:false/partial:true with a resume instruction, and outputFilter misses report outputFilterMatched:false with a bounded snippet. This is exactly the behavioral 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the key restrictions are front-loaded, but the body is a single dense paragraph that packs catalog execution, workflows, instance targeting, five fast-path ops and three AWS shaping flags together. Much is necessary for this tool's breadth, yet headings or bullets would make it far more scannable, and several clauses are redundant with schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool this broad with 7 params, a 100%-covered nested schema and no output schema, the description covers the modes (endpoint, workflow, fast-path ops), their constraints, credential behavior and partial-failure semantics. Nothing an agent needs to invoke correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaning beyond the schema: it explains the endpoint_id-vs-service+tool_name selection logic and documents workflow step reference syntax ({{params.x}}, {{steps.<id>.<path>}}). Some content (outputFilter JMESPath example, paginateAll caps, includeEnv) largely restates schema descriptions, keeping it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Run ONE endpoint of the Connections operator catalog by endpoint_id (or service+tool_name) with its params.' It distinguishes itself from siblings by naming connections_search_catalog (source of endpoint_id) and connections_accounts (source of instance), so an agent can tell it apart 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: use endpoint_id when you have one from a search, service+tool_name when you know the op by name, and the alternative workflow path for multi-step chains. It also states a hard when-not: money-moving payment-provider operations (refunds, payouts, balance transfers, charges, captures) return an error pointing to the dashboard, while other writes still run here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_explore_connectorsExplore connectable services (the connector registry)A
Read-only
Inspect

Use this to see what services Connections can connect - the whole connector registry (Stripe, GitHub, Cloudflare, AWS, Discord, ...) - and which of them THIS workspace already has. Search it like a package registry: pass a query to narrow by name or purpose, or leave it blank to list everything. Each connector returns its lanes (oauth / key / provision / broker), whether it is connected here, its public page, and a connect_url. A connected connector's endpoints are searchable with connections_search_catalog; an unconnected one's are NOT, by design - so when a task needs a service that is missing, hand the human its connect_url. If one of the human's OTHER workspaces already holds it, the result carries copyable_from with a copy_url - hand them that instead, to open while they are in the workspace that should receive it; the console copies the connection with one click. When connections_cross_workspace_access says it is ON and both workspaces are solely the member's, copy it yourself with connections_copy_connection instead of handing over the link. You cannot connect anything yourself and must never ask a human to paste a credential to you.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax connectors to return (1–50, default 50).
queryNoOptional name or purpose to narrow by (e.g. 'payments', 'github'). Blank → the whole registry.
connectedNoOptional filter: true → only connectors this workspace has connected; false → only ones it could connect.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/non-destructive, but the description adds substantial behavioral context beyond them: connected endpoints are searchable and unconnected ones are not 'by design', the copy-it-yourself vs hand-over-link decision depends on cross_workspace_access state, and the hard constraint that the agent cannot connect anything and must never ask a human to paste credentials.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then the search behavior, then the routing rules. It is long and dense but nearly every sentence carries distinct routing or safety value. Slightly heavy for a summary line, but no clearly wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fills the gap by describing the return payload: lanes (oauth/key/provision/broker), connected flag, public page, connect_url, and copyable_from with copy_url. Combined with full parameter coverage and annotation safety hints, an agent has everything needed to call and act on results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (limit, query, connected) are already documented in the schema. The description adds only marginal framing ('narrow by name or purpose', 'leave it blank to list everything'), which largely restates the query parameter's own schema text. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('see what services Connections can connect - the whole connector registry') with concrete examples, and explicitly contrasts with the sibling connections_search_catalog by noting that only connected connectors' endpoints are searchable there. An agent can distinguish this registry-listing tool from the catalog search 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use routing: pass a query to narrow vs blank to list all, use connections_search_catalog for a connected connector's endpoints, hand over connect_url when a needed service is missing, copyable_from/copy_url for other workspaces, and connections_copy_connection when cross_workspace_access is ON. It even states the boundary condition 'both workspaces are solely the member's'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_helpHow do I... - find the right Connections tool for a taskA
Read-only
Inspect

Use this BEFORE guessing which Connections tool to call, or when unsure what Connections can do at all. Pass intent in the member's own words ('create an event', 'my todos', 'post a deal', 'remember this', 'who do i know') and get back the ONE tool to call: its required fields, optional fields, a runnable example, and whether it needs confirmation before calling. Add domain to disambiguate when the intent alone could mean more than one thing. With no intent, or one that matches nothing, returns the full capability map instead: every domain Connections covers, its canonical read tool and write tool, one line each - the answer to 'what can you do'.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoAlias for `intent`.
queryNoAlias for `intent`.
domainNoOptional: narrow matching to one domain when intent alone is ambiguous (e.g. 'add' could be a todo or a contact).
intentNoWhat the member wants to do, in plain words (e.g. 'create an event', 'my todos', 'remember this'). Omit for the full capability map. `question`, `query` and `q` are accepted aliases; any OTHER argument name is reported back in `ignored_params` rather than silently dropped.
questionNoAlias for `intent` - this tool's title invites it, so it is accepted rather than discarded.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds genuine context beyond that: the exact shape of the response (one tool, fields, example, confirmation flag), the capability-map fallback, and that unknown argument names are surfaced in `ignored_params` rather than dropped. It does not state rate limits or latency, but none are implied for a local help router.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the triggering condition, then the primary output, then the disambiguation parameter, then the no-match fallback. Every clause carries information; nothing is padding or restated name/title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates fully by enumerating what comes back (single tool, required fields, optional fields, runnable example, confirmation flag) and what happens when nothing matches. For a zero-required-param router, an agent has everything needed to invoke and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 description reiterates the alias set and the domain disambiguation rationale that the schema already documents ('add could be a todo or a contact'), and the intent examples are duplicated in the schema. It adds little semantic payload beyond structured fields, though it usefully frames intent as 'the member's own words'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific function: routing an intent to the single correct Connections tool and returning its required fields, optional fields, a runnable example, and confirmation requirement. It also defines the secondary behavior (full capability map when intent is absent or matches nothing). This is unmistakably distinct from every connections_* sibling, which each perform concrete actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it BEFORE guessing which Connections tool to call, or when unsure what Connections can do at all, and explains that `domain` should be added when intent alone is ambiguous. Implicitly defines when not to use it (when the target tool is already known), and the fallback condition is spelled out precisely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_list_companiesList the companies available to this accountA
Read-only
Inspect

The companies this signed-in account can bind a registration to: companyId, display name, and owner (so duplicate names like several 'Default's are distinguishable). Use together with connections_claim_company when connections_whoami reports company:null.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only (readOnlyHint: true). The description adds the behavioral context that the companies are those 'this signed-in account can bind a registration to' and explains the owner field for distinguishing duplicate names. No side effects are mentioned, but they are not needed given the read-only annotation and the tool's listing nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence. It front-loads the action and resource, then provides necessary details (output fields, duplicate handling) and a usage hint, with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description lists the returned fields (companyId, display name, owner) and explains their purpose. It also places the tool in a workflow with claim_company and whoami, making it clear when and why to use it. This provides complete context for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is effectively 100%. Per the rubric, high schema coverage yields a baseline of 3; the description does not need to elaborate on inputs since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('companies'), and the scope ('available to this account'). It also explains the output fields and references sibling tools (claim_company, whoami) for context, making its purpose unambiguous and distinct from other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides a usage scenario: 'Use together with connections_claim_company when connections_whoami reports company:null.' This gives clear when-to-use guidance and indicates the expected workflow, leaving no ambiguity about when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_mcp_serversThe member's registered MCP serversA
DestructiveIdempotent
Inspect

Every MCP server this account has registered - each assistant, machine or connector - and which workspace it runs in. CALL IT WITH action:'list' whenever the member asks what is connected, why an assistant is in the wrong place, or why a server 'is not doing anything': an UNASSIGNED server is bound to no workspace, so its tools answer no_company_assigned and it looks broken. The reply leads with how many are unassigned. An unassigned server is not automatically one to assign - read the name first. A real project whose workspace exists gets action:'assign' with server (an id from the list) and workspace (a companyId or the exact name). A dead end - a scratch folder, a machine name, a browser version, a throwaway agent codename last seen weeks ago - gets action:'retire', which disables the registration exactly as switching it off in Studio does and drops it out of the unassigned count. Binding a dead row to a workspace invents a fact and cleans nothing. Both assign and retire take an ARRAY in server too, so a whole backlog is one call. 'restore' undoes a retire; nothing here ever deletes. Retiring a server seen in the last 10 minutes returns an error unless force:true, because an agent is probably running on it - pass force:true only if you mean to cut that session off. Every write needs the member's bypass-permissions setting to be ON; when it is off the reply is studio_only with the link, so say that rather than retrying. Listing always works.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoFor retire: act even on a server seen in the last 10 minutes. Default false.
actionNo'list' (default), 'assign' a real project to a workspace, 'retire' a dead registration, or 'restore' a retired one.
serverNoThe server id from the list, or an array of ids to act on in one call.
workspaceNoFor assign: companyId (preferred) or the exact workspace name.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it destructive and idempotent, but the description adds substantial context beyond them: retire disables the registration, nothing ever deletes, restore undoes retire, the 10-minute recent-use guard with force:true, and the bypass-permissions requirement producing a studio_only reply. These are non-obvious behaviors an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long, but front-loaded with the action framing and each clause carries distinct operational content (list semantics, assign criteria, retire criteria, guard rail, auth failure mode). Slightly dense to the point of being a wall of text, but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, yet the description describes the reply shape ('leads with how many are unassigned') and the two error/refusal modes (force guard, studio_only), plus confirms listing always works. Complete for a 4-param stateful admin tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: `server` accepts an ARRAY for backlog operations, `workspace` takes a companyId or exact name, and force only applies to retire on recently-seen servers. Marginal but genuine added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('every MCP server this account has registered... and which workspace it runs in') and enumerates the action surface (list/assign/retire/restore). Clearly distinguishable from sibling tools like connections_accounts or connections_list_companies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggers ('CALL IT WITH action:list whenever the member asks what is connected, why an assistant is in the wrong place, or why a server is not doing anything') and explicit selection rules between assign and retire, including the 'an unassigned server is not automatically one to assign' exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_note_saveSave a note for the memberA
Destructive
Inspect

Use this when the member asks to save, write down, jot or note something ('save this', 'make a note of that', 'write this down'). Creates ONE new note on the member's Connections list: in the workspace this connection is bound to when there is one, otherwise in their personal space - the reply names which, so say it back. Keep the title to one line naming the thing; put the rest of the content in body. Not for a task or reminder - use connections_todo_add for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoOptional: the note's content.
scopeNoWhere it goes. Default: the bound workspace when this connection has one, else personal.
titleYesOne line naming the note, in the member's words (under ~100 characters).
labelsNoOptional labels/folders to file it under.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, non-idempotent, destructive, closed-world, so the safety profile is largely covered. The description still adds real behavior: exactly ONE note is created, the destination is resolved to the bound workspace or personal space, and the reply names which (so the agent should echo it back). It does not explain why the call is flagged destructive or what happens to an existing note with a similar title, leaving a modest gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger condition, then the creation semantics, then destination resolution, then the sibling exclusion - a sensible ordering. Slightly dense but nearly every clause carries instruction value; the 'so say it back' aside is short and actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with no output schema, the description covers the trigger, the destination resolution, and the follow-up behavior (reply names the space), which is most of what an agent needs. The only unaddressed item is the destructiveHint=true flag, which the description neither explains nor contradicts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so the baseline is 3. The description adds styling guidance beyond the schema by telling the agent to keep the title to one line naming the thing and to put the remaining content in `body`, plus it restates the scope default resolution in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Creates ONE new note on the member's Connections list') and immediately contrasts with the sibling it is not: connections_todo_add for tasks and reminders. An agent can distinguish it from connections_notes_search and connections_todo_add 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger phrases the member might use ('save this', 'make a note of that', 'write this down') and an explicit exclusion with a named alternative ('Not for a task or reminder - use connections_todo_add'). This is about as unambiguous as routing guidance gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_pingPing - highlight THIS registration on the MCP Servers pageA
Idempotent
Inspect

Make this exact registration light up on the owner's MCP Servers page (studio.connections.icu/dev/mcp-servers) until they click OK. Use it for debugging 'which registration am I actually riding?' - the human triggers it, then sees which row/machine highlights. Optional note is shown with the highlight.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional short message shown with the highlight.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, openWorldHint=false, idempotentHint=true, destructiveHint=false; the description adds the persistence constraint ('until they click OK') and the human-in-the-loop UX. It does not state whether the highlight blocks or errors if the owner is offline, but that gap is minor given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it does, when to use it, and the one optional input. No filler; the target URL grounds the action immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, human-triggered debug tool with annotations covering the safety profile and no output schema, the description tells the agent everything needed to call it correctly and to know what the human will see.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and there is only one optional parameter; the description repeats that the note is shown with the highlight but adds no format or length constraints. Baseline 3 is appropriate because the schema already carries the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (highlight this exact registration on the MCP Servers page), the target (owner's page at a concrete URL), and the trigger (human clicks OK). No sibling in the list does anything similar, and the debugging intent ('which registration am I actually riding?') makes the tool's distinct role unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context (debugging which registration is active, human-triggered, user sees a highlight) but does not state when NOT to use it or name an alternative. The 'human triggers it' framing is useful, but a caveat like 'for live demos, prefer connections_pulse' is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_pulsePulse - who you are, what is live, what to do nextA
Read-only
Inspect

The session opener; it carries connections_whoami's answer inside it. One read returns: this connection's identity and company binding; Deals's live public deals (the count, how many were released this week, the newest with links) and the member's own deals; the member's contact and hosted-event counts; next_actions ranked for THIS member (post a deal, publish a draft, import contacts, host an event, connect other assistants), each with the exact connections_execute call; and voice, a one-sentence summary of the live state with its context. Read-only, unmetered, no side effects. A section that could not be read answers with its own {error, detail} rather than silently disappearing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/no-destructive/no-openWorld, but the description adds real behavioral context beyond them: 'unmetered, no side effects,' and the failure contract that any unreadable section returns its own {error, detail} instead of silently vanishing. That error-shape disclosure is exactly the kind of detail 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the tool's role, then a single dense sentence enumerating the return contents. The long parenthetical list is information-dense and each item is useful, though the enumeration is heavy enough to slightly dilute scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 full burden of describing return values, and it does so thoroughly: identity, deal counts and newest-with-links, personal counts, ranked next_actions with their connections_execute calls, and the voice summary. An agent knows precisely what it will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty, so there is nothing to disambiguate; baseline 4 applies. No param meaning is required or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific role ('the session opener') and enumerates exactly what one read returns: identity/company binding, live deals with counts, contact and event counts, ranked next_actions, and a voice summary. It also differentiates itself from connections_whoami by noting it carries that answer inside it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Calling it 'the session opener' plus the note that it subsumes connections_whoami gives clear implied usage at session start. It stops short of an explicit when-not-to-use rule or naming alternatives for specific sub-reads, so it isn't a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_request_company_changeRequest a company change (owner approves in Studio)A
Destructive
Inspect

Ask the human to move THIS registration to a different company. You cannot change your own binding (Studio-only), but when you suspect you're on the wrong company (e.g. a connected service the human expects is missing), request the right one - it highlights on the MCP Servers page for them to approve or dismiss. Pass company = a companyId/projectId from connections_list_companies (or an exact company name), and an optional note explaining why.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional short reason shown to the owner (e.g. 'Cloudflare isn't connected in the current company').
companyYescompanyId/projectId (preferred) or exact company name to move to.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false; the description is consistent with these and adds genuinely useful context beyond them: the tool does not mutate state directly but creates a pending, visible request the owner can approve or dismiss. It also discloses a hard limitation (cannot change its own binding). This human-in-the-loop, async behavior is exactly the kind of trait an agent needs to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler; the core instruction is front-loaded, and the middle sentence efficiently packs the constraint, trigger scenario, and workflow outcome. The embedded example ('Cloudflare isn't connected...') adds concrete meaning rather than bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description covers what an agent needs to call the tool correctly: what to pass, where to source it, and what will happen as a result. The gaps are minor — no statement of what the tool returns (confirmation vs. error on an invalid company) and no mention of whether multiple pending requests are possible.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 description adds real value on top by telling the agent where valid values come from (connections_list_companies) and specifying value precedence (companyId/projectId preferred over exact name), which the schema descriptions do not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Ask the human to move THIS registration to a different company'), names the resource, and emphasizes that it is a request needing owner approval rather than a direct change. The title reinforces this approval-bound workflow, distinguishing it clearly from siblings like connections_claim_company or any direct-mutation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit trigger condition ('when you suspect you're on the wrong company... request the right one') with a concrete example (missing connected service), and explains the downstream effect (highlight on MCP Servers page for approval/dismissal). It discloses that the binding cannot be changed directly (Studio-only), implying the manual alternative, but it never explicitly names an alternative tool to prefer or states when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_script_deleteScript Vault: delete a stored scriptA
Destructive
Inspect

Delete one of this company's stored scripts by tool_name. Always allowed for your own company's rows - including tier-locked ones (deleting is how a downgraded account trims its vault).

ParametersJSON Schema
NameRequiredDescriptionDefault
tool_nameYesThe script to delete.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the destructive nature of the operation beyond the destructiveHint annotation by mentioning 'tier-locked' and 'Always allowed.' It does not mention irreversibility or side effects, but the word 'delete' and the annotation provide adequate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no redundant wording. It front-loads the action and target, and the additional permission context is compact and relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with no output schema, the description provides necessary context about ownership and tier-locked restrictions. It does not specify return behavior or error cases, but those are commonly implicit for deletion tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, tool_name, is described as 'The script to delete,' which is accurate but minimal. Since the schema already fully covers this single parameter, the description adds limited extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete'), the target ('stored scripts'), and the selection mechanism ('by tool_name'). It also distinguishes this from sibling tools like script_get and script_save by focusing on deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when deletion is allowed ('Always allowed for your own company's rows') and includes a practical example ('deleting is how a downgraded account trims its vault'). It does not explicitly describe when to avoid using it, but the scope limitation is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_script_getScript Vault: fetch a script (or list all)A
Read-only
Inspect

With tool_name: fetch ONE stored script's code + metadata (the local script_run calls this automatically - call it directly only to inspect or port code). WITHOUT tool_name: list this company's stored scripts (metadata + size + locked status, never code), paged 200 at a time - the response's total_count/next_offset say whether the list continues; pass offset to walk it. Access is tier-gated by size: a script larger than your current plan's ceiling returns script_locked_by_tier (the script is kept, not deleted - upgrade restores access).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoList mode: page size, 1-200 (default 200).
offsetNoList mode: row offset for paging (default 0). The response's next_offset is the value to pass for the following page, or null at the end.
tool_nameNoThe script to fetch. Omit to list stored scripts.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the read-only safety profile, and the description adds substantial context beyond them: tier-gated access, the script_locked_by_tier error and that the script is kept not deleted, and that list mode never returns code. That is exactly the behavioral detail annotations don't provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph, front-loaded with the two modes and the automatic-call caveat before paging and tier details. Efficient, though the pagination and error clauses push it toward the longer end for a three-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, yet the description discloses what each mode returns (code+metadata vs metadata+size+locked status, never code) and how paging works via total_count/next_offset. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents limit, offset/next_offset, and tool_name's omit-to-list semantics, so the description largely restates them. It adds a mode-level framing (tool_name as the mode switch) but no new syntax or format detail. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource and cleanly splits two modes: 'fetch ONE stored script's code + metadata' vs 'list this company's stored scripts'. An agent can distinguish this from siblings like connections_script_save/delete without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('call it directly only to inspect or port code') plus context that script_run calls it automatically, and the mode switch (tool_name present/absent) is spelled out. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_script_restoreScript Vault: restore a deleted scriptA
Idempotent
Inspect

Put a deleted Script Vault script back from Trash - code, parameters and description exactly as they were, under the same tool_name. A delete keeps it for your plan's Trash window. WITHOUT tool_name: list this company's deleted scripts still kept. Answers already_exists when a script of that name was saved since (delete or rename that one first), and the upgrade door when the script is past your plan's Trash window.

ParametersJSON Schema
NameRequiredDescriptionDefault
script_idNoRestore by the script_id the list returned, when one name was deleted more than once.
tool_nameNoThe deleted script to restore. Omit to list deleted scripts.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds genuinely useful context beyond them: restoration is exact and identity-preserving, deletion is retained for a plan-specific Trash window, and specific error outcomes are enumerated. It does not describe permissions or the shape of the returned list, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, densely packed with no filler, and the primary restore action is front-loaded before the listing mode and error conditions. The final sentence is somewhat compressed and run-on, which slightly hurts readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by explaining what the no-argument mode returns (the company's deleted scripts) and what error answers mean (already_exists, upgrade door). For a two-param, zero-required tool this is close to complete, though permissions and list output shape remain unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 in the schema. The description reinforces the omit-tool_name listing behavior and adds the rationale that script_id disambiguates repeat deletions of the same name, but adds little syntax or format detail beyond structured data – baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (restore) and resource (deleted Script Vault script), states exactly what is recovered (code, parameters, description, same tool_name), and adds a distinct second mode (list deleted scripts when tool_name is omitted). This clearly separates it from the sibling set (script_delete, script_save, script_get).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to omit tool_name (to list retained deleted scripts) versus supplying it to restore, and flags the two failure branches (already_exists, past the plan's Trash window). It stops short of naming sibling alternatives for those situations, which keeps it just under a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_script_saveScript Vault: save a reusable instrumentA
Destructive
Inspect

Save a small script instrument (enumerator / tracer / parity-differ) into this company's Script Vault, so any future session finds it via connections_search_catalog and runs it LOCALLY through the local MCP's script_run. Upserts per tool_name and stores language (javascript/Node by default; bun for Bun APIs or TypeScript imports). Scripts NEVER execute on this server - they are stored and served only. Size is tier-gated by the Pass plan (free 16KB, Pro 64KB, Business and Business Plus 1MB): an over-limit save is rejected with upgrade info, and after a downgrade an over-limit stored script stays saved but LOCKS until upgrade. Write description for semantic search: what the instrument finds/does and when to reach for it - an undiscoverable script is a wasted one.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe full script text. Runs locally; args arrive via CONNECTIONS_SCRIPT_ARGS (JSON env).
nameNoHuman display name (defaults to tool_name).
tagsNoOptional tags (e.g. ['sweep','i18n']).
languageNoDefault 'javascript' (run with node).
tool_nameYesStable slug, [a-z0-9_]+ (e.g. i18n_freeze_tracer). Same name = update in place.
parametersNoOptional docs of the args the script accepts ({ args: [{name, description}] }).
descriptionYesWhat it enumerates/answers, its parameters, and when to reach for it - this text IS the search index.
destructiveNotrue when running it mutates things (default false - instruments should enumerate, not mutate).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description thoroughly discloses behavioral traits: it upserts per tool_name, never executes scripts on the server, enforces size tier limits (with rejection and locking behavior), and explains that the description is the search index. It complements the annotations (destructiveHint=true) by detailing the mutation semantics and constraints, adding significant value beyond what annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but each sentence carries functional information: purpose, upsert, language, execution model, size limits, and description guidance. It is front-loaded with the primary action and progressively adds operational details. No redundancy; the length is justified by the tool's complexity and the need to communicate multiple constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters, nested objects, and no output schema, the description covers purpose, usage, behavioral quirks (size tiers, locking), parameter roles, and integration with sibling tools. It addresses everything an agent needs to correctly invoke and understand the save action, including edge cases like downgrades and over-limit saves.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaning beyond the schema: it explains that tool_name is a stable slug used for upsert, that description is the search index, that language defaults to javascript/node with bun as an option, and that destructive indicates whether the script mutates things. It also connects parameters to the execution environment (CONNECTIONS_SCRIPT_ARGS).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb (save/upsert) and resource (script instrument into Script Vault), and it distinguishes itself from siblings like connections_script_delete, connections_script_get, and connections_search_catalog by explaining the full lifecycle (save → discover via search → run via script_run). The purpose is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when to use this tool (to persist a reusable script for future sessions) and provides context on how it integrates with search_catalog and script_run. It also gives guidance on writing descriptions for discoverability. It doesn't explicitly state when not to use it, but the naming and purpose clearly separate it from delete/get tools, and the upsert semantics are explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_search_catalogSearch the Connections operator catalogA
Read-only
Inspect

Use this when the member asks for anything Connections holds that has no dedicated tool in this roster - their contacts and people, notes and memories, events and guest lists, deals, bookings, email, orders and payments, connected services - or when you need an endpoint by name. Searches every API endpoint the member can call in the Connections operator catalog (our own first-party OpenAPI: https://studio.connectionsapi.com/v1/openapi.json, per-plane specs at https://studio.connectionsapi.com/connect) plus your connected third-party services. Returns runnable recipes; pass a result's endpoint_id to connections_execute. A query that IS an endpoint's or a Script Vault instrument's exact tool_name returns that row first, ahead of every fuzzy hit, so naming a row you already know is the cheapest possible query. Blank/omitted query → a BROWSE VIEW: service names + endpoint counts across this whole catalog (too large - tens of thousands of rows - to ever list individually); pass service alongside a blank query to instead list that ONE service's actual endpoint rows (small enough to list directly).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (1–25, default 8).
queryNoPlain-English description of what you want to do. Blank/omitted → the browse view (service + endpoint counts) instead of a search.
serviceNoOptional: restrict to one service (e.g. 'connections', 'aws'). With a blank query, lists that service's endpoints directly.
verboseNoDefault false: each hit lists param NAMES only (compact recipe). true: return each hit's FULL parameters schema (types/locations/required) - use only when you need the exact shape to build a call.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish it is a safe read-only, open-world search, so the bar is lower, and the description goes well beyond them: it discloses that results are runnable recipes, that exact tool_name matches rank first over fuzzy hits, that the catalog is tens of thousands of rows and cannot be listed wholesale, and that blank queries yield a browse view. This is unusually rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Usage guidance is front-loaded, but the body is two very long, em-dash-heavy sentences with a bloated domain enumeration ('contacts and people, notes and memories, events and guest lists...'). The information is relevant, but the wall-of-text structure hurts scanability and could be tightened considerably.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 return-format burden and does so: recipes, endpoint_id handoff to connections_execute, verbose-based shape control, and the browse-vs-list distinction. An agent has everything needed to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters and baseline is 3. The description adds genuinely new semantics beyond the schema: the blank-query browse behavior, the interaction of `service` with a blank query to list one service's rows, and the precedence rules for exact tool_name matches.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (the Connections operator catalog of API endpoints) and enumerates the covered domains: contacts, notes, events, deals, bookings, email, orders, payments, connected services. It also distinguishes itself from the dedicated siblings in the roster by scoping to 'anything Connections holds that has no dedicated tool in this roster.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use guidance: reach for it when no dedicated roster tool covers the request, or when you need an endpoint by name, and it routes forward to connections_execute via endpoint_id. It does not name specific alternative tools (e.g. connections_notes_search, connections_contacts_list) explicitly, only referring to the roster generically, so the exclusion is implied rather than enumerated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_signoutSign this connection out of ConnectionsA
DestructiveIdempotent
Inspect

Use this ONLY when the member says they are signed in as the WRONG Connections account and want to sign out or switch account. Ends this connection's Connections session for good: every tool here stops working until they reconnect, and reconnecting is a few clicks in their assistant's own settings. Set confirm only once the member has confirmed in plain words, and if they only want a different WORKSPACE on the same account use connections_switch_workspace instead - that needs no sign-out at all. The reply carries the exact reconnect steps for their assistant; read them back verbatim, because this is the last answer this connection can give.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be true. Set it only after the member has confirmed in words that they want to sign out.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description goes further and says exactly what is destroyed: the session ends for good, every tool stops working until reconnect, and reconnect is a few clicks in the assistant's own settings. It also discloses that the reply itself carries the reconnect steps, which must be read back verbatim.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The usage condition is front-loaded in the first sentence and every subsequent sentence adds routing, irreversibility, or reply-handling information. Dense and slightly long for a one-parameter tool, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description compensates by explaining that the reply carries reconnect steps and must be relayed verbatim. For a destructive terminal operation, the agent has everything needed to call it correctly and handle the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single param already documents both 'must be true' and the confirmation precondition, so the description mostly restates it. It adds only mild reinforcement of the confirmation gate rather than new syntax or semantics; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (sign this connection out of Connections) and immediately distinguishes it from the nearest sibling by naming connections_switch_workspace as the wrong tool for a mere workspace change. An agent can pick between the two 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger (member is signed in as the WRONG account and wants to sign out/switch), explicit exclusion (if they only want a different WORKSPACE, use connections_switch_workspace instead), and an explicit precondition on confirm. When/when-not/alternative are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_switch_workspaceSwitch which workspace this connection usesA
Idempotent
Inspect

Use this the moment the member says they are in the wrong workspace - 'wrong workspace', 'wrong company', 'switch me to ', or when they confirm a switch you offered because data they expected is missing. CALL IT STRAIGHT AWAY WITH NO workspace when they did not name one: if only one other workspace is reachable there is nothing to choose, so it just moves and tells you where it landed - do NOT call connections_list_companies first, and do not ask a question the member has already answered. If several are reachable the reply carries the choices; read those names out, let them pick, and call again with workspace. Moves THIS connection only, effective on the next call, and copies or deletes nothing. Pass remember:true when they want every FUTURE assistant they connect to start there too. Say the reply's workspace name back to them.

ParametersJSON Schema
NameRequiredDescriptionDefault
rememberNoAlso make this the workspace that any NEW assistant connection starts in. Default false - ask the member before setting it.
workspaceNocompanyId (preferred) or the exact workspace name. OMIT when the member did not name one - with a single alternative the tool resolves it, with several it hands back the choices to put to them.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly=false, idempotent=true, destructive=false), and the description goes well beyond them: it discloses that only THIS connection moves, that the change is effective on the next call, that nothing is copied or deleted, and that remember:true affects future assistant connections. These are real behavioral traits an agent must know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger condition and stays on task, but the dense run-on sentences and shouted emphasis ('STRAIGHT AWAY', 'do NOT') make it longer than necessary. Every clause is informative, but it could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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, and it does: it explains that a single alternative resolves silently and reports where it landed, while multiple alternatives return choices. Combined with trigger and remember semantics, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 operational meaning the schema lacks: OMIT `workspace` when unnamed, with single vs. multiple alternatives producing different returns. It also reinforces the opt-in nature of `remember`. Slight overlap with the schema keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (switch) and resource (which workspace this connection uses), and explicitly differentiates from the sibling connections_list_companies by telling the agent NOT to call it first. An agent can identify the tool's job and its boundaries 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger phrases ('wrong workspace', 'switch me to <name>', confirmed switch after missing data), states when to call with no argument versus with `workspace`, and names the alternative it is not (connections_list_companies). The single-vs-multiple workspace decision tree is spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_todo_addAdd a to-do to the member's listAInspect

Use this when the member asks to add, save, note down or remember a to-do, task, reminder or follow-up ('remind me to', 'add X to my list', 'I need to', 'put that on my to-dos'). Creates ONE open to-do on the member's Connections list: in the workspace this connection is bound to when there is one, otherwise in their personal space - the reply names which, so say it back. Keep the title to one line naming the action; put details in body. Not for the assistant's own intended work (that is post_agent_todos_add).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoOptional details: what, where, who, links.
scopeNoWhere it goes. Default: the bound workspace when this connection has one, else personal.
titleYesOne line naming the action, in the member's words (under ~100 characters).
due_atNoOptional deadline, unix seconds.
labelsNoOptional labels/folders to file it under.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses non-obvious behavior beyond annotations: creates one open to-do, selects workspace vs personal based on connection binding, requires the reply to name which space, and specifies title/body formatting. This substantially supplements annotations that only carry generic false hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense, front-loaded sentences: trigger conditions first, then behavior, then the exclusion. Every sentence carries operational value, and the examples are illustrative rather than redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter, no-output-schema tool, the description covers when to use it, what it creates, where it places the to-do, how to format the title/body, and which alternative to use instead. The instruction to say the placement back to the member covers the key response detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all 5 parameters, so the baseline is 3. The description reinforces the title/body split and the scope default but does not add new parameter-level details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('add/save/note or remember a to-do') against a specific resource (the member's Connections list), with trigger-phrase examples. It clearly distinguishes itself from post_agent_todos_add and is unambiguous against siblings like connections_todo_done and connections_todo_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens by telling the agent exactly when to use it: when the member asks to add, save, note, or remember a to-do/reminder/follow-up, including concrete phrases. It explicitly says not to use it for the assistant's own intended work and names post_agent_todos_add as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_todo_doneCheck a to-do off (or reopen it)A
Idempotent
Inspect

Use this when the member says a to-do is done, finished, completed, handled - or should be reopened. Pass the id from connections_todo_list; done: false reopens. Reversible: the item is marked, never deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe to-do id from connections_todo_list.
doneNotrue (default) = mark complete; false = reopen.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the annotations: it explicitly says the item is 'marked, never deleted' and that the operation is reversible via `done: false`. This complements idempotentHint and destructiveHint without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: trigger conditions first, then parameter mechanics, then reversibility. Every sentence earns its place and there is no redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter toggle tool, the description covers the trigger, the id source, the `done` flag behavior, and the safety guarantee. No output schema is present, but the outcome is sufficiently implied by 'the item is marked'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description essentially restates the schema's parameter info: `id` comes from connections_todo_list and `done: false` reopens. It adds no deeper semantics beyond what the input schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: checking a to-do off or reopening it based on the member's report. It names the resource (a to-do identified by `id`) and distinguishes itself from sibling tools like connections_todo_add and connections_todo_list by focusing on the completion/reopen action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit positive usage triggers ('done, finished, completed, handled - or should be reopened') and specifies that the correct `id` comes from connections_todo_list. However, it does not explicitly state when NOT to use this tool, such as for adding new to-dos, so it stops short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_todo_listMy to-do list - what the member still has to doA
Read-only
Inspect

Use this when the member asks what is on their to-do list, what they have to do, their tasks, open items, reminders, follow-ups, what is due or overdue, or whether anything is waiting on them. Returns the member's Connections to-dos across their personal space and every workspace they belong to, the workspace this connection is in first - open items by default, each with its due date, labels and workspace. Answer these questions from THIS list, never from chat history or memory: the list lives here. Not for the assistant's own work log (that is the agent lane, post_agent_todos_list).

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional: only items carrying this label/folder.
limitNoMax items to return (1-200, default 50).
queryNoOptional topic filter over titles and labels ('taxes', 'stripe onboarding'). Words are scored, not AND-ed, so extra words only re-order the result.
scopeNoall (default) = personal space plus every workspace; personal = only their own space; workspace = only the workspace this connection is bound to.
completedNofalse (default) = only OPEN items, what 'still to do' means. true = only finished ones.
due_beforeNoOptional agenda cutoff, unix seconds: only items due at or before this.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/non-destructive/closed-world, so the bar is lower, and the description still adds real behavioral context: results span personal space plus every workspace, the connection's workspace is ordered first, and open items are the default. It does not mention truncation behavior when limit is hit, which is the only notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger phrasings, then the return shape, then the exclusion. The enumeration of query phrasings is long but each maps to a distinct user utterance, so it earns most of its space; a slightly tighter list would still read well.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 return-value burden and does so: it says what items come back by default, what fields accompany each, and which scope wins for ordering. Combined with full schema coverage and annotations, nothing needed 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.

Parameters4/5

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 semantics the schema lacks, notably the result ordering ('the workspace this connection is in first') and the default result shape (open items with due date, labels, workspace). It reinforces rather than repeats the scope/default meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (member's Connections to-do list) and enumerates the surface forms of the question it answers. It also names the sibling lane it is not (post_agent_todos_list), so an agent can separate it from the other to-do-adjacent tools 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger conditions ('when the member asks what is on their to-do list... due or overdue... whether anything is waiting on them') plus an explicit instruction to answer only from this list, never chat history, and an explicit exclusion for the agent's own work log. Both when and when-not are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_whoamiWho am I - registration + company bindingA
Read-only
Inspect

WHICH ACCOUNT AND WHICH WORKSPACE THIS CONNECTION IS ON. Call it the moment the member wonders about either - 'am I in the wrong account?', 'which account is this?', 'wrong workspace?' - and read the reply's say line back: it names the signed-in account the way a person would recognise it (their name, and their email when the sign-in granted it). Also returns the registration (workspace folder or connector-level), the machine label, the bound company - or an explicit company:null when unassigned - the assignment source (auto = bound at registration to the member's first workspace, the normal case | agent-switch = the member moved it, or it followed their default | studio | agent-claim | unassigned), and active status. Wrong WORKSPACE is fixed by connections_switch_workspace; wrong ACCOUNT by connections_signout. connections_pulse includes this answer; call this one alone when you only need the binding. Read-only, cheap, no side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds 'Read-only, cheap, no side effects' and explains nuanced behavioral output such as 'explicit company:null when unassigned' and the assignment-source enum. It does not contradict the annotations and provides context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense, with the core answer front-loaded and each subsequent sentence adding distinct value: usage triggers, return fields, alternatives, and safety profile. It earns its length, though it is slightly verbose with the repeated emphasis on account/workspace.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully covers what the agent will receive: the human-readable account name/email, registration, machine label, bound company or null, assignment source, and active status. It also addresses common follow-up actions and relationship to connections_pulse, making the tool self-contained for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4; there is no parameter schema for the description to compensate for. The description instead clarifies how to interpret the response's `say` line, which is the relevant semantic information for an agent calling this tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'WHICH ACCOUNT AND WHICH WORKSPACE THIS CONNECTION IS ON', a specific identity/inspection purpose that is instantly clear. It also names the returned binding details ('registration', 'company', 'assignment source') and explicitly distinguishes this tool from connections_pulse, making the scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: 'Call it the moment the member wonders about either' with quoted user questions. It also names the exact corrective tools for wrong workspace (connections_switch_workspace) and wrong account (connections_signout), and tells the agent to prefer this tool over connections_pulse when only the binding is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchFetch one Deals deal or note by idA
Read-only
Inspect

Resolve one id returned by search (a 'deal:' or 'note:') back to its full record: { id, title, text, url, metadata }. An unrecognized id, or a note id on an unbound connection, answers { error: 'unknown_id' }. For clients that only speak search/fetch (e.g. ChatGPT's chat connector mode).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAn id returned by search.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds real behavioral value beyond that: the exact error contract ({ error: 'unknown_id' }) for unrecognized ids and for note ids on unbound connections, which an agent cannot infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying distinct information (what it resolves, error behavior, intended client), with the core purpose front-loaded. Dense but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description fully specifies the returned record shape ({ id, title, text, url, metadata }) and the failure shape. Combined with annotations covering the safety profile, nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole param is documented, so the baseline is 3. The description goes further by revealing the id's expected format ('deal:<id>' or 'note:<id>'), which the schema does not state, materially improving correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolve) and resource (one id returned by search, a deal or note) and distinguishes it from the sibling `search` by making clear this is the reverse lookup that returns full records rather than ids. An agent can tell exactly what this does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the tool as the fetch half of a search/fetch pair and names the client mode that needs it (ChatGPT chat connector), and the id is stated to come from `search`. It stops short of an explicit 'do not use this to search' exclusion, but the routing context is strong.

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.

  1. 1 tool update
    • Changedconnections_execute1 field changed
      • changedInput schema / allOf
        Previous value: -[
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "rds_query"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "properties": {
        -            "continueAfterTimeout": {
        -              "description": "Data API flag, forwarded verbatim.",
        -              "type": "boolean"
        -            },
        -            "db": {
        -              "description": "The plane database to query, by NAME (never an ARN) - lowercase. The last twelve are aliases of an earlier name (connections→main, accounts/identity→aegis, payments/plutus→pay, argus→analytics, intelligence/heimdall→intel, hephaestus→studio, brand-deals→deals, hermes→chat, locker→storage).",
        -              "enum": [
        -                "main",
        -                "aegis",
        -                "analytics",
        -                "pay",
        -                "companies",
        -                "events",
        -                "dating",
        -                "intel",
        -                "studio",
        -                "ledger",
        -                "deals",
        -                "ads",
        -                "chat",
        -                "market",
        -                "referrals",
        -                "notes",
        -                "learn",
        -                "storage",
        -                "give",
        -                "launch",
        -                "communities",
        -                "schedule",
        -                "gift",
        -                "seats",
        -                "boardroom",
        -                "email",
        -                "book",
        -                "sales",
        -                "newsletter",
        -                "legal",
        -                "rivals",
        -                "message",
        -                "connectors",
        -                "verify",
        -                "import",
        -                "sign",
        -                "games",
        -                "myconnect",
        -                "notifications",
        -                "realtor",
        -                "credits",
        -                "licensing",
        -                "crowdfund",
        -                "ship",
        -                "catalog",
        -                "attention",
        -                "network",
        -                "cranium",
        -                "connections",
        -                "identity",
        -                "accounts",
        -                "argus",
        -                "plutus",
        -                "payments",
        -                "intelligence",
        -                "heimdall",
        -                "hephaestus",
        -                "brand-deals",
        -                "hermes",
        -                "locker"
        -              ],
        -              "type": "string"
        -            },
        -            "formatRecordsAs": {
        -              "description": "RDS Data API records format; defaults to JSON.",
        -              "type": "string"
        -            },
        -            "instance": {
        -              "description": "Override the AWS vault instance the Data API call is signed with; defaults to the target's own host.",
        -              "type": "string"
        -            },
        -            "outputFilter": {
        -              "description": "JMESPath subset applied server-side before the rows are returned.",
        -              "type": "string"
        -            },
        -            "parameters": {
        -              "description": "RDS Data API typed parameters ([{name, value:{stringValue|longValue|…}}]) for a parameterised sql.",
        -              "type": "array"
        -            },
        -            "resultSetOptions": {
        -              "description": "Data API resultSetOptions, forwarded verbatim.",
        -              "type": "object"
        -            },
        -            "schema": {
        -              "description": "Data API schema qualifier, forwarded verbatim.",
        -              "type": "string"
        -            },
        -            "sql": {
        -              "description": "The statement to run. One statement per call. Required unless `transaction` is given.",
        -              "type": "string"
        -            },
        -            "transaction": {
        -              "description": "Hold one transaction across calls: begin (needs write: true) answers a transactionId; send each statement in it with write: true and that transactionId; then commit or rollback with the transactionId. No sql on these calls.",
        -              "enum": [
        -                "begin",
        -                "commit",
        -                "rollback"
        -              ],
        -              "type": "string"
        -            },
        -            "transactionId": {
        -              "description": "Run inside an existing Data API transaction.",
        -              "type": "string"
        -            },
        -            "write": {
        -              "description": "Default false (read-only). true permits a write, and the statement is recorded in the write audit.",
        -              "type": "boolean"
        -            }
        -          },
        -          "required": [
        -            "db"
        -          ],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "aws_sweep"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "anyOf": [
        -            {
        -              "required": [
        -                "tool_name"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "endpoint_id"
        -              ]
        -            }
        -          ],
        -          "properties": {
        -            "endpoint_id": {
        -              "description": "A catalog endpoint id, used instead of tool_name.",
        -              "type": "string"
        -            },
        -            "includeEnv": {
        -              "description": "Include a Lambda's non-sensitive environment values in the reply.",
        -              "type": "boolean"
        -            },
        -            "instances": {
        -              "description": "Connected AWS instance names to sweep. Omit, or pass the string 'all-aws', for every connected account.",
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": [
        -                "array",
        -                "string"
        -              ]
        -            },
        -            "outputFilter": {
        -              "description": "JMESPath subset applied to each instance's result.",
        -              "type": "string"
        -            },
        -            "paginateAll": {
        -              "description": "Follow NextToken/Marker server-side (cap 20 pages / 5MB).",
        -              "type": "boolean"
        -            },
        -            "params": {
        -              "description": "The swept op's OWN params, passed through to each per-instance call.",
        -              "type": "object"
        -            },
        -            "tool_name": {
        -              "description": "The aws catalog op to run on every account (e.g. sts_get_caller_identity). aws_sweep, probe and rds_query return op_not_sweepable instead of running (rds_query pins its own instance; sweeping a sweep recurses).",
        -              "type": "string"
        -            }
        -          },
        -          "required": [],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "probe"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "anyOf": [
        -            {
        -              "required": [
        -                "targets"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "url"
        -              ]
        -            }
        -          ],
        -          "properties": {
        -            "bodyContains": {
        -              "description": "Single-target shorthand: substring the body must contain.",
        -              "type": "string"
        -            },
        -            "expectStatus": {
        -              "description": "Single-target shorthand: the exact status to expect.",
        -              "type": "integer"
        -            },
        -            "headers": {
        -              "description": "Single-target shorthand: request headers.",
        -              "type": "object"
        -            },
        -            "method": {
        -              "description": "Single-target shorthand: HTTP method. Default GET.",
        -              "type": "string"
        -            },
        -            "targets": {
        -              "description": "Up to 10 targets per call.",
        -              "items": {
        -                "properties": {
        -                  "bodyContains": {
        -                    "description": "Substring the response body must contain to pass.",
        -                    "type": "string"
        -                  },
        -                  "expectStatus": {
        -                    "description": "Pass only on this exact status; default any 2xx.",
        -                    "type": "integer"
        -                  },
        -                  "headers": {
        -                    "description": "Request headers. Sent, never echoed back in the reply.",
        -                    "type": "object"
        -                  },
        -                  "method": {
        -                    "description": "HTTP method, uppercased by the handler. Default GET.",
        -                    "type": "string"
        -                  },
        -                  "url": {
        -                    "description": "https/http URL to request. Private/loopback/link-local hosts refuse.",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "url"
        -                ],
        -                "type": "object"
        -              },
        -              "maxItems": 10,
        -              "type": "array"
        -            },
        -            "url": {
        -              "description": "Single-target shorthand: this object IS the target (with method/expectStatus/…).",
        -              "type": "string"
        -            }
        -          },
        -          "required": [],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "logs_tail"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "anyOf": [
        -            {
        -              "required": [
        -                "functionName"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "fn"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "logGroup"
        -              ]
        -            }
        -          ],
        -          "properties": {
        -            "filter": {
        -              "description": "CloudWatch filter pattern.",
        -              "type": "string"
        -            },
        -            "filterPattern": {
        -              "description": "Alias of filter.",
        -              "type": "string"
        -            },
        -            "fn": {
        -              "description": "Alias of functionName.",
        -              "type": "string"
        -            },
        -            "functionName": {
        -              "description": "Lambda function name; its log group is /aws/lambda/<name> unless configured.",
        -              "type": "string"
        -            },
        -            "instance": {
        -              "description": "Connected AWS instance to read from. Default 'Main.Connections'.",
        -              "type": "string"
        -            },
        -            "limit": {
        -              "description": "Max events. Default 100, clamped to 1-1000.",
        -              "type": "integer"
        -            },
        -            "logGroup": {
        -              "description": "Explicit CloudWatch log group, instead of deriving one from functionName.",
        -              "type": "string"
        -            },
        -            "minutes": {
        -              "description": "How far back to read. Default 15, clamped to 1-129600 (90 days).",
        -              "type": "integer"
        -            },
        -            "region": {
        -              "description": "Region of the log group. Default us-east-1.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "qr_code"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "properties": {
        -            "errorCorrection": {
        -              "description": "How much damage the code survives; higher is denser. Default M.",
        -              "enum": [
        -                "L",
        -                "M",
        -                "Q",
        -                "H"
        -              ],
        -              "type": "string"
        -            },
        -            "format": {
        -              "description": "What to return. Default svg.",
        -              "enum": [
        -                "svg",
        -                "png",
        -                "both"
        -              ],
        -              "type": "string"
        -            },
        -            "label": {
        -              "description": "The SVG's accessible name. Default 'QR code'.",
        -              "type": "string"
        -            },
        -            "sizePx": {
        -              "description": "Width and height in pixels. Default 512.",
        -              "maximum": 2048,
        -              "minimum": 64,
        -              "type": "integer"
        -            },
        -            "value": {
        -              "description": "The link or text the code holds.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "value"
        -          ],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  }
        -]New value: +[
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "rds_query"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "properties": {
        +            "continueAfterTimeout": {
        +              "description": "Data API flag, forwarded verbatim.",
        +              "type": "boolean"
        +            },
        +            "db": {
        +              "description": "The plane database to query, by NAME (never an ARN) - lowercase. The last twelve are aliases of an earlier name (connections→main, accounts/identity→aegis, payments/plutus→pay, argus→analytics, intelligence/heimdall→intel, hephaestus→studio, brand-deals→deals, hermes→chat, locker→storage).",
        +              "enum": [
        +                "main",
        +                "aegis",
        +                "analytics",
        +                "pay",
        +                "companies",
        +                "events",
        +                "dating",
        +                "intel",
        +                "studio",
        +                "ledger",
        +                "deals",
        +                "ads",
        +                "chat",
        +                "market",
        +                "referrals",
        +                "notes",
        +                "learn",
        +                "storage",
        +                "give",
        +                "launch",
        +                "communities",
        +                "schedule",
        +                "gift",
        +                "seats",
        +                "boardroom",
        +                "email",
        +                "book",
        +                "sales",
        +                "newsletter",
        +                "legal",
        +                "rivals",
        +                "message",
        +                "connectors",
        +                "verify",
        +                "import",
        +                "sign",
        +                "games",
        +                "myconnect",
        +                "notifications",
        +                "realtor",
        +                "credits",
        +                "licensing",
        +                "crowdfund",
        +                "ship",
        +                "catalog",
        +                "attention",
        +                "network",
        +                "dictation",
        +                "cranium",
        +                "connections",
        +                "identity",
        +                "accounts",
        +                "argus",
        +                "plutus",
        +                "payments",
        +                "intelligence",
        +                "heimdall",
        +                "hephaestus",
        +                "brand-deals",
        +                "hermes",
        +                "locker"
        +              ],
        +              "type": "string"
        +            },
        +            "formatRecordsAs": {
        +              "description": "RDS Data API records format; defaults to JSON.",
        +              "type": "string"
        +            },
        +            "instance": {
        +              "description": "Override the AWS vault instance the Data API call is signed with; defaults to the target's own host.",
        +              "type": "string"
        +            },
        +            "outputFilter": {
        +              "description": "JMESPath subset applied server-side before the rows are returned.",
        +              "type": "string"
        +            },
        +            "parameters": {
        +              "description": "RDS Data API typed parameters ([{name, value:{stringValue|longValue|…}}]) for a parameterised sql.",
        +              "type": "array"
        +            },
        +            "resultSetOptions": {
        +              "description": "Data API resultSetOptions, forwarded verbatim.",
        +              "type": "object"
        +            },
        +            "schema": {
        +              "description": "Data API schema qualifier, forwarded verbatim.",
        +              "type": "string"
        +            },
        +            "sql": {
        +              "description": "The statement to run. One statement per call. Required unless `transaction` is given.",
        +              "type": "string"
        +            },
        +            "transaction": {
        +              "description": "Hold one transaction across calls: begin (needs write: true) answers a transactionId; send each statement in it with write: true and that transactionId; then commit or rollback with the transactionId. No sql on these calls.",
        +              "enum": [
        +                "begin",
        +                "commit",
        +                "rollback"
        +              ],
        +              "type": "string"
        +            },
        +            "transactionId": {
        +              "description": "Run inside an existing Data API transaction.",
        +              "type": "string"
        +            },
        +            "write": {
        +              "description": "Default false (read-only). true permits a write, and the statement is recorded in the write audit.",
        +              "type": "boolean"
        +            }
        +          },
        +          "required": [
        +            "db"
        +          ],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "aws_sweep"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "anyOf": [
        +            {
        +              "required": [
        +                "tool_name"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "endpoint_id"
        +              ]
        +            }
        +          ],
        +          "properties": {
        +            "endpoint_id": {
        +              "description": "A catalog endpoint id, used instead of tool_name.",
        +              "type": "string"
        +            },
        +            "includeEnv": {
        +              "description": "Include a Lambda's non-sensitive environment values in the reply.",
        +              "type": "boolean"
        +            },
        +            "instances": {
        +              "description": "Connected AWS instance names to sweep. Omit, or pass the string 'all-aws', for every connected account.",
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": [
        +                "array",
        +                "string"
        +              ]
        +            },
        +            "outputFilter": {
        +              "description": "JMESPath subset applied to each instance's result.",
        +              "type": "string"
        +            },
        +            "paginateAll": {
        +              "description": "Follow NextToken/Marker server-side (cap 20 pages / 5MB).",
        +              "type": "boolean"
        +            },
        +            "params": {
        +              "description": "The swept op's OWN params, passed through to each per-instance call.",
        +              "type": "object"
        +            },
        +            "tool_name": {
        +              "description": "The aws catalog op to run on every account (e.g. sts_get_caller_identity). aws_sweep, probe and rds_query return op_not_sweepable instead of running (rds_query pins its own instance; sweeping a sweep recurses).",
        +              "type": "string"
        +            }
        +          },
        +          "required": [],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "probe"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "anyOf": [
        +            {
        +              "required": [
        +                "targets"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "url"
        +              ]
        +            }
        +          ],
        +          "properties": {
        +            "bodyContains": {
        +              "description": "Single-target shorthand: substring the body must contain.",
        +              "type": "string"
        +            },
        +            "expectStatus": {
        +              "description": "Single-target shorthand: the exact status to expect.",
        +              "type": "integer"
        +            },
        +            "headers": {
        +              "description": "Single-target shorthand: request headers.",
        +              "type": "object"
        +            },
        +            "method": {
        +              "description": "Single-target shorthand: HTTP method. Default GET.",
        +              "type": "string"
        +            },
        +            "targets": {
        +              "description": "Up to 10 targets per call.",
        +              "items": {
        +                "properties": {
        +                  "bodyContains": {
        +                    "description": "Substring the response body must contain to pass.",
        +                    "type": "string"
        +                  },
        +                  "expectStatus": {
        +                    "description": "Pass only on this exact status; default any 2xx.",
        +                    "type": "integer"
        +                  },
        +                  "headers": {
        +                    "description": "Request headers. Sent, never echoed back in the reply.",
        +                    "type": "object"
        +                  },
        +                  "method": {
        +                    "description": "HTTP method, uppercased by the handler. Default GET.",
        +                    "type": "string"
        +                  },
        +                  "url": {
        +                    "description": "https/http URL to request. Private/loopback/link-local hosts refuse.",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "url"
        +                ],
        +                "type": "object"
        +              },
        +              "maxItems": 10,
        +              "type": "array"
        +            },
        +            "url": {
        +              "description": "Single-target shorthand: this object IS the target (with method/expectStatus/…).",
        +              "type": "string"
        +            }
        +          },
        +          "required": [],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "logs_tail"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "anyOf": [
        +            {
        +              "required": [
        +                "functionName"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "fn"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "logGroup"
        +              ]
        +            }
        +          ],
        +          "properties": {
        +            "filter": {
        +              "description": "CloudWatch filter pattern.",
        +              "type": "string"
        +            },
        +            "filterPattern": {
        +              "description": "Alias of filter.",
        +              "type": "string"
        +            },
        +            "fn": {
        +              "description": "Alias of functionName.",
        +              "type": "string"
        +            },
        +            "functionName": {
        +              "description": "Lambda function name; its log group is /aws/lambda/<name> unless configured.",
        +              "type": "string"
        +            },
        +            "instance": {
        +              "description": "Connected AWS instance to read from. Default 'Main.Connections'.",
        +              "type": "string"
        +            },
        +            "limit": {
        +              "description": "Max events. Default 100, clamped to 1-1000.",
        +              "type": "integer"
        +            },
        +            "logGroup": {
        +              "description": "Explicit CloudWatch log group, instead of deriving one from functionName.",
        +              "type": "string"
        +            },
        +            "minutes": {
        +              "description": "How far back to read. Default 15, clamped to 1-129600 (90 days).",
        +              "type": "integer"
        +            },
        +            "region": {
        +              "description": "Region of the log group. Default us-east-1.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "qr_code"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "properties": {
        +            "errorCorrection": {
        +              "description": "How much damage the code survives; higher is denser. Default M.",
        +              "enum": [
        +                "L",
        +                "M",
        +                "Q",
        +                "H"
        +              ],
        +              "type": "string"
        +            },
        +            "format": {
        +              "description": "What to return. Default svg.",
        +              "enum": [
        +                "svg",
        +                "png",
        +                "both"
        +              ],
        +              "type": "string"
        +            },
        +            "label": {
        +              "description": "The SVG's accessible name. Default 'QR code'.",
        +              "type": "string"
        +            },
        +            "sizePx": {
        +              "description": "Width and height in pixels. Default 512.",
        +              "maximum": 2048,
        +              "minimum": 64,
        +              "type": "integer"
        +            },
        +            "value": {
        +              "description": "The link or text the code holds.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "value"
        +          ],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  }
        +]
  2. 1 tool update
    • Changedconnections_execute1 field changed
      • changedInput schema / allOf
        Previous value: -[
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "rds_query"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "properties": {
        -            "continueAfterTimeout": {
        -              "description": "Data API flag, forwarded verbatim.",
        -              "type": "boolean"
        -            },
        -            "db": {
        -              "description": "The plane database to query, by NAME (never an ARN) - lowercase. The last twelve are aliases of an earlier name (connections→main, accounts/identity→aegis, payments/plutus→pay, argus→analytics, intelligence/heimdall→intel, hephaestus→studio, brand-deals→deals, hermes→chat, locker→storage).",
        -              "enum": [
        -                "main",
        -                "aegis",
        -                "analytics",
        -                "pay",
        -                "companies",
        -                "events",
        -                "dating",
        -                "intel",
        -                "studio",
        -                "ledger",
        -                "deals",
        -                "ads",
        -                "chat",
        -                "market",
        -                "referrals",
        -                "notes",
        -                "learn",
        -                "storage",
        -                "give",
        -                "launch",
        -                "communities",
        -                "schedule",
        -                "gift",
        -                "seats",
        -                "connections",
        -                "identity",
        -                "accounts",
        -                "argus",
        -                "plutus",
        -                "payments",
        -                "intelligence",
        -                "heimdall",
        -                "hephaestus",
        -                "brand-deals",
        -                "hermes",
        -                "locker"
        -              ],
        -              "type": "string"
        -            },
        -            "formatRecordsAs": {
        -              "description": "RDS Data API records format; defaults to JSON.",
        -              "type": "string"
        -            },
        -            "instance": {
        -              "description": "Override the AWS vault instance the Data API call is signed with; defaults to the target's own host.",
        -              "type": "string"
        -            },
        -            "outputFilter": {
        -              "description": "JMESPath subset applied server-side before the rows are returned.",
        -              "type": "string"
        -            },
        -            "parameters": {
        -              "description": "RDS Data API typed parameters ([{name, value:{stringValue|longValue|…}}]) for a parameterised sql.",
        -              "type": "array"
        -            },
        -            "resultSetOptions": {
        -              "description": "Data API resultSetOptions, forwarded verbatim.",
        -              "type": "object"
        -            },
        -            "schema": {
        -              "description": "Data API schema qualifier, forwarded verbatim.",
        -              "type": "string"
        -            },
        -            "sql": {
        -              "description": "The statement to run. One statement per call.",
        -              "type": "string"
        -            },
        -            "transactionId": {
        -              "description": "Run inside an existing Data API transaction.",
        -              "type": "string"
        -            },
        -            "write": {
        -              "description": "Default false (read-only). true permits a write, and the statement is recorded in the write audit.",
        -              "type": "boolean"
        -            }
        -          },
        -          "required": [
        -            "db",
        -            "sql"
        -          ],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "aws_sweep"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "anyOf": [
        -            {
        -              "required": [
        -                "tool_name"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "endpoint_id"
        -              ]
        -            }
        -          ],
        -          "properties": {
        -            "endpoint_id": {
        -              "description": "A catalog endpoint id, used instead of tool_name.",
        -              "type": "string"
        -            },
        -            "includeEnv": {
        -              "description": "Include a Lambda's non-sensitive environment values in the reply.",
        -              "type": "boolean"
        -            },
        -            "instances": {
        -              "description": "Connected AWS instance names to sweep. Omit, or pass the string 'all-aws', for every connected account.",
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": [
        -                "array",
        -                "string"
        -              ]
        -            },
        -            "outputFilter": {
        -              "description": "JMESPath subset applied to each instance's result.",
        -              "type": "string"
        -            },
        -            "paginateAll": {
        -              "description": "Follow NextToken/Marker server-side (cap 20 pages / 5MB).",
        -              "type": "boolean"
        -            },
        -            "params": {
        -              "description": "The swept op's OWN params, passed through to each per-instance call.",
        -              "type": "object"
        -            },
        -            "tool_name": {
        -              "description": "The aws catalog op to run on every account (e.g. sts_get_caller_identity). aws_sweep, probe and rds_query return op_not_sweepable instead of running (rds_query pins its own instance; sweeping a sweep recurses).",
        -              "type": "string"
        -            }
        -          },
        -          "required": [],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "probe"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "anyOf": [
        -            {
        -              "required": [
        -                "targets"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "url"
        -              ]
        -            }
        -          ],
        -          "properties": {
        -            "bodyContains": {
        -              "description": "Single-target shorthand: substring the body must contain.",
        -              "type": "string"
        -            },
        -            "expectStatus": {
        -              "description": "Single-target shorthand: the exact status to expect.",
        -              "type": "integer"
        -            },
        -            "headers": {
        -              "description": "Single-target shorthand: request headers.",
        -              "type": "object"
        -            },
        -            "method": {
        -              "description": "Single-target shorthand: HTTP method. Default GET.",
        -              "type": "string"
        -            },
        -            "targets": {
        -              "description": "Up to 10 targets per call.",
        -              "items": {
        -                "properties": {
        -                  "bodyContains": {
        -                    "description": "Substring the response body must contain to pass.",
        -                    "type": "string"
        -                  },
        -                  "expectStatus": {
        -                    "description": "Pass only on this exact status; default any 2xx.",
        -                    "type": "integer"
        -                  },
        -                  "headers": {
        -                    "description": "Request headers. Sent, never echoed back in the reply.",
        -                    "type": "object"
        -                  },
        -                  "method": {
        -                    "description": "HTTP method, uppercased by the handler. Default GET.",
        -                    "type": "string"
        -                  },
        -                  "url": {
        -                    "description": "https/http URL to request. Private/loopback/link-local hosts refuse.",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "url"
        -                ],
        -                "type": "object"
        -              },
        -              "maxItems": 10,
        -              "type": "array"
        -            },
        -            "url": {
        -              "description": "Single-target shorthand: this object IS the target (with method/expectStatus/…).",
        -              "type": "string"
        -            }
        -          },
        -          "required": [],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "logs_tail"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "anyOf": [
        -            {
        -              "required": [
        -                "functionName"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "fn"
        -              ]
        -            },
        -            {
        -              "required": [
        -                "logGroup"
        -              ]
        -            }
        -          ],
        -          "properties": {
        -            "filter": {
        -              "description": "CloudWatch filter pattern.",
        -              "type": "string"
        -            },
        -            "filterPattern": {
        -              "description": "Alias of filter.",
        -              "type": "string"
        -            },
        -            "fn": {
        -              "description": "Alias of functionName.",
        -              "type": "string"
        -            },
        -            "functionName": {
        -              "description": "Lambda function name; its log group is /aws/lambda/<name> unless configured.",
        -              "type": "string"
        -            },
        -            "instance": {
        -              "description": "Connected AWS instance to read from. Default 'Main.Connections'.",
        -              "type": "string"
        -            },
        -            "limit": {
        -              "description": "Max events. Default 100, clamped to 1-1000.",
        -              "type": "integer"
        -            },
        -            "logGroup": {
        -              "description": "Explicit CloudWatch log group, instead of deriving one from functionName.",
        -              "type": "string"
        -            },
        -            "minutes": {
        -              "description": "How far back to read. Default 15, clamped to 1-129600 (90 days).",
        -              "type": "integer"
        -            },
        -            "region": {
        -              "description": "Region of the log group. Default us-east-1.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  },
        -  {
        -    "if": {
        -      "properties": {
        -        "tool_name": {
        -          "const": "qr_code"
        -        }
        -      },
        -      "required": [
        -        "tool_name"
        -      ]
        -    },
        -    "then": {
        -      "properties": {
        -        "params": {
        -          "properties": {
        -            "errorCorrection": {
        -              "description": "How much damage the code survives; higher is denser. Default M.",
        -              "enum": [
        -                "L",
        -                "M",
        -                "Q",
        -                "H"
        -              ],
        -              "type": "string"
        -            },
        -            "format": {
        -              "description": "What to return. Default svg.",
        -              "enum": [
        -                "svg",
        -                "png",
        -                "both"
        -              ],
        -              "type": "string"
        -            },
        -            "label": {
        -              "description": "The SVG's accessible name. Default 'QR code'.",
        -              "type": "string"
        -            },
        -            "sizePx": {
        -              "description": "Width and height in pixels. Default 512.",
        -              "maximum": 2048,
        -              "minimum": 64,
        -              "type": "integer"
        -            },
        -            "value": {
        -              "description": "The link or text the code holds.",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "value"
        -          ],
        -          "type": "object"
        -        }
        -      }
        -    }
        -  }
        -]New value: +[
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "rds_query"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "properties": {
        +            "continueAfterTimeout": {
        +              "description": "Data API flag, forwarded verbatim.",
        +              "type": "boolean"
        +            },
        +            "db": {
        +              "description": "The plane database to query, by NAME (never an ARN) - lowercase. The last twelve are aliases of an earlier name (connections→main, accounts/identity→aegis, payments/plutus→pay, argus→analytics, intelligence/heimdall→intel, hephaestus→studio, brand-deals→deals, hermes→chat, locker→storage).",
        +              "enum": [
        +                "main",
        +                "aegis",
        +                "analytics",
        +                "pay",
        +                "companies",
        +                "events",
        +                "dating",
        +                "intel",
        +                "studio",
        +                "ledger",
        +                "deals",
        +                "ads",
        +                "chat",
        +                "market",
        +                "referrals",
        +                "notes",
        +                "learn",
        +                "storage",
        +                "give",
        +                "launch",
        +                "communities",
        +                "schedule",
        +                "gift",
        +                "seats",
        +                "boardroom",
        +                "email",
        +                "book",
        +                "sales",
        +                "newsletter",
        +                "legal",
        +                "rivals",
        +                "message",
        +                "connectors",
        +                "verify",
        +                "import",
        +                "sign",
        +                "games",
        +                "myconnect",
        +                "notifications",
        +                "realtor",
        +                "credits",
        +                "licensing",
        +                "crowdfund",
        +                "ship",
        +                "catalog",
        +                "attention",
        +                "network",
        +                "cranium",
        +                "connections",
        +                "identity",
        +                "accounts",
        +                "argus",
        +                "plutus",
        +                "payments",
        +                "intelligence",
        +                "heimdall",
        +                "hephaestus",
        +                "brand-deals",
        +                "hermes",
        +                "locker"
        +              ],
        +              "type": "string"
        +            },
        +            "formatRecordsAs": {
        +              "description": "RDS Data API records format; defaults to JSON.",
        +              "type": "string"
        +            },
        +            "instance": {
        +              "description": "Override the AWS vault instance the Data API call is signed with; defaults to the target's own host.",
        +              "type": "string"
        +            },
        +            "outputFilter": {
        +              "description": "JMESPath subset applied server-side before the rows are returned.",
        +              "type": "string"
        +            },
        +            "parameters": {
        +              "description": "RDS Data API typed parameters ([{name, value:{stringValue|longValue|…}}]) for a parameterised sql.",
        +              "type": "array"
        +            },
        +            "resultSetOptions": {
        +              "description": "Data API resultSetOptions, forwarded verbatim.",
        +              "type": "object"
        +            },
        +            "schema": {
        +              "description": "Data API schema qualifier, forwarded verbatim.",
        +              "type": "string"
        +            },
        +            "sql": {
        +              "description": "The statement to run. One statement per call. Required unless `transaction` is given.",
        +              "type": "string"
        +            },
        +            "transaction": {
        +              "description": "Hold one transaction across calls: begin (needs write: true) answers a transactionId; send each statement in it with write: true and that transactionId; then commit or rollback with the transactionId. No sql on these calls.",
        +              "enum": [
        +                "begin",
        +                "commit",
        +                "rollback"
        +              ],
        +              "type": "string"
        +            },
        +            "transactionId": {
        +              "description": "Run inside an existing Data API transaction.",
        +              "type": "string"
        +            },
        +            "write": {
        +              "description": "Default false (read-only). true permits a write, and the statement is recorded in the write audit.",
        +              "type": "boolean"
        +            }
        +          },
        +          "required": [
        +            "db"
        +          ],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "aws_sweep"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "anyOf": [
        +            {
        +              "required": [
        +                "tool_name"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "endpoint_id"
        +              ]
        +            }
        +          ],
        +          "properties": {
        +            "endpoint_id": {
        +              "description": "A catalog endpoint id, used instead of tool_name.",
        +              "type": "string"
        +            },
        +            "includeEnv": {
        +              "description": "Include a Lambda's non-sensitive environment values in the reply.",
        +              "type": "boolean"
        +            },
        +            "instances": {
        +              "description": "Connected AWS instance names to sweep. Omit, or pass the string 'all-aws', for every connected account.",
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": [
        +                "array",
        +                "string"
        +              ]
        +            },
        +            "outputFilter": {
        +              "description": "JMESPath subset applied to each instance's result.",
        +              "type": "string"
        +            },
        +            "paginateAll": {
        +              "description": "Follow NextToken/Marker server-side (cap 20 pages / 5MB).",
        +              "type": "boolean"
        +            },
        +            "params": {
        +              "description": "The swept op's OWN params, passed through to each per-instance call.",
        +              "type": "object"
        +            },
        +            "tool_name": {
        +              "description": "The aws catalog op to run on every account (e.g. sts_get_caller_identity). aws_sweep, probe and rds_query return op_not_sweepable instead of running (rds_query pins its own instance; sweeping a sweep recurses).",
        +              "type": "string"
        +            }
        +          },
        +          "required": [],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "probe"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "anyOf": [
        +            {
        +              "required": [
        +                "targets"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "url"
        +              ]
        +            }
        +          ],
        +          "properties": {
        +            "bodyContains": {
        +              "description": "Single-target shorthand: substring the body must contain.",
        +              "type": "string"
        +            },
        +            "expectStatus": {
        +              "description": "Single-target shorthand: the exact status to expect.",
        +              "type": "integer"
        +            },
        +            "headers": {
        +              "description": "Single-target shorthand: request headers.",
        +              "type": "object"
        +            },
        +            "method": {
        +              "description": "Single-target shorthand: HTTP method. Default GET.",
        +              "type": "string"
        +            },
        +            "targets": {
        +              "description": "Up to 10 targets per call.",
        +              "items": {
        +                "properties": {
        +                  "bodyContains": {
        +                    "description": "Substring the response body must contain to pass.",
        +                    "type": "string"
        +                  },
        +                  "expectStatus": {
        +                    "description": "Pass only on this exact status; default any 2xx.",
        +                    "type": "integer"
        +                  },
        +                  "headers": {
        +                    "description": "Request headers. Sent, never echoed back in the reply.",
        +                    "type": "object"
        +                  },
        +                  "method": {
        +                    "description": "HTTP method, uppercased by the handler. Default GET.",
        +                    "type": "string"
        +                  },
        +                  "url": {
        +                    "description": "https/http URL to request. Private/loopback/link-local hosts refuse.",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "url"
        +                ],
        +                "type": "object"
        +              },
        +              "maxItems": 10,
        +              "type": "array"
        +            },
        +            "url": {
        +              "description": "Single-target shorthand: this object IS the target (with method/expectStatus/…).",
        +              "type": "string"
        +            }
        +          },
        +          "required": [],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "logs_tail"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "anyOf": [
        +            {
        +              "required": [
        +                "functionName"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "fn"
        +              ]
        +            },
        +            {
        +              "required": [
        +                "logGroup"
        +              ]
        +            }
        +          ],
        +          "properties": {
        +            "filter": {
        +              "description": "CloudWatch filter pattern.",
        +              "type": "string"
        +            },
        +            "filterPattern": {
        +              "description": "Alias of filter.",
        +              "type": "string"
        +            },
        +            "fn": {
        +              "description": "Alias of functionName.",
        +              "type": "string"
        +            },
        +            "functionName": {
        +              "description": "Lambda function name; its log group is /aws/lambda/<name> unless configured.",
        +              "type": "string"
        +            },
        +            "instance": {
        +              "description": "Connected AWS instance to read from. Default 'Main.Connections'.",
        +              "type": "string"
        +            },
        +            "limit": {
        +              "description": "Max events. Default 100, clamped to 1-1000.",
        +              "type": "integer"
        +            },
        +            "logGroup": {
        +              "description": "Explicit CloudWatch log group, instead of deriving one from functionName.",
        +              "type": "string"
        +            },
        +            "minutes": {
        +              "description": "How far back to read. Default 15, clamped to 1-129600 (90 days).",
        +              "type": "integer"
        +            },
        +            "region": {
        +              "description": "Region of the log group. Default us-east-1.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  },
        +  {
        +    "if": {
        +      "properties": {
        +        "tool_name": {
        +          "const": "qr_code"
        +        }
        +      },
        +      "required": [
        +        "tool_name"
        +      ]
        +    },
        +    "then": {
        +      "properties": {
        +        "params": {
        +          "properties": {
        +            "errorCorrection": {
        +              "description": "How much damage the code survives; higher is denser. Default M.",
        +              "enum": [
        +                "L",
        +                "M",
        +                "Q",
        +                "H"
        +              ],
        +              "type": "string"
        +            },
        +            "format": {
        +              "description": "What to return. Default svg.",
        +              "enum": [
        +                "svg",
        +                "png",
        +                "both"
        +              ],
        +              "type": "string"
        +            },
        +            "label": {
        +              "description": "The SVG's accessible name. Default 'QR code'.",
        +              "type": "string"
        +            },
        +            "sizePx": {
        +              "description": "Width and height in pixels. Default 512.",
        +              "maximum": 2048,
        +              "minimum": 64,
        +              "type": "integer"
        +            },
        +            "value": {
        +              "description": "The link or text the code holds.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "value"
        +          ],
        +          "type": "object"
        +        }
        +      }
        +    }
        +  }
        +]
  3. 1 tool update
    • Changedconnections_core8 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"run (default) walks the flowchart; get reads it; edit/save/revert change it; history, log and brief read the record."New value: +"run (default) walks the flowchart; head reads its quick exits; find reads matching docs and staff; get reads it; edit/save/revert change it; history, log, brief and turns read or store the record."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "run",
        -  "get",
        -  "save",
        -  "edit",
        -  "revert",
        -  "history",
        -  "log",
        -  "brief"
        -]New value: +[
        +  "run",
        +  "head",
        +  "find",
        +  "turns",
        +  "get",
        +  "save",
        +  "edit",
        +  "revert",
        +  "history",
        +  "log",
        +  "brief"
        +]
      • changedInput schema / properties / base_version / description
        Previous value: -"edit/save/revert: the version you read (0 for a new flowchart). A newer save refuses with stale_version."New value: +"edit/save/revert: the version you read (0 for a new flowchart). A newer save is answered stale_version."
      • changedInput schema / properties / facts / description
        Previous value: -"run: facts the flowchart's checks read, e.g. { message: '<the request>' }."New value: +"run: facts the flowchart's checks read, e.g. { message: '<the request>' }. find: { message } in place of query."
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "log: which core_events rows (default run).",
        +  "enum": [
        +    "run",
        +    "turn",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"history/log: how many (default 50, at most 500)."New value: +"history/log: how many (default 50, at most 500); find: docs to list (default 8, at most 20)."
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "find: the words to match against the workspace's docs and staff (default facts.message).",
        +  "type": "string"
        +}
      • addedInput schema / properties / rows
        Added value: +{
        +  "description": "turns: one row per chat turn, 1 to 200: { uid (the turn's key, 1-80 letters, digits, . _ : or -), chat, at (ISO time), called, delegated, version, pc }. called true means the chat walked the flowchart.",
        +  "items": {
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  4. 1 tool update
    • Addedconnections_core
  5. 1 tool update
    • Removedconnections_catalog_refresh
  6. 1 tool update
    • Changedconnections_email_send1 field changed
      • changedInput schema / properties / audience / description
        Previous value: -"Does this person already know the sender? warm = they know you or asked for this mail; cold = no prior relationship. Required for every recipient, no default: a send with no audience is refused. One value covers the whole message; recipient_audience sets it per address and wins."New value: +"Does this person already know the sender? warm = they know you or asked for this mail; cold = no prior relationship. Required for every recipient, no default: a send with no audience returns an error. One value covers the whole message; recipient_audience sets it per address and wins."
  7. 1 tool update
    • Addedconnections_contacts_log
  8. 1 tool update
    • Changedconnections_email_send3 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "audience"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "recipient_audience"
        +    ]
        +  }
        +]
      • addedInput schema / properties / audience
        Added value: +{
        +  "description": "Does this person already know the sender? warm = they know you or asked for this mail; cold = no prior relationship. Required for every recipient, no default: a send with no audience is refused. One value covers the whole message; recipient_audience sets it per address and wins.",
        +  "enum": [
        +    "cold",
        +    "warm"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / recipient_audience
        Added value: +{
        +  "additionalProperties": {
        +    "enum": [
        +      "cold",
        +      "warm"
        +    ],
        +    "type": "string"
        +  },
        +  "description": "The audience per address, as a flat object: { 'person@yours.com': 'warm' }. Wins over audience for the addresses it names.",
        +  "type": "object"
        +}
  9. 1 tool update
    • Addedconnections_copy_connection_link
  10. 1 tool update
    • Changedconnections_help1 field changed
      • changedInput schema / properties / domain / enum
        Previous value: -[
        -  "contacts",
        -  "todos",
        -  "calendar",
        -  "events",
        -  "deals",
        -  "email",
        -  "notes",
        -  "memory",
        -  "workspace"
        -]New value: +[
        +  "contacts",
        +  "todos",
        +  "calendar",
        +  "events",
        +  "deals",
        +  "email",
        +  "notes",
        +  "memory",
        +  "workspace",
        +  "introductions",
        +  "receipts",
        +  "connectors"
        +]
  11. 2 tool updates
    • Removedconnections_catalog_add
    • Removedconnections_catalog_remove
  12. 4 tool updates
    • Removedconnections_lease_credential
    • Removedconnections_mint_org_operator
    • Removedconnections_mint_plane_operator
    • Removedconnections_provision_signing_credential

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    AI-powered project management with persistent memory, encrypted P2P sharing, and 20+ integrations, enabling your AI assistant to manage projects, share memories, and collaborate securely across platforms.
    26
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to query and update a persistent relationship ledger, providing pre-meeting context briefs, structured post-meeting extraction, and tracking of commitments, agreements, and open loops.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage social media accounts and CRM operations, including posting, analytics, inbox management, and customer management.
    22
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to call, text, and email businesses on your behalf, read back transcripts, recordings, and replies.
    31 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources