Skip to main content
Glama
setluca

SetLuca

Official
by setluca

Luca for AI assistants

Luca helps coaches, creators, and experts manage the conversations that lead to sales. This connection lets you ask an AI assistant about your Luca workspace and get help with the work waiting there.

You can ask it to show what needs attention, find a lead's conversation before a call, draft a reply in your voice, or explain how a campaign is doing. It can also help plan your next campaign or follow up on calls that still need an outcome.

Your assistant must get your approval before it takes an action that reaches a lead, such as sending a message or launching a broadcast. Replies drafted by Luca still wait for your review in Luca.

Get connected

Luca works with assistants such as Claude, ChatGPT, and Cursor. Some connect through your Luca sign-in. Others use an API key you create in Luca. The public connection guide walks through both options and helps you choose the one your assistant supports.

Once connected, try asking:

  • "What needs my attention in Luca this morning?"

  • "Show me the review queue and recommend what to approve."

  • "Pull up everything about this lead before my call."

  • "Draft a short, warm reply for this lead."

  • "How is my broadcast performing?"

If a connection stops working, check the steps in the connection guide. You can manage or revoke connected assistants in Luca → Settings → Connected agents. You can revoke an API key in Luca → Settings → Developer API keys.

Related MCP server: LeadMind MCP

Your data and your choices

The assistant only sees what the Luca access you give it allows. This connection does not keep its own copy of your workspace data. It passes your requests to Luca and returns the results to your assistant. Review the privacy policy of any assistant you connect before sharing a live workspace with it.

Read Luca's privacy policy for details about how Luca handles your data.

For people building with Luca

Start with the documentation index. It points to setup, tool examples, the privacy and security guides, development instructions, tests, and release steps. AGENTS.md gives coding agents a short checklist. The changelog lists changes by version, including changes to tool names that may affect saved prompts.

You can browse the Luca API docs if you want to build a direct integration.

Available Tools

203 tools
luca_analytics_benchmarksRead peer benchmarksA
Read-onlyIdempotent

This coach's own cross-coach benchmark percentiles (e.g. 'top 15% for response speed among fitness coaches'), never another coach's data. comingSoon: true with an empty metrics list is the honest, expected state until the cross-coach benchmark pipeline populates this coach's row — never a fabricated comparison.

Luca operation: GET /api/analytics/benchmarks Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), and the description adds real context beyond them: required scopes (analytics:read, luca:read), 'data sensitivity: redacted', the fact that no idempotency key is required, and the expected pre-population state of the benchmark pipeline. That last point in particular prevents an agent from misreporting an empty result as an error or fabricating a comparison.

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 opening prose sentence is front-loaded with the core distinction and the comingSoon semantics before the metadata block, which is compact and scannable. Minor slack exists in the near-duplicate scope lines ('Required scopes: analytics:read' vs 'Required OAuth scope: luca:read') and the idempotency line, which largely restates idempotentHint.

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 an output schema present, return-value detail is correctly omitted, and the description supplies the pieces the schema cannot: required scopes, sensitivity level, workspace-override behavior, and the expected empty/comingSoon state. Complete enough to invoke correctly, though it stops short of naming adjacent tools an agent might confuse it with.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning the terse schema does not: it tells the agent these two parameters override 'the default workspace configured by environment', which explains why passing neither is valid. It does not explain precedence between workspaceId and workspaceSlug if both are supplied, which keeps it short of a 5.

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?

States a specific verb+resource ('cross-coach benchmark percentiles') and pins the scope hard with 'this coach's own... never another coach's data', reinforced by a concrete example ('top 15% for response speed among fitness coaches'). It is only slightly weaker than a 5 because it never names a sibling (e.g. luca_analytics_benchmark_consent) to route the agent away from related tools.

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?

Usage is implied rather than stated: the agent can infer this is the tool for peer percentile comparisons, and the note that 'comingSoon: true with an empty metrics list is the honest, expected state' is useful invocation guidance. There is no explicit when-to-use/when-not, and no differentiation from sibling analytics tools such as luca_analytics_benchmark_consent or luca_analytics_funnel.

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

luca_analytics_call_intelligenceRead call intelligenceA
Read-onlyIdempotent

Post-call intelligence for a period: show rate, close rate, average rating and rating distribution, call-to-close lag, repeat-call cohort, day-of-week and call-sequence show rates, and surprise patterns, derived from post-call events and coach-recorded outcomes.

Luca operation: GET /api/analytics/call-intelligence Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already establish the safe-read profile (readOnlyHint, idempotentHint, destructiveHint=false), and the description adds meaningful context beyond them: required analytics:read and luca:read OAuth scopes, redacted data sensitivity, and the provenance of the metrics (post-call events and coach-recorded outcomes). The 'does not require idempotency' line is redundant with idempotentHint=true but not contradictory.

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?

Purpose is front-loaded and the operational metadata is stacked compactly below. Slight redundancy between 'Required scopes: analytics:read' and 'Required OAuth scope: luca:read', plus the unneeded idempotency note, but overall it earns its space.

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 an output schema present, the description correctly avoids explaining return values, and it covers auth/scopes and data provenance for a read-only analytics call. The one material gap is the absence of any differentiation from the sibling luca_analytics_call_intelligence_calls, which an agent selecting among analytics tools would need.

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 67%: workspaceId and workspaceSlug already carry descriptions, while query.start/end do not. The description adds the override semantics for the workspace params and implies the start/end period via 'for a period', which partially compensates for the undocumented date-range params, but adds no format or default-window detail. Baseline 3 fits.

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?

States a specific resource (post-call intelligence) and enumerates the metrics returned: show rate, close rate, rating distribution, call-to-close lag, repeat-call cohort, day-of-week/sequence show rates, and surprise patterns. However, it never distinguishes itself from the near-identical sibling luca_analytics_call_intelligence_calls, so an agent cannot disambiguate the two from the description alone.

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 only guidance is a parameter tip (use workspaceId/workspaceSlug to override the environment default), which is invocation detail rather than usage context. There is no when-to-use, when-not-to-use, or alternative selection guidance against the many other analytics tools in the sibling list, especially luca_analytics_call_intelligence_calls.

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

luca_analytics_call_intelligence_callsList calls behind call intelligenceA
Read-onlyIdempotent

Most recent completed calls with a generated summary, newest first: the coach-facing summary, attendance outcome, rating, and lead name.

Luca operation: GET /api/analytics/call-intelligence/calls Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered; the description goes further by disclosing required scopes (analytics:read, luca:read), data sensitivity (full_content), the completed-with-summary filter, and newest-first ordering. This is useful behavioral context beyond the structured fields.

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

Conciseness4/5

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

Front-loaded with the resource and scope in the first sentence, followed by compact metadata lines. Efficient overall, though the boilerplate operation/idempotency lines are somewhat mechanical rather than decision-relevant.

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

Completeness4/5

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

An output schema exists, so return values need not be spelled out, and the description covers scopes, sensitivity, ordering, and workspace override. The only real gap is the undocumented limit semantics, otherwise it is complete enough for a read-only listing tool.

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 67%, with workspaceId/workspaceSlug already documented in the schema, and the description usefully explains the override intent ('override the default workspace configured by environment'). However the limit parameter (1–50, no default stated) is left undescribed in both schema and text, so it does not fully compensate.

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?

States a specific verb (List) and resource (calls behind call intelligence) and further narrows scope to 'most recent completed calls with a generated summary, newest first,' even naming the returned fields. That is clear enough for an agent to know what it retrieves, though it never contrasts itself with the related luca_analytics_call_intelligence or the call_events_* siblings.

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 implies when to use it (to surface recent, summarized, completed calls) and gives workspace-override guidance, but offers no explicit when-not or alternatives despite a very crowded sibling set of call/analytics tools. Usage is inferable but not routed.

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

luca_analytics_content_attributionRead which content brings leadsA
Read-onlyIdempotent

Per-content rollup (leads touched, qualified, booked, revenue) of attributed touches for a period. Content is attributed automatically from an Instagram comment or Story reply that carries a real media id, or tagged manually; an honest empty list means no content is attributed yet, not zero performance.

Luca operation: GET /api/analytics/content-attribution Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine value beyond that: how attribution is derived (Instagram comment or Story reply with a real media id, or manual tagging), the empty-list semantics, data sensitivity (redacted), and required scopes. These are behavioral facts an agent cannot get from 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 core purpose is front-loaded in the first sentence, followed by attribution mechanics, then a compact metadata block (operation, scopes, idempotency, workspace). Mostly efficient, though the 'Does not require idempotency' line is slightly redundant against the idempotentHint=true annotation and mildly confusing.

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?

An output schema exists, so return values need not be spelled out. Given that, the description covers the essentials: what is computed, how attribution works, the meaning of an empty result, scopes, and workspace targeting. Only the period enum values remain unexplained.

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 67%, so the baseline is 3. The description clarifies the workspaceId/workspaceSlug purpose as an override of the environment-configured default, which adds meaning. The 'period' parameter and its enum values carry no descriptive detail in either the schema or the description, leaving a gap.

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?

States a specific operation ('Per-content rollup') with the exact metrics returned (leads touched, qualified, booked, revenue) and the scope ('attributed touches for a period'). This is far more concrete than a tautology. It does not, however, differentiate itself from the close sibling luca_analytics_content_performance, which an agent would need to disambiguate against.

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?

Usage is only implied by the read-analytics framing. The description does add a useful interpretation rule ('an honest empty list means no content is attributed yet, not zero performance') and workspace override guidance, but it never states when to choose this over alternatives like luca_analytics_content_performance or luca_analytics_topic_performance.

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

luca_analytics_content_performanceRead content performanceA
Read-onlyIdempotent

Per-post rollup (reach, engagement rate, likes/comments/saves/shares, attributed leads/bookings/revenue) for each Instagram post, reel, story, or carousel over a period. Insight fields stay null until the coach's account grants Instagram insights access — read that as not connected yet, not zero engagement.

Luca operation: GET /api/analytics/content-performance Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is covered. The description adds genuinely non-derivable behavior: insight fields stay null until the account grants Instagram insights access 'read that as not connected yet, not zero engagement' — a critical interpretation hint that prevents a false zero-engagement reading. It also discloses required scopes and data sensitivity ('redacted').

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

Conciseness3/5

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

The lead sentence is front-loaded and information-dense, but it crams a long metric enumeration into one run-on. The operational block contains partly wasteful lines: 'Does not require idempotency' merely restates the idempotentHint annotation, and the endpoint path adds little for an agent choosing a tool.

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?

An output schema exists, so return shapes need not be described, and there are zero required parameters, lowering the burden. Between the metric list, the null-insights caveat, the workspace override note and the scope declaration, an agent has enough to call it correctly; only the missing differentiation from the related attribution/topic tools leaves a gap.

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 67% and all three parameters are named in the schema, including the workspace override semantics the description repeats verbatim. The description says the rollup happens 'over a period' but does not add meaning to the period enum (this_week, last_month, etc.) beyond what the schema already lists, so baseline 3 applies.

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?

States a specific verb and resource ('per-post rollup ... for each Instagram post, reel, story, or carousel over a period') and enumerates the metrics returned, which is far more than a restated name. However, it lists 'attributed leads/bookings/revenue' — material that overlaps heavily with the sibling luca_analytics_content_attribution — without any sentence distinguishing the two.

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?

Usage is implied by the metric inventory and the period parameter, but there is no explicit when-to-use statement nor any when-not guidance or named alternative among the many analytics siblings (content_attribution, topic_performance, benchmarks). The only actionable guidance ('Use workspaceId or workspaceSlug to override...') is parameter mechanics rather than tool selection.

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

luca_analytics_crm_sync_healthCheck CRM sync healthA
Read-onlyIdempotent

Aggregate CRM-sync health for the coach's post-call summaries: counts of synced, pending, local-only, failed, and permanently-failed pushes. All zeros is the honest, expected state for a coach with no synced summaries yet — never a fabricated status.

Luca operation: GET /api/analytics/crm-sync-health Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered; the description nonetheless adds real context beyond them: required scopes (analytics:read, luca:read), 'data sensitivity: redacted', the underlying GET endpoint, and that no idempotency key is needed. The idempotency line mildly duplicates idempotentHint=true, keeping this short of a 5.

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

Conciseness4/5

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

Purpose and the enumerated counters lead, followed by compact operational metadata lines (endpoint, scopes, sensitivity, idempotency, workspace override). Every line carries information, though the blocky metadata formatting is slightly heavier than prose would be.

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 annotations, a full output schema, and 100% param coverage, the description only needs to add auth/behavior context, which it does (scopes, redaction, default workspace). It is essentially complete for calling the tool correctly; the main omission is routing guidance against sibling CRM-health/sync tools.

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 earns above that by explaining the semantic role of both params — they override the default workspace derived from the environment, a fact absent from the schema's terse 'optional override' text.

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?

States a specific verb and resource (aggregate CRM-sync health) and enumerates the exact counters returned (synced, pending, local-only, failed, permanently-failed), which lets an agent predict the payload. It scopes the tool to the coach's post-call summaries, though it never explicitly contrasts itself with near-neighbors like luca_integrations_crm_connections_health or luca_integrations_crm_sync_runs_list.

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 line about all-zeros being the expected state for coaches with no synced summaries is useful interpretive guidance, and the workspaceId/workspaceSlug override sentence establishes a default-workspace behavior. However, there is no explicit when-to-use vs. an alternative (e.g., sync_runs_list for run-level detail), so usage is only implied.

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

luca_analytics_deep_diveRun a deep-dive analytics investigationA
Read-onlyIdempotent

Answer a specific business question by composing all seven analytics reads in one call: pipeline funnel, revenue and ROI, response-speed impact, a point-in-time revenue forecast, call intelligence (show/close rates), ghosted-lead recovery, and coach trust/auto-send status. Broader than luca_analytics_magic_monday (which is the fixed weekly report); use this when the coach asks a specific question that needs cross-referencing several of these numbers together. Example: call with {question: "why did close rate drop this month?", period: "this_month"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoPeriod for the period-scoped reads (funnel, revenue, speedImpact, callIntelligence, ghostedLeads, trustScore). Forecast ignores this — it is always point-in-time. Defaults to this_month.
questionNoOptional. The coach's question behind this investigation, e.g. 'why did close rate drop this month?'. Not sent to any API; it only records what the coach asked.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior. The description adds the aggregation trait (seven reads composed in one call) and notes the forecast is point-in-time, which is real context beyond the annotations, though it stops short of describing rate limits or auth requirements.

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

Conciseness4/5

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

Front-loaded with the core purpose, then differentiation, then a worked example. The seven-item enumeration is dense but each entry earns its place by defining the tool's scope; the text is slightly heavy but never wasteful.

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 an output schema present, return values need no explanation, and the annotations carry the safety profile. The description covers scope, aggregation behavior, differentiation, and an example, leaving nothing an agent needs in order to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents period, question, workspaceId, and workspaceSlug. The description's example shows period and question usage but adds no syntax or semantics the schema lacks, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb and outcome ('Answer a specific business question by composing all seven analytics reads in one call') and then enumerates exactly which reads are included. It explicitly distinguishes itself from luca_analytics_magic_monday, so an agent can separate the two without opening a schema.

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

Usage Guidelines5/5

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

Names the alternative (luca_analytics_magic_monday) and the condition that selects this tool instead: when the coach asks a specific question needing cross-referencing several numbers. The concrete example call reinforces when and how to invoke it.

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

luca_analytics_forecastRead the revenue forecastA
Read-onlyIdempotent

Point-in-time pipeline revenue forecast with on-track, optimistic, and conservative scenarios based on pipeline stage probabilities and historical conversion rates.

Luca operation: GET /api/analytics/forecast Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful operational detail beyond them: required analytics and OAuth scopes, redacted data sensitivity, and the fact that no idempotency key is required. It does not mention rate limits or freshness, so it is not a 5.

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

Conciseness5/5

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

The description is front-loaded with the core forecast concept, followed by concise operational metadata. Every line is useful and there is no redundant 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?

With an output schema present and rich annotations, the description sufficiently covers what the tool returns, required scopes, sensitivity, and workspace override behavior. An agent has enough information to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents both optional workspace parameters. The description adds meaning by explaining that workspaceId or workspaceSlug override the environment default workspace, which goes beyond the per-parameter schema text.

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 states a specific resource and output: a point-in-time pipeline revenue forecast with on-track, optimistic, and conservative scenarios. It does not explicitly differentiate this tool from sibling analytics tools like luca_analytics_revenue, so it falls short of the sibling-differentiation bar for a 5.

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 provides invocation prerequisites such as required scopes and how to override the default workspace, which implies usage context. However, it does not explicitly state when to choose this forecast tool versus alternatives such as luca_analytics_revenue.

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

luca_analytics_funnelRead the funnelA
Read-onlyIdempotent

Pipeline funnel stage counts with period and channel filters. Returns counts and conversion rates for each funnel stage plus period-over-period deltas.

Luca operation: GET /api/analytics/funnel Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent/destructive profile, and the description supplements it with genuinely useful context: required scopes (analytics:read, luca:read), data sensitivity (redacted), the underlying GET operation, and default-workspace override behavior. 'Does not require idempotency' is slightly redundant against idempotentHint=true but not contradictory.

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?

Purpose and return shape are front-loaded in the first sentence, followed by a compact metadata block. It is well organized with no wasted prose, though the trailing metadata lines are status boilerplate rather than decision-relevant.

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

Completeness4/5

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

An output schema exists, so return values need not be detailed in prose, and the annotations carry the safety profile. The description still names the return payload and documents auth/scoping, leaving little an agent needs to call it correctly 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 67% – the two workspace parameters carry descriptions while the nested period/channel properties show only enums with no prose. The description names 'period and channel filters', bridging part of that gap, but adds no format or default meaning beyond the schema.

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?

First sentence states a specific resource (pipeline funnel stage counts) plus the filters and returns (counts, conversion rates, period-over-period deltas). Clear and actionable, but it does not explicitly differentiate from sibling analytics tools such as luca_analytics_rollup or luca_analytics_deep_dive that could plausibly overlap.

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?

There is no statement of when to use this tool versus the many other analytics tools. The only usage-adjacent line is the workspace override note, which concerns parameters, not tool selection. An agent is left to infer fit from the name alone.

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

luca_analytics_ghosted_leadsAnalyze leads who stopped replyingA
Read-onlyIdempotent

Summarize leads who stopped replying during a period, including their count, follow-up recovery rate, estimated lost revenue, and common reasons conversations stalled. This is an aggregate report, not a list of individual leads.

Luca operation: GET /api/analytics/ghosted-leads Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description goes further by disclosing required scopes (analytics:read, luca:read), data sensitivity (full_content), and the absence of an idempotency-key requirement, which an agent needs before calling. It does not describe pagination or rate limits, but for an aggregate read that is minor.

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

Conciseness4/5

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

Front-loads the substance (what is measured, and that it is an aggregate) before the routing sentence and the operational metadata block. The operation/scope/idempotency lines are somewhat boilerplate but each carries actionable info; nothing is redundant with the annotations.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description instead covers scope, sensitivity, workspace resolution, and report shape. Remaining gaps are the optionality/defaults of period and channel, which the schema does not fill in either.

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 67% and the nested query object's period/channel enum properties carry no descriptions. The description mentions period filtering only in passing ('during a period') and never explains channel, so it does not compensate for the gap. It does add real meaning for the workspace override ('override the default workspace configured by environment'), which the schema alone does not convey.

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

Purpose5/5

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

States a specific verb and resource ('Summarize leads who stopped replying') and enumerates the exact outputs: count, follow-up recovery rate, estimated lost revenue, and stall reasons. The explicit contrast 'This is an aggregate report, not a list of individual leads' separates it from luca_leads_list and other list-shaped siblings.

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 ('during a period') and an explicit negative: it is an aggregate report, not a per-lead list, which steers agents away from list tools. It does not name a concrete alternative or state when to prefer this over neighboring analytics tools such as luca_analytics_loss_reasons or the action-oriented luca_rescue_silent_leads, so guidance stops short of the top mark.

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

luca_analytics_insightsList insightsA
Read-onlyIdempotent

The coach's proactive-insights feed (metric drops/spikes, opportunities, risks, milestones) surfaced by the daily insight-detection cron, newest first. Optionally filter to one status via the status query param (e.g. unread). An empty items list is the honest, expected state for a coach nothing has been flagged for yet — never a fabricated alert.

Luca operation: GET /api/insights Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds real behavioral context: the empty-list-is-expected semantics to prevent fabricated alerts, the data source/refresh cadence, required scopes, and 'data sensitivity: redacted'. It does not describe pagination/truncation behavior, which is a minor gap given the maxPages parameter.

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 prose portion is front-loaded and efficient, leading with what the feed is and following with the filter and empty-state caveat. The template metadata lines (operation, scopes, idempotency note) add bulk but each carries operational information; the 'Does not require idempotency' line sits awkwardly next to idempotentHint=true.

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 read-only list tool with an output schema, the description covers what the agent most needs: scope requirements, workspace override, ordering, and the honest-empty-state warning. It is essentially complete, with pagination behavior left to the schema.

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 75%, so several params (maxPages, workspaceId, workspaceSlug) are documented in-schema while nested query fields (limit, cursor, status) are not. The description explains the status filter's meaning and the workspace override, adding some value, but says nothing about limit/cursor pagination semantics, so the baseline 3 is right.

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 names a concrete resource (the coach's proactive-insights feed) and lists its content categories (metric drops/spikes, opportunities, risks, milestones) plus its source and ordering (daily cron, newest first). It clearly distinguishes itself from the mutation siblings (mark_read, dismiss, mark_actioned), though it never explicitly names the closest read sibling, luca_insights_unread_count.

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?

It states the optional status filter with an example ('unread') and how to override the default workspace, which is useful invocation context. However, it gives no explicit when-to-use/when-not guidance relative to alternatives such as luca_insights_unread_count or the triage/recommendations tools, leaving selection to inference.

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

luca_analytics_lead_scoreRead a lead's scoreA
Read-onlyIdempotent

Predictive booking-likelihood score (0-100) for one lead from the coach's trained bucket-rate model, with a confidence tier and the top contributing features. Honest about insufficient data: an under-trained model returns a null score and low confidence instead of a fabricated number.

Luca operation: GET /api/analytics/lead-score/{leadId} Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive/openWorld=false, but the description adds material behavioral context beyond them: the model admits insufficient data by returning a null score and low confidence rather than fabricating a value, notes data sensitivity 'redacted', and lists required scopes. This exceeds what the structured fields convey.

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

Conciseness4/5

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

The core value proposition is front-loaded in the first sentence, and the operational block (endpoint, scopes, idempotency, workspace override) is compact. The 'Does not require idempotency' line is somewhat redundant with idempotentHint=true, a minor waste.

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?

An output schema exists, so return structure needn't be explained, and the description covers scopes, workspace overriding, and the null/low-confidence edge case. It is essentially complete for a single-lead read; only explicit alternative-tool guidance 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 67%; workspaceId and workspaceSlug are already documented in the schema, and the description only restates their override role. leadId is required but has no textual meaning in either place, so the description does not fully compensate for the gap. 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: a predictive booking-likelihood score (0-100) for one lead, derived from a trained bucket-rate model, plus its return components (confidence tier, top features). This is highly distinctive; no sibling analytics or leads tool returns a per-lead model score, so an agent can identify it immediately.

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?

It gives usage context for the workspace override ('Use workspaceId or workspaceSlug to override the default workspace configured by environment'), which is helpful. However, it never states when to use this tool versus adjacent options such as luca_leads_explain or the other analytics tools, leaving that to inference.

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

luca_analytics_learning_insightsRead what Luca has learnedA
Read-onlyIdempotent

Read-only rollup of the agent-improvement signals mined from post-call feedback for a period: total/applied/pending signal counts, a per-type breakdown (qualification, objection handling, lead quality, general), and recent example notes. An empty rollup is the honest, expected state until the coach submits call feedback — never fabricated learning.

Luca operation: GET /api/analytics/learning-insights Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/destructive/openWorld, so the bar is lower; the description still adds required scopes (analytics:read, luca:read), data sensitivity redacted, the underlying endpoint, and the honest-empty-state behavior. It adds real operational context beyond 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?

Purpose and payload are front-loaded, then operational facts (endpoint, scopes, idempotency, workspace override) follow in compact lines. It is a bit list-heavy but every line carries information an agent can use.

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 an output schema present, return-value documentation is not strictly required, yet the description still summarizes the shape and the empty-state semantics. Auth, workspace targeting, and scope requirements are covered, making it complete enough to invoke 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 67%: workspaceId/workspaceSlug are documented in the schema, and the description mirrors that they override the environment default workspace. The start/end period parameters are only obliquely referenced via 'for a period' and left entirely to the schema, so the description adds little beyond structured fields.

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

Purpose4/5

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

The description states a specific verb+resource ('read-only rollup of agent-improvement signals mined from post-call feedback') and enumerates the payload (counts, per-type breakdown, example notes). It is clear about scope, but it never distinguishes itself from near-neighbors like luca_learning_panel, luca_learning_framework_performance, or luca_analytics_insights.

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?

It provides useful context that an empty rollup is the expected state until feedback is submitted, and notes workspace override, but it gives no explicit when-to-use or when-not-to-use guidance relative to the many sibling analytics/learning tools. Usage is implied rather than directed.

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

luca_analytics_loss_reasonsRead why deals are lostA
Read-onlyIdempotent

Category breakdown of automatic 'why you lost' analyses for a period: count and estimated lost revenue per category (price objection, ghosted after a call-to-action, competitor, slow reply, bad fit, other), derived from a per-lead loss analysis generated when a lead goes silent or lost.

Luca operation: GET /api/analytics/loss-reasons Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes beyond them by disclosing required scopes (analytics:read, luca:read), the redacted data sensitivity level, that idempotency is not required, and the data's provenance (derived from per-lead loss analysis generated when a lead goes silent/lost). Only rate limits or refresh cadence are absent.

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?

Purpose and category list are front-loaded in the opening sentence, followed by compact metadata lines (operation, scopes, idempotency, workspace override). Some density in the first sentence but no wasted 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?

With a rich output schema, annotations, and covered parameters, the description supplies the remaining essentials: auth scopes, sensitivity, and how the data is produced. Only the period semantics and sibling disambiguation are left implicit.

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 67%; both workspaceId and workspaceSlug already have their own descriptions, and the description merely restates the override behavior. The period parameter and its five enum values are not explained in the description, so it adds little beyond the schema.

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 names a specific resource (category breakdown of 'why you lost' analyses) and enumerates the exact categories returned plus the metric (count and estimated lost revenue). It is clearly not a generic analytics tool, though it never explicitly contrasts itself with close siblings like luca_analytics_objections or luca_analytics_ghosted_leads.

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?

Usage is only implied: it is a read analytics call for a given period, and the last line gives a concrete hint for overriding the default workspace. There is no statement of when to prefer this over the sibling loss/objection analytics tools, nor any exclusions.

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

luca_analytics_magic_mondayRead the weekly business reportA
Read-onlyIdempotent

Return the current week's business report (called Magic Monday in Luca): pipeline funnel, revenue and ROI, response-speed impact, a point-in-time revenue forecast, and call intelligence (show/close rates). Composes five analytics reads into a single call. Example: call with {} for the weekly report.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds useful context beyond them — the aggregation of five reads and the 'current week' time scope — but says nothing about cost, latency, or rate behavior of the composite call.

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?

Front-loads the core action and scope in the first sentence, enumerates contents compactly, then gives the empty-args example. No filler; every clause carries information.

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 an output schema present, return values need not be explained, and the description makes clear the scope is the current week and the call is optional-argument. Adequate for a zero-required-param read tool; only minor missing detail such as how workspace context is otherwise resolved.

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

Parameters3/5

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

Schema description coverage is 100% and both optional workspace override params are documented in the schema. The description's '{} for the weekly report' reinforces that no arguments are required, but adds no syntax or semantics beyond what the schema already provides. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Return the current week's business report'), enumerates the exact contents (funnel, revenue/ROI, speed impact, forecast, call intelligence), and explicitly says it composes five analytics reads. An agent can distinguish it from luca_analytics_funnel/revenue/forecast etc. purely from the description.

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 'Composes five analytics reads into a single call' plus the '{} for the weekly report' example tells the agent this is the aggregate entry point versus the individual analytics siblings. It stops short of an explicit 'use this instead of X when Y', so it is clear context without full routing rules.

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

luca_analytics_objection_drilldownDrill into one objection typeA
Read-onlyIdempotent

Per-conversation drilldown for one objection bucket: one row per matching conversation with the lead's display name, the verbatim objection quote, whether the draft was sent without an edit, and the lead's most recent call outcome. Bounded by a limit with a hasMore truncation flag; an empty list is the honest, expected state for a bucket with no conversations in the window.

Luca operation: GET /api/analytics/objections/{type} Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new operational context: required scopes (analytics:read, luca:read), full_content data sensitivity, limit-bounded results with a hasMore truncation flag, and the empty-state contract. Only return-format/pagination mechanics are left implicit.

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

Conciseness4/5

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

Front-loads the semantically valuable row-shape sentence, then groups the operational metadata (operation, scopes, idempotency, workspace override) in a compact block. Slightly boilerplate-heavy ('Luca operation: GET /api/...', 'Does not require idempotency') but every line is short and no sentence is wasted.

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

Completeness5/5

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

With an output schema present, the description need not restate return values, yet it still covers access prerequisites (both scope layers), sensitivity class, pagination behavior, the default-workspace override path, and the empty-state contract. For a nested-schema, read-only analytics tool this leaves nothing material an agent needs before calling it.

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

Parameters3/5

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

Schema description coverage is 50% (only workspaceId/workspaceSlug are documented). The description adds that limit bounds results, that hasMore signals truncation, and that workspace override is possible – but it says nothing about the period or channel sub-parameters or the objection type enum values, leaving half the surface to the schema.

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?

States a specific verb+resource ('per-conversation drilldown for one objection bucket') and enumerates the row shape (lead name, verbatim objection quote, draft-edited flag, latest call outcome), which makes it distinguishable from the aggregate sibling luca_analytics_objections without opening the schema. It never names that sibling explicitly, so the contrast is implied rather than 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?

Implies the use case (getting per-conversation detail behind one objection bucket) and notes the empty-list case is expected plus that workspaceId/workspaceSlug override the environment default. It gives no explicit when-to-use-this-vs-luca_analytics_objections routing or prerequisites beyond scope declarations.

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

luca_analytics_objectionsRead objection patternsA
Read-onlyIdempotent

Objection-bucket rollup over the review queue's qualifier signals for a period (price, timing, trust, fit, authority, smokescreen): per-bucket occurrence count, distinct leads, handled rate, wins, and up to three of the most frequent verbatim lead quotes. Filter by channel. An empty bucket list is the honest, expected state until objections are raised — never fabricated.

Luca operation: GET /api/analytics/objections Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, but the description adds real value beyond that: required scopes (analytics:read, luca:read), data sensitivity (full_content), workspace override behavior, and the notable empty-state expectation ('never fabricated'). It stops short of rate limits or pagination behavior.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence with the key output fields, followed by a compact metadata block (operation, scopes, idempotency, workspace override). Slightly dense but every line carries actionable information.

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 read-only analytics rollup with an output schema present, the definition covers scope, auth requirements, sensitivity, and the semantics of an empty result. Nothing critical to invoking it correctly appears to be missing.

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

Parameters4/5

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

Schema description coverage is 67%, and the description compensates by explaining that period governs the rollup window, that channel is a filter, and that workspaceId/workspaceSlug override the environment-configured default. It does not add format or default-value detail beyond the schema's enums.

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 names a specific resource (objection-bucket rollup over review-queue qualifier signals) and enumerates the exact buckets and output metrics, so the agent knows precisely what it returns. It does not explicitly name or contrast the closely-named sibling luca_analytics_objection_drilldown, so sibling differentiation is only implicit through 'rollup'.

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?

It gives a filter condition ('Filter by channel') and workspace override guidance, which implies usage context for an analytics read. However there is no explicit when-to-use/when-not guidance and no routing toward alternatives such as the drilldown variant.

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

luca_analytics_recommendationsRead recommendationsA
Read-onlyIdempotent

The coach's active prescriptive recommendations for a week (what to change and why), generated weekly from detected insights and deduped by title. An empty list is the honest, expected state when nothing is recommended for the window — never a fabricated action.

Luca operation: GET /api/analytics/recommendations Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description goes beyond that with the authorization surface (analytics:read, luca:read, full_content sensitivity), the weekly generation cadence, dedup semantics, and the empty-list expectation. It stops short of describing pagination or response shape, but the output schema exists for that.

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

Conciseness4/5

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

Front-loaded with the what-it-is sentence, followed by clearly delineated operational metadata on separate lines. The empty-state sentence is the one addition that carries genuine interpretive value. Slightly more surface area than needed, but nothing is 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?

With an output schema present, return values need not be described, and the description correctly focuses on auth scopes, workspace override, cadence and empty-state semantics. The remaining gap is routing: with dozens of analytics siblings available, the description never tells the agent which one to reach for instead.

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 67%, so the baseline is 3. The description usefully adds the default-workspace behavior and the override intent for workspaceId/workspaceSlug — a real semantic gain over the schema's terse "optional override" wording. It says nothing about weekStart or includeDismissed, which the schema also leaves undocumented, so a portion of the parameters remain opaque.

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 opening sentence gives a specific resource and scope: the coach's active prescriptive recommendations for a given week, deduped by title, generated from detected insights. An agent knows exactly what this returns. It does not explicitly distinguish itself from close siblings like luca_analytics_insights or luca_analytics_learning_insights, so a 5 is not warranted.

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 gives real interpretive guidance — an empty list is the expected, honest state and never a fabricated action — which is useful for an agent deciding whether to act. However, it never states when to prefer this tool over the many adjacent analytics siblings (insights, trends, learning_insights, objections). Usage is implied by the weekly-recommendation framing rather than addressed explicitly.

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

luca_analytics_revenueRead revenueA
Read-onlyIdempotent

Revenue attribution and plan ROI for a period. Returns total revenue, ROI, and a per-channel revenue breakdown.

Luca operation: GET /api/analytics/revenue Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint, openWorldHint), so the bar is lower; the description still adds auth requirements (analytics:read, luca:read), the redacted data sensitivity, and the workspace-override fallback behavior. It does not describe rate limits or pagination, but for a read-only endpoint that is a minor gap.

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

Conciseness4/5

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

Purpose and return shape are front-loaded in the first two sentences, followed by an operation/scope metadata block. No sentence is wasted, though the metadata reads as boilerplate stacked after the useful content.

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 an output schema present the description need not explain return values, and annotations cover safety, so purpose + auth scopes + workspace behavior covers most needs. The one missing element is differentiation from the many sibling analytics endpoints.

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 67%, and the description only lightly touches parameters: it says results are 'for a period' and explains workspaceId/workspaceSlug as overrides. The nested query.period and query.channel enums (five period values, four channels) are left entirely to the schema. Baseline 3 is appropriate given the medium coverage and modest descriptive contribution.

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

Purpose4/5

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

The description states a specific verb+resource: 'Revenue attribution and plan ROI for a period' and enumerates outputs (total revenue, ROI, per-channel breakdown). It's clear what the tool does, but it does not distinguish this from sibling analytics tools like luca_analytics_rollup, luca_analytics_forecast, or luca_analytics_content_attribution.

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?

There is no when-to-use / when-not-to-use guidance and no named alternatives despite a dense set of analytics siblings. The only operative sentence concerns workspace override parameters, which is parameter behavior rather than usage selection.

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

luca_analytics_rollupGet campaign and broadcast analyticsA
Read-onlyIdempotent

Roll up performance across the coach's campaigns (per-campaign analytics for up to 5 recent campaigns) and recent broadcasts. When one half fails to load, the other still comes back and failedSections names the one that is missing. Example: call with {} for the default rollup, or { campaignLimit: 3 }.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
campaignLimitNoHow many recent campaigns to include (default 5).
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely non-obvious behavior: a partial-failure mode where one half still returns and failedSections names the missing section, which is exactly the kind of operational context annotations cannot express.

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

Conciseness4/5

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

Three sentences, front-loaded with the purpose, then the failure behavior, then a concrete invocation example. Every sentence carries information, with only mild overlap against the schema's own default-limit note.

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 an output schema present, return-value documentation is unnecessary, and the description still flags the failedSections field for degraded responses. Scope, default behavior, and invocation are all covered; the only real gap is routing against sibling analytics tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents workspaceId, campaignLimit, and workspaceSlug, establishing a baseline of 3. The description only reinforces the default limit and gives a concrete example ({ campaignLimit: 3 }), adding marginal value over the schema.

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?

States a specific verb (roll up) and the two resources combined (per-campaign analytics for up to 5 recent campaigns plus recent broadcasts), so an agent knows the scope is a combined rollup. However, it never names or contrasts with the close sibling luca_campaigns_analytics, which also returns campaign performance, so the differentiation is left to inference.

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?

Usage is implied by the 'roll up' framing and the example invocation, giving a sense of what the tool is for. But there is no explicit when-to-use/when-not guidance and no routing to alternatives such as luca_campaigns_analytics or luca_broadcasts_list, despite many overlapping analytics siblings.

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

luca_analytics_speed_impactRead what reply speed is worthA
Read-onlyIdempotent

Fast-vs-slow first-reply booking-rate impact for a period. Returns fast- and slow-reply conversion rates, a lost-opportunity estimate, and the peak performance reply window.

Luca operation: GET /api/analytics/speed-impact Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds valuable context beyond annotations: the required analytics:read / luca:read OAuth scopes, redacted data sensitivity, and the fact that no idempotency key is needed.

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 purpose and returns are front-loaded in the first sentence, followed by compact operational metadata. The 'Does not require idempotency' line is marginally redundant given idempotentHint=true, but overall there is little waste.

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 read-only analytics tool with an output schema, the return values needn't be explained (though they are), and the description supplies scopes, sensitivity, and workspace override. The main gap is the unaddressed 'channel' filter and period enum values, but nothing critical for correct invocation 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 67% (mid-range). The description echoes the period dimension ('for a period') and explains the workspaceId/workspaceSlug override purpose, but the 'channel' filter is never mentioned in the description, so a parameter visible in the schema is not contextualized. Adds modest value over the schema.

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 names a specific analysis ('Fast-vs-slow first-reply booking-rate impact for a period') with a clear verb-like action and resource, and enumerates the concrete outputs (fast/slow conversion rates, lost-opportunity estimate, peak reply window). It is clearly distinct from funnel/revenue/forecast siblings by its narrow focus, though it never names an alternative to route the agent explicitly.

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?

Usage is only implied: 'for a period' plus the note to use workspaceId/workspaceSlug to override the environment default. There is no explicit when-to-use versus other analytics tools (e.g. ghosted_leads, benchmarks) and no when-not guidance.

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

luca_analytics_topic_performanceRead topic performanceA
Read-onlyIdempotent

Weekly rollup by normalized content topic (post count, average engagement rate, attributed leads/bookings/revenue per theme). Defaults to the most recently computed week when weekStart is omitted; an empty items list is the honest, expected state until content topics are extracted, not zero performance.

Luca operation: GET /api/analytics/topic-performance Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly, non-destructive, idempotent, closed-world, but the description adds real context: required scopes (analytics:read, luca:read), redacted data sensitivity, and the important semantics that an empty items list is expected until topics are extracted rather than a signal of zero performance. The idempotency note is about idempotency keys rather than operation semantics and is slightly at odds with idempotentHint=true wording, but it is not a true contradiction.

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

Conciseness4/5

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

Front-loads the rollup and its metrics, then layers defaults, state semantics, and auth in short sentences. Slightly boilerplate-heavy (operation path, idempotency line) but each line carries information.

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?

An output schema exists so return shape need not be explained, and the description still covers scope, sensitivity, default week behavior, workspace override, and the empty-result state. Complete enough for a read-only aggregate tool, with only sibling differentiation left implicit.

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 only 67%, and the undocumented parameter is weekStart; the description compensates by explaining its default-to-most-recent-week behavior. The workspace override parameters are documented in the schema, so the remaining description text adds marginal value there.

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?

Names a specific verb (weekly rollup) and resource (normalized content topic) and enumerates the returned metrics (post count, engagement rate, leads/bookings/revenue per theme). It does not explicitly distinguish itself from close siblings like luca_analytics_content_performance or luca_analytics_content_attribution, which an agent could easily confuse with a topic-level rollup.

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?

Gives useful operating context (weekStart defaults to the most recently computed week; workspaceId/workspaceSlug override the configured default workspace) but never says when to prefer this tool over the sibling content/attribution analytics tools. Usage is implied rather than stated.

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

luca_analytics_trust_scoreRead the trust scoreA
Read-onlyIdempotent

Draft approval, edit, and rejection rates plus the auto-send gate flag for a period.

Luca operation: GET /api/analytics/trust-score Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds genuine behavior-relevant context beyond them: required scopes ('analytics:read', 'luca:read'), the data sensitivity level ('redacted'), and the note that no idempotency is required — all useful to an agent planning the call.

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 human-readable purpose is front-loaded, followed by compact metadata lines (operation, scopes, idempotency, workspace override). Slight redundancy exists — 'Does not require idempotency' echoes the idempotentHint annotation — but overall it is tight and well-structured.

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?

An output schema exists, so return values need no prose explanation, and annotations carry the safety profile. Combined with the scope/sensitivity/workspace details, the description gives an agent enough to invoke it correctly; only the channel-filter semantics are left unaddressed.

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 67% (workspaceId/workspaceSlug are documented), but the nested period and channel enums have no descriptions. The prose repeats the workspace-override hint and mentions 'for a period', adding only marginal meaning beyond the schema and leaving the channel filter unexplained.

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 first sentence names a specific set of metrics ('draft approval, edit, and rejection rates plus the auto-send gate flag') and a scope ('for a period'), so the agent knows exactly what data this produces. It does not, however, explicitly differentiate itself from the many other analytics siblings (e.g. lead_score, funnel), which is the only reason it falls short of 5.

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 adds operational guidance — 'Use workspaceId or workspaceSlug to override the default workspace configured by environment' — which is actionable. But it never states when to reach for this tool versus the other analytics endpoints, and there are no exclusions or prerequisites beyond the scope note, so usage remains 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.

luca_approve_and_sendApprove a drafted reply and send itA
Destructive

Approve a pending review-queue draft and dispatch it through the lead's channel. THIS SENDS A REAL MESSAGE TO A REAL PERSON — only call it after a human has reviewed and intends to send. Pass confirm: true to proceed. Optional finalBody replaces the draft text before sending. Example: { reviewQueueId, confirm: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
finalBodyNoOptional edited body to send instead of the drafted text.
workspaceIdNoOptional Luca workspace id override.
reviewQueueIdYesThe review-queue item to approve.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoReuse the same key when retrying this exact approval.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already flag destructiveHint and openWorldHint, but the description adds critical context beyond them: the message goes to a REAL person, human review is mandatory, and confirm: true is a hard gate. This is exactly the kind of real-world impact and workflow constraint an agent needs before invoking a destructive send.

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

Conciseness4/5

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

Front-loads the action and the safety warning, then states the confirm requirement and an example. No filler. The example is short and reinforces the calling pattern; minor room to trim without losing meaning.

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?

An output schema exists, so return values need not be described. All six parameters are documented in the schema, and the description covers purpose, safety, and the confirm gate. It could note retry/idempotency behavior, but overall it is sufficient to call the 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 description coverage is 100%, so baseline is 3. The description restates confirm: true and that finalBody replaces the draft text, plus gives a usage example, but it adds little meaning beyond what the parameter descriptions already supply.

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?

States a specific verb and resource: 'Approve a pending review-queue draft and dispatch it through the lead's channel.' The action is unambiguous. However, it does not differentiate itself from the sibling luca_review_queue_approve, leaving the agent to infer how approve-and-send differs from plain approve.

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 a clear precondition: only call after a human has reviewed and intends to send, and requires confirm: true. This is a strong when-to-use gate, but no alternative tool (e.g. luca_review_queue_approve or luca_conversations_send) is named for cases where the draft should not be sent.

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

luca_book_callBook a call with a leadA
Destructive

Record a booked call for a lead in Luca. This does not create an event on the coach's calendar or send the lead an invite: book the call with the provider too, or have the lead book through the coach's booking link. Checks availability first, against the schedule of the booking type when bookingTypeId is given, and returns the open slots instead of booking when the requested one is taken. A call with an idempotencyKey skips that check so a retry gets the original result back. Booking moves the lead to booked and notifies the coach's webhook subscribers, so pass confirm: true only after the coach approves this exact slot. Example: call with { leadId, slotAt: "2026-07-14T15:00:00Z", confirm: true } after the lead agreed to a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYesThe lead to book.
slotAtYesISO-8601 start time for the call, with an offset.
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
providerNoThe coach's booking provider. Sent with the booking and used for the availability check. Pass it when the coach is not on Calendly, or the availability check reads the wrong calendar. Left off, the check reads Calendly and the API records the booking as manual.
workspaceIdNoOptional Luca workspace id override.
bookingTypeIdNoThe booking type to book under, from luca_bookings_types_list. Required when provider is google_calendar, and it must be an active google_calendar type.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoReuse the same key when retrying this exact booking. A keyed call skips the availability check and lets the API replay the first result.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the pre-flight availability check, the fallback of returning open slots when the requested one is taken, the idempotencyKey exception that skips the check, and the downstream effects ('moves the lead to booked and notifies the coach's webhook subscribers'). That is exactly the side-effect detail destructiveHint=true and openWorldHint=true only gesture at.

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

Conciseness4/5

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

Front-loaded with the most decision-critical constraint (no calendar event, no invite), then availability semantics, then confirm gating, then a concrete example. Dense but every clause carries operational weight; the example at the end is the only mildly expendable part.

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, open-world mutation with 8 parameters and a real output schema, the description covers side effects, preconditions, failure behavior, retry semantics and confirmation. There is no gap an agent would need to guess at.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: why provider matters for the availability read, that bookingTypeId must be an active google_calendar type, and how idempotencyKey changes retry behavior. It stops short of restating leadId/slotAt formats, which is fine because 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?

Names a specific verb and resource ('Record a booked call for a lead in Luca') and immediately draws the boundary against what it is not: it does not create a calendar event or send an invite. An agent can distinguish it from bookkeeping siblings like luca_bookings_create without opening the schema.

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

Usage Guidelines4/5

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

Explicitly states the precondition path ('book the call with the provider too, or have the lead book through the coach's booking link') and the confirm-gating rule ('pass confirm: true only after the coach approves this exact slot'). What is missing is any routing against the near-siblings luca_bookings_create, luca_bookings_availability and luca_reschedule_call, which an agent could easily confuse this with.

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

luca_bookings_availabilityRead open call slotsA
Read-onlyIdempotent

List open slots the coach can actually be booked into. Check this before booking.

Luca operation: GET /api/bookings/availability Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the bar is lower. The description still adds real value by disclosing required scopes (bookings:read, luca:read), data sensitivity (redacted), and the workspace override mechanism. The 'does not require idempotency' line is slightly redundant against idempotentHint=true but describes idempotency keys, not effect semantics, so it is not a genuine contradiction.

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 intent sentence is front-loaded and the metadata lines (operation, scopes, workspace override) are compact and scannable. No filler sentences, though the 'Does not require idempotency' line is marginally redundant with the annotations.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the annotations already cover the safety profile. The description completes the picture with auth scopes and workspace-override guidance, leaving only the sibling-differentiation gap.

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 67%, so the schema carries most parameter documentation. The description only clarifies the workspaceId/workspaceSlug override behavior and says nothing about the nested query filters (start, end, leadId, provider, timezone, calendarId, eventTypeId), leaving a gap the schema alone must fill.

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?

States a specific verb and resource ('List open slots the coach can actually be booked into') and even the intent behind it. However, it does not distinguish itself from sibling tools like luca_bookings_managed_availability or luca_bookings_types_schedule, which an agent could plausibly confuse with this one.

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?

'Check this before booking' gives one implied when-to-use condition, which is helpful context. But it names no alternatives and no exclusions, so an agent cannot tell from the description alone when to prefer this over luca_bookings_managed_availability.

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

luca_bookings_briefRead a pre-call briefA
Read-onlyIdempotent

Read the pre-call brief: who the lead is, what they want, and the objections to expect.

Luca operation: GET /api/bookings/{id}/brief Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the core safety profile is covered. The description adds valuable behavioral context beyond annotations: API operation, required scopes, OAuth scope, and data sensitivity 'full_content', which tells the agent this returns sensitive personal data. It does not describe the return shape, but an output schema exists.

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 purpose sentence and then provides structured technical metadata. It is appropriately sized for a simple read tool, though some operational notes (such as 'Does not require idempotency') are less essential given annotations and could be trimmed.

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 read-only endpoint with full annotations, an output schema, and three simple parameters, the description covers purpose, auth scopes, data sensitivity, and workspace override behavior. No critical information needed to invoke the tool correctly is missing.

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

Parameters4/5

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

Schema description coverage is 67%, with the workspaceId and workspaceSlug parameters already described. The description adds meaningful context by explaining that these parameters override the default environment-configured workspace. The required 'id' parameter is not described in the description, but its role is clear from the endpoint path and schema format.

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

Purpose4/5

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

The description states a specific verb and resource ('Read the pre-call brief') and elaborates on the brief's contents, making the tool's purpose clear. It does not explicitly differentiate itself from sibling tools such as luca_bookings_get, which likely returns broader booking details.

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?

Usage is implied by the purpose statement, but there is no explicit guidance on when to use this tool versus alternatives like luca_bookings_get or when a pre-call brief is available. The required scopes and workspace override notes add operational context but not selection guidance.

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

luca_bookings_calendars_listList connected calendarsA
Read-onlyIdempotent

List the calendars Luca reads for conflicts, and which one it writes new events to.

Luca operation: GET /api/bookings/calendars Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered; the description adds genuinely new context beyond that, namely required scopes (bookings:read, luca:read) and the 'data sensitivity: redacted' handling. The 'Does not require idempotency' line simply restates the annotation.

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?

Purpose is front-loaded in the first line, and the remaining metadata (endpoint, scopes) is scannable. One line, 'Does not require idempotency,' is redundant with idempotentHint=true and could be dropped, but the overall size is appropriate.

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 an output schema present, return values need not be explained, and the annotations cover the safety profile; the description fills in scope/auth requirements and default-workspace behavior. Only the absence of sibling-routing guidance keeps it from 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 description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: workspaceId/workspaceSlug are overrides of an environment-configured default workspace, which clarifies the default behavior an agent would otherwise have to guess.

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

Purpose5/5

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

States a specific verb (List), a specific resource (calendars Luca reads for conflicts), and adds a distinguishing detail: which calendar it writes new events to. An agent can place it against siblings like luca_bookings_calendars_select/remove without opening a schema.

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

Usage Guidelines3/5

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

Usage is implied (a read-only listing of connected calendars) and it does note when to use the workspace override, but it never states when to prefer this over the related calendars_select/calendars_remove siblings or what prerequisites exist. Guidance is present but shallow.

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

luca_bookings_calendars_removeRemove a booking calendarA
Destructive

Stop using a calendar for conflict checks or as the booking destination. The calendar itself is left alone in Google; only Luca's selection changes.

Luca operation: DELETE /api/bookings/calendars Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds genuinely non-obvious context: the Google calendar itself is untouched and only Luca's selection changes, which materially recalibrates how destructive the agent treats the call. It also discloses required scopes and the idempotency-key requirement for safe retries.

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

Conciseness4/5

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

Front-loads the most decision-relevant fact (the Google calendar is not deleted) before operational metadata. Slightly padded by infrastructure boilerplate (scope strings, 'data sensitivity: redacted'), but every block is scannable and 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?

With annotations covering safety and an output schema present, the description supplies the remaining essentials for a mutation tool: scopes, idempotency guidance, workspace targeting, and the true blast radius. Minor gap is the absence of an explicit pointer to the inverse calendars_select sibling.

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 75% and the schema already documents workspaceId, workspaceSlug, and idempotencyKey with essentially the same wording the description repeats. The body/calendarId parameter carries no added semantic detail in the description, so this is the baseline 3 where the schema does the heavy lifting.

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 opening sentence states a specific action (stop using a calendar) and narrows the resource scope to conflict checks and the booking destination, which cleanly distinguishes it from the inverse sibling luca_bookings_calendars_select. An agent knows exactly what state change this performs without opening the schema.

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

Usage Guidelines4/5

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

The description gives clear context for when the operation applies (removing a calendar from conflict checks or as booking destination) plus operational prerequisites (bookings:write, luca:queue_ops scopes, idempotency key, workspace override). It stops short of explicitly naming the alternative tools (e.g., calendars_select for the inverse action), so exclusions are left implicit.

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

luca_bookings_calendars_selectSelect a booking calendarA
Destructive

Add or update a calendar selection, either for conflict checks or as the destination new bookings are written to. The destination has to be writable: a read-only calendar returns 400, and a Google connection needing attention returns 409.

Luca operation: PUT /api/bookings/calendars Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Adds substantial context beyond annotations: required scopes (bookings:write, luca:queue_ops), the 400/409 failure modes, and the idempotency-key requirement with fallback generation. Annotations already cover safety/mutability, so this is genuine additive value rather than repetition.

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

Conciseness4/5

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

Front-loads the core purpose before the operational metadata. The scope/idempotency/workspace lines are terse and each carries distinct information, though the block form is slightly dense.

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 an output schema present, return values needn't be described. The description covers purpose, preconditions, error codes, scopes, and idempotency, leaving little an agent needs missing 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 coverage is 75% with descriptions on workspaceId, workspaceSlug, and idempotencyKey. The description reinforces the workspace override semantics and explains idempotencyKey's retry purpose, adding meaning beyond the nested body fields.

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?

States a specific verb and resource: adding or updating a calendar selection with two distinct modes (conflict checks or write destination). It clearly identifies the resource, though it doesn't explicitly contrast with the sibling luca_bookings_calendars_remove that also operates on this resource.

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?

Explains the two use modes (conflict checks vs. destination) and gives concrete preconditions: the destination must be writable, a read-only calendar returns 400, a Google connection needing attention returns 409. No explicit when-not or named alternative tool, but the context is clear.

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

luca_bookings_cancelCancel a bookingA
Destructive

Cancel a booking.

Luca operation: DELETE /api/bookings/{id} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is partly covered. The description still adds genuinely new context: required OAuth scopes, the data-sensitivity level, the hard confirm gate, and the server-generated idempotency key fallback. It stops short of saying whether a cancellation can be undone or what downstream effects it triggers.

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

Conciseness4/5

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

Front-loads the one-line purpose, then stacks short metadata lines (operation, scopes, idempotency, confirm, workspace) that are each scannable. Slight redundancy with the schema's own confirm and idempotencyKey descriptions, but no wasted prose.

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 destructive mutation with an output schema present, the description covers auth, the confirm gate, retry semantics and workspace scoping, so an agent has enough to call it correctly. The main remaining gap is the real-world consequence detail (reversibility, notifications/automations fired on cancel).

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 80%, so the baseline is 3, and the description earns a point above it by explaining that idempotencyKey exists for safe retries (or is auto-generated) and that workspaceId/workspaceSlug override the environment default. The id parameter's UUID semantics remain schema-only, but that is adequately documented there.

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

Purpose5/5

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

States a specific verb and resource ("Cancel a booking") and pins it to the concrete operation DELETE /api/bookings/{id}. Against siblings like luca_bookings_update, luca_bookings_get, and luca_bookings_lifecycle_resolution, an agent can immediately tell this is the cancellation path.

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 preconditions for calling it (required scopes, Idempotency-Key, mandatory confirm: true) and explains how to target a non-default workspace. It does not, however, name an alternative for related intents such as rescheduling or lifecycle resolution, so the agent must infer when cancellation is the wrong choice.

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

luca_bookings_createBook a callA
Destructive

Create a provider-neutral booking record. Body requires leadId and slotAt.

Luca operation: POST /api/bookings Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare destructive/openWorld, but the description adds real operational context: the strict confirm:true gate with rejection on omission, server-side idempotency-key generation for safe retries, required write scopes, and data-sensitivity level. This materially exceeds what the annotations convey and is consistent with them.

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

Conciseness4/5

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

Front-loaded with purpose, then broken into readable operational lines (endpoint, scopes, idempotency, confirm). Slightly verbose — the 'Destructive: has a real-world side effect' sentence restates annotation/schema content — but no serious waste.

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 destructive create with nested body, 5 params, and an output schema, the description covers the essentials: required body fields, confirm gate, idempotency, and workspace targeting. Return values need not be explained given the output schema; only sibling differentiation is thin.

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?

With schema coverage at 80% the schema already documents confirm, idempotencyKey, and workspace overrides, so the baseline would be 3. The description adds value by naming the required body fields (leadId, slotAt), the retry-key behavior, and the workspace-override intent, pushing it above baseline.

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?

States a specific verb and resource ('Create a provider-neutral booking record') that distinguishes record creation from read tools like luca_bookings_get/list. It does not, however, distinguish itself from the higher-level action siblings luca_book_call or luca_reschedule_call, and the generic title 'Book a call' overlaps with them.

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 gives prerequisites (confirm: true, idempotencyKey) and workspace-override context, which implies when the tool is callable. But it never states when to choose this vs. alternatives such as luca_book_call or luca_bookings_update, leaving sibling routing to inference.

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

luca_bookings_getGet a bookingA
Read-onlyIdempotent

Read one booking: its slot, status, provider, and lead.

Luca operation: GET /api/bookings/{id} Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/not-destructive/idempotent, so the description adds real value beyond them: the underlying operation (GET /api/bookings/{id}), required scopes (bookings:read, luca:read), the 'full_content' data sensitivity, and an explicit idempotency note. It omits pagination/field-expansion behavior, but the safety and auth profile is well covered.

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

Conciseness4/5

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

Front-loaded with the payload of the tool in one sentence, followed by clearly labeled metadata lines. Every line carries operational information; no filler or duplicated prose. Slightly boilerplate-heavy but appropriately sized.

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?

An output schema exists, so return values need not be explained, and the description supplies the operation, auth scopes, sensitivity, and workspace-override context. Only the ambiguity around workspaceId vs workspaceSlug precedence and item-level filtering keeps it short of full completeness.

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 67%, and the description's only parameter-relevant line restates the workspaceId/workspaceSlug override that the schema already documents. It adds nothing for 'id' (uuid/pattern) and doesn't clarify precedence when both workspaceId and workspaceSlug are supplied.

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?

States a specific verb and resource ('Read one booking') and enumerates the returned facets (slot, status, provider, lead). The word 'one' distinguishes it from the sibling luca_bookings_list, though no sibling is named explicitly.

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?

Usage is implied by the required 'id' and the single-item framing, but there is no explicit when-to-use guidance, no statement of when to prefer luca_bookings_list or luca_bookings_brief instead, and no exclusions. The workspace override note concerns parameters, not usage selection.

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

luca_bookings_lifecycle_attentionList bookings needing attentionA
Read-onlyIdempotent

List bookings where Luca's record and the provider's disagree and a human has to decide.

Luca operation: GET /api/bookings/lifecycle-attention Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent and non-destructive, so the bar is lower. The description still adds real operational context: required scopes (bookings:read, luca:read), full_content data sensitivity, and that no idempotency key is needed. It does not disclose pagination, result volume, or whether the disagreements are pre-filtered by severity.

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 distinguishing definition is front-loaded in one sentence, followed by a compact metadata block (endpoint, scopes, idempotency, workspace override). Most lines earn their place, though 'Does not require idempotency' is partly redundant against the idempotentHint annotation.

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 an output schema present, return values need not be described, and the description supplies the endpoint, auth scopes, sensitivity level and workspace override behavior. What remains thin is the relationship to the resolution/retry siblings and any hint about how many items or how often to re-check.

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

Parameters3/5

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

Schema coverage is 100%, so both optional parameters are already documented, giving a baseline of 3. The description's 'Use workspaceId or workspaceSlug to override the default workspace configured by environment' adds the useful fact that a default exists and these are overrides, but nothing about precedence when both are supplied.

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 first sentence gives a precise verb+resource and a genuinely distinguishing scope: bookings where Luca's record and the provider's disagree and a human must decide. That clearly separates it from luca_bookings_list and luca_bookings_needs_outcome. It stops short of naming the sibling it feeds into (luca_bookings_lifecycle_resolution), so it is not a 5.

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?

Usage is only implied: the agent can infer this is the read step before calling luca_bookings_lifecycle_resolution, but the description never says when to use this versus that resolution tool, nor whether it should be polled or is event-driven. No explicit when/when-not guidance is present.

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

luca_bookings_lifecycle_resolutionResolve a booking's lifecycle flagA
Destructive

Settle one booking whose record disagrees with the provider's: retry the sync, dismiss the duplicate, or keep Luca's version.

Luca operation: POST /api/bookings/{id}/lifecycle-resolution Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Adds real context beyond the annotations: required scope bookings:write, luca:queue_ops OAuth scope, full_content sensitivity, the Idempotency-Key requirement, and the mandatory confirm:true gate. These are operationally important disclosures the annotations alone (readOnly=false, destructive=true, idempotent=false) do not convey. It does not describe reversibility or what state changes actually occur.

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 intent sentence is front-loaded and the remaining operational requirements are broken into short, scannable lines. The API path and scope/sensitivity metadata are somewhat boilerplate-heavy but still earn their place for a write operation.

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?

An output schema exists, so return values need no explanation. For a destructive booking mutation with annotations, the description covers auth, idempotency, confirmation and workspace scoping, leaving only the precise body-shape semantics under-specified.

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 67%, so the schema already documents confirm, idempotencyKey and the workspace overrides, which the description largely restates. The core `body` parameter (status/action/reason enums) has no schema description, and the description's three-option phrasing only loosely maps to it, so it does not compensate for that gap.

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?

States a specific verb+resource ("Settle one booking whose record disagrees with the provider's") and enumerates three resolution outcomes, which distinguishes it from generic siblings like luca_bookings_update and luca_bookings_provider_sync_retry. However, the listed options ("retry the sync, dismiss the duplicate, keep Luca's version") map imperfectly onto the schema's actual enums (action=dismiss_duplicate, status=confirmed/cancelled/completed/no_show), so the naming of the alternatives is slightly imprecise.

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?

Gives an implied trigger condition (a booking whose record disagrees with the provider's) but never names a competing tool or says when NOT to use this one, even though luca_bookings_provider_sync_retry and luca_bookings_update are obvious neighbors. Usage is inferable but not routed.

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

luca_bookings_listList bookingsA
Read-onlyIdempotent

List bookings. Query supports limit, cursor, status, and upcoming.

Luca operation: GET /api/bookings Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, and the description adds genuinely non-structured context: required scopes, 'data sensitivity: full_content', and the workspace-override default. It omits any note on pagination/truncation behavior at the description level, though maxPages in the schema partially covers that.

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

Conciseness4/5

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

Front-loaded with the purpose, then compact metadata lines. Some lines ('Does not require idempotency') are near-redundant with the idempotentHint annotation, but nothing is verbose.

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 annotations, an output schema, and nested query schema already present, the description's remaining job is auth/scope and default-workspace context, which it supplies. The one real gap is filter value semantics for status and upcoming.

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 75% and the description names limit, cursor, status, upcoming, workspaceId and workspaceSlug, but never explains what values status/upcoming accept (no enums) and omits leadId entirely. It repeats schema-known parameter names rather than adding filter semantics.

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?

States a specific verb and resource ('List bookings') and even names the underlying operation (GET /api/bookings), so the agent knows exactly what happens. It does not, however, distinguish itself from nearby siblings such as luca_bookings_brief, luca_bookings_get, or luca_bookings_lifecycle_attention.

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?

It gives useful preconditions (scope bookings:read, luca:read) and tells the agent how to override the default workspace, but it never says when to choose this list over sibling retrieval tools like luca_bookings_get or luca_bookings_brief. Usage is implied rather than stated.

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

luca_bookings_managed_availabilityRead Luca-managed call slotsA
Read-onlyIdempotent

List open slots for one of Luca's own call types, with calendar conflicts already removed.

Luca operation: GET /api/bookings/managed-availability Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description still adds real value beyond them: that conflicts are pre-filtered out of the results, the OAuth scope requirement (luca:read), the data-sensitivity/redaction note, and that no idempotency key is needed.

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 key capability is front-loaded in the first sentence and the remaining lines are short metadata bullets. The 'Luca operation' and 'Does not require idempotency' lines are borderline boilerplate but compact, so nothing meaningfully bloats the definition.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and annotations plus the scope/workspace notes cover most operational prerequisites. What is missing is the disambiguation from luca_bookings_availability and any indication of time-range defaults or limits for a slot-listing call.

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 67%, so the schema does much of the work. The description explains the workspaceId/workspaceSlug override semantics and the environment-configured default, which goes slightly beyond the schema's terse 'Optional Luca workspace id override'. The required nested query fields (bookingTypeId, timezone, start/end) receive no explanation of format or defaults.

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 names a specific verb and resource — 'List open slots for one of Luca's own call types' — and adds the meaningful qualifier that calendar conflicts are already removed. It is clear on its own, but it never differentiates itself from the very similar sibling luca_bookings_availability, so an agent must guess which of the two to call.

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?

Usage is implied ('list open slots for one of Luca's own call types'), and the description adds prerequisite context via required scopes. However there is no explicit when-to-use vs when-not guidance and no mention of the near-identical luca_bookings_availability alternative, which is the single most important routing decision here.

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

luca_bookings_needs_outcomeList calls with no outcome recordedA
Read-onlyIdempotent

List attended calls with no outcome recorded yet. The work list for closing revenue attribution.

Luca operation: GET /api/bookings/needs-outcome Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

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, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: required OAuth scopes, 'data sensitivity: full_content', and the fact that no idempotency key is required. The phrase 'Does not require idempotency' sits in mild tension with idempotentHint=true (one describes the caller's obligation, the other the operation's nature), but it is not a contradiction.

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

Conciseness4/5

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

The purpose sentence is front-loaded and the operational metadata is compact and scannable. The 'Does not require idempotency' line is the one near-filler item, since annotations already carry idempotency semantics, but overall there is little waste.

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?

An output schema exists, so return values need not be described, and the description covers the remaining unknowns: auth scopes, sensitivity level, read-only nature, and workspace defaulting. Pagination or result-size behavior for this list is not mentioned, which is the only notable gap for a read-list tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema lacks: workspaceId/workspaceSlug are overrides of a default workspace configured by the environment. That fallback behavior is genuinely useful for deciding whether to pass either parameter at all.

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

Purpose5/5

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

The description states a specific verb and resource with a precise scope: 'List attended calls with no outcome recorded yet,' which cleanly separates it from luca_bookings_list (all bookings), luca_bookings_outcome_get (one booking's outcome), and luca_bookings_outcome_record (the write side). 'The work list for closing revenue attribution' adds the business intent, so an agent knows what this list is for without opening the schema.

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

Usage Guidelines4/5

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

Usage context is clear: this is the work list an agent pulls when it needs to close out revenue attribution, and the required scopes (bookings:read, luca:read) are stated as prerequisites. It does not name alternatives or state when not to use it (e.g. versus luca_call_events_needing_feedback), so it stops short of a 5.

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

luca_bookings_outcome_getGet a booking's outcomeA
Read-onlyIdempotent

Read where the sale stands on a booking, plus the version you send back to correct it.

Luca operation: GET /api/bookings/{id}/outcome Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower; the description still adds real context by listing required scopes (bookings:read, luca:read), noting data sensitivity is redacted, and confirming no idempotency key is needed. It does not describe error or not-found behavior, but the added auth/sensitivity detail is genuinely beyond the structured fields.

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

Conciseness4/5

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

The purpose sentence is front-loaded, followed by operation path, scopes, idempotency and workspace override as short scannable lines. Slightly boilerplate-heavy, but every line carries information and nothing is padded.

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?

An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description supplies the remaining essentials an agent needs: auth scopes, sensitivity, idempotency posture and workspace override semantics. Only minor gaps remain (no explicit sibling routing), so it is complete enough to call 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 67%: workspaceId and workspaceSlug are already documented as 'Optional Luca workspace ... override'. The description restates the override and adds the useful fact that the fallback is the environment-configured default workspace, but the required `id` parameter carries no description anywhere. Net value over the schema is marginal, matching the baseline 3.

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?

States a specific verb and resource ('Read where the sale stands on a booking') and adds the useful detail that it also returns 'the version you send back to correct it', which points at the optimistic-concurrency token consumed by luca_bookings_outcome_record. It stops short of naming sibling tools like outcome_history or outcome_record, so an agent must infer the boundary rather than read it.

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 mention of 'the version you send back to correct it' implicitly signals the read-before-update workflow, and the workspace override note gives a usage condition. However, there is no explicit when-to-use guidance or routing versus the many sibling outcome tools (history, record, reasons_list, needs_outcome), leaving alternatives to inference.

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

luca_bookings_outcome_historyRead a booking's outcome historyA
Read-onlyIdempotent

Read every outcome ever recorded on a booking, in order. Corrections append rather than overwrite.

Luca operation: GET /api/bookings/{id}/outcome/history Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety bar is low; the description still adds real value with 'Corrections append rather than overwrite' and the scope/data-sensitivity disclosures. It does not mention pagination or result volume for an 'every outcome ever' read.

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

Conciseness4/5

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

Front-loads the core behavior in the first sentence, then layers operation/scope/workspace metadata compactly. Slightly boilerplate-heavy but every line carries actionable information.

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?

An output schema exists, so return values needn't be described; scopes, auth, and workspace resolution are covered. Only the absence of pagination/volume hints for a potentially unbounded history leaves 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?

Schema coverage is 67% (id is undocumented, workspace params have descriptions), so the schema does part of the work. The description explains the workspaceId/workspaceSlug override against the environment-configured default, adding meaning the schema alone doesn't convey.

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?

States a specific verb and resource ('Read every outcome ever recorded on a booking, in order') and adds the append-only nuance. It is clearly distinguishable in intent, though it does not explicitly name the nearest sibling (luca_bookings_outcome_get) to contrast history-vs-current outcome.

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?

Provides operational context (required scopes, workspace override, idempotency not required) but gives no explicit when-to-use/when-not guidance versus outcome_get, outcome_record, or outcome_reasons_list. Usage is only implied by the 'history' framing.

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

luca_bookings_outcome_reasons_createCreate a loss reasonA

Add a lost-sale or cancellation reason in the workspace's own wording. A code already in use returns 409.

Luca operation: POST /api/bookings/outcome-reasons Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Going beyond the annotations, the description discloses a concrete failure mode (409 when the code is already in use), the required OAuth scopes (bookings:write, luca:queue_ops), and idempotency-key handling for retries. This is meaningful behavioral context that the structured fields do not carry.

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

Conciseness4/5

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

The core purpose is front-loaded in the first sentence, followed by compact operation metadata (endpoint, scopes, idempotency, workspace override). Well structured and largely waste-free, though the metadata lines are somewhat boilerplate.

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 an output schema present, return values need not be described, and the definition covers scopes, idempotency, conflict behavior, and workspace targeting. It omits a few body fields and any note on the kind enum's meaning, but is sufficient to invoke the 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 description coverage is 75%, so the schema largely documents the parameters. The description adds useful semantics to 'code' (uniqueness/409) and 'label' (workspace's own wording) and explains the workspaceId/workspaceSlug override, but says nothing about kind, displayOrder, or bookingTypeId.

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 opens with a specific verb and resource: 'Add a lost-sale or cancellation reason in the workspace's own wording.' This clearly distinguishes the create action from siblings like outcome_reasons_list and outcome_reasons_update, though it doesn't explicitly call those siblings out.

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?

Usage context is present but indirect: it explains the 409 behavior on duplicate codes, when to supply an idempotencyKey for safe retries, and how to override the default workspace. It never states when to use this tool versus the update/list siblings or what preconditions (e.g., existing code set) apply.

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

luca_bookings_outcome_reasons_listList loss reasonsA
Read-onlyIdempotent

List the reasons a sale can be lost or a call cancelled. Use one of these codes when recording an outcome.

Luca operation: GET /api/bookings/outcome-reasons Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, non-open-world. The description adds scope requirements (bookings:read, luca:read), data sensitivity, and the absence of an idempotency requirement, which is real context beyond the structured annotations. No caveats about pagination or result limits are given.

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 purpose is front-loaded in a single sentence, followed by the usage hint and compact operation metadata. The boilerplate scope/idempotency lines are justified as they carry information absent from annotations, though 'Does not require idempotency' borders on redundant for a GET.

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?

Output schema exists so return values need not be described, and the description covers auth scopes, workspace override, and safety. What is missing is any statement of the shape or size of the returned reason list and the meaning of the kind filter's third value.

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 67%: workspaceId and workspaceSlug carry their own schema descriptions, and the description reinforces the override behavior. The `kind` query parameter (lost_sale/cancelled_call/no_show) has no schema description, and the description only implicitly gestures at two of the three values, leaving no_show undocumented anywhere.

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?

States a specific verb and resource ('List the reasons a sale can be lost or a call cancelled'), which cleanly separates this reference-list tool from luca_bookings_outcome_reasons_create/update. It stops short of 5 because the schema's third enum value, no_show, is never mentioned, so the enumerated scope is under-stated.

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?

'Use one of these codes when recording an outcome' gives a concrete downstream usage context that tells the agent why to call it before luca_bookings_outcome_record. It does not name that sibling explicitly or state when not to call it, so it falls short of full alternative routing.

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

luca_bookings_outcome_reasons_updateUpdate a loss reasonA
Destructive

Rename, reorder, or archive an outcome reason. Archiving hides it from the picker and leaves recorded outcomes alone.

Luca operation: PATCH /api/bookings/outcome-reasons/{id} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds real value: archiving's non-destructive effect on existing outcomes, the required idempotency key with retry semantics, required scopes, and data sensitivity. That is meaningful behavioral context beyond the annotation flags.

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 functional sentence is front-loaded ahead of the operational metadata block, and each line earns its place. The scopes/sensitivity lines are dense but relevant to correct invocation.

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 an output schema present and annotations covering the safety profile, the description supplies the remaining essentials: mutation semantics, idempotency requirement, auth scopes, and workspace override. Only the body field mapping is left implicit.

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 60%, and the description implicitly maps its verbs to the body fields (label=rename, displayOrder=reorder, active=archive) without naming them, and restates the workspaceId/workspaceSlug/idempotencyKey semantics already documented in the schema. Adequate but adds little 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?

States specific verbs (rename, reorder, archive) against a specific resource (an outcome reason), and clarifies the archive semantics. An agent can distinguish this from siblings like luca_bookings_outcome_reasons_create or _list without opening a schema.

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

Usage Guidelines3/5

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

The description explains what archiving does (hides from picker, leaves recorded outcomes alone), which implies when to use it, but gives no explicit when-to-use/when-not guidance or named alternatives. Usage must be inferred from the operation list.

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

luca_bookings_outcome_recordRecord a booking's outcomeA
Destructive

Record what the call was worth: won, lost with a reason, or still open. Won and lost outcomes can update a connected CRM deal stage, so pass confirm: true for those outcomes. To correct an earlier outcome send the expectedVersion you read; a stale version returns 409 with the current one.

Luca operation: POST /api/bookings/{id}/outcome Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive when status is won or lost (can update a connected CRM deal): has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations it discloses that won/lost can propagate to a CRM deal stage, that the call is rejected without confirm, that a stale expectedVersion yields a 409 carrying the current version, and that an Idempotency-Key is required but auto-generated if omitted. It also states required scopes (bookings:write, luca:queue_ops) and redacted data sensitivity.

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?

Purpose is front-loaded and the metadata block is scannable. However, the confirm/CRM-deal point is stated twice (once in the opening, once in the 'Destructive when...' block), which is mild redundancy in an otherwise tight description.

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, versioned, authenticated write with an output schema present, the description covers the side effects, confirmation gate, concurrency control, idempotency, and workspace scoping. Nothing an agent needs to invoke it correctly is missing, and return values are correctly left to the output schema.

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?

With 67% schema coverage, the description carries real weight: it explains confirm's rejection behavior, expectedVersion's 409/stale semantics, idempotencyKey's retry role, and the workspaceId/workspaceSlug override. Body-level fields (amountMinor, currency, lossReasonDefinitionId) are only implied by the outcome enumeration.

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 opening sentence names a specific verb and resource and enumerates the three outcome states ('won, lost with a reason, or still open'), so the agent knows exactly what is being written. It does not explicitly name the sibling it differs from (e.g. luca_bookings_outcome_get, luca_bookings_outcome_history, or luca_call_events_undo_outcome), which keeps it short of a 5.

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

Usage Guidelines4/5

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

It gives conditional guidance: pass confirm: true for won/lost because those touch a connected CRM deal, and pass expectedVersion when correcting a prior outcome. It does not say when to prefer this over outcome_history/undo_outcome, so exclusions and alternatives are absent.

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

luca_bookings_providers_getGet a booking providerA
Read-onlyIdempotent

List the event types and calendars in one connected provider account.

Luca operation: GET /api/bookings/providers/{provider} Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds value beyond them: required scopes (bookings:read, luca:read), 'data sensitivity: redacted' for the returned data, and the workspace-override behavior. 'Does not require idempotency' is not a contradiction of idempotentHint=true (it means no idempotency key is needed), though the phrasing is loose.

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?

Purpose is front-loaded in the first sentence and the operational metadata is compressed into short labeled lines. There is mild boilerplate redundancy between 'Required scopes: bookings:read' and 'Required OAuth scope: luca:read', but nothing is padded.

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?

An output schema exists, so return-value shape needn't be documented, and annotations carry the safety profile. Combined with scopes, sensitivity level, and workspace-override semantics, the agent has enough to invoke it correctly; only the lack of routing guidance relative to sibling list tools leaves a gap.

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 67%: both workspace parameters carry their own descriptions, while the required `provider` enum (manual, calendly, cal_com, google_calendar, iclosed, gohighlevel) is undocumented. The description explains the meaning of the workspace override ('the default workspace configured by environment') but adds nothing about the provider enum values.

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 names a concrete resource ('the event types and calendars in one connected provider account'), so an agent knows what data comes back. It doesn't distinguish itself from sibling readers such as luca_bookings_providers_list, luca_bookings_types_list, or luca_bookings_calendars_list, and the 'list' framing sits awkwardly against the title 'Get a booking provider'.

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 only usage instruction is 'Use workspaceId or workspaceSlug to override the default workspace configured by environment,' which is real but narrow guidance. Nothing tells the agent when to call this instead of the providers/types/calendars list tools, so selection guidance is only implied.

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

luca_bookings_providers_listList booking providersA
Read-onlyIdempotent

List every booking provider, what each can do, and whether this coach's connection is healthy.

Luca operation: GET /api/bookings/providers Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is covered. The description adds genuinely new operational context: the underlying GET endpoint, the required bookings:read and luca:read scopes, and the 'redacted' data-sensitivity classification, which matters for an agent reasoning about what it may see.

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 purpose is front-loaded in the first line, followed by a compact block of endpoint, scope, idempotency and workspace notes. The 'Does not require idempotency' line is the weakest, but the metadata lines are terse and each carries an actionable fact.

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?

An output schema exists, so return values need not be described, and the annotations carry the safety profile. The description still supplies endpoint, auth scopes, data sensitivity and the workspace-override rule, leaving nothing an agent needs to invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description goes slightly beyond the schema by explaining that workspaceId/workspaceSlug override a default workspace 'configured by environment', which tells the agent why these params exist rather than just what they are.

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 opening sentence names a specific verb and resource ('List every booking provider') and then extends scope to include capability and connection health, which lets an agent distinguish it from the sibling luca_bookings_providers_get without opening either schema.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the call for enumerating providers and their health, and the last line explains how to override the environment-default workspace. There is no explicit when-to-use versus luca_bookings_providers_get, luca_bookings_provider_sync_retry, or the calendars list tools.

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

luca_bookings_provider_sync_retryRetry a booking's provider syncA
Destructive

Retry a failed write-back to the booking provider. A permanent failure returns 409 rather than retrying forever.

Luca operation: POST /api/bookings/{id}/provider-sync/retry Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing permanent-failure 409 semantics, the idempotency-key generation fallback, required OAuth scopes, data sensitivity, and the confirm: true gate. Annotations already flag destructive/openWorld, and the description adds real operational context on top.

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?

Purpose and failure semantics are front-loaded, followed by structured auth and parameter notes. Slightly boilerplate-flavored (scope lines, workspace override) but each line carries actionable information.

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 an output schema present and annotations covering the safety profile, the description covers what an agent needs: what it does, the confirm requirement, idempotency, and the 409 outcome. Only marginally missing is guidance on success side effects or preconditions of the retry.

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 80%, so the schema already documents confirm, workspaceId, workspaceSlug and idempotencyKey. The description mostly restates those in prose (server-generated key, workspace override) without adding format or behavioral detail the schema lacks.

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?

Starts with a specific verb+resource ('Retry a failed write-back to the booking provider') and names the exact endpoint, making it unmistakable from siblings like luca_bookings_update or luca_bookings_cancel.

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 'retry a failed write-back' clearly scopes when to use it, and the 409 behavior tells the agent when retrying is pointless. It stops short of naming an alternative tool or stating preconditions such as verifying the booking is actually in a failed state.

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

luca_bookings_types_attendeesList a call type's attendeesA
Read-onlyIdempotent

List the people invited to every call of this type, on top of the lead.

Luca operation: GET /api/bookings/types/{id}/attendees Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds value beyond them by disclosing required scopes, the redacted data-sensitivity level, and that idempotency keys are not required, all of which affect how the call should be made.

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 primary operation sentence is front-loaded, followed by compact metadata lines (operation, scopes, idempotency, workspace). Slightly boilerplate but every line carries operational meaning and nothing is padded.

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?

An output schema exists, so return values need not be described. For a read-only list tool the description covers scope, auth, sensitivity and workspace targeting; the only residual gap is the lack of a stated when-to-use versus the add/remove siblings.

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%, with workspaceId/workspaceSlug documented in the schema and the description reinforcing their purpose as overrides of the environment default. The required id is not explicitly described, but the phrase 'every call of this type' ties it to a call-type id, so semantics are largely clear.

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

Purpose5/5

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

The description states a specific verb (List) and resource (people invited to every call of this type), which is precise enough to separate it from its write siblings luca_bookings_types_attendees_add and _remove. The scope note 'every call of this type, on top of the lead' clarifies exactly which attendees are returned.

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 supplies prerequisites (bookings:read, luca:read) and workspace-override guidance, which are useful usage cues, but it never explicitly says when to choose this tool versus the add/remove/update siblings. The read-vs-write distinction is only implied by the sibling names.

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

luca_bookings_types_attendees_addAdd a booking type attendeeA

Add a standing attendee to one booking type, so they are invited to every call booked against it. Returns the full attendee list.

Luca operation: POST /api/bookings/types/{id}/attendees Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description adds real operational context: required scopes (bookings:write, luca:queue_ops), data sensitivity of redacted, the Idempotency-Key requirement with server-side generation fallback, and the fact that the full attendee list is returned.

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

Conciseness4/5

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

Front-loaded with the purpose sentence before the generated operational block, and every line is actionable (endpoint, scopes, idempotency, workspace override). Slightly dense with boilerplate metadata, but nothing is padded or redundant.

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 mutating, nested-body tool this covers the essentials: auth scope, idempotency handling, workspace targeting, and the effect on future bookings. With an output schema present it need not describe return values, though the body fields' semantics and duplicate handling remain unaddressed.

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 60%, so no automatic baseline applies. The description explains the idempotencyKey and workspaceId/workspaceSlug override behavior, but those are already documented in the schema descriptions, and it says nothing about the nested body fields (email, name, optional) or what the path `id` refers to. It therefore adds little meaning beyond the structured fields.

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

Purpose5/5

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

States a precise verb+resource ('Add a standing attendee to one booking type') and then clarifies the semantics that distinguish it: the attendee is invited to every call booked against that type. This separates it cleanly from luca_bookings_types_attendees (list) and luca_bookings_types_attendees_remove, and from per-booking guest handling.

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?

Usage is implied by the semantic explanation ('standing attendee ... every call booked against it'), so an agent can infer this is for permanent type-level attendees rather than one-off invites. However, there is no explicit when-to-use/when-not, no mention of the remove counterpart, and no guidance on duplicate-email behavior or whether the attendee must already exist as a lead.

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

luca_bookings_types_attendees_removeRemove a booking type attendeeA
Destructive

Remove a standing attendee from one booking type and get back the ones that are left. Calls already booked keep the invitees they were created with.

Luca operation: DELETE /api/bookings/types/{id}/attendees/{attendeeId} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
attendeeIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that: the idempotency-key requirement with server-side generation fallback, the required OAuth scope, and the fact that already-booked calls are unaffected.

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 behavioral sentence is front-loaded before the operational metadata, and nothing is padded. The scope/permission lines add some bulk but each carries distinct operational information.

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 an output schema present, return values need not be described, and annotations plus the description together cover safety, auth scopes, idempotency, and workspace override. Only edge behavior (e.g., removing a non-existent attendee) is left unstated.

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 60%; workspaceId, workspaceSlug and idempotencyKey are documented in the schema, and the description mostly restates their purpose. The two required parameters (id, attendeeId) have no descriptions, and the description only vaguely implies their roles via "booking type" and "attendee".

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

Purpose4/5

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

The description states a specific verb and resource ("Remove a standing attendee from one booking type") and clarifies that the removal applies to the booking type template, not existing calls. It is easily distinguished from the add counterpart, but it never names a sibling explicitly, so it falls just short of the top band.

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 line "Calls already booked keep the invitees they were created with" is genuinely useful scoping guidance that tells the agent the effect is template-level only. However, there is no explicit when-to-use framing or named alternative, so usage is implied rather than spelled out.

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

luca_bookings_types_createCreate a booking typeA

Define a bookable call: how long it runs, where it happens, and how it looks to the lead. Give it a schedule next — a booking type with no schedule offers no slots and will never appear in availability.

Luca operation: POST /api/bookings/types Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare write/destructive/openWorld/idempotent flags, so the bar is lower; the description still adds real behavioral context — required scopes, an Idempotency-Key requirement, and workspace override semantics. This goes beyond the structured annotations, though it doesn't detail what the response returns or failure modes.

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 core purpose is front-loaded in the first sentence, with the scheduling caveat immediately after, and the operational metadata is kept short. Every block (schedule note, endpoint/scope line, idempotency, workspace) earns its place, though the multi-line metadata is slightly dense.

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 an output schema present, return values need not be explained, and the description covers the key operational concerns (idempotency, workspace scoping, scope requirements) plus the critical schedule dependency. It remains thin on the complex nested policy objects, but it is adequate for a create tool of this shape.

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 75%, so the schema does most of the work; the description echoes workspaceId/workspaceSlug and idempotencyKey which the schema already documents, and loosely maps "how long/where/how it looks" to duration/location/name. It adds little meaning to the large nested agentPolicy/guestPolicy/provider fields.

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 names a specific verb and resource ("Define a bookable call") and characterizes the object's facets (duration, location, appearance), which maps clearly to a create operation. It also references the schedule sibling, hinting at its boundary with luca_bookings_types_schedule, though it doesn't explicitly distinguish itself from types_update or types_list.

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

Usage Guidelines4/5

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

It gives clear context for use and a sequencing cue ("Give it a schedule next") plus the consequence of skipping that step (no slots, never appears in availability), which is effectively a when-to-use prerequisite. No explicit when-not or named alternative, so it falls short of a 5.

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

luca_bookings_types_deleteDelete a booking typeA
Destructive

Remove a booking type and get back the types that are left. Calls already booked against it are not cancelled.

Luca operation: DELETE /api/bookings/types/{id} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds substantive context beyond them: existing bookings survive the deletion, the response is the remaining type list, and write scopes are required. One tension remains — it advertises 'safe retries' via Idempotency-Key while the annotation sets idempotentHint=false, leaving the retry semantics slightly ambiguous.

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 destructive consequence and return value are front-loaded in the first sentence, with scopes and idempotency details after. The REST path and scope lines are somewhat boilerplate, but the description remains short and nothing is buried.

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?

An output schema exists, so return values need no further explanation, and the annotations cover the safety profile; the description fills in scopes, idempotency and workspace override. The only gap is whether deletion is blocked when bookings reference the type — it is implied not to be, but not stated as a rule.

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 75% and already documents workspaceId, workspaceSlug and idempotencyKey. The description still earns credit by explaining that the workspace parameters override an environment-configured default and that the server generates a key if omitted — context the schema does not supply. The required `id` parameter is left unaddressed but is self-evident from the operation path.

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

Purpose5/5

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

States a specific verb and resource ('Remove a booking type') plus an observable outcome ('get back the types that are left'), which cleanly separates it from the create/update/schedule siblings on the same resource. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Gives real decision context by warning that calls already booked against the type are not cancelled, which is exactly what an agent needs before deleting. It does not, however, name an alternative (e.g. types_update to deactivate instead) or state preconditions for deletion, so it stops short of explicit when-not guidance.

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

luca_bookings_types_listList call typesA
Read-onlyIdempotent

List the call types a booking can use, with their duration and provider.

Luca operation: GET /api/bookings/types Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, and the description usefully adds the required OAuth scopes (bookings:read, luca:read), the redacted data-sensitivity level, and that no idempotency key is needed. That is genuine context beyond the structured fields, though return shape and pagination are left unaddressed.

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?

Purpose is front-loaded in the first sentence, followed by compact metadata lines (operation, scopes, idempotency, workspace override). Nothing is bloated, though the 'Does not require idempotency' line partly restates the idempotentHint annotation.

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 an output schema present, the description needn't document return values, and annotations cover the safety profile; the added auth scopes, sensitivity, and workspace-default semantics make it sufficiently complete for a two-parameter read tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining that workspaceId/workspaceSlug override the environment-configured default workspace. That default-behavior context is not obvious from the schema's 'Optional ... override' phrasing alone.

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 gives a specific verb and resource ('List the call types a booking can use') and even previews the returned fields (duration, provider), so the purpose is unambiguous. However, it never names or contrasts a sibling (e.g., luca_bookings_providers_list or luca_bookings_types_create), so it lands at 4 rather than 5.

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?

Usage is only implied by the operation name and scopes; there is no explicit when-to-use or when-not-to-use statement, nor a pointer to an alternative tool for related data. The workspace-override sentence is parameter guidance rather than routing guidance.

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

luca_bookings_types_scheduleRead a call type's scheduleA
Read-onlyIdempotent

Read a call type's weekly schedule: the hours it can be booked and its time zone.

Luca operation: GET /api/bookings/types/{id}/schedule Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description goes further by disclosing the underlying operation (GET /api/bookings/types/{id}/schedule), the OAuth scope requirement, the redacted data sensitivity, and that no idempotency key is required. Only return-level behavior (what an unconfigured call type yields) is left unstated.

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?

Purpose is front-loaded in the first sentence, followed by short scannable lines for operation, scopes, idempotency and workspace override. No sentence is redundant with another, and the format maps directly onto how an agent decides and calls.

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 read-only tool with an output schema, the description needs only to establish identity, auth scope and workspace resolution, all of which are present, and it does not waste words explaining return values. It lacks the one routing sentence that would separate it from availability/schedule-replace siblings, keeping it short of fully complete.

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

Parameters4/5

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

With 67% schema description coverage the schema already documents the two workspace parameters, and the description adds the key semantic the schema lacks: that workspaceId/workspaceSlug are overrides of an environment-configured default workspace. The required id parameter is only named via the URL template, which is a minor gap.

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 gives a specific verb (Read) and resource (a call type's weekly schedule) plus the payload contents (bookable hours and time zone). It is clearly distinguishable from mutating siblings such as luca_bookings_types_schedule_replace and from luca_bookings_availability, but it never names an adjacent sibling to sharpen the boundary.

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?

It supplies required scopes (bookings:read, luca:read) and the condition under which workspaceId/workspaceSlug should be used, which is useful precondition context. However it never states when to prefer this tool over luca_bookings_availability or the other schedule-related siblings, so the when-to-use guidance remains implied.

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

luca_bookings_types_schedule_replaceReplace a booking type scheduleA
Destructive

Replace a booking type's schedule outright. Send every rule and override you want to keep — anything left out is dropped, which is also how you clear a day. Read the current schedule first unless you mean to start over.

Luca operation: PUT /api/bookings/types/{id}/schedule Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, but the description goes further by explaining the exact destruction mechanism ('anything left out is dropped'), how to clear a day, the idempotency-key retry behavior, and the required OAuth scopes. This is rich behavioral context beyond the structured hints.

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

Conciseness4/5

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

Front-loads the destructive replace semantics in the first sentence and keeps the guidance tight. The trailing operation/scope boilerplate is somewhat mechanical but structured and skimmable.

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 complex nested-object mutation with an output schema (so return values needn't be explained), the description covers the critical semantics, auth, and idempotency. Only fine-grained field-level meaning of rules/overrides is left to the schema.

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 60% and the description adds real meaning: it clarifies that rules and overrides are the payload to send in full, and explains idempotencyKey and the workspaceId/workspaceSlug overrides. It stops short of detailing the weekday/minute fields, but compensates well 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?

States a specific verb and resource ('Replace a booking type's schedule outright') and the destructive full-replacement semantics distinguish it from siblings like luca_bookings_types_schedule (read) and luca_bookings_types_update. An agent can tell what this does without opening the schema.

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

Usage Guidelines4/5

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

'Read the current schedule first unless you mean to start over' gives clear usage context and the intent-based exception. It doesn't explicitly name the sibling read tool, but the conditional guidance is actionable and correct.

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

luca_bookings_types_updateUpdate a booking typeA
Destructive

Update only the fields you send on one booking type. Sending location replaces the whole location, because its shape depends on the type.

Luca operation: PATCH /api/bookings/types/{id} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing required scopes, data sensitivity, workspace override behavior, idempotency-key requirements, and — most valuably — that `location` is fully replaced rather than merged, which explains the destructiveHint. Minor tension: idempotentHint=false while an idempotency key is required, which could confuse an agent about retry safety, but it is not a contradiction.

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

Conciseness4/5

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

Front-loads the two facts that matter (partial update, location replacement) in a short opening, then a compact metadata block. The idempotency sentence partially repeats the schema's own description of idempotencyKey.

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 annotations and an output schema present, the description covers the remaining unknowns an agent needs: auth scopes, workspace scoping, retry key, and the one surprising field behavior. Nothing blocking is missing 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 coverage is 60%, and the description compensates on the highest-risk parameter by explaining location's replace-not-merge semantics and echoing workspace/idempotency overrides. The deeper nested objects (agentPolicy, guestPolicy) still carry no explanation in either place, so it is not fully compensating.

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?

States a specific verb and resource ('Update only the fields you send on one booking type') and pins down PATCH partial-update semantics. It distinguishes itself from related booking-type tools like delete/schedule by scope, though it never names a sibling directly.

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 partial-update rule ('update only the fields you send') plus the note that sending `location` replaces it wholesale gives real guidance on how to call it. But there is no explicit when-to-use/when-not or routing to alternatives such as create, delete, or schedule_replace.

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

luca_bookings_updateReschedule or edit a bookingA
Destructive

Reschedule or update booking status.

Luca operation: PATCH /api/bookings/{id} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description is consistent with them while adding real context: required scopes, 'full_content' data sensitivity, the fact that a missing idempotency key is auto-generated, and that the call is rejected outright without confirm: true. It stops short of explaining what a reschedule does to downstream automations or calendar sync, which would be the remaining useful trait for a destructive booking mutation.

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?

Purpose is front-loaded in one line, followed by tightly scannable key:value operational lines with no filler. The only waste is the destructive/confirm sentence, which is duplicated nearly verbatim in the confirm parameter description in the schema.

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

Completeness3/5

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

An output schema exists, so return values need no coverage, and safety/auth/idempotency are all addressed. What is missing for a tool with this much nested-input complexity is any explanation of the body payload — an agent can invoke it safely but must guess how to actually express a reschedule versus a status edit.

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 67%, so the schema carries most of the documented parameters (confirm, workspaceId, workspaceSlug, idempotencyKey all have descriptions). The description adds nothing about the nested body, and the core reschedule semantics — which of endAt/slotAt/timezone to set versus status for a status change — are left entirely to inference across eight undocumented body fields.

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?

States a specific verb and resource (reschedule/update a booking) and even gives the underlying operation (PATCH /api/bookings/{id}). However it never distinguishes itself from closely-named siblings such as luca_bookings_cancel or luca_reschedule_call, so an agent cannot tell from the description alone which booking mutation is the right one.

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?

Operational prerequisites are spelled out (scopes, confirm: true, idempotency key, workspace override), but there is no guidance on when to choose this tool over luca_bookings_cancel, luca_bookings_create, or luca_reschedule_call. Usage is implied by the PATCH endpoint rather than explicitly reasoned about.

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

luca_broadcasts_approveApprove a broadcastA
Destructive

Approve a safe broadcast draft and snapshot recipients.

Luca operation: POST /api/broadcasts/{id}/approve Required scopes: broadcasts:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Adds real behavioral context beyond the annotations: required scopes (broadcasts:write, luca:queue_ops), full_content data sensitivity, the Idempotency-Key requirement, and that recipients are snapshotted. These are not derivable from the readOnly/destructive/idempotent hints alone. It stops short of describing what approval irreversibly commits or the exact side effects.

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

Conciseness4/5

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

Front-loads the purpose in the first line, then layers structured metadata (operation, scopes, idempotency, workspace) in short, scannable sentences. Slightly boilerplate-heavy but every line carries operational information.

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?

An output schema exists so return values need no description, and the entry covers auth scopes, idempotency, and workspace context for a 5-param mutation. The main gap is that the required previewVersion input, which gates the approval, is unexplained at the description level.

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 60%, and the description usefully explains idempotencyKey ('safe retries, or server generates one') and the workspaceId/workspaceSlug override. However, the crucially required body.previewVersion param and the bare id param get no description-level explanation, leaving the schema-only gap unclosed. Baseline 3.

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?

States a specific verb+resource ('Approve a safe broadcast draft and snapshot recipients'), naming the exact operation POST /api/broadcasts/{id}/approve. It is distinguishable from siblings like luca_broadcasts_preview and luca_broadcasts_launch, though it never names those siblings explicitly.

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?

Provides operational prerequisites (required scopes, idempotency key, workspace override) but no when-to-use vs when-not guidance relative to adjacent tools such as launch, preview, or pause. Usage is implied rather than stated.

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

luca_broadcasts_cancelCancel a broadcastA
Destructive

Cancel a draft, approved, running, paused, or failed broadcast.

Luca operation: POST /api/broadcasts/{id}/cancel Required scopes: broadcasts:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), and the description adds real value on top: required scopes, the idempotency-key requirement with retry semantics, and the full_content data sensitivity. It stops short of stating whether cancellation is reversible or what happens to in-flight sends.

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 purpose is front-loaded in the first sentence, followed by operation path, scopes, idempotency, and workspace override in a tight, scannable block. No filler sentences, though the scope/data-sensitivity line is somewhat dense.

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?

An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description supplies the remaining operational essentials (auth scopes, idempotency, workspace targeting), leaving only the reversibility question open for a destructive operation.

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 a middling 60%, with workspaceId, workspaceSlug, and idempotencyKey already documented in the schema. The description adds meaningful context by explaining the workspace override ('override the default workspace configured by environment') and retry behavior, but says nothing about the body.reason parameter.

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?

States a specific verb (cancel) and resource (broadcast) and enumerates the valid source states (draft, approved, running, paused, failed). This clearly separates it from sibling verbs like pause, retry, launch, and approve, though it never explicitly contrasts cancel with pause.

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 state list implies when the operation is valid, which is useful context. However, there is no explicit guidance on when to cancel versus the closely related luca_broadcasts_pause, nor any when-not conditions or prerequisites beyond the required scopes.

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

luca_broadcasts_createCreate a broadcastA

Create a broadcast draft. Body requires campaignId and name.

Luca operation: POST /api/broadcasts Required scopes: broadcasts:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover read-only and destructive safety, while the description adds required scopes, OAuth scope, data sensitivity, idempotency-key retry behavior, and workspace override behavior. It does not describe side effects beyond draft creation, but it adds substantial operational context beyond 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?

Purpose is front-loaded, followed by operation, auth, idempotency, and workspace details. Some lines duplicate schema descriptions, but the structure is clean and largely earns its space.

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 nested-schema mutation with an output schema, the description supplies endpoint, scopes, idempotency behavior, and workspace override guidance. It leaves segment and personalization details to the schema, which is acceptable but not fully rich.

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 75%, so the baseline is 3. The description restates that body requires campaignId and name, and repeats workspace/idempotency semantics already present in the schema, without adding much for the complex segment object.

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 the specific verb and resource: "Create a broadcast draft." The draft qualifier distinguishes it from siblings such as launch, approve, preview, and cancel.

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?

Usage is implied by "draft" and the sibling set, but there is no explicit when-to-use guidance or named alternative. The agent can infer the create-before-launch flow but is not directly told.

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

luca_broadcasts_getGet a broadcastA
Read-onlyIdempotent

Get broadcast detail.

Luca operation: GET /api/broadcasts/{id} Required scopes: broadcasts:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context beyond them: the exact OAuth scopes required, the 'full_content' data sensitivity level, and the fact that no idempotency key is needed.

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?

Front-loads the one-line purpose, then a compact set of metadata lines (operation, scopes, sensitivity, idempotency, workspace override). No sentence is redundant and the retriable/safety facts are parsed easily.

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 annotations carrying the safety profile and an output schema existing, return values need not be described. Auth requirements, workspace override, endpoint mapping and idempotency are all covered; the only gap is error/not-found behavior and explicit sibling routing.

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% (id is undocumented in the schema) and the description fills that gap meaningfully, explaining that workspaceId/workspaceSlug override the environment-configured default workspace. That default-vs-override semantics is not derivable from the schema text alone.

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?

States a specific verb+resource ('Get broadcast detail') and maps it to the concrete operation GET /api/broadcasts/{id}. It clearly reads as a single-resource fetch, distinguishing it implicitly from luca_broadcasts_list, but it never names a sibling or contrasts itself explicitly with preview/list/approve.

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?

Gives useful preconditions (required scopes broadcasts:read and luca:read, no idempotency key needed, workspace override behavior) but no when-to-use vs. alternatives guidance — nothing tells the agent when to call this instead of luca_broadcasts_list or luca_broadcasts_preview. Usage is implied by the read-detail nature of the tool.

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

luca_broadcasts_launchLaunch a broadcastA
Destructive

Launch an approved broadcast. Sends messages to live leads.

Luca operation: POST /api/broadcasts/{id}/launch Required scopes: broadcasts:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing required scopes (broadcasts:write, luca:queue_ops), data sensitivity (full_content), the Idempotency-Key requirement and server-generated fallback, and the confirm: true rejection behavior. The annotations cover safety profile, but the description adds the operational auth and retry mechanics an agent needs.

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

Conciseness4/5

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

The purpose sentence is front-loaded and the labeled lines (scopes, idempotency, destructive, workspace) are scannable. It is somewhat dense and repeats the destructive/confirm requirement already in the schema, but no line is wasted.

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

Completeness5/5

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

Covers the mutation's preconditions, scopes, failure behavior (rejected without confirm), retry semantics, and workspace override; an output schema exists so return values need not be described. Nothing an agent needs to invoke this correctly is missing.

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

Parameters3/5

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

With 80% schema coverage, the schema already documents confirm, workspaceId, workspaceSlug, and idempotencyKey. The description largely restates those same semantics rather than adding new detail; the only marginal addition is implying {id} is the broadcast identifier via the endpoint line.

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 ('Launch an approved broadcast') and adds the consequence ('Sends messages to live leads'), which distinguishes it from create/approve/preview siblings. An agent can tell what this does and how it differs from the rest of the broadcast family without opening a schema.

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

Usage Guidelines4/5

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

The word 'approved' encodes a real precondition and routes the agent to call approve first. It also states the confirm: true requirement for proceeding. It stops short of naming alternatives (pause/retry/cancel) or explicitly stating when not to use it, so it is clear context without full when/when-not guidance.

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

luca_broadcasts_listList broadcastsA
Read-onlyIdempotent

List broadcasts. Query supports limit, cursor, and status.

Luca operation: GET /api/broadcasts Required scopes: broadcasts:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false, idempotentHint=true), so the bar is lower; the description still adds real context beyond them: required scopes (broadcasts:read, luca:read), data sensitivity 'redacted', and the environment-default workspace behavior with an explicit override path. 'Does not require idempotency' is somewhat redundant against idempotentHint=true, but it reads as 'no idempotency key needed' rather than a contradiction.

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

Conciseness4/5

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

Short and front-loaded: the core purpose is the first sentence, with filters and workspace override following. Some lines are boilerplate metadata ('Luca operation: GET /api/broadcasts', 'Does not require idempotency') that consume space without much decision value, but the whole description is compact and scannable.

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?

An output schema exists, so return values need no explanation, and pagination behavior (maxPages auto-fetch, truncation, nextCursor) is fully documented in the schema. With auth scopes, sensitivity, workspace scoping and the read-only/idempotent profile all present, an agent has everything needed to invoke 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 description coverage is 75% and the maxPages/workspaceId/workspaceSlug descriptions already live in the schema, so the baseline is 3. The description enumerates the query filters (limit, cursor, status) and adds the meaningful detail that workspaceId/workspaceSlug override the environment-configured default workspace, but it adds no format or bounds information (cursor opacity, limit ceiling, status enum values) beyond the schema.

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?

States a specific verb and resource ('List broadcasts') and the underlying operation (GET /api/broadcasts), so the agent knows exactly what it does. It does not differentiate itself from the many other list tools in the sibling set (luca_campaigns_list, luca_leads_list, luca_conversations_list) beyond the resource name, but the resource 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 Guidelines3/5

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

Usage is implied by the name and by the mention of the limit/cursor/status query filters, and there is a useful line about workspaceId/workspaceSlug overriding the environment default workspace. However, there is no explicit when-to-use guidance, no statement of when-not to use it, and no routing to alternatives such as luca_broadcasts_get for a single broadcast.

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

luca_broadcasts_pausePause a broadcastA
Destructive

Pause a running broadcast with an optional operator reason.

Luca operation: POST /api/broadcasts/{id}/pause Required scopes: broadcasts:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Adds meaningful behavior beyond the annotations: required OAuth scope (luca:queue_ops), data sensitivity level, the underlying POST endpoint, and the Idempotency-Key requirement with the fallback that the server generates one. It does not disclose reversibility (annotations flag destructiveHint=true, so an agent might want to know the pause can be resumed), and does not mention the idempotentHint=false behavior.

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

Conciseness4/5

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

Front-loads the one-line action statement, then a compact block of scopes/endpoint/idempotency/workspace notes. Dense but organized; minor redundancy between the description's idempotency sentence and the schema's idempotencyKey description.

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 an output schema present, return values need not be described, and the definition covers auth, sensitivity, idempotency, and workspace scoping. The remaining gap is the relationship to sibling operations (cancel/retry) and what pause implies for in-flight sends, but the description is sufficient to invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 60%, and the description compensates by explaining what the body reason is for ('optional operator reason'), the purpose of idempotencyKey for safe retries, and the workspace override semantics ('override the default workspace configured by environment') which the schema only states as 'optional id/slug override'.

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?

States a specific verb+resource ('Pause a running broadcast') and the endpoint, so the operation is unambiguous. It does not, however, differentiate itself from the closely related siblings in the same family such as luca_broadcasts_cancel or luca_broadcasts_retry, which an agent must choose between.

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?

Provides real operational context (required scopes, idempotency key handling, workspace override) but never says when to pause versus cancel or retry a broadcast. Usage is implied by the verb rather than explicitly framed against alternatives.

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

luca_broadcasts_previewPreview a broadcastA
Destructive

Refresh broadcast recipient and sample-message preview.

Luca operation: POST /api/broadcasts/{id}/preview Required scopes: broadcasts:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), and the description adds genuinely useful context beyond them: the required OAuth scope, 'data sensitivity: full_content', and the idempotency behavior ('provide idempotencyKey for safe retries, or the server will generate one'). It does not explain what a refresh does to existing preview data, so it is not a 5.

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

Conciseness4/5

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

The purpose sentence is front-loaded, followed by compact operational metadata. Lines are dense (scope/sensitivity packed into one line) but every sentence carries information. 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?

An output schema exists, so return values need not be explained. For a 5-param tool with a nested object, the description covers operation, auth scopes, idempotency, and workspace selection adequately. The only notable omission is any indication of what refreshing the preview changes or produces.

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 60%. The description clarifies idempotencyKey and the workspaceId/workspaceSlug override, which the schema also documents. However, the nested body.sampleSize parameter (the actual preview control, 1-20) is undocumented in both the schema description and the description, leaving a real gap. Baseline 3 for partial compensation.

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 opens with a specific verb+resource: 'Refresh broadcast recipient and sample-message preview,' which is distinct from read siblings like luca_broadcasts_get or luca_broadcasts_list. The operation endpoint (POST /api/broadcasts/{id}/preview) reinforces this. It stops short of explicitly contrasting itself with the get/list siblings, so it lands at 4 rather than 5.

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 gives operational context (required scopes, idempotency requirement, workspace override) but never states when to reach for this tool versus alternatives such as luca_broadcasts_get or luca_broadcasts_approve/launch. Usage is only implied by the 'refresh preview' framing, which is the definition of a 3.

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

luca_broadcasts_retryRetry a broadcast's failed sendsA
Destructive

Retry failed broadcast recipients after operator review. Re-sends messages to leads.

Luca operation: POST /api/broadcasts/{id}/retry Required scopes: broadcasts:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, and the description goes further with required scopes, the mandatory confirm: true gate, the Idempotency-Key requirement and server-generated fallback, and workspace override behavior. It does not, however, clarify retry limits, whether already-sent recipients are skipped, or downstream automation side effects.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by operation/scope/safety metadata in a scannable block. Some lines restate what annotations and schema already carry (the destructive side-effect line), which is mild redundancy rather than waste.

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?

Output schema exists so return values need not be described. For a destructive, nested-body mutation the description covers auth scopes, the confirm gate, idempotency, and workspace scoping, leaving only retry semantics (what happens to non-failed recipients, retry limits) unspecified.

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

Parameters3/5

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

Schema description coverage is 67%, and most of what the description says about idempotencyKey, confirm, workspaceId, and workspaceSlug is already present in the schema descriptions. The unexplained body.reason and body.failedOnly fields are not compensated for in the description, so it adds limited meaning beyond the schema.

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?

States a specific verb+resource+scope: retrying failed broadcast recipients only, which distinguishes it from luca_broadcasts_launch, luca_broadcasts_approve, and luca_broadcasts_cancel. It does not explicitly name any sibling or state the boundary between retry and re-launch, so it stops short of a 5.

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?

"after operator review" implies the trigger condition, but the description never says when NOT to use this (e.g., when the broadcast was cancelled, or when a full re-launch is needed) nor names an alternative sibling. Usage is inferable rather than stated.

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

luca_cadences_pausePause a lead's cadenceA
Destructive

Pause (cancel) a lead's running rescue cadence with an optional reason.

Luca operation: POST /api/leads/{id}/cadence/pause Required scopes: cadences:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds real context beyond them: required scopes (cadences:write, luca:queue_ops), redacted data sensitivity, the Idempotency-Key requirement and server-side key generation, and workspace override behavior. It could still say whether the pause is reversible or what happens to in-flight steps.

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 core action is front-loaded in one sentence, followed by compact, clearly separated operational notes. Every line carries information an agent needs; nothing is padded.

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?

An output schema exists so return values need not be explained, and auth, idempotency, and workspace behavior are covered. The remaining gap is the lack of any statement about the tool's relationship to `luca_pause_cadence` and whether pausing is reversible.

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 60%, and the description largely restates what the schema already documents for workspaceId/workspaceSlug/idempotencyKey. The `id` and `reason` parameters get no added meaning in the description, so it does not compensate for the coverage gap.

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?

States a specific verb and resource ('Pause (cancel) a lead's running rescue cadence') plus the operation endpoint, so the agent knows exactly what happens. However, it never distinguishes itself from the sibling tool `luca_pause_cadence`, which reads nearly identically, leaving genuine ambiguity about which to call.

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 never says when to use this tool versus `luca_pause_cadence` or `luca_cadences_rescue_start`, nor what state the lead must be in. Scope, idempotency, and workspace notes are invocation mechanics rather than usage guidance.

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

luca_cadences_rescue_startStart a silent-lead rescueA
Destructive

Enroll silent leads into the multi-day rescue cadence. Starts outbound touches to real leads.

Luca operation: POST /api/cadences/rescue Required scopes: cadences:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds value beyond them: required OAuth scopes (luca:queue_ops), data sensitivity (redacted), the Idempotency-Key requirement and server-generated fallback, and the confirm:true gate. It could still say what the rescue cadence actually sends or how failures surface, but this is solid added context.

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 behavioral core is front-loaded in two efficient sentences. The trailing metadata block (operation, scopes, idempotency, confirm, workspace) is dense but each line carries operative information, so little is wasted.

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 an output schema present, return values need no explanation, and the description covers scopes, idempotency, confirmation, and workspace scoping for a destructive, nested-body tool. The main remaining gap is routing guidance against the semantically similar rescue/enroll siblings.

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 80%, so the schema largely documents confirm, idempotencyKey, workspaceId/Slug and leadIds. The description adds genuine meaning only for workspaceId/workspaceSlug ('override the default workspace configured by environment') and repeat the confirm/idempotency notes; it says nothing about cadenceTemplate's light/standard/aggressive options. Baseline 3 fits.

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?

States a specific verb and resource ('Enroll silent leads into the multi-day rescue cadence') and clarifies the real-world effect ('Starts outbound touches to real leads'). It does not distinguish itself from plausible siblings such as luca_rescue_silent_leads or luca_campaigns_enroll, so it stops just short of full clarity.

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?

There is no when-to-use guidance versus alternatives. Given near-duplicate siblings (luca_rescue_silent_leads, luca_campaigns_enroll) and no explanation of which cadenceTemplate to pick, the agent is left to infer selection.

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

luca_call_events_backfillBackfill a booking's call eventA

Create a call event for a booking that predates automatic creation, then queue its summary. Safe to call twice: an existing call event comes back as is.

Luca operation: POST /api/call-events/backfill/{bookingId} Required scopes: call_events:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookingIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.5/5.0
Behavior1/5

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

The description asserts 'Safe to call twice: an existing call event comes back as is' and mandates an Idempotency-Key 'for safe retries', which describes idempotent behavior, yet annotations declare idempotentHint=false. That is a direct contradiction of the declared idempotency property; the otherwise-useful scopes/sensitivity context cannot rescue it under the contradiction rule.

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?

Purpose and the safe-to-call-twice note are front-loaded in the first sentence, and the operational metadata (endpoint, scopes, sensitivity) follows in compact lines. The scope/sensitivity boilerplate is somewhat noisy but each line is scannable and relevant to invocation.

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?

An output schema exists, so return values need not be described, and the description covers auth scopes, idempotency handling, and workspace override. It is close to complete for a write tool, with only the idempotency messaging needing correction to align with the annotations.

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 75%, so the schema already documents workspaceId, workspaceSlug, and idempotencyKey. The description largely restates these (idempotency key generation, workspace override) without adding format or usage nuance beyond the schema, matching the baseline-3 expectation when the schema does most of the work.

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+scope: 'Create a call event for a booking that predates automatic creation, then queue its summary.' An agent can distinguish it from luca_call_events_summary_generate, luca_call_events_by_booking, and luca_call_events_get without opening a schema.

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

Usage Guidelines4/5

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

Gives a clear triggering condition ('a booking that predates automatic creation') and notes it is safe to call twice, which is useful context. It does not explicitly route the agent to alternatives (e.g., summary_generate for bookings that already have an event), so it stops short of full when-not guidance.

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

luca_call_events_by_bookingGet a booking's call eventA
Read-onlyIdempotent

Find the call event attached to a booking. A booking whose call hasn't happened yet returns 404, which is normal.

Luca operation: GET /api/call-events/by-booking/{bookingId} Required scopes: call_events:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookingIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, non-open-world. The description adds real value beyond them: the expected 404 when the call hasn't happened, the required scopes (call_events:read, luca:read), full_content data sensitivity, and that idempotency is not required.

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

Conciseness4/5

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

Front-loaded with the purpose and the key 404 behavior, then the operational metadata. There is mild redundancy in listing 'Required scopes' and 'Required OAuth scope' separately, but nothing is wasted enough to impede use.

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 an output schema present, return values needn't be described, and the description covers the remaining gaps: the by-booking lookup key, the normal 404, scopes, and workspace overrides. Complete enough 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.

Parameters4/5

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

Schema coverage is 67% and the description adds meaning for the workspace override parameters ('override the default workspace configured by environment'), which the schema only labels as 'Optional Luca workspace ... override.' bookingId is self-evident from name and UUID format, so overall semantics are adequately covered.

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 ('Find') and resource ('the call event attached to a booking'), and the 'by booking' scoping clearly distinguishes it from luca_call_events_get (by id) and luca_call_events_by_lead (by lead). An agent can pick the right retrieval sibling from the description alone.

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 usage context: keyed on bookingId, with workspaceId/workspaceSlug overriding the environment default. It also explains the normal 404 case so the agent doesn't treat it as an error. It does not explicitly name when to prefer luca_call_events_by_lead or luca_call_events_get, so it stops short of full alternative routing.

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

luca_call_events_by_leadList a lead's call eventsA
Read-onlyIdempotent

Read a lead's full call history, oldest first, so a second or third call reads in sequence.

Luca operation: GET /api/call-events/by-lead/{leadId} Required scopes: call_events:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real context by disclosing required scopes (call_events:read, luca:read), the full_content data sensitivity level, the ascending order, and the default-workspace override behavior. The 'Does not require idempotency' line is redundant with idempotentHint=true but not contradictory.

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

Conciseness4/5

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

Front-loads the purpose in the first sentence, then lists operation/scope metadata compactly. Most lines earn their place, though the idempotency line duplicates the annotation.

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?

An output schema exists, so return values need not be described, and annotations cover the safety profile. Combined with scope, sensitivity, ordering, and workspace-override details, the definition gives an agent nearly everything needed to call it correctly; only explicit sibling routing is absent.

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% and both workspace params already carry descriptions, but the description adds the crucial semantic that workspaceId/workspaceSlug override an environment-configured default, which the schema does not explain. leadId's meaning is self-evident from the name and format.

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?

States a specific verb (read), resource (a lead's full call history), and an ordering guarantee (oldest first) that hints at how it differs from the single-call sibling. It does not explicitly name alternatives like luca_call_events_get or luca_call_events_by_booking, so the differentiation is inferred rather than 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 scenario (reading a lead's sequential call history) implies when to use it, and the workspace override note is actionable, but there is no explicit when-not or named alternative among the call-event siblings. Usage is left to inference.

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

luca_call_events_feedbackReport how a call wentA
Destructive

File the coach's report on how a call went. A completed or no_show outcome also records booking attendance, and a completed call queues its summary.

Luca operation: POST /api/call-events/{id}/feedback Required scopes: call_events:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive when outcome is no_show (can start recovery messaging): has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that completed/no_show also records booking attendance, that completed queues a summary, that no_show specifically starts recovery messaging, that confirm: true is mandatory or the call is rejected, and that an idempotency key enables safe retries. It even refines the blanket destructiveHint into a conditional (destructive when outcome is no_show), which is richer than the annotation alone.

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?

Purpose is front-loaded in the first sentence, followed by behavior and then operational metadata. Some content duplicates the schema descriptions of confirm and idempotencyKey, and the scopes/endpoint block is boilerplate, but overall it stays tight and readable.

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, open-world mutation tool with nested body objects, the description covers required scope, idempotency, confirmation gating, workspace overrides, and side effects; an output schema exists so return values need no explanation. Nothing material 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?

Schema coverage is moderate (67%) and body fields like notes/fields/rating carry no descriptions, but the description supplies real semantics for confirm (why it exists), idempotencyKey (retry safety, server-generated fallback), and workspaceId/workspaceSlug (override the environment default). It also links outcome values to side effects, adding meaning not present in the schema.

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?

States a clear verb and resource ('File the coach's report on how a call went') and elaborates the downstream effects (records booking attendance, queues a summary). However, it never distinguishes itself from close siblings such as luca_call_events_undo_outcome or luca_bookings_outcome_record, so an agent must infer which reporting endpoint applies.

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?

Usage context is implied (file a report for a call event; will require confirm) and preconditions are stated (confirm: true, Idempotency-Key). But it never says when to choose this over luca_call_events_needing_feedback to find calls, or undo_outcome to reverse a report, leaving alternative selection to inference.

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

luca_call_events_getGet a call eventA
Read-onlyIdempotent

Read one call event: outcome, rating, summary, and CRM sync state.

Luca operation: GET /api/call-events/{id} Required scopes: call_events:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior, so the safety profile is covered. The description goes further by disclosing required scopes (call_events:read, luca:read), data sensitivity (full_content), and the absence of an idempotency requirement, which is useful operational context beyond the structured hints.

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

Conciseness4/5

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

Front-loads the core purpose in the first sentence, then lists operation, scopes, idempotency, and workspace override as compact metadata lines. Each sentence earns its place; only minor redundancy in restating scopes.

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 read-only single-resource tool with an output schema and full annotations, the description supplies the missing pieces an agent needs: scopes, sensitivity, workspace override, and idempotency status. Return-value detail is correctly omitted since an output schema exists.

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% and the id field is undocumented there, but the description clarifies the purpose of workspaceId/workspaceSlug by explaining they override the environment-default workspace, adding meaning beyond the brief schema text. The core id lookup is implicit in 'GET /api/call-events/{id}'.

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 (read) and singular resource (one call event) and enumerates the salient fields returned (outcome, rating, summary, CRM sync state). The 'one call event' scope cleanly distinguishes it from the sibling list/lookup tools such as luca_call_events_by_booking and luca_call_events_by_lead.

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 implies usage by stating it fetches a single event by id and explains the workspace override, but never explicitly says when to prefer it over alternatives like luca_call_events_by_lead or luca_call_events_feedback. No exclusions or alternative-routing guidance is given.

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

luca_call_events_needing_feedbackList calls still needing a reportA
Read-onlyIdempotent

List calls whose time has passed that still need the coach to say what happened. The post-call work queue.

Luca operation: GET /api/call-events Required scopes: call_events:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive safety. The description adds meaningful non-obvious details: the underlying GET /api/call-events operation, required call_events:read scope, luca:read OAuth scope, full_content data sensitivity, and no idempotency-key requirement. It does not mention rate limits or pagination, but output schema exists so return-format detail is less critical.

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 front-loaded with the purpose, followed by compact operational metadata. Every sentence earns its place, though the scopes/idempotency lines make the definition slightly longer than strictly necessary for a simple list 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 rich annotations, full parameter descriptions, and an output schema, the definition provides everything an agent needs to select and call this read-only listing: purpose, auth scopes, sensitivity, and workspace override behavior. No critical gap remains for a tool of this 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% and both optional workspace parameters are documented in the schema. The description adds useful semantics by explaining that workspaceId/workspaceSlug override the default workspace configured by the environment, which is more than the schema's 'optional override' wording, though it does not clarify precedence if both are supplied.

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?

States a specific verb (List) and resource (calls whose time has passed and still need coach feedback), plus identifies it as the post-call work queue. It distinguishes the tool by state ('needing feedback') but does not explicitly name sibling alternatives such as luca_call_events_feedback or luca_post_call_queue, so it falls short of full sibling differentiation.

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

Usage Guidelines4/5

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

The 'post-call work queue' label gives clear context for when an agent would reach for this tool: when it needs the queue of completed calls awaiting coach input. However, it names no alternative tools or explicit when-not conditions, so selection guidance is present but not exhaustive.

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

luca_call_events_push_to_crmPush a call to the CRMA
Destructive

Send the current summary to the CRM now, without waiting out the review window. Re-pushing updates the existing note.

Luca operation: POST /api/call-events/{id}/push-to-crm Required scopes: call_events:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond annotations by disclosing required scopes, data sensitivity (full_content), the confirm: true requirement and rejection behavior, the Idempotency-Key requirement and server-side generation fallback, and the re-push update semantics. This is exactly the operational context an agent needs for a destructive, open-world write.

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 purpose sentence is front-loaded and every operational line (scopes, idempotency, confirm, workspace) is actionable. The operation/scopes/sensitivity lines are a bit boilerplate-like but still earn their place for a mutation 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?

With annotations covering the safety profile, an output schema handling return values, and the description covering confirmation, idempotency, scopes, and workspace scoping, an agent has everything needed to invoke this correctly.

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

Parameters4/5

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

Schema coverage is 80%, so the schema already documents confirm, the workspace params, and idempotencyKey. The description still adds value by explaining the retry rationale and the default-workspace override behavior, though it leaves the id parameter itself unexplained.

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

Purpose5/5

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

States a specific verb and resource (send the current summary to the CRM) plus the exact timing scope (now, without waiting out the review window). This distinguishes it cleanly from the review-queue siblings (e.g. approve/reject), which follow the normal windowed flow.

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 for when to use it (bypass the review window, re-push to update the existing note) and clarifies the workspace override parameters. It does not name an explicit alternative sibling, but the contrast with the review-window flow 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.

luca_call_events_summary_generateGenerate a call summaryA
Destructive

Queue a fresh summary and return straight away. Poll the call event for the result.

Luca operation: POST /api/call-events/{id}/summary Required scopes: call_events:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Adds substantial behavior beyond the annotations: async queue-and-return semantics, required scopes (call_events:write, luca:draft), full_content sensitivity, and the Idempotency-Key requirement with the fallback that the server generates one. This is useful operational context even though annotations already flag destructiveHint=true.

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

Conciseness4/5

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

Front-loads the most important fact (queued, returns immediately, poll for result) in the first sentence, then lists operation/scope/idempotency details compactly. Every line carries useful information with minimal waste.

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?

An output schema exists so return values need not be explained, and the description covers async behavior, scopes, idempotency, and workspace targeting. The only gap is the lack of contrast with the sibling summary_replace tool.

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

Parameters4/5

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

Schema coverage is 75% and the description reinforces the tricky parts: 'Provide idempotencyKey for safe retries, or the server will generate one' and 'Use workspaceId or workspaceSlug to override the default workspace'. It adds retry/override intent beyond the raw schema descriptions.

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?

States a specific verb+resource ('Generate a call summary') and adds the crucial async detail that it queues work and returns immediately. It doesn't explicitly name or contrast with the sibling luca_call_events_summary_replace, so an agent must infer which of the two summary tools to pick.

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 'Poll the call event for the result' line gives clear workflow context for how to obtain the result. However, there is no explicit when-to-use guidance versus luca_call_events_summary_replace or other summary-related siblings, leaving the choice to inference.

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

luca_call_events_summary_replaceReplace a call summaryA
Destructive

Replace the generated summary with the coach's own wording and push it. A summary already in the CRM updates that same note.

Luca operation: PUT /api/call-events/{id}/summary Required scopes: call_events:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior5/5

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

Even though annotations already declare destructiveHint=true and idempotentHint=false, the description adds substantial context: required scopes (call_events:write, luca:queue_ops), data sensitivity full_content, the Idempotency-Key requirement for safe retries, and the hard precondition that confirm: true is mandatory or the call is rejected. This goes well beyond 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?

Purpose is front-loaded, then structured metadata (operation, scopes, idempotency, confirmation, workspace). Each line carries a requirement, though the destructive/confirm lines partly duplicate the annotations and the confirm schema description.

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?

An output schema exists so return values need not be explained, and the description covers auth, idempotency, confirmation, and workspace scoping. It does not clarify what happens to a prior generated summary downstream beyond the CRM note, leaving a minor gap for a destructive mutation.

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 67%, and the description mostly restates what the schema already documents for confirm, idempotencyKey, workspaceId, and workspaceSlug. It adds the practical framing of idempotency as 'safe retries' but gives no syntax guidance for the undocumented id/body parameters.

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 uses a specific verb+resource ('Replace the generated summary') and clarifies the effect ('push it', updates the same CRM note), so the agent can distinguish the action from luca_call_events_summary_generate. It stops short of explicitly naming that sibling as the alternative, so it is clear but not fully differentiated.

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?

It implies when to use it (to substitute the generated summary with the coach's wording) and notes the workspace-override path, but gives no explicit when-not or direct comparison to siblings like luca_call_events_summary_generate or luca_call_events_push_to_crm. Usage is inferable rather than stated.

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

luca_call_events_undo_outcomeUndo a call's outcomeA
Destructive

Clear a mistaken attendance mark and put the call back in the queue. The window is 48 hours from when the outcome was set.

Luca operation: POST /api/call-events/{id}/undo-outcome Required scopes: call_events:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description goes beyond them by disclosing the 48-hour undo window, the required scope (call_events:write), the data sensitivity, and how idempotency is achieved via a server-generated key on retries – the last point usefully reconciles the idempotentHint=false annotation rather than contradicting it. It does not say what state the call is restored to beyond "back in the queue".

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 purpose and window are front-loaded in the first sentence, followed by operational metadata. It is compact overall, though the idempotency sentence duplicates the input-schema description of idempotencyKey and the API/scope lines are boilerplate.

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?

This is a destructive mutation, but annotations cover the safety profile and an output schema exists, so return values needn't be explained. With the window, auth scope, idempotency handling, and workspace override all documented, an agent has nearly everything needed to call it correctly; only the post-undo state and failure cases are left implicit.

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 75%, so the schema already explains workspaceId, workspaceSlug, and idempotencyKey. The description largely repeats those same facts (idempotency key generation, workspace override) without adding format or edge-case detail, so the baseline of 3 for schema-documented parameters applies.

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

Purpose5/5

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

"Clear a mistaken attendance mark and put the call back in the queue" gives a specific verb (clear/undo), the resource (call outcome / attendance mark), and the resulting state change. An agent can distinguish this from siblings like luca_call_events_feedback or luca_bookings_outcome_record without opening any schema.

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

Usage Guidelines4/5

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

The description states the triggering condition (a mistaken attendance mark) and a hard eligibility constraint (48 hours from when the outcome was set), which is exactly the kind of context that determines whether an agent should attempt the call. It does not, however, name a sibling as the alternative for when the window has elapsed or for re-recording instead of undoing.

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

luca_campaigns_analyticsRead a campaign's resultsA
Read-onlyIdempotent

Read campaign attribution and performance analytics.

Luca operation: GET /api/campaigns/{id}/analytics Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered and the description's 'does not require idempotency' line largely restates that. It does add genuinely new context — required scopes analytics:read and luca:read, and 'data sensitivity: redacted' — which is useful for auth/expectation setting.

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?

Purpose is front-loaded in the first line and the metadata lines are short and scannable. Minor waste: the idempotency line repeats an annotation and the 'data sensitivity: redacted' phrase is vague, but overall there is little padding.

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 an output schema present, return values need not be explained, and the annotations cover safety. The description adds endpoint, scopes, and workspace override behavior, making it broadly callable — the only real gap is the unexplained since/until window parameters that affect the result set.

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 50%: workspaceId and workspaceSlug are documented in the schema, and the description's workspace override note duplicates them rather than extending them. The undocumented query.since/query.until time-window parameters and the id parameter get no clarification (format, time semantics, timezone), so the description does not compensate for the coverage gap. Baseline 3 for partial coverage.

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

Purpose4/5

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

The description states a specific verb and resource — reading campaign attribution and performance analytics — and pins it to the concrete endpoint GET /api/campaigns/{id}/analytics. It is clearly distinguishable from generic analytics siblings, though it never names the nearest alternatives (e.g. luca_campaigns_get or luca_analytics_content_attribution).

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?

It gives one concrete usage instruction (override the default workspace via workspaceId/workspaceSlug), which tells the agent how to run it in a non-default workspace. However, it never states when to prefer this over sibling analytics tools or what happens when id is unknown, leaving tool selection largely to inference.

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

luca_campaigns_comment_events_listList campaign comment eventsA
Read-onlyIdempotent

List matched, suppressed, blocked, and replayed comment automation events.

Luca operation: GET /api/campaigns/comment-events Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-structured context: required scopes (campaigns:read, luca:read), a data-sensitivity classification (full_content), and the fact that idempotency is not required. Auth and sensitivity disclosure is exactly the kind of extra behavior an agent can't read off 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?

Front-loaded with the capability statement, followed by short metadata lines (operation, scopes, idempotency, workspace override) that each carry distinct information. No filler or repetition, though the metadata block reads as a header list rather than prose blended for readability.

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

Completeness4/5

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

An output schema exists, so return-shape explanation is correctly omitted, and auth/sensitivity/workspace behavior is covered. For a four-parameter read tool with nested query filters, the definition is complete enough, though it never characterizes what a comment 'event' record contains beyond the status words.

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 75%, so the schema already documents maxPages and both workspace parameters; the description's workspace override line largely restates the schema's 'Optional Luca workspace id override.' None of the query filter parameters (status, campaignId, tokenState, providerHealth, cursor) get added meaning in the description, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource (list comment automation events) and enumerates the event types surfaced (matched, suppressed, blocked, replayed), which goes beyond the bare title. It does not, however, explicitly distinguish itself from adjacent event-listing siblings such as luca_webhooks_events_list or luca_integrations_events_list, leaving the agent to infer the campaign-comment 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?

There is no when-to-use guidance and no named alternative. The only usage-adjacent sentence is the workspace override note ('Use workspaceId or workspaceSlug to override the default workspace'), which is operational configuration rather than selection guidance between sibling tools.

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

luca_campaigns_comment_simulation_suite_runRun the comment automation suiteA

Run the Instagram comment-to-DM simulation suite against a campaign. Any campaign that uses comment automation has to pass it before it can publish, so run this before reaching for publish.

Luca operation: POST /api/campaigns/{id}/comment-simulation-suite Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.3/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the required scopes (campaigns:write, luca:queue_ops), the Idempotency-Key requirement and server-side key generation, and workspace override behavior. It does not describe what the run does to campaign state or what a failed run means, which keeps it short of a 5. The retry-safety note is consistent with idempotentHint=false, since the tool is only safe to retry when a stable key is supplied.

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

Conciseness4/5

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

Front-loads purpose and the pre-publish gate in the first two sentences, then packs operational metadata (endpoint, scopes, idempotency, workspace) into tight lines. Slightly list-like but every line carries actionable information.

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 an output schema present, return values need not be explained, and the description covers the prerequisite, auth scopes, idempotency, and workspace targeting. The remaining gap is the unexplained autoSend body field and any statement about failure/blocking consequences.

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 60%. The description usefully explains idempotencyKey, workspaceId, and workspaceSlug, and the campaign id is implied by context. However, body.autoSend is undocumented in both the schema and the description, so one parameter's behavior remains opaque.

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

Purpose5/5

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

States a specific verb and resource ('Run the Instagram comment-to-DM simulation suite against a campaign') and names the sibling it gates ('publish'), so an agent can separate it from luca_campaigns_simulations_create and luca_campaigns_publish without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use rule and the condition that selects it: campaigns using comment automation must pass this before publishing, so run it before reaching for publish. The alternative (publish) is named and the prerequisite ordering is spelled out.

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

luca_campaigns_createCreate a campaignA

Create a campaign draft. Body requires name and may include graph.

Luca operation: POST /api/campaigns Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: required OAuth scope, the redacted data-sensitivity tier, the idempotency-key requirement (and that the server auto-generates one if omitted), and the default-workspace override behavior.

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

Conciseness4/5

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

The core action is front-loaded in the first sentence and the metadata block (operation, scopes, idempotency, workspace) is compact and scannable. The mixed prose/metadata layout is slightly uneven but wastes little space.

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 a nested graph body and an output schema, the description covers what the agent needs to invoke it: draft semantics, required body field, auth scopes, idempotency handling, and workspace targeting. It does not explain the nested graph/qualification structure at all, which is the only notable gap given the deep nesting.

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 75%, with workspaceId, workspaceSlug, and idempotencyKey already documented in the schema itself. The description largely repeats those (idempotency, workspace override) and only adds the body hint that name is required and graph optional, so marginal value over structured data is limited.

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?

"Create a campaign draft" gives a specific verb+resource and adds the important qualifier that the result is a draft (not a published campaign), which separates it from luca_campaigns_publish. It does not, however, distinguish itself from siblings such as luca_campaigns_generate, luca_campaigns_duplicate, or luca_campaigns_draft_update, so routing still requires inference.

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 supplies operational preconditions (required scope campaigns:write, Idempotency-Key, workspace override) but never states when to choose this tool over the sibling generate/duplicate/create-from-template paths. Usage is implied by the name rather than explained.

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

luca_campaigns_draft_updateEdit a campaign draftB
Destructive

Autosave a campaign draft.

Luca operation: PATCH /api/campaigns/{id}/draft Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior4/5

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

With annotations already declaring destructiveHint=true and idempotentHint=false, the description adds real context: required scopes (campaigns:write, luca:queue_ops), data sensitivity 'redacted', and the Idempotency-Key retry contract. Two gaps remain: it never says a PATCH replaces the whole draft body (why destructiveHint is true), and 'Requires Idempotency-Key ... or the server will generate one' is internally contradictory about whether the caller must supply it. Not a hard annotation contradiction, but the 'autosave' framing understates the destructive nature flagged in 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?

Front-loaded with the purpose, followed by compact metadata lines (operation, scopes, idempotency, workspace). No filler sentences, though the 'Autosave' framing is slightly imprecise and the idempotency sentence contradicts itself, costing a bit of clarity.

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

Completeness3/5

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

Output schema exists so return values need no explaining, and annotations cover safety, but for a complex 5-parameter tool with a large nested body the description omits the most consequential semantics: what the PATCH replaces, how expectedDraftUpdatedAt conflict handling works, and how a saved draft relates to publish/version siblings. Competent but incomplete.

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 60%: workspaceId, workspaceSlug and idempotencyKey already carry descriptions, and the description merely restates them (workspace override, safe retries). The dominant parameter, the deeply nested `body`/`graph` payload, and `expectedDraftUpdatedAt` (optimistic concurrency) receive no prose explanation in either place, which is the gap the description should have filled.

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?

States a clear verb+resource ('Autosave/Edit a campaign draft') and the underlying operation (PATCH /api/campaigns/{id}/draft), so an agent knows this persists a new draft body. It does not differentiate itself from siblings like luca_campaigns_publish, luca_campaigns_set_status, or luca_campaigns_duplicate, so an agent must infer which save/state-change tool to pick.

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?

There is no when-to-use / when-not-to-use guidance and no mention of the sibling tools that are plausible alternatives (publish vs draft autosave vs set_status). The only routing-adjacent information is the scope and workspace override, which are prerequisites, not usage guidance.

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

luca_campaigns_duplicateDuplicate a campaignA

Copy a campaign into a fresh unpublished draft and leave the original alone. Use it to change a live campaign without touching what is currently running.

Luca operation: POST /api/campaigns/{id}/duplicate Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only flag it as a non-read, non-destructive, non-idempotent write. The description adds substantive context beyond that: it produces an unpublished draft, the original is untouched, it requires an Idempotency-Key, and it lists required scopes. It also correctly signals non-idempotency implicitly by noting the key is needed for safe retries.

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?

Front-loads the essential purpose and usage in two sentences, then segments operational metadata (endpoint, scopes, idempotency, workspace) clearly. No sentence is wasted.

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

Completeness5/5

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

With an output schema present, return values need no explanation, and annotations cover the safety profile. The description fills the remaining gaps an agent needs: what is created, that the source is preserved, auth scopes, retry safety, and workspace targeting.

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 75%, so the schema documents most params. The description adds real meaning beyond it by explaining the workspaceId/workspaceSlug default-override behavior ('override the default workspace configured by environment'), which the schema descriptions do not capture; only the idempotencyKey note duplicates 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?

States a specific verb and resource ('Copy a campaign') plus the exact outcome and scope ('into a fresh unpublished draft and leave the original alone'). This cleanly distinguishes it from siblings like luca_campaigns_create, luca_campaigns_publish, and luca_campaigns_set_status without opening a schema.

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

Usage Guidelines4/5

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

Gives a clear when-to-use scenario: 'Use it to change a live campaign without touching what is currently running.' That routes the agent well, but it does not name the concrete alternative (e.g., draft_update vs. duplicate) the way a top-tier definition would.

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

luca_campaigns_enrollEnroll leads in a campaignA
Destructive

Enroll a lead in the latest published campaign version. Triggers the live campaign's automation for that lead.

Luca operation: POST /api/campaigns/{id}/enrollments Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, openWorldHint=true, so the safety profile is known; the description still adds substantial non-redundant behavior: Idempotency-Key is required and server-generated if omitted, the call is hard-rejected without confirm: true, the write targets a live automation with real-world side effects, and workspace scoping can be overridden. It also lists the exact operation and scopes, none of which appear in 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?

Purpose is front-loaded in the first two sentences and the remainder is densely operational with no filler. It does, however, duplicate the confirm rationale already written verbatim in the confirm parameter's schema description, and the 'Luca operation' line is somewhat boilerplate.

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?

An output schema exists, so return values need not be described, and the description covers scope, confirmation, idempotency, and workspace scoping — everything needed to invoke safely. It omits edge-case behavior (e.g., what happens if the lead is already enrolled, or if the campaign has no published version), which would be the last piece for a tool with this much state mutation.

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% and the two undocumented fields (id, body.leadId) are unlabeled beyond their UUID types; the description partially compensates by clarifying that confirm is a hard gate, idempotencyKey enables safe retries, and workspaceId/workspaceSlug override the environment default. It does not state what id refers to (campaign vs. version), which is the main remaining ambiguity.

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 first sentence names a specific verb (enroll), the resource (a lead), and the target scope (the latest published campaign version), then adds the consequence: it triggers the live campaign's automation. That distinguishes it from luca_campaigns_enrollments_list (read), luca_campaigns_publish, and luca_broadcasts_launch without opening any schema. Minor mismatch in grammatical number between the name ('leads') and the description ('a lead') does not impair selection.

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?

Usage is clear from context — call this when you want a specific lead to start the live campaign flow — and the description supplies real preconditions (confirm: true required, required OAuth scopes, optional workspace override). It does not, however, name an alternative or state when not to use it (e.g., drafting/simulating campaigns, or enrolling into an unpublished version), so it stays at clear-context without exclusions.

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

luca_campaigns_enrollments_listList a campaign's enrollmentsA
Read-onlyIdempotent

List campaign enrollments.

Luca operation: GET /api/campaigns/{id}/enrollments Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent/non-destructive profile, and the description adds genuinely new behavioral context: required scopes (campaigns:read), OAuth scope (luca:read), data sensitivity (full_content), and the workspace override behavior. 'Does not require idempotency' is slightly redundant against idempotentHint but is consistent, not contradictory.

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 definition is short, front-loaded with the purpose, and the metadata lines (operation, scopes, sensitivity) are each one clause. No filler, though the idempotency sentence is arguably dispensable.

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?

An output schema exists, so return values need no explanation, and the description covers auth scopes, sensitivity, and workspace targeting. The main gap is pagination/filtering behavior, which is partially covered by the maxPages schema description but not referenced in the description.

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 60%, and the description adds real meaning only for workspaceId/workspaceSlug ('override the default workspace configured by environment'). It says nothing about the limit/cursor pagination parameters, which have no schema descriptions, so the low-coverage half of the parameter set remains undocumented.

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

Purpose4/5

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

The description states a clear verb+resource ('List campaign enrollments') and the underlying operation (GET /api/campaigns/{id}/enrollments), so an agent knows exactly what it retrieves. It does not distinguish itself from close siblings like luca_campaigns_enrollments_timeline or luca_campaigns_enroll, which is the only thing keeping it from a 5.

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?

There is no explicit when-to-use or when-not-to-use guidance, and no alternative is named. The only usage-oriented sentence is about the workspaceId/workspaceSlug override, which is a scoping detail rather than a selection criterion between this and the enrollments_timeline sibling.

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

luca_campaigns_enrollments_timelineRead an enrollment timelineA
Read-onlyIdempotent

Read every step one enrollment has been through: what got sent, when, and how the lead responded.

Luca operation: GET /api/campaigns/{id}/enrollments/{enrollmentId}/timeline Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
enrollmentIdYes
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive and closed-world. The description adds genuinely new context: required scope campaigns:read / luca:read, data sensitivity full_content, and explicit workspace override semantics. It doesn't restate the return shape, but the output schema carries that, so this is solid added value.

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?

Front-loaded purpose sentence followed by terse, scannable metadata lines (operation, scopes, idempotency, workspace override). No filler, and the most important information leads.

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?

An output schema exists, so return-value documentation is not required, and the description covers scopes, sensitivity and workspace targeting. For a read-only nested-resource lookup the coverage is nearly complete, with only the identifier semantics left implicit.

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 50%; the two workspace params carry schema descriptions while id and enrollmentId do not. The description's workspace-override sentence meaningfully explains workspaceId/workspaceSlug but leaves the two UUID identifiers to inference ('one enrollment'). 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 precise verb and resource: 'Read every step one enrollment has been through: what got sent, when, and how the lead responded.' The scope ('one enrollment' vs. the list-oriented sibling luca_campaigns_enrollments_list) is unambiguous, and an agent can tell what it returns without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied by the phrasing ('one enrollment') but the description never states when to choose this over luca_campaigns_enrollments_list or luca_leads_explain, nor any exclusions. It adds only the workspace-override note, which is configuration, not selection guidance.

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

luca_campaigns_generateGenerate a campaign draftA

Generate a safe AI campaign plan without creating or publishing it.

Luca operation: POST /api/campaigns/generate Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the underlying operation, required scopes (campaigns:write, luca:queue_ops), redacted data sensitivity, and the mandatory Idempotency-Key with retry behavior. The safe/non-mutating nature of the generated plan is also stated, which the readOnlyHint=false annotation alone would not convey.

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

Conciseness4/5

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

Front-loaded with the one-line purpose, followed by operation/auth/idempotency metadata in a compact block. Every line earns its place, though the scope and sensitivity lines read as backend metadata rather than agent-facing guidance.

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 complex tool with nested objects and an output schema, the description covers the safety posture, auth requirements, and idempotency contract an agent needs to invoke it correctly. It need not explain return values since an output schema exists; only the composition of the large request body is left entirely to the schema.

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 75% and the schema itself documents workspaceId/workspaceSlug/idempotencyKey. The description adds the useful 'server generates one if omitted' detail for the idempotency key and the workspace-override behavior, but says nothing about the many body fields (goal, mode, prompt, existingGraph, etc.), leaving most parameter meaning to the structured 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?

States a specific verb+resource ('Generate... campaign plan') and immediately scopes it as 'without creating or publishing it', which cleanly distinguishes it from siblings like luca_campaigns_create and luca_campaigns_publish. An agent can tell what this does and what it does not do without opening any schema.

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

Usage Guidelines4/5

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

The 'without creating or publishing it' clause implicitly routes the agent: use this to produce a plan, use create/publish for the write steps. However, it never names an alternative sibling explicitly, so the when-to-use guidance is clear context rather than an explicit exclusion.

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

luca_campaigns_getGet a campaignA
Read-onlyIdempotent

Get campaign draft and latest published version.

Luca operation: GET /api/campaigns/{id} Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds genuinely useful context beyond that: required scopes (campaigns:read, luca:read), data sensitivity (redacted), the idempotency-key posture, and the workspace-override behavior. Not a 5 only because it omits anything about error/not-found behavior or payload shape.

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 core purpose is front-loaded in the first sentence, and the remaining lines are compact operational metadata rather than filler. The trailing endpoint/scope lines are denser boilerplate than prose, but each carries a distinct fact.

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?

An output schema exists, so return values need not be explained. With that covered, the description supplies the auth scope, sensitivity, idempotency posture, and workspace-resolution rules an agent needs to invoke this correctly. Nothing material is missing for a single-record read.

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% and the schema itself documents both workspace parameters. The description adds meaning the schema does not: that workspaceId/workspaceSlug exist to override the environment-configured default workspace, which tells the agent when to supply them. The required id parameter gets no extra prose from the description.

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 first sentence states a specific verb and resource and even specifies the returned artifacts: 'Get campaign draft and latest published version.' That is well beyond a tautology. It does not, however, differentiate itself from near-neighbors such as luca_campaigns_versions_list or luca_campaigns_list, so it stops short of a 5.

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?

Usage is implied by the name and by the operational notes (scopes, idempotency), and the last sentence gives a concrete override instruction for workspaceId/workspaceSlug. But there is no explicit statement of when to call this versus luca_campaigns_list or luca_campaigns_versions_list, and no exclusions.

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

luca_campaigns_listList campaignsA
Read-onlyIdempotent

List campaigns. Query supports limit, cursor, and status.

Luca operation: GET /api/campaigns Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, destructiveHint=false, idempotentHint), so the description's added value is the auth and data-handling context: required scopes campaigns:read / luca:read and "data sensitivity: redacted". That is real disclosure an agent cannot get from the annotations. It stops short of describing rate limits or the shape of the paged result.

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

Conciseness4/5

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

Front-loaded with the one-line purpose, then a short line on query fields, then operational metadata. Nothing is padded, though the scope/operation boilerplate is procedural rather than decision-useful.

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 read-only list tool with an output schema (so return values need no prose), the description covers purpose, auth scopes, workspace override, and query surface. An agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 75% and the three documented parameters (maxPages, workspaceId, workspaceSlug) already carry full descriptions, including the pagination/truncation contract. The description's "Query supports limit, cursor, and status" merely names the nested fields without explaining what status filters on or what cursor encodes, so it adds little beyond the schema. Baseline 3 is appropriate.

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?

States a specific verb+resource ("List campaigns") and even names the underlying operation (GET /api/campaigns), so the intent is unambiguous. It does not distinguish itself from sibling campaign tools such as luca_campaigns_get or luca_campaigns_enrollments_list, which is the only thing keeping it out of 5 territory.

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?

Usage is implied rather than stated: an agent infers this is the enumeration counterpart to the campaign getters. The one concrete usage note — "Use workspaceId or workspaceSlug to override the default workspace configured by environment" — is helpful context but concerns parameter behavior, not when to pick this tool over an alternative.

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

luca_campaigns_provider_capabilitiesCheck what a campaign's channel supportsA
Read-onlyIdempotent

Evaluate provider capability blockers for a campaign draft.

Luca operation: GET /api/campaigns/{id}/provider-capabilities Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

With annotations already covering the read-only/idempotent/non-destructive profile, the description adds genuinely useful context annotations lack: the backing operation, the required campaigns:read scope and luca:read OAuth scope, a redacted data sensitivity level, and the fact that idempotency is unneeded. It stops short of describing the nature of the returned blockers, but that is appropriate given an output schema exists.

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 operative purpose is front-loaded in the first line, followed by compact, scannable metadata lines (operation, scopes, idempotency, workspace override). No filler, though the stack of near-boilerplate metadata lines is slightly dense.

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 read-only capability check with an output schema, the annotations carry the safety profile and the description supplies endpoint, auth scopes, and the workspace-override parameter. An agent has enough to invoke it correctly; only an explicit tie-breaker against sibling capability/channel tools is missing.

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

Parameters3/5

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

Schema description coverage is 67%, so the schema already documents workspaceId and workspaceSlug as overrides. The closing sentence explains the override intent (use workspaceId or workspaceSlug to override the environment default), adding modest value, but nothing on the required uuid id or format constraints beyond the schema.

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 gives a specific verb and resource: "Evaluate provider capability blockers for a campaign draft," backed by the concrete endpoint GET /api/campaigns/{id}/provider-capabilities. This clearly separates it from generic campaign reads like luca_campaigns_get, though it does not distinguish itself from other capability-checking siblings such as luca_capabilities_get or luca_channels_features.

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 never states when to reach for this tool versus alternatives, nor any preconditions such as the draft needing to exist. It mentions that idempotency is not required and how to override the workspace, but neither is usage guidance about selecting this tool.

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

luca_campaigns_publishPublish a campaignA
Destructive

Freeze the draft as a new immutable version and point new enrollments at it. Published versions never change, and enrollments against a live campaign reach real leads. Publish is blocked when the target provider cannot do something the campaign needs, so read the provider capabilities first.

Luca operation: POST /api/campaigns/{id}/publish Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new context beyond them: published versions are immutable, live enrollments reach real leads, a capability-gated failure mode, the Idempotency-Key requirement, and scope requirements. Minor redundancy in restating the destructive/confirm behavior that annotations and the confirm schema field already carry keeps it at 4 rather than 5.

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

Conciseness4/5

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

Front-loaded with the core behavior in the first sentence, and the operational metadata (operation, scopes, idempotency, confirm, workspace override) is compact. Some lines duplicate what annotations and the confirm schema field already state, which trims it below 5.

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

Completeness5/5

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

An output schema exists, so return values need not be explained. The description covers the operation path, required scopes, idempotency behavior, the destructive confirm gate, workspace override, and the provider-capability precondition — everything needed to invoke this tool correctly under its complexity.

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 80%, so the baseline is 3. The schema already documents confirm, workspaceId, workspaceSlug, and idempotencyKey; the description's coverage of idempotencyKey ('or the server will generate one') and workspace override largely repeats it. Only 'id' gains meaning, inferred from the documented path POST /api/campaigns/{id}/publish.

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+effect: 'Freeze the draft as a new immutable version and point new enrollments at it.' An agent can distinguish this from siblings like luca_campaigns_set_status, luca_campaigns_draft_update, or luca_campaigns_versions_list without opening any schema.

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

Usage Guidelines4/5

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

Gives an explicit precondition and routes to a sibling: 'Publish is blocked when the target provider cannot do something the campaign needs, so read the provider capabilities first' (luca_campaigns_provider_capabilities). It also states the confirm: true gate. It does not, however, say when NOT to publish or contrast with set_status/draft_update, so it stops short of a 5.

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

luca_campaigns_set_statusPause, resume, or archive a campaignA
Destructive

Pause, resume, or archive a campaign. A transition that does not make sense for the campaign's current state is rejected rather than forced through.

Luca operation: POST /api/campaigns/{id}/status Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive when status is published (resuming sends): has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and non-idempotent, but the description adds the reason (resuming sends real messages) and the guardrail (confirm: true, rejected without it), plus required scopes, the redacted sensitivity level, and the server-side idempotency key fallback. That is substantial behavior beyond structured fields.

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

Conciseness4/5

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

Front-loaded with the action and the invalid-transition rule, then organized into short lines for scopes, idempotency, destructiveness, and workspace override. It carries some boilerplate (the long confirm semantics are duplicated in the schema), but nothing is confusing or padded.

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 6-parameter nested mutation with an output schema present, the description covers safety, auth scopes, retry semantics, and workspace scoping, so an agent can call it correctly. The main remaining gap is that it never clarifies the relationship to luca_campaigns_publish, which also touches campaign publication state.

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% and the description compensates by explaining why confirm exists, what idempotencyKey does on retries, and what workspaceId/workspaceSlug override. The allowed status enum values are only implied by the verb list rather than spelled out, keeping this below a 5.

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?

States a specific set of verbs (pause, resume, archive) against a clear resource (campaign), backed by the concrete endpoint POST /api/campaigns/{id}/status. It does not explicitly distinguish itself from the nearby luca_campaigns_publish sibling, which overlaps with the 'published' status value, so it falls short of a full 5.

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 operational conditions: invalid transitions are rejected rather than forced, confirm: true is mandatory when the status is published, and an Idempotency-Key is expected. It does not, however, say when to prefer this tool over luca_campaigns_publish or luca_pause_cadence, so sibling routing is left to inference.

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

luca_campaigns_simulations_createSimulate a campaignA

Run a persisted dry-run simulation without sending messages.

Luca operation: POST /api/campaigns/{id}/simulations Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.6/5.0
Behavior4/5

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

With annotations covering read/destructive/openWorld hints, the description adds real behavioral context: required scopes (campaigns:write, luca:queue_ops), data sensitivity full_content, the Idempotency-Key requirement and safe-retry semantics, and workspace override behavior. The persistent (write) nature of the simulation is disclosed. It does not address rate limits or reuse of prior simulation results.

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?

Purpose is front-loaded in the first sentence, followed by compact metadata lines (endpoint, scopes, sensitivity, idempotency, workspace). The scope/sensitivity lines are somewhat boilerplate but each conveys operational requirements an agent needs.

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

Completeness3/5

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

An output schema exists so return values need not be explained, and scope/idempotency/workspace context is covered. But for a nested-object tool with 8 undocumented body fields and 60% schema coverage, the description leaves the caller without guidance on how to shape the simulation input, which is the main complexity.

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 60%; the description adds meaning for workspaceId/workspaceSlug (override default workspace) and idempotencyKey (server generates one if omitted), which largely restates schema text. It says nothing about the body object's substantive fields (lead, eventType, sourceKind, startNodeId, replayedEnrollmentId, maxSteps), which are the core of a simulation, leaving a meaningful gap.

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?

States a specific verb and resource: 'Run a persisted dry-run simulation' scoped to a campaign. The 'without sending messages' qualifier tells the agent what the tool does not do. It does not differentiate from siblings like luca_campaigns_simulations_list, luca_campaigns_simulations_get, or luca_campaigns_comment_simulation_suite_run.

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?

It implicitly signals when to use it (to dry-run a campaign before publishing), and the persistence/no-send constraint is useful. However, it gives no explicit routing against the nearby simulation siblings (list vs get vs suite_run) and no preconditions beyond scope requirements.

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

luca_campaigns_simulations_getGet a campaign simulationA
Read-onlyIdempotent

Get a campaign simulation run with trace.

Luca operation: GET /api/campaigns/{id}/simulations/{simulationId} Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
simulationIdYes
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond that: required scopes (campaigns:read, luca:read), data sensitivity of full_content, and the note that idempotency is not required. It does not describe pagination or trace format, but the output schema exists.

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 purpose sentence is front-loaded and the remaining lines are compact metadata (operation, scopes, idempotency, workspace override). 'Does not require idempotency' is somewhat redundant against idempotentHint=true but otherwise the text is efficient and well-organized.

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 an output schema is present, return values need not be explained, and the description covers auth scopes, data sensitivity, idempotency, and workspace override. For a read-only GET tool this is close to complete; the only gap is the absence of routing guidance versus sibling list/create tools.

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

Parameters3/5

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

Schema coverage is 50%. The description adds meaning by mapping the URL path placeholders {id} and {simulationId} to the required parameters, and clarifies that workspaceId/workspaceSlug override the environment default. However, it does not add syntax or constraints beyond what the schema already documents for those two workspace fields, so it adds only modest value.

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?

States a specific verb and resource ('Get a campaign simulation run with trace') and the singular form distinguishes it from the sibling luca_campaigns_simulations_list. It does not name siblings explicitly, so differentiation is inferable rather than stated.

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?

There is no guidance on when to use this versus luca_campaigns_simulations_list or luca_campaigns_simulations_create. The only contextual instruction ('Use workspaceId or workspaceSlug to override the default workspace') is parameter usage, not when-to-use guidance.

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

luca_campaigns_simulations_listList a campaign's simulationsA
Read-onlyIdempotent

List persisted campaign simulation runs.

Luca operation: GET /api/campaigns/{id}/simulations Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, but the description adds real value beyond them: required scopes (campaigns:read, luca:read), data sensitivity 'redacted', and the underlying HTTP operation. The 'Does not require idempotency' line is slightly redundant against idempotentHint=true but not contradictory.

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?

Purpose is front-loaded in the first sentence, followed by compact metadata lines. Mostly efficient, though the 'Does not require idempotency' line adds little and the block reads as a flat list rather than prioritized prose.

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?

Output schema exists, so return values need not be explained. For a scoped, read-only list operation the description covers auth, sensitivity, workspace override, and the endpoint, leaving little an agent needs missing.

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

Parameters3/5

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

Schema description coverage is 60% (workspaceId, workspaceSlug, maxPages documented; id and pagination query object are bare). The description only restates the workspace override behavior already implied by the schema descriptions, adding no syntax or formatting detail to compensate for the gap.

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?

States a specific verb and resource: 'List persisted campaign simulation runs.' An agent can distinguish it from the create/get siblings by the 'list' verb, but the description never names those alternatives explicitly, so it falls short of full sibling differentiation.

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

Usage Guidelines3/5

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

The only prescriptive guidance is 'Use workspaceId or workspaceSlug to override the default workspace configured by environment.' There is no when-to-use-this-vs-get/create guidance, only implied read-only listing context.

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

luca_campaigns_versions_listList campaign versionsA
Read-onlyIdempotent

List a campaign's published version history. Published versions cannot change, so this is the record of what actually ran rather than what the draft says today.

Luca operation: GET /api/campaigns/{id}/versions Required scopes: campaigns:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/destructive/openWorld, so the bar is lower; the description adds genuinely new context, namely that published versions are immutable ('cannot change'), the required scopes, and data sensitivity. It does not explain pagination or ordering of the history, leaving a small gap.

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

Conciseness4/5

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

Front-loaded with the purpose and the published-vs-draft distinction, then structured metadata (operation, scopes, idempotency, workspace). Efficient overall, though the scope/idempotency lines read as boilerplate appended to most Luca tools.

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 an output schema present, return values need not be described; the description still supplies scopes, idempotency status, immutability, and workspace override. It is complete enough to call correctly, with only ordering/pagination behavior left unstated.

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% and the description adds real meaning beyond it by explaining that workspaceId/workspaceSlug exist to override the environment-default workspace, and the operation line clarifies that the required id is a campaign id. The id parameter's own semantics remain undocumented in both places, so not a 5.

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

Purpose5/5

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

States a specific verb and resource ('List a campaign's published version history') and immediately scopes it to published versions rather than drafts, so an agent can distinguish it from luca_campaigns_get / luca_campaigns_draft_update without reading schemas.

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 line 'this is the record of what actually ran rather than what the draft says today' gives a clear selection rule against the draft-oriented siblings, and the workspace override sentence explains context of use. It stops short of explicitly naming an alternative tool to call instead, so it does not reach a 5.

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

luca_capabilities_getWhat this workspace supportsA
Read-onlyIdempotent

Describe Luca's public API capabilities, scopes, and boundaries.

Luca operation: GET /api/capabilities Required scopes: leads:read, conversations:read, bookings:read, campaigns:read, broadcasts:read, webhooks:read, integrations:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, non-openWorld), so the bar is lower. The description still adds genuine context beyond them: the full required scopes list, the required OAuth scope, the 'redacted' data sensitivity level, and that idempotency keys are not required. It stops short of describing rate limits or response behavior, which the output schema presumably covers.

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 purpose is front-loaded in the first line, followed by clearly delimited metadata lines (operation, scopes, sensitivity, idempotency, override). It is compact and every line carries information, though the terse label-value formatting is more machine-scannable than prose-fluent.

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 an output schema present, return values need not be explained, and the description covers the relevant call-time concerns: auth scopes, sensitivity, idempotency, and workspace override. For a zero-required-parameter read-only discovery tool this is close to complete, with only usage routing left implicit.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline would be 3, but the description adds meaning beyond the schema by explaining that both parameters override the default workspace configured by the environment. That context about default behavior is not present in the schema's 'Optional Luca workspace id override' text.

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 gives a specific verb and resource: 'Describe Luca's public API capabilities, scopes, and boundaries.' No sibling tool offers a capabilities/discovery function, so an agent can distinguish it immediately, and the underlying operation (GET /api/capabilities) reinforces the read-only discovery purpose.

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?

Usage is implied (a capabilities/introspection call) but there is no explicit when-to-use or when-not guidance relative to the many sibling tools. The only directive, 'Use workspaceId or workspaceSlug to override the default workspace,' is parameter guidance rather than tool-selection guidance.

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

luca_channels_catalogList available channelsA
Read-onlyIdempotent

List every channel Luca supports and whether it can be connected yet. Availability is per channel, not per coach.

Luca operation: GET /api/channels/catalog Required scopes: channels:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior, and the description adds real value on top: required scopes (channels:read, luca:read), data sensitivity 'redacted', the underlying GET endpoint, and the non-obvious semantics that availability is per channel rather than per coach.

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

Conciseness4/5

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

Front-loads the human-readable purpose, then a compact metadata block (operation, scopes, idempotency, workspace override). Every line is short and earns its place; the metadata lines are terse rather than padded.

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?

An output schema exists, so return values need no explanation, and the description supplies the operation, scopes, sensitivity, and workspace-override mechanics an agent needs to call it correctly. Only the sibling differentiation 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%, so both optional parameters are already documented. The description restates the override purpose ('override the default workspace configured by environment'), which clarifies precedence relative to the environment default but adds little beyond the schema's 'Optional Luca workspace id override'.

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?

States a specific verb and resource ('List every channel Luca supports') and adds the meaningful qualifier that it reports connect-ability. It does not explicitly distinguish itself from near-name siblings luca_channels_list, luca_channels_get, or luca_channels_features, so an agent must infer the catalog-vs-list distinction.

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?

Usage is only implied: the per-channel availability note and the workspace-override sentence suggest a discovery call scoped to a workspace. There is no explicit when-to-use, no when-not, and no named alternative among the four channel siblings.

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

luca_channels_featuresList channel featuresA
Read-onlyIdempotent

List what each provider supports, from sending media to interactive replies, and what still blocks a feature: a permission, a webhook field, or a provider approval. Check this before telling the coach a channel can do something.

Luca operation: GET /api/channels/features Required scopes: channels:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world. The description adds value beyond them: required scope channels:read, the luca:read OAuth scope, redacted data sensitivity, and the semantic meaning of a 'blocked' feature. The line 'Does not require idempotency' sits in mild tension with idempotentHint: true, but it refers to an idempotency key rather than the operation's repeat-safety, so it is not a direct contradiction.

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

Conciseness4/5

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

Well front-loaded: the capability-check purpose comes first, then machine-readable metadata (operation, scopes, idempotency, workspace override) in short discrete lines. The scopes/sensitivity boilerplate is compact and each line carries distinct information.

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?

An output schema exists, so return-value documentation is correctly omitted, and annotations carry the safety profile. Scope requirements, endpoint, and override semantics are present; the only real gap is routing guidance against the many channel and provider-capability siblings.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's note that workspaceId/workspaceSlug override 'the default workspace configured by environment' adds a small amount of context absent from the schema's 'Optional Luca workspace id override', but it does not clarify precedence when both are supplied.

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

Purpose4/5

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

The description states a specific verb and resource ('List what each provider supports') and goes further by enumerating the feature domain (sending media, interactive replies) and the blocking conditions (permission, webhook field, provider approval). It does not explicitly differentiate itself from close siblings such as luca_channels_list, luca_channels_get, luca_channels_catalog, or luca_campaigns_provider_capabilities, which is the only thing keeping it from a 5.

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?

'Check this before telling the coach a channel can do something' is a real usage cue — a pre-flight capability check — so guidance is implied and actionable. However, no alternative is named and no exclusion is given, despite a 150+ sibling set containing several channel-related list/get tools the agent must choose between.

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

luca_channels_getGet a channel accountA
Read-onlyIdempotent

Read one channel account: status, health, cleanup state after a disconnect, and the actions the coach can take on it. Older rows stay readable by ID.

Luca operation: GET /api/channels/{id} Required scopes: channels:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/non-openWorld, but the description adds operationally relevant facts the annotations do not: required scopes (channels:read, luca:read), data sensitivity 'redacted', and the underlying GET endpoint. 'Does not require idempotency' is slightly confusing next to idempotentHint=true but reads as 'no idempotency key needed' rather than a contradiction.

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

Conciseness4/5

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

Front-loads the substantive content (what is read, key fields) before the operational metadata block. The metadata lines (Luca operation, required scopes, idempotency) are boilerplate but compact and easy to scan.

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?

An output schema exists, so return values need not be described, and annotations carry the safety profile; the description still supplies auth scopes, sensitivity, endpoint, and workspace-override semantics. The main gap is routing guidance relative to the other channel tools, which is a usage concern rather than a missing prerequisite.

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% – id is undocumented but self-evident as a UUID, while workspaceId/workspaceSlug already carry schema descriptions. The description adds real meaning beyond the schema by explaining that these override the environment-configured default workspace, which the schema alone does not state.

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?

States a specific verb (Read) and resource (one channel account) and enumerates what the payload covers: status, health, disconnect cleanup state, and available coach actions. The singular 'one channel account' implicitly distinguishes it from the plural luca_channels_list, though no sibling is named explicitly.

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?

'Read one channel account' and 'Older rows stay readable by ID' imply the usage (fetch a single known channel by ID), but there is no explicit when-to-use or when-not guidance versus luca_channels_list, luca_channels_catalog, or luca_channels_features. The workspace-override sentence is parameter guidance, not tool-selection guidance.

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

luca_channels_listList channel accountsA
Read-onlyIdempotent

List the coach's current channel accounts, one per provider account, with each one's status, health, and what the composer can send through it. Connecting, pausing, and repairing an account stay in the Luca app.

Luca operation: GET /api/channels Required scopes: channels:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds real value beyond that: required OAuth scope (luca:read), scopes list (channels:read), and data sensitivity (redacted), which an agent needs to reason about the call's constraints.

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

Conciseness4/5

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

Front-loaded with the core purpose in the first sentence, followed by the out-of-scope note and operational metadata. Each line carries signal, though 'Does not require idempotency' partially restates the idempotentHint annotation rather than adding new information.

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

Completeness5/5

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

With an output schema present, return-value details need not be spelled out, and the description still summarizes what each entry contains. Combined with scope, sensitivity, safety annotations, and the workspace-override note, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining that both workspaceId and workspaceSlug are overrides of an environment-configured default workspace, which adds the semantic that these are optional context switches rather than required inputs.

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?

States a specific verb (List) and resource (channel accounts) with useful scope detail: 'one per provider account, with each one's status, health, and what the composer can send through it.' It's clear and concrete, but it never names a sibling (e.g. luca_channels_get or luca_channels_catalog), so the agent must infer the list-vs-single distinction on its own.

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 a clear boundary statement – 'Connecting, pausing, and repairing an account stay in the Luca app' – telling the agent this tool cannot perform channel mutations, and explains the workspace override. It provides solid usage context but does not explicitly point to an alternative sibling when a single account or feature detail is needed.

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

luca_close_call_loopClose the loop on a callA
Destructive

File what happened on a call and what it was worth, in one call. Reports attendance on the call event (completed, no_show, rescheduled, or cancelled) and, when an outcome is given, records the booking outcome: won with an amount, lost with a reason id from luca_bookings_outcome_reasons_list, or open with the next follow-up. This tool sends no message to the lead itself, but the records it files start work in the API. Reporting a no_show can start no-show recovery, which schedules a message to the lead when the booking type has recovery on. A completed call queues its summary, which can later sync to the connected CRM. A won or lost outcome queues a CRM deal-stage update, and lost also moves the lead to lost. Pass confirm: true before reporting a no_show or recording a won or lost outcome. Example: { bookingId, attendance: "completed", outcome: "won", amountMinor: 250000, currency: "USD", confirm: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoThe coach's notes on the call, stored on the call event.
ratingNoThe coach's 1-5 rating of the call.
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
outcomeNoThe revenue outcome. Leave it off to report attendance only and record the money later.
currencyNoISO-4217 currency for amountMinor, uppercase.
bookingIdYesThe booking whose call just happened.
attendanceYesWhat happened to the call itself.
amountMinorNoDeal value in minor units (cents) when outcome is won.
outcomeNoteNoNote stored on the revenue outcome, separate from notes.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoReuse the same key when retrying this exact report. Both writes are scoped by route, so one key covers the pair.
nextFollowUpAtNoRequired when outcome is open: ISO-8601 follow-up time.
expectedVersionNoThe outcome version you read, when correcting an earlier outcome. A stale version returns 409 with the current one.
followUpTimezoneNoRequired when outcome is open: IANA timezone the follow-up is scheduled in.
lossReasonDefinitionIdNoRequired when outcome is lost: a reason id from luca_bookings_outcome_reasons_list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructive/openWorld/non-idempotent, and the description goes well beyond them: it explicitly states no message is sent to the lead itself, but that records start API work — no-show recovery scheduling a lead message, call summary queued for CRM sync, won/lost queuing a deal-stage update, and lost moving the lead to lost. It also states the confirm:true gate for no_show/won/lost, which the annotations do not capture.

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 core purpose is front-loaded and every subsequent sentence carries a distinct behavioral fact (side effects, confirm requirement, example). It is dense and paragraph-form rather than scannable, and the example at the end is somewhat long, but nothing is wasted.

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

Completeness5/5

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

For a 16-parameter mutation with an output schema present, the description covers the essentials an agent needs: what it writes, which side effects fire under which attendance/outcome values, the destructive-action confirmation gate, and a concrete call shape. Return values are handled by the output schema, so nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds conditional wiring (won with an amount, lost with a reason id from a named sibling tool, open with the next follow-up) and a worked example showing bookingId/attendance/outcome/amountMinor/currency/confirm together. That mostly restates schema-level 'required when outcome is X' notes, so it is a modest step above baseline rather than a large one.

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 opening sentence names a specific verb+resource+scope: 'File what happened on a call and what it was worth, in one call.' It then spells out the two distinct records it files (attendance on the call event, revenue outcome on the booking), which separates it from sibling tools like luca_call_events_feedback or luca_bookings_outcome_record that do only half the job.

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

Usage Guidelines4/5

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

It gives clear conditions of use ('when an outcome is given, records the booking outcome'; completed vs no_show vs won/lost each trigger different downstream work) and names luca_bookings_outcome_reasons_list as the source of loss reason ids. It never explicitly says when to pick this over the related booking/call-event siblings, so it stays at 4 rather than 5.

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

luca_coach_audit_logRead the audit logA
Read-onlyIdempotent

Read the coach-visible audit trail, newest first, filterable by actor type, action, action prefix, or target. It is the one read that spans every domain, so use it to check what a previous run actually did instead of replaying each list route.

Luca operation: GET /api/audit-log Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds real context beyond them: required scopes (coach:read, luca:read), redacted data sensitivity, workspace override behavior, and newest-first ordering. Repeating the idempotency fact adds nothing, but the redaction and scope disclosures are genuinely useful.

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 front-loads what the tool is, the second adds the routing rationale, and the operational block packs scopes and workspace behavior compactly. Mild waste in restating idempotency already asserted by annotations.

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

Completeness4/5

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

Output schema exists, so return values need no explanation, and pagination/truncation behavior is documented in the maxPages schema field. Scopes, redaction, ordering, and workspace override are all covered; the one remaining gap is that actorType/action have no enums or valid-value guidance, so an agent doesn't know what values to pass.

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 75% with the entire nested query object's seven filter fields undocumented, so the description carries meaningful load by naming actor type, action, action prefix, and target as the filterable dimensions, plus the workspaceId/workspaceSlug override. It still doesn't clarify cursor/limit semantics or differ action vs actionPrefix, but it substantially compensates.

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

Purpose5/5

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

Names a specific verb and resource (read the coach-visible audit trail), specifies ordering (newest first), enumerates the filter dimensions, and carves out a distinct niche as 'the one read that spans every domain' — clear against the many domain-specific list siblings.

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 a concrete when-to-use rule: check what a previous run did instead of replaying each list route. The alternative is described as a category ('each list route') rather than a named sibling, and there are no explicit when-not conditions, so it falls just short of the top mark.

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

luca_coach_nicheRead the coach's nicheA
Read-onlyIdempotent

Read the coach's canonical niche, the cohort key their benchmarks are compared against.

Luca operation: GET /api/coaches/niche Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing the required OAuth scopes (coach:read, luca:read), the data sensitivity level (redacted), and the underlying endpoint. The 'does not require idempotency' line is slightly noisy against idempotentHint=true (it appears to mean no idempotency key is needed), but it is not a real contradiction.

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?

Purpose is front-loaded in the first sentence, with operational metadata (endpoint, scopes, sensitivity, idempotency) following in short labeled lines. The boilerplate metadata lines are slightly formulaic but each carries actionable information for a constrained read.

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?

An output schema exists, so return-value explanation is not required, and the description covers auth scope, sensitivity, and workspace targeting. The only missing piece is how this niche read relates to sibling endpoints like luca_coach_niche_profile, which would help an agent avoid picking the wrong one.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline would be 3; the description adds real meaning by explaining that workspaceId/workspaceSlug override the default workspace configured by the environment, which the schema alone does not say. It stops short of explaining precedence between the two override parameters.

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?

Names a specific verb+resource ('Read the coach's canonical niche') and adds a clarifying gloss — the cohort key used for benchmark comparison — which tells an agent what the value actually means. It does not explicitly distinguish itself from the nearby luca_coach_niche_profile sibling, so it falls short of a 5.

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?

Usage is only implied: an agent can infer this is the read to perform when benchmark cohort context is needed. There is no explicit when-to-use/when-not statement and no routing to luca_coach_niche_profile or luca_analytics_benchmarks, which are plausible alternatives for related data.

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

luca_coach_niche_profileRead the coach's niche profileA
Read-onlyIdempotent

Read the coach's offer, audience, price range, promised outcomes, disqualifiers, and FAQs. This is the context that decides whether a lead is a fit.

Luca operation: GET /api/coaches/niche-profile Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context (required scopes coach:read, OAuth scope luca:read, data sensitivity redacted), but 'Does not require idempotency' merely restates the idempotentHint annotation and no return/pagination behavior is described.

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 lead sentence front-loads the resource and its contents before any operational boilerplate. The scope/endpoint scaffold lines are somewhat mechanical and one line duplicates the annotations, but the whole remains short and skimmable.

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 an output schema present, return values need not be described, and annotations plus the auth/scope lines cover the operational surface. The one meaningful gap is that nothing separates this tool from luca_coach_niche, an agent-facing ambiguity.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description lifts it by explaining that workspaceId/workspaceSlug override the workspace configured by environment — a detail the schema's terse 'Optional Luca workspace id override' does not clarify.

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?

States a specific verb and resource ('Read the coach's niche profile') and enumerates what the profile contains (offer, audience, price range, promised outcomes, disqualifiers, FAQs), plus the underlying GET endpoint. However, it never distinguishes itself from the near-identical sibling 'luca_coach_niche', leaving an ambiguity an agent must resolve on its own.

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?

'This is the context that decides whether a lead is a fit' implies a use case, and the closing line explains how to override the default workspace. But there is no explicit when-to-use/when-not guidance and no named alternative, which matters given siblings like luca_coach_niche and luca_coach_objection_playbook.

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

luca_coach_objection_playbookRead the coach's objection playbookA
Read-onlyIdempotent

Read how the coach wants each objection type handled — price, timing, trust, fit — before drafting a reply to one.

Luca operation: GET /api/coaches/objection-playbook Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds non-obvious operational context beyond the annotations: required scopes (coach:read, luca:read), a 'redacted' data sensitivity level, and an explicit 'Does not require idempotency' note, which meaningfully informs callers.

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 purpose sentence is front-loaded and earns its place, immediately telling the agent what the tool returns and when to use it. The remaining metadata lines are boilerplate but compact and each carries distinct operational value, so there is little waste.

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?

An output schema exists, so return values need not be described. Between the explicit purpose, the workflow trigger, the auth scope requirements, and the workspace-override note, the description gives everything an agent needs to invoke this read-only 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 description coverage is 100%, so both parameters (workspaceId, workspaceSlug) are already documented and the baseline is 3. The description's sentence about using workspaceId/workspaceSlug to override the environment default adds a small amount of intent (these are overrides) but largely repeats what the schema already conveys.

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 ('Read') and resource ('the coach's objection playbook') and enumerates the exact scope of content: price, timing, trust, fit. An agent can distinguish it from sibling tools like luca_draft_reply or luca_review_queue_objection_variant without opening the schema.

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

Usage Guidelines4/5

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

Provides a clear temporal/usage cue — read this 'before drafting a reply to one' — which tells the agent when in a workflow to invoke it. It does not name concrete alternative tools (e.g., luca_draft_reply) or state exclusions, so it stops short of a full when/when-not/alternatives mapping.

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

luca_coach_post_call_crm_mappingRead the post-call CRM mappingA
Read-onlyIdempotent

Read which CRM field each post-call value writes to. Check this before a CRM push to know what will land where.

Luca operation: GET /api/coaches/post-call-crm-mapping Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds auth requirements (coach:read, luca:read), a redacted data-sensitivity marker, the underlying endpoint, and the workspace-override behavior, which is genuine value beyond 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 purpose and usage condition are front-loaded in the first two clauses, followed by a compact metadata block (operation, scopes, idempotency, workspace override). Every line carries information, though the boilerplate metadata lines are slightly template-like rather than tailored.

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 tool is a simple read with two optional parameters and an output schema, so return values need not be explained. Purpose, auth, sensitivity, and workspace override behavior are all covered; the only gap is routing guidance relative to the other CRM-mapping siblings.

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 both parameters already carry descriptions, so the baseline is 3. The description goes further by explaining that workspaceId/workspaceSlug override a default workspace configured by the environment, which clarifies the parameters' purpose beyond the schema's terse 'Optional Luca workspace id override.'

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

Purpose4/5

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

The description states a specific verb and resource: 'Read which CRM field each post-call value writes to', which is concrete and unambiguous. It does not, however, distinguish this tool from related siblings such as luca_integrations_crm_mappings_suggest/confirm or luca_coach_post_call_deal_sync, so an agent must infer which mapping tool to use.

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

Usage Guidelines4/5

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

It gives an explicit usage trigger: 'Check this before a CRM push to know what will land where.' That is a clear context for when to call it, but no exclusions or named alternatives are offered, so the boundary against other CRM-mapping tools remains implicit.

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

luca_coach_post_call_deal_syncRead the post-call deal sync settingsA
Read-onlyIdempotent

Read the CRM pipeline and the stage each call outcome moves a deal to.

Luca operation: GET /api/coaches/post-call-deal-sync Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), and the description adds genuinely non-structured context: required scopes (coach:read, luca:read), that data sensitivity is 'redacted', and the underlying GET endpoint. 'Does not require idempotency' largely restates idempotentHint, but the auth and redaction details are real additions.

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 short and front-loaded: the purpose sentence comes first, followed by a compact operational block. The 'Does not require idempotency' line duplicates the idempotentHint annotation and is the one sentence that does not fully earn 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 zero-required-parameter read tool with an output schema, an idempotency annotation, and full schema coverage, the description supplies everything needed: endpoint, auth scopes, sensitivity handling, and default-workspace override semantics. Return values are covered by the output schema, so nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3), and the description goes beyond the terse schema text by explaining that both parameters override a default workspace configured by the environment. That clarifies the otherwise unstated fallback behavior when neither parameter is supplied, which the schema does not convey.

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?

States a specific verb (read) and resource (post-call deal sync settings: the CRM pipeline and the stage each call outcome maps to), which is more concrete than the title alone. It is reasonably distinguishable from related siblings like luca_coach_post_call_settings and luca_coach_post_call_crm_mapping, though it never explicitly says how it differs from them.

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?

Usage is implied rather than stated: an agent can infer this is the configuration-inspection tool for post-call deal syncing. The only explicit usage instruction is 'Use workspaceId or workspaceSlug to override the default workspace configured by environment', which is parameter guidance rather than when-to-use/when-not guidance, and no alternative sibling is named.

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

luca_coach_post_call_settingsRead the post-call settingsA
Read-onlyIdempotent

Read the coach's post-call preferences: what gets summarized, what gets pushed to the CRM, and what the coach fills in themselves.

Luca operation: GET /api/coaches/post-call-settings Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond them by disclosing the required scopes (coach:read, luca:read), the 'redacted' data sensitivity, and the underlying GET endpoint, which an agent cannot derive from 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 purpose is front-loaded in the first line, followed by a compact metadata block (endpoint, scopes, idempotency, workspace override) where each line carries distinct information. Slightly template-like but no sentence is wasted.

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 parameterless read tool with an output schema and full annotation coverage, the description supplies the remaining essentials: auth scopes, sensitivity level, endpoint, and workspace selection. Return values need not be described since an output schema exists; only richer usage guidance 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?

With 100% schema description coverage, the baseline is 3, and both parameters are already documented in the schema. The description goes slightly beyond by explaining that these override a default workspace configured by environment, adding the concept of an implicit default that the schema alone does not convey.

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?

States a specific verb and resource ("Read the coach's post-call preferences") and enumerates what the settings cover: summarization, CRM push, and coach-filled fields. This distinguishes it reasonably from generic reads, though it does not explicitly clarify its boundary against the sibling luca_coach_post_call_crm_mapping, whose scope partly overlaps with the 'pushed to the CRM' content.

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 only usage-oriented sentence is 'Use workspaceId or workspaceSlug to override the default workspace configured by environment,' which is parameter guidance, not when-to-use guidance. No alternatives are named and no precondition or exclusion (e.g., vs crm_mapping or deal_sync) is offered, leaving the agent to infer fit from the name alone.

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

luca_coach_profileRead the coach's profileA
Read-onlyIdempotent

Read the coach's account record: name, timezone, business hours, and tone slider. Use it to know when the coach is reachable and how formal they want to sound.

Luca operation: GET /api/coaches/me Required scopes: coach:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds genuinely new context: required scopes (coach:read, luca:read) and 'data sensitivity: redacted'. 'Does not require idempotency' is largely redundant with idempotentHint=true.

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

Conciseness4/5

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

Front-loaded with the purpose and use case in the first sentence, then a compact metadata block. 'Does not require idempotency' duplicates the idempotentHint annotation and is the only wasted line.

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 read-only GET with an output schema, complete annotations, documented scopes, and workspace-override semantics, nothing an agent needs to invoke it correctly is missing; return values are properly delegated to the output schema.

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 two workspace parameters are already documented. The description adds the fact that these override a workspace configured by environment, which explains the default behavior the schema does not, though it omits precedence if both are supplied.

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?

States a specific verb and resource ('Read the coach's account record') and enumerates the returned fields (name, timezone, business hours, tone slider), which functionally separates it from niche/post-call coach tools. It never names a sibling tool, so differentiation is left to inference rather than stated.

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?

'Use it to know when the coach is reachable and how formal they want to sound' gives a clear motivating context for calling it. There is no explicit when-not guidance or pointer to alternatives such as luca_coach_niche or luca_coach_post_call_settings.

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

luca_conversations_getGet a conversationA
Read-onlyIdempotent

Get a conversation with messages and lead context.

Luca operation: GET /api/conversations/{id} Required scopes: conversations:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful non-schema context: required scopes (conversations:read, luca:read), data sensitivity 'full_content', and the note that no idempotency key is needed.

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

Conciseness4/5

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

Front-loaded with the outcome sentence, then scannable metadata lines. Slight redundancy between 'Required scopes: conversations:read' and 'Required OAuth scope: luca:read', and the idempotency line is arguably noise for a read operation, but nothing is bloated.

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?

An output schema exists, so return-value detail is not required here. Scopes, sensitivity, workspace override behavior, and idempotency expectations are all present; the only real gap is the absence of routing guidance against sibling conversation tools.

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

Parameters3/5

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

Schema coverage is 67%; workspaceId and workspaceSlug are already documented in the schema, and the description restates their override behavior while adding the 'default workspace configured by environment' context. The required 'id' parameter has no description in either the schema or the description, though its UUID format/pattern makes it largely self-evident.

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?

States a specific verb and resource ('Get a conversation') and adds scope detail ('with messages and lead context'), which distinguishes it from the sibling luca_conversations_list. It stops short of explicitly contrasting with luca_conversations_messages, so an agent must infer the split from names alone.

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 gives the precondition for workspace targeting ('Use workspaceId or workspaceSlug to override the default workspace configured by environment'), but never says when to prefer this tool over luca_conversations_list or luca_conversations_messages. Usage is implied by the operation name rather than stated.

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

luca_conversations_listList conversationsA
Read-onlyIdempotent

List recent conversations. Query supports limit, cursor, channel, and q.

Luca operation: GET /api/conversations Required scopes: conversations:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, non-open-world. The description adds genuinely useful behavioral context beyond that: required scopes (conversations:read, luca:read), full_content data sensitivity, that idempotency isn't required, and the workspace override. It does not, however, describe pagination/truncation behavior at the tool level.

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

Conciseness4/5

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

Front-loaded with the purpose sentence, followed by compact metadata lines. Every line is short and mostly earns its place, though the operation/scope/idempotency lines have a boilerplate feel.

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?

An output schema exists, so return-value explanation is not needed. Combined with annotations and the schema's own maxPages description, the definition covers purpose, auth scopes, data sensitivity, and workspace scoping adequately; only richer when-to-use guidance is missing.

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

Parameters3/5

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

Schema description coverage is 75%, so the schema already carries most parameter meaning; the description adds the workspace override semantics for workspaceId/workspaceSlug. It names only some query fields (limit, cursor, channel, q) and omits channelAccountId, externalAccountId, and maxPages, so it adds moderate rather than full value.

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?

States a specific verb+resource (list conversations) with scope (recent) and the underlying operation GET /api/conversations. It clearly reads as a collection-listing tool distinct from luca_conversations_get, but it never explicitly names or contrasts a sibling.

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?

Usage is implied by the name and 'List recent conversations', and it notes the workspaceId/workspaceSlug override for the default workspace. However, it gives no explicit when-to-use vs alternatives (e.g. luca_conversations_get for a single conversation or luca_conversations_messages for messages), leaving routing to inference.

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

luca_conversations_messagesRead a conversation's messagesA
Read-onlyIdempotent

Page backward through a thread's older messages, for threads longer than the window the conversation read returns.

Luca operation: GET /api/conversations/{id}/messages Required scopes: conversations:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: required scopes, 'data sensitivity: full_content', the workspace-override behaviour against the environment default, and pagination/truncation semantics.

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

Conciseness4/5

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

Front-loaded with the core purpose in the first sentence, followed by compact operational facts (endpoint, scopes, idempotency, workspace override). No sentence is filler, though the scope/sensitivity lines are somewhat boilerplate.

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?

An output schema exists, so return-shape explanation is unnecessary, and the description still notes truncation/nextCursor behaviour. Combined with the scopes and workspace-override notes, an agent has enough to call it correctly; only the query-parameter semantics are thin.

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 60%, so the baseline is 3. The description adds useful meaning for workspaceId/workspaceSlug (they override the environment-configured default workspace), but says nothing about the 'before' or 'limit' query parameters, leaving part of the coverage gap unfilled.

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 ('page backward through older messages') and resource (a thread's messages), and immediately scopes it to threads longer than the window returned by the conversation read, which distinguishes it from sibling luca_conversations_get.

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

Usage Guidelines4/5

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

Gives a clear condition for use ('threads longer than the window the conversation read returns'), which implicitly routes the agent away from luca_conversations_get. It does not explicitly name that sibling or spell out when not to use this tool, so it stops short of a 5.

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

luca_conversations_partial_send_retryRetry unsent message partsA
Destructive

Retry only the parts of a partially sent message that are known not to have reached the provider.

Luca operation: POST /api/conversations/{id}/messages/{messageId}/retry Required scopes: conversations:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
messageIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety bar is lowered. The description adds real value beyond that: required OAuth scopes (conversations:write, luca:queue_ops), data sensitivity, the server-side idempotency-key generation fallback, and the fact that the call is rejected without confirm. It does not, however, describe what partial-failure state is left behind or revocation semantics.

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 purpose is front-loaded in the first sentence and the following lines are short, scannable operational facts (endpoint, scopes, idempotency, confirm, workspace override). Some lines duplicate structured metadata (e.g. endpoint and the confirm requirement also appear in the schema), which is minor waste but not egregious.

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 an output schema present, return values need not be explained. For a destructive, scope-gated tool the description supplies scopes, idempotency, confirm, and workspace override — nearly everything an agent needs to invoke it correctly. Only deeper failure/reversibility semantics are missing.

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

Parameters3/5

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

Schema description coverage is 67%, so the baseline is 3. The description restates what the schema already documents for idempotencyKey (auto-generation when omitted) and confirm, and adds the workspace override intent, but it does not clarify the required id/messageId beyond the UUID schema, leaving marginal added 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?

States a specific verb (retry) and a precise resource scope ('only the parts of a partially sent message that are known not to have reached the provider'), which clearly separates it from luca_conversations_send and luca_conversations_messages. The endpoint annotation 'POST /api/conversations/{id}/messages/{messageId}/retry' reinforces what it operates on.

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?

Clear context for use: retry only the unsent portions of a partially delivered message, and the description states the precondition for safe retries (idempotencyKey) and the mandatory confirm: true. It does not explicitly name alternatives (e.g. luca_conversations_send for full resend) or when-not-to-use it, so it falls short of explicit routing.

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

luca_conversations_sendSend a message to a leadA
Destructive

Send a message to the lead on their channel right away. This is the one conversation tool that reaches a real person without a reviewer seeing the message first, which is why it needs an explicit confirm. Prefer drafting into the review queue unless the coach has asked for this message to go out now.

Luca operation: POST /api/conversations/{id}/send Required scopes: conversations:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already carry destructiveHint=true and idempotentHint=false, but the description adds meaningful context beyond them: the reviewer-bypass nature, the required confirm: true gate, idempotency-key generation behavior, required scopes (conversations:write, luca:queue_ops), data sensitivity (redacted), and workspace override semantics. This is a genuinely rich behavioral disclosure for a side-effecting 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 key scoping and review-queue guidance is front-loaded in the first two sentences. The remaining lines are operational metadata (operation path, scopes, sensitivity) that is useful but somewhat templated and repetitive of the confirm parameter description.

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 complex, nested, destructive send tool with an output schema and full annotations, the description covers purpose, prerequisite confirm, idempotency, scopes, and workspace scoping. It leaves the body content part types (text/media/interactive/template) to the schema, which is acceptable given schema and output-schema richness.

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 67%, which sits in the mid band where the schema largely documents the parameters (confirm, workspaceId, workspaceSlug, idempotencyKey all carry descriptions). The description restates idempotency and workspace behavior rather than adding syntax or format detail beyond the schema, so baseline 3 is appropriate.

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?

States a specific verb+resource ("Send a message to the lead on their channel right away") and distinguishes itself from the review-queue flow by noting it is "the one conversation tool that reaches a real person without a reviewer seeing the message first." It does not name the specific alternative sibling tool (e.g. a review_queue/approve tool), so the differentiation is by category rather than by name.

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 an explicit when-not: "Prefer drafting into the review queue unless the coach has asked for this message to go out now." This is a real selection rule an agent can act on. It stops short of naming the concrete alternative tool, so a 4 rather than a 5.

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

luca_draft_replyDraft a reply for a leadA

Draft a voice-matched reply for a lead on demand and queue it for review — the middle step of the reply loop (triage → draft → approve). Optional guidance steers tone or content. Nothing is sent; approve it with luca_approve_and_send. Example: call with { leadId, guidance: "keep it short and warm" }.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYesThe lead to draft a reply for.
guidanceNoOptional steer for tone or content of the draft.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoReuse the same key when retrying this exact draft.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety bar is partly covered, but the description adds genuinely useful context: the result is queued for review and 'nothing is sent.' That clarifies a mutation whose effect is non-delivering, which annotations alone do not convey. It does not discuss idempotency or permission requirements, keeping it short of a 5.

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

Conciseness5/5

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

Front-loads the core action, then the workflow position, the non-sending guarantee, and a concrete call example. Every sentence carries distinct information with no filler, and the example is compact and directly actionable.

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

Completeness5/5

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

For a 5-parameter mutation with a full output schema and high schema coverage, the description supplies everything an agent needs: purpose, workflow placement, the routing to the approve tool, and a usage example. Return values are correctly left to the output schema.

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 leadId, guidance, workspace overrides, and idempotencyKey are already documented in the schema. The description echoes that guidance is optional ('Optional guidance steers tone or content') and the example illustrates a call shape, but adds no new semantics. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('draft a voice-matched reply for a lead') plus the outcome ('queue it for review'), which cleanly separates it from send tools like luca_conversations_send and luca_approve_and_send. The phrase 'voice-matched' adds a distinguishing detail about how the draft is produced.

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?

Places the tool explicitly in a workflow ('the middle step of the reply loop: triage → draft → approve') and names the downstream alternative with its purpose ('Nothing is sent; approve it with luca_approve_and_send'). The agent knows both when to call this and what to call next.

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

luca_find_leadsFind leadsA
Read-onlyIdempotent

Search the coach's leads by free-text query and optional channel. Use this to locate a lead before drafting, booking, or flagging. Example: call with { query: "maria instagram" } to find Maria's Instagram lead.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 10).
queryYesFree-text search: name, handle, or keyword.
channelNoOptional channel filter.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds only that search is free-text over the lead set with an optional channel narrowing, and says nothing about result size, ordering, or no-match behavior. With annotations carrying the safety profile, a 3 is appropriate.

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

Conciseness4/5

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

Two sentences, front-loaded with the core action, plus a concrete call example. Nothing is padded, though the example slightly restates the query/channel semantics already implied by the first sentence.

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 an output schema present, return values need not be described, and a read-only lookup tool does not require permission or side-effect disclosure. The definition is complete for its complexity; only the missing sibling disambiguation keeps it from a 5.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are documented in the schema and baseline is 3. The example ('maria instagram' matching Maria's Instagram lead) usefully illustrates that the query spans both name and handle and can combine with channel, but it does not extend beyond what the schema already declares.

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?

States a specific verb and resource (search the coach's leads) and adds scope: free-text query plus optional channel filter. It does not distinguish itself from close siblings like luca_leads_list or luca_leads_get, so an agent still has to infer which lead-lookup tool to pick.

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 real workflow context ('locate a lead before drafting, booking, or flagging'), which tells the agent when in a sequence to reach for it. It stops short of naming an alternative (e.g. luca_leads_list) or stating exclusions, so the routing guidance is clear but incomplete.

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

luca_flag_for_humanFlag a lead for human attentionA

Add a note to a lead, tagged [needs-human], that the coach sees on the lead's timeline. This is an ordinary note with a prefix — it does not route, alert, or reprioritize anything. Use when a conversation needs judgment an agent should not exercise (payment claims, distress, legal), and tell the coach directly if it is urgent. Example: call with { leadId, reason: "lead mentioned a refund dispute" }.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYesThe lead to flag.
reasonYesWhy a human should look — shown to the coach verbatim.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoReuse the same key when retrying this exact flag.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, but the description adds the critical semantic clarification that despite the name 'flag_for_human' this only writes a prefixed note and does NOT route, alert, or reprioritize. That single sentence prevents a serious misreading of the tool's effect and is exactly the value-add annotations cannot express.

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?

Four sentences, each earning its place: what it does, what it does not do, when to use it, and a concrete example. Front-loaded with the clarifying negative constraint before the usage guidance.

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?

An output schema exists so return values need not be described, and annotations carry the safety profile. Combined with the explicit effect description, usage triggers, and example, an agent has everything needed to call this correctly and interpret its effect.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters, including that 'reason' is shown to the coach verbatim. The description's example call reinforces leadId/reason usage but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (add a note to a lead, tagged [needs-human], visible on the timeline) and immediately distinguishes itself from routing/alerting siblings by clarifying it is 'an ordinary note with a prefix — it does not route, alert, or reprioritize anything.' An agent can tell exactly what happens without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use criteria ('a conversation needs judgment an agent should not exercise') with concrete trigger categories (payment claims, distress, legal), plus an escalation instruction ('tell the coach directly if it is urgent'). Nothing is left to inference.

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

luca_insights_dismissDismiss an insightA
Destructive

Dismiss one insight the coach does not want to act on. Use this rather than leaving it unread forever.

Luca operation: POST /api/insights/{id}/dismiss Required scopes: insights:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds material context beyond that: required scopes (insights:write, luca:draft), data sensitivity, the workspace-override mechanism, and the idempotency-key requirement with server-generated fallback for safe retries. It still doesn't say whether a dismissed insight can be un-dismissed or what happens to it afterwards.

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

Conciseness4/5

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

Front-loaded with the purpose sentence, then a compact operation/scope/idempotency/workspace block. Every line is short and earns its place, though the 'Luca operation' and scope lines read as generated boilerplate rather than agent-facing guidance.

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?

An output schema exists, so return values need no explanation, and the description covers the mutation, its auth requirements, retry semantics, and workspace scoping. The remaining gap is the absence of reversibility/state-effect information for a destructive operation and no contrast against sibling insight actions.

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 75%, so the schema carries most of the load, but the description adds real semantics: it explains that workspaceId/workspaceSlug override the environment-configured default workspace, and that omitting idempotencyKey causes the server to generate one — behavior the schema alone doesn't convey.

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?

States a specific verb+resource ('Dismiss one insight') and adds the intent ('the coach does not want to act on'). It partially distinguishes itself from the sibling luca_insights_unread_count, but it never contrasts with the closer siblings luca_insights_mark_read and luca_insights_mark_actioned, so an agent still has to infer which of those three to pick.

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 line 'Use this rather than leaving it unread forever' gives an implied usage condition, which is more than nothing. However, with mark_read and mark_actioned as direct siblings on the same insight entity, the description gives no rule for choosing dismiss over those alternatives — exactly the ambiguity this field should resolve.

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

luca_insights_mark_actionedMark an insight actionedA
Destructive

Record that the thing an insight asked for was actually done. Use it after doing the work, not instead of it.

Luca operation: POST /api/insights/{id}/action Required scopes: insights:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, destructive=true, idempotent=false), the description discloses required scopes, OAuth scope, data sensitivity, that an Idempotency-Key is required, and the workspace override mechanism. This is substantial operational context not captured by the structured 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?

Front-loaded with the human-readable purpose, then a compact block of operational facts (operation, scopes, idempotency, workspace). Nearly every line earns its place, though the format is a bit list-heavy.

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?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. Combined with the auth, idempotency, and workspace details, the definition is nearly complete for a state-mutating action tool.

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

Parameters4/5

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

Schema coverage is already 75%, so the schema documents most params; the description adds meaning by explaining that workspaceId/workspaceSlug override the environment default and that the idempotencyKey can be server-generated if omitted. That exceeds the baseline for high-coverage schemas.

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

Purpose4/5

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

The description states a specific verb and resource: record that an insight's requested action was completed. It is clearly distinguishable in intent from read-state siblings like mark_read or dismiss, though it does not name those siblings directly.

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?

"Use it after doing the work, not instead of it" gives a timing constraint and implies a when-not (as a substitute for the actual work). However, it offers no routing against the closely-related mark_read/dismiss siblings, so the alternative-selection guidance is only implied.

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

luca_insights_mark_readMark an insight readA
Destructive

Mark one insight read, so it stops coming back at the top of the feed.

Luca operation: POST /api/insights/{id}/read Required scopes: insights:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

The annotations only supply the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), and the description adds genuinely non-structured context: the underlying endpoint, required OAuth scope (luca:draft), required scope (insights:write), that an Idempotency-Key is required and will be server-generated if omitted, and the redacted data sensitivity. It does not explain what state change 'read' actually persists, but the added operational detail is substantial.

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 purpose is front-loaded in the first sentence, followed by compact metadata lines (endpoint, scopes, idempotency, workspace override). Each line carries distinct operational information, though the block of scope/metadata lines reads more like a spec dump than a narrative and could be trimmed 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?

An output schema exists, so return values need not be described. Combined with annotations covering the safety profile, the description supplies auth/scopes, idempotency behavior and workspace fallback, making it sufficient to invoke the tool correctly; only the precise post-condition (does read affect the feed, the unread count, or both) is left unstated.

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 75%, with id, workspaceId, workspaceSlug and idempotencyKey all documented in the schema. The description still adds value by clarifying that the idempotency key is effectively required for retry safety and that workspaceId/workspaceSlug override the environment-configured default workspace, giving semantic weight beyond the terse schema descriptions.

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?

States a specific verb and resource ('Mark one insight read') and adds the observable effect ('stops coming back at the top of the feed'), which separates it from sibling insights tools like luca_insights_dismiss or luca_insights_mark_actioned to some degree. It stops short of explicitly naming those siblings, so the differentiation is inferential rather than 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 effect statement ('so it stops coming back at the top of the feed') implies when an agent would want this, but there is no explicit when-not guidance and no reference to the alternative insights actions (dismiss, mark_actioned). Usage is left to inference from the sibling namespace.

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

luca_insights_settings_getRead alert delivery settingsA

Read which insight alerts reach the coach and how. The row is created with defaults on the first read, so this never 404s. Check it before concluding a quiet feed means nothing is happening — it may just be muted.

Luca operation: GET /api/insights/settings Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: the settings row is lazily created with defaults on first read (explaining the readOnlyHint=false on a GET), it never 404s, it requires analytics:read / luca:read scopes, and data is redacted. This is exactly the kind of context annotations cannot convey.

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

Conciseness4/5

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

Front-loads the core purpose and diagnostic hint, then lists operational metadata compactly. The scope/idempotency boilerplate is useful routing info but slightly dilutes the prose; overall well-sized with no real waste.

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 an output schema present, return values need not be explained. The description covers behavior (lazy creation, no 404), usage trigger, scopes, and parameter overrides — everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description clarifies that workspaceId/workspaceSlug override the environment-configured default workspace, adding meaning beyond the schema's terse 'optional override' text.

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?

Specific verb+resource ('Read which insight alerts reach the coach and how') that clearly states the endpoint's subject matter and adds the muted-state nuance. It does not explicitly name or contrast with the obvious sibling luca_insights_settings_update, keeping it just below the top band.

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 a concrete when-to-use scenario: 'Check it before concluding a quiet feed means nothing is happening — it may just be muted.' That is a real trigger, not implied usage. No explicit when-not or named alternative, so not a 5.

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

luca_insights_settings_updateUpdate alert delivery settingsA
Destructive

Merge-patch the coach's alert-delivery settings. Send only what you are changing; anything left out keeps its current value.

Luca operation: PUT /api/insights/settings Required scopes: insights:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations, the description discloses the required OAuth scope (insights:write / luca:draft), the data sensitivity level (redacted), and the Idempotency-Key requirement plus fallback behavior when the key is omitted — none of which the annotations carry. It does not explain why destructiveHint=true for a merge-patch or what the resulting state looks like, which keeps it short of a 5.

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

Conciseness4/5

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

Merge-patch semantics are front-loaded in the first sentence, and the operational metadata is compact and grouped. The idempotency requirement is stated twice ('Requires Idempotency-Key' then 'Provide idempotencyKey for safe retries'), which is a minor redundancy but not bloat.

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

Completeness4/5

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

For a settings mutation, the definition covers the operations-critical facts: patch semantics, auth scope, idempotency, and workspace override, and an output schema exists so return values need no explanation. The remaining gap is that an agent wanting to set specific thresholds has no guidance on units or ranges beyond the numeric bounds encoded in the schema itself.

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 description adds real meaning for idempotencyKey (safe retries, server generates one if omitted) and workspaceId/workspaceSlug (override the environment default), which the schema only partially covers at 75%. But the required `body` object — toggles, thresholds, feedEnabled, pushEnabled, digestEnabled — is entirely undocumented in both schema and description, so the main payload must be inferred from field names.

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?

Opens with a specific verb+resource pair: 'Merge-patch the coach's alert-delivery settings', which is far more precise than 'update settings' because it names the patch semantics. It does not explicitly name luca_insights_settings_get as the read counterpart, so sibling differentiation is left to the name pattern rather than 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?

'Send only what you are changing; anything left out keeps its current value' implies the partial-update use case and rules out full replacement, which is useful guidance. However, there is no explicit statement of when to use this versus luca_insights_settings_get, nor any precondition beyond the scope note.

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

luca_insights_unread_countCount unread insightsA
Read-onlyIdempotent

How many insights the coach has not read yet. Cheap enough to poll before pulling the whole feed.

Luca operation: GET /api/insights/unread-count Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld=false/idempotent/destructive=false, so the safety profile is covered. The description adds material context beyond them: required scopes (analytics:read, luca:read), data sensitivity 'redacted', and the fact that no idempotency key is required. This is useful operational context not present in the structured fields.

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

Conciseness4/5

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

The human-readable purpose leads, then a compact metadata block covers operation, scopes, idempotency, and workspace override. Every line carries information, though the boilerplate-style metadata block is somewhat verbose relative to the tiny operation.

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 an output schema present, return-value explanation is rightly omitted, and annotations cover the safety profile. The description supplies scopes, sensitivity, cost/polling guidance, and parameter fallback semantics, so an agent has what it needs to call it correctly; only explicit sibling routing is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond the schema by explaining that workspaceId/workspaceSlug override 'the default workspace configured by environment,' which clarifies the fallback behavior the schema alone does not state.

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 gives a precise verb + resource: 'How many insights the coach has not read yet.' That is unambiguous and clearly distinct from the mutation siblings (mark_read, dismiss, mark_actioned). It does not explicitly name an alternative, but the count-vs-mutate distinction is evident.

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?

'Cheap enough to poll before pulling the whole feed' is a genuine when-to-use hint, and the workspace-override note gives a calling condition. However, no sibling is named as an alternative (e.g. versus luca_analytics_insights or the full feed tool), so guidance remains 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.

luca_integrations_connectors_listList available connectorsA
Read-onlyIdempotent

List Zapier, Make, and CRM provider capabilities.

Luca operation: GET /api/integrations/connectors Required scopes: integrations:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety bar is low. The description adds substantive context beyond that: the underlying REST operation, the required scopes (integrations:read, luca:read), redaction sensitivity, and idempotency expectations.

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

Conciseness4/5

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

Front-loaded with the core purpose, then a compact block of operational facts. Mostly economical, though 'Does not require idempotency' is slightly redundant against the idempotentHint annotation.

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?

An output schema exists, so return shapes need not be described, and annotations cover the safety profile. Combined with the auth/scope and workspace-override details, the description is largely complete; only explicit sibling routing is absent.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description earns an extra point by explaining that both optional params override a default workspace configured by the environment, a behavior the schema ('Optional Luca workspace id override') does not convey.

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?

States a specific verb (List) and resource (connectors), and names the concrete providers covered: Zapier, Make, and CRM. This lets an agent distinguish it from luca_campaigns_provider_capabilities or luca_integrations_crm_connections_list without opening those schemas, though it never explicitly contrasts with those siblings.

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?

There is no when-to-use / when-not-to-use guidance and no mention of alternative sibling tools that also list integration data. The only directive ('Use workspaceId or workspaceSlug to override...') is parameter mechanics, not usage context.

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

luca_integrations_crm_connections_createCreate a CRM connectionA
Destructive

Create or update a workspace-scoped CRM connection.

Luca operation: POST /api/integrations/crm/connections Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=false, so the safety profile is covered. The description adds real value beyond them: required scopes (integrations:write, luca:full), data sensitivity level, the Idempotency-Key requirement, and that the server will generate a key if omitted. This last point usefully clarifies how safe retries work despite idempotentHint=false.

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

Conciseness4/5

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

Front-loaded with the core action, followed by structured metadata lines (operation, scopes, idempotency, workspace override). No filler sentences. The metadata lines are somewhat boilerplate but each carries operationally relevant information.

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?

An output schema exists, so return values need not be explained. Auth, idempotency, and workspace targeting are covered for a mutation tool with a nested body. The remaining gap is the ambiguity of the create-vs-update path and what 'redacted' sensitivity implies, but nothing critical for a correct call is missing.

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

Parameters3/5

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

Schema description coverage is 75%, so the schema already documents workspaceId, workspaceSlug, and idempotencyKey. The description adds meaning to the idempotency behavior ('or the server will generate one') and the workspace override. It does not explain the nested body structure (provider enum, credentialsRef pattern, settings), which is the most error-prone part of the call.

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 opens with a specific verb+resource: 'Create or update a workspace-scoped CRM connection,' and the operation line (POST /api/integrations/crm/connections) confirms the endpoint. It distinguishes itself from siblings like connections_list, connections_schema, and connections_health by scope and action. The 'create or update' upsert framing is honest but slightly muddies what the tool actually does versus its 'create' name.

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?

It explains the workspaceId/workspaceSlug override behavior and idempotency handling, which is useful context. However, it never routes the agent among alternatives (e.g., when to use this versus connections_list or crm_oauth_url), nor does it explain when an update path is taken over a create. Usage is implied by the endpoint semantics rather than stated.

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

luca_integrations_crm_connections_healthCheck a CRM connection's healthA

Probe CRM provider health.

Luca operation: POST /api/integrations/crm/connections/{id}/health Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false; the description adds real value on top by disclosing required scopes (integrations:write, luca:full), data sensitivity (redacted), and that an Idempotency-Key is mandatory with server-side generation as fallback. This clarifies the write-scoped nature of a 'probe' that could otherwise be mistaken for a read-only call.

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 purpose is front-loaded in the first line, followed by compact metadata lines for endpoint, scopes, idempotency, and workspace override. Each line carries distinct information, though the raw 'Luca operation: POST ...' line is somewhat internal-facing.

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?

An output schema exists, so return values need not be described, and the description covers the operational essentials an agent needs: auth scopes, idempotency requirement, and workspace targeting. A brief note on what 'unhealthy' means or on failure modes would make it fully complete, but nothing essential 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?

With 75% schema coverage the baseline is near 3, and the description meaningfully extends it: it explains that idempotencyKey enables safe retries and is auto-generated if omitted, and that workspaceId/workspaceSlug override the environment-configured default workspace. That adds semantics beyond the terse schema descriptions, though 'id' itself remains unexplained.

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?

States a specific verb and resource ('Probe CRM provider health') that an agent can map directly to the connection identified by the required 'id'. It is distinguishable from neighbors like luca_integrations_crm_connections_list or luca_analytics_crm_sync_health by name and scope, though it never explicitly contrasts itself with those siblings.

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 gives operational prerequisites (scopes, idempotency, workspace override) but no guidance on when to reach for this probe versus alternatives such as luca_analytics_crm_sync_health or luca_integrations_crm_connections_schema. There is no when-to-use or when-not-to-use statement.

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

luca_integrations_crm_connections_listList CRM connectionsA
Read-onlyIdempotent

List CRM connections.

Luca operation: GET /api/integrations/crm/connections Required scopes: integrations:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent/non-destructive/openWorld profile, so the bar is lower, and the description still adds real context: required scope integrations:read, OAuth scope luca:read, and data sensitivity 'redacted'. 'Does not require idempotency' is consistent with idempotentHint=true (no key needed) rather than a contradiction, but the phrasing is slightly ambiguous.

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

Conciseness4/5

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

Front-loaded with the operation summary, then structured metadata lines (operation, scopes, idempotency, workspace override) that are all actionable. Minor redundancy between 'Required scopes' and 'Required OAuth scope' lines, but nothing is wasted.

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

Completeness4/5

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

For a simple two-param list tool with an output schema (so return values needn't be explained), it covers auth, workspace resolution, and idempotency. What remains thin is explicit differentiation from adjacent integration tools, which is 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?

Schema coverage is 100%, so the schema already documents both optional params. The description adds meaning beyond the schema by explaining these are overrides for 'the default workspace configured by environment,' clarifying the fallback behavior the schema alone does not convey.

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?

States a specific verb+resource ('List CRM connections') and reinforces it with the concrete endpoint GET /api/integrations/crm/connections. The 'List' verb naturally distinguishes it from siblings like connections_create, connections_health, and connections_schema, but the description never explicitly names or contrasts those siblings.

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?

It gives one usage hint – use workspaceId or workspaceSlug to override the environment default – but offers no explicit when-to-use/when-not guidance or routing to alternatives such as connections_health or connections_schema. Usage is implied by the resource name rather than stated.

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

luca_integrations_crm_connections_schemaRead a CRM's field schemaA
Read-onlyIdempotent

Discover CRM provider schema.

Luca operation: GET /api/integrations/crm/connections/{id}/schema Required scopes: integrations:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context the annotations don't carry: required scopes (integrations:read, luca:read) and data sensitivity (full_content). The 'Does not require idempotency' line is largely redundant with the idempotentHint annotation but not contradictory.

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

Conciseness4/5

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

Front-loaded with the core purpose followed by operation, scopes, and the workspace note; each line is short and scannable. Some lines (the raw endpoint and 'Does not require idempotency') lean toward boilerplate but carry operational value.

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 an output schema present, return contents needn't be described, and the description covers auth scope, data sensitivity, the underlying operation, and workspace overrides. It is nearly complete, missing only a note on what the required connection id refers to.

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 67%: workspaceId and workspaceSlug are documented in the schema, while the required id has no description. The description adds the meaningful detail that the workspace params override the environment-configured default, but it never explains the required connection id, leaving a gap in both places.

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 names a specific verb ('Discover') and resource ('CRM provider schema'), reinforced by the title 'Read a CRM's field schema' and the explicit endpoint GET /api/integrations/crm/connections/{id}/schema. An agent can tell this apart from siblings like connections_health or mappings_suggest, though it doesn't spell out that it targets a single connection's fields.

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?

There is no explicit when-to-use or when-not-to-use guidance and no named alternative among the many sibling tools. The only directive ('Use workspaceId or workspaceSlug to override the default workspace') is parameter mechanics rather than task routing, so usage must be inferred from the endpoint path.

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

luca_integrations_crm_connections_webhooks_setupSet up a CRM's webhooksA
Destructive

Configure CRM provider webhook status.

Luca operation: POST /api/integrations/crm/connections/{id}/webhooks/setup Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already declare destructive/openWorld/non-idempotent, and the description adds real context beyond them: the server auto-generates an idempotency key if omitted, the call is rejected without confirm:true, required OAuth scope and data sensitivity (redacted), and the workspace-override behavior. This is exactly the extra behavioral detail that helps an agent invoke it safely.

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

Conciseness4/5

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

Front-loads the purpose, then lists operation, scopes, and safety requirements in a scannable structure with no filler prose. Minor redundancy between the 'Destructive' line and the confirm parameter description, but overall tight.

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 an output schema present, return values need no explanation, and the description covers scopes, idempotency, the confirm gate, and workspace overrides. The one gap is the body payload semantics, which are left entirely to the schema.

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 67% and the schema already documents confirm, workspaceId, workspaceSlug, and idempotencyKey, so the description largely restates those. It adds the nuance that the server generates a key if omitted, but says nothing about the body fields (enabled, targetUrl). Baseline 3 is appropriate.

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?

States a specific verb+resource ('Configure CRM provider webhook status') and the exact endpoint, which pins down the operation for a specific connection. It is clearly distinct from the general webhook subscription tools, but it never names an alternative, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

Gives useful prerequisites (required scopes, Idempotency-Key, confirm:true, workspace override) but provides no explicit when-to-use or when-not-to-use guidance versus siblings like luca_webhooks_subscriptions_create or luca_integrations_crm_connections_create. Usage is implied by the endpoint rather than stated.

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

luca_integrations_crm_mappings_confirmConfirm CRM field mappingsB
Destructive

Confirm CRM field mappings.

Luca operation: PUT /api/integrations/crm/connections/{id}/mappings Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is partly covered. The description adds useful context beyond them — required OAuth scope (luca:full, integrations:write), data sensitivity redacted, and the Idempotency-Key retry contract — but it never explains the destructive semantics the annotation flags, e.g. whether confirming replaces existing mappings.

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

Conciseness4/5

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

Front-loaded with the operation, then scopes, idempotency, and workspace override in short declarative sentences. It is a metadata block rather than prose, but nothing is padded or redundant.

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 mutating PUT with nested body objects, the description supplies auth scopes, sensitivity, idempotency behavior, and workspace targeting, and an output schema exists so return values need no explanation. The missing piece is the effect on existing mappings, which matters given destructiveHint=true.

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 60%, and the description only restates what the schema already documents (workspaceId, workspaceSlug, idempotencyKey auto-generation). The core payload — the mappings array with its direction enum, transform object, and dangerous flag — receives no semantic explanation in the description.

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 names a specific action and resource ('Confirm CRM field mappings') and backs it with the underlying operation (PUT /api/integrations/crm/connections/{id}/mappings), so an agent knows exactly what call is made. However, it does not distinguish this from the sibling luca_integrations_crm_mappings_suggest, which an agent must choose between.

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?

There is no when-to-use or when-not-to-use guidance. The description covers mechanics (idempotency key, workspace override) but never explains when confirming is appropriate versus suggesting mappings or re-listing the connection schema.

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

luca_integrations_crm_mappings_suggestSuggest CRM field mappingsA

Suggest CRM field mappings.

Luca operation: POST /api/integrations/crm/connections/{id}/mappings/suggest Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Adds meaningful context beyond annotations: required scopes (integrations:write), OAuth scope luca:full, data sensitivity=redacted, and the idempotency-key contract (server generates one if omitted). The idempotency-key guidance is consistent with idempotentHint=false since the key is what makes retries safe, so 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.

Conciseness4/5

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

Front-loads the purpose, then layers operation, auth, idempotency, and workspace behavior in short scannable lines. Every block adds operational value, though the raw REST path and scope metadata are somewhat boilerplate.

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 write operation with annotations covering safety flags and an output schema covering returns, the description supplies the missing pieces: auth scope, idempotency handling, and workspace scoping. What remains absent is sequencing relative to the confirm sibling.

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 75%, with schema descriptions already covering workspaceId, workspaceSlug, and idempotencyKey. The description restates the workspace override and idempotency semantics but adds little for the undocumented 'id' path parameter beyond the URL template, matching the baseline 3 for schema-driven parameters.

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?

States a specific verb+resource: 'Suggest CRM field mappings', which is a clear generative action on CRM mapping configuration. It is distinguishable from the closest sibling luca_integrations_crm_mappings_confirm, but the text itself never contrasts with it or with schema/connections siblings.

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 gives operational instructions (idempotency key, workspace override) but no when-to-use guidance. It never says this should precede luca_integrations_crm_mappings_confirm, nor what precondition (a connected CRM) is needed, leaving the agent to infer usage from the name alone.

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

luca_integrations_crm_oauth_urlStart a CRM connectionA

Create a CRM provider OAuth URL and store its one-time state.

Luca operation: GET /api/integrations/crm/providers/{provider}/oauth-url Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
providerYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and the description adds valuable context beyond them: required API scopes (integrations:write), required OAuth scope (luca:full), data sensitivity (redacted), and that it does not require idempotency while persisting one-time state. This is meaningful behavioral disclosure for a security-sensitive operation.

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

Conciseness4/5

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

Front-loaded with the purpose sentence, followed by clearly labeled operation/scope/idempotency/workspace lines. Slightly list-like boilerplate but each line carries real information and no sentence is wasted.

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

Completeness3/5

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

With an output schema present, return values need not be described, and scopes/idempotency/workspace handling are covered. It still leaves the OAuth-relevant locationId and redirectUri parameters unexplained, which an agent invoking a connection-start flow would need.

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 only 50%: provider is self-documenting via its enum, and workspaceId/workspaceSlug already carry schema descriptions matching the description's override note. The description does not compensate for the undocumented query sub-parameters locationId and redirectUri, which are critical to an OAuth flow.

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?

"Create a CRM provider OAuth URL and store its one-time state" names a specific verb (create) and resource (CRM provider OAuth URL), and the side-effect of storing one-time state is explicit. It distinguishes this connection-starting step from siblings like luca_integrations_crm_connections_create, though it does not name those siblings directly.

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 implies the usage context (kick off a CRM OAuth connection) and gives one concrete rule: use workspaceId/workspaceSlug to override the environment default. However it offers no when-to-use-vs-alternatives routing, no prerequisites, and no exclusions relative to the many sibling integration tools.

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

luca_integrations_crm_sync_runs_createStart a CRM syncA
Destructive

Create a CRM dry-run or live sync run.

Luca operation: POST /api/integrations/crm/connections/{id}/sync-runs Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial context beyond annotations: required scopes (integrations:write, luca:full), data sensitivity (full_content), the Idempotency-Key requirement with server-side fallback, and the hard rule that the call is rejected without confirm: true. The annotations declare destructiveHint and idempotentHint, but the description is what tells the agent exactly how to satisfy them.

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

Conciseness4/5

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

Front-loaded with the action, then layered operational facts as short lines. The idempotency sentence is slightly redundant (name requirement, then explain fallback), but overall it is tight and scannable rather than verbose.

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?

An output schema exists, so return values need no explanation, and the description covers the mutation's safety, scoping, and auth requirements thoroughly. The only real gap is semantics of mode/direction, which the agent must infer from the enum names.

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 67% and the schema already documents confirm, idempotencyKey, workspaceId and workspaceSlug richly. The description largely restates those and offers no extra meaning for the mode/direction parameters (defaults and allowed values live only in the schema), so it sits at the baseline.

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

Purpose5/5

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

States a specific verb and resource ('Create a CRM ... sync run') and further qualifies scope with 'dry-run or live', distinguishing it from the read-side sibling luca_integrations_crm_sync_runs_list without ambiguity. An agent immediately understands this starts a sync run.

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 implies usage (create a run, pick dry-run vs live) but never states when to prefer this over the list tool or what prerequisites must be met before a run is meaningful. Operational rules (scopes, idempotency, confirm) are present, so usage is inferable but not explicit about alternatives or exclusions.

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

luca_integrations_crm_sync_runs_listList CRM sync runsA
Read-onlyIdempotent

List CRM sync history.

Luca operation: GET /api/integrations/crm/connections/{id}/sync-runs Required scopes: integrations:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description goes beyond that by disclosing the required scopes, the data sensitivity level (full_content), and explicitly that idempotency is not required — useful auth and side-effect context not present in the structured fields.

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

Conciseness4/5

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

Front-loads the plain-language purpose, then a compact block of operational metadata (endpoint, scopes, sensitivity, idempotency, workspace override). Each line carries distinct information; no redundant restatement of the title.

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 read-only list tool with an output schema, the description covers the essentials: what it returns conceptually, the endpoint, auth requirements, and the workspace override. Return-value detail is correctly left to the output schema, so nothing critical is missing.

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

Parameters4/5

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

The schema documents workspaceId and workspaceSlug, but the description adds the operative meaning: they override the default workspace configured by the environment. That is real semantic value beyond the schema's terse "Optional Luca workspace id override." The `id` parameter's role (the connection id in the path) is only implied.

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?

"List CRM sync history" gives a clear verb and resource, and the Luca operation line pins the exact endpoint GET /api/integrations/crm/connections/{id}/sync-runs. It is distinguishable from the sibling luca_integrations_crm_sync_runs_create by tense/purpose, though the description never explicitly contrasts them.

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?

It states required scopes (integrations:read, luca:read) and that idempotency is not required, and notes the workspace override. These are prerequisites rather than when-to-use/when-not-to-use guidance, and no alternative tool is named for listing sync history versus other integration diagnostics.

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

luca_integrations_events_listList integration eventsA
Read-onlyIdempotent

List integration event log.

Luca operation: GET /api/integrations/events Required scopes: integrations:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, but the description adds genuinely new behavioral context: required scopes (integrations:read, luca:read) and data sensitivity level (full_content). The "Does not require idempotency" line largely restates idempotentHint=true, so it adds little, but the auth/scope disclosure is valuable beyond the structured fields.

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

Conciseness4/5

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

The description is short and front-loaded, with the resource named in the first sentence and operational metadata in tight bullet-style lines. The idempotency line is redundant against the annotations, which is the only wasted content.

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?

An output schema exists, so return values and truncation/pagination semantics need not be re-explained, and the description covers auth scopes, sensitivity and workspace scoping. The main missing piece is disambiguation from the other event/log listing tools, which is a sibling-routing gap rather than a correctness gap.

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 75%, so limit, cursor and source are already documented structurally; the description adds only the workspace-override semantics for workspaceId/workspaceSlug (clarifying that they supersede the environment default). That is a modest but real addition over the schema's "Optional Luca workspace id override," matching the baseline 3 for a high-coverage schema.

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

Purpose4/5

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

The description states a specific verb and resource ("List integration event log") and even names the underlying operation (GET /api/integrations/events), so the agent knows exactly what it retrieves. It does not, however, differentiate itself from the closely named sibling luca_webhooks_events_list, which an agent could easily confuse with an 'integration events' log.

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 only usage instruction is "Use workspaceId or workspaceSlug to override the default workspace configured by environment," which is really parameter guidance rather than when-to-use guidance. There is no explicit statement of when to pick this over webhooks_events_list or the CRM sync-runs siblings, so selection is left to inference.

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

luca_knowledge_approve_suggestionApprove a knowledge suggestionA
Destructive

Approve a profile suggestion and write it into the coach's profile. Every later draft reads the result, so check the excerpt supports the change before approving.

Luca operation: POST /api/knowledge/suggestions/{id}/approve Required scopes: knowledge:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing required scopes (knowledge:write, luca:queue_ops), the idempotency-key requirement and fallback, the mandatory confirm:true gate, and the downstream effect on later drafts. Minor tension: it advertises 'safe retries' via an idempotency key while idempotentHint=false, though the key mechanism explains this rather than strictly 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?

Front-loads the purpose and effect, then organizes metadata into scannable lines. Some redundancy: the confirm requirement is stated in both the description body and the schema, and the forced-confirm sentence is verbose, but nothing is wasted overall.

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 an output schema present, return values need not be explained, and the description covers auth scopes, idempotency, the confirm gate, and workspace selection. It is largely complete for a destructive single-item mutation, though it doesn't say whether approval is reversible.

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 80%, so most parameters (confirm, workspaceId/Slug, idempotencyKey) are already documented in the schema. The description restates the confirm and idempotency requirements and adds the workspace-override framing, but adds little genuine syntax or meaning beyond the schema. 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 ('Approve a profile suggestion and write it into the coach's profile') and distinguishes itself from siblings like luca_knowledge_reject_suggestion and luca_knowledge_suggestions. The downstream consequence ('every later draft reads the result') further pins down what approval means.

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?

Gives a usage caution ('check the excerpt supports the change before approving'), which implies when to use it, but never explicitly names the alternative (luca_knowledge_reject_suggestion) or states when NOT to approve. Usage is implied rather than routed.

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

luca_knowledge_reject_suggestionReject a knowledge suggestionA
Destructive

Reject a profile suggestion so it stops being offered. The profile is left as it stands.

Luca operation: POST /api/knowledge/suggestions/{id}/reject Required scopes: knowledge:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

The description goes materially beyond the annotations: it discloses the endpoint, the required scope (knowledge:write) and OAuth scope, the data-sensitivity label, and the Idempotency-Key requirement with fallback behavior. It also clarifies that the profile itself is not mutated despite destructiveHint=true, which is genuinely useful counter-programming to a scary annotation. It does not say whether a rejection is reversible or what state the suggestion ends up in.

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 behavioral outcome is front-loaded in the first sentence, followed by compact operational metadata. The fixed boilerplate (operation path, scopes, sensitivity) is dense but each line carries actionable information; nothing is padded.

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 an output schema present, the description need not explain return values, and it covers auth scopes, idempotency, and workspace targeting. The remaining gap is lifecycle context — whether a rejected suggestion can be restored or re-surfaced later — which matters for a destructiveHint=true mutation.

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 75% and the schema already documents workspaceId, workspaceSlug, and idempotencyKey. The description still adds meaning: it explains the workspace override semantics and, more importantly, that idempotencyKey is required by the server and auto-generated when omitted — a behavior not captured in the field description's optional framing.

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?

States a specific verb and resource ("Reject a profile suggestion") plus the operational consequence ("so it stops being offered"), which is enough to distinguish it from the sibling luca_knowledge_approve_suggestion by implication. It never explicitly names that sibling, so the disambiguation is inferential rather than 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?

Usage is implied by the paired approve tool and by the sentence about the profile remaining unchanged, which hints this is a no-side-effect-on-data choice. There is no explicit "use this instead of X when Y" guidance, and nothing tells the agent how a rejected suggestion differs from dismissing an insight or rejecting a review queue item.

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

luca_knowledge_sources_disconnectDisconnect a knowledge sourceA
Destructive

Delete a knowledge source. Its pending suggestions go with it; values the coach already approved stay in the profile, because approving copies them there.

Luca operation: DELETE /api/knowledge/sources/{id} Required scopes: knowledge:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the destructiveHint already in annotations, the description discloses exactly what is destroyed (pending suggestions), what survives (approved profile values), the required scope (knowledge:write), the OAuth scope, and the idempotency-key requirement including the server-generate fallback. This is unusually rich for a destructive mutation.

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?

Purpose and side effects are front-loaded in two tight sentences; the metadata block that follows is dense but each line (scope, sensitivity, idempotency, workspace override) carries actionable information. Minor redundancy between the idempotency sentence and the schema description.

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?

An output schema exists, so return values need no explanation. The description covers the mutation's blast radius, authorization requirements, retry semantics, and workspace targeting — everything needed to call this destructive endpoint correctly.

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

Parameters4/5

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

Schema coverage is 75% and already documents workspaceId, workspaceSlug, and idempotencyKey. The description adds real meaning on top: it explains the retry-safety semantics of idempotencyKey and the workspace-override intent, rather than merely restating field names.

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 first sentence gives a specific verb (delete/disconnect) and resource (knowledge source), then immediately explains the semantic consequence of deletion — pending suggestions are removed, already-approved values persist in the profile. This separates it cleanly from siblings like luca_knowledge_sources_sync and luca_knowledge_sources_list.

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?

Usage is implied by the deletion semantics and the note about overriding the default workspace, but the description never states when to choose disconnect versus sync/list, nor any precondition (e.g., what happens to an in-flight sync). The agent must infer the context of use.

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

luca_knowledge_sources_listList knowledge sourcesA
Read-onlyIdempotent

List the content sources the coach has connected — Notion, Google Docs, a website, an Instagram bio — with the sync state of each one. Connecting a new source is app-only; this lists what is already there.

Luca operation: GET /api/knowledge/sources Required scopes: knowledge:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive, and closed-world hints, yet the description adds genuinely new behavioral detail: required scopes (knowledge:read, luca:read), data sensitivity (redacted), and the underlying operation. This is meaningful context beyond structured fields.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence, which is dense and useful. The trailing metadata lines (operation, scopes, sensitivity, idempotency) are structured but the 'Does not require idempotency' line partly restates the annotation's idempotentHint, a minor redundancy.

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 an output schema present, return values need not be explained, and the description covers purpose, scope requirements, sensitivity, and workspace-override behavior. It is complete enough for an agent to call correctly, missing only explicit sibling routing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: it explains that workspaceId/workspaceSlug override the default workspace configured by environment. That is real added semantic value over the bare 'optional override' schema text.

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?

It states a specific verb (List) and resource (content sources the coach has connected), enriched with concrete examples (Notion, Google Docs, a website, an Instagram bio) and the sync state returned. It also distinguishes itself from the adjacent connect action by noting 'Connecting a new source is app-only; this lists what is already there.'

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 clear context for when this applies and explicitly rules out the connect flow ('app-only'), but it never names the sibling tools (e.g. knowledge_sources_sync, knowledge_sources_disconnect) that an agent could confuse it with. Usage is clear but alternatives aren't enumerated.

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

luca_knowledge_sources_syncRe-sync a knowledge sourceA
Destructive

Queue a re-read of one knowledge source now rather than waiting for its next scheduled sync. It returns as soon as the job is queued, so any new suggestions appear on a later read.

Luca operation: POST /api/knowledge/sources/{id}/sync Required scopes: knowledge:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations it discloses asynchronous behavior ('returns as soon as the job is queued', new suggestions appear on a later read), the required scopes (knowledge:write, luca:queue_ops), the Idempotency-Key requirement and its auto-generation fallback, and the workspace override semantics. This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence, followed by async-return semantics and then operation/scope/idempotency/workspace facts. Slightly boilerplate in the scope and data-sensitivity lines, but 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?

An output schema exists so return values need not be described, and the description still covers auth scopes, idempotency, workspace resolution, and async completion. The one unexplained point is why the destructiveHint=true annotation applies to what reads as a benign re-read, which an agent might want clarified.

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 75%, so the baseline is a 3, but the description adds real meaning: it explains that idempotencyKey is required for safe retries and will be server-generated if omitted, and that workspaceId/workspaceSlug override the environment-configured default. Only the required 'id' parameter is left implicit, which is self-evident as the source UUID.

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 first sentence names a specific verb and resource ('Queue a re-read of one knowledge source') and states the scope ('now rather than waiting for its next scheduled sync'). An agent can distinguish this immediately from siblings like luca_knowledge_sources_list and luca_knowledge_sources_disconnect.

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 clearly frames the situation that selects this tool — you want a re-read now instead of waiting for the scheduled sync. It does not, however, name an explicit alternative tool or state any when-not-to-use condition, so it stops short of full routing guidance.

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

luca_knowledge_suggestionsList knowledge suggestionsA
Read-onlyIdempotent

List profile changes proposed from the coach's own knowledge sources, each with the excerpt it was drawn from and the value it would replace.

Luca operation: GET /api/knowledge/suggestions Required scopes: knowledge:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description earns credit by adding operational context the annotations lack: required scopes (knowledge:read, luca:read), data sensitivity=redacted, and the underlying GET endpoint. 'Does not require idempotency' is redundant with idempotentHint rather than contradictory, but the auth/scope disclosure is genuinely useful.

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?

Purpose is front-loaded and the metadata lines (endpoint, scopes, sensitivity, idempotency) are compact and scannable. The payload description and the redundant 'Does not require idempotency' line each cost a little space, but nothing is verbose or disorganized.

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?

An output schema exists, so return-value explanation is not required, and the description still helpfully sketches what a suggestion contains. For a read-only, non-destructive list with annotations covering safety, the only substantive omission is the semantics of the status filter, which is missing from both description and schema.

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 67%: the two workspace parameters are documented in the schema itself, and the description only reiterates the workspaceId/workspaceSlug override. Critically, the status filter (pending/approved/rejected) is undocumented in either the schema property or the description, leaving a real semantic gap. Baseline 3 fits when the schema does most of the work.

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?

States a specific verb+resource and characterizes the items unusually well: 'profile changes proposed from the coach's own knowledge sources, each with the excerpt it was drawn from and the value it would replace.' This clearly distinguishes a 'suggestion' from memories, insights, or learning proposals. It does not, however, name or contrast any specific sibling tool, so a 4 rather than a 5.

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 only usage-like sentence is about parameter overrides ('Use workspaceId or workspaceSlug to override the default workspace'), not about when to select this tool. There is no statement of when to call it versus the sibling list tools (knowledge_sources_list, learning_proposals_list) or how it relates to the approve/reject suggestions pair. Implied usage only.

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

luca_leads_consents_grantRecord a lead's consentA
Destructive

Grant explicit lead consent for a channel purpose.

Luca operation: POST /api/leads/{id}/consents Required scopes: leads:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior5/5

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

Goes well beyond the annotations: it states the underlying endpoint, required scopes, data sensitivity (redacted), the confirm: true requirement with rejection behavior, the server-generated idempotency key fallback, and the workspace override mechanism. The destructive warning aligns with destructiveHint=true rather than contradicting it, and the idempotency-key note is about safe retries, not a claim of inherent idempotency.

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?

Purpose is front-loaded in the first line, followed by a tight operational block covering endpoint, scopes, idempotency, confirmation, and workspace override. Dense but every line carries a distinct constraint; 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?

With an output schema present, return values need no explanation, and the description covers auth scopes, destructive confirmation, idempotency, and workspace resolution. The main gap is the semantics of the nested body fields, which is only partially addressed.

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 67%, so baseline is 3. The description adds meaning to the otherwise undocumented `id` parameter via 'POST /api/leads/{id}/consents' and hints at the channel/purpose semantics, but it says nothing about evidenceId, source, or grantedAt, leaving part of the nested body unexplained.

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?

States a specific verb and resource: 'Grant explicit lead consent for a channel purpose,' which is distinct from the revoke sibling by the verb alone. It does not explicitly name luca_leads_consents_revoke as the inverse operation, but an agent can differentiate without opening the schema.

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

Usage Guidelines3/5

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

Implies when to use it (recording consent for a channel/purpose) and lists prerequisites such as confirm: true, idempotencyKey, and workspace override, but gives no explicit when-not guidance or routing to the revoke alternative. Usage context is inferable rather than stated.

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

luca_leads_consents_revokeRevoke a lead's consentA
Destructive

Revoke explicit lead consent for a channel purpose.

Luca operation: POST /api/leads/{id}/consents/revoke Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already signal destructiveHint=true and readOnlyHint=false, but the description adds genuinely useful context: required scope leads:write, OAuth scope luca:draft, redaction sensitivity, and the Idempotency-Key requirement with server-side key generation as fallback. It stops short of saying what revocation actually affects (e.g. in-flight campaigns or scheduled sends), which keeps it from a 5.

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

Conciseness4/5

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

Front-loads the purpose, then a compact operational block where each line (endpoint, scopes, idempotency, workspace override) carries distinct information. No filler sentences, though the raw REST endpoint line is of marginal value to an agent.

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 an output schema present, return values need not be described, and annotations cover the safety profile. The description supplies auth, idempotency, and workspace-override details for a mutation tool, leaving only the downstream effects of revocation unaddressed.

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 60% and the description largely restates what the schema already says for workspaceId/workspaceSlug/idempotencyKey rather than adding new semantics. The undocumented body fields (channel, purpose) are self-describing enums, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (revoke), resource (lead consent), and qualifier (for a channel purpose) in the first sentence. The direction is unambiguous, so an agent can immediately distinguish it from the sibling luca_leads_consents_grant without opening either schema.

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

Usage Guidelines2/5

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

The description provides operational mechanics (scopes, idempotency, workspace override) but never says when this tool should be selected over alternatives or what business condition triggers a revocation. No mention of the grant counterpart or any prerequisite/state requirement for revocation.

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

luca_leads_createCreate or upsert a leadA
Destructive

Create or upsert a lead identity. Body requires channel and externalUserId.

Luca operation: POST /api/leads Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=false; the description goes well beyond that by disclosing required scopes, full_content data sensitivity, the idempotency-key retry contract, and the workspace-override behavior. The notable gap is upsert conflict semantics – what happens to tags/stage/fields when the lead already exists is never stated, which matters for an upsert. There is also mild tension with idempotentHint=false, but the description's explanation of the idempotency key plausibly reconciles it rather than 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?

Front-loaded with the core action, then scopes, then idempotency and workspace overrides in compact lines – each sentence carries information. Minor redundancy in restating the body's required fields already enforced by 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?

For a mutation tool with a nested body schema, four parameters, and a sibling-heavy namespace, the description covers the invocation essentials: what to send, auth scopes, data sensitivity, retry safety, and workspace targeting. An output schema exists, so return values need not be explained; the only real omission is upsert/merge behavior on an existing lead.

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 75% and the schema already documents idempotencyKey and both workspace params, so the description largely restates ('Body requires channel and externalUserId', 'Provide idempotencyKey for safe retries'). It does add one piece of genuine meaning: workspaceId/workspaceSlug override the environment-configured default workspace, which is more than the schema's bare 'Optional Luca workspace id override'. Baseline 3 fits.

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

Purpose4/5

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

The description states a specific verb and resource ('Create or upsert a lead identity') plus the underlying operation (POST /api/leads), so an agent immediately knows what it does. The 'create or upsert' framing also implicitly separates it from luca_leads_update and the import tools, though no sibling is named explicitly.

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?

Usage is implied by the operation and by the stated prerequisites: leads:write scope, luca:draft OAuth scope, and an Idempotency-Key. However, there is no guidance about when to prefer this over luca_leads_import_apply, luca_leads_identities_attach, or luca_leads_update, which share overlapping surfaces in a very crowded leads sibling set.

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

luca_leads_draftDraft a reply to a leadA

Draft a voice-matched reply for a lead on demand and queue it for review. Optional guidance steers tone or content.

Luca operation: POST /api/leads/{id}/draft Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing required scopes (leads:write, luca:draft), data sensitivity (full_content), the Idempotency-Key requirement with server-generated fallback, and workspace override precedence. This is genuinely useful context for a write operation. The idempotentHint=false annotation plus a required idempotency key is a mild tension but is standard safe-retry semantics, not a contradiction.

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

Conciseness4/5

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

The behavioral purpose is front-loaded in the first sentence, followed by a compact operational block. Every line earns its place, though the endpoint/scopes/idempotency/workspace block is a dense laundry list rather than prose tuned for scanning.

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 an output schema present, return values need not be explained, and the description covers auth, idempotency, and workspace scoping. The main gap is that it never mentions the handoff to the luca_review_queue_* siblings that will actually action the queued draft, nor why this differs from luca_draft_reply.

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 description explains 'guidance' semantically (steers tone or content), which the bare schema does not, and covers workspaceId/workspaceSlug/idempotencyKey behavior. The undeclared `id` is only inferable from the POST /api/leads/{id}/draft path, leaving one required parameter's meaning implicit at 60% schema coverage.

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?

Names a specific verb (draft), resource (reply for a lead), and the resulting state (queued for review), so the agent knows this creates a reviewable draft rather than sending anything. It does not, however, distinguish itself from the very similar sibling luca_draft_reply or from luca_conversations_send, which is a real selection risk in this crowded namespace.

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?

"on demand" implies a manual, per-lead trigger as opposed to the campaign/cadence paths, and "queue it for review" implies a human-approval workflow. But there is no explicit when-to-use versus luca_draft_reply, luca_conversations_send, or the review-queue siblings, so the routing guidance is only implicit.

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

luca_leads_explainExplain why a lead qualifiedA
Read-onlyIdempotent

Explain why a lead qualified: the qualifier's reasoning, signals, and confidence from its most recent drafted turn.

Luca operation: GET /api/leads/{id}/explain Required scopes: leads:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely non-obvious context: read scope requirements (leads:read, luca:read), a data-sensitivity note (full_content), an idempotency statement, and the workspace override mechanism. It stops short of describing failure modes (e.g. no drafted turn available).

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

Conciseness4/5

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

Front-loaded with the value proposition, then a compact block of operational facts (operation, scopes, sensitivity, idempotency, workspace override). No filler, though the 'Required scopes' and 'Required OAuth scope' lines are slightly redundant with each other.

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?

An output schema exists, so return values need not be explained. With annotations covering the safety profile and the description covering scope/auth/workspace semantics, the agent has enough to call this correctly; only the precondition for a meaningful explanation is unspecified.

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

Parameters3/5

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

Schema description coverage is 67%, and the description's workspace-override sentence largely restates what the schema already documents for workspaceId/workspaceSlug. It adds no guidance on the required `id` beyond the schema's uuid format, so it neither compensates for nor improves on the structured data.

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?

Specific verb+resource: 'Explain why a lead qualified' and it goes further to define the payload ('the qualifier's reasoning, signals, and confidence from its most recent drafted turn'). This distinguishes it from siblings like luca_leads_get (raw lead data) and luca_leads_draft, though no sibling is named explicitly.

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 'most recent drafted turn' framing implies when the explanation is available and what it reflects, which is useful context. However, there is no explicit when-to-use guidance, no stated prerequisites (e.g. must a draft exist first?), and no routing to alternatives such as luca_leads_get or luca_review_queue_explain.

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

luca_leads_field_definitions_listList custom lead fieldsA
Read-onlyIdempotent

List custom lead field definitions.

Luca operation: GET /api/leads/field-definitions Required scopes: leads:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower. The description still adds genuinely useful context beyond them: required scopes (leads:read, luca:read), data sensitivity 'full_content', the underlying endpoint, and the no-idempotency note.

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?

Purpose is front-loaded in the first sentence, followed by compact structured metadata. Slightly padded by 'Does not require idempotency', which duplicates the idempotentHint annotation, but overall tight.

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?

An output schema exists, so return values need no explanation, and the description covers endpoint, scopes, sensitivity, and workspace overrides. Complete for a simple two-param read tool; only the sibling differentiation is thin.

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 both optional workspace override params are already documented. The description adds the meaningful nuance that these override the default workspace from the environment, but contributes no format or precedence detail beyond that.

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

Purpose4/5

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

The description states a specific verb+resource ('List custom lead field definitions'), matching the title and clearly indicating a read-only enumeration. It does not explicitly name the nearest sibling (luca_leads_field_definitions_upsert), so the agent must infer list-vs-upsert from naming alone.

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?

Usage is implied by the read-only listing purpose, and the description notes that workspaceId/workspaceSlug override the environment-configured default. However it gives no explicit when-to-use guidance or comparison against the field_definitions_upsert sibling, leaving the agent to infer selection.

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

luca_leads_field_definitions_upsertDefine a custom lead fieldA
Destructive

Create or update a custom lead field definition.

Luca operation: POST /api/leads/field-definitions Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false; the description adds real value by naming the OAuth scope (luca:draft), data sensitivity (redacted), and the retry-safety contract including server-side key generation. This is meaningful context beyond the annotations 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.

Conciseness4/5

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

The core action is front-loaded in the first sentence and the subsequent metadata lines are terse. It is slightly list-like but every line carries operational information.

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 an output schema present and rich annotations, the description fills the essential gaps (scopes, idempotency, workspace override). Body field semantics (key pattern, type enum, options) are left to the schema, which is acceptable given the 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?

Schema coverage is 75%, so most parameters are documented structurally; the description supplements this by explaining that idempotencyKey enables safe retries and is server-generated when omitted, and that workspaceId/workspaceSlug override the environment default. This adds behavior the schema does not convey.

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?

States a specific verb pair (create or update) and resource (custom lead field definition), which cleanly separates it from the sibling luca_leads_field_definitions_list. It does not explicitly name the list sibling as an alternative, keeping it just below 5.

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?

Provides useful operational context (required scopes, idempotency key, workspace override) but never states when to choose this over luca_leads_field_definitions_list, luca_leads_create, or luca_leads_update. Usage is implied by the required scope rather than spelled out.

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

luca_leads_getGet a lead's timelineA
Read-onlyIdempotent

Get a lead's full timeline and notes.

Luca operation: GET /api/leads/{id} Required scopes: leads:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds genuinely new context: the required scopes, the OAuth scope, and notably data sensitivity: full_content, which warns the agent that sensitive data is returned. The "does not require idempotency" line is somewhat redundant with idempotentHint=true, keeping it from a 5.

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

Conciseness3/5

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

The purpose is front-loaded well, but the body is a metadata list with labels (Luca operation, Required scopes, Required OAuth scope) and a "Does not require idempotency" line that duplicates the idempotentHint annotation. It is organized but carries some low-value 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?

An output schema exists, so return values need not be explained, and for a simple single-resource GET the description covers scopes, data sensitivity, and workspace defaults. The remaining gap is sibling differentiation from other lead-read tools, which prevents a 5.

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 67% (id is undescribed, the two workspace params are documented inline). The description's "use workspaceId or workspaceSlug to override the default workspace configured by environment" adds real meaning about what happens when they are omitted, but it doesn't address precedence between the two or the required id. Baseline 3 is appropriate.

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 gives a specific verb and resource ("Get a lead's full timeline and notes") and names the endpoint GET /api/leads/{id}, so an agent understands this is a single-lead read. It does not explicitly distinguish itself from close siblings like luca_leads_list, luca_leads_explain, or luca_call_events_by_lead, so it falls short of a 5.

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?

It supplies operational prerequisites (required scopes leads:read, OAuth scope luca:read) and a workspace-override instruction, which imply how to call it. However, there is no explicit when-to-use guidance versus alternatives such as luca_leads_list or luca_leads_explain, leaving selection to inference.

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

luca_leads_identities_attachAttach a channel identity to a leadA
Destructive

Attach a verified or claimed identity to a lead.

Luca operation: POST /api/leads/{id}/identities Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior4/5

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

Discloses matters the annotations do not: required scope (leads:write), OAuth scope, 'data sensitivity: full_content', and the idempotency-key retry contract with server-side key generation. It does not explain what the destructiveHint=true annotation actually means here (e.g. merge/overwrite of an existing identity), leaving that trait only in 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?

Front-loads the one-line purpose, then a compact block of endpoint/scope/idempotency/workspace facts with no filler prose. Slightly list-like but every line carries operational information.

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?

An output schema exists so return values need no explanation, and the description covers auth, scoping, and retry behavior for a nested-object mutation. It falls short only on the effect of attaching an identity (dedupe/overwrite behavior), which matters given destructiveHint=true.

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 60%, and the description's parameter content (workspaceId/workspaceSlug override, idempotencyKey) largely restates the existing schema descriptions. It adds no detail on the nested body fields (channel, externalUserId, verificationStatus) that carry the real semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Attach a verified or claimed identity to a lead') and pins the underlying operation (POST /api/leads/{id}/identities). It is clearly distinguishable from the many sibling lead tools such as luca_leads_create, luca_leads_update, and luca_leads_consents_grant.

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?

Gives operational prerequisites (required scopes, required idempotency key, workspace override) which imply when the tool is callable, but never states when to prefer it over alternatives or what state the lead must be in. Usage is implied rather than explicitly guided.

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

luca_leads_import_applyApply a lead importA
Destructive

Apply a mapped lead import with consent evidence.

Luca operation: POST /api/leads/imports/apply Required scopes: leads:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds value beyond them: required scopes (leads:write, luca:queue_ops), data sensitivity level, the confirm:true gate and rejection behavior, and the idempotency-key fallback where the server generates one. It stops short of describing partial-failure behavior or exactly what side effect the import triggers.

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

Conciseness4/5

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

Front-loads the purpose, then lists endpoint, scopes, idempotency, destructive confirmation, and workspace override in compact labeled lines. There is minimal waste, though the scope lines (OAuth scope, data sensitivity) are metadata padding rather than agent-facing guidance.

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?

An output schema exists, so return values need not be explained, and the description covers auth, idempotency, confirmation, and workspace scoping. The remaining gap is the absence of any pointer to the preview step, which matters for a complex nested mapping payload the agent must build beforehand.

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 80%, so the schema already documents idempotencyKey, confirm, workspaceId and workspaceSlug almost verbatim. The description re-states the workspace override and idempotency semantics but adds nothing about the nested body (rows, mapping, consents, identities), the most complex part of the payload. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb+resource ('Apply a mapped lead import') and pins the exact endpoint (POST /api/leads/imports/apply), so the operation is unambiguous. It does not explicitly contrast itself with the sibling luca_leads_import_preview, which the word 'apply' strongly implies is the prior step, but the differentiation is left to inference.

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?

Provides operational preconditions (requires Idempotency-Key, must pass confirm: true or the call is rejected), which is real guidance for invocation. However it never states when to prefer this over luca_leads_import_preview or what must precede it, so the workflow context is implied rather than spelled out.

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

luca_leads_import_previewPreview a lead importA

Preview a mapped CSV lead import before applying it.

Luca operation: POST /api/leads/imports/preview Required scopes: leads:read Required OAuth scope: luca:draft; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the underlying operation (POST /api/leads/imports/preview), required scopes (leads:read, luca:draft), data sensitivity (full_content), and that idempotency is not required. The one unresolved behavioral point is whether a "preview" persists anything, which matters because readOnlyHint is false; that ambiguity keeps it from a 5.

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

Conciseness4/5

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

Purpose is front-loaded in one sentence, followed by compact operational metadata lines that each carry distinct information (operation, scopes, sensitivity, idempotency, workspace override). The key-value style is terse but nothing is wasted.

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 an output schema present, return values need no prose, and the description supplies the operational envelope an agent needs: auth scopes, sensitivity, idempotency stance, and workspace targeting. The remaining gap is that it never clarifies the dry-run nature of a preview against a non-readOnly annotation.

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

Parameters2/5

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

The only parameter mention is the workspaceId/workspaceSlug override, which merely restates the schema's own descriptions. The bulk of the surface – rows, mapping.identity, consents, identities, customFields, tagsDelimiter – is documented only by the schema (coverage 67% on a deeply nested body), and the description adds no semantics for any of it.

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 plus resource (preview a mapped CSV lead import) and its position in the workflow ("before applying it"), which implicitly separates it from the sibling luca_leads_import_apply. An agent can tell what this does and which sibling follows it without opening either schema.

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

Usage Guidelines4/5

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

"before applying it" gives clear sequencing context for when to call this tool relative to the apply step. It does not name alternatives explicitly or state exclusions, but the usage context is unambiguous enough for an agent to place it correctly in the import flow.

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

luca_leads_listList leadsA
Read-onlyIdempotent

List leads. Query supports limit, cursor, channel, and q according to Luca OpenAPI.

Luca operation: GET /api/leads Required scopes: leads:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior, so the description's added value is the auth/sensitivity context: required scopes (leads:read, luca:read) and data sensitivity: full_content. This is genuinely useful disclosure beyond the annotations, though 'does not require idempotency' just restates idempotentHint=true.

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

Conciseness3/5

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

The core purpose is front-loaded, but the body is a metadata dump ('according to Luca OpenAPI', operation line, scope lines, idempotency line) with some redundancy against the annotations. It is not bloated, but several lines do not earn their 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?

An output schema exists, so return values need not be explained. The description covers scopes, sensitivity, and workspace override, which is the context an agent needs; only the pagination/truncation role of maxPages is left solely to the schema.

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 75%, so both schema and description carry some burden. The description names the query filters (limit, cursor, channel, q) and the workspace overrides, but adds no meaning beyond the parameter names, and omits maxPages entirely (its semantics live only in the schema).

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?

States a clear verb+resource ('List leads') and even names the underlying operation (GET /api/leads). It does not distinguish itself from close siblings such as luca_find_leads or luca_leads_get, so an agent must infer the boundary from names alone.

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?

It gives one concrete usage instruction — use workspaceId/workspaceSlug to override the environment-configured default workspace. But it never says when to choose this list operation over sibling alternatives like luca_find_leads, leaving selection largely to inference.

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

luca_leads_notes_addAdd a note to a leadA

Append a coach note to a lead. Body requires body.

Luca operation: POST /api/leads/{id}/notes Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, but the description adds real behavioral context beyond them: the idempotency-key contract for safe retries, the required scopes for authorization, and that the operation touches 'redacted' data. That is substantive disclosure for a mutation 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 purpose sentence is front-loaded and the API metadata is broken into short, scannable lines. The phrase 'Body requires body' is awkwardly worded but not bloated; overall it earns its length without padding.

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 an output schema (so return values need no explanation), the description covers the non-obvious operational details: idempotency, scopes, workspace override. The main residual gap is the absence of when-to-use guidance relative to sibling write tools.

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

Parameters3/5

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

Schema coverage is 60% and the description mostly repeats what the schema already states (idempotencyKey server generation, workspaceId/workspaceSlug override). 'Body requires body' flags the nested-object requirement, but adds little beyond the schema's own required fields. Baseline 3 for a partly-documented schema is appropriate.

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?

States a specific verb and resource: 'Append a coach note to a lead.' The verb 'append' and the note resource clearly separate it from the sibling luca_leads_notes_delete, so an agent can route between the two. It stops short of an explicit contrast, keeping it just below a 5.

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?

Gives operational prerequisites (required scopes 'leads:write', OAuth scope 'luca:draft', idempotency key handling), which function as preconditions for calling. However, it never states when to reach for this tool versus alternatives such as luca_leads_draft or luca_leads_update, so usage is only implied.

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

luca_leads_notes_deleteDelete a lead noteA
Destructive

Remove one coach note from a lead and leave the rest of the timeline alone. This is how a note filed by mistake gets taken back.

Luca operation: DELETE /api/leads/{id}/notes/{noteId} Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
noteIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructive=true and readOnly=false, so the safety profile is covered. The description adds substantial non-annotation context: required scopes (leads:write, luca:draft), data sensitivity 'redacted', the Idempotency-Key requirement with retry behavior, and the workspace override mechanism. The only ambiguity is that it markets idempotent retries while the annotation sets idempotentHint=false, which is a mild tension rather than a real contradiction.

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 purpose is front-loaded in two tight sentences, followed by clearly grouped operational metadata (operation, scopes, idempotency, workspace). No sentence is wasted, though the scopes/scope/data-sensitivity line is a bit dense and packs three distinct facts together.

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?

An output schema exists, so return values need not be explained. The description covers the essentials an agent needs to call a destructive write correctly: auth scopes, retry safety, and workspace targeting. Only the idempotency-vs-annotation nuance and the lack of explicit alternative routing keep it short of full completeness.

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 60% and the schema already documents workspaceId, workspaceSlug, and idempotencyKey with descriptions that the prose largely repeats. The description maps id/noteId to the DELETE path, but adds little semantic detail beyond what the structured fields provide, so a 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 names a specific verb and resource ('Remove one coach note from a lead') and scopes it precisely ('leave the rest of the timeline alone'). This clearly distinguishes it from the sibling luca_leads_notes_add, so an agent can route correctly without opening the schema.

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

Usage Guidelines3/5

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

'This is how a note filed by mistake gets taken back' gives an implied use case (corrective deletion). However, it never explicitly names the alternative (e.g. luca_leads_notes_add) or states when NOT to use it, leaving the agent to infer the comparisons from the sibling list.

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

luca_leads_updateUpdate a leadA
Destructive

Update a lead's display name, stage, score, tags, or custom fields.

Luca operation: PATCH /api/leads/{id} Required scopes: leads:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing required OAuth scopes (leads:write, luca:draft), data sensitivity, the Idempotency-Key requirement with fallback behavior, and workspace override semantics. It does not clarify partial-update vs replace semantics for the tags array, which matters given destructiveHint=true, so it stops short of a 5.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by terse structured lines for endpoint, scopes, idempotency, and workspace. Slightly dense but every line carries operational value.

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?

An output schema exists so return values need no explanation, and annotations already cover the safety profile (destructive, non-idempotent). The description fills the remaining gaps (auth, idempotency, workspace), though it omits how omitted fields are treated on this destructive update.

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?

With 60% schema coverage, the schema already documents id, workspaceId, workspaceSlug, and idempotencyKey. The description reinforces the idempotencyKey retry behavior and workspace override intent, but adds no syntax or format detail, and the mentioned 'score' field is absent from the schema body.

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

Purpose5/5

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

States a precise verb+resource ('Update a lead') and enumerates the mutable fields (display name, stage, score, tags, custom fields), which cleanly distinguishes it from siblings like luca_leads_create, luca_leads_get, and luca_leads_list. An agent can identify the tool's scope without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied by the verb 'Update' and the listed mutable fields, and it discloses the PATCH endpoint and required write scopes. However, it never states when to prefer this over alternatives (e.g., luca_leads_field_definitions_upsert, luca_leads_identities_attach, or consents tools) for the same lead, leaving routing to inference.

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

luca_learning_ab_tests_getGet an A/B testA
Read-onlyIdempotent

Read one A/B test with its per-variant numbers: how many leads each arm saw, and how each is doing against the success metric. Small samples swing widely, so say how many leads each arm has before calling a winner.

Luca operation: GET /api/ab-tests/{id} Required scopes: learning:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, and the description still adds real context: required scopes (learning:read, luca:read), full_content data sensitivity, and the default-workspace override behavior. The line 'Does not require idempotency' is about idempotency keys rather than behavior, and sits slightly awkwardly next to idempotentHint=true, though it is not a direct contradiction.

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

Conciseness4/5

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

Front-loaded with the purpose and the payload shape, followed by a compact operational block (endpoint, scopes, sensitivity, workspace override). Each line carries information; only the 'small samples swing widely' sentence leans advisory rather than definitional.

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 an output schema present, the description need not explain return values, and it covers the operationally important gaps: auth scope, sensitivity tier, and workspace resolution. An agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 67%: the workspace parameters carry their own descriptions and id has a UUID pattern but no prose. The description adds the piece the schema lacks — that workspaceId/workspaceSlug override a default workspace configured by the environment — which is meaningful semantics beyond the field text.

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

Purpose5/5

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

States a specific verb and resource ('Read one A/B test') and immediately scopes the payload ('with its per-variant numbers: how many leads each arm saw, and how each is doing against the success metric'). The word 'one' plus the sibling luca_learning_ab_tests_list makes the single-vs-list distinction obvious without opening any schema.

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

Usage Guidelines3/5

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

Usage is only implied: it is a read of an existing test by id, and it warns 'say how many leads each arm has before calling a winner'. That is interpretive guidance for the result, not a when-to-use-this-vs-alternative statement, and no sibling (e.g. the list or panel tool) is named as the alternative.

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

luca_learning_ab_tests_listList A/B testsA
Read-onlyIdempotent

List the coach's A/B tests, newest first, optionally filtered by status. Variant config comes back as stored, since its shape depends on what the test compares. Creating, starting, stopping, and adopting a test stay in the Luca app.

Luca operation: GET /api/ab-tests Required scopes: learning:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds meaningful context beyond them: ordering ('newest first'), the caveat that variant config shape depends on the test, the endpoint, required scopes, data sensitivity, and workspace override behavior. Pagination behavior is not addressed, keeping it from a 5.

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

Conciseness4/5

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

The core purpose is front-loaded, and the extra endpoint/scope boilerplate is compact and useful. 'Does not require idempotency' is slightly redundant with idempotentHint=true, but the overall structure is 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?

With annotations and an output schema present, the description provides enough for a list tool: it covers ordering, status filtering, workspace override, scopes, and data sensitivity. Remaining gaps like pagination or result-set expectations are minor given the output schema exists.

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 67%. The description adds context that workspaceId/workspaceSlug override 'the default workspace configured by environment', which is useful beyond the schema. But it adds no meaning for the status filter beyond the enum in the schema, so it only partially compensates.

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?

States a specific verb and resource ('List the coach's A/B tests') plus ordering ('newest first') and filter ('optionally filtered by status'). It clarifies write operations stay in the Luca app, but never references the sibling luca_learning_ab_tests_get, so it does not fully differentiate from all siblings.

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?

Gives some context: listing is the only exposed operation for A/B tests, and creating/starting/stopping/adopting are out of scope. However, it does not say when to prefer this tool over luca_learning_ab_tests_get or other learning list tools, leaving the choice implied.

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

luca_learning_framework_performanceRead framework objection performanceA
Read-onlyIdempotent

Win rate by objection bucket for the sales framework the coach has configured right now, over a rolling window. These numbers are correlational — read them as a signal, not as proof a framework caused the result.

Luca operation: GET /api/framework-performance Required scopes: learning:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and non-destructive behavior, but the description goes further by disclosing required scopes (learning:read, luca:read), data sensitivity (full_content), and a genuinely useful caveat that the figures are correlational, not causal. This adds real context beyond the structured hints; only the scope/OAuth/idempotency scaffolding is standard boilerplate.

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 purpose and the correlation caveat are front-loaded and earn their place, and the workspace override note is actionable. The trailing metadata block (operation, scopes, idempotency line) is somewhat listy and partly restates annotation hints, but it stays compact.

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 an output schema present, the description needn't detail return values, and it covers resource scope, windowing, workspace override and auth sensitivity. The main remaining gap is alternative-tool routing against the adjacent objection/learning analytics tools.

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

Parameters3/5

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

Schema coverage is 67%: workspaceId and workspaceSlug are documented in-schema and the description reinforces their purpose ('override the default workspace configured by environment'). windowDays, however, is undocumented in both places — the description only implies 'rolling window' without stating the default of 30 or the 1–90 range, so the description does not fully compensate for the gap.

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?

States a specific metric (win rate by objection bucket) tied to a specific resource (the sales framework the coach has configured now) over a defined window, so the agent knows exactly what it reads. It does not, however, name or distinguish itself from conceptually similar siblings like luca_analytics_objections or luca_learning_panel.

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?

It gives interpretive guidance ('read them as a signal, not as proof') and explains the workspace override, but never says when to prefer this tool over the many adjacent objection/analytics siblings. Usage is implied rather than stated as a when/when-not rule.

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

luca_learning_panelRead what Luca wants to learnA
Read-onlyIdempotent

Read which of the three profile questions Luca still owes an answer to, with suggested answers inferred from the coach's own words. The worked example pair is blanked for a redacted-tier key.

Luca operation: GET /api/teach-luca Required scopes: learning:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive/openWorld=false, so the bar is lower, yet the description adds real context: required scopes (learning:read, luca:read), full_content data sensitivity, and the redaction behavior where the worked-example pair is blanked for redacted-tier keys. The idempotency line largely restates the idempotentHint annotation.

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 core purpose is front-loaded in the first sentence, with scope/sensitivity metadata following in a compact block. Slightly marred by the 'Does not require idempotency' line, which is redundant with idempotentHint=true and adds little.

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 an output schema present, return values need not be explained, and the description still covers auth scopes, sensitivity tier, redaction behavior, and workspace-default overrides. What is missing is only the when-to-use framing against sibling learning tools.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: both params override a default workspace configured by environment, and they are alternatives to each other. That is genuine value beyond the per-field 'Optional Luca workspace id override' text.

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

Purpose4/5

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

The description states a specific verb and resource: reading the three profile questions Luca still owes an answer to, plus the underlying operation (GET /api/teach-luca). This is more precise than a generic 'learning' tool, though it does not explicitly contrast itself with the other luca_learning_* siblings (framework performance, A/B tests, proposals).

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?

Usage is implied by the purpose and the workspace-override note, but there is no explicit 'use this when...' guidance or named alternative. Given the crowded luca_learning_* and luca_coach_* families, a sentence on when this panel is the right call versus those siblings would help.

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

luca_learning_proposals_dismissDismiss a learning proposalA
Destructive

Dismiss one learning proposal so it drops out of the default list. Use it when the coach has decided against the change, not when you have simply read it.

Luca operation: POST /api/learning-proposals/{id}/dismiss Required scopes: learning:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing required scopes (learning:write, luca:draft), redacted data sensitivity, the mandatory Idempotency-Key and the server-generated fallback, and workspace override behavior. The annotations already cover the destructive/idempotent/openWorld profile, so the added auth and retry context is the real value. It stops short of saying whether a dismissed proposal can be restored.

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 key behavior is front-loaded in the first sentence, with the operational metadata (endpoint, scopes, idempotency, workspace) following in a tight block. Slightly list-like and repetitive of the schema for the idempotency key, but every line carries information.

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 an output schema present, return values need no explanation, and the description supplies auth, sensitivity, idempotency, and workspace context. The one notable gap for a destructiveHint=true tool is whether dismissal is reversible or how it relates to the proposal list/panel siblings.

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 75%, so the schema already documents the parameters, but the description contributes the fact that workspaceId/workspaceSlug override an environment-configured default workspace and that the idempotencyKey exists specifically for safe retries. That is meaningfully more than the terse schema strings.

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

Purpose5/5

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

States a specific verb and resource ('Dismiss one learning proposal') plus the observable effect ('drops out of the default list'), which implicitly distinguishes it from read-only siblings like luca_learning_proposals_list. An agent can tell this is a state-changing dismissal, not a fetch.

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 gates the call on intent: 'Use it when the coach has decided against the change, not when you have simply read it.' That is a clear when-to-use plus a when-not, though it never names the alternative tools (e.g. the proposals list/panel) that cover the reading case.

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

luca_learning_proposals_listList learning proposalsA
Read-onlyIdempotent

List what the coach's tests have learned and are proposing they act on, newest first. Dismissed proposals are left out unless you ask for them.

Luca operation: GET /api/learning-proposals Required scopes: learning:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond that: required scopes (learning:read, luca:read), data sensitivity full_content, workspace override semantics, and the default dismissal filter. 'Does not require idempotency' is slightly confusing given idempotentHint=true, but it reads as a request-semantics note rather than a contradiction.

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

Conciseness4/5

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

Purpose and default filter are front-loaded in two short sentences, then operational metadata is grouped compactly below. The scope/sensitivity/operation block is boilerplate but dense and useful; nothing is padded.

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?

No output schema explanation is needed since one exists, and annotations cover safety. Auth scopes, sensitivity, workspace override, and default filtering are all disclosed. The only missing piece is the meaning of the eventTypes filter.

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?

With 67% schema coverage and three params, the schema documents workspaceId/workspaceSlug and the description reinforces the override behavior. The default-filter sentence conveys activeOnly's meaning, but eventTypes is never explained in the description or schema, leaving a real gap. Baseline-appropriate but not additive across the board.

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?

States a specific verb and resource ('List what the coach's tests have learned and are proposing they act on') plus ordering ('newest first'). It clearly distinguishes this from the dismiss sibling (luca_learning_proposals_dismiss), though it doesn't name panel/ab_tests alternatives. Purpose is unambiguous for an agent.

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 only usage guidance is the default filter behavior ('Dismissed proposals are left out unless you ask for them'), which maps to the activeOnly parameter rather than telling the agent when to choose this tool over luca_learning_panel, luca_learning_ab_tests_list, or luca_analytics_learning_insights. Usage is implied, not stated with alternatives.

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

luca_memory_listList what Luca remembersA
Read-onlyIdempotent

List what Luca remembers, filtered by lead, scope, source, trust level, or free text. The fact, the reasoning, and the quoted evidence are blanked for a redacted-tier key; trust level, lead, and dates always come back.

Luca operation: GET /api/memory Required scopes: memory:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive status, yet the description goes further by disclosing tier-dependent redaction: fact, reasoning, and quoted evidence are blanked for a redacted-tier key while trust level, lead, and dates always return. It also states the OAuth scope and that workspace can be overridden, which are behavioral facts not in 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 core capability and filter list are front-loaded in the first sentence, and the redaction rule is stated compactly. The trailing operational boilerplate ('Does not require idempotency', scope/data-sensitivity lines) is somewhat rote and partially redundant with the idempotentHint annotation, but it is short enough not to obscure the purpose.

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 an output schema present, the description need not explain return shapes, and it instead adds the important tier-dependent field redaction rule plus auth scope and workspace override. The remaining gap is filter completeness (state/archived semantics and result limits), which is minor against the schema and output schema coverage.

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 description names several filter concepts (lead -> leadId, scope, source, trust level, free text -> q) that map onto the nested query properties, which the schema itself leaves largely undocumented. It omits the state/archived filters, their defaults, and pagination, so coverage of the filter surface is partial.

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 gives a specific verb ('List') and resource ('what Luca remembers') and enumerates the filter dimensions, so an agent knows exactly what it retrieves. It does not, however, name or distinguish itself from its closest siblings (luca_memory_update, luca_memory_set_archived), leaving that separation to inference.

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?

It implies when the tool applies by listing available filters (lead, scope, source, trust level, free text) and adds prerequisites like required scopes and workspace override. There is no explicit when-not-this-tool guidance or routing to the memory write/archive siblings, so usage is only implied rather than stated.

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

luca_memory_set_archivedArchive or restore memoriesA
Destructive

Archive or restore several memories at once. Archiving stops Luca using a fact while the record and its provenance survive, so it is always reversible.

Luca operation: POST /api/memory/bulk Required scopes: memory:write Required OAuth scope: luca:draft; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Goes well beyond the annotations: it names the underlying operation (POST /api/memory/bulk), the required scopes (memory:write, luca:draft), the redacted data sensitivity, and the Idempotency-Key requirement including server-side generation. The 'always reversible' framing mildly softens destructiveHint=true, but it reads as an accurate domain explanation of what 'destructive' means for archiving rather than a contradiction, since the tool exposes a restore action.

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

Conciseness4/5

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

Front-loaded with the purpose and the reversibility guarantee, followed by compact operational metadata (endpoint, scopes, idempotency, workspace override). The 'Required scopes' / 'Required OAuth scope' lines are slightly redundant with each other but each carries a distinct auth fact.

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 bulk mutation with a nested body, an output schema, and strong annotations, the description supplies the auth, idempotency, and reversibility context an agent needs. The main remaining gap is partial-failure behavior when only some of up to 100 ids fail, which affects retry strategy.

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 75%, so the body/action/ids parameters are already documented structurally. The description adds real meaning for workspaceId/workspaceSlug (they override the environment-configured default workspace) but restates the idempotencyKey behavior almost verbatim from the schema, and says nothing about the 100-id batch ceiling or the archive/restore enum semantics.

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?

States a specific verb pair and resource ('Archive or restore several memories at once'), with the bulk/plural scope making it distinguishable from the singular luca_memory_update and the read-only luca_memory_list. It never names those siblings explicitly, so differentiation is inferred rather than 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 sentence 'Archiving stops Luca using a fact while the record and its provenance survive' implies when archiving is appropriate (suppressing a fact rather than deleting it), but there is no explicit when-to-use/when-not or pointer to luca_memory_update for single-record edits. Usage is inferable but not directed.

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

luca_memory_updateEdit a memoryA
Destructive

Correct one memory: edit the fact, flag it disputed when it turns out to be wrong, restore an archived one, or make it win over a conflicting memory.

Luca operation: PATCH /api/memory/{id} Required scopes: memory:write Required OAuth scope: luca:draft; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, and the description adds real context on top: required scopes (memory:write, luca:draft), full_content data sensitivity, a mandatory Idempotency-Key with server-side generation fallback, and the workspace override behavior. It still doesn't say what is overwritten on a content edit or how a stale write behaves.

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

Conciseness4/5

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

Front-loaded with the one-sentence purpose and its four modes, followed by compact operational lines for path, scopes, idempotency and workspace. The metadata lines are terse rather than padded, though they read slightly like a spec dump.

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?

An output schema exists, so return values need not be described, and the description covers the edit modes, authorization, idempotency and workspace targeting. The remaining gap is the unstated conflict/stale-write semantics of expectedUpdatedAt for what is a destructive mutation.

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 60% and the nested body contains many undocumented fields (expectedUpdatedAt, evidence, metadata, trustLevel, confidence, disputedReason). The prose maps the four modes loosely to boolean/string fields (content, disputed, restore, preferred), which adds some meaning, but it leaves the optimistic-concurrency and provenance parameters unaddressed. Baseline 3 is appropriate.

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?

States a specific verb+resource ('Correct one memory') and enumerates four distinct edit modes: fixing a fact, flagging disputed, restoring an archived item, and marking preferred over a conflicting memory. It does not, however, disambiguate from the sibling luca_memory_set_archived, which the 'restore an archived one' clause overlaps with.

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 situational context for each mode ('flag it disputed when it turns out to be wrong'), so an agent knows which operation it is selecting. It stops short of any exclusion language or explicit alternative routing (e.g., use luca_memory_set_archived instead), which is the difference between a 4 and a 5.

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

luca_morning_reportGet the morning digestA
Read-onlyIdempotent

Return the coach's structured last-24h review-queue digest: queued drafts with status and confidence, plus counts by status. No model call — summarize it client-side. Example: call with {} at the start of the day.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real behavioral value beyond that: no model call is made, the output is structured data meant to be summarized client-side, and the window is fixed at the last 24h.

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 short sentences, front-loaded with what is returned, then the no-model-call/summarize instruction, then a usage example. Nothing is padding; each sentence carries a distinct instruction.

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?

An output schema exists, so return-value shape need not be restated, and annotations cover the safety profile. What remains — window, contents, no-LLM behavior, and default invocation — is all present, leaving nothing an agent needs to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so workspaceId and workspaceSlug are already documented; the baseline would be 3. The description adds the meaningful operational fact that an empty object is valid, telling the agent both params are true overrides with a default workspace resolution.

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?

States a concrete verb and resource ('Return the coach's structured last-24h review-queue digest') plus the payload contents (queued drafts with status and confidence, counts by status). This is enough to separate it in spirit from item-level siblings like luca_review_queue_list, but no sibling is named explicitly, so differentiation is inferred rather than stated.

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 a clear usage context ('call with {} at the start of the day') and implicitly routes the agent away from re-querying by saying to summarize client-side. There is no explicit when-not guidance or named alternative (e.g. luca_review_queue_list for raw items), so it stops short of a 5.

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

luca_pause_cadencePause a lead's rescue cadenceB
Destructive

Cancel a lead's running rescue cadence so no further touches are sent. Safe to call twice (a no-op once cancelled). Example: call with { leadId, reason: "lead replied elsewhere" }.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYesThe lead whose cadence to pause.
reasonNoOptional operator reason, stored on the cadence.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoReuse the same key when retrying this exact pause.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

The description usefully discloses the destructive effect ('no further touches are sent') beyond destructiveHint=true. But it claims 'safe to call twice (a no-op once cancelled)', which is idempotent behavior while the annotations declare idempotentHint=false and the schema exposes an idempotencyKey for deduping retries — a direct conflict on retry semantics.

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 short sentences, front-loaded with the purpose, then retry safety, then a concrete example — nothing padded. Minor redundancy in re-demonstrating parameters the schema already fully documents.

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?

An output schema exists, so return values need no explanation, and annotations cover safety profile; the description's job is mainly effect and idempotency, which it addresses. Remaining gaps are reversibility (can a paused/cancelled cadence be resumed?) and the relationship to the luca_cadences_pause sibling.

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%, with all five parameters (leadId, reason, workspaceId/workspaceSlug, idempotencyKey) documented inline, so the baseline is 3. The example call adds a small amount of value by showing leadId and reason together, but reveals nothing new about the workspace overrides or the key.

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?

States a specific verb and resource ('cancel a lead's running rescue cadence') plus the concrete effect ('no further touches are sent'), so an agent knows what it accomplishes. However, the verb 'cancel' conflicts with the tool name/title 'pause', and it never differentiates itself from the near-duplicate sibling luca_cadences_pause, leaving an ambiguity about which one to pick.

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 example ('lead replied elsewhere') implies the trigger scenario and 'safe to call twice' gives a retry rule, which is genuine usage guidance. But there is no explicit when-to-use/when-not, no statement of prerequisites (e.g., an active cadence must exist), and no routing versus luca_cadences_rescue_start or luca_cadences_pause.

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

luca_post_call_queueList the post-call workA
Read-onlyIdempotent

Return everything waiting on the coach after a call: calls that still need a report on how they went, and attended calls with no revenue outcome recorded. The two halves are tracked separately by the API, so a call can sit on one list and not the other. Close an item with luca_close_call_loop. Example: call with {} after a day of calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive status, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: the two halves are tracked separately, so membership in one list does not imply membership in the other. It does not mention pagination, ordering, or volume limits.

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

Conciseness4/5

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

Three sentences, front-loaded with the two work categories before the closing tool and the example. The example sentence ('call with {} after a day of calls') is slightly awkwardly phrased but earns its place by showing the zero-argument invocation.

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?

An output schema exists, so return-value detail is unnecessary, and the description covers what the queue contains and how items leave it. What remains missing is any note on ordering, pagination, or expected item volume — minor gaps against a read-only listing tool with full annotation coverage.

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% for both optional workspace override parameters, so the schema already carries the semantics. The description only implies that the tool works with no arguments ('call with {}'), which adds marginal value. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('return everything waiting on the coach after a call') and enumerates the two concrete work types the queue covers: calls needing a report and attended calls with no revenue outcome. This is specific enough to distinguish it from nearby siblings like luca_call_events_needing_feedback and luca_review_queue_list.

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

Usage Guidelines4/5

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

Explicitly routes the agent to the companion action ('Close an item with luca_close_call_loop') and frames the timing context ('after a day of calls'). It does not state a when-not-to-use condition or clarify how this differs from the narrower feedback-only sibling, so it falls just short of a 5.

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

luca_reports_morningRead the morning reportA
Read-onlyIdempotent

Structured 24h review-queue digest (items + counts) for the coach. No model call; summarize client-side.

Luca operation: GET /api/reports/morning Required scopes: reports:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower, and the description adds real context beyond them: the underlying GET endpoint, required reports:read scope, full_content data sensitivity, and the explicit statement that no model call occurs. These are operational traits the agent cannot infer from the annotation block.

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 lead sentence front-loads purpose and payload, followed by compact metadata lines that are each short and scannable. The scope/idempotency lines are somewhat boilerplate but carry concrete constraints, so nothing is egregiously wasted.

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?

An output schema exists, so return-value explanation is not required, and the description still covers auth scopes, sensitivity, workspace-override behavior, and the client-side summarization expectation. The one gap is the failure to disambiguate from the luca_morning_report sibling.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the semantics of omission: workspaceId/workspaceSlug override 'the default workspace configured by environment.' That resolves the ambiguity of what happens when both optional params are absent.

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?

States a specific resource and payload: a structured 24h review-queue digest of items plus counts for the coach. It clearly distinguishes the return shape (structured, not narrative). However, it does not differentiate itself from the near-identical sibling luca_morning_report, leaving an agent unsure which of the two to pick.

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 line 'No model call; summarize client-side' tells the agent what to do with the result and that no LLM is invoked server-side, which is genuine usage guidance. But there is no explicit when-to-use vs alternatives (luca_morning_report, luca_review_queue_list, luca_insights_unread_count), so selection remains implied.

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

luca_reports_scorecardRead the scorecardA
Read-onlyIdempotent

Read the sales scorecard for a window: calls booked and completed, show rate, won and lost, draft approvals, and hours saved.

Luca operation: GET /api/reports/scorecard Required scopes: reports:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful non-schema context: required scopes (reports:read, luca:read), data sensitivity 'redacted', the underlying GET endpoint, and that an idempotency key is not required.

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

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and metric list, followed by compact metadata lines. Minor redundancy between the scope line and the operation line, but nothing is padded.

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 an output schema present, the description need not explain return values, and it adequately covers purpose, auth, and workspace selection. The dangling reference to a 'window' with no corresponding parameter is the only small ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both params are already self-documented as optional workspace overrides; the description's restatement of the override behavior only marginally extends the schema by naming the 'default workspace configured by environment' as the fallback. Baseline 3 fits.

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?

States a specific verb (Read) and resource (sales scorecard) and enumerates the exact metrics returned (calls booked/completed, show rate, won/lost, draft approvals, hours saved), so the agent knows precisely what it produces. It doesn't explicitly differentiate itself from near-neighbor report tools like luca_reports_morning or luca_morning_report.

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?

Provides one concrete usage rule ('Use workspaceId or workspaceSlug to override the default workspace configured by environment'), but gives no when-to-use guidance versus the many analytics/report siblings, and never explains how the 'window' is defined given there is no date parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_reschedule_callMove a call to a new timeA
Destructive

Move a booked call to a new time and hand back a fresh reschedule link for the lead. Checks the new slot is open first, against the schedule of its booking type when it has one, and returns the open slots instead of moving the call when it is taken. A call with an idempotencyKey skips that check so a retry gets the original result back. A manual booking moves in Luca only. A Cal.com or Google Calendar booking moves on that calendar too. A Calendly, GoHighLevel or iClosed booking is refused so the coach can move it with the provider, and so is a provider booking with no calendar event, such as one from luca_book_call. Moving the call re-arms the lead's reminder for the new time, so pass confirm: true only after the coach approves the move. Example: call with { bookingId, slotAt: "2026-07-16T15:00:00Z", confirm: true } after the lead asked to push the call. No message about the move is sent: send the lead the link yourself, or draft the message through the review queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
slotAtYesISO-8601 start time to move the call to, with an offset.
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
providerNoThe coach's booking provider. Used only for the availability check, and only when the booking has no booking type. The booking keeps the provider it already has. Pass it when the coach is not on Calendly, or the availability check reads the wrong calendar.
bookingIdYesThe booking to move.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
expiresInHoursNoHow long the new reschedule link stays usable. Defaults to 168 hours.
idempotencyKeyNoReuse the same key when retrying this exact reschedule. A keyed call skips the availability check and lets the API replay the first result.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructive/openWorld/non-idempotent; the description adds what actually happens: availability is validated (against the booking type's schedule), open slots are returned instead of a move when taken, side effects propagate to Cal.com/Google Calendar, the lead's reminder is re-armed, and no message is sent to the lead. That is substantial context beyond the annotations and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then conditions, then the side-effect and messaging caveat, with a concrete example. It is long (eight-plus sentences) and repeats some schema-documented details about confirm and idempotencyKey, but almost every sentence adds decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers refusal cases, provider-specific behavior, idempotent retry semantics, reminder re-arming, and the out-of-band messaging requirement, and an output schema exists so return shape needn't be spelled out. An agent has everything needed to invoke this safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics: confirm is a gating approval after coach sign-off, provider only affects the availability check and never changes the booking's provider, and idempotencyKey bypasses the slot check for retries. expiresInHours is only implicitly covered via 'fresh reschedule link'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Move a booked call to a new time') plus the second product of the call ('hand back a fresh reschedule link for the lead'). This is clearly distinct from siblings like luca_bookings_update and luca_bookings_cancel, which mutate different aspects of a booking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the when/when-not: a call with idempotencyKey skips the check; Calendly/GoHighLevel/iClosed bookings are refused; provider bookings without a calendar event are refused; confirm: true only after coach approval. It also names a follow-up path (draft the message through the review queue) rather than leaving the agent to infer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_rescue_silent_leadsEnroll silent leads into the rescue cadenceA
Destructive

Enroll one or more silent leads into the multi-day rescue cadence. THIS STARTS OUTBOUND TOUCHES to real leads over the coming days — pass confirm: true to proceed. cadenceTemplate is light | standard | aggressive (default standard). Example: { leadIds: ["..."], cadenceTemplate: "standard", confirm: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
leadIdsYesLead ids to enroll (max 100). Non-tenant ids are skipped.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoReuse the same key when retrying this exact enrollment.
cadenceTemplateNoCadence intensity (default standard).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is covered. The description adds genuinely valuable context beyond annotations: the effect is delayed and ongoing ('over the coming days') and involves outbound touches to real leads, plus an explicit confirm gate. It omits what happens to leads that are not silent or already enrolled, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences: purpose, the critical side-effect warning, then parameter guidance with a concrete example. The capitalized warning is well placed. Slight redundancy with the schema's own confirm text, but no wasted padding.

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 an output schema present, return values need not be explained, and 100% schema coverage plus rich annotations mean the description only needs to carry the intent and side-effect warning, which it does. The main gap is the lack of differentiation from the near-identical cadence/campaign enrollment siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter including confirm, leadIds, and the cadenceTemplate enum. The description restates the enum values and an example but adds no semantics beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource+effect: enroll silent leads into the multi-day rescue cadence. It is clear what the tool does. However it does not distinguish itself from closely related siblings such as luca_cadences_rescue_start or luca_campaigns_enroll, so an agent cannot easily tell which to pick from the description alone.

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?

It states the confirm: true prerequisite and the side effect, which is usage-relevant, but gives no explicit when-to-use vs. when-not guidance and never names or excludes the overlapping cadence/enroll siblings. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_approveApprove and send a queued draftA
Destructive

Approve a pending draft for sending; dispatches through the lead's channel. Sends a real message.

Luca operation: POST /api/review-queue/{id}/approve Required scopes: review_queue:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Going well beyond the annotations (which only flag destructive/openWorld/idempotent), the description discloses that it sends a real message through the lead's channel, that confirm:true is required or the call is rejected, and how idempotency keys are handled. This is exactly the extra behavioral context an agent needs for a destructive send.

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?

Purpose is front-loaded in the first sentence and the following lines are each distinct operational facts. There is mild redundancy (confirm/destructive warning duplicated in the schema's confirm description), but overall it is tight and scannable.

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 an output schema present and annotations covering the safety profile, the description sufficiently frames scopes, idempotency, confirmation, and workspace override. The only gap is that the nested body payload (finalBody/finalParts/outboundContent) is left entirely to the schema.

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 67%; the four described params (confirm, workspaceId, workspaceSlug, idempotencyKey) already carry descriptions, and the description mostly restates them. The two undocumented required params (id and the complex nested body) get no explanation, so the description adds little 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 opening states a specific verb+resource ('Approve a pending draft for sending') and clarifies the effect ('dispatches through the lead's channel. Sends a real message'), which cleanly separates it from siblings like luca_review_queue_reject and luca_review_queue_restore.

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?

It gives useful operating prerequisites (required scopes, mandatory confirm:true, idempotency handling), but never states when to choose approve over review_queue_reject/restore or what qualifies a draft for approval. Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_explainExplain a queued draftA
Read-onlyIdempotent

Explain the signals behind a drafted reply: its voice-match score, any critic findings, and the qualification that motivated it.

Luca operation: GET /api/review-queue/{id}/explain Required scopes: review_queue:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the read-only/idempotent/non-destructive profile, so the description's job is lighter, and it delivers extra context: required scopes (review_queue:read, luca:read), data sensitivity 'full_content', and the workspace override behavior. The line 'Does not require idempotency' is slightly muddled against idempotentHint=true but reads as 'no idempotency key needed,' consistent with a read.

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 purpose sentence is front-loaded and information-dense, followed by a clean block of operational metadata (operation, scopes, sensitivity). The idempotency line is marginally useful boilerplate but overall nothing is wasted.

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?

An output schema exists, so return values need not be described, and annotations carry the safety profile. With scopes, sensitivity, the endpoint, and workspace-override semantics covered, an agent has what it needs to invoke this correctly; only explicit routing versus siblings is absent.

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?

At 67% schema coverage the schema already documents workspaceId and workspaceSlug, but the description adds the meaningful behavior that these override the environment-configured default workspace, which the schema does not convey. The primary 'id' parameter's meaning (the review-queue item) is only implied via the path, leaving a small gap.

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 ('Explain') and resource ('drafted reply'/queued draft) and enumerates what is explained: voice-match score, critic findings, and the motivating qualification. This clearly separates it from the sibling queue operations (list/approve/reject/restore) without the agent needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer you call this to inspect a queued draft before deciding on it, but the description never states when to reach for this versus luca_review_queue_list or luca_review_queue_objection_variant, nor any prerequisite such as the draft being in the queue. Adequate context, no explicit when/when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_listList the review queueA
Read-onlyIdempotent

List review-queue items when the API key has review queue access.

Luca operation: GET /api/review-queue Required scopes: review_queue:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxPagesNoMax pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, and the description adds genuinely new context: the underlying endpoint (GET /api/review-queue), required scopes (review_queue:read, luca:read), and data sensitivity full_content. Minor tension: 'Does not require idempotency' sits alongside idempotentHint=true, though they describe different things (no idempotency key required vs. naturally idempotent).

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?

Short, line-oriented, and front-loaded with the core action before the auth/endpoint metadata. A couple of lines ('Luca operation: GET /api/review-queue', 'Does not require idempotency') are marginal but cheap.

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 read-only list with a full output schema and strong annotations, the description is nearly sufficient — auth requirements, workspace override behavior, and sensitivity are all disclosed. The remaining hole is that the query filters and ordering semantics are unexplained anywhere, which matters for a queue whose purpose is triage ordering.

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 75%, and the uncovered part is the entire nested 'query' object — limit, order (priority/fifo), cursor, status, category have types and enums but no descriptions anywhere. The description adds nothing about these filters, and its workspaceId/workspaceSlug sentence merely restates what the schema already documents.

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?

States a specific verb+resource: 'List review-queue items'. It is clearly a read/list operation, distinguishable from the sibling mutations (approve, reject, restore, media_retry) and from the explain/sla variants. However, it never names a sibling or explains how it differs (e.g. from luca_review_queue_sla or luca_triage_inbox).

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 opening clause 'when the API key has review queue access' is a prerequisite, not a when-to-use rule. It gives workspace-override guidance ('Use workspaceId or workspaceSlug to override the default workspace') but never says when to choose this list over alternatives like luca_review_queue_sla or luca_triage_inbox, leaving selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_media_retryRetry a draft's failed mediaA
Destructive

Retry a failed voice-note transcription so the draft can be reviewed. Only re-transcribes; never redrafts or sends.

Luca operation: POST /api/review-queue/{id}/media/{mediaId}/retry Required scopes: review_queue:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
mediaIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, and the description adds real operational context beyond them: 'Only re-transcribes; never redrafts or sends' bounds the blast radius, and the required scopes plus the Idempotency-Key requirement are surfaced. It does not mention that the existing transcript is replaced (which destructiveHint=true implies), a modest gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and scope-limiting clause, followed by compact operational metadata (operation, scopes, idempotency, workspace). No filler sentences, though the scope/permission lines are dense reference material rather than prose.

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?

An output schema exists, so return values need no explanation; the description covers auth scopes, idempotency handling, and workspace override, which is most of what a caller needs. It could still clarify what 'failed' means and whether re-transcription overwrites the prior transcript.

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 60%: the two path params (id, mediaId) are undocumented but their role is clear from the endpoint template, and workspaceId/workspaceSlug/idempotencyKey already carry schema descriptions. The description's notes on idempotencyKey and workspace override largely restate the schema, so it adds only marginal meaning.

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?

States a specific verb (retry) and resource (failed voice-note transcription for a draft's media), plus the endpoint template POST /api/review-queue/{id}/media/{mediaId}/retry. It implicitly distinguishes itself from review_queue_approve/reject/list by targeting media-level retry, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trigger condition ('a failed voice-note transcription') is clear from the first sentence, so an agent knows this is the recovery path. However, no alternatives are named (e.g., what to do if the media is not failed, or how this relates to review_queue_list/explain), and no prerequisites for the draft state are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_objection_variantRecord an objection variant choiceA
Destructive

Record which objection-specialist variant was picked for one queued draft. It is how the objection tests learn which handling works, so record the variant the coach actually chose.

Luca operation: POST /api/review-queue/{id}/objection-variant Required scopes: review_queue:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation and safety profile, and the description adds useful operational context: required scopes, data sensitivity, idempotency-key handling, and workspace override. It does not explain the destructive implication despite destructiveHint=true, so it is not fully transparent.

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 purpose is front-loaded and the remaining lines are structured operation, auth, idempotency, and workspace notes. It is efficient overall, though some boilerplate is dense.

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 the output schema and annotations, the description covers auth, idempotency, workspace targeting, and the learning side effect. It still omits label semantics and destructive implications, but is broadly complete for invocation.

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 60%; the description adds meaning for idempotencyKey and workspace overrides, but the required path id and body.label are not semantically documented in either place. The phrase "variant the coach chose" only loosely implies what label should contain.

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 ("Record"), a specific resource ("objection-specialist variant"), and a precise target ("one queued draft"). It also explains the downstream purpose, making it distinguishable from generic review-queue mutation siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: record the variant the coach actually chose for a queued draft. It does not name alternatives or when not to use this tool, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_rejectReject a queued draftA
Destructive

Reject a pending review-queue draft so it never sends. Stops any related booking-recovery cadence and emits review.rejected.

Luca operation: POST /api/review-queue/{id}/reject Required scopes: review_queue:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already covering destructiveness, the description adds substantial context beyond them: it names two side effects ('stops any related booking-recovery cadence', 'emits review.rejected'), lists required scopes and data sensitivity, and explains the Idempotency-Key requirement. Crucially it resolves the tension with idempotentHint=false by telling the agent retries are only safe when a stable key is supplied.

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 behavioral payoff is front-loaded in sentence one, followed by a compact metadata block. Every sentence is informative, though the endpoint/scope/transport details read as boilerplate appended rather than integrated into the narrative.

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, scoped mutation with an output schema (so return values need not be described), the definition covers side effects, auth requirements, idempotency, workspace scoping, and the endpoint. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 75%, the schema already documents workspaceId, workspaceSlug, and idempotencyKey. The description still adds value by stating why idempotencyKey matters (safe retries, server-generated fallback) and clarifying the workspace-override semantics, going slightly beyond the schema text.

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 first sentence gives a specific verb+resource plus the consequence ('Reject a pending review-queue draft so it never sends'), which distinguishes it from siblings like luca_review_queue_approve and luca_review_queue_restore without needing their schemas. It also names the concrete effect on the review-queue lifecycle.

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 establishes the precondition (a pending draft) and the outcome, so usage is implied, but it never explicitly routes the agent away from approve/restore/explain siblings or states a when-not condition. Guidance is adequate but not directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_restoreRestore a rejected draftA
Destructive

Restore a rejected review-queue item back to pending. Fails if it's a booking message whose recovery window already passed.

Luca operation: POST /api/review-queue/{id}/restore Required scopes: review_queue:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses the operation endpoint, required scopes, data sensitivity, idempotency-key behavior, and workspace override behavior. It also states a concrete failure condition, giving an agent useful behavioral context for retries and error handling.

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 core purpose and failure condition are front-loaded, followed by operational details. It is appropriately sized for a mutation tool, though some scope and endpoint boilerplate could be trimmed without losing much.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a four-parameter mutation tool with annotations and an output schema. It covers the action, failure condition, authentication scopes, idempotency behavior, and workspace override, which are the key details an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, which sets a baseline of 3. The description explains idempotencyKey and workspace override behavior, but those details largely repeat schema descriptions, and the required id parameter is not further described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: restoring a rejected review-queue item back to pending. It distinguishes the action from sibling review-queue tools such as approve and reject, so an agent can identify the correct tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the intended scenario: restoring a rejected item to pending. It also gives an important failure condition for booking messages whose recovery window has passed, though it does not explicitly compare this tool with alternatives like approve or reject.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_review_queue_slaCheck the review queue's response timesA
Read-onlyIdempotent

Read median first-response time and its daily trend. Tells you whether the queue is being cleared fast enough.

Luca operation: GET /api/review-queue/sla Required scopes: review_queue:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the bar is lower, yet the description adds genuinely useful operational context: the underlying GET endpoint, required scopes (review_queue:read, luca:read), full_content data sensitivity, and that no idempotency key is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core metric and its interpretation in the first two sentences, followed by a compact operational metadata block. Nothing is wasted, though the metadata block is dense enough to slightly dilute the read.

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?

An output schema exists so return values need not be described, annotations carry the safety profile, and the description supplies endpoint, scopes, sensitivity, and workspace-override behavior. An agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both params are documented there, so the baseline is 3. The description adds the meaningful detail that these override the default workspace configured by the environment, which the schema's bare 'Optional Luca workspace id override' does not convey.

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?

States a precise verb and resource: reading median first-response time and its daily trend, with the outcome it informs (whether the queue is cleared fast enough). This clearly separates it from siblings like luca_review_queue_list or luca_review_queue_explain, but it never names or contrasts with any of them explicitly.

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 implies when you'd want the metric ('Tells you whether the queue is being cleared fast enough') and notes how to target a workspace, but gives no explicit when-to-use vs alternatives guidance and no exclusions relative to the many review_queue siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_safety_accountsCheck connected account safetyA
Read-onlyIdempotent

Read each connected channel account's safety status and 24-hour send count.

Luca operation: GET /api/account-safety Required scopes: safety:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds important context beyond annotations: the exact endpoint, required scopes (safety:read, luca:read), data sensitivity (redacted), and the note that idempotency is not required. This is useful operational detail for safe invocation.

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 front-loaded with the action and scope, then lists technical requirements in a compact, scannable form. Every line contributes necessary information without repetition.

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 operation with two optional parameters, an output schema, and rich annotations, the description covers the operation, required auth, sensitivity, idempotency, and workspace override. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both optional workspace parameters. The description adds only a minor clarification that the default workspace comes from the environment. With the schema doing the heavy lifting, a 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 and resource: 'Read each connected channel account's safety status and 24-hour send count.' This is a unique resource among the sibling tools, so an agent can identify the operation without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for overriding the workspace via workspaceId or workspaceSlug, but it does not state when to use this tool versus alternatives or any usage exclusions. Usage is implied by the read operation, which is minimally adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_triage_inboxTriage the review queueA
Read-onlyIdempotent

Return the coach's prioritized reply queue: pending drafts with lead context and, for the top items, why Luca drafted what it drafted. With a redacted OAuth grant, lead names and draft text can be blanked; describe them as unavailable rather than empty. Start every review session here, then act on an item with luca_approve_and_send, luca_draft_reply, or luca_review_queue_reject. Example: call with { explainTop: 3 } to get the queue plus explanations for the three most urgent drafts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax queue items to return (default 20).
explainTopNoHow many of the top items to attach a full explanation to (default 3).
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
provenanceNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, so safety is covered. The description adds genuinely non-obvious behavior: under a redacted OAuth grant, lead names and draft text can be blanked and should be reported as unavailable rather than empty — a real edge case an agent would otherwise mishandle.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the return value, then redaction caveat, then routing, then example. Every sentence carries information, though the trailing example restates what the explainTop schema entry already implies.

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?

An output schema exists, so return-format detail is not required here, and the description covers the redaction caveat plus workflow routing. Minor gap: no mention of how limit/pagination interact with the prioritized queue, which an agent triaging a long queue might need.

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 limit, explainTop, workspaceId, and workspaceSlug are already documented in the schema. The description only mildly reinforces this ('why Luca drafted what it drafted' and a sample { explainTop: 3 } call), so the baseline of 3 applies.

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?

States a specific verb and resource ('Return the coach's prioritized reply queue: pending drafts with lead context'), which is concrete enough that an agent knows exactly what comes back. It does not, however, address the near-duplicate siblings luca_review_queue_list and luca_review_queue_explain, so the distinction from those tools is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly prescribes the workflow: 'Start every review session here, then act on an item with luca_approve_and_send, luca_draft_reply, or luca_review_queue_reject.' This gives both the entry-point condition and named follow-on tools, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_usage_messagesRead this period's message countA
Read-onlyIdempotent

Read the message pool: used, allowed, and remaining for the period. Check this before starting work that drafts in bulk.

Luca operation: GET /api/usage/messages Required scopes: usage:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: required scopes (usage:read, luca:read), data sensitivity 'redacted', and that the default workspace comes from environment config. The line 'Does not require idempotency' is slightly loose wording against idempotentHint=true, but it refers to an idempotency key, not idempotency itself, so it is not a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the pre-flight usage tip are front-loaded in two tight sentences, followed by clearly labeled metadata lines (operation, scopes, sensitivity). The boilerplate is structured rather than rambling, though a few lines are administrative noise for a simple read.

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 zero-required-parameter read tool with an output schema, the description covers what is read, when to read it, auth scope, and workspace override behavior. Nothing essential is missing; the only soft spot is the ambiguous idempotency phrasing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description goes further by explaining that workspaceId/workspaceSlug override a default workspace 'configured by environment' and that either one may be used. That default-workspace behavior is not derivable from the schema strings alone, so it earns above baseline.

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 first sentence gives a specific verb and resource ('Read the message pool') and even enumerates the returned values (used, allowed, remaining) scoped to 'the period'. This is clearly a usage/quota read, distinguishable in spirit from the sibling luca_usage_spend, though the description never names that sibling explicitly to draw the contrast.

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 states a concrete usage condition: 'Check this before starting work that drafts in bulk,' which tells the agent when to call it. There is no when-not guidance or explicit alternative (e.g., use luca_usage_spend for cost rather than message counts), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_usage_spendRead this period's spendA
Read-onlyIdempotent

Read model spend for the period, rolled up by agent and by day, against the plan's cap.

Luca operation: GET /api/usage Required scopes: usage:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely useful context beyond annotations: the underlying endpoint (GET /api/usage), required scopes (usage:read, luca:read), 'data sensitivity: redacted', and that idempotency is not required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first sentence, then presents operation/scope metadata in compact lines. Slightly boilerplate-heavy (endpoint, scopes, idempotency) but each line carries machine-usable information rather than 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?

An output schema exists so return values need not be explained, and annotations cover the safety profile. The description adds auth scopes, redaction level, and workspace-override behavior; the only real omission is any explanation of the `since` window parameter.

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 67%; workspaceId and workspaceSlug are documented in the schema and the description clarifies they override the environment-configured default. However, the `query.since` parameter has no description in either the schema or the description, leaving the time-window control only vaguely implied by 'for the period'.

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?

States a specific verb (Read) and resource (model spend) with scope details: 'for the period, rolled up by agent and by day, against the plan's cap.' This is clearly distinguishable from the sibling luca_usage_messages, though the description never explicitly names or contrasts with it.

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?

Usage is implied (read spend for the current period) and there is one conditional instruction: override the default workspace with workspaceId/workspaceSlug. But there is no guidance on when to choose this over related tools like luca_usage_messages, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_voice_corpusRead the coach's voice corpusA
Read-onlyIdempotent

List the coach's voice corpus: the writing every draft is matched against. Entry id, source, channel, and age always come back; the writing itself is blanked for a redacted-tier key.

Luca operation: GET /api/voice Required scopes: voice:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-open-world, so the safety profile is covered. The description adds real behavior beyond them: which fields always come back and that the writing body is blanked for a redacted-tier key, plus the required scopes and data sensitivity. Pagination/result limits are unstated, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource and its meaning, then structured operation/scope/behavior lines. Most sentences earn their place; the 'Does not require idempotency' line is near-redundant against the idempotentHint annotation and slightly muddies rather than clarifies, costing it a point.

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?

An output schema exists, so return values need not be spelled out, and the description still notes the key returned fields and the redaction behavior. Scopes, sensitivity, auth, and workspace override are all covered; only result volume/pagination behavior for the corpus listing is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description goes slightly beyond the schema by explaining what the override actually does ('override the default workspace configured by environment'), which clarifies why an agent might supply either parameter, though it doesn't add format or precedence detail between id and slug.

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?

States a specific verb and resource ('List the coach's voice corpus') and explains what the corpus is ('the writing every draft is matched against'), plus the fields returned and the redaction rule. It does not distinguish itself from the sibling luca_voice_profile, which appears to be the nearest alternative, so it stops short of a 5.

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?

Usage is only implied by the definition of the corpus and by the note that workspaceId/workspaceSlug override the environment default. There is no explicit statement of when to call this versus luca_voice_profile or any other voice-related sibling, and no when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_voice_profileRead the coach's voice fingerprintA
Read-onlyIdempotent

Read a non-verbatim voice-fingerprint summary: version, example count, and last refresh. No corpus text.

Luca operation: GET /api/voice/profile Required scopes: voice:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive behavior, so the bar is lower; the description still adds real context by declaring the data sensitivity (redacted), the required scopes, and that no corpus text is exposed. It also clarifies that an idempotency key is not required, which usefully explains what the caller must supply beyond the annotation's idempotentHint.

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?

Front-loads what the tool reads and what it deliberately excludes ('No corpus text') in the first two clauses, then tucks the operational metadata (operation, scopes, workspace override) afterward. No redundant restatement of the title or schema; every sentence carries information.

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 annotations covering the safety profile and an output schema covering the return shape, the description only needs to disambiguate scope and inputs, which it does via the corpus exclusion and workspace-override note. It is nearly complete, missing only an explicit pointer to when a caller should choose this versus the corpus/profile siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: it explains that these parameters override a default workspace configured by the environment. That default-workspace semantics is not in the schema field text, so it genuinely extends parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read a non-verbatim voice-fingerprint summary') and names exactly what it returns: version, example count, last refresh. The phrase 'No corpus text' differentiates it from the sibling luca_voice_corpus without needing to open either schema, so an agent can pick the right one.

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 workspace override instruction ('Use workspaceId or workspaceSlug to override the default workspace configured by environment') gives useful invocation context, and 'No corpus text' hints at when to prefer it over luca_voice_corpus. But there is no explicit when-to-use / when-not-to-use statement or named alternative, so usage remains implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_deliveries_listList webhook deliveriesA
Read-onlyIdempotent

List webhook deliveries.

Luca operation: GET /api/webhook-subscriptions/deliveries Required scopes: webhooks:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new context beyond annotations: required scopes (webhooks:read, luca:read) and data sensitivity (redacted). The 'does not require idempotency' line is mildly confusing against idempotentHint=true but refers to the request contract, not the endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then compact operational metadata (operation, scopes, workspace override) each on its own line. Slight redundancy between 'Required scopes: webhooks:read' and 'Required OAuth scope: luca:read', but overall tight.

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?

An output schema exists, so return values need not be described, and the auth/scope requirements plus workspace override are covered. The remaining gap is pagination/filtering behavior for the list (limit semantics), which is minor given the schema and output schema.

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 67%; workspaceId and workspaceSlug already carry descriptions in the schema that the description merely restates. The description adds no syntax or behavior detail for the undocumented 'limit' parameter, so it does not compensate for the coverage gap. Baseline 3 fits when the schema does most of the work.

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?

States a specific verb+resource ('List webhook deliveries') and even names the underlying operation (GET /api/webhook-subscriptions/deliveries), which is unambiguous. It does not, however, explicitly distinguish this from nearby siblings like luca_webhooks_events_list or luca_webhooks_deliveries_replay.

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 only usage-like sentence is the workspace override instruction, which is really parameter guidance rather than when-to-use. There is no statement of when to prefer this over luca_webhooks_events_list or luca_webhooks_deliveries_replay, and no prerequisites or exclusions beyond the scope listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_deliveries_replayReplay a webhook deliveryA
Destructive

Replay one webhook delivery without changing the event id. Re-triggers the subscriber's downstream automation.

Luca operation: POST /api/webhook-subscriptions/deliveries/{deliveryId}/replay Required scopes: webhooks:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
deliveryIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Going well beyond the annotations (which only declare destructive/openWorld/not-idempotent), the description discloses required scopes (webhooks:write, luca:full), data sensitivity, that Idempotency-Key is mandatory with a server-generated fallback, the hard confirm:true gate with rejection on omission, and that workspace can be overridden. That is exactly the operational context an agent needs before a side-effecting call.

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 core effect is front-loaded in the first sentence, and the operational constraints (scopes, idempotency, confirm, workspace) follow in short, scannable lines. The Luca operation string and sensitivity label are boilerplate padding, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, side-effecting operation with an output schema already present, the description supplies everything needed to call it correctly: the effect, the mandatory confirm gate, idempotency handling, scope requirements, and workspace override. Nothing material is missing, and return values need not be described.

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 80%, so confirm, workspaceId, workspaceSlug, and idempotencyKey are already documented in the schema, including the server-generates-a-key behavior. The description largely repeats that content and adds nothing new about deliveryId or parameter format, so the baseline 3 applies.

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?

States a concrete verb+resource ('Replay one webhook delivery') and clarifies the effect ('Re-triggers the subscriber's downstream automation'), which is more than a restated title. It does not, however, explicitly distinguish itself from the close siblings luca_webhooks_events_replay and luca_webhooks_events_bulk_replay, leaving the agent to infer that this operates on a delivery rather than an event.

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?

Usage is only implied: the mention of Idempotency-Key for 'safe retries' hints at a retry/recovery scenario, and the confirm requirement signals a deliberate re-trigger. There is no explicit when-to-use, when-not-to-use, or pointer to events_replay / bulk_replay for other cases, so the agent must infer the selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_events_bulk_replayReplay a batch of webhook eventsA
Destructive

Bulk replay webhook events by type and time range. Re-triggers downstream automations at scale.

Luca operation: POST /api/webhook-subscriptions/events/replay Required scopes: webhooks:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true, readOnlyHint=false, and idempotentHint=false. The description adds required scopes (webhooks:write, luca:full), data sensitivity, idempotency-key behavior, the confirm rejection rule, and workspace override behavior. These additions are consistent with the annotations and useful for safe invocation.

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 core action, followed by compact operational constraints. It avoids filler and is appropriately sized, though some lines duplicate schema descriptions such as confirm and workspaceId.

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 destructive, scoped, idempotency-keyed bulk replay tool with an output schema, the description supplies the operation path, required scopes, side-effect warning, confirm requirement, and workspace override. Return values are correctly left to the output schema, but batching limits and result expectations are not elaborated beyond the schema.

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 high at 80%, establishing a baseline of 3. The description adds 'by type and time range' to explain the body's eventTypes and from/to fields, and mentions idempotencyKey/confirm/workspace override, but most of those are already documented in the schema. It adds little beyond the schema for limit or timestamp syntax.

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 first sentence names a specific verb (bulk replay), resource (webhook events), and scope (by type and time range), and 'Bulk' implicitly distinguishes it from single-event replay siblings. However, it does not explicitly name alternatives such as luca_webhooks_events_replay or luca_webhooks_deliveries_replay, so sibling differentiation is not fully explicit.

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 a clear use case: re-triggering downstream automations at scale over a type/time range. It also lists operational prerequisites, including required scopes, idempotency key, confirm, and workspace override. It does not state when-not to use it or explicitly compare it to sibling replay tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_events_listList webhook eventsA
Read-onlyIdempotent

List canonical webhook events of one type, newest first, in the delivered payload fields. Falls back to a documented sample payload when the workspace has none yet.

Luca operation: GET /api/webhook-events Required scopes: webhooks:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/destructive hints, so the bar is lower, and the description still adds real value: required scopes (webhooks:read, luca:read), data sensitivity 'redacted', and the fallback-to-sample-payload behavior when a workspace has no events. The 'does not require idempotency' line is slightly confusing next to idempotentHint=true, but describes idempotency keys, not repeatability, so it is not a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the tool's behavior in the first sentence, followed by compact structured metadata lines. No filler sentences; each line carries operational information an agent would otherwise have to infer.

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 an output schema present, return values need no explanation, and the description covers auth scopes, sensitivity, fallback behavior, and workspace override. An agent has everything needed to call this correctly against a large sibling set.

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% and the description adds meaning beyond it: workspaceId/workspaceSlug override the environment-configured default workspace, and 'of one type' explains why type is required. The limit parameter's range and default are left entirely to the schema.

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 opening sentence gives a specific verb (list), resource (canonical webhook events), scope (one type), ordering (newest first), and payload shape (delivered payload fields). It is clearly distinguishable from sibling luca_webhooks_deliveries_list and luca_webhooks_events_replay, though it never names those alternatives directly.

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 supplies operational context (the GET endpoint, required scopes, the no-events fallback to a sample payload) but never states when to choose this tool over the sibling deliveries/replay tools. Workspace override guidance is parameter help rather than usage guidance, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_events_replayReplay a webhook eventA
Destructive

Replay one canonical webhook event. Re-triggers subscribers' downstream automations.

Luca operation: POST /api/webhook-subscriptions/events/{eventId}/replay Required scopes: webhooks:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
eventIdYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds genuine value beyond them: required scopes (webhooks:write, luca:full), redacted data sensitivity, the Idempotency-Key requirement, and that omitting idempotencyKey triggers server generation. It does not contradict the idempotentHint=false annotation, since an Idempotency-Key makes retries safe without the operation itself being naturally idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and effect, then structured into operation/scope/idempotency/destructive/workspace lines that are easy to scan. Slightly redundant — the Idempotency-Key requirement is stated twice and the destructive wording largely duplicates the schema's confirm description — but no sentence is wasted.

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?

An output schema exists so return values need not be described, and the annotations cover the destructive/idempotent profile. Combined with the description's coverage of scopes, idempotency, confirmation, and workspace scoping, an agent has what it needs to call this correctly; only the nested body field semantics are left implicit.

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?

With 67% schema coverage, the description adds real meaning for several parameters: idempotencyKey (retry safety, server-generated fallback), confirm (mandatory gate for the destructive side effect), and workspaceId/workspaceSlug (default-workspace override). It does not explain the body.subscriptionId field, leaving one gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Replay one canonical webhook event') with a precise scope ('one'), which distinguishes it from the sibling luca_webhooks_events_bulk_replay and luca_webhooks_deliveries_replay without the agent opening any schema. The downstream effect ('Re-triggers subscribers' downstream automations') clarifies what the action actually 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?

Clear context for use — replaying a single event and re-triggering downstream automations — and it explains the workspace override mechanism. However, it never names the obvious alternative (bulk_replay) or states when to prefer this over it, so the agent must infer the alternative from the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_signature_guideRead the webhook signature guideA
Read-onlyIdempotent

Describe Luca webhook HMAC verification.

Luca operation: GET /api/webhook-subscriptions/signature-guide Required scopes: webhooks:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description adds useful context beyond that: the exact endpoint, the webhooks:read scope, OAuth scope luca:read, and that data sensitivity is redacted.

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?

Purpose is front-loaded in the first sentence, followed by terse operation/scope metadata lines. Nothing is redundant, though the stacked metadata lines read more like a spec dump than prose.

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?

An output schema exists so return values need not be described, and the description covers endpoint, scopes, idempotency, and workspace override. It is essentially complete for a read-only guide tool, missing only explicit competitive framing against the other webhook tools.

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 both params are optional, so the baseline is 3. The description goes slightly beyond the schema by explaining that workspaceId/workspaceSlug override 'the default workspace configured by environment', which the schema's 'Optional ... override' text does not fully convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: describe Luca webhook HMAC verification, with the concrete operation GET /api/webhook-subscriptions/signature-guide. It is clearly distinguishable from siblings like luca_webhooks_test_delivery or luca_webhooks_subscriptions_create, though it does not explicitly contrast itself with them.

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?

It gives operational context (required scopes, no idempotency requirement, workspace override) but never states when an agent should reach for this guide versus other webhook tools. Usage is implied by the tool name rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_subscriptions_createCreate a webhook subscriptionA
Destructive

Create an outbound webhook subscription.

Luca operation: POST /api/webhook-subscriptions Required scopes: webhooks:write Required OAuth scope: luca:full; data sensitivity: redacted Does not require idempotency. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readonly, destructive, non-idempotent, openWorld. The description adds material context beyond them: the confirm:true rejection behavior, required scopes, data sensitivity (redacted), and workspace override mechanics. It does not explain delivery behavior or rate limits, but the added operational detail is substantial.

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 core purpose is front-loaded, followed by compact labeled lines for operation, scopes, idempotency, side effect, and workspace. Nearly every line carries actionable information, with only 'Does not require idempotency' partially restating an annotation.

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 an output schema present, return values need not be documented, and the description covers auth, side-effect confirmation, and workspace scoping for a 4-param nested-object tool. It is nearly complete, though it omits what the created subscription returns or default workspace behavior context.

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 75% (near the 80% baseline) and the description of workspaceId/workspaceSlug as overrides duplicates the schema text. The confirm gate is meaningfully explained, but body fields such as targetUrl and eventTypes receive no description-level elaboration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create an outbound webhook subscription') that unambiguously distinguishes it from the sibling list/update/delete/test_delivery operations. An agent can identify the action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides operational prerequisites (required scope webhooks:write, OAuth scope luca:full, workspace override) and the confirm:true gate, which implies usage conditions. However, it never states when to choose this over siblings like luca_webhooks_test_delivery or luca_webhooks_subscriptions_update, and no explicit exclusion guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_subscriptions_deleteDelete a webhook subscriptionA
Destructive

Delete an outbound webhook subscription. Terminal, idempotent soft delete: delivery history stays queryable and the subscription can never be resurrected.

Luca operation: DELETE /api/webhook-subscriptions/{id} Required scopes: webhooks:write Required OAuth scope: luca:full; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description contradicts the annotations: it calls the operation an 'idempotent soft delete,' but the annotations set idempotentHint=false. This is a direct annotation contradiction, so the score is capped at 1 regardless of the otherwise useful details about soft deletion, delivery history retention, and required scopes.

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 purpose and key behavioral traits, then follows with operation metadata, scopes, and workspace guidance. It is mostly well structured, though the contradictory 'Does not require idempotency' line and some boilerplate metadata slightly reduce clarity.

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 that an output schema exists, the description need not explain return values, and it does cover auth scopes, data sensitivity, workspace overrides, and terminal soft-delete behavior. The idempotency contradiction is a notable flaw, but otherwise the description is fairly complete for a delete operation.

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 67%; the description adds meaningful context beyond the schema by stating that workspaceId or workspaceSlug override the default workspace configured by the environment. It also maps the id parameter through the DELETE /api/webhook-subscriptions/{id} operation.

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: 'Delete an outbound webhook subscription.' This clearly distinguishes it from sibling tools like luca_webhooks_subscriptions_list, create, and update.

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?

It provides implied usage context by stating the operation is terminal and the subscription can never be resurrected, which warns the agent to use it carefully. However, it does not explicitly state when to use this tool versus alternatives such as updating or disabling a subscription.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_subscriptions_listList webhook subscriptionsA
Read-onlyIdempotent

List outbound webhook subscriptions.

Luca operation: GET /api/webhook-subscriptions Required scopes: webhooks:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuine value beyond that with the OAuth scope requirements and the "data sensitivity: redacted" note, telling the agent the payload is sanitized. The "Does not require idempotency" line merely restates idempotentHint, so it is redundant rather than harmful.

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 key purpose is front-loaded in the first line, followed by a compact metadata block. Most lines earn their place, but "Does not require idempotency" is boilerplate that duplicates the annotation and could be dropped.

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?

An output schema exists, so return shape need not be described, and the description covers auth scopes, data sensitivity, and workspace scoping. The remaining gap is the behavior of the query parameters (pagination limit, includeHealth default of true), which an agent would need to invoke the tool efficiently.

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 67%, and the description reinforces the workspaceId/workspaceSlug override behavior by explaining that it overrides the environment-configured default, which is useful context the schema only hints at. However, the nested query parameters (limit, includeHealth) have no descriptions in the schema and no explanation in the description, leaving the includeHealth enum semantics undocumented.

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?

States a specific verb and resource ("List outbound webhook subscriptions") and grounds it in the concrete endpoint GET /api/webhook-subscriptions. It is clearly distinguishable from the mutating siblings (create/update/delete) by the name and verb, though it never explicitly separates itself from the read-only siblings like luca_webhooks_deliveries_list or luca_webhooks_events_list.

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?

It gives the required scopes (webhooks:read, luca:read) and explains the workspace override pattern, which implies the calling context. However, there is no explicit guidance on when to choose this over luca_webhooks_deliveries_list or luca_webhooks_events_list, which are the plausible confusable read tools in the sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_subscriptions_updateUpdate a webhook subscriptionA
Destructive

Update an outbound webhook subscription.

Luca operation: PATCH /api/webhook-subscriptions/{id} Required scopes: webhooks:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by naming required scopes, OAuth scope, data sensitivity, idempotency key handling, the need to pass confirm: true with rejection on omission, and workspace override behavior. These are concrete operational requirements an agent must follow, and they are not present in the annotations. There is no contradiction with the annotations, which already flag destructive and non-idempotent behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and endpoint, then proceeds through scopes, idempotency, destructive confirmation, and workspace override in clearly separated lines. Every sentence carries actionable information, though the format is somewhat list-like rather than fully integrated prose.

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 the tool's complexity, an output schema, and annotations, the description covers the critical safety and execution details: scopes, destructive confirmation, idempotency, and workspace override. It does not describe which subscription fields can be updated, but the input schema exposes the body structure, so the description is largely complete for safe invocation.

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 67%, so the baseline is 3. The description repeats schema-level information for confirm, idempotencyKey, workspaceId, and workspaceSlug without adding much new meaning, and it does not describe the nested body fields such as status, targetUrl, eventTypes, or consumerMetadata.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update an outbound webhook subscription.' The endpoint line further pins down the exact operation as a PATCH on a webhook subscription id. This clearly distinguishes it from sibling webhook tools for listing, creating, deleting, testing, or replaying deliveries/events.

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 provides operational prerequisites like required scopes and the destructive confirm requirement, which imply this is for updating an existing subscription. However, it does not explicitly say when to use this tool versus alternatives such as create, delete, or list. No when-not guidance is given, leaving usage to be inferred from the tool name and verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

luca_webhooks_test_deliverySend a test webhookA
Destructive

Queue a canonical test webhook event.

Luca operation: POST /api/webhook-subscriptions/test-delivery Required scopes: webhooks:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoThis tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events to an outside URL, or re-triggers downstream automations. Pass confirm: true to proceed; the call is rejected without it.
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false. The description adds substantial context beyond that: required OAuth scopes, data sensitivity, idempotency key behavior with server fallback, mandatory confirm:true, and workspace override semantics. This is exactly the kind of behavioral detail an agent needs for a destructive, open-world mutation.

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 tool action and then moves through operational constraints in a compact, structured way. Most lines earn their place, though a few pieces (e.g., destructive/confirm wording) partially duplicate the annotations and 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?

Given the annotations, rich schema, and existing output schema, the description covers the critical constraints for calling this destructive, open-world tool safely: confirm requirement, idempotency handling, scopes, and workspace override. It does not need to explain return values, and its remaining gap is a lack of detail about what the queued test event does downstream.

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 80%, so the schema already documents confirm, idempotencyKey, workspaceId, and workspaceSlug. The description mostly restates those schema descriptions rather than adding new parameter meaning, and it does not explain the required body shape or enum values beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a specific verb and resource: 'Queue a canonical test webhook event.' The Luca operation line adds the exact endpoint. This clearly distinguishes it from sibling webhook tools like deliveries_replay or events_replay.

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 implies this is for testing webhook delivery but does not explicitly say when to use it versus alternatives such as replaying real deliveries or events. Required scopes and confirmation are operational prerequisites, not usage guidance. No explicit when-not conditions are provided.

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. 203 tool updatesv0.4.0
    • First observedluca_analytics_benchmark_consent
    • First observedluca_analytics_benchmarks
    • First observedluca_analytics_call_intelligence
    • First observedluca_analytics_call_intelligence_calls
    • First observedluca_analytics_content_attribution
    • First observedluca_analytics_content_performance
    • First observedluca_analytics_crm_sync_health
    • First observedluca_analytics_deep_dive
    • First observedluca_analytics_forecast
    • First observedluca_analytics_funnel
    • First observedluca_analytics_ghosted_leads
    • First observedluca_analytics_insights
    • First observedluca_analytics_lead_score
    • First observedluca_analytics_learning_insights
    • First observedluca_analytics_loss_reasons
    • First observedluca_analytics_magic_monday
    • First observedluca_analytics_objection_drilldown
    • First observedluca_analytics_objections
    • First observedluca_analytics_recommendations
    • First observedluca_analytics_revenue
    • First observedluca_analytics_rollup
    • First observedluca_analytics_speed_impact
    • First observedluca_analytics_topic_performance
    • First observedluca_analytics_trends
    • First observedluca_analytics_trust_score
    • First observedluca_approve_and_send
    • First observedluca_book_call
    • First observedluca_bookings_availability
    • First observedluca_bookings_brief
    • First observedluca_bookings_calendars_list
    • First observedluca_bookings_calendars_remove
    • First observedluca_bookings_calendars_select
    • First observedluca_bookings_cancel
    • First observedluca_bookings_create
    • First observedluca_bookings_get
    • First observedluca_bookings_guest_links_create
    • First observedluca_bookings_guest_links_revoke
    • First observedluca_bookings_lifecycle_attention
    • First observedluca_bookings_lifecycle_resolution
    • First observedluca_bookings_list
    • First observedluca_bookings_managed_availability
    • First observedluca_bookings_needs_outcome
    • First observedluca_bookings_outcome_get
    • First observedluca_bookings_outcome_history
    • First observedluca_bookings_outcome_reasons_create
    • First observedluca_bookings_outcome_reasons_list
    • First observedluca_bookings_outcome_reasons_update
    • First observedluca_bookings_outcome_record
    • First observedluca_bookings_provider_sync_retry
    • First observedluca_bookings_providers_get
    • First observedluca_bookings_providers_list
    • First observedluca_bookings_types_attendees
    • First observedluca_bookings_types_attendees_add
    • First observedluca_bookings_types_attendees_remove
    • First observedluca_bookings_types_create
    • First observedluca_bookings_types_delete
    • First observedluca_bookings_types_list
    • First observedluca_bookings_types_schedule
    • First observedluca_bookings_types_schedule_replace
    • First observedluca_bookings_types_update
    • First observedluca_bookings_update
    • First observedluca_broadcasts_approve
    • First observedluca_broadcasts_cancel
    • First observedluca_broadcasts_create
    • First observedluca_broadcasts_get
    • First observedluca_broadcasts_launch
    • First observedluca_broadcasts_list
    • First observedluca_broadcasts_pause
    • First observedluca_broadcasts_preview
    • First observedluca_broadcasts_retry
    • First observedluca_cadences_pause
    • First observedluca_cadences_rescue_start
    • First observedluca_call_events_backfill
    • First observedluca_call_events_by_booking
    • First observedluca_call_events_by_lead
    • First observedluca_call_events_feedback
    • First observedluca_call_events_get
    • First observedluca_call_events_needing_feedback
    • First observedluca_call_events_push_to_crm
    • First observedluca_call_events_summary_generate
    • First observedluca_call_events_summary_replace
    • First observedluca_call_events_undo_outcome
    • First observedluca_campaigns_analytics
    • First observedluca_campaigns_comment_events_list
    • First observedluca_campaigns_comment_simulation_suite_run
    • First observedluca_campaigns_create
    • First observedluca_campaigns_draft_update
    • First observedluca_campaigns_duplicate
    • First observedluca_campaigns_enroll
    • First observedluca_campaigns_enrollments_list
    • First observedluca_campaigns_enrollments_timeline
    • First observedluca_campaigns_generate
    • First observedluca_campaigns_get
    • First observedluca_campaigns_list
    • First observedluca_campaigns_provider_capabilities
    • First observedluca_campaigns_publish
    • First observedluca_campaigns_set_status
    • First observedluca_campaigns_simulations_create
    • First observedluca_campaigns_simulations_get
    • First observedluca_campaigns_simulations_list
    • First observedluca_campaigns_versions_list
    • First observedluca_capabilities_get
    • First observedluca_channels_catalog
    • First observedluca_channels_features
    • First observedluca_channels_get
    • First observedluca_channels_list
    • First observedluca_close_call_loop
    • First observedluca_coach_audit_log
    • First observedluca_coach_niche
    • First observedluca_coach_niche_profile
    • First observedluca_coach_objection_playbook
    • First observedluca_coach_post_call_crm_mapping
    • First observedluca_coach_post_call_deal_sync
    • First observedluca_coach_post_call_settings
    • First observedluca_coach_profile
    • First observedluca_conversations_get
    • First observedluca_conversations_list
    • First observedluca_conversations_messages
    • First observedluca_conversations_partial_send_retry
    • First observedluca_conversations_send
    • First observedluca_draft_reply
    • First observedluca_find_leads
    • First observedluca_flag_for_human
    • First observedluca_insights_dismiss
    • First observedluca_insights_mark_actioned
    • First observedluca_insights_mark_read
    • First observedluca_insights_settings_get
    • First observedluca_insights_settings_update
    • First observedluca_insights_unread_count
    • First observedluca_integrations_connectors_list
    • First observedluca_integrations_crm_connections_create
    • First observedluca_integrations_crm_connections_health
    • First observedluca_integrations_crm_connections_list
    • First observedluca_integrations_crm_connections_schema
    • First observedluca_integrations_crm_connections_webhooks_setup
    • First observedluca_integrations_crm_mappings_confirm
    • First observedluca_integrations_crm_mappings_suggest
    • First observedluca_integrations_crm_oauth_url
    • First observedluca_integrations_crm_sync_runs_create
    • First observedluca_integrations_crm_sync_runs_list
    • First observedluca_integrations_events_list
    • First observedluca_knowledge_approve_suggestion
    • First observedluca_knowledge_reject_suggestion
    • First observedluca_knowledge_sources_disconnect
    • First observedluca_knowledge_sources_list
    • First observedluca_knowledge_sources_sync
    • First observedluca_knowledge_suggestions
    • First observedluca_leads_consents_grant
    • First observedluca_leads_consents_revoke
    • First observedluca_leads_create
    • First observedluca_leads_draft
    • First observedluca_leads_explain
    • First observedluca_leads_field_definitions_list
    • First observedluca_leads_field_definitions_upsert
    • First observedluca_leads_get
    • First observedluca_leads_identities_attach
    • First observedluca_leads_import_apply
    • First observedluca_leads_import_preview
    • First observedluca_leads_list
    • First observedluca_leads_notes_add
    • First observedluca_leads_notes_delete
    • First observedluca_leads_update
    • First observedluca_learning_ab_tests_get
    • First observedluca_learning_ab_tests_list
    • First observedluca_learning_framework_performance
    • First observedluca_learning_panel
    • First observedluca_learning_proposals_dismiss
    • First observedluca_learning_proposals_list
    • First observedluca_memory_list
    • First observedluca_memory_set_archived
    • First observedluca_memory_update
    • First observedluca_morning_report
    • First observedluca_pause_cadence
    • First observedluca_post_call_queue
    • First observedluca_reports_morning
    • First observedluca_reports_scorecard
    • First observedluca_reschedule_call
    • First observedluca_rescue_silent_leads
    • First observedluca_review_queue_approve
    • First observedluca_review_queue_explain
    • First observedluca_review_queue_list
    • First observedluca_review_queue_media_retry
    • First observedluca_review_queue_objection_variant
    • First observedluca_review_queue_reject
    • First observedluca_review_queue_restore
    • First observedluca_review_queue_sla
    • First observedluca_safety_accounts
    • First observedluca_triage_inbox
    • First observedluca_usage_messages
    • First observedluca_usage_spend
    • First observedluca_voice_corpus
    • First observedluca_voice_profile
    • First observedluca_webhooks_deliveries_list
    • First observedluca_webhooks_deliveries_replay
    • First observedluca_webhooks_events_bulk_replay
    • First observedluca_webhooks_events_list
    • First observedluca_webhooks_events_replay
    • First observedluca_webhooks_signature_guide
    • First observedluca_webhooks_subscriptions_create
    • First observedluca_webhooks_subscriptions_delete
    • First observedluca_webhooks_subscriptions_list
    • First observedluca_webhooks_subscriptions_update
    • First observedluca_webhooks_test_delivery

TDQS

B3.3/5.0

Scored across 203 tools

Disambiguation2/5

There are effectively two overlapping layers: a granular raw-API surface (luca_review_queue_approve, luca_leads_draft, luca_cadences_pause, luca_bookings_outcome_record, luca_reports_morning) and an agent-friendly wrapper layer that re-implements the same actions (luca_approve_and_send, luca_draft_reply, luca_pause_cadence, luca_close_call_loop, luca_morning_report). An agent faces near-duplicate pairs like luca_leads_draft vs luca_draft_reply, luca_pause_cadence vs luca_cadences_pause, and luca_review_queue_list vs luca_triage_inbox with no clear rule for which to pick. Many individual domains (bookings, campaigns, review queue) also have adjacent tools whose boundaries blur.

Naming Consistency3/5

The bulk of tools follow a clean luca_<resource>_<verb> pattern (luca_leads_list, luca_bookings_types_create, luca_campaigns_publish), but the wrapper/curated set breaks it with verb-first or noun-phrase names (luca_draft_reply, luca_approve_and_send, luca_book_call, luca_triage_inbox, luca_analytics_magic_monday). Everything is snake_case and readable, but the mixed verb styles across the two layers reduce predictability.

Tool Count1/5

203 tools is an extreme mismatch for any single MCP surface, well beyond the 25+ range that already signals overload. The count is inflated by two parallel layers exposing the same operations plus many thin read-only analytics endpoints, making the set hard to navigate and select from.

Completeness4/5

Coverage is genuinely broad: leads, conversations, bookings (types, schedules, providers, outcomes), campaigns, broadcasts, webhooks, integrations, analytics, voice, memory, knowledge, and learning all have read plus create/update/delete operations. A few lifecycle actions are intentionally app-only (connecting channels, creating knowledge sources, CRM opt-in), which are reasonable gaps an agent can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that turns an AI lead management system into a conversational tool any MCP-compatible AI client can control directly, with tools, resources, and prompts for lead classification, tracking, and weekly reviews.
    1
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    MCP server for the cig.chat API that lets you connect Claude, Cursor, or any MCP client to your cig.chat bot to manage subscribers, tags, flows, WhatsApp templates, broadcasts, and shop operations in plain language.
    256
    334 npm
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    Outbound sales agent for Claude Code. MCP server handles prospect list building, dedup, quotas, and structured rejection feedback, while the plugin runs per-prospect research, email writing, Gmail sending, and reply tracking. Open source, self-hostable.
    55
    3
    -