UGC Agent
Server Details
Give your agents the best data to grow your UGC program. Search 28,000+ Instagram and TikTok UGC creators with public emails, source new creators from a brief, see which of 500+ brands run UGC and who makes it for them, track creator videos, and manage outreach in a creator CRM. Sign in with OAuth (no API key needed); MCP access needs a Premium, Ultra or Enterprise plan, and every plan starts with a 3-day trial. Docs: https://ugcagent.app/features/ugc-agent-mcp/
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 70 tools
Descriptions work hard to separate look-alikes (list_leads vs list_crm_leads, search_ugc_database vs run_ugc_agent, save_creator_to_crm vs unlock_ugc_database_creators), but real overlap remains across sourcing paths (discover_creators, find_brand_creators, analyze_seed_creators, run_ugc_agent, search_ugc_database) and across automation writes (update_automation vs update_trend_research_automation are near-duplicates, plus create_lead_automation/create_trend_research_automation). An agent must read long prose to pick correctly, which is a sign of surface-level ambiguity rather than inherent distinctness.
The overwhelming majority follow consistent snake_case verb_noun (list_*, get_*, create_*, update_*, delete_*, remove_*), including preview/confirm pairs. Minor deviations: compound utility names (manage_crm_notes_and_tasks, manage_tracking_collection, manage_crm_list) and verb choices like ideate_ugc_content or test_automation_delivery.
70 tools is far beyond a comfortable agent-facing surface; even though tools cluster into coherent sub-domains (sourcing, CRM, tracking, automations, applications, chats, brands), discovering and correctly sequencing them is heavy. Several adjacent tools could be collapsed or mode-gated (e.g. the four automation-create/update tools, export_csv vs export_crm_csv).
Coverage is unusually thorough: full CRUD-ish lifecycle for leads, CRM, notes/tasks, lists, tracking, collections, applications, automations, chats, plus exports, outreach integrations and a destructive-action preview/confirm pattern throughout. Gaps are minor and mostly product-imposed (e.g. no manual CRM lead creation outside unlock/save, integration connection only in the app, no explicit brand-program edit tools).
Available Tools
70 toolsanalyze_creator_contentAnalyze Creator ContentARead-onlyIdempotentInspect
Fetch recent posts for kept creators, compute per-creator virality (max views relative to followers), rank them, and return each creator's top videos with captions and hooks — transcribed from the actual video openings when possible, else caption openings. Use for questions like 'which of my creators have the most viral videos and what hooks do they use'. Results persist on the leads for 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| handles | No | Specific kept-lead handles to analyze. Omit for all kept leads (capped at 25). | |
| top_videos | No | Top posts to return per creator, with captions and hooks (default 3). | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| posts_per_creator | No | Recent posts per creator to include in the stats (default 12). | |
| analyze_video_hooks | No | Transcribe the actual video openings of the top creators' top posts (default true). Set false for a faster caption-only pass. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, idempotent, openWorld), so the description's job is to add context, and it does: it discloses the transcription fallback logic ('actual video openings when possible, else caption openings') and the caching side effect ('results persist on the leads for 24h'). The persistence note is a state change not implied by readOnlyHint, but it is a benign caching side effect of an analysis tool rather than an outright contradiction of the read-only claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core computation, then the usage question, then the persistence caveat. No restatement of the name or title, and every clause carries 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, zero-required, no-output-schema tool, the description adequately explains what comes back (ranked per-creator virality plus top videos with captions and hooks) and when to reach for it. It omits prerequisite state (that kept leads must already exist) and any cost/latency warning for the transcription path, small but real gaps for a tool that can transcribe video.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already carries its own documentation (defaults, caps, enum meanings, uid/token fallbacks), which sets the baseline at 3. The description adds meaning only at the aggregate level — it explains the virality formula and what 'top videos' contain — without illuminating any individual parameter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific chain of operations (fetch posts → compute virality as max views vs followers → rank → return top videos with captions/hooks) on a specific resource set (kept creators). The 'kept creators' scope and the virality metric readily separate it from siblings such as analyze_seed_creators, find_viral_trends, and discover_creators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit usage trigger with a natural-language example ('which of my creators have the most viral videos and what hooks do they use'), which is stronger than implied usage. It stops short of naming alternatives or exclusions — there is no statement like 'use analyze_seed_creators for non-kept creators' — so it lands at clear-context-but-no-exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_seed_creatorsAnalyze Seed CreatorsBIdempotentInspect
Analyze example Instagram creators to derive criteria before sourcing similar creators.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| handles | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, idempotentHint=true and non-destructive, so the safety profile is covered. The description adds nothing beyond them: it doesn't say that results depend on stored/override preferences, that analyzing is a networked, potentially slow operation, or what the produced 'criteria' look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no waste, but it is thin enough that it omits the return value and statefulness the tool actually has.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 6-parameter tool with durable conversation state, preference modes and no output schema, yet the description says nothing about what it returns (derived criteria? a list_id?) or how conversation_id affects follow-ups. For this complexity the description is materially incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents uid, bearer_token, conversation_id, preferences_mode and agent_preferences. The description only hints that the input is a set of example creators, adding no detail on handles limits or preference modes; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Analyze) and resource (example Instagram creators) plus the intent of the output (derive criteria). It implicitly distinguishes itself from discover_creators by positioning itself as the upstream 'seed' step, but never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'before sourcing similar creators' gives a clear sequencing cue that tells the agent this is a pre-sourcing step rather than the sourcing tool itself. No explicit exclusions or named alternatives, which keeps it at 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.
create_lead_automationCreate Lead AutomationAIdempotentInspect
Collect explicit values one missing field at a time in the returned order: criteria or Agent Preferences, lead_count, frequency, conditional weekday/day_of_month, exact daily_time, timezone, and an explicit recipient/account-email choice. Resolve 'local' or a city to a canonical IANA timezone before supplying timezone; never pass the literal 'local'. Once complete, creation writes immediately; the first run is scheduled for the returned next_run_at.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| weekday | No | ISO weekday (1=Monday through 7=Sunday), required for weekly and biweekly. | |
| criteria | No | Creator matching criteria, for example: Creators matching beauty skincare UGC in the UK. | |
| timezone | No | Canonical IANA timezone for the schedule, resolved from the user's explicit answer; never the literal 'local'. | |
| frequency | No | Explicit recurrence frequency; no default. | |
| daily_time | No | Requested local delivery time in HH:mm, e.g. 09:30. | |
| lead_count | No | Leads per scheduled run, from 1 to 2,000. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| day_of_month | No | Monthly day, 1-28 or "last". | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| recipient_email | No | Explicit delivery email. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| use_account_email | No | Resolve the recipient from the authenticated Firebase profile email. | |
| use_agent_preferences | No | Use the authenticated account's stored Agent Preferences as the criteria. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides essential behavioral context not found in the annotations or schema, specifically detailing the field collection order, the immediate write/scheduled run sequence, and the mandatory timezone canonicalization logic (never pass 'local').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but highly effective. Every sentence contributes critical operational instruction, including constraints on timezone handling and the execution timeline, demonstrating high informational efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is extremely complete regarding the implementation constraints. It handles the interaction pattern (multi-turn), system requirements (IANA conversion), and lifecycle of the object (immediate write/scheduled run) without needing to describe the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 100%, the baseline is high. The description adds value by dictating the conversational sequence of parameters (e.g., 'criteria or Agent Preferences' comes first, followed by 'lead_count'). It also adds the crucial constraint regarding timezone resolution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool clearly defines its function: creating a lead automation. Furthermore, the description goes beyond just the outcome by defining the *process* of data collection (collect explicit values one missing field at a time).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While it doesn't explicitly name sibling tools to contrast against, it provides detailed instructions on the mandatory multi-turn conversational flow required to use this tool. This conversational guidance helps the agent decide when this tool is necessary versus a simple configuration tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_trend_research_automationCreate Trend Research AutomationAIdempotentInspect
Collect explicit values one missing field at a time in the returned order: topic, platform, frequency, conditional weekday/day_of_month, exact daily_time, timezone, and an explicit recipient/account-email choice. Resolve 'local' or a city to a canonical IANA timezone before supplying timezone; never pass the literal 'local'. Once complete, creation writes immediately; the first run is scheduled for the returned next_run_at. Region Global is fixed product behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| topic | No | ||
| weekday | No | ||
| platform | No | ||
| timezone | No | Canonical IANA timezone for the schedule, resolved from the user's explicit answer; never the literal 'local'. | |
| frequency | No | ||
| daily_time | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| day_of_month | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| recipient_email | No | ||
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| use_account_email | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering safety (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description adds real behavioral context the annotations cannot: creation commits immediately with no confirmation step, the first run is scheduled at the returned next_run_at rather than running now, and Region Global is fixed product behavior. It still omits what happens on duplicate/repeat calls (idempotency semantics) and whether the automation is active on creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the elicitation order, then the timezone constraint, then the write/schedule consequence. Dense and mostly waste-free, though sentence one is a long comma chain and the trailing "Region Global is fixed product behavior" reads as an appended caveat rather than integrated guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, zero-required mutation tool with no output schema, the description covers the happy-path elicitation well but leaves gaps: it references "the returned order" and "the returned next_run_at" without explaining what the response contains or how follow-ups should reuse it. It also never explains what the automation actually does once created or how the returned record maps to pause_automation/run_automation_now.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 43%, so the description must compensate, and it does for the critical fields: it establishes ordering, marks weekday/day_of_month as conditional on frequency, requires an exact-format daily_time, mandates a canonical IANA timezone resolved from 'local'/a city (explicitly forbidding the literal 'local'), and frames recipient_email vs. account email as a choice. The auth/session params (uid, bearer_token, conversation_id, preferences_mode, agent_preferences) receive no mention, which the description leaves entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The body never states plainly what the tool creates — the closest is "creation writes immediately", which implies a persisted resource but never says this schedules a recurring trend-research report on Instagram/TikTok delivered to a recipient. The concrete values listed (topic, platform, frequency, daily_time, recipient) let an agent infer the artifact's shape, but the purpose comes largely from the name/title, not the description. It also does not distinguish itself from create_lead_automation or update_trend_research_automation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a strong interaction protocol (collect one missing field at a time, in the returned order), which is genuine usage guidance for the create flow. However there is no guidance on when to prefer update_trend_research_automation over creating a new automation, no prerequisites, and no exclusions. Usage is implied by the elicitation sequence rather than stated as when/when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_automationDelete AutomationADestructiveIdempotentInspect
Destructive and idempotent soft-delete. Only call after preview_automation_deletion was shown and the user explicitly confirmed in a new turn. Requires the current confirmation_token; stale tokens are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| confirmation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the description earns credit for going further: it discloses that deletion is a *soft* delete (data not hard-removed), that a token gates the call, and that stale tokens are rejected. It stops short of saying whether the soft-delete can be restored or what happens to the automation's run history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the most decision-critical fact (destructive soft-delete) is front-loaded before the preconditions. Every clause carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the safety contract (preview → confirm → token) that an agent most needs. It is slightly incomplete on post-conditions — no statement of what the caller sees on success or what happens to dependent runs — and notably the schema marks zero parameters required despite the description saying the token is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so the schema carries most parameter meaning, but the description adds real semantics for confirmation_token — that it must be current and that stale values are rejected — which the schema's bare type declaration does not convey. automation_id remains undescribed in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the operation type precisely ("Destructive and idempotent soft-delete") and names the sibling tool it pairs with (preview_automation_deletion), which separates it from update_automation and pause_automation. The resource (an automation) is only implied via the tool name rather than stated in the description text, which keeps it just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit gating: only call after preview_automation_deletion was shown AND the user explicitly confirmed in a new turn. It also names the precondition artifact (current confirmation_token) and the failure mode (stale tokens rejected), leaving nothing about when-to-call to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_chatDelete ChatADestructiveIdempotentInspect
Permanently delete one of the user's chats: stops any search running in it, revokes its share links and removes its results, then deletes the transcript. Irreversible. The first call returns a preview and confirmation_token; call again with the token only after the user confirms in a later turn.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| chat_id | No | The chat_id from list_chats. | |
| list_id | No | Or the list_id run_ugc_agent returned, for the chat that search created. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial detail beyond them: it stops a running search, revokes share links, removes results, deletes the transcript, and is irreversible. It also explains the preview/confirmation-token workflow, which is important behavioral context for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero waste. The irreversible consequence and confirmation flow are front-loaded before the procedural detail, making the definition easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers consequences, irreversibility, and the required two-step confirmation. Combined with the fully documented input schema and destructive annotations, an agent has enough information to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters, including the confirmation_token workflow. The description reinforces that workflow but does not add meaning beyond the schema for uid, chat_id, list_id, or bearer_token, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource, 'Permanently delete one of the user's chats,' and immediately lists the exact side effects. It distinguishes deletion from siblings like get_chat, rename_chat, and reset_conversation by emphasizing permanence and transcript removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear procedural guidance for the two-step confirmation flow: first call returns a preview and token, second call happens only after user confirmation. It does not explicitly name alternatives such as get_chat for inspection or preview_automation_deletion, but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_creatorsDiscover CreatorsAInspect
Search Instagram + TikTok for creator candidates and queue them for enrichment. Pass many varied queries per call; each query is searched on its own (they are never concatenated or replaced with a fixed niche taxonomy). Use similar_to to snowball off already-qualified Instagram handles.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| queries | No | ||
| similar_to | No | ||
| max_results | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, idempotentHint=false, and destructiveHint=false, but the description adds meaningful behavior by saying candidates are queued for enrichment. It also clarifies that queries are searched independently and are never concatenated or replaced with a fixed taxonomy. It omits details about auth, rate limits, or duplicate handling, but the annotations lower the disclosure burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and front-loads the core action before moving to query usage and similar_to guidance. Every sentence contributes useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter open-world tool with no output schema, the description covers the main search-and-queue workflow and the two most important query parameters. However, it does not explain max_results behavior, return structure or list_id handling, or how this differs from sibling discovery/search tools, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63%, so several parameters are already documented in the schema, including uid, bearer_token, conversation_id, and preferences_mode. The description adds real meaning for queries and similar_to by explaining independent query execution and snowballing, but it does not cover max_results or the preference parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search Instagram + TikTok for creator candidates and queue them for enrichment. It is clear what the tool does, but it does not explicitly distinguish itself from nearby siblings such as find_brand_creators or search_ugc_database.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: pass many varied queries per call because each query is searched independently, and use similar_to to snowball off already-qualified Instagram handles. It does not explicitly state when to choose this tool over alternatives, so it falls short of the highest level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_application_responseDraft Application ResponseARead-onlyIdempotentInspect
Draft an accept, reject or shortlist reply for one applicant. Returns text only; nothing is sent and the status does not change. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| decision | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| application_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, and the description reinforces this with 'returns text only; nothing is sent'. It adds genuinely new context beyond annotations: the cost ('Free') and the fact that the output is unstructured text with no persisted side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, all front-loaded: what it does, what it does not do, and what it costs. No filler, nothing repeated from the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The absence of an output schema is offset by 'Returns text only', and side effects are explicitly ruled out, which covers the essentials for a 4-param, 2-required tool. Minor gaps remain: nothing about the tone/format of the drafted reply or whether the draft is retrievable afterwards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; the two auth-related params (uid, bearer_token) are documented in the schema, but application_id and decision have no schema descriptions. The description echoes the decision enum values in prose but adds nothing about application_id or the auth fallback semantics, so it does not compensate for the coverage gap. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (draft), a specific resource (a reply for one applicant), and enumerates the three possible decisions. The clause 'nothing is sent and the status does not change' separates it from status-mutating siblings like update_application_status without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'nothing is sent and the status does not change' makes the use case (preview a reply before committing) and the boundary against update_application_status clear. It stops short of explicitly naming that sibling or stating when not to use it, 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.
draft_creator_outreachDraft Creator OutreachARead-onlyIdempotentInspect
Draft short, direct outbound copy (DM and/or email) for contacting a creator. Keeps it concise and never invents pay, proof, clients, or results. Use it after keeping leads to write personalized outreach.
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | One next step, e.g. 'Open to seeing the brief and rates?' | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| channel | No | Which format to draft. Use 'both' when the user asks for DMs and emails. | |
| brand_name | No | Brand, product, agency, or program name. | |
| proof_point | No | One credible proof point supplied by the user. Omit vague or unverified claims. | |
| sender_name | No | Sender's first name or full name, if known. | |
| sender_role | No | Sender role/title, e.g. Head of Creators or Growth Lead. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| compensation | No | Pay/bonus details the user provided. Omit if unknown; never invent rates. | |
| collaboration | No | The concrete creator work, e.g. '10-20 short TikTok videos per week' or 'short UGC product demos'. | |
| recipient_name | No | Creator first name, or omit to use a {First Name} placeholder. | |
| company_context | No | One short factual sentence about what the brand/product/program does. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| personalization | No | One specific reason this creator is a fit. Keep it short. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides a vital behavioral guardrail that annotations cannot cover: the prohibition against fabricating information ('never invents pay, proof, clients, or results'). This ensures the AI uses the tool responsibly and maintains data integrity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly efficient, using only two sentences. It front-loads the primary function and then uses the second sentence to establish necessary context and strict limitations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a text generation tool, the input structure is highly complete. The description successfully sets the scope and limitations of the draft. A score of 4 is given only because it lacks an explicit output schema, which would be helpful for confirming the format of the generated copy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since the input schema has 100% coverage, the description does not need to define parameters beyond their existing documentation. It only adds semantic value by implying the overall output style must be 'short' and 'direct'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The purpose is extremely clear: to draft short, direct outbound copy specifically for creators. It distinguishes itself from other tools by focusing on drafting/copy generation, rather than sending or analyzing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear sequential instructions: 'Use it after keeping leads to write personalized outreach.' Furthermore, the critical constraint, 'never invents pay, proof, clients, or results,' defines a strict behavioral boundary for when the tool is appropriate to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_ugc_scriptDraft UGC ScriptARead-onlyIdempotentInspect
Draft a timed short-form UGC video script: hook (0-3s), body scenes with time ranges + shot directions + draft voiceover + on-screen text, CTA, caption, and hashtags. The voiceover lines are drafts — polish them into natural spoken language while keeping the timing structure. Never add claims or results the user didn't provide.
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | The closing call to action, if the user specified one. | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| tone | No | Voice/tone, e.g. 'funny and self-deprecating'. | |
| concept | Yes | The video concept/angle to script, e.g. an idea title from ideate_ugc_content. | |
| product | No | The product/service the video features. | |
| audience | No | Who the video targets. | |
| platform | No | ||
| format_id | No | Which proven format to structure the script with (default problem-solution). | |
| brand_name | No | ||
| pain_point | No | The single pain point this video addresses. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| duration_seconds | No | Target video length (default 30). | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description adds real behavioral content: voiceover lines are explicitly drafts to be polished, and a hard constraint 'never add claims or results the user didn't provide' guards against fabrication. It also discloses the shape of what gets produced. It doesn't disclose that the call seeds durable conversation state (implied only by schema fields).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, with the output structure front-loaded and the two most actionable rules (polish voiceover, never invent claims) placed last for emphasis. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 15 parameters and no output schema, the description usefully compensates by enumerating the return structure section by section, and it states the non-negotiable constraint. Minor gaps: no mention of the platform/format defaults that shape the script, and no note on the conversation_id/uid continuity that the schema treats as significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 87%, so the schema already carries parameter meaning; description text adds no syntax, defaults, or format guidance beyond the implicit link between output sections and the cta/tone/concept inputs. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Draft') plus a precisely enumerated deliverable: hook with timing, body scenes with time ranges, shot directions, voiceover, on-screen text, CTA, caption, hashtags. That distinguishes it clearly from research/analysis siblings, but no sibling is named, so the contrast with ideate_ugc_content (referenced only inside the schema) 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.
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 downstream step after concept generation, and the schema's concept description ('an idea title from ideate_ugc_content') hints at the chain. However, the description itself never says when to use this versus ideating or running the UGC agent, and gives no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enrich_and_scoreEnrich And ScoreAInspect
Enrich queued candidates or specific Instagram handles, then keep only qualified on-niche creators with emails (unless the user's accept-no-email preference or an explicit 'emails optional' request relaxed the email requirement). Unless min_followers/max_followers are explicitly set, every mode uses the default micro-UGC band of 100–9999 followers with no automatic widening. The response includes applied_follower_bounds and follower_policy. Set exclude_agency_emails when the user asks for direct/personal creator emails or no agency/management/talent emails.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| niche | No | ||
| brands | No | Brand-collab mode: brand names the user wants past collaborators of (same names passed to find_brand_creators). Only creators with a VERIFIED recent brand mention are kept; follower band still defaults to 100–9999 unless explicitly overridden. | |
| handles | No | ||
| batch_size | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| max_followers | No | Maximum follower count to keep. Defaults to 9999 when omitted, including in brand-collab and seed-lookalike modes. | |
| min_followers | No | Minimum follower count to keep. Defaults to 100 when omitted. | |
| exclude_niches | No | Verticals the user ruled OUT ('any niche but photography' -> ['photography']). Creators whose primary content is an excluded vertical are dropped. Never put an excluded vertical in `niche`. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| exclude_locations | No | Markets the user ruled OUT, as ISO country codes ('any country except India' -> ['IN']). Creators whose public profile places them there are dropped. | |
| exclude_agency_emails | No | Set true only when the user asks to filter out agency/management/talent emails or wants direct/personal creator emails. This drops strong agency-looking email domains but keeps Gmail/Outlook/etc. and creator-owned custom domains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false, openWorld=true and destructive=false, so the bar is lower, and the description still adds real behavior: follower bounds never auto-widen, the effective band is echoed back via applied_follower_bounds and follower_policy, and unqualified creators are dropped rather than returned. It does not disclose whether enrichment consumes credits or how queue state is mutated, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first clause, and the three sentences each carry distinct policy (qualification, follower band, agency email toggle). It is appropriately sized for a 14-parameter tool, though the parenthetical condition on email relaxation is dense enough to slow parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, non-idempotent, open-world tool with no output schema, the description covers qualification and follower policy but omits how the 'queued candidates' mode is populated, what happens to filtered-out creators, and what the response contains beyond the two echoed policy fields. Adequate but with clear gaps for such a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 79% and min_followers/max_followers already document their 100/9999 defaults, so the description mostly restates the schema's follower policy. It does add the important cross-cutting rule that the band applies in every mode without auto-widening, but says nothing about handles, niche, batch_size, conversation_id, or preferences_mode. Baseline 3 for high schema coverage plus one genuine addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific two-stage action: enrich queued candidates or explicit Instagram handles, then keep only qualified on-niche creators with emails. That is a clear verb+resource statement an agent can act on. It stops short of naming which sibling to use instead (discover_creators, find_brand_creators), so differentiation is only implied through the schema's brand-collab note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Useful conditional rules are present: the email requirement is relaxed by the accept-no-email preference or an explicit 'emails optional' request, and exclude_agency_emails is only for direct/personal email or no-agency requests. However, there is no statement of when to pick this tool over discover_creators or find_brand_creators, nor any prerequisite such as a prior discovery run populating the queue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_crm_csvExport CRM CSVARead-onlyIdempotentInspect
Export Creator CRM creators as the app's CSV (handle, profile, email, stage, rate, videos, deal value, next task, notes). Pass lead_ids, or the same filters as list_crm_leads; omit everything to export the whole CRM. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only creators with this tag (case-insensitive). | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| stage | No | Only creators in these pipeline stages. | |
| search | No | Matches handle, name, email, niche, tags and note text, like the CRM search box. | |
| list_id | No | Only creators in this CRM list (ids from get_crm_overview). | |
| lead_ids | No | ||
| platform | No | ||
| has_email | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
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. The description adds genuinely new context: the full column set returned, the whole-CRM default (a size/scope warning), and that the operation is Free, which is cost information no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: output shape first, then the three input modes, with the no-argument default front-loaded before the convenience note. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With nine optional params, no required fields, and no output schema, the description carries the return-value burden and does so via the column list. Minor gap: nothing about size limits or truncation behavior on a whole-CRM export, which matters for a 1000-item maxItems lead_ids tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description compensates by explaining the lead_ids path, delegating filter semantics to list_crm_leads ('the same filters as'), and defining the omit-all default. It does not enumerate individual filters like tag/stage/has_email, but the delegation note keeps it understandable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Export) and resource (Creator CRM creators) and enumerates the exact CSV columns, so the agent knows both the action and the output shape. It is clearly distinct from list_crm_leads (read/list, not export) and from the generic export_csv sibling, which does not mention CRM creators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives two selection modes — pass lead_ids, or the same filters as list_crm_leads — and states the default: omit everything to export the whole CRM. It lacks an explicit exclusion versus the sibling export_csv, so the agent still has to infer which export tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_csvExport CSVARead-onlyIdempotentInspect
Return a CSV of kept leads plus an app_url for table review/export. Omit lead_ids to export all kept leads in the MCP conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| lead_ids | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
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 context beyond them: what the caller receives back (a CSV plus an app_url) and what scope applies when lead_ids is omitted. It says nothing about export size limits or the uid/URL mismatch constraint documented in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the output shape is front-loaded ahead of the default-scope rule. Nothing here repeats the title verbatim or wastes tokens.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters, 83% schema coverage, no output schema and no nested objects, the description is close to sufficient: it covers what is returned and the default filter scope. The remaining gap is sibling disambiguation against export_crm_csv, which the description never addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the baseline is 3. The description goes beyond the schema for the one undocumented parameter, lead_ids, explaining that omitting it exports the entire kept-lead set for the conversation. It adds no meaning for conversation_id, preferences_mode, or agent_preferences, which is acceptable because those are already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Return a CSV of kept leads') and even states the return shape (CSV plus app_url for table review/export). It does not, however, distinguish itself from the sibling 'export_crm_csv', which an agent must otherwise infer from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Omit lead_ids to export all kept leads in the MCP conversation' is a useful default-scope rule, and 'table review/export' hints at the use case. But there is no explicit when-to-use/when-not guidance and no routing between this tool and export_crm_csv, list_leads, or export of CRM records.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_brand_creatorsFind Brand CreatorsAInspect
Content-first search for creators who ALREADY made content for specific brands ('worked with Cal AI'): searches Instagram posts tagging the brand, brand hashtags, and TikTok keyword videos, and queues the post authors as candidates with proof. Brands' own accounts are excluded; stale posts (>18 months) don't count. ALWAYS follow with enrich_and_score passing the same brand names in brands — only verified collaborators are kept.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| brands | Yes | Brands to find past collaborators for. Research each with research_company (for_collab_search=true) first. | |
| max_results | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering safety (readOnly=false, idempotent=false, openWorld=true), the description still adds substantial context: it discloses the data sources, that authors are queued as candidates 'with proof', that brand-owned accounts are excluded, and that posts older than 18 months are discarded. This explains the surprising side effect of queuing candidates, which the annotations alone would not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with the differentiator front-loaded ('Content-first search...'), followed by mechanism, exclusions, and the pipeline requirement. No filler; each sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema, it explains the mechanism, the exclusion rules, and the required hand-off to enrich_and_score. It leaves paging/result caps and the effect of preferences_mode to the schema, which is reasonable given 86% coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the schema already documents uid, bearer_token, conversation_id, preferences_mode, and agent_preferences. The description only reinforces the `brands` parameter via 'passing the same brand names in `brands`' and does not add meaning for max_results or the preferences plumbing. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with a sharp qualifier: creators who ALREADY made content for specific brands, and lists the three search surfaces (Instagram posts tagging the brand, brand hashtags, TikTok keyword videos). This cleanly separates it from discover_creators, search_ugc_database, and track_creators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit mandatory follow-up ('ALWAYS follow with enrich_and_score passing the same brand names in `brands`') and the schema reinforces researching brands with research_company first. It lacks an explicit when-not clause or a direct contrast with sibling search tools, 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.
find_viral_trendsFind Viral TrendsARead-onlyIdempotentInspect
Collect evidence-backed current TikTok/Instagram posts and grounded web sources, then return 1-5 validated trends with proof links, observations, and safe ways to use them. Use before ideate_ugc_content for trend-aware ideas. Evidence remains available when generation is partial or fails.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | Maximum direct social evidence posts to collect (default 12). | |
| topic | Yes | The niche, product category, or topic to research trends for, e.g. 'skincare'. | |
| region | No | Audience region/country if relevant; defaults to Global. | |
| platform | No | Which platform's trends to research (default both). | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open world), so the bar is lower. The description still adds real value by disclosing partial-failure behavior — 'Evidence remains available when generation is partial or fails' — and by characterizing the sources (TikTok/Instagram posts plus grounded web). It omits rate limits, latency, and auth expectations that the schema only hints at via bearer_token.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the verb and output shape, then sequencing, then the resilience note. Dense but each sentence carries distinct information. The trailing resilience sentence is the least essential, keeping it just under top marks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter research tool with no output schema, the description does the important work: it describes the return shape (1-5 trends with proof links, observations, usage guidance) and the failure semantics. With all parameters schema-documented, the remaining gap is minor — nothing on latency or how conversation_id follow-ups behave beyond the schema field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in structured form and the baseline is 3. The description adds no syntax or format guidance beyond what the schema states; the '1-5 validated trends' phrasing also risks being read as the limit parameter, which actually governs collected posts (default 12).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Collect ... posts and grounded web sources', 'return 1-5 validated trends') and names the concrete artifacts returned: proof links, observations, safe usages. It also distinguishes itself from the nearest sibling by naming ideate_ugc_content, so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordering rule: 'Use before ideate_ugc_content for trend-aware ideas.' That is a clear when-to-use signal tied to a named sibling. It stops short of stating when NOT to use it or pointing to adjacent alternatives (e.g. analyze_seed_creators, research_company) for already-known topics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountGet AccountARead-onlyIdempotentInspect
The user's plan and usage as the web app sees it: monthly lead pool used and remaining (team members share the owner's pool), API call quota, automation and tracking limits, and UGC Brands access. Use before large searches or unlocks, or when the user asks about limits. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety burden is lifted; the description adds genuinely new context — the figures are 'as the web app sees it' and team members share the owner's pool, which affects how an agent should interpret the numbers. It does not cover staleness or failure behaviour for unauthenticated calls, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The payload-bearing content comes first, followed by a short usage directive, which is the right ordering. The trailing one-word fragment 'Free.' is ambiguous and slightly undercuts an otherwise tight three-part structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description does the work of describing the return payload field-by-field and adds the pool-sharing rule an agent needs to interpret it. What it lacks is authentication expectations and whether results vary by plan tier in ways that change tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both uid and bearer_token are documented in-schema including the local-fallback caveat. The description adds no parameter-level guidance (e.g. when a caller should supply uid versus relying on the URL), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (the account's plan and usage) and enumerates its contents — lead pool used/remaining, API quota, automation and tracking limits, UGC Brands access. That enumeration separates it cleanly from neighbours like get_preferences or get_tracking_dashboard, which are settings- and data-dashboards respectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete triggers: 'before large searches or unlocks' and 'when the user asks about limits', which implicitly routes budget checks ahead of unlock_ugc_database_creators and search-type tools. It stops short of naming a sibling or stating when not to call it, so it is clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_contextGet Agent ContextBRead-onlyIdempotentInspect
Return auth mode, plan, usage, preferences, service config, and operating instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so the safety profile is covered. The description's enumeration of returned content is modest added value, but it says nothing about auth requirements despite the schema hinting at non-trivial auth (URL uid matching, local fallback, bearer tokens).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the payload contents are listed in the most scannable position possible. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's field list is the only spec of what comes back, which is genuinely useful for a five-parameter context-fetch tool. But it stops at names, giving no sense of return structure, size, or when the call is expected in an agent's lifecycle, leaving a gap for a bootstrap-style tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters carry 100% schema description coverage, including the preferences_mode enum and the interaction between agent_preferences and preferences_mode. The description adds nothing beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Return' plus a concrete enumeration of the payload (auth mode, plan, usage, preferences, service config, operating instructions) makes the tool's output scope unambiguous. However, it never distinguishes itself from siblings like get_preferences or get_account, which overlap conceptually with the 'preferences' and account/plan content named here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this tool, no prerequisites, and no named alternative. Notably, get_preferences is a direct sibling that also surfaces preferences, yet the description gives no rule for choosing between them, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_automation_runGet Automation RunBRead-onlyIdempotentInspect
Poll one owned automation run for status, progress, errors, delivery state, and trend results.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| run_id | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
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 the meaningful qualifier 'owned' (authorization scoping) and the polling-implies-repeatability behavior, but says nothing about what an in-progress or failed run returns or whether the call blocks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and resource lead and the payload enumeration trails. It could be trimmed slightly, but every clause conveys a real capability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and seven parameters (zero required), the description should have closed the gap on run identification and polling cadence, and it does not. It does at least scope the result set to owned runs and name the result categories, which is the minimum an agent needs to decide to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, but the two undocumented parameters are run_id and automation_id — precisely the identifiers needed to fetch a single run — and the description gives no hint how to identify the run or whether either is required (required list is empty). The remaining params (uid, bearer_token, conversation_id, preferences_mode, agent_preferences) are documented in the schema, so the description adds nothing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (poll) and resource (one owned automation run) and enumerates what the caller learns: status, progress, errors, delivery state, trend results. That separates it from list_automation_runs, but it never distinguishes itself from the sibling get_run_status, leaving a real ambiguity unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'poll' implies repeated use after kicking off a run, which is useful implied guidance, but there is no explicit statement of when to use this versus get_run_status or list_automation_runs, and no note about when a run is finished. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chatGet ChatARead-onlyIdempotentInspect
Read one of the user's chats, oldest message first: their requests, the agent's answers, step summaries, run progress and the result table id. Use it to recall what was asked and found earlier. Identify the chat with chat_id (list_chats) or list_id (run_ugc_agent). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | Page size, 1-100 (default 50). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| chat_id | No | The chat_id from list_chats. | |
| list_id | No | Or the list_id run_ugc_agent returned, for the chat that search created. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent and non-destructive, so the description's added value is the ordering guarantee ('oldest message first'), the content inventory, and the cost note ('Free'), which is genuinely useful for deciding whether to fetch. Pagination behavior is left to the schema rather than described, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
What it returns is front-loaded, followed by the use case, the identification options, and a one-word cost note. Every sentence carries distinct information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-resource fetch with no output schema, the description covers what is returned, in what order, how to identify the target, and the cost. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3; the description earns an extra point by explaining the two key identifiers semantically — chat_id comes from list_chats, list_id from run_ugc_agent — which clarifies that they are alternative ways to target the same chat. It says nothing about limit/cursor, which the schema already handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Read one of the user's chats') and enumerates exactly what comes back: requests, agent answers, step summaries, run progress and the result table id. It is clearly distinguishable from siblings like list_chats (enumeration) and delete_chat/rename_chat (mutation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete use case ('recall what was asked and found earlier') and tells the agent how to obtain the two identifiers, pointing at list_chats and run_ugc_agent. It does not state an explicit when-not-to-use or name an alternative retrieval tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crm_overviewGet CRM OverviewARead-onlyIdempotentInspect
Creator CRM pipeline summary plus the user's custom CRM lists: creators per stage, how many are in conversation or working with the user, committed deal value, tasks due, and each list's id, name and size. Pass list_id to scope the pipeline to one list. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| list_id | No | Scope the pipeline counts to one CRM list. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the cost is free, the payload shape is enumerated, and list_id alters scope rather than adding a filter dimension. It does not address auth, though the schema does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core payload contents are front-loaded in the opening clause, with the list_id scoping and cost note trailing. The enumerated metric list is dense but every item is a real return field; the one-word 'Free.' sentence is terse and useful rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-required-parameter summary tool with no output schema, the description effectively doubles as the return-contract by listing every reported aggregate. The only missing piece is a hint that this is the natural entry point before drilling into individual leads or lists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so uid, list_id and bearer_token are all documented and the baseline of 3 applies. The description restates the list_id scoping behavior already in the schema and says nothing about uid or bearer_token, so it adds no meaning beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and deliverable: a CRM pipeline summary plus the user's custom lists, enumerating exactly what aggregates come back (creators per stage, in-conversation counts, committed deal value, tasks due, list id/name/size). The aggregate-count framing makes it obviously distinct from list_crm_leads and manage_crm_list without having to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only guidance offered is the conditional 'Pass list_id to scope the pipeline to one list' and the note that it is free. There is no explicit statement of when to reach for this overview versus list_crm_leads or manage_crm_list, so the when-to-use 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.
get_preferencesGet PreferencesARead-onlyIdempotentInspect
Read the user's saved Agent Preferences (default creator criteria applied to every search, and whether creators without emails are accepted) and how many creators they excluded. Set include_excluded_emails to list the excluded emails (creators they already work with). Check this when results look unexpectedly narrow. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | Page size, 1-100 (default 100). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| include_excluded_emails | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive, closed-world, so the safety profile is handled. The description adds non-annotation value: the cost signal ('Free'), the conceptual shape of the response (preferences plus excluded-creator count), and the opt-in behavior of include_excluded_emails. It omits any mention of pagination behavior despite limit/cursor existing, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with what is returned, then the parameter hint, then the usage trigger, then the cost note; every sentence carries information. Parentheticals are dense but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must convey return content — and it does, naming the preference fields and exclusion count. With 5 params including limit/cursor, the absence of any pagination note is the one substantive omission; otherwise complete for a simple read tool with full annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, with include_excluded_emails being the one undocumented parameter — and the description explicitly explains what it does (lists excluded emails, i.e., creators already worked with). That is exactly the compensation needed. It adds no extra detail for uid/limit/cursor, but the schema already documents those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Read' plus a precisely scoped resource: the user's saved Agent Preferences, with the two key contents enumerated (default creator criteria, whether email-less creators are accepted) and the exclusion count. This is clearly distinguishable from update_preferences and from the search/discovery siblings it influences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering condition: 'Check this when results look unexpectedly narrow,' which links this read to debugging search outcomes. It also implicitly separates the read path from update_preferences, but it doesn't state exclusions (e.g., don't call this to change settings, or that it isn't needed before every search).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_run_statusGet Run StatusARead-onlyIdempotentInspect
Poll a search started by run_ugc_agent on the web app. Call it about 30 seconds after run_ugc_agent (or the previous get_run_status) returned status 'running' or 'queued', with the same list_id. While running it returns found_so_far and target; when the run is complete, ended, stopped, or no_run it returns the creators, the stop reason and a short explanation of why a run ended short. Read-only and cheap: poll every 30 seconds until the status is terminal, then present the creators and app_url.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| list_id | No | The list_id returned by run_ugc_agent. Falls back to conversation_id when omitted. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe read-only, idempotent, non-destructive operation. Beyond that, the description explains the polling behavior, what is returned while running (found_so_far and target), what is returned on terminal states (creators, stop reason, short explanation), and that the call is cheap, which is valuable because no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by timing, return behavior, and polling guidance. Despite being a single dense paragraph, every sentence contributes operational information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately explains the return behavior for both running and terminal states. It also covers polling cadence and when to stop, while the fully documented schema handles the remaining parameter details, so the definition is complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, including uid, list_id, bearer_token, conversation_id, preferences_mode, and agent_preferences. The description adds only limited parameter meaning by reinforcing the list_id relationship to run_ugc_agent, which merits the baseline score rather than a higher one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it polls a search started by run_ugc_agent. It clearly distinguishes this tool from run_ugc_agent, which starts the search, and from stop_run, which stops it, so an agent can identify the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit timing and conditions: call about 30 seconds after run_ugc_agent or a previous get_run_status returned 'running' or 'queued', and reuse the same list_id. It also specifies polling every 30 seconds until the status is terminal, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tracking_dashboardGet Creator Tracking DashboardARead-onlyIdempotentInspect
Creator Tracking (the app's Shortimize-style tab) by view. summary (default): tracked count, plan cap, accounts still loading, date ranges. overview: KPI totals vs the previous period, daily chart (metric views/engagement/likes/comments/shares/saves, mode total or per_day), most viral videos, virality and duration analysis, top accounts, posting schedule and this week's payout summary. payouts: this week's pay per paid creator (base, CPM, total, status, posting target). collections: tracking collections (campaigns); pass collection_id for one. Free on every plan; viewing tops up stale data in the background.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| mode | No | overview only. | |
| view | No | ||
| limit | No | Page size, 1-100 (default 25). | |
| range | No | Date range (default 7d). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| metric | No | overview only. | |
| platform | No | ||
| timezone | No | IANA timezone for day boundaries (default UTC). | |
| account_ids | No | Tracked account ids like tiktok_mia. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| collection_id | No | Only accounts and posts in this tracking collection (cmp_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the safety burden is light. The description adds meaningful beyond-annotation context: it is free on every plan and that viewing tops up stale data in the background, a non-obvious side effect. It does not describe pagination behavior despite a cursor parameter, which keeps it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded with the view name, and the sentence is dense but information-rich with no filler. The long run-on enumeration of view contents would scan better as structured bullets, which is the only reason it is not a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no output schema, the description does the important work of describing what each view returns, effectively standing in for the missing output schema, and it notes plan availability and background refresh. It omits pagination semantics and authentication guidance (uid vs bearer_token vs API key), preventing a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), so the baseline is 3, but the description adds real value for the undocumented `view` parameter by explaining what each enum value produces, and it clarifies `mode`/`metric` are overview-only and `collection_id` targets a single collection. Minor gaps remain around uid, bearer_token, and account_ids interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the Creator Tracking dashboard) and enumerates what each of its four views (summary, overview, payouts, collections) returns, so an agent knows exactly what it is fetching. It does not explicitly distinguish itself from siblings such as list_tracked_accounts or refresh_tracking, keeping it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
By listing what each view contains, the description implicitly guides the agent to pick the right view, which is genuine usage guidance for the main selector. However, it never states when to use this dashboard versus sibling tools like list_tracked_videos or refresh_tracking, and offers no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ugc_brandGet UGC BrandARead-onlyIdempotentInspect
One brand's UGC program, by app tab. view=overview (default, Pro or higher): how the program runs, creator pay (program.pay_per_video_usd is the guaranteed rate; program.pay adds the pay model, min/max with bonuses, a one-line summary and the sources with the quote stating the pay and when it was checked; cite those when quoting a rate), sources, full KPIs and top creator accounts; the range block holds the Overview for a date window (window 7d/30d/90d/365d/all, or from/to dates; default last 30 days). view=videos (Premium or higher): the program's videos sorted by views, outliers or newest, with captions, metrics and links. view=playbook (Premium or higher): what works, reused caption hooks, hashtags, video vs slideshow, best length, virality spread and account naming patterns; use it to brief creators on a proven program. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | overview only: custom range end, YYYY-MM-DD inclusive (UTC). Defaults to today. | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| from | No | overview only: custom range start, YYYY-MM-DD (UTC). Use instead of window. | |
| sort | No | videos only. | |
| view | No | ||
| limit | No | Page size, 1-100 (default 25). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| window | No | overview: rolling date window for `range` (default 30d). videos and playbook: 30d (default) or all only. | |
| brand_id | Yes | Brand id from list_ugc_brands. | |
| platforms | No | videos only. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
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 genuine context: tier gating, default 30-day window, and provenance discipline ('cite those when quoting a rate' / sources with quote and check date). However, it doesn't cover pagination behavior or error/permission failure modes, so it sits at a solid but not rich 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core resource statement, then organized by view mode. Dense but each clause carries information (pay model details, tier gates, defaults). The long run-on sentences for pay/overview slightly hurt scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 params, no output schema, and annotations covering safety, the description does the heavy lifting of explaining what each view returns and the tier prerequisites. Remaining gap: it doesn't detail the pagination/cursor contract even though a cursor param exists, but schema covers it adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 91%, so baseline is 3. The description goes beyond by explaining the view enum semantics (which are undocumented in the schema), window options and defaults ('window 7d/30d/90d/365d/all, or from/to dates; default last 30 days'), and the range block behavior — meaningful additions to the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (one brand's UGC program) and verb (retrieval), then enumerates three distinct view modes with their contents. An agent can tell exactly what it gets and how it differs from list_ugc_brands or list_ugc_brand_creators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Per-view guidance is explicit: overview for how the program runs and pay, videos for sorted video data, playbook 'to brief creators on a proven program.' Tier availability (Free/Pro/Premium) is also stated. It lacks explicit when-not-to-use or naming of sibling alternatives, 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.
get_ugc_database_facetsGet UGC Database FacetsARead-onlyIdempotentInspect
Show what the UGC Database holds for a set of filters: counts per niche, country, state/region, city, tier, platform, language, gender, estimated age band, email type, signal (including proven, for_hire and has_rates), brand (brands worked with), creator type, service, portfolio type, on camera, setting, production and saturation, market insights (including rates_pct and median_rate_usd, the median stated UGC video rate), and the user's unlock access and remaining leads. Use it to pick valid filter values and to size an audience before searching or unlocking. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| view | No | all (default), net_new = not yet delivered to the user, unlocked = already unlocked. | |
| query | No | Word-prefix search over handle, name, niche, labels and bio ('ugc' matches kit.ugc). | |
| tiers | No | starter 0-999, nano 1k-9,999, micro 10k-99,999, mid 100k-499,999, macro 500k+ followers. | |
| brands | No | Worked with any of these brands ('Poppi', 'Cal AI'), verified (proven) or named in their bio; case-insensitive. get_ugc_database_facets lists brand names. | |
| cities | No | Cities the creator says they are based in, English names ('Austin', 'London', 'Mexico City'); case-insensitive. Combine with countries to disambiguate. | |
| niches | No | Niche labels or keys; use get_ugc_database_facets for valid values. | |
| genders | No | ||
| regions | No | States or regions the creator says they are based in, English names ('Texas', 'England', 'Ontario'); case-insensitive. Combine with countries to disambiguate. get_ugc_database_facets lists valid values. | |
| signals | No | All must match: ugc wording, portfolio link, brand collabs, engagement stats, untapped (no other brand got this creator), proven (verified UGC made for at least one brand, with proof posts), for_hire (says they take paid UGC work), has_rates (publishes their own rates on a rate card or portfolio page). | |
| services | No | Offers any of these services. | |
| settings | No | Where their recent posts are usually filmed. | |
| age_bands | No | Estimated age band from profile photos and bio (an estimate, not a verified age); unknown = not estimated. | |
| countries | No | ISO alpha-2 codes (GB is read as UK), or 'unknown'. | |
| languages | No | ||
| on_camera | No | Appears on camera in recent posts (no = faceless). | |
| platforms | No | ||
| email_kinds | No | ||
| productions | No | Production style of recent posts. | |
| saturations | No | How many brands they already work with: fresh 0, low 1-2, medium 3-5, high 6+. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| max_rate_usd | No | Budget cap in USD: only creators whose lowest stated UGC video rate (rate_min_usd) is at or below this. Creators who state no rate are excluded. Rates are self-published by the creator, not verified. | |
| min_hit_rate | No | Minimum hit rate: share of the creator's posts with 10,000+ views, as a 0-1 fraction (0.25 = 25%). Creators without post metrics are excluded. | |
| creator_types | No | Account type; ugc_creator and both are creators who make UGC for brands. | |
| max_followers | No | ||
| min_followers | No | ||
| exclude_niches | No | ||
| portfolio_types | No | Where the creator keeps their portfolio, from their links. | |
| min_median_views | No | Minimum median views per post. | |
| added_within_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower; the description still adds the materially useful 'Free' cost signal versus paid unlocking. It also discloses that returns include the user's unlock access and remaining leads, which is behavioral context not present in any annotation. It does not state whether the facet counts respect the uid/view parameters or how heavy the aggregation is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause, which is good, but the middle is a single sprawling 20-item enumeration that reads as a dump rather than a structured summary. The closing sentences ('Use it to...' and 'Free.') are efficient; the facet list could be trimmed substantially without losing selection value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 30 parameters, no required params, and no output schema, the description bears real weight for explaining what comes back, and it does list the returned dimensions including access state and remaining leads. That is enough for an agent to decide when to call it, though it omits whether the response is nested per facet and how the uid/view parameters interact with the counts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, so the schema carries most of the burden and baseline is 3. The description's facet enumeration loosely mirrors the parameter list and confirms that values like proven/for_hire/has_rates and rate fields exist as filter dimensions, but it adds no syntax, ranges, or semantics beyond what the schema already documents. Several parameters (uid, bearer_token, added_within_days, max_followers) get no mention at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it shows what the UGC Database holds for a set of filters, and it enumerates exactly what is counted (niche, country, tier, platform, rates, access). It also distinguishes itself from the search and unlock siblings by framing itself as the pre-flight step ('size an audience before searching or unlocking'). An agent can tell this apart from search_ugc_database and unlock_ugc_database_creators without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: 'to pick valid filter values and to size an audience before searching or unlocking.' The alternatives are referenced by function rather than by tool name, so the agent must map 'searching' to search_ugc_database itself. 'Free' adds a strong contrast to the costly unlock path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ideate_ugc_contentIdeate UGC ContentARead-onlyIdempotentInspect
Generate structured UGC video ideas by crossing a library of proven short-form formats (problem→solution, before/after, unboxing, myth-busting, trend remix, etc.) with the brand/product/audience/pain points. Each idea has a hook, a 3-beat outline, why it works, and a CTA. The output is SCAFFOLDING: rewrite every hook and beat so it's specific to the product before presenting. Pass trend_context from find_viral_trends for trend-aware ideas.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| count | No | How many ideas to return (default 8). | |
| niche | No | The content niche/vertical, e.g. 'skincare'. | |
| product | No | The product/service the content promotes. | |
| audience | No | Who the content targets, e.g. 'busy moms in the UK'. | |
| platform | No | ||
| brand_name | No | Brand name, if known. | |
| pain_points | No | Customer pain points to build ideas around; rotated across the ideas. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| trend_context | No | The summary returned by find_viral_trends, so ideas can ride live trends. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
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, yet the description still adds real behavior: the output is deliberately unfinished scaffolding that must be rewritten, and it depends on upstream trend data. No contradiction with annotations. Auth/uid and durable-state behavior are left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: purpose first, then the scaffolding warning, then the trend_context pointer. Each sentence changes how an agent would call or present the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 optional parameters and no output schema, the description compensates by describing the exact shape of each returned idea and the state of the output (scaffolding, not final). Nothing an agent needs in order to call and correctly present results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 92%, so the baseline is 3; the description adds genuine meaning by explaining how brand/product/audience/pain_points are combined and by specifying that trend_context is the summary object returned by find_viral_trends, which the schema only hints at. The remaining 13 parameters (uid, bearer_token, preferences_mode, conversation_id) are covered by the schema, not the prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate structured UGC video ideas') and explains the mechanism: crossing a named library of short-form formats with brand/product/audience/pain points. It also enumerates the output's anatomy (hook, 3-beat outline, why it works, CTA), which separates it from downstream siblings like draft_ugc_script that produce finished copy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete usage rules: pass trend_context from find_viral_trends for trend-aware ideas, and rewrite the scaffolding before presenting. That names an upstream sibling and its condition. It stops short of an explicit when-not-to-use or a named handoff to draft_ugc_script for the rewriting step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_applicationsImport ApplicationsAIdempotentInspect
Import creator applications from CSV or plain-text export content (for example a Typeform or Google Forms export), up to 1,000 rows. Re-importing updates existing applicants instead of duplicating them and keeps their status. Pass criteria to pre-score them. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | Yes | The CSV or text content. | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| source | No | Label for where they came from (default 'API import'). | |
| criteria | No | Program criteria used to score applicants. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: re-import performs an upsert rather than duplicating, preserves existing status, and enforces a 1,000-row cap. 'Free' also communicates the cost profile, which is not captured anywhere in structured fields. The upsert-and-preserve semantics is exactly the kind of write behavior an agent cannot infer from idempotentHint alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and format, then the dedupe behavior, then the optional scoring. Nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, the description covers input sources, limits, dedupe semantics, and cost, which is most of what an agent needs. It does not say what a successful import returns (counts of created vs. updated, row-level errors), a modest gap for a bulk mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: the 1,000-row limit is a constraint on the required `csv` parameter not present in the schema, and 'Pass criteria to pre-score them' explains the effect of `criteria` rather than just its shape. `source` and the auth parameters are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Import creator applications') plus the accepted input formats (CSV or plain-text export). It is clearly distinguishable from siblings like list_applications, review_applications, and update_application_status, so an agent can route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context — bulk import from form exports, up to 1,000 rows, with optional criteria pre-scoring. It does not explicitly say when to prefer this over per-applicant alternatives, but the bulk-vs-single distinction is strongly implied by 'up to 1,000 rows' and the export-source framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_applicationsList ApplicationsARead-onlyIdempotentInspect
List the user's imported UGC creator applications (best fit first) with status, fit score, recommendation, handles, answers and review notes. Pass application_id for one application with its account and video analysis. Use before reviewing or drafting responses. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | Page size, 1-100 (default 25). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| status | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| application_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: result ordering ('best fit first'), the fields surfaced, and cost ('Free'). It does not discuss paging behavior despite a cursor parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core capability and sorting rule, then the single-record mode, then the usage cue. The field enumeration is long but each item conveys what will be returned, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates returned fields and the two result shapes (list vs single application). The main gap is pagination guidance for a tool that exposes limit and cursor; otherwise an agent has what it needs to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with limit, cursor and uid documented in the schema. The description compensates for the undocumented application_id by explaining it switches to a single-application view that additionally includes account and video analysis. It says nothing about the status enum filter or interaction between filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('list the user's imported UGC creator applications') and enumerates the fields returned (status, fit score, recommendation, handles, answers, review notes) plus the sort order. It implicitly separates this read from mutation siblings like review_applications and update_application_status, though it never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use before reviewing or drafting responses' gives a clear ordering cue relative to draft_application_response and review_applications, and 'Pass application_id for one application' explains the single-record mode. There is no explicit when-not-to-use statement, keeping it 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.
list_automation_runsList Automation RunsBRead-onlyIdempotentInspect
List normalized run history for an owned lead-sourcing or trend-research automation. Defaults to 20 runs and accepts a maximum of 100.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds the default (20) and cap (100) on results, which is genuinely useful behavior. However, it does not disclose ordering of runs, and since the schema exposes no offset/cursor parameter, an agent cannot tell that results beyond 100 are unreachable without changing filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is returned and scoped to whom, with the limit behavior appended. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 optional parameters, 71% schema coverage and no output schema, the description is thin: it never explains run ordering, whether omitting automation_id lists runs across automations, or how preferences_mode changes the result set. Adequate to call the tool, but leaves real ambiguity about what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, above the point where the schema does most of the work, so a 3 is the baseline. The description only adds the default value for limit; the more consequential parameters (conversation_id, preferences_mode, agent_preferences) are untouched, and the phrase "for an owned ... automation" implies automation_id is required when no parameter is actually required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("List") and resource ("normalized run history") scoped to "an owned lead-sourcing or trend-research automation." This distinguishes it from get_automation_run (single run) and list_automations by implication, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence is pagination mechanics, not usage guidance. Nothing says when to use this vs. get_automation_run for a single run, or vs. list_automations when the automation id is unknown, and there is no mention of what happens when automation_id is omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_automationsList AutomationsARead-onlyIdempotentInspect
List the authenticated user's lead-sourcing and trend-research automations with lifecycle state and recent status. Unsupported legacy records are excluded. Read-only; use this before editing or deleting an automation.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description earns credit for adding non-obvious behavior: unsupported legacy records are filtered out, so an agent should not treat the result as a complete inventory. It stops short of describing pagination or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: scope and returned fields first, then the exclusion caveat, then the usage rule. Everything is front-loaded and each clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully signals the return payload (lifecycle state and recent status) and the coverage caveat (legacy records excluded). The five optional auth/preferences parameters remain entirely on the schema, but nothing critical to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all five parameters (uid, bearer_token, conversation_id, preferences_mode, agent_preferences) are documented in the schema itself. The description adds no parameter guidance at all, so the baseline 3 applies — the schema does all the work here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (List) and a precisely scoped resource (the authenticated user's lead-sourcing and trend-research automations), plus what each record carries (lifecycle state, recent status). This clearly separates it from sibling tools like list_automation_runs, get_automation_run and the create/update/delete automation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the call as a prerequisite: 'use this before editing or deleting an automation,' which gives an agent a concrete decision rule. It does not, however, contrast itself with list_automation_runs, the closest alternative an agent might pick by mistake.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chatsList ChatsARead-onlyIdempotentInspect
List the user's chats as they appear in the app.ugcagent.app sidebar (web chats and searches started from this MCP), newest first, with each chat's id and title. Use it to find the chat_id to pass to rename_chat. Pass next_cursor back as cursor for the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | How many chats to return (default 20, max 100). | |
| cursor | No | The next_cursor from a previous list_chats call. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the description only needs to add operational context — and it does: sort order, the two fields returned, and the pagination convention ('Pass next_cursor back as cursor for the next page'). It omits what happens when the cursor is exhausted or page is empty, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing distinct work: what is returned, why to call it, how to paginate. No filler and the crucial scope/ordering detail is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param read-only list tool with fully described schema and explicit annotations, the description covers the only things left open: return fields, ordering, and pagination. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, but the description adds genuine meaning by explaining the output-to-input round trip between next_cursor and cursor. limit and uid are left to the schema, which already documents both adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the user's chats') plus scope ('as they appear in the app.ugcagent.app sidebar'), ordering ('newest first') and returned fields ('id and title'). This separates it cleanly from get_chat and the many other list_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent downstream: 'Use it to find the chat_id to pass to rename_chat.' It does not name the alternative for reading message content (get_chat) or state exclusions, so it falls short of a full when/when-not pair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_crm_leadsList CRM CreatorsARead-onlyIdempotentInspect
List creators saved in the user's Creator CRM (every creator they kept from searches, automations and UGC Database unlocks) with pipeline stage, deal terms, tags, notes, tasks and activity. Pass lead_id to get one creator's full record. Use search to find a creator by name or handle before updating them. Free, no leads used. Not the same as list_leads, which reads one search's result table.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only creators with this tag (case-insensitive). | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| sort | No | ||
| limit | No | Page size, 1-100 (default 25). | |
| order | No | ||
| stage | No | Only creators in these pipeline stages. | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| search | No | Matches handle, name, email, niche, tags and note text, like the CRM search box. | |
| lead_id | No | A CRM lead id (lead_...) to fetch one creator. Other filters are ignored. | |
| list_id | No | Only creators in this CRM list (ids from get_crm_overview). | |
| platform | No | ||
| has_email | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
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 structurally; the description adds genuinely new signal with the cost note "Free, no leads used" and clarifies that lead_id overrides other filters. It does not discuss pagination semantics beyond the cursor parameter, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences plus a short contrast clause, front-loaded with what the tool returns, then the single-record path, then the sibling distinction. No sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the record fields returned, and annotations cover the safety profile for a 13-parameter read tool. Minor gaps remain around pagination behavior and how multiple filters intersect, but nothing blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 69%, so the schema documents most parameters (tag, cursor, search, lead_id, list_id, limit) themselves. The description reinforces only lead_id and search semantics and adds nothing about sort, stage, platform, or how filters combine — the baseline for partial coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List creators saved in the user's Creator CRM") and enumerates the contents returned (pipeline stage, deal terms, tags, notes, tasks, activity). It explicitly separates itself from list_leads, a sibling an agent would otherwise confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing rules: pass lead_id for a single full record, use search to find a creator by name or handle before updating, and do not confuse it with list_leads which reads a single search's result table. The when-to-use-for-what pattern is explicit rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_leadsList LeadsCRead-onlyIdempotentInspect
Return full kept lead rows for this MCP conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds only that full rows are returned and the scope is the current conversation, without explaining 'kept,' limit behavior, fallback auth, or how durable state works.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is concise and easy to scan, though its brevity contributes to the ambiguity noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six optional parameters, durable conversation state, and multiple sibling list tools, the description is too sparse. It leaves key concepts such as 'kept' leads and the relationship to list_crm_leads unexplained, though the schema covers most parameters and no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the parameter documentation largely carries the burden; the description adds no parameter-level meaning. A baseline 3 is appropriate because the schema itself explains uid, bearer_token, conversation_id, preferences_mode, and agent_preferences.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('Return') and resource ('full kept lead rows'), but 'kept' is undefined and the scope 'this MCP conversation' is vague. It does not distinguish this tool from sibling list_crm_leads or clarify what kind of leads are returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of list_crm_leads, list_applications, or other lead-related siblings. The only contextual clue is 'this MCP conversation,' which does not tell an agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_outreach_campaignsList Outreach CampaignsARead-onlyIdempotentInspect
List campaigns in the user's connected Instantly or Smartlead account. Only campaigns with accepts_leads=true can receive leads. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | Page size, 1-100 (default 100). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| search | No | Campaign name contains. | |
| provider | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
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 that campaigns come from an external connected account (Instantly/Smartlead) and are 'Free', plus the accepts_leads filter nuance. It does not describe pagination behavior or result shape, but the schema's limit/cursor largely cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and scope. No filler; each sentence adds a distinct piece of information, though it is sparse rather than rich.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with well-documented parameters (83%) and no output schema, the description covers purpose, source accounts, and the key filtering nuance. It is sufficient to call correctly, though it omits any note on what fields campaigns return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents provider, limit, cursor, search, uid, and bearer_token. The description only reinforces provider (Instantly/Smartlead) and the accepts_leads concept; with high schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'List' and resource 'campaigns' scoped to the user's connected Instantly or Smartlead account, so the agent knows exactly what is being returned. It does not explicitly name the sibling (list_outreach_integrations, send_leads_to_campaign) it complements or differs from, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'accepts_leads=true can receive leads' line gives useful context that this list is consulted before sending leads, implying a workflow with send_leads_to_campaign. However, there is no explicit when-to-use/when-not guidance or named alternative, 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.
list_outreach_integrationsList Outreach IntegrationsARead-onlyIdempotentInspect
Whether the user has Instantly and/or Smartlead connected, the campaign they last used, and the auto-send setting (new leads sent automatically to a campaign). Connecting a tool is done by the user in the UGC Agent app under Integrations; it cannot be done here. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new context beyond them: the integration must be set up by the user in the app (not via this tool) and the call is 'Free' (no credit consumption), both of which affect agent planning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the return content is front-loaded and the constraint follows. The opening 'Whether the user has...' is a sentence fragment, which makes the first read slightly awkward, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description takes on the job of explaining the return payload — connection status, last campaign, auto-send flag — and it does so. Authentication is handled by the schema and safety traits by annotations, leaving no critical gap for a zero-required-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (uid, bearer_token) are documented as optional in the schema itself. The description adds no parameter-level information, so the baseline 3 applies — the schema carries all the weight here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (Outreach integrations: Instantly/Smartlead) and enumerates exactly what is reported: connection status, last-used campaign, and the auto-send setting. The verb is only implied by the title ('List'), so it is not a textbook verb+resource statement, and no sibling such as list_outreach_campaigns is called out, but the reported content is specific enough to distinguish it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states a when-not case: connecting a tool happens in the UGC Agent app under Integrations and 'cannot be done here', which prevents the agent from attempting a write through this tool. It doesn't contrast itself against list_outreach_campaigns or update_auto_send, which would be needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracked_accountsList Tracked AccountsARead-onlyIdempotentInspect
Tracked creators with views, views gained, engagement rate, virality, posting activity, health score and spend/CPM for a date range. Pass account_id for one creator's page (stats, follower and view snapshots, last 14 days, engagement and duration analysis). New accounts show status pending until their first scrape finishes. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Handle or display name contains. | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| sort | No | ||
| limit | No | Page size, 1-100 (default 25). | |
| order | No | ||
| range | No | Date range (default 7d). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| platform | No | ||
| timezone | No | IANA timezone for day boundaries (default UTC). | |
| account_id | No | Tracked account id like tiktok_mia for one creator's page (uses range, timezone, collection_id only). | |
| account_ids | No | Tracked account ids like tiktok_mia. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| collection_id | No | Only accounts and posts in this tracking collection (cmp_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavior beyond annotations: what metrics are included, what the single-account view returns, that new accounts show pending until first scrape, and that the tool is free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and front-loads the returned metrics before covering the single-account variant and pending-status note. It is dense but not wasteful; a small amount of structural separation could make it easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description gives a useful summary of returned metrics and the richer single-account page contents. It is not fully complete on filtering combinations or pagination behavior, but those are partly covered by the schema and are less critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 77%, so the schema already documents most parameters. The description elaborates on account_id mode and date-range scope, but does not add meaning for the other filters such as q, sort, platform, account_ids, cursor, or collection_id beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (tracked creators) and the metrics returned for a date range, plus the single-account page mode. It does not explicitly distinguish this tool from overlapping siblings such as get_account or get_tracking_dashboard, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage through 'Pass account_id for one creator's page' and notes pending status for new accounts. However, it gives no explicit guidance on when to use this tool instead of siblings like get_account or list_tracked_videos, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracked_videosList Tracked VideosARead-onlyIdempotentInspect
Videos from tracked creators with views, views gained in the range, outlier multiple vs the creator's median, 24h/7d/14d/30d growth and engagement. Sort by outlier_multiple to find viral videos. Pass account_id and video_id for one video with its daily snapshot history. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Caption or handle contains. | |
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| sort | No | ||
| limit | No | Page size, 1-100 (default 25). | |
| order | No | ||
| range | No | Date range (default 7d). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| platform | No | ||
| timezone | No | IANA timezone for day boundaries (default UTC). | |
| video_id | No | ||
| account_id | No | With video_id: the tracked account that posted it. | |
| account_ids | No | Tracked account ids like tiktok_mia. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| collection_id | No | Only accounts and posts in this tracking collection (cmp_...). | |
| include_history | No | ||
| uploaded_in_range | No | Only videos posted inside the range (default true). |
TDQS
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 value by disclosing the returned metric set (important since there is no output schema) and the cost signal 'Free.' It does not mention pagination limits or cursor behavior, which are left entirely to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly four telegraphic sentences with the payload description front-loaded and the two calling patterns and pricing note following in a logical order. Dense rather than padded, though it reads as a field dump in places.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 16 optional parameters and no output schema, the description carries the return-value burden well by naming every metric column. It omits guidance on combining cursors with the many filters and on the default sort, which is the main remaining gap for correctly paginating a list this wide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 69%, so baseline is 3. The description reinforces the account_id+video_id pairing and the outlier_multiple sort key, but those are already documented in the schema, and key filters like uploaded_in_range, collection_id, platform and timezone get no extra meaning added in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Videos from tracked creators') and enumerates the exact metrics returned (views, views gained, outlier multiple, 24h/7d/14d/30d growth, engagement), which cleanly separates it from list_tracked_accounts and search_ugc_database. It stops short of naming a sibling tool outright, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete usage patterns: sort by outlier_multiple to surface viral videos, and pass account_id + video_id to get the single-video daily snapshot history. It never states when NOT to use it, nor points to the sibling to use for untracked/unenriched video discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ugc_brand_creatorsList UGC Brand CreatorsARead-onlyIdempotentInspect
The creator accounts attributed to a brand's UGC program, with the evidence behind each (confidence confirmed, likely or possible, and signals) and their 30-day output. Possible accounts are listed but not counted in KPIs. Pass account_id for one account with every video we hold and why it was attributed. Needs Premium or higher. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| sort | No | ||
| limit | No | Page size, 1-100 (default 25). | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| brand_id | Yes | ||
| dedicated | No | Only accounts dedicated to the brand (true) or personal accounts (false). | |
| platforms | No | ||
| account_id | No | e.g. tiktok_handle, to get one account with its videos. | |
| confidence | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
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 still adds real behavioral context the annotations can't convey: 'possible' accounts are returned but excluded from KPIs, and the account_id mode returns a much richer per-account payload (all videos plus attribution reasons). The trailing 'Needs Premium or higher. Free.' is a confusing, apparently contradictory gate statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is a dense fragment without a verb, and the final 'Needs Premium or higher. Free.' is a dangling, self-contradicting two-word tail that costs clarity rather than adding it. The middle content (KPI exclusion, account_id mode) is well placed, but the closing fragment should be resolved or removed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, no output schema, and no annotation detail on result shape, the description does explain the two result modes and the confidence/KPI caveat, which is the core an agent needs. It omits sort/order behavior and the pagination workflow (cursor + stable filters), which matter for a list tool at this parameter count.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, with limit, cursor, dedicated, uid and account_id documented in-schema. The description adds semantics for account_id (single-account mode) and for the confidence tiers, but says nothing about the undocumented sort enum or the platforms filter. Baseline 3 is right for a schema that carries most of the weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (creator accounts attributed to a brand's UGC program) plus the payload each carries (confidence tier, signals, 30-day output). It implicitly distinguishes this from UGC discovery/search by framing the result as already-attributed accounts, but it never names a sibling tool such as find_brand_creators or search_ugc_database, so the differentiation is inferential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context: use the list mode for a roster, and 'Pass account_id for one account with every video we hold and why it was attributed' describes a distinct second mode. It also states a plan gate (Premium or higher). It does not, however, say when to prefer this over find_brand_creators or discover_creators, so there are no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ugc_brandsList UGC BrandsARead-onlyIdempotentInspect
Browse the curated UGC Brands database: brands that run UGC creator programs, with program facts (pay per video with its sources in program.pay, program hashtags, markets), 30-day KPIs (accounts, videos, views, estimated payouts) and all-time views (summary.views_total). Use it when the user asks how a known brand runs its UGC program or wants programs to copy; use research_company for brands not listed. Free, any plan.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| sort | No | views_total = all-time views. | |
| limit | No | Page size, 1-100 (default 25). | |
| query | No | Matches brand name, domain or category. | |
| sizes | No | Program size by accounts: s 1-10, m 11-50, l 51-200, xl 201+. | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| markets | No | ISO-2 country codes of the brand's top creator countries. | |
| pay_rate | No | ||
| platforms | No | ||
| categories | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful context beyond annotations by noting the database is curated and free on any plan, which clarifies scope and access. It does not describe pagination or rate-limit behavior, so it is not fully comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then gives usage guidance, then access/pricing context. It is compact and every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter list tool with no output schema, the description explains what is returned at a useful level: program facts, 30-day KPIs, and all-time views. It also covers usage and alternatives, though it leaves pagination and filter behavior to the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, and the schema already documents most filters and enums. The description mentions markets and all-time views in the return data, but does not add input-filter semantics for query, sort, sizes, platforms, categories, pay_rate, cursor, or pagination. Its parameter-level value is therefore adequate but not compensating for the remaining coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: browse the curated UGC Brands database. It clarifies the domain (brands that run UGC creator programs) and the returned facts (program.pay, hashtags, markets, KPIs, all-time views). It also distinguishes this tool from research_company for brands not listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it: when the user asks how a known brand runs its UGC program or wants programs to copy. It also names research_company as the alternative for brands not in the curated database, giving a clear when-not condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_crm_listManage CRM ListADestructiveIdempotentInspect
Create, rename or delete one of the user's custom Creator CRM lists (the CRM sidebar lists; different from search result lists). Use get_crm_overview to see existing lists and update_crm_lead list_ids to add creators. delete removes the list only (creators stay in the CRM) and needs the preview + confirmation_token step. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| name | No | Required for create and rename. | |
| action | Yes | ||
| list_id | No | Required for rename and delete. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the description's real contribution is the blast-radius clarification that delete removes only the list while creators remain in the CRM, plus the two-step preview/confirm flow and the cost note ('Free'). It stops short of describing what create/rename do on duplicate names or what the response contains, but given the annotation coverage 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the operation set and immediately followed by disambiguation and prerequisites. Slightly run-on with parentheticals, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no output schema, the description covers what an agent most needs beyond the schema: the danger model of delete, the confirmation protocol, sibling routing, and cost. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the enum on `action` and the requiredness of `name`/`list_id` are already documented. The description reinforces the confirmation_token handshake but adds no new meaning about the `uid`/`bearer_token` auth alternatives or name length limits — baseline 3 is appropriate when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (create, rename, delete) against a precisely scoped resource (the user's custom Creator CRM sidebar lists) and explicitly distinguishes it from search result lists, which is the most likely point of confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the companion call for inspecting existing lists (get_crm_overview) and the one for populating them (update_crm_lead list_ids), and states the precondition that delete requires the preview + confirmation_token step. An agent knows both when to call this and which route to take for adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_crm_notes_and_tasksManage CRM Notes And TasksADestructiveInspect
Work on one CRM creator's record: add_note / edit_note / delete_note (body, note_id), add_task (title, optional due_at as YYYY-MM-DD or ISO time; a bare date means 09:00 UTC), complete_task / reopen_task / delete_task (task_id), or log_touch to record outreach (channel email, dm, call or other, optional text; the first touch moves a sourced creator to contacted). Returns the updated creator. Free. Only delete when the user asks.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| body | No | Note text for add_note / edit_note. | |
| text | No | Optional detail for log_touch. | |
| title | No | Task title for add_task. | |
| action | Yes | ||
| due_at | No | Task due date for add_task. | |
| channel | No | For log_touch. | |
| lead_id | Yes | ||
| note_id | No | ||
| task_id | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, and the description reinforces the destructive path with 'Only delete when the user asks'. It adds genuinely non-schema behavior: the cost is free, the tool returns the updated creator, and log_touch has a state transition ('the first touch moves a sourced creator to contacted') that an agent could not infer otherwise. Auth details are left to the schema's uid/bearer_token descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and scope, and every clause carries information — the action-to-parameter mapping, the date semantics, the side effect, and the deletion guard. It is a single dense run-on paragraph, which costs a little readability, but there is no filler to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-action, 12-parameter destructive dispatcher, the description covers scope, per-action parameters, return value, cost, and the key state transition. It leaves authentication and idempotency-retry behavior to the schema's own parameter descriptions, which is reasonable given they are documented there.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage across 12 parameters, the description does real work by mapping each parameter group to its action (body/note_id for notes, title/due_at for tasks, task_id for complete/reopen/delete, channel/text for log_touch). It also adds format semantics the schema lacks: due_at accepts YYYY-MM-DD or ISO, and a bare date resolves to 09:00 UTC.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely (one CRM creator's record) and enumerates the eight action values it accepts, so an agent knows exactly what operations are available. It does not, however, contrast itself with near-siblings like update_crm_lead or remove_crm_lead, so the boundary is only implicit in the action list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is limited to 'Only delete when the user asks' and the cost signal 'Free'. That gives a real when-not rule for the destructive path, but there is no routing guidance for choosing this tool over update_crm_lead, save_creator_to_crm, or list_crm_leads when a user asks to 'update a lead'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_tracking_collectionManage Tracking CollectionADestructiveIdempotentInspect
Create, update or delete a Creator Tracking collection (a campaign). Only posts whose caption contains a match term (e.g. #brand) inside starts_at..ends_at count toward it; target_cpm, budget and posts_per_week drive the payout and posting-target views. update changes any field you pass. delete keeps the creators tracked without a collection and needs the preview + confirmation_token step. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| name | No | Required for create. | |
| action | Yes | ||
| budget | No | ||
| ends_at | No | ||
| starts_at | No | ISO 8601 date or time; a bare date is UTC midnight. | |
| target_cpm | No | ||
| match_terms | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| collection_id | No | Required for update and delete. | |
| posts_per_week | No | ||
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds non-obvious behavior beyond them – that delete leaves creators tracked but collection-less, that delete requires a two-turn preview/confirm flow, and that update is a sparse patch. It also discloses the tool is 'Free', which is cost context annotations cannot carry. Missing: who can call it and what a create returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action set, then layers domain semantics, then per-action details – a sensible ordering. It is dense and semicolon-chained, so a couple of clauses (the 'Free' aside) read as tacked on rather than integrated, but no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, no-output-schema mutation tool, the description covers the high-risk parts: destructive delete flow, sparse update, and the matching semantics that determine what the collection actually measures. Gaps are minor – no mention of the auth/uid fallback or what the confirmation preview contains (schema covers the token mechanics).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema description coverage, the description usefully compensates: it explains the operational meaning of match_terms (caption must contain a term), the starts_at..ends_at window as the counting scope, and that target_cpm/budget/posts_per_week drive payout and posting-target views rather than being mere fields. Primary keys (collection_id, name) are left entirely to the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb set and resource ('Create, update or delete a Creator Tracking collection'), then defines the domain concept (a campaign, posts matched by caption term within a date window). This distinguishes it well from list/get siblings, but it never names an alternative such as track_creators or untrack_creator, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives per-action guidance: 'update changes any field you pass' establishes partial-update semantics, and delete is explicitly gated behind 'the preview + confirmation_token step'. No sibling tool is named as an alternative, so cross-tool routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_automationPause AutomationAIdempotentInspect
Pause an owned automation without canceling active runs or pending deliveries. Future scheduling stops, nextRunAt becomes null, and the operation is idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds concrete behavioral details beyond annotations: future scheduling stops, nextRunAt becomes null, and active runs/pending deliveries are unaffected. It also reiterates idempotency (already in annotations). It does not mention permissions or rate limits, but for a simple pause operation, this is quite transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core action and key behavioral effects. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and annotations covering safety, the description is nearly complete: it explains what the tool does, what happens to scheduling, and what is not affected. It could mention authentication needs or edge cases, but overall it provides sufficient context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (83%), so the schema already documents most parameters. The description does not add any parameter-specific meaning, and the one parameter lacking a schema description (automation_id) is not clarified in the description. Baseline 3 is appropriate given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Pause) and resource (automation), and clarifies that active runs and pending deliveries are not canceled, which distinguishes it from delete_automation. However, it does not explicitly name sibling tools like resume_automation or delete_automation, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you want to stop future scheduling but keep active runs) but does not explicitly state when to use it versus alternatives such as delete_automation or resume_automation. No exclusions or explicit comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_automation_deletionPreview Automation DeletionARead-onlyIdempotentInspect
Read-only deletion preview. Show this automation summary and confirmation token to the user, then wait for a new confirmation turn before calling delete_automation.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
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 the genuinely useful part – this produces a summary plus a confirmation token that must be relayed and awaited. It stops short of stating token lifetime, whether the preview expires, or what happens if the token is reused.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: the first establishes the read-only nature, the second gives the required agent workflow. The key constraint is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters, 83% schema coverage, and no output schema, the description usefully reveals that the return carries an automation summary and a confirmation token – information an agent would otherwise lack. It does not say which automation is selected when automation_id is omitted, a minor remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents uid, bearer_token, conversation_id, preferences_mode and agent_preferences; only automation_id is bare. The description adds no parameter meaning of its own, which is acceptable at this coverage level but earns no premium.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Read-only deletion preview" states a specific verb (preview) and resource (automation deletion), and it explicitly names the sibling it precedes, delete_automation, so an agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit workflow condition: show the summary and confirmation token to the user, then wait for a new confirmation turn before calling delete_automation. That is both the when (before a destructive call) and the ordering constraint, 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.
refresh_trackingRefresh TrackingAIdempotentInspect
Re-scrape tracked creators' latest videos. With account_id: refresh that creator now and return fresh numbers (stored data if it was refreshed in the last 10 minutes). Without: queue every creator not refreshed in the last 10 minutes; numbers update over the next minutes. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| account_id | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the 10-minute freshness window for both modes, that the no-account_id path is queued with numbers updating over the next minutes (async), and that the call is free. These are exactly the behavioral facts an agent needs and none are derivable from the readOnlyHint/idempotentHint flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the with/without branching, then the cost note. No filler and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers timing, cost, and sync/async semantics well enough to call the tool correctly, but it never hints at what 'fresh numbers' contains or what the queued response returns, leaving the agent to infer the result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (uid, bearer_token, idempotency_key documented; account_id bare), and the description fills the key gap by explaining that account_id switches the tool into single-creator synchronous refresh. It adds no guidance on uid, bearer_token, or idempotency_key, but those are already covered in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Re-scrape tracked creators' latest videos') and immediately splits the two operating modes. An agent can distinguish this from track_creators, untrack_creator, and update_tracked_account without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to pass account_id (refresh one creator now, synchronous fresh numbers) versus omitting it (queue all stale creators, asynchronous update). It does not name a read-only sibling such as get_tracking_dashboard or list_tracked_videos as the alternative when the agent only wants to view data, so it falls short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_crm_leadRemove CRM CreatorADestructiveIdempotentInspect
Permanently remove a creator from the user's Creator CRM, including its notes, tasks and deal terms. Destructive: the first call returns a preview and confirmation_token; call again with the token only after the user confirms in a later turn. Removed creators are not delivered again by searches.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| lead_id | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint and idempotentHint, but the description adds what the annotations cannot: exactly what else is destroyed (notes, tasks, deal terms), that the operation is two-phase with a preview and confirmation_token, and that removed creators stay excluded from future searches. The token flow in particular is behavior an agent cannot infer from 'destructive'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it does, how the two-step confirmation works, and the lasting consequence. The destructive warning and the confirmation protocol are front-loaded where an agent will see them before acting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the cascade, the confirmation protocol, and the post-removal search behavior. It does not say what the preview call returns or what auth/permissions are required, which the uid and bearer_token parameters hint at but never explain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the schema already describes confirmation_token, but the description reinforces the sequencing rule beyond the schema ('call again with the token only after the user confirms in a later turn'), which matters because it forces a turn boundary. lead_id, the one required parameter, has no description in either place, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Permanently remove a creator from the user's Creator CRM') and immediately scopes the blast radius with 'including its notes, tasks and deal terms'. That cascade detail is what separates it from siblings like remove_leads or untrack_creator, so an agent can discriminate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: it is destructive, needs a preview + user confirmation in a later turn, and removal is persistent ('not delivered again by searches'). It never names the alternative siblings (remove_leads, untrack_creator, update_crm_lead), so there is no explicit when-not guidance, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_leadsRemove LeadsCDestructiveIdempotentInspect
Remove kept leads by exact handle.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| handles | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds only that matching is exact-handle, and says nothing beyond that about permanence, whether removed leads return to a discovery pool, or scope constraints involving uid (the schema hints at a URL/uid match requirement). Those operationally important facts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, six-parameter mutation with no output schema and several interacting auth/preferences parameters, yet the description is one sentence. It omits irreversibility, state effects, and the uid/URL relationship that the schema alludes to, leaving an agent under-informed before an irreversible call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83% and most parameters (uid, bearer_token, conversation_id, preferences_mode, agent_preferences) are documented in the schema itself. The description contributes one genuine detail the schema lacks: that handles are matched exactly, which bears on the required handles array. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Remove kept leads by exact handle" gives a verb and resource, but "kept leads" is undefined jargon and the description does nothing to distinguish this from nearby siblings such as remove_crm_lead, list_leads, or send_leads_to_campaign. The matching rule (exact handle) is the only disambiguating detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus remove_crm_lead or when merely updating a lead is appropriate, and no mention of prerequisites. The reader must infer all usage context 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.
rename_chatRename ChatAIdempotentInspect
Rename one of the user's chats. The new name shows everywhere the chat appears: the app.ugcagent.app sidebar, list_chats and the API. Identify the chat with chat_id (from list_chats) or with the list_id that run_ugc_agent returned. Only rename when the user asks for it. Whitespace is collapsed and names are capped at 80 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| title | Yes | The new chat name. Must not be blank. | |
| chat_id | No | The chat_id from list_chats. | |
| list_id | No | The list_id returned by run_ugc_agent, to rename the chat that search created. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey non-destructive, idempotent, non-readonly behavior, so the description's added context is what counts: it discloses the side effect scope (sidebar, list_chats, API) plus the mutation rules (whitespace collapsed, 80-char cap). It stops short of saying whether a failed rename leaves the old name intact, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences with the action and propagation front-loaded, followed by identification, a usage guardrail, and normalization rules. Every sentence carries information; nothing repeats the title or schema verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-field mutation with no output schema, the description covers effect, identification, guardrail and normalization adequately. It is slightly thin on what happens when neither chat_id nor list_id resolves, and on whether an error is returned for over-long or blank titles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema for the title parameter (whitespace collapsing and an 80-character cap) and explains provenance for chat_id and list_id. The uid/bearer_token auth parameters are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rename one of the user's chats') and clearly distinguishes itself from sibling read/list tools like get_chat, list_chats and delete_chat. The propagation note ('shows everywhere the chat appears') further scopes what the operation touches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Only rename when the user asks for it' gives an explicit when-to-use constraint, and the description identifies which identifier to use from which producing tool (chat_id from list_chats, list_id from run_ugc_agent). No explicit when-not-to-use case versus delete_chat or reset_conversation, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_companyResearch CompanyARead-onlyIdempotentInspect
Research a brand/product/company so the LLM can derive niche and creator-search angles. Set for_collab_search=true when the user wants creators who ALREADY worked with this brand — also researches its official Instagram/TikTok handles and hashtags for find_brand_creators.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| query | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| for_collab_search | No | Set true for brand-collab sourcing (finding creators who already worked with this brand). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, idempotent, openWorld, non-destructive), so the lower bar applies. The description adds real behavioral value: it discloses that the tool scrapes/researches official Instagram and TikTok handles and hashtags, which is not derivable from the schema and signals external lookups.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: the first states the purpose, the second the collab-search branch and its downstream tool. Front-loaded with the core action, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing what gets researched (handles, hashtags, niche angles) and how the result feeds find_brand_creators. It omits return shape and any latency/cost signal for an openWorld research call, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the schema already documents uid, bearer_token, conversation_id, and preferences_mode. The description reinforces for_collab_search but largely repeats what the schema already says about it, and adds nothing about query content or how conversation_id chains lists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Research a brand/product/company' with a stated purpose (derive niche and creator-search angles). The second sentence further distinguishes it by naming the downstream sibling find_brand_creators and the official Instagram/TikTok handle+hashtag research it performs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear conditional: set for_collab_search=true when the user wants creators who ALREADY worked with this brand, and links to find_brand_creators as the follow-on. It does not state exclusions (e.g., when to use discover_creators or analyze_seed_creators instead), 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.
reset_conversationReset ConversationADestructiveIdempotentInspect
Clear queued candidates, processed handles, seed criteria, and kept leads for an MCP conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is established. The description adds meaningful detail by naming exactly which saved artifacts are cleared: queued candidates, processed handles, seed criteria, and kept leads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It leads with the action and then lists the affected data, which is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive reset with no output schema and fully documented parameters, the description gives enough information about what state is cleared. It could be stronger by clarifying whether the conversation itself persists and how it relates to delete_chat, but the core effect is sufficiently described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all five parameters, including conversation_id and preferences_mode. The description adds no parameter-level semantics beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'clear', followed by a concrete list of resources that are cleared, so the agent can understand the operation. However, it does not explicitly distinguish this state reset from siblings such as delete_chat or remove_leads, and 'MCP conversation' leaves some ambiguity about what conversation object is affected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what is cleared but gives no guidance on when to use this tool, when not to use it, or which alternatives apply. With destructive siblings like delete_chat and remove_leads, the absence of routing guidance is a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_automationResume AutomationAIdempotentInspect
Resume an owned paused automation and schedule its next normal frequency-aware occurrence. It never triggers an immediate batch and the operation is idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the description restating idempotency adds little. However, 'never triggers an immediate batch' and 'schedule its next normal frequency-aware occurrence' are genuine side-effect disclosures the annotations do 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler, and the two most decision-relevant facts (no immediate batch, idempotent) are front-loaded after the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation with no output schema, the description covers the behavioral shape but says nothing about what is returned, what happens if the automation is not paused or not owned, or how conversation_id/preferences affect the call. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents uid, bearer_token, conversation_id, and preferences_mode. The description mentions no parameter at all; baseline 3 applies where structured fields do the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resume an owned paused automation') plus the resulting scheduling behavior, which makes it clearly distinct from create_* and update_* siblings. It stops short of naming the alternative it is contrasted with (run_automation_now), but the implied contrast is legible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Resume an owned paused automation' plus 'never triggers an immediate batch' effectively tells an agent when this applies and rules out the immediate-execution case. The alternative to use in that case (run_automation_now) is not named explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_automation_deliveryRetry Automation DeliveryAIdempotentInspect
Reset an eligible succeeded or partial lead or trend-research run with failed delivery to pending so Railway retries it on the next cron tick. Manual and generation-failed runs are not deliverable; ownership and generation are checked.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| run_id | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses real behavioral context: the reset targets pending state and retry happens asynchronously on the next cron tick, not immediately, and ownership/generation are validated server-side. It doesn't say what the caller sees when eligibility checks fail, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both information-dense: the action and its async consequence first, the eligibility constraints second. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param, zero-required mutation tool with no output schema and full annotation coverage, the description supplies the essentials: what state change occurs, when it takes effect, and which runs are ineligible. Caller-visible failure modes are the only notable omission and are minor against the annotated safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71% and the description adds no parameter-level meaning at all — it never says whether run_id or automation_id identifies the target, nor how uid/bearer_token interact with the URL identity described in the schema. With coverage in the middle band the schema carries most of the load, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a precise verb chain ('Reset ... to pending so Railway retries it') and names the exact resource states it operates on: a succeeded or partial lead or trend-research run with failed delivery. The eligibility sentence ('Manual and generation-failed runs are not deliverable') separates it from run_automation_now and test_automation_delivery without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-not conditions: manual runs and generation-failed runs are out of scope, and eligibility requires a succeeded/partial run that failed delivery. What's missing is a named alternative — it never says 'use run_automation_now if the generation itself failed' or similar, so the agent must infer the fallback path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_applicationsReview ApplicationsAIdempotentInspect
Score and rank applications against the program criteria (re-scores them; never changes statuses). Without application_ids it reviews the newest imports up to limit. Set analyze_accounts=true only when the user wants applicants' public Instagram/TikTok accounts checked: slower, uses one API call for API-key connections, keep limit small (25 or less). Recommends only; never claim anyone was accepted or rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| limit | No | How many recent applications to review (default 100). | |
| criteria | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| application_ids | No | ||
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. | |
| analyze_accounts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that re-scoring happens but statuses are never altered, that account analysis is slower and consumes one API call for API-key connections (relevant to openWorldHint), and that output is advisory only. This is exactly the kind of side-effect and cost 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well ordered: core operation first, default behavior next, conditional flag with its cost, then the advisory caveat. Every sentence carries information; only slight compression would be possible without losing the cost and safety caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param, no-output-schema tool with openWorld and idempotent annotations, the description supplies the missing behavioral and cost picture. The one real gap is the return shape (what a score/ranking looks like, whether recommendations are per-applicant), which the agent must infer since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 57%, and the description compensates for the operationally important params: application_ids selects the default-vs-explicit mode, limit caps the newest imports, and analyze_accounts carries its own usage guidance. It leaves uid, bearer_token, and idempotency_key to the schema, which already documents those three, but adds nothing for criteria beyond 'program criteria'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Score and rank applications against the program criteria') and immediately clarifies it re-scores without changing statuses, which cleanly separates it from update_application_status and list_applications. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly covers the default path ('without application_ids it reviews the newest imports up to limit') and the conditional path ('Set analyze_accounts=true only when the user wants applicants' public accounts checked'), including the cost tradeoff and a concrete limit ceiling. The 'Recommends only' clause tells the agent what not to claim downstream.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_automation_nowRun Automation NowAIdempotentInspect
Make an owned active automation due immediately for the Railway scheduler. It does not change the recurrence, create a run ID, or run synchronously; the next cron tick claims it.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations, which only cover safety/idempotency flags. The description discloses that recurrence is unchanged, no run ID is returned, the call is asynchronous, and the next cron tick performs the claim — exactly the post-call behavior an agent needs to avoid polling for a run ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with the action front-loaded and the behavioral caveats following. Every clause carries information; nothing is redundant with the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the outcome (no run ID, deferred execution). It is nearly complete for a 6-parameter tool, but leaves ambiguous which parameter selects the automation given that no parameters are marked required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents uid, bearer_token, conversation_id, preferences_mode, and agent_preferences. The description adds no parameter-level meaning, and notably does not clarify that automation_id is the operative identifier despite zero required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Make an owned active automation due immediately') and pins the target system ('Railway scheduler'). It implicitly separates itself from run-oriented siblings by saying it does not run synchronously, though it never names an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'due immediately' implies the use case (trigger an automation now rather than wait for its schedule), and the preconditions 'owned active' narrow applicability. However, there is no explicit when-to-use/when-not-to-use guidance and no sibling (e.g. pause_automation, resume_automation, get_automation_run) is referenced as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_ugc_agentRun UGC AgentAInspect
Run a full UGC Agent sourcing/refine/export turn on the web app's search engine. Returns an app_url for table review and CSV export. Small targets finish inside the call and return the creators. A longer search returns status 'running' with list_id, found_so_far and an instruction: wait about 30 seconds and call get_run_status with that list_id instead of calling this tool again. Negations in the goal are honoured; plan limits, stored preferences and cross-run dedupe are applied by the web app for the signed-in user.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| goal | Yes | Plain-English sourcing/refine/export request. | |
| target | No | Fallback number of new leads to add. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| seed_handles | No | Example Instagram handles/URLs for 'find more like these'. | |
| exclude_niches | No | Verticals the user ruled OUT ('any niche but photography' -> ['photography']). Negations written in the goal are also honoured automatically. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| exclude_locations | No | Markets the user ruled OUT, as ISO country codes ('any country except India' -> ['IN']). Negations written in the goal are also honoured automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations say readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds substantial context beyond them: synchronous versus asynchronous return shapes, the 30-second polling instruction, negation handling, plan limits, stored preferences, and cross-run dedupe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it opens with the core action, then covers the two return modes, the async polling instruction, and applied defaults. Every sentence carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, no output schema, and non-idempotent/open-world annotations, the description supplies the key missing behavioral detail: what the tool returns in fast versus long-running cases and how to continue. Parameter details are already covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 10 parameters in detail. The description reinforces goal negation handling and stored-preference behavior, but it does not add parameter-level syntax or format details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: running a full UGC Agent sourcing/refine/export turn on the web app's search engine. It also distinguishes the tool from get_run_status by explaining when the call finishes synchronously versus when status polling is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the small-target case, the longer-search case, and the required alternative: call get_run_status with the returned list_id instead of calling run_ugc_agent again. This is exactly the when-to-use/when-to-switch guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_creator_to_crmSave Creator To CRMAIdempotentInspect
Save one creator from the UGC Database into the user's Creator CRM by platform and handle (the app's unlock). Costs 1 lead from the monthly lead pool unless the creator was already delivered to the user; needs a plan that can unlock (Pro or higher). Two steps: the first call returns a preview and confirmation_token; call again with the token only after the user agrees to spend the lead. Fails with creator_not_found when the creator is not in the UGC Database (run a search instead).
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| tags | No | ||
| stage | No | ||
| handle | Yes | Creator handle, with or without @. | |
| list_ids | No | CRM list ids to add the creator to. | |
| platform | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavior well beyond the annotations: a lead is consumed from a monthly pool, already-delivered creators are free, a plan tier is required, and the call is a two-step preview/confirm flow. It names the concrete error code and its remedy. Annotations only say it is non-destructive and idempotent; the description carries the real cost and sequencing semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the action and lookup key, then cost/eligibility, then the two-step protocol, then the failure mode and remedy. No filler and no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does cover the first-call return (preview plus confirmation_token) and the second-call requirement, which is the critical thing an agent needs. It does not say what the final saved record looks like or how tags/stage/list_ids affect the save, a minor gap for an 8-parameter mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63%, roughly baseline territory. The description explains the confirmation_token protocol ('call again with the token only after the user agrees to spend the lead') and that the lookup key is platform + handle, but tags, stage, list_ids, uid and bearer_token get no mention, so half the non-required surface is left to the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Save one creator from the UGC Database into the user's Creator CRM by platform and handle.' It also identifies the operation as the app's unlock, which separates it from generic CRM write siblings like update_crm_lead and remove_crm_lead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear gating conditions (plan must be Pro or higher; lead cost) and an explicit alternative for the failure path: 'Fails with creator_not_found ... (run a search instead).' It does not, however, explain how this differs from the sibling unlock_ugc_database_creators, which appears to perform the same unlock operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ugc_databaseSearch UGC DatabaseARead-onlyIdempotentInspect
Instantly browse the UGC Database: tens of thousands of already-sourced, email-verified Instagram and TikTok creators, with filters for niche, followers, country, state/region, city, language, gender, estimated age, email type, signals (ugc, portfolio, collabs, proven, for_hire), brands worked with, hit rate, median views, creator type, services, portfolio type, content style (on camera, setting, production), brand saturation and stated rate (max_rate_usd). Proven UGC: each creator's proven lists brands they verifiably made UGC for (videos, median and best views) and performance gives their hit rate (share of posts past 10K / 100K views); to hire creators whose UGC already hit, use signals=['proven'] or brands, plus min_hit_rate, and sort='proven' or 'hit_rate'. Stated rates: rate_min_usd (from $X per UGC video, in USD) and rates (item, price, currency, usd, unit) are the creator's own prices from their rate card or portfolio page (self-published, not verified; say so when you quote them), with turnaround_days and portfolio_brands (past clients the page lists, also in claimed_brands and brands_worked); for a budget use max_rate_usd and sort='rate_asc'. Proof post URLs, sample_videos and portfolio_pages stay hidden until unlocked. No search run and no charge; emails stay masked until unlocked. Try this before run_ugc_agent when the user wants creators fast. Pass creator_id to get one creator's full profile. Use unlock_ugc_database_creators to reveal emails, proof posts and sample videos.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| sort | No | fit (default); proven = verified UGC brand work first; hit_rate = share of posts past 10K views; median_views = median views per post; rate_asc = lowest stated UGC video rate first (creators without one last). | |
| view | No | all (default), net_new = not yet delivered to the user, unlocked = already unlocked. | |
| limit | No | Page size, 1-100 (default 25). | |
| query | No | Word-prefix search over handle, name, niche, labels and bio ('ugc' matches kit.ugc). | |
| tiers | No | starter 0-999, nano 1k-9,999, micro 10k-99,999, mid 100k-499,999, macro 500k+ followers. | |
| brands | No | Worked with any of these brands ('Poppi', 'Cal AI'), verified (proven) or named in their bio; case-insensitive. get_ugc_database_facets lists brand names. | |
| cities | No | Cities the creator says they are based in, English names ('Austin', 'London', 'Mexico City'); case-insensitive. Combine with countries to disambiguate. | |
| cursor | No | The next_cursor from the previous page. Keep the other filters identical. | |
| niches | No | Niche labels or keys; use get_ugc_database_facets for valid values. | |
| genders | No | ||
| regions | No | States or regions the creator says they are based in, English names ('Texas', 'England', 'Ontario'); case-insensitive. Combine with countries to disambiguate. get_ugc_database_facets lists valid values. | |
| signals | No | All must match: ugc wording, portfolio link, brand collabs, engagement stats, untapped (no other brand got this creator), proven (verified UGC made for at least one brand, with proof posts), for_hire (says they take paid UGC work), has_rates (publishes their own rates on a rate card or portfolio page). | |
| services | No | Offers any of these services. | |
| settings | No | Where their recent posts are usually filmed. | |
| age_bands | No | Estimated age band from profile photos and bio (an estimate, not a verified age); unknown = not estimated. | |
| countries | No | ISO alpha-2 codes (GB is read as UK), or 'unknown'. | |
| languages | No | ||
| on_camera | No | Appears on camera in recent posts (no = faceless). | |
| platforms | No | ||
| creator_id | No | A database creator id to fetch one creator. Filters are ignored. | |
| email_kinds | No | ||
| productions | No | Production style of recent posts. | |
| saturations | No | How many brands they already work with: fresh 0, low 1-2, medium 3-5, high 6+. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| max_rate_usd | No | Budget cap in USD: only creators whose lowest stated UGC video rate (rate_min_usd) is at or below this. Creators who state no rate are excluded. Rates are self-published by the creator, not verified. | |
| min_hit_rate | No | Minimum hit rate: share of the creator's posts with 10,000+ views, as a 0-1 fraction (0.25 = 25%). Creators without post metrics are excluded. | |
| creator_types | No | Account type; ugc_creator and both are creators who make UGC for brands. | |
| max_followers | No | ||
| min_followers | No | ||
| exclude_niches | No | ||
| portfolio_types | No | Where the creator keeps their portfolio, from their links. | |
| min_median_views | No | Minimum median views per post. | |
| added_within_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing cost ('No search run and no charge'), data masking ('emails stay masked until unlocked', proof post URLs/sample_videos/portfolio_pages hidden), and data provenance ('self-published, not verified; say so when you quote them'). It also explains what `proven` and `performance` actually contain, which no annotation covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key differentiator are front-loaded, and the three paragraphs map to browse / proven / rates concerns. It is dense and long, and the rate-card sentence packs several field names into one clause, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 34-parameter, zero-required search tool with no output schema, the description covers the essentials an agent needs: cost, privacy/masking, the recommended fast path, the unlock follow-up, and the shape of the returned creator fields. Pagination via cursor is left to the schema, which documents it adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 34 parameters at 76% schema coverage, the description adds real value by explaining how filters combine and which sort to pair with which filter (max_rate_usd + sort='rate_asc', min_hit_rate + sort='hit_rate'). It also defines return-side fields (rate_min_usd, rates, turnaround_days, portfolio_brands) that the schema only names. It does not touch many remaining filters (view, tiers, saturations, settings), so it is additive but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('browse the UGC Database') and immediately scopes it: tens of thousands of email-verified Instagram and TikTok creators with a named filter set. It is clearly distinguishable from siblings like run_ugc_agent (slower agentic path), unlock_ugc_database_creators (reveals hidden fields), and get_ugc_database_facets (facet lookup).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Try this before run_ugc_agent when the user wants creators fast' and 'Use unlock_ugc_database_creators to reveal emails, proof posts and sample videos.' It also states the single-creator mode ('Pass creator_id to get one creator's full profile') and gives concrete filter recipes ('signals=[\'proven\'] or brands, plus min_hit_rate, and sort=\'proven\' or \'hit_rate\'').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_leads_to_campaignSend Leads To CampaignAIdempotentInspect
Add unlocked creators with emails to an Instantly or Smartlead campaign, the app's Send to Instantly/Smartlead: the campaign may start emailing them. Use CRM lead ids (list_crm_leads), or chat lead ids together with that chat's chat_id or list_id. Already-sent creators are skipped. Two steps: the first call returns a preview and confirmation_token; call again with the token only after the user confirms the campaign. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| chat_id | No | The chat_id from list_chats. | |
| list_id | No | Or the list_id run_ugc_agent returned, for the chat that search created. | |
| lead_ids | Yes | ||
| provider | Yes | ||
| campaign_id | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses the key side effect that the campaign may start emailing recipients, the two-step preview/confirmation flow, the skip behavior for already-sent creators, and that the call is free. These are material operational traits not captured by the annotations. The description is consistent with readOnlyHint=false and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and outcome, then moves into input sourcing and the confirmation flow. It is dense but efficient; the parenthetical app-reference wording is slightly redundant. Every sentence adds useful operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the essential workflow, side effects, lead-id sourcing, and confirmation requirement. It does not describe what the preview contains or how to obtain campaign_id, but the annotations and schema carry some of that burden. An agent has enough to invoke it correctly, with minor remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 63% schema coverage and 8 parameters, the description compensates for the most important gaps: where lead_ids come from, how chat_id/list_id are used, and how confirmation_token must be handled across the two calls. It does not explain where campaign_id comes from or clarify uid/bearer_token auth parameters, leaving some schema details to the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: adding unlocked creators with emails to an Instantly or Smartlead campaign. It clarifies the concrete outcome (the campaign may start emailing them), which distinguishes it from drafting/outreach tools among the siblings. An agent can tell exactly what this tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditions and sources: use CRM lead ids from list_crm_leads, or chat lead ids together with chat_id or list_id. It also defines the required two-step confirmation workflow and notes that already-sent creators are skipped. This is enough for an agent to choose the right inputs and sequence without guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_runStop RunAIdempotentInspect
Stop a search that run_ugc_agent started on the web app, by list_id. Use it only when the user asks to cancel or when get_run_status has reported 'running' for more than 15 minutes. Creators kept so far stay in the list; call get_run_status afterwards for the final count. Returns stopped=false when nothing was running, which is not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| list_id | No | The list_id returned by run_ugc_agent. Falls back to conversation_id when omitted. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses important side effects: creators already kept stay in the list, and stopped=false is a normal non-error result. It also directs a follow-up status check, which is valuable behavioral context for a non-read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action, then usage conditions, side effects, and no-op return behavior. Every sentence adds decision-relevant information without repetition or waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six schema-documented parameters and no output schema, the description covers purpose, when to use it, what persists, and the key non-error return case. An agent has enough context to invoke it correctly and interpret the likely outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented. The description reinforces list_id as the key input and its origin from run_ugc_agent, but it does not add meaning beyond the schema for the remaining parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: stop a search started by run_ugc_agent, keyed by list_id. It clearly distinguishes this control action from run_ugc_agent and get_run_status, so an agent can identify its role 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit triggering conditions: only when the user asks to cancel or when get_run_status has reported 'running' for more than 15 minutes. It also routes the agent to call get_run_status afterward, leaving little ambiguity about when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_automation_deliveryTest Automation DeliveryAInspect
Send the fixed-sample branded lead-automation email directly through Resend. This creates no run and consumes no quota; it requires the explicit test-delivery configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: no run record is created, no quota is consumed, and it requires the explicit test-delivery configuration to be enabled. It does not disclose that a real external email is sent via Resend (consistent with openWorldHint=true) or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the distinguishing behavioral guarantees front-loaded right after the action. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, an enum, and no output schema, the description leaves open which automation is used, what the response contains, and what the undefined 'explicit test-delivery configuration' refers to. Adequate for a simple send, but an agent still has gaps before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents almost every parameter (uid, bearer_token, conversation_id, preferences_mode, agent_preferences). The description mentions none of them and never explains how automation_id selects which sample is delivered, so it adds no parameter-level value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Send the fixed-sample branded lead-automation email directly through Resend'), which separates it from run_automation_now and retry_automation_delivery. What the 'fixed-sample' content actually is (and whether the caller can influence it) stays ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'This creates no run and consumes no quota' clearly signals the pre-flight/test use case versus real execution siblings. It stops short of naming run_automation_now or retry_automation_delivery as the alternatives for an actual send.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_creatorsTrack CreatorsAIdempotentInspect
Start tracking Instagram or TikTok creators' videos in Creator Tracking (from the CRM or any handle). Accepts handles (@mia, tt:mia), profile links or { handle, platform } objects. New accounts load in the background; check list_tracked_accounts until status is not pending. Entries past the plan's tracking cap (Free 5, Pro 25, Premium 100, Ultra 300) come back in skipped with the reason. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| source | No | crm when the creators come from the user's CRM (label only). | |
| accounts | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| collection_id | No | ||
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. | |
| default_platform | No | Platform for bare handles (default instagram). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses important behavior: new accounts load in the background, list_tracked_accounts should be checked until status is not pending, and over-cap entries are returned in skipped with a reason. These details materially help an agent handle the async processing and plan limits correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and then adds only operationally relevant details about input formats, background loading, status polling, and plan caps. Every sentence contributes useful context, and there is no redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the mutation/background-processing nature of the tool, the annotations, and the mostly described schema, the description includes the missing operational context an agent needs: async loading, follow-up polling, and cap/skipped behavior. No output schema exists, but the description still explains the key return condition around skipped entries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents 71% of parameters, but the description adds useful meaning for the complex accounts parameter by listing accepted formats: handles (@mia, tt:mia), profile links, and { handle, platform } objects. It does not cover every parameter, but it improves the most important one beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: start tracking Instagram or TikTok creators' videos in Creator Tracking. It clearly distinguishes this from listing or untracking siblings through the action wording and names list_tracked_accounts only as a follow-up. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it is for starting tracking from the CRM or any handle, and it explains the post-call polling flow via list_tracked_accounts. It does not explicitly name when-not-to-use cases or alternatives such as untrack_creator, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlock_ugc_database_creatorsUnlock UGC Database CreatorsAIdempotentInspect
Reveal the emails of UGC Database creators and save them to the user's Creator CRM, exactly like unlocking in the app. Costs 1 lead from the monthly lead pool per newly unlocked creator; creators already unlocked or delivered are free. Needs Pro or higher. Two steps: the first call returns the cost preview and a confirmation_token; call again with the token only after the user agrees to spend the leads.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| creator_ids | Yes | 1-100 database creator ids from search_ugc_database. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-read-only, idempotent, non-destructive; the description adds the billing model (1 lead per newly unlocked creator, free for already-unlocked/delivered), the entitlement requirement, and the two-phase confirmation protocol with the token. That cost and consent semantics are the real behavioral risk here and are fully disclosed, consistent 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the outcome, then cost, then the two-step protocol. No filler, and the ordering follows the order an agent must act in.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by stating what the first call returns (cost preview + confirmation_token) and what the second call does. Consent, cost, and entitlement are all covered, so nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3; the description adds value by explaining why confirmation_token is omitted on the first call and why creator_ids should come from search_ugc_database. It doesn't explain the uid/bearer_token fallback split, but the schema covers that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (reveal creator emails) plus the side effect (save to Creator CRM) and ties the ids to search_ugc_database. An agent can distinguish this from search_ugc_database and save_creator_to_crm without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisites (Pro or higher) and the gating condition (only re-call with the token after the user agrees to spend leads), which is exactly the sequencing an agent needs. It signals implicitly that this also persists to CRM, but never names save_creator_to_crm as the alternative for saving without unlocking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
untrack_creatorUntrack CreatorADestructiveIdempotentInspect
Stop tracking a creator and delete their stored video history and snapshots. Destructive: the first call returns a preview and confirmation_token; call again with the token only after the user confirms in a later turn.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| account_id | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| confirmation_token | No | Omit on the first call to get a preview and a token. Pass the token back unchanged only after the user confirmed the preview in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them by stating exactly what is destroyed (video history and snapshots) and by documenting the two-phase preview/token confirmation choreography. That two-step flow is invisible in the annotations and is the single most important behavior for invoking this tool safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler: the effect is stated first, then the safety protocol. The destructive warning is front-loaded where an agent will see it before acting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the action, the destroyed data, and the confirmation protocol, which is most of what an agent needs. It stops short of saying whether the creator record itself is removed from the tracked dashboard or what the preview response contains, but the annotations carry the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the confirmation_token description already explains the omit-then-pass-back protocol, so the description mostly restates it. The required account_id has no description in either schema or description, so nothing compensates for that gap. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Stop tracking') and resource ('a creator') and immediately states the consequence: deletion of stored video history and snapshots. This clearly separates it from update_tracked_account and track_creators, which the agent can rule out without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The destructive two-call protocol is spelled out ('first call returns a preview and confirmation_token; call again with the token only after the user confirms in a later turn'), which is clear operational context. It does not, however, name any alternative tool or the condition under which an agent should prefer update_tracked_account (e.g., to pause rather than delete) over this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_application_statusUpdate Application StatusAIdempotentInspect
Move one or more applications to new, shortlisted, rejected, accepted or contacted. Only call when the user explicitly asks to change statuses. Nothing is sent to the applicant. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| status | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| application_ids | Yes | ||
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true and a closed world, so the safety profile is covered. The description adds real value beyond that: 'Nothing is sent to the applicant' rules out external side effects and 'Free' signals no billing impact. It stops short of stating reversibility, per-ID partial failure behavior, or the 250-item cap's consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, purpose first, guard second, side effects third, cost last. Every sentence carries distinct information; nothing restates the title or is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk mutation of up to 250 IDs with no output schema, the description says nothing about what comes back — whether results are per-ID, how partial failures are reported, or whether an idempotency key changes the response. Annotations cover safety, and side-effect/cost are addressed, but the response shape is an unexplained gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description only re-lists the status enum values already enumerated in the schema. It adds no meaning for application_ids (bulk semantics, max 250), idempotency_key, uid or bearer_token beyond the schema's own text, so it neither compensates for nor compounds the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (move) and resource (one or more applications) plus the exact destination statuses, which is specific enough to separate it from read-oriented siblings like list_applications or review_applications. An agent can tell immediately that this is a bulk status mutation, not a review or listing call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit activation condition — 'Only call when the user explicitly asks to change statuses' — which is a genuine negative guard against proactive status edits. It does not name an alternative tool for adjacent needs (e.g. reviewing or reading applications), so routing 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.
update_automationUpdate Lead AutomationAIdempotentInspect
Explicit two-phase write; never infer or default configurable values. Timezone is not an update input; the stored timezone is shown in the preview and preserved. Supply automation_id and at least one explicit changed value; untouched stored values are preserved and are not re-asked. A complete call without confirmation_token only previews the full resulting configuration and changed fields; repeat the identical call with the token after later user confirmation to write.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| weekday | No | ||
| criteria | No | ||
| frequency | No | ||
| daily_time | No | ||
| lead_count | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| day_of_month | No | ||
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| recipient_email | No | ||
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| use_account_email | No | ||
| confirmation_token | No | Short-lived token from an identical complete preview. Supply only after the user confirms in a later turn. | |
| use_agent_preferences | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations: it discloses the two-phase preview/commit protocol, that a call without confirmation_token only previews, that the token is short-lived, that timezone is not an update input but is preserved and shown in the preview, and that untouched stored values are preserved and not re-asked. This is exactly the mutation-safety context an agent needs and is consistent with idempotentHint=true and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, with the most consequential rule (two-phase write, never infer values) front-loaded. The final sentence is long and packs preview-return shape, token reuse, and the confirmation gate into one clause chain, but every element is load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, zero-required mutation tool with no output schema, the description completely covers the safety workflow and what the preview returns, which is the hardest part. However, with 38% schema coverage it leaves a large share of parameters semantically unexplained, so an agent still cannot confidently choose which fields to send or what each does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 38% across 16 parameters, so the description must compensate and only partly does: it clarifies automation_id as required-in-practice, explicit values over defaults, the confirmation_token lifecycle, and the deliberate absence of timezone as an input. The many domain parameters (weekday, frequency, criteria, daily_time, lead_count, day_of_month, recipient_email, use_account_email) get no explanation beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description frames the tool as an 'explicit two-phase write' against a stored configuration identified by automation_id, with preview-then-commit semantics. It is clear what the tool does operationally, but it never states the concrete resource in plain terms (a lead automation's settings) nor distinguishes itself from siblings like update_trend_research_automation or create_lead_automation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong operational guidance: 'never infer or default configurable values', 'Supply automation_id and at least one explicit changed value', and 'repeat the identical call with the token after later user confirmation to write'. It covers the how-to-use flow thoroughly, but never names an alternative tool (e.g., create_lead_automation for new automations), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_auto_sendUpdate Auto-SendAIdempotentInspect
Turn automatic sending of new leads (from chat searches, run_ugc_agent, automations and applications) to an outreach campaign on or off. enabled=true with provider and campaign_id points it at a campaign; enabled=true alone re-arms the last campaign; enabled=false turns it off. Ask the user before enabling: creators will be emailed by that campaign. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| enabled | Yes | ||
| provider | No | ||
| campaign_id | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the real-world side effect the annotations can't capture: creators will be emailed by the selected campaign, plus it's free. That is exactly the extra context an agent needs before flipping the switch. It stops short of covering failure behaviour or what happens if the referenced campaign is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it controls, the mode matrix, the safety instruction. The critical 'ask the user first' warning lands before the trivial 'Free' note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, mode semantics, and the user-facing consequence of enabling, which is sufficient for a single required boolean flag with no output schema. Minor gap: no mention of behaviour when provider/campaign_id are invalid or when no previous campaign exists for the re-arm path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the description compensates by explaining the three meaningful combinations of enabled, provider and campaign_id – semantics the bare schema can't express. The remaining parameters (uid, bearer_token, idempotency_key) are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (turn automatic sending of new leads to an outreach campaign on/off) and names the lead sources it covers (chat searches, run_ugc_agent, automations, applications). This clearly separates it from send_leads_to_campaign, which sends a specific batch manually.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete mode-selection rules: enabled=true plus provider and campaign_id targets a campaign, enabled=true alone re-arms the last one, enabled=false disables. It also mandates asking the user first. It doesn't name the sibling tool to use instead for one-off manual sends, 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.
update_crm_leadUpdate CRM CreatorAIdempotentInspect
Move a CRM creator through the pipeline (sourced, contacted, replied, negotiating, hired, creating, delivered, paid, declined = not a fit) or edit deal terms (rate, currency, deliverables), rating, phone, first name, tags or CRM lists. tags and list_ids REPLACE the current values, so include the existing ones you want to keep. The timeline records each change like the app. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| rate | No | Rate per video; null clears. | |
| tags | No | ||
| phone | No | ||
| stage | No | ||
| rating | No | ||
| lead_id | Yes | ||
| currency | No | ||
| list_ids | No | ||
| first_name | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| deliverables | No | Number of videos; null clears. | |
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive and idempotent, so the description's added value is the critical warning that tags and list_ids REPLACE current values (must re-include existing entries), plus the timeline logging behavior and the 'Free' cost note. These are operational facts not derivable from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary action (stage movement) before secondary edits, and sentences are dense but purposeful. The parenthetical stage enumeration is long but earns its space as the authoritative value list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation tool with no output schema, the description covers the actionable surface and the replace-semantics trap. Only the authentication/uid params and the returned shape are left implicit, both of which are low-risk or annotated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 38% schema description coverage across 13 params, the description compensates well: it lists the stage values inline and maps rate/currency/deliverables/rating/phone/first_name/tags/list_ids to meanings, and adds replace semantics for collections. It omits uid, bearer_token, and idempotency_key, but those carry schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verbs (move, edit) plus resource (CRM creator/lead) and an explicit enumeration of the editable fields and pipeline stages. It clearly separates itself from save_creator_to_crm or remove_crm_lead by the field inventory, though it never names a sibling outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The replace-versus-append semantics for tags/list_ids is stated, which is real usage guidance, but there is no explicit when-to-use/when-not framing against siblings (e.g., create vs. update). The context is implied by the field list 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.
update_preferencesUpdate PreferencesAIdempotentInspect
Change the user's saved Agent Preferences: agent_preferences (default creator criteria for every search, max 2,000 characters, null clears), accept_no_email_leads, and the excluded creators list (add_excluded_emails / remove_excluded_emails, up to 2,000 each, 5,000 total). Changes show in the app immediately. Only call when the user explicitly asks to change saved settings; a one-off search constraint belongs in the search request. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. | |
| agent_preferences | No | ||
| add_excluded_emails | No | ||
| accept_no_email_leads | No | ||
| remove_excluded_emails | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false; the description adds real value on top by noting that changes are visible in the app immediately and that passing null for agent_preferences clears it. The one notable gap is partial-update semantics — with all 7 params optional, it never states whether omitting a field leaves it unchanged or clears it, which matters for a settings mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with the mutability details front-loaded and the usage restriction stated last as a guardrail. The parenthetical enumerations are information-dense but slightly heavy; nothing is outright wasted, though 'Free' arrives as a bare trailing fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 7 optional params, the description should clarify what the caller gets back and what an omitted field does — neither is addressed. It is otherwise adequate for a non-destructive settings mutation, but the omit-vs-clear ambiguity is a real decision the agent cannot resolve from the definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 43%, so the description has to compensate, and it largely does: it explains what agent_preferences actually is ('default creator criteria for every search'), that null clears it (not conveyed by the anyOf schema), and that add/remove excluded emails are additive operations capped at 2,000 each and 5,000 total. It leaves accept_no_email_leads undefined and says nothing beyond the schema about uid/bearer_token/idempotency_key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Change the user's saved Agent Preferences') and enumerates exactly which settings are mutable (agent_preferences, accept_no_email_leads, excluded creators list). It also distinguishes this write tool from search-time constraints and implicitly from the read-side get_preferences sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rule: 'Only call when the user explicitly asks to change saved settings; a one-off search constraint belongs in the search request.' This is the rare case where the description says both when to call and what to do instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tracked_accountUpdate Tracked AccountAIdempotentInspect
Move a tracked creator into or out of a tracking collection (collection_id, null removes), set what they are paid (fee with fee_basis flat, per_video or cpm; null clears) or mark the payout none, pending, approved, paid or assumed_paid. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| fee | No | ||
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| fee_basis | No | ||
| account_id | Yes | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key header or ?uid= in the URL instead. | |
| collection_id | No | ||
| payout_status | No | ||
| idempotency_key | No | Optional. Reuse the same value when retrying this exact call after a timeout so the write happens once; omit for a new write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotency and non-destructive behavior, and the description adds useful semantics such as null removing collection membership or clearing fee, plus that the operation is free. It does not fully explain partial-update behavior or auth requirements, but with annotations covering safety it adds good context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the meaningful operations and wastes little space. Each clause contributes specific update semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter mutation tool with no output schema, the description covers the main editable fields and null behavior adequately, while annotations cover idempotency and safety. It could be stronger by clarifying sibling selection and partial-update semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, so the description carries meaningful weight. It explains collection_id null semantics, ties fee to fee_basis, clarifies fee null clearing, and enumerates payout statuses, though it leaves account_id, uid, bearer_token, and idempotency_key largely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific update actions for a tracked creator: collection membership, fee/payment settings, and payout status. It is clear what the tool does, though it does not explicitly differentiate itself from nearby siblings such as untrack_creator or manage_tracking_collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists what can be changed but gives no explicit guidance on when to use this tool versus alternatives like untrack_creator or manage_tracking_collection. It also does not state when not to use it or what prerequisites apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_trend_research_automationUpdate Trend Research AutomationAIdempotentInspect
Explicit two-phase write; never infer or default configurable values. Timezone is not an update input; the stored timezone is shown in the preview and preserved. Supply automation_id and at least one explicit changed value; untouched stored values are preserved and are not re-asked. A complete call without confirmation_token only previews the full resulting configuration and changed fields; repeat the identical call with the token after later user confirmation to write.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Optional Firebase uid. Must match the URL uid unless local fallback is enabled. | |
| topic | No | ||
| weekday | No | ||
| platform | No | ||
| frequency | No | ||
| daily_time | No | ||
| bearer_token | No | Optional Firebase ID token. Hosted clients normally authenticate with an API key in the Authorization header or ?uid= in the URL instead. | |
| day_of_month | No | ||
| automation_id | No | ||
| conversation_id | No | Creator-list key for durable state. Reuse a returned list_id for follow-ups; when omitted, MCP uses the active generated list for this tool chain. | |
| recipient_email | No | ||
| preferences_mode | No | How to apply preferences for this call: 'stored' uses users/{uid}.agentPreferences, 'override' uses agent_preferences only, and 'none' disables stored filtering for this run. | |
| agent_preferences | No | Optional per-call filtering preferences. Use with preferences_mode='override'. For backwards compatibility, passing this without preferences_mode implies override. | |
| use_account_email | No | ||
| confirmation_token | No | Short-lived token from an identical complete preview. Supply only after the user confirms in a later turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the two-phase preview/write contract, that a tokenless call mutates nothing and returns the full resulting config plus changed fields, that untouched values are preserved, and that timezone is preserved rather than updatable. This is exactly the mutation-safety context annotations alone cannot convey, and it is consistent 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the two-phase constraint, and every sentence adds an operative rule (no inference, timezone handling, minimum change, preview/token flow). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-param mutation with no output schema, the description nails the safety-critical flow and the preservation semantics. It stops short of characterizing the domain fields the agent must actually set, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 40% schema coverage across 15 params, the description carries real weight: it explains automation_id, confirmation_token, the 'at least one changed value' rule, and the non-parameter status of timezone. However, the majority of parameters (topic, weekday, platform, frequency, daily_time, day_of_month, recipient_email, use_account_email, uid) get no semantic help in the description, leaving a substantial gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('explicit two-phase write' of a trend research automation's configuration) and makes the preview-then-write nature unambiguous. It never explicitly says what resource is being updated (only 'configurable values' and 'resulting configuration'), and it does not distinguish itself from the sibling update_automation, so a 4 is right.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear when-to-use rules: supply automation_id plus at least one explicit changed value, never infer or default values, and only pass confirmation_token after later user confirmation. It gives no guidance on when to choose this over the closely named update_automation sibling, which keeps it from a 5.
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.
2 tool updates
- Changed
get_ugc_brand4 fields changed- added
Input schema / properties / fromAdded value: +{ + "description": "overview only: custom range start, YYYY-MM-DD (UTC). Use instead of window.", + "pattern": "^\\d{4}-\\d{2}-\\d{2}", + "type": "string" +} - added
Input schema / properties / toAdded value: +{ + "description": "overview only: custom range end, YYYY-MM-DD inclusive (UTC). Defaults to today.", + "pattern": "^\\d{4}-\\d{2}-\\d{2}", + "type": "string" +} - changed
Input schema / properties / window / descriptionPrevious value: -"videos and playbook: last 30 days (default) or all time."New value: +"overview: rolling date window for `range` (default 30d). videos and playbook: 30d (default) or all only." - changed
Input schema / properties / window / enumPrevious value: -[ - "30d", - "all" -]New value: +[ + "7d", + "30d", + "90d", + "365d", + "all" +]
- Changed
list_ugc_brands2 fields changed- added
Input schema / properties / sort / descriptionAdded value: +"views_total = all-time views." - changed
Input schema / properties / sort / enumPrevious value: -[ - "views_30d", - "accounts", - "brand_videos_30d", - "name" -]New value: +[ + "views_30d", + "views_total", + "accounts", + "brand_videos_30d", + "name" +]
70 tool updates
- First observed
analyze_creator_content - First observed
analyze_seed_creators - First observed
create_lead_automation - First observed
create_trend_research_automation - First observed
delete_automation - First observed
delete_chat - First observed
discover_creators - First observed
draft_application_response - First observed
draft_creator_outreach - First observed
draft_ugc_script - First observed
enrich_and_score - First observed
export_crm_csv - First observed
export_csv - First observed
find_brand_creators - First observed
find_viral_trends - First observed
get_account - First observed
get_agent_context - First observed
get_automation_run - First observed
get_chat - First observed
get_crm_overview - First observed
get_preferences - First observed
get_run_status - First observed
get_tracking_dashboard - First observed
get_ugc_brand - First observed
get_ugc_database_facets - First observed
ideate_ugc_content - First observed
import_applications - First observed
list_applications - First observed
list_automation_runs - First observed
list_automations - First observed
list_chats - First observed
list_crm_leads - First observed
list_leads - First observed
list_outreach_campaigns - First observed
list_outreach_integrations - First observed
list_tracked_accounts - First observed
list_tracked_videos - First observed
list_ugc_brand_creators - First observed
list_ugc_brands - First observed
manage_crm_list - First observed
manage_crm_notes_and_tasks - First observed
manage_tracking_collection - First observed
pause_automation - First observed
preview_automation_deletion - First observed
refresh_tracking - First observed
remove_crm_lead - First observed
remove_leads - First observed
rename_chat - First observed
research_company - First observed
reset_conversation - First observed
resume_automation - First observed
retry_automation_delivery - First observed
review_applications - First observed
run_automation_now - First observed
run_ugc_agent - First observed
save_creator_to_crm - First observed
search_ugc_database - First observed
send_leads_to_campaign - First observed
stop_run - First observed
test_automation_delivery - First observed
track_creators - First observed
unlock_ugc_database_creators - First observed
untrack_creator - First observed
update_application_status - First observed
update_auto_send - First observed
update_automation - First observed
update_crm_lead - First observed
update_preferences - First observed
update_tracked_account - First observed
update_trend_research_automation
Publisher details
- Operator
- UGC Agent · Publisher source
- Operator website
- https://ugcagent.app · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://ugcagent.app/features/ugc-agent-mcp/ · Publisher source
- Trust center
- Not available
- Restrictions
- Paid plan required: MCP access needs a UGC Agent Premium, Ultra or Enterprise plan. Every plan starts with a 3-day trial. · Publisher source
Related MCP Connectors
Search 1.8M+ YouTube, TikTok and Instagram creators with emails and run outreach from your AI agent.
MCP tools to find and hire Instagram and TikTok creators from a plain-language brief.
Agent-first social media publishing, scheduling, analytics, and unified inbox API + 16-tool MCP server across 18 social platforms (X, LinkedIn, Instagram, YouTube, TikTok, Threads, Bluesky, Reddit, Telegram, Discord, Mastodon, Facebook, Pinterest).
UGC analytics and Creator Hub for TikTok, Instagram and YouTube: tracking, campaigns, jobs, events.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables searching the DACH UGC creator directory, viewing public creator profiles, and triggering brand outreach requests—all via MCP tools with no API key required.13 npm3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create, schedule, and analyze LinkedIn and X content, manage ideas, media, and a creator knowledge vault, and run approval-gated outreach campaigns through a hosted MCP endpoint.MIT
- AlicenseAqualityFmaintenanceInstagram influencer discovery for AI agents. One tool (search_leads) with filters for category, country, city, keyword, gender, follower range; returns username, bio, public business email (where available), verified/business flags. Pay-per-call in USDC on Base or Solana via x402 — no API keys. Free demo mode returns 3 preview results. Live at https://socialintel.dev/mcp.11MIT
- AlicenseNot gradedqualityCmaintenanceBrings social media analytics and content intelligence into any MCP-compatible AI agent, enabling analysis of your own videos, competitor research, and creator discovery via a hosted OAuth-authenticated server.10MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.