Skip to main content
Glama

GTM Otto

Server Details

Self-driving LinkedIn prospecting: it sources, warms and invites daily. You approve every message.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
gtmotto/mcp
GitHub Stars
1
Server Listing
GTM Otto MCP

TDQS

A4.2/5.0

Scored across 21 tools

Disambiguation5/5

Each tool targets a distinct action or resource — e.g., gtm_preview_source vs gtm_run_source clearly separate dry-run from real execution, and gtm_configure_source vs gtm_set_source distinguish configuration from toggling. Descriptions are detailed and boundaries are explicit, leaving no ambiguous overlap.

Naming Consistency4/5

Most tools follow a gtm_verb_noun pattern (gtm_configure_source, gtm_run_source, gtm_update_play), but a few use noun phrases (gtm_linkedin_status, gtm_play_stats, gtm_source_runs, gtm_sources_reference) and gtm_whoami is a single verb. The deviations are minor and still predictable, but not fully uniform.

Tool Count4/5

With 21 tools, the server is on the heavier side but the breadth of the GTM automation domain — play management, sourcing lanes, ICP tuning, approvals, LinkedIn integration — justifies the count. Each tool serves a specific function and none feel redundant, making the size reasonable for the scope.

Completeness4/5

The set covers the full lifecycle for plays, sources, ICP, and approvals, with create/read/update/toggle/run/preview operations. Minor gaps exist, such as no explicit delete for plays or sources, but these are likely intentional to prevent accidental data loss. Overall, the surface is comprehensive for the stated purpose.

Available Tools

21 tools
gtm_approveApprove a drafted messageA
DestructiveIdempotent
Inspect

Approve ONE drafted action by its approvalId (from gtm_list_approvals). It then leaves on the seat's next slot, inside LinkedIn's limits — this is the human's tap, moved from the cockpit to the chat, so ONLY call it after showing them the draft and getting a yes in this conversation. An already-decided card is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesThe card to approve.

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 details beyond the annotations: it 'leaves on the seat's next slot, inside LinkedIn's limits' (scheduling side effect) and explains that an 'already-decided card is refused' (idempotent behavior). It also frames this as 'the human's tap', clarifying that it substitutes a manual action. No contradiction with the annotations is present.

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 first sentence is crisp and front-loaded with the core action and required parameter source. The second sentence carries behavioral context, though the metaphorical phrase 'human's tap, moved from the cockpit to the chat' is slightly tangential. Still, every sentence serves a purpose and the length is appropriate for a tool with side effects.

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 one-parameter tool with no output schema, the description covers the critical aspects: when to call (after explicit yes), what it does (approves and schedules), side effects (within LinkedIn limits), and idempotent failure mode (refuses already-decided). It does not detail return values, but the annotations and simplicity make this a minor gap.

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?

While the schema's approvalId description is minimal ('The card to approve.'), the tool description adds crucial context: the ID comes from gtm_list_approvals and refers to a single drafted action. This helps the agent know exactly what value to pass and where to obtain it, exceeding the schema's bare description.

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 ('Approve'), a specific resource ('drafted action'), and the exact identifier source ('by its approvalId (from gtm_list_approvals)'). It also scopes the operation to 'ONE' drafted action and notes that already-decided cards are refused, distinguishing it from gtm_reject without naming it. This is clear and actionable.

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 an explicit condition: 'ONLY call it after showing them the draft and getting a yes in this conversation.' It also implies when not to call (if already decided). However, it does not explicitly name the alternative gtm_reject for rejection cases, relying on the reader to infer from sibling context.

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

gtm_configure_sourceConfigure a sourcing laneA
DestructiveIdempotent
Inspect

Write a lane's settings — upload an account list, set the Post-discovery intent and anchors, change the job keywords, move a gate. MERGE semantics: only the fields you send change. Lists (companies, postUrls, competitors) REPLACE by default; pass listMode 'append' to add to what is there (deduped, case-insensitive). Caps: 100 companies, 25 posts, 25 anchors — what did not fit comes back in truncated. Unknown fields are refused. Saving creates the lane's row if it never had one (OFF, because configuring is not switching on), makes the lane due again immediately and resets its retry backoff; on account_list it also forgets the cached misses so unfound companies are looked up again. Pass on: true to switch it on in the same call — refused, with nothing saved, if the lane would still have nothing to run on. Nothing runs inside this call: an ON lane on an ACTIVE play runs on the next tick (≤5 min); otherwise use gtm_run_source. Read gtm_sources_reference for each field's meaning.

ParametersJSON Schema
NameRequiredDescriptionDefault
onNoAlso switch the lane on/off. Omit to leave the switch alone.
keyYesWhich lane. people_search: LinkedIn people search compiled from the play's ICP (+ optional free-text keywords). | competitor_posts: Post discovery: Otto searches LinkedIn daily for posts matching an intent, judges each, and takes who engaged. | job_offers: Hiring signal: companies posting a role → the buyers inside them. | account_list: Companies you name (names, websites or LinkedIn page URLs) → Otto finds your buyers inside each. | post_engagers: RETIRED — folded into competitor_posts.postUrls. Still runs on rows that exist; do not configure it on new plays.
configYesThe fields to change. See gtm_sources_reference.
playIdYesThe play, from gtm_list_plays.
listModeNoHow list fields combine with the current value. Default replace.

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses extensive behavioral details beyond the annotations: MERGE semantics (only fields sent change), list replacement vs append behavior, caps (100 companies, 25 posts, 25 anchors), unknown-field refusal, side effects on save (creates row if none, makes lane due, resets retry backoff, forgets cached misses), and the refusal condition for `on: true` when nothing would run. It also clarifies that no execution happens inside the call. These add substantial context on top of the annotations (readOnlyHint false, destructiveHint true, idempotentHint true) 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 dense but every sentence carries weight. It front-loads the purpose, then systematically covers merge semantics, list behavior, caps, unknown-field handling, save side effects, the `on` flag, execution behavior, and a pointer to the reference. There is no filler; each clause adds a distinct operational fact. The structure flows logically from core semantics to edge cases to routing.

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 5 parameters and a nested config object, the description covers nearly every aspect an agent needs: merge semantics, caps, refusal conditions, side effects, execution timing, and a reference pointer for field meanings. It even hints at the response via `truncated`. Given the lack of an output schema, this description provides sufficient context to call the tool correctly and predict behavior. It is complete for the tool's complexity.

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. The description adds meaningful semantics beyond the schema: it explains MERGE behavior for config fields, specifies caps (e.g., max 25 posts/anchors, 100 companies) that are not in the schema, clarifies the default listMode and its interaction with `truncated`, and describes the `on` parameter's refusal condition. This supplements the schema descriptions, which are already detailed but lack the interaction rules. It earns a 4 for adding value beyond the 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 opens with a specific verb+resource ('Write a lane's settings') and enumerates concrete actions (upload account list, set intent and anchors, change keywords, move a gate). It clearly distinguishes this from siblings like gtm_run_source by stating it writes configuration rather than running anything, and it mentions the reference tool gtm_sources_reference. This leaves no ambiguity about what the tool does.

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 states when not to use it: 'Nothing runs inside this call: an ON lane on an ACTIVE play runs on the next tick (≤5 min); otherwise use gtm_run_source.' It also directs the agent to read gtm_sources_reference for field meanings, providing a clear alternative for deeper context. It explains when the `on` flag is appropriate and when it will be refused, giving actionable usage guidance.

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

gtm_connect_linkedinConnect LinkedInAInspect

The link a human opens to connect (or reconnect) their LinkedIn account to a play — the one cockpit step the play cannot run without. Hand the URL to the human, tell them to say when it is done, then call gtm_linkedin_status: the seat reads classic or sales_navigator once bound. The link expires in 15 minutes; call again for a fresh one. Nothing is sent, nothing is read from their account by this call.

ParametersJSON Schema
NameRequiredDescriptionDefault
playIdYesThe play to bind the seat to.

TDQS

A4.7/5.0
Behavior5/5

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

The description explicitly states 'Nothing is sent, nothing is read from their account by this call', which clarifies the tool's side-effect profile beyond annotations. It also discloses the expiration behavior, adding valuable context that annotations do not provide.

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 three sentences with no wasted words. It front-loads the purpose, then gives the usage sequence and key constraints. Every 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?

The description covers the purpose, the follow-up action, the expiry, and clarifies side effects. Given the simple one-parameter schema and no output schema, 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?

The schema provides a clear description for playId ('The play to bind the seat to.'), covering 100% of parameters. The description does not add additional parameter-level semantics, so it relies on the schema, which is adequate. 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 states a specific verb ('connect') and resource ('LinkedIn account to a play'), and clearly distinguishes from siblings like gtm_linkedin_status by describing the action of generating a link. It also frames it as 'the one cockpit step the play cannot run without', which is unambiguous.

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 step-by-step instructions: hand the URL to the human, wait for confirmation, then call gtm_linkedin_status. It also explains the link's 15-minute expiry and that a fresh link can be requested, effectively telling the agent when to call again. This is a clear usage flow.

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

gtm_create_playCreate a play (draft)AInspect

Create a fully-configured play in one call: the product (an existing productId, or a websiteUrl which seeds one and kicks its research), the play itself, the ICP facets, which sourcing lanes are on, the autonomy ladder and the caps. Three rules are enforced server-side and cannot be talked around. (1) activate DEFAULTS TO FALSE — turning a play on spends the month's lead quota and takes real actions from the user's own LinkedIn account, so hand the human the returned cockpit link and let them press go. (2) A play with no live LinkedIn seat stays a draft whatever you pass. (3) Autonomy rules are written ONLY for the steps you name; every step you omit keeps gtmotto's own default, which is 'wait for a human'. Lanes that need their own seeds (post_engagers, competitor_posts, account_list) are refused if switched on without them.

ParametersJSON Schema
NameRequiredDescriptionDefault
icpNoThe audience, as plain strings — the same seven fields the cockpit's ICP screen fills. gtmotto compiles them into a LinkedIn search and normalises odd labels itself ('Swiss' → Switzerland, 'Fintech' → Financial Services).
goalNoWhat a conversation from this play should reach.
nameYesThe play's name.
voiceNoHow the messages should sound.
sourcesNoThe sourcing lanes to configure.
activateNoDefault false. True only starts it if a live seat is already connected.
autonomyNoOnly the rungs you name are written. Omitted rungs wait for a human.
dailyCapNoActions per day, all kinds summed. Defaults to the seat's full LinkedIn allowance (145), so pass it only to throttle. ACCOUNT-level: sets the ceiling every play on this LinkedIn account shares, not a per-play budget.
productIdNoAn existing product. Omit to create one.
websiteUrlNoSeeds a NEW product from this website and kicks its research.
productNameNoDefaults to the website's hostname.
workingHoursNoe.g. { start: '09:00', end: '18:00', tz: 'Europe/Paris' }. ACCOUNT-level, like dailyCap.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations are sparse (only hints, no side-effect detail), so the description carries the full burden. It discloses that activation spends quota and takes real LinkedIn actions, that a play without a live seat stays a draft, that autonomy rules default to human-wait, and that certain lanes are refused if misconfigured. This is far beyond annotation coverage and is unambiguous.

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?

Despite its length, every sentence is functional: it states the purpose, the single-call nature, and then three numbered rules that prevent common mistakes. The structure (rules and defaults) is easy to parse, and nothing is redundant with the schema.

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?

The description covers the main behavioral constraints, default values, and dependencies across parameters, and it even hints at the return value (the cockpit link). For a complex tool with nested objects and no output schema, this is thorough. Minor omissions like exact error messages or partial-success semantics are acceptable given the detail provided.

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 each parameter has its own description. The tool description adds cross-parameter meaning: the three server-side rules link activate, seat, autonomy, and sources; it explains that dailyCap is ACCOUNT-level and that autonomy only applies to named rungs. This goes beyond what the schema states individually, so it adds genuine value above 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?

The description opens with a precise verb and object: 'Create a fully-configured play in one call' and then enumerates the full scope (product, ICP, sourcing lanes, autonomy, caps). It clearly differentiates from update/read tools by implying creation of a new play, and the extensive list of sibling tools makes the distinction obvious.

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 strong contextual guidance: it explains when activation should be left to the human (default false), that a live seat is required, and which lanes need their own seeds. It stops short of explicitly naming alternative tools like gtm_update_play, but the intent is clear enough that an agent would not confuse creation with modification.

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

gtm_estimate_icpEstimate ICP sizeA
Read-only
Inspect

How big an audience a CANDIDATE ICP would reach — '≈ N companies match' — before committing to it. Writes nothing: no play, no ICP row, no cache. Use it to iterate (propose facets → see 40 → widen the locations → see 900 → then create the play). Returns null when the data provider has no key configured, which is not an error. Needs a write-scoped key only because it rides the gateway's action channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizesNoHeadcount bands, e.g. ['11-50', '51-200']
locationsNoe.g. ['France', 'Benelux']
industriesNoe.g. ['SaaS', 'Fintech']

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description adds specific guarantees: 'Writes nothing: no play, no ICP row, no cache.' It also discloses the null return when no data-provider key is configured and explains the write-scoped key requirement as a gateway quirk, not a real mutation. These details materially prevent agent confusion.

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 achieve a lot: the core question/result, the no-write guarantee, the concrete use case, the null edge case, and the auth nuance. Everything earns its place, and the most decision-relevant facts are front-loaded.

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 estimation tool with three optional filters, no output schema, and limited complexity, the description covers the return shape ('≈ N companies match'), the null case, side-effect behavior, and intended workflow. An agent has everything it needs to call this tool 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%: sizes, locations, and industries each have a description with examples. The tool description itself does not expand on parameter semantics, but the schema carries that load. The iterative example ('widen the locations') hints at how the locations parameter is used, but that is marginal beyond the 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 opens with the exact question the tool answers ('How big an audience a CANDIDATE ICP would reach') and the result format ('≈ N companies match'). It clearly scopes the tool to pre-commitment estimation, distinguishing it from sibling tools that create or update plays and ICPs.

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 an explicit iterative workflow: 'propose facets → see 40 → widen the locations → see 900 → then create the play.' This makes the when obvious (before committing, during iteration). It does not explicitly name a sibling alternative or spell out when-not-to-use, but the 'before committing' and 'then create the play' cues are strong.

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

gtm_forget_harvested_postsForget harvested postsA
Destructive
Inspect

The tuning escape hatch for the post lanes. A post lane remembers every post it already paid to harvest so it never buys the same engagers twice — which makes it impossible to TUNE: change the intent or a gate, run, and the answer is 'no new posts since last time'. This clears that memory so the next run (or gtm_run_source) judges today's posts against the new settings. It COSTS: every forgotten post is a fresh engager fetch. Call it only after a deliberate settings change the human wants re-tested. Only competitor_posts and post_engagers have this memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesWhich lane. people_search: LinkedIn people search compiled from the play's ICP (+ optional free-text keywords). | competitor_posts: Post discovery: Otto searches LinkedIn daily for posts matching an intent, judges each, and takes who engaged. | job_offers: Hiring signal: companies posting a role → the buyers inside them. | account_list: Companies you name (names, websites or LinkedIn page URLs) → Otto finds your buyers inside each. | post_engagers: RETIRED — folded into competitor_posts.postUrls. Still runs on rows that exist; do not configure it on new plays.
playIdYesThe play, from gtm_list_plays.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already mark destructiveHint=true, and the description goes well beyond that by explaining that it clears memory, causes a fresh engager fetch for every forgotten post, and affects only competitor_posts and post_engagers. It also warns about post_engagers being RETIRED, which is important behavioral context not visible from annotations alone. 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 longer than average, but every sentence earns its place: it explains the problem being solved, the mechanism, the cost, and the exact invocation condition. It is front-loaded with the core purpose ('The tuning escape hatch') before diving into mechanics, and the cost warning is placed before the usage rule.

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 destructive mutation tool with no output schema, this description covers what is needed: what memory is cleared, why it matters, what it costs, when to call it, and which lanes are affected. The input schema fully documents the parameters, so nothing an agent needs to correctly invoke this tool 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 the schema already provides detailed parameter descriptions, including the full enum and per-value explanations. The tool description adds the useful context that only competitor_posts and post_engagers actually have the memory being cleared, but it does not need to repeat parameter details since the schema covers them.

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 ('forget') and resource ('harvested posts' / post lane memory), and explains the exact effect: clearing the memory so the next run re-judges posts. It differentiates itself from sisters by framing itself as 'the tuning escape hatch for the post lanes' and noting that only competitor_posts and post_engagers have this memory.

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 is explicit about when to call it: 'Call it only after a deliberate settings change the human wants re-tested.' It also gives a strong why—without this, tuning is impossible because the lane remembers already-harvested posts—and a strong caution: 'every forgotten post is a fresh engager fetch.' That is clear decision guidance, including the cost of misuse.

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

gtm_linkedin_statusLinkedIn seat statusA
Read-only
Inspect

The play's LinkedIn seat and today's headroom against the LinkedIn limits. States: no_seat (nothing connected — the play cannot act), seat_broken (the account was disconnected or deleted; the queue is parked until a human reconnects), pending, classic, or sales_navigator (which search backend the ICP compiles to). Read-only. Connecting a seat is a browser flow — link the human to the cockpit for it.

ParametersJSON Schema
NameRequiredDescriptionDefault
playIdYesThe play whose seat to check.

TDQS

A4.4/5.0
Behavior5/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 significant behavioral context: explains each state meaning, notes that seat_broken parks the queue until human reconnection, and mentions 'today's headroom' which implies a daily limit check. This goes beyond the annotations and enriches agent understanding without contradiction.

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?

Two sentences pack the core purpose, state enumeration, and a crucial routing hint. No filler, information is front-loaded, and the read-only note is placed early. Very efficient.

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 status-check tool with a single parameter and no output schema, the description covers the states and the important 'browser flow' caveat. It might briefly clarify what 'headroom' means numerically, but the state list and overall behavior make the tool callable without ambiguity. Slightly short of perfect due to the implicit headroom definition.

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% for the single parameter playId, whose description is 'The play whose seat to check.' The tool description does not add any additional parameter semantics beyond what the schema already provides. Since the schema fully covers the parameter, 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+resource: checks the play's LinkedIn seat status and headroom. Clearly distinguishes from sibling actions like gtm_connect_linkedin by explicitly noting it is read-only and that connecting is a separate browser flow. The state list (no_seat, seat_broken, pending, classic, sales_navigator) provides concrete output expectations.

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: it is read-only and mentions that connecting a seat requires a human browser flow, effectively steering the agent away from using this tool for connection. However, it does not explicitly name an alternative tool (e.g., gtm_connect_linkedin) or provide a condition like 'use this when you need to check status'. The guidance is implied rather than explicit.

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

gtm_list_approvalsList drafted messages waiting for youA
Read-only
Inspect

Every drafted action that waits for the human — an invite note, a first message, a follow-up, a reply or a comment the planner wrote — with the draft, the 'why now', the lead, and a cockpit link. One play, or the whole workspace when playId is omitted. Show each draft to the human before gtm_approve / gtm_reject; never decide for them. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
playIdNoOne play; omit for all.

TDQS

A4.3/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 states 'Read-only' again. More importantly, it adds a behavioral rule beyond annotations: 'never decide for them', clarifying that the tool is for display only and the human must make the decision. This extra context is valuable for the agent to avoid automating approvals.

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 three sentences, each earning its place: the first defines the resource and its contents, the second covers the optional parameter, and the third gives workflow guidance and read-only status. There is no fluff or repetition, and the most important information is front-loaded.

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 read-only list tool with one optional parameter and no output schema, the description is complete: it enumerates what a returned item contains, explains how the playId filter changes scope, and situates the tool in the human-approval workflow. An agent has everything needed to call it correctly and interpret results without additional documentation.

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% – the schema already describes playId as 'One play; omit for all.' The description repeats this in slightly different words ('One play, or the whole workspace when playId is omitted') but does not add any new semantic details such as value formats, constraints, or behavior beyond the schema. This is a restatement rather than an addition, so it meets the baseline of 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?

The title and description clearly state the tool's verb and resource: it lists drafted messages awaiting human action, specifically naming the types (invite note, first message, follow-up, reply, comment) and the included context (draft, 'why now', lead, cockpit link). This distinguishes it from siblings like gtm_list_plays (which lists plays) and gtm_approve/gtm_reject (which act on drafts), leaving no ambiguity about what the tool 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?

The description tells the agent when to use this tool: 'Show each draft to the human before gtm_approve / gtm_reject; never decide for them.' This explicitly places the tool in the approval workflow and implies it should be used before any approve/reject call. It does not explicitly enumerate all alternative/not-to-use scenarios, but the context is strong enough for correct selection.

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

gtm_list_playsList playsA
Read-only
Inspect

Every play in the workspace with enough context to route on: which product it sells, whether it is active or paused, whether a LinkedIn seat is actually connected (seatConnected: false means the play cannot act, whatever its status says), and how its leads are spread across the pipeline stages. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/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 valuable nuance beyond that: it explains that seatConnected:false means the play cannot act regardless of its status, and it notes the pipeline stage distribution. This clarifies data semantics that annotations do not cover. It does not mention pagination or empty results, but that is minor for a no-parameter list tool.

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 with zero filler. The first sentence front-loads the purpose and the key contextual fields, the second confirms read-only behavior. Every word 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?

Given no output schema, the description provides the essential return fields (product, status, seatConnected, pipeline stage spread). It does not state the exact structure (e.g., array vs object) or mention limits, but for a simple list with no parameters and read-only annotations, the information is sufficient for an agent to call the tool and interpret the result 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?

There are zero parameters and schema coverage is trivially 100%. Per calibration, a baseline of 4 is appropriate for no parameters. The description adds no parameter-specific details because none exist; it correctly focuses on the output.

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 lists all plays in the workspace, specifying the exact fields provided (product, active/paused, seatConnected, pipeline stage distribution). It distinguishes itself from siblings like gtm_show_play (single play) and gtm_play_stats (statistics) by framing the output as 'enough context to route on.' This is a specific verb+resource with clear scope.

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

Usage Guidelines2/5

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

The description implies the tool is for getting an overview to make routing decisions, but it never explicitly contrasts it with alternatives like gtm_show_play or gtm_play_stats. There is no guidance on when to choose this over a more detailed view or when to avoid it. The agent must infer usage context from sibling names alone.

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

gtm_play_statsPlay statsA
Read-only
Inspect

The play's Stats screen: the pipeline (leads sourced → warmed → invited → new connections → conversations started) over four windows — all time, last 30 days, last 7 days, last 24 hours — each windowed count paired with the window before it as a percentage delta. 'Conversations started' counts real replies, never the openers Otto sent. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
playIdYesThe play to report on.

TDQS

A3.7/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 readOnlyHint: it clarifies the exact metric semantics, especially that 'conversations started' counts real replies and never Otto's openers. The 'Read-only' statement reinforces the annotation without contradicting it.

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 dense but every clause contributes: the pipeline definition, windowing, delta calculation, and the critical caveat about openers. It is slightly long but remains focused and front-loads the core purpose early.

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 carries the burden of explaining what the tool returns, and it does so well by describing the screen contents and metric definitions. It does not specify the exact output shape, but for a single-parameter read-only stats tool the level of detail is sufficient.

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 playId as 'The play to report on' with 100% coverage. The description does not add parameter-specific details, which is acceptable under the baseline since the schema carries the semantic weight.

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 clearly identifies the resource as 'the play's Stats screen' and enumerates the exact contents: the pipeline stages, four time windows, and percentage deltas. This distinguishes it from siblings such as gtm_show_play and gtm_list_plays, though the operation verb is implied rather than explicitly stated.

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

Usage Guidelines3/5

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

The description makes it clear the tool reports play statistics, so an agent can infer it is for metrics rather than general play management. However, it does not explicitly state when to use this tool versus alternatives like gtm_show_play, nor does it mention exclusions.

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

gtm_preview_sourcePreview a lane (dry run)A
Read-only
Inspect

Dry-run ONE lane: '≈ N people match' and a 10-person sample, WITHOUT inserting a lead, spending the day's budget or moving the run clock. Same query, same gates, same scorers as a real run, on up to 50 people — so what it shows is what a run would keep. size.precision is honest: 'exact' (the query ran out inside the probe), 'atLeast' (the probe filled up; LinkedIn reports no total) or 'unavailable' (no seat, no config, paused play — skipped says which). Reports the ICP facets LinkedIn could not filter on (unmapped), facet values it had no id for (unresolved), which sampled people are alreadyALead, and on account_list what each company resolved to. Costs provider calls and, when a gate is on, model tokens. Refused on a paused play.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesWhich lane. people_search: LinkedIn people search compiled from the play's ICP (+ optional free-text keywords). | competitor_posts: Post discovery: Otto searches LinkedIn daily for posts matching an intent, judges each, and takes who engaged. | job_offers: Hiring signal: companies posting a role → the buyers inside them. | account_list: Companies you name (names, websites or LinkedIn page URLs) → Otto finds your buyers inside each. | post_engagers: RETIRED — folded into competitor_posts.postUrls. Still runs on rows that exist; do not configure it on new plays.
playIdYesThe play, from gtm_list_plays.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark readOnlyHint and destructiveHint false, but the description goes far beyond that: it specifies exactly which side effects are avoided, notes that provider calls and model tokens are still consumed, and discloses refusal behavior on paused plays. This is rich transparency for a dry-run tool.

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 dense but every sentence adds value, from the core 'no side effects' statement to the output details and cost disclosure. It is slightly long and packs many technical terms into a few sentences, but the structure is logical and front-loaded with the most important 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?

With no output schema, the description does an excellent job of explaining what the tool returns: match count, 10-person sample, size.precision semantics, unmapped facets, unresolved values, alreadyALead flags, and account_list resolution. It also covers cost and refusal conditions, making it effectively complete for an agent deciding to call 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 coverage is 100%, including detailed descriptions for every key enum value. The description adds context about output semantics (size.precision, unmapped, unresolved) but does not need to re-explain parameters. Baseline 3 is appropriate since the schema already carries the parameter meaning.

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 scope: 'Dry-run ONE lane' and contrasts it with a real run by listing what it does NOT do. It clearly distinguishes the tool from gtm_run_source and other siblings by framing it as a side-effect-free preview with a 10-person sample.

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 clearly implies when to use this tool: when you want to see what a run would keep without committing a lead, budget, or run clock. It does not explicitly name sibling alternatives like gtm_run_source, but the dry-run framing and 'what a run would keep' provide strong contextual guidance. The refusal on paused plays also gives a concrete exclusion.

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

gtm_rejectReject a drafted messageA
DestructiveIdempotent
Inspect

Reject (skip) ONE drafted action by its approvalId. Nothing is sent; the planner records the decline and re-plans around it instead of proposing the same step again. Ask the human first, as for gtm_approve.

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesThe card to reject.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructive (destructiveHint=true) and non-read-only (readOnlyHint=false). The description adds valuable context: 'Nothing is sent' clarifies the impact, and 'records the decline and re-plans' explains the side effect. 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?

Two sentences, front-loaded with the core action and effect, and the usage guideline is placed efficiently. No redundant phrases or filler.

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 single-parameter tool with no output schema, the description covers the action, the side effect, and a usage precaution. It doesn't mention error cases or return values, but these are minor given the simplicity and annotation coverage.

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 description 'The card to reject' is vague, but the tool description clarifies that approvalId refers to a specific drafted action and is the identifier used to select it. This adds meaning beyond the schema, though it could be even more explicit about the format or source of approvalId.

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 (reject/skip), the target (one drafted action), and the identifier (approvalId). It also distinguishes from the sibling gtm_approve by noting the opposite effect, making the purpose 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?

Explicitly instructs to 'Ask the human first, as for gtm_approve', providing a clear usage condition. It also explains the consequence (records decline and re-plans) which informs when to use it. Lacks explicit when-not-to-use guidance, but the human-approval requirement is a strong signal.

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

gtm_run_sourceRun a lane nowA
Destructive
Inspect

'Run once now' — run ONE lane immediately through the same code the sourcing tick runs, with force: an OFF lane still runs (that is what run-once means while configuring), a DRAFT play still runs (how you try a lane before launch), a PAUSED play does not. REAL: provider calls are made, leads are inserted, the play's daily budget and the org's monthly lead quota are spent. Only call it when the human asked for a run in this conversation; to look without spending, use gtm_preview_source. Returns the run's funnel (scanned / dropped / droppedIntent / added / duplicates / capped), the unmapped ICP facets, and skipped + reason when it could not run (no_seat, needs_config, icp_empty, daily_cap, lead_quota, no_results, provider_error).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesWhich lane. people_search: LinkedIn people search compiled from the play's ICP (+ optional free-text keywords). | competitor_posts: Post discovery: Otto searches LinkedIn daily for posts matching an intent, judges each, and takes who engaged. | job_offers: Hiring signal: companies posting a role → the buyers inside them. | account_list: Companies you name (names, websites or LinkedIn page URLs) → Otto finds your buyers inside each. | post_engagers: RETIRED — folded into competitor_posts.postUrls. Still runs on rows that exist; do not configure it on new plays.
playIdYesThe play, from gtm_list_plays.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already flag destructive/world-changing behavior, but the description goes much further: provider calls are made, leads are inserted, budgets and quotas are consumed, OFF and DRAFT plays still run while PAUSED does not, and it enumerates skipped reasons. This fully discloses the operational impact beyond the annotations. No contradiction with annotations found.

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 orderly: a one-line summary, force behavior, real-world effects, call condition, alternative, and return shape. Every sentence earns its place, and the most important safety and differentiation information is front-loaded.

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 destructive tool with no output schema, the description is essentially complete: it states side effects, exceptional skipped reasons, return funnel fields, and the alternative for preview-only behavior. An agent has enough context to decide whether to call it and what to expect.

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 parameter semantics baseline is 3. The schema already documents the lane enum (key) and specifies that playId comes from gtm_list_plays. The description adds general run semantics but no additional per-parameter detail beyond what the schema 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?

The description is precise: 'run ONE lane immediately' through the production tick code, with explicit force semantics. It clearly names the resource (a lane) and the action (run), and distinguishes itself from gtm_preview_source, so an agent can identify this tool without ambiguity.

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 gives an explicit call condition: 'Only call it when the human asked for a run in this conversation.' It also names the alternative for non-spending lookups: 'to look without spending, use gtm_preview_source.' This is clear when/when-not guidance with no inference required.

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

gtm_set_sourceSwitch a lane on or offA
Idempotent
Inspect

Switch a lane on or off — the toggle on the Sources list. Switching ON a lane that has nothing to run on (no companies, no intent/anchors/posts, no role) is refused: configure it first. An empty ICP is not a refusal — people_search may go on ahead of the ICP and comes back blocked: icp_empty until gtm_update_icp fills it. Switching OFF never fails and creates nothing. The lane then runs (or stops running) on the daily cadence; nothing runs inside this call.

ParametersJSON Schema
NameRequiredDescriptionDefault
onYes
keyYesWhich lane. people_search: LinkedIn people search compiled from the play's ICP (+ optional free-text keywords). | competitor_posts: Post discovery: Otto searches LinkedIn daily for posts matching an intent, judges each, and takes who engaged. | job_offers: Hiring signal: companies posting a role → the buyers inside them. | account_list: Companies you name (names, websites or LinkedIn page URLs) → Otto finds your buyers inside each. | post_engagers: RETIRED — folded into competitor_posts.postUrls. Still runs on rows that exist; do not configure it on new plays.
playIdYesThe play, from gtm_list_plays.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true and destructiveHint=false. The description adds valuable context beyond that: switching ON is refused if the lane has no config, switching OFF never fails and creates nothing, and it describes the specific 'blocked: icp_empty' edge case for people_search. It also clarifies that the lane runs on a daily cadence but nothing runs during this call. This fully discloses behavioral traits without contradicting 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 a single paragraph of 4 sentences, each carrying specific, useful information. The core action is front-loaded, followed by edge cases and a clarifying note about cadence. No fluff or repetition — every sentence 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 mutation tool with no output schema, the description covers the essential edge cases: refusal on empty config, blocked state for people_search, non-destructive OFF, and that no execution happens inside the call. It does not mention the response format or return value, but that is often implicit and the tool's behavior is well defined. A brief note on what the call returns would push this to a 5.

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 67% (key and playId have descriptions; 'on' has none). The description compensates by explaining that 'on' toggles the lane and by elaborating on the key param's behavior, especially for people_search (running ahead of an empty ICP and returning blocked). It adds meaning beyond the schema's static enum descriptions, though the playId could use a bit more context. Overall, it bridges the gap effectively.

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 clear verb and resource: 'Switch a lane on or off' — the toggle on the Sources list. It distinguishes itself from siblings like gtm_run_source by explicitly noting that nothing runs inside this call, and it clarifies the scope (lane activation vs. immediate execution). This leaves no ambiguity about what the tool 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?

The description explains when to use this tool: to change the active state of a lane for the daily cadence. It does not explicitly name alternatives (e.g., gtm_run_source for immediate execution), but it implies that by stating 'nothing runs inside this call.' It also provides clear preconditions for switching ON and explains that switching OFF never fails, guiding the agent on expected behavior. A short explicit pointer to siblings would make it a 5.

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

gtm_show_playShow a playA
Read-only
Inspect

ONE play in full — everything needed to judge it or copy it into a better one: goal and voice, the account's daily cap and working hours (shared by every play on the seat), the ICP facets, the five sourcing lanes with their config and last run, the autonomy ladder (which rungs run alone and which wait for a human), the LinkedIn seat, and today's used/cap for the seat plus this play's share. Read-only. Pass a playId from gtm_list_plays.

ParametersJSON Schema
NameRequiredDescriptionDefault
playIdYesThe play to inspect.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and destructiveHint, so the safety profile is fully covered. The description repeats 'Read-only' but adds no new behavioral traits such as auth requirements, rate limits, or side effects. It does not contradict 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.

Conciseness4/5

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

The description is a single long sentence but is front-loaded with the primary purpose and then enumerates contents in a structured, scannable way. It is dense but efficient; a bulleted list would improve readability slightly.

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?

Since there is no output schema, the description compensates by listing all major data sections that will be returned: goal, voice, cap, working hours, ICP, sourcing lanes, autonomy ladder, LinkedIn, and usage. It omits error/not-found behavior, but that is a minor gap for a simple read-only inspection 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?

The schema only says playId is 'The play to inspect.' The description adds that playId should come from gtm_list_plays and clarifies what a play encompasses, helping the agent source a valid identifier and understand the object being referenced.

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 immediately establishes 'ONE play in full' and enumerates the exact content areas, making it unambiguous that this is a detailed single-play inspection tool. It clearly differentiates from siblings like gtm_list_plays (listing) and gtm_show_sources (sourcing only) by scope and depth.

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 instructs to 'Pass a playId from gtm_list_plays', giving a concrete workflow and prerequisite. It also states the intended use case ('judge it or copy it into a better one'), but it does not explicitly contrast with alternative tools for stats or sources, so it lacks exclusionary guidance.

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

gtm_show_sourcesShow sourcing lanesA
Read-only
Inspect

All five sourcing lanes of a play, configured or not — the read to make before touching any of them. Per lane: configured, on, the parsed config (defaults filled), the cockpit's summary (null = needs setup), blocked (why it cannot run, judged without running: needs_config / icp_empty / null), last/next run and the last run's funnel, addedToday, failures, and the lane's memory — accounts[] with found: true|false per typed company on account_list, harvestedPosts on the post lanes, the cached searches the model wrote on Post discovery. Play level: state is the same verdict the cockpit shows when the Leads table is empty (no_sources / paused / draft / no_seat / seat_broken / icp_empty / needs_config / lead_quota / never_ran / no_results / provider_error / added_nothing / ok), plus provider, seat, ICP facet count and the month's remaining lead quota. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
playIdYesThe play, from gtm_list_plays.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, but the description adds meaningful behavioral detail beyond that: it explains that blocked is judged without running, that state mirrors the cockpit's empty-Leads verdict, that config is parsed with defaults filled, and that summary null means needs setup. It also confirms read-only behavior explicitly without contradicting 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 long but information-dense: every clause contributes a distinct field or semantic needed to interpret the response. It front-loads the most important usage signal ('the read to make before touching any of them') before detailed return fields. With no output schema present, this density is justified and not padding.

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's rich response surface and the absence of an output schema, the description is remarkably complete: it covers per-lane fields, null semantics, blocked reasons, play-level state enum values, and quota details. An agent has enough context to invoke the tool and interpret its full 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?

The input schema fully documents the single parameter, playId, including where it comes from ('from gtm_list_plays'), so schema coverage is 100%. The description adds no parameter-specific detail, which is acceptable because the schema alone carries the necessary meaning; per the rubric this is 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?

The description clearly identifies the resource (all five sourcing lanes of a play) and the operation (showing/reading them), including the distinction that it covers configured or unconfigured lanes. It names itself as the read to make before touching any lane, separating it clearly from sibling mutation tools like gtm_configure_source, gtm_set_source, and gtm_run_source.

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 phrase 'the read to make before touching any of them' provides explicit guidance on when to call this tool: as a preparation step before mutation or execution. It does not enumerate exclusions or directly compare against alternatives like gtm_show_play or gtm_source_runs, but the positional guidance is clear enough for an agent to select it appropriately.

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

gtm_source_runsLane run historyA
Read-only
Inspect

The run history of ONE lane, newest first — the funnel over time (scanned → dropped by fit → dropped by intent → added / duplicates / capped), the ICP facets LinkedIn could not filter on, and the provider's status and message when it refused. Use it to tell 'the query returns nobody' from 'everyone was already a lead' from 'LinkedIn is rate-limiting the seat'. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesWhich lane. people_search: LinkedIn people search compiled from the play's ICP (+ optional free-text keywords). | competitor_posts: Post discovery: Otto searches LinkedIn daily for posts matching an intent, judges each, and takes who engaged. | job_offers: Hiring signal: companies posting a role → the buyers inside them. | account_list: Companies you name (names, websites or LinkedIn page URLs) → Otto finds your buyers inside each. | post_engagers: RETIRED — folded into competitor_posts.postUrls. Still runs on rows that exist; do not configure it on new plays.
limitNoRuns to return (default 10, max 50).
playIdYesThe play, from gtm_list_plays.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description adds rich behavioral context: newest-first ordering, the funnel stages ('scanned → dropped by fit → dropped by intent → added / duplicates / capped'), inclusion of ICP facets LinkedIn could not filter on, and provider refusal status/message. It also helps interpret the results, which is more than annotations alone provide.

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 three sentences, front-loaded with the core return content, followed by the practical diagnostic use case, and closes with the safety note 'Read-only.' No word is wasted; every 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?

There is no output schema, so the description itself must convey return semantics. It explains the funnel stages, the facets, and provider refusal info, plus the interpretation guidance. For a read-only diagnostic tool with three well-documented parameters, this is complete.

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 has 100% description coverage, with detailed explanations for playId, key, and limit. The tool description adds no further parameter-level semantics—it focuses on the output. Per the rubric, baseline 3 is appropriate when the schema carries the full 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 states a specific resource ('run history of ONE lane') with precise content (funnel stages, ICP facets, provider refusal status). It also contrasts with sibling tools by framing the diagnostic purpose ('tell 'the query returns nobody' from 'everyone was already a lead' from 'LinkedIn is rate-limiting the seat''). It is easily distinguishable from nearby tools like gtm_play_stats or gtm_show_play.

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 an explicit when-to-use with the three-way diagnostic phrase. It does not name alternative tools or provide when-not-to-use guidance, so it falls just short of the 5-level 'explicit when/when-not/alternatives' standard. The context is nevertheless clear and actionable.

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

gtm_sources_referenceSourcing lanes referenceA
Read-only
Inspect

THE REFERENCE for configuring sourcing lanes — read it before your first gtm_configure_source / gtm_set_source / gtm_run_source call. Every lane (people_search, competitor_posts a.k.a. Post discovery, job_offers, account_list, and the retired post_engagers), every config field with its meaning, default and cap, the fit/intent/post gates, what makes a lane runnable, how the 5-minute tick and the 24h cadence work, what a preview costs versus a run, and what this surface deliberately will not do. No backend call; safe to call any time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description explicitly says 'No backend call; safe to call any time', which is a concrete behavioral guarantee. It also discloses limitations by stating it covers 'what this surface deliberately will not do', adding transparency not present in structured metadata.

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 front-loaded with the key instruction ('read it before...') and is information-dense with no filler. However, it is a single long, run-on sentence that packs many topics together, so slightly better structuring would improve 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?

For a zero-parameter, read-only reference tool with no output schema, the description is remarkably complete: it states the purpose, enumerates covered topics, names the dependent sibling tools, clarifies cost/behavior, and explicitly notes non-goals. An agent has enough context to decide when and why to call 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?

The tool has zero parameters, so the baseline of 4 applies. There is no parameter semantics to add, and the description appropriately focuses on the reference content rather than parameter details.

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 identifies the tool as the reference for configuring sourcing lanes and enumerates its full scope (lanes, config fields, gates, cadence, costs, non-goals). It distinguishes itself from sibling operational tools by explicitly naming gtm_configure_source / gtm_set_source / gtm_run_source as calls that should follow reading this reference.

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 an explicit usage directive: read it before your first configure/set/run source call. It also states that it has no backend call and is safe to call any time, which tells the agent when it is appropriate to invoke without side effects. This is strong guidance for a reference tool.

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

gtm_update_icpUpdate the ICPA
Idempotent
Inspect

Change the ICP a play runs — the query behind people_search and the fit gate on every other lane. Seven string arrays, plain words (gtmotto normalises 'Swiss' → Switzerland, 'Fintech' → Financial Services itself): titles, seniority, languages, industries, sizes (headcount bands like '11-50'), locations, exclude ('never contact' — absolute). ONLY the facets you name change; the first write on a play forks its own ICP row from the product baseline (or a sibling play's row), so no other play's targeting is rewritten. Filling an empty ICP unblocks lanes parked on icp_empty and kicks the play's due lanes if it is active. Size a candidate first with gtm_estimate_icp.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizesNo
playIdYesThe play, from gtm_list_plays.
titlesNo
excludeNo
languagesNo
locationsNo
seniorityNo
industriesNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations, the description discloses key side effects: 'ONLY the facets you name change,' the first-write fork of an ICP row, and that no other play's targeting is rewritten. It also reveals normalization behavior ('gtmotto normalises 'Swiss' → Switzerland...') and the absolute nature of exclude. This adds substantial value and does not contradict the idempotentHint or destructiveHint 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 dense sentences, each serving a distinct purpose: core action, parameter meanings, and side effects/sequencing. The opening is front-loaded and the middle sentence, while long, contains only meaningful clauses. Slightly verbose in places, but no filler.

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 mutation with seven optional facets and subtle forking behavior, the description covers purpose, parameter semantics, side effects, and a linked sibling tool. It does not describe the response/return value or error cases, but the annotations and schema already cover the safety profile. Overall, the description is complete enough 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?

Schema description coverage is only 13%, so the description carries most of the burden. It enumerates all seven array facets and adds concrete semantics: 'sizes' are headcount bands like '11-50', 'exclude' means 'never contact' and is absolute, and values should be plain words subject to normalization. It does not enumerate valid values for every facet, but it provides enough clarity for constructing a valid call.

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: 'Change the ICP a play runs' and defines what the ICP is — 'the query behind people_search and the fit gate on every other lane.' It also distinguishes itself from broader play manipulation by noting 'no other play's targeting is rewritten,' making it easy to tell apart from tools like gtm_update_play.

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 sequencing guidance: 'Size a candidate first with gtm_estimate_icp.' It also provides situational context — filling an empty ICP unblocks lanes and kicks due lanes if the play is active. It does not explicitly state exclusions or when not to use it, but the guidance is sufficient for agent selection.

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

gtm_update_playUpdate, pause or launch a playA
DestructiveIdempotent
Inspect

Change a play's own knobs — name, goal, voice — its two switches, and the ACCOUNT's pacing (daily action cap, working hours: shared by every play on the LinkedIn account, not per play). paused: true is the human's stop button (nothing runs, nothing is sent); paused: false resumes. status: 'active' LAUNCHES a draft; status: 'draft' takes it back off the road. Seat rule, enforced server-side: no live LinkedIn seat ⇒ neither launch nor resume makes it active — it stays/falls back to draft and the note says so. Launching or resuming kicks the play's due lanes at once. Only launch, resume or raise the cap when the human asked for it in this conversation: an active play spends the month's lead quota and acts from the human's own LinkedIn account. Does not touch the autonomy ladder.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoWhat a conversation from this play should reach.
nameNo
voiceNoHow the messages should sound.
pausedNotrue = stop everything; false = resume.
playIdYesThe play, from gtm_list_plays.
statusNo'active' launches; 'draft' un-launches.
dailyCapNoActions per day, all kinds summed. ACCOUNT-level: the ceiling every play on this LinkedIn account shares. Defaults to the seat's full LinkedIn allowance (145).
workingHoursNoe.g. { start: '09:00', end: '18:00', tz: 'Europe/Paris' }. ACCOUNT-level, like dailyCap.

TDQS

A5/5.0
Behavior5/5

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

Despite having annotations (readOnlyHint=false, destructiveHint=true), the description adds critical behavioral context: pausing stops everything, status changes launch/unlaunch, the seat rule enforcement with fallback to draft, kicking due lanes on launch/resume, and the impact on monthly lead quota and acting from the human's account. This goes 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.

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, then details switches and account-level settings, then the seat rule, then usage caution. Every sentence adds meaningful information without redundancy. It is concise given the complexity of the 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?

Given the tool's complexity (8 parameters, nested object, account-level effects, and conditional behaviors), the description covers all necessary aspects: parameters, side effects, preconditions (seat rule), and when to use it. It even notes what it does not affect (autonomy ladder). No essential information is missing for an agent to call it correctly.

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

Parameters5/5

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

The description significantly enriches parameter understanding beyond the schema: it clarifies that dailyCap and workingHours are account-level (shared across plays), gives the default dailyCap (145), provides a workingHours format example, and explains the semantic difference between paused and status. This is valuable for correct invocation, especially since schema coverage is already high.

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: updating a play's own knobs (name, goal, voice), its two switches (paused, status), and account-level pacing settings. It distinguishes from siblings by explicitly saying it does not touch the autonomy ladder and by focusing on modification rather than creation or listing.

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 usage guidance: launch/resume only when the human asked in this conversation, and explains the seat rule that prevents launch/resume without a live LinkedIn seat. It also differentiates between per-play and account-level settings, and notes that it does not affect the autonomy ladder, helping the agent choose correctly among siblings.

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

gtm_whoamiWho am I, and what nextA
Read-only
Inspect

Who this key belongs to, and what the workspace may do: org name, plan, subscription status, how many products and plays exist, and the LEAD METER (leads added this calendar month, the plan's cap, and what is left). Start here — the remaining lead allowance is the one number that changes what is worth proposing. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 context by detailing the exact information returned: org name, plan, subscription status, counts, and lead meter details. It also explicitly restates 'Read-only.' There is no contradiction.

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 sentences with no filler: the first defines the tool's output, the second highlights the decision-driving metric, and the third confirms read-only safety. The most important guidance, 'Start here,' is front-loaded and every 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?

For a no-parameter, read-only status tool with no output schema, the description is complete: it tells the agent exactly what data will be returned and why the call matters before proposing actions. Nothing needed for correct invocation 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 has zero parameters and schema coverage is 100%, so the baseline is 4. There are no parameter semantics to add; the description appropriately focuses on the tool's output rather than inputs.

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 defines the tool as a workspace identity and capability snapshot: 'Who this key belongs to, and what the workspace may do,' then lists specific data points like org name, plan, subscription status, product/play counts, and the lead meter. The 'Start here' phrasing and aggregate nature distinguish it from sibling list/show/action tools.

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 an explicit invocation context: 'Start here — the remaining lead allowance is the one number that changes what is worth proposing.' This tells the agent when to call the tool, though it does not explicitly name alternative sibling tools or when-not-to-use conditions.

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. 21 tool updates
    • First observedgtm_approve
    • First observedgtm_configure_source
    • First observedgtm_connect_linkedin
    • First observedgtm_create_play
    • First observedgtm_estimate_icp
    • First observedgtm_forget_harvested_posts
    • First observedgtm_linkedin_status
    • First observedgtm_list_approvals
    • First observedgtm_list_plays
    • First observedgtm_play_stats
    • First observedgtm_preview_source
    • First observedgtm_reject
    • First observedgtm_run_source
    • First observedgtm_set_source
    • First observedgtm_show_play
    • First observedgtm_show_sources
    • First observedgtm_source_runs
    • First observedgtm_sources_reference
    • First observedgtm_update_icp
    • First observedgtm_update_play
    • First observedgtm_whoami

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    LinkedIn outreach from Claude, Cursor or ChatGPT: finds the right people, writes to them in your own voice, follows up and handles replies. For sales prospecting, recruiting, user-interview recruitment, job search and investor or partner outreach; campaigns stay drafts until you launch them.
    22
    4,216 PyPI
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables sending LinkedIn messages and invitations, reading conversations, and managing outreach through natural language by automating a real LinkedIn session via a Chrome extension.
    13 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.