NotFair-MetaAds
Server Details
Meta Ads MCP (Facebook + Instagram) - analyze performance, manage budgets, pause campaigns.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- nowork-studio/toprank
- GitHub Stars
- 499
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.3/5 across 30 of 30 tools scored. Lowest: 3.3/5.
Most tools have distinct purposes with clear prefixes (create, enable, pause, rename, update, list). Minor overlap exists between generic update tools (updateAdSet, updateCampaign) and their budget-specific counterparts, but descriptions clarify the distinction.
The majority of tools follow a camelCase verb_noun pattern (e.g., createAd, listCampaigns), but a few use snake_case (generate_image, get_usage) and one is very long (fileInternalNotFairToolFeedback). This mix reduces consistency.
30 tools is on the higher end but justified by the broad scope of Meta Ads management (campaigns, ad sets, ads, creatives, insights, accounts, pages, image generation, support). Each tool serves a specific need, though some consolidation could be considered.
The tool set covers most common workflows (CRUD with enable/pause/rename for each level, budget updates, insights, and creative management). Notable gaps include lack of delete operations for any entity and absence of a listAdCreatives tool.
Available Tools
30 toolsaskSupportAInspect
Contact NotFair support. Use this tool when the user explicitly wants to reach the support team — for example, they say "contact support", "file a bug", "report an issue", "I need help from the NotFair team", or "this is a NotFair problem not a Google Ads problem".
This sends a message directly to the NotFair team and generates a ticket. The user will receive a response via email within 1 business day.
DO NOT use this for:
Routine Google Ads questions you can answer yourself.
Internal tool quality issues — use fileInternalNotFairToolFeedback for those.
Questions you haven't tried to answer yet.
Only call this when the user has explicitly asked to contact support, or when you've exhausted your ability to help and the user agrees escalation is the right move.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Brief context about what the user was trying to do. Omit PII except what the user explicitly included. | |
| message | Yes | The user's message to the support team. Write it in first person as if the user wrote it. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it sends a message directly to the NotFair team, generates a ticket, and the user receives an email within 1 business day. It also instructs to write in first person. Annotations show readOnlyHint=false and destructiveHint=false, consistent with the described write operation. No contradictions.
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 well-organized with clear sections for purpose, when to use, and exclusions. It is slightly verbose but every sentence adds value. Front-loaded with the core function.
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 no output schema, the description explains the outcome (ticket generated, email response within 1 business day). It covers the flow and expectations for a contact tool, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters. The description adds guidance for the 'message' parameter to write in first person, and for 'context' to omit PII except user's explicit input. This adds value 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 clearly states the tool contacts NotFair support, with specific verb 'contact' and resource 'NotFair support'. It distinguishes from sibling tool fileInternalNotFairToolFeedback by specifying that this is for user-facing support.
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 explicitly lists when to use (user wants to contact support) and when not to use (routine questions, internal tool issues, questions you haven't tried to answer). It provides concrete examples of user utterances and conditions for escalation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAdAIdempotentInspect
Create a new ad inside an existing ad set, attaching an existing creative by id. Defaults to status=PAUSED. Call createAdCreative first to get a creative_id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| adset_id | Yes | ||
| accountId | No | Account ID (omit for primary) | |
| creative_id | Yes | Id of an existing ad creative. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. Description adds useful context: defaults to status=PAUSED and the need for a creative_id. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, then default and prerequisite. Every sentence adds value with no 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?
Covers main action, prerequisite, and default status. No output schema, but annotations fill safety context. Lacks details on permissions or failure modes, but sufficient for a creation 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 40% (only 2 of 5 params have descriptions). The description explains creative_id ('attaching an existing creative by id') and status default, but adds no detail for name, adset_id, or accountId beyond schema basics.
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?
Description clearly states the tool creates a new ad within an existing ad set, attaching an existing creative by ID. It distinguishes from sibling tools like createAdCreative (which creates the creative) and is specific about the resource and action.
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 advises to call createAdCreative first, giving a clear prerequisite. Lacks explicit when-not-to-use or alternatives, but the context of sibling tools (enableAd, pauseAd) implies this is for creation only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAdCreativeAIdempotentInspect
Create an ad creative on the ad account. Pass object_story_spec as a JSON object with page_id plus one of link_data / photo_data / video_data / template_data. Returns the new creative id, which is then used in createAd's creative_id. Use listPages to get a valid page_id for object_story_spec.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| accountId | No | Account ID (omit for primary) | |
| object_story_spec | Yes | { page_id: string, link_data?: {...}, photo_data?: {...}, video_data?: {...} }. page_id is required. | |
| degrees_of_freedom_spec | No | Optional Advantage+ creative degrees-of-freedom spec for AI-driven creative variation. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true). Description adds that it returns a creative ID, which is useful context, but does not delve into side effects or error conditions beyond 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?
Extremely concise at 4 sentences, no filler. Front-loads the action ('Create an ad creative') and efficiently conveys all necessary operational details.
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 the main creation flow, key parameter, and result usage. Lacks error handling details but given no output schema and available annotations, it provides sufficient context for an agent to use the tool 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?
Enhances schema by detailing that 'object_story_spec' must include page_id and one of link_data/photo_data/video_data/template_data, and that page_id comes from 'listPages'. This adds significant meaning beyond the schema's minimal 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?
The description clearly states the tool creates an ad creative, using a specific verb ('Create') and resource ('ad creative'). It distinguishes from sibling tools like 'createAd' by explaining the returned creative ID is used there.
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?
Provides explicit instructions on structuring 'object_story_spec' with page_id and one data type, and instructs to use 'listPages' for a valid page_id. Lacks explicit when-not-to-use but covers prerequisites and downstream usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAdSetAIdempotentInspect
Create a new ad set under an existing campaign. Targeting is a JSON spec (geo_locations, age_min, age_max, genders, interests, etc.). Either set a budget here or rely on the parent campaign's CBO. Defaults to status=PAUSED.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| end_time | No | ISO 8601. | |
| accountId | No | Account ID (omit for primary) | |
| targeting | Yes | Meta targeting spec. Minimum: { geo_locations: { countries: ["US"] } }. Add age_min, age_max, genders, interests, custom_audiences, behaviors, locales, publisher_platforms etc. as needed. | |
| bid_amount | No | Bid cap or cost cap in account-currency MINOR units. | |
| start_time | No | ISO 8601. | |
| campaign_id | Yes | ||
| bid_strategy | No | ||
| daily_budget | No | ||
| billing_event | Yes | IMPRESSIONS | LINK_CLICKS | THRUPLAY | PURCHASE | etc. Determines how Meta charges. | |
| lifetime_budget | No | ||
| promoted_object | No | Required for some objectives (e.g. { page_id, application_id, pixel_id, custom_event_type }). Pass as JSON object. | |
| optimization_goal | Yes | REACH | IMPRESSIONS | LINK_CLICKS | LANDING_PAGE_VIEWS | OFFSITE_CONVERSIONS | THRUPLAY | etc. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. The description adds valuable behavioral details: defaults to status=PAUSED and the budget consideration (set here or rely on CBO). This covers key behavioral traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, concise and front-loaded with the purpose. It efficiently covers key points, but could be better structured for such a complex tool with 14 parameters.
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 tool's complexity (14 parameters, nested objects, no output schema), the description covers the core aspects but misses important context like return values, permissions, and interaction with the campaign lifecycle. It is adequate but not comprehensive.
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 57% schema coverage, the description adds meaning for the targeting parameter (JSON spec with examples) and mentions budget and status. However, many parameters (e.g., end_time, bid_amount, promoted_object) are not explained beyond the schema, leaving gaps.
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 states 'Create a new ad set under an existing campaign', which is a specific verb and resource. It distinguishes from sibling tools like createCampaign and createAd by specifying 'ad set' and 'under an existing campaign'.
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 the tool should be used when you have an existing campaign, but it does not explicitly compare to alternatives like createAd or provide when-not-to-use scenarios. Some guidance is given about budget (either set here or rely on CBO) but overall lacks explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCampaignAIdempotentInspect
Create a new campaign on the active (or specified) ad account. Returns the new campaign id and a snapshot of its fields. Defaults to status=PAUSED so the user can review before launching. Budgets are in account-currency MINOR units (cents for USD). special_ad_categories is required by Meta — pass ["NONE"] for a standard commercial ad, or one of EMPLOYMENT, HOUSING, CREDIT, ISSUES_ELECTIONS_POLITICS, ONLINE_GAMBLING_AND_GAMING, FINANCIAL_PRODUCTS_SERVICES for restricted categories.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| accountId | No | Account ID (omit for primary) | |
| objective | Yes | Campaign objective. Common values: OUTCOME_TRAFFIC, OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_APP_PROMOTION. | |
| stop_time | No | ISO 8601 stop time (campaign-level CBO only). | |
| start_time | No | ISO 8601 start time (campaign-level CBO only). | |
| bid_strategy | No | LOWEST_COST_WITHOUT_CAP | LOWEST_COST_WITH_BID_CAP | COST_CAP | LOWEST_COST_WITH_MIN_ROAS. Required for some objectives when using Campaign Budget Optimization. | |
| daily_budget | No | ||
| lifetime_budget | No | ||
| special_ad_categories | No | Required by Meta. Use ["NONE"] for standard ads. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: returns campaign id and snapshot, defaults to PAUSED, budgets in minor units, and special_ad_categories requirement. This complements the annotations (readOnlyHint=false, idempotentHint=true) without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the purpose, and each sentence adds value. No redundant 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?
Given the 10 parameters and no output schema, the description covers return values (id and snapshot), default behavior, budget units, and required special_ad_categories. It could mention prerequisites or error scenarios, but for a create tool it is reasonably 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 60% schema description coverage, the description adds meaning beyond the schema by clarifying budget units, special_ad_categories values, and default status. It does not explain every parameter in detail but compensates for the coverage gap with key contextual notes.
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 explicitly states the verb 'Create' and the resource 'campaign' with the context of 'on the active (or specified) ad account'. It clearly distinguishes itself from sibling tools like createAd, createAdSet, and updateCampaign by naming the primary function and return value.
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 provides helpful usage context: defaulting to PAUSED for review, requiring special_ad_categories, and noting budget units. However, it does not explicitly differentiate from createAdSet or createAd, nor does it mention when to use this tool over alternatives like updateCampaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enableAdAIdempotentInspect
Re-activate a paused ad (status=ACTIVE). Both the parent ad set and campaign must also be ACTIVE for the ad to deliver.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | Yes | ||
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive behavior. The description adds the prerequisite condition about parent ad set and campaign being active, which is valuable beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded action, then condition. No unnecessary words. Efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the action and necessary conditions. Lacks output schema details, but for a simple state-change tool this is adequate.
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 50% schema coverage (adId missing description), the description does not add any parameter-level information. It only explains the overall effect, not the specific 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 clearly states the tool re-activates a paused ad, using a specific verb ('re-activate') and target resource ('paused ad'). It distinguishes from siblings like pauseAd and createAd.
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 context on when the ad will deliver (parent entities must be active), but does not explicitly state when not to use or compare to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enableAdSetAIdempotentInspect
Re-activate a paused Meta ad set (status=ACTIVE). The parent campaign must also be ACTIVE for delivery to resume.
| Name | Required | Description | Default |
|---|---|---|---|
| adSetId | Yes | ||
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. Description adds the parent campaign condition, but does not disclose other behavioral traits like required permissions or error states. The description does not contradict 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?
Two sentences with no unnecessary words. First sentence states purpose, second adds a critical condition. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool, the description covers the action and a key prerequisite. It does not mention output, but no output schema exists. It lacks error conditions or edge cases, but is reasonably complete given the tool's simplicity.
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 50%: adSetId has no schema description, accountId has a description. The tool description does not elaborate on parameter meanings or formats. adSetId's purpose is inferable from the purpose, but explicit parameter guidance is absent.
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?
Description clearly states verb 'Re-activate', resource 'paused Meta ad set', and outcome 'status=ACTIVE'. This specifically distinguishes it from sibling tools like pauseAdSet, enableAd, and enableCampaign.
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?
Description indicates when to use (re-activate paused ad set) and includes a key prerequisite: parent campaign must be ACTIVE. It does not explicitly list alternatives or when-not-to-use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enableCampaignAIdempotentInspect
Re-enable a paused Meta campaign (status=ACTIVE). Note: Meta still requires that any underlying ad sets / ads be active for delivery to resume.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Account ID (omit for primary) | |
| campaignId | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds critical context beyond annotations: the dependency on child objects being active. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two efficient sentences. It immediately states the action and follows with a crucial caveat. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple toggle tool with two parameters, existing annotations, and no output schema, the description is fully complete. It explains the operation and the essential prerequisite about child objects, enabling an agent to use 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?
The input schema has 50% description coverage (accountId has a description, campaignId lacks one). The tool description does not add any parameter-specific details beyond what the schema provides, so it only meets the baseline for moderate 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 clearly states the verb 'Re-enable' and the resource 'paused Meta campaign', targeting status=ACTIVE. This distinguishes it from sibling tools like pauseCampaign and enableAdSet.
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 provides useful guidance by noting that underlying ad sets/ads must be active for delivery to resume. It implies when to use this tool (to resume a paused campaign) but does not explicitly list when not to use it or offer alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fileInternalNotFairToolFeedbackAInspect
Internal NotFair tool-feedback channel. Privately report MCP/tool friction that got in the way of helping the user — unclear descriptions, missing capabilities, clunky workflows, confusing errors, or duplicate tools.
This is not customer support, not user feedback, and not a success/quality rating. It is an internal NotFair engineering signal. When tool design gets in the way of a real user task, file one concrete report here so we can fix the tool surface. The user benefits in their next session; every other agent serving every other user benefits too.
AUTO-SURFACE THIS WHEN:
A tool description was unclear and you weren't sure how to use it.
You wanted to accomplish something for the user but no tool existed for it.
A workflow took many tool calls when one bulk operation could have replaced them.
An error message returned by a tool didn't help you debug or recover.
Two tools have overlapping purposes and the choice was confusing.
TIMING — file NOW, not later. This is the most important rule here:
File at the moment of friction, BEFORE you implement the workaround. Once you've routed around the issue, you will forget — that's the dominant failure mode for this tool.
If you've told the user "I'll file feedback" or anything similar, call this BEFORE your next user-facing message. No "I'll get to it after" — file first, then continue the task.
Filing is one tool call. It does not need the user's permission and does not need to be announced to them. Just file it.
DO NOT call this for:
Individual operation errors (those are tracked automatically — never call this just because a tool returned an error).
Confirming that a task succeeded.
Rating your own output quality.
Anything the user explicitly asked you to escalate (use the in-app feedback form for that).
Be specific. Reference tools by name and propose a concrete change. Submissions go directly to the NotFair team; the user does not see this channel.
Volume: file freely up to 5 per session. Quality of each report matters far more than parsimony — one specific, well-grounded report beats three vague ones, but underreporting is the bigger risk than overreporting.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Type of feedback. description_unclear=tool docs were ambiguous; missing_capability=no tool for the intent; ergonomic=workflow took too many calls; error_message_unclear=error didn't help debugging; workflow_gap=tools couldn't be composed for the goal; duplicate_tools=two tools confusingly overlap; other=anything else. | |
| user_goal | No | What the user was trying to accomplish — gives the team the use case context. Avoid PII. | |
| suggestion | Yes | Concrete change you'd recommend. | |
| observation | Yes | What was confusing, painful, or missing. Be specific — quote what tripped you up. | |
| affected_tool | Yes | Tool name (e.g. 'pauseKeyword'), or 'general' if cross-cutting. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-destructive mutation. The description adds behavioral context: private channel, user not seeing it, 5-per-session limit, and that it doesn't need permission. No contradictions.
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?
Well-structured with sections and bullet points, but slightly long. However, every sentence adds value and is front-loaded with 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?
Comprehensive coverage of purpose, triggers, exclusions, timing, volume, and parameter usage. No output schema needed; the tool is complete for its feedback function.
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 the description supplements by advising specificity (e.g., 'Reference tools by name'), adding value beyond the schema definitions.
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 states the tool's purpose as an internal feedback channel for reporting MCP/tool friction, distinguishing it from sibling tools like askSupport.
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?
Provides explicit when-to-use triggers, when-not-to-use exclusions (e.g., individual errors, success confirmation), timing advice ('file now'), and volume guidelines, making it easy to decide when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageAInspect
Generate one image from a prompt using OpenAI GPT Image 2. Returns a public URL you can embed in markdown or pass to a creative-asset tool (e.g. Google Ads createImageAsset). Counts against the user's monthly quota.
Prompt craft (GPT Image 2 rewards long, specific, instruction-style prompts — write a paragraph, not keywords):
Lead with the medium: photograph, 3D render, isometric vector, watercolor, flat illustration, studio product shot. Single biggest quality lever.
Then specify subject, setting, mood, color palette, lighting (e.g. 'golden hour, soft backlight'), and camera/perspective (close-up, wide, overhead, low angle, macro).
Keep the focal subject in the center 80% of the frame — ad platforms crop edges across placements.
Prefer lifestyle / in-context scenes over isolated-on-white product shots. Google explicitly recommends 'physical settings with organic shadows and lighting' for ad creative.
Don't render text unless the user asks for specific copy. Overlaid text is often unreadable at small ad sizes and Google flags it as a quality issue.
Avoid negative prompts ('no X, no Y'). GPT Image often pulls the rejected concept in — describe what you want instead.
Ad-policy rules to bake into prompts:
No collages, borders, watermarks, mirrored / skewed / over-filtered looks.
No fake UI elements (play buttons, download/close icons) — Google Ads policy violation.
Don't overlay a logo on the photo; logos belong inside the scene (on a product, sign, storefront).
Blank space should be under 80% of the frame — the subject is the focus.
Aspect ratios — match the target placement:
Google Ads asset slots: '1.91:1' landscape (required), '1:1' square (required), '4:5' portrait, '9:16' vertical (Demand Gen / Shorts).
Meta / social: '1:1' or '4:5' feed; '9:16' stories/reels; '1.91:1' link previews.
Hero / web banners: '16:9' or '3:2'. Default is '1:1'.
Quality vs latency: 'low' ~5s drafts; 'medium' balanced; 'high' runs the four-stage Understand/Plan/Generate/Review pipeline (30–50× slower than low) — use only for production-final fidelity.
Output format: default 'png' (lossless). Use 'webp' or 'jpeg' for smaller photographic assets. background='transparent' requires png/webp (use for logos, cutouts, UI assets).
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | OpenAI image model override. Defaults to gpt-image-2. Use 'gpt-image-1.5' or 'gpt-image-1-mini' to opt into older/cheaper models. | |
| prompt | Yes | Image prompt. Describe medium, subject, setting, mood, lighting, color palette, and camera/perspective in natural language — paragraph form outperforms keyword lists. See the tool description for ad-platform rules. Up to 32K chars. | |
| quality | No | Generation quality. Defaults to 'auto' (OpenAI picks). 'low' is fastest (~5s), 'medium' is balanced, 'high' runs the four-stage Understand/Plan/Generate/Review pipeline (30–50× slower than low) and produces the most refined output. | |
| background | No | Background handling. 'transparent' requires outputFormat='png' or 'webp' (use for logos, cutouts, UI assets). 'opaque' forces a solid background. 'auto' (default) lets the model decide. | |
| aspectRatio | No | Aspect ratio. Common values: '1:1' (square), '16:9' (landscape), '9:16' (portrait/story), '4:5' (feed post). Defaults to '1:1'. Mapped to a 16-aligned WxH size server-side. | |
| outputFormat | No | Image file format. Defaults to 'png'. Use 'webp' or 'jpeg' for smaller photographic assets. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which indicate openWorldHint and non-destructive), the description adds critical behavioral details: it counts against monthly quota, returns a public URL, and explains quality vs latency trade-offs. No contradictions with annotations found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with clear sections (Prompt craft, Ad-policy rules, Aspect ratios, Quality vs latency, Output format). It is front-loaded with the main purpose and every sentence provides actionable information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains the return value (public URL). It covers all parameters, usage contexts, and edge cases (e.g., background transparency requirements). The description is comprehensive for an agent to use the tool 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?
The input schema already covers all 6 parameters with descriptions (100% coverage). The tool description goes further by providing rich context for the 'prompt' parameter (crafting instructions, ad rules) and for 'quality', 'aspectRatio', 'outputFormat', and 'background'. This adds significant value 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 clearly states the tool's purpose: 'Generate one image from a prompt using OpenAI GPT Image 2. Returns a public URL...'. It uses a specific verb ('Generate') and resource ('image'), and distinguishes from siblings by detailing its unique functionality and output format.
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 provides extensive usage guidelines, including when to use different quality levels (low for drafts, high for production), aspect ratios for various platforms (Google Ads, Meta, web), and ad-policy rules. It also mentions quota impact. This helps the agent decide when and how to invoke the tool effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAdAccountARead-onlyInspect
Snapshot of the ad account itself: id, name, currency, timezone, status, balance, amount_spent, spend_cap, disable_reason, owning Business Manager. Cheap one-call summary; pair with getInsights for performance.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnly and non-destructive. The description adds context about being a cheap one-call summary but does not contradict 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?
Two sentences: first lists returned fields, second gives usage advice. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one optional parameter and no output schema, the description covers what it returns and how to use it. Could mention what 'primary' means but still 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?
The input schema covers the single parameter with description, so baseline is 3. The description adds no further parameter details 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 clearly states it provides a snapshot of the ad account with specific fields (id, name, currency, etc.). It distinguishes itself from siblings like getInsights by noting it's a cheap summary.
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 recommends pairing with getInsights for performance and implies it's a quick, one-call summary. The optional accountId parameter hints at using it for the primary account or a specific one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInsightsARead-onlyInspect
Pull performance insights for the active (or specified) ad account. Wraps /{accountId}/insights with sensible defaults: campaign-level rows over the last 30 days, audit-friendly field set. Override level, date_preset or time_range, fields, breakdowns, etc. for narrower questions. Use runScript when you need to correlate insights with delivery info, recent edits, or cross-account joins.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Aggregation level: account, campaign, adset, or ad. Default: campaign. | campaign |
| limit | No | Max total rows returned. The tool stops paginating once it has this many. | |
| fields | No | Insight fields to fetch. Defaults to a sensible audit set (spend, impressions, clicks, ctr, cpc, cpm, reach, frequency, actions). | |
| accountId | No | Account ID (omit for primary) | |
| breakdowns | No | Breakdowns (e.g. ['country'], ['age,gender'], ['publisher_platform']). | |
| time_range | No | Custom date range. Mutually exclusive with date_preset. | |
| date_preset | No | Predefined window (e.g. last_7d, last_30d, last_90d, this_month, lifetime). Mutually exclusive with time_range. | |
| time_increment | No | Bucket granularity, e.g. 1 (daily), 7 (weekly), 'monthly'. | |
| action_breakdowns | No | Action breakdowns (e.g. ['action_type']). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. Description adds that the tool stops paginating at the limit, but doesn't detail rate limits, auth requirements, or return structure. Adequate given 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?
Single paragraph with no wasted words. Front-loaded with purpose, then defaults, override options, and alternative tool. Every sentence adds 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?
For a read-only data pull tool with 9 optional params and no output schema, the description covers default behavior, customization, and alternatives. Could mention return format but schema covers inputs sufficiently.
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 parameters are well-documented. Description adds that fields default to an 'audit set', and clarifies pagination behavior for limit. No new details beyond schema, 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?
Description clearly states the verb 'Pull', the resource 'performance insights for the active (or specified) ad account', and specifies sensible defaults (campaign-level, last 30 days, audit-friendly fields). It distinguishes itself from sibling tools like runScript for more complex tasks.
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 tells when to use overrides for narrower questions and when to use runScript for correlations or cross-account joins. Does not list explicit 'when not to use' scenarios but provides a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPagePostInsightsARead-onlyInspect
Aggregate engagement metrics for a Page post (typically the post backing a boosted-post ad). Returns impressions, reach, reactions, and aggregate like / comment / share counts — never individual user data. Pair with getInsights to compare paid + organic performance on a boosted post.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | Page post id in `<page_id>_<post_id>` form (matches `effective_object_story_id` on a boosted-post ad's creative). | |
| metrics | No | Insight metric names. Defaults to: post_impressions_unique, post_impressions_paid_unique, post_impressions_organic_unique, post_clicks, post_reactions_by_type_total. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false; the description adds that it never returns individual user data and aggregates metrics, providing valuable context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with key purpose, and each sentence adds value with no 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?
Despite lacking an output schema, the description adequately explains return values (impressions, reach, reactions, counts) and clarifies what it does not return, making it complete for this 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 covers 100% of parameters; description adds domain-specific meaning for postId (format referencing effective_object_story_id) and mentions default metrics, enhancing understanding 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 clearly states the tool aggregates engagement metrics for a Page post, listing specific metrics (impressions, reach, reactions) and distinguishes from siblings by mentioning comparison with getInsights.
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 provides explicit context (boosted post ad) and recommends pairing with getInsights, offering good usage guidance, though it could be more explicit about when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageARead-onlyInspect
Show the current monthly image generation quota and usage for this account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description's addition of 'current monthly' and 'for this account' provides minimal extra behavioral context. The description does not contradict 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?
The description is a single, concise sentence that directly states the tool's function with no extraneous words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, read-only, no output schema), the description adequately covers what the tool does. It could optionally mention the return format (e.g., numbers), but it is sufficient for an agent to understand the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema covers everything. With no parameters, the description need not add parameter details. The baseline for 0 params is 4, and the description maintains 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?
The description clearly states the tool shows 'current monthly image generation quota and usage for this account', with a specific verb ('show') and resource. It distinguishes from sibling tools like 'generate_image' or 'getAdAccount' by focusing on quota/usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. While the context is clear (check quota before generating images), no alternatives or exclusions are mentioned. This is acceptable but could be improved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAdAccountsARead-onlyInspect
List Meta ad accounts connected to this session. Returns the active account id plus every selected account (id, name). Use the returned ids as accountId for other tools. For per-account currency, timezone, and Business Manager info, call getAdAccount with the id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds value by specifying the exact data returned (active account id plus selected accounts), which is not in the annotations. No contradictions.
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 that are concise, front-loaded with the core purpose, and contain no unnecessary information. Every sentence is valuable.
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 zero parameters, no output schema, and a simple listing behavior, the description fully explains what the tool returns and how to use the results. It is complete for its complexity level.
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?
No parameters are defined, so the schema coverage is 100%. The description does not need to explain parameters, and baseline is 4. It adds no superfluous parameter information.
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 states it lists Meta ad accounts connected to the session, specifying what is returned (active account id plus selected accounts with id and name). It distinguishes itself from the sibling tool getAdAccount by noting that getAdAccount provides per-account details.
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 that the returned ids can be used as accountId for other tools, and directs users to call getAdAccount for additional per-account information. This provides clear context on when to use this tool vs. alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAdsARead-onlyInspect
List ads, scoped to an account by default or to a specific ad set when adSetId is provided. Returns id, name, status, the parent ad set / campaign ids, the creative envelope, and timestamps. Use runScript for richer creative inspection (asset feed details, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max total ads returned. The tool stops paginating once it has this many. | |
| adSetId | No | Filter to ads under this ad set. Omit to list across the whole account. | |
| statuses | No | Filter by effective_status. Default (unset): Meta returns ACTIVE + PAUSED only. | |
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description adds pagination behavior (limit parameter stops after max), scoping logic, and status filtering defaults, providing useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. First sentence states purpose and scope, second adds return fields and alternative tool. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description lists returned fields. Covers usage, parameters, alternative, filtering, and scoping. Complete for a listing tool with moderate complexity.
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 baseline is 3. Description adds value by explaining limit's pagination stop behavior and statuses default (Meta returns ACTIVE+PAUSED only), going beyond 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?
Clearly states it lists ads with account or ad set scoping. Distinguishes from sibling tools like listAdSets, listCampaigns. Specifies returned fields (id, name, status, etc.).
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?
Provides explicit alternative: 'Use runScript for richer creative inspection.' Implies default account scoping but no explicit when-not-to-use. Clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAdSetsARead-onlyInspect
List ad sets, scoped to an account by default or to a specific campaign when campaignId is provided. Returns id, name, status, optimization goal, billing event, bid amount/strategy, daily/lifetime budget, schedule, targeting summary, and promoted_object.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max total ad sets returned. The tool stops paginating once it has this many. | |
| statuses | No | Filter by effective_status. Default (unset): Meta returns ACTIVE + PAUSED only. | |
| accountId | No | Account ID (omit for primary) | |
| campaignId | No | Filter to ad sets under this campaign. Omit to list every ad set in the account. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm readOnlyHint=true and destructiveHint=false. The description adds value by listing returned fields (status, budget, etc.), which is beyond the annotations. No behavioral surprises are mentioned, but for a read-only list tool, this is adequate.
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: first states action and scoping, second lists return fields. No wasted words, front-loaded action, easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 4 parameters and no output schema, the description covers return fields, scoping, and parameter defaults. Could mention sorting or pagination (handled by limit), but overall complete enough for effective use.
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 description adds minimal value beyond schema. It clarifies default behavior for accountId and campaignId, but this is largely redundant with schema descriptions. Baseline of 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 clearly states the tool lists ad sets with specific scoping (by account or campaign) and enumerates return fields. It distinguishes itself from sibling tools like listAds and listCampaigns by specifying its focus on ad sets.
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 the default scope (account) and how to filter by campaign using campaignId. It lacks explicit guidance on alternatives but provides sufficient context for scoping decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCampaignsARead-onlyInspect
List campaigns under the active (or specified) ad account. Returns id, name, status, objective, budget fields, bid strategy, schedule, and timestamps. For richer cross-surface analysis (campaigns × insights × ads in one pass), use runScript instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max total campaigns returned. The tool stops paginating once it has this many. | |
| statuses | No | Filter by effective_status. Default (unset): Meta returns ACTIVE + PAUSED only — pass `['ACTIVE','PAUSED','ARCHIVED','DELETED']` to include archived and deleted campaigns. | |
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description adds pagination behavior (stops at limit) and return fields, which go beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences. No unnecessary words. Each sentence adds value: purpose and alternative.
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?
Tool is simple read-only list. Description lists return fields, pagination limit, and account specification. Could mention default account behavior more explicitly, but sufficient for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. Description does not add extra parameter meanings beyond schema, so 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?
Description uses specific verb 'list', specifies resource 'campaigns under active/ad account', and lists returned fields. Distinct from sibling 'runScript' which does richer analysis.
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 use (list campaigns with fields) and when not to (for cross-surface analysis, use runScript). Clear alternative provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPagesARead-onlyInspect
List the Facebook Pages the connected user manages, so the agent can pick a Page identity for ad creatives (every ad's object_story_spec.page_id requires a Page the user has rights to). Returns id + name only — does NOT read Page content, posts, comments, or engagement. Optional businessId also includes Pages owned by that Business Manager.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max total Pages returned across both sources. | |
| businessId | No | Business Manager id (numeric, no prefix). When set, also returns Pages owned by that business. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false. Description adds that it lists pages the user manages and does not read content. No contradiction; description adds relevant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Front-loaded with purpose and usage. Every sentence adds 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 tool simplicity with 2 optional params, annotations, and no output schema, description covers purpose, behavior, and return structure 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 100% and both parameters have descriptions. Description adds minimal extra meaning (e.g., businessId includes Pages from that business). 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?
Clearly states tool lists Facebook Pages the user manages for ad creative identity. Specifies return fields (id, name) and what it does NOT do (read content). Distinguishes from sibling tools which are ad/creative related.
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 says to use for picking Page identity for ad creatives. Mentions optional businessId for broader Pages. Slightly lacks when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pauseAdAIdempotentInspect
Pause a single ad (sets the ad's status=PAUSED — does not modify its creative). Reversible via enableAd.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | Yes | ||
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive behavior. The description adds valuable context: the creative is not modified and the action is reversible. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the key information. Every word serves a purpose, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple pause operation with clear annotations and no output schema, the description covers the essential behavioral details (creative unchanged, reversibility) and purpose 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 description coverage is 50% (only accountId described). The description clarifies that adId refers to the ad to pause, but adds no syntax or constraints beyond the schema. Minimal compensation for 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?
The description clearly states the verb 'Pause', the resource 'a single ad', and specifies the exact action: sets status=PAUSED and clarifies it does not modify the creative. It distinguishes from siblings like pauseAdSet and enableAd by mentioning reversibility.
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 provides clear context on when to use (pausing a single ad) and notes reversibility via enableAd. However, it does not explicitly exclude usage scenarios or compare with alternatives like pauseAdSet or pauseCampaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pauseAdSetAIdempotentInspect
Pause a Meta ad set (status=PAUSED). Pausing an ad set leaves the parent campaign untouched. Reversible via enableAdSet.
| Name | Required | Description | Default |
|---|---|---|---|
| adSetId | Yes | ||
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. The description adds value by noting reversibility and no impact on the parent campaign, but does not disclose auth needs, rate limits, or side effects on running ads.
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 waste. Front-loaded with the core action and followed by key behavioral notes.
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 tool's simplicity (2 params, no output schema), the description covers the essential action, reversibility, and scope. Missing details like return value or error states are acceptable for a straightforward 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 description coverage is 50%: only accountId has a description. The tool description does not elaborate on parameter usage or defaults, failing to compensate for the missing 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?
The description uses a specific verb ('pause') and resource ('ad set'), explicitly states the status change to PAUSED, and distinguishes from siblings by noting that the parent campaign remains untouched.
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?
Provides clear context that pausing is reversible via enableAdSet and leaves the campaign untouched. While it doesn't explicitly state when not to use or compare to pauseCampaign, the guidance is sufficient for sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pauseCampaignAIdempotentInspect
Pause a Meta campaign by setting status=PAUSED. Reversible via enableCampaign. Returns before/after status snapshots so the agent can confirm the change.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Account ID (omit for primary) | |
| campaignId | Yes | Campaign id (numeric, no prefix). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by stating the specific status change, reversibility, and return of before/after snapshots. Annotations already indicate idempotency and non-destructiveness.
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 concise (two sentences) with no wasted words, front-loading the core action and key details.
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 absence of output schema, the description helpfully mentions return snapshots. For a simple two-parameter tool, this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add additional parameter semantics beyond what is already 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?
The description clearly states the tool pauses a Meta campaign by setting status=PAUSED, and distinguishes it from siblings like pauseAd and pauseAdSet by specifying the resource type.
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 provides context on when to use (pausing a campaign) and mentions reversibility via enableCampaign, but lacks explicit exclusions or alternatives beyond the sibling structure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renameAdAIdempotentInspect
Rename an ad (set its name field). Works on every ad type the user has rights to, including boosted-Page-post ads where status writes are blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | Yes | Numeric ad id. | |
| name | Yes | ||
| accountId | No | Account ID (omit for primary) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by noting that it works on all ad types, including those where status writes are blocked. It does not contradict annotations (readOnlyHint false, destructiveHint false, 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 a single concise sentence that effectively communicates the core action and a special case. It is front-loaded but could benefit from parameter details without being overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple rename tool with 3 params and no output schema, the description covers the primary function and a notable exception. It lacks mention of idempotency (though in annotations) and return behavior, but is otherwise adequate.
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 (adId and accountId described, but name lacks description), the description does not add meaning for the name parameter beyond its constraints. It fails to compensate for the missing schema description.
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 states the tool renames an ad by setting the name field, and specifies it works on all ad types including boosted-page-post ads where status writes are blocked. This distinguishes it from sibling tools like renameCampaign or updateAdCreative.
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 (rename an ad) and highlights applicability to boosted-page-post ads. However, it does not explicitly state when not to use it or provide alternatives, though the sibling list is available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renameCampaignBIdempotentInspect
Rename a campaign (sets the name field).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| accountId | No | Account ID (omit for primary) | |
| campaignId | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes that the tool only sets the `name` field, which is consistent with the idempotentHint=true annotation. No further behavioral traits are disclosed beyond what annotations provide; annotations already indicate non-destructive and idempotent nature, so the description adds limited value.
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 that directly states the tool's purpose with no extraneous information. Every word serves a 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?
Given the absence of an output schema and the presence of sibling update tools, the description lacks sufficient context. It does not explain return values, error states, or that the tool only updates the name field, leaving ambiguity about its relationship with `updateCampaign`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only accountId described). The tool description adds context that `name` is the new name, but does not explain `campaignId` or elaborate on `accountId` beyond schema. The description minimally compensates for the low 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 clearly states the action ('Rename a campaign') and the specific field affected ('sets the `name` field'). It distinguishes from sibling tools like `renameAd` or `updateCampaign` by focusing solely on renaming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as `updateCampaign`. It does not specify prerequisites, nor does it differentiate use cases (e.g., 'Use this tool only to change the campaign name, for other fields use updateCampaign').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runScriptARead-onlyInspect
Run a JavaScript orchestration script in a sandboxed QuickJS runtime against the Meta Marketing API (Facebook + Instagram Ads). One runScript call can replace 10+ sequential Graph API tool invocations.
── WHEN TO USE THIS ──
Default tool for any open-ended analytical question about a Meta ad account. Reach for it first when you see:
"How is my campaign doing?" / "What's working?" / "Find ad sets with bad ROAS" / "Why did CPM spike last week"
"Audit my account" / "Rank ad sets by spend efficiency" / "Compare creatives"
Any question where you'd otherwise call 3+ Graph endpoints in sequence
Any question that benefits from correlating insights + delivery info + recent edits in a single pass
runScript owns reads — there are no per-surface read tools. Use getInsights only for the dedicated 1-account-1-window pull when you don't need to correlate.
── BATCHING DISCIPLINE ──
Prefer ONE runScript call that fans out via ads.graphParallel (up to 20 calls concurrently). Cast a wide net on the first call; filter in-script for free.
── API SURFACE (all on the ads namespace) ──
Async RPCs:
ads.graph(path, params?, method?) -> JSON — single Graph API call. Path may use the
{accountId}template token (replaced with the activeact_<id>). Default method: GET.ads.graphParallel([{ name, path, params?, method?, paged?, limit? }]) -> { [name]: { ok, data } | { ok: false, error } } — fan-out, max 20.
Set
paged: trueto follow paging.next (capped at 20 pages).limittrims the final list to N rows.
ads.insights(adAccountId?, options?) -> rows — wrapper over /{accountId}/insights with sensible defaults. Pass
nullfor the active account.options: { level: "account"|"campaign"|"adset"|"ad", date_preset, time_range:{since,until}, time_increment, fields, breakdowns, action_breakdowns, limit }
ads.batch([{ method, relative_url, body? }]) -> [{ code, body }] — Graph API /batch endpoint. Up to 50 sub-requests.
ads.pagedAll(path, params?, maxPages?) -> [...] — read every page of a paged endpoint.
Sync helpers:
ads.helpers.getDateRange(days) -> { since, until } — YYYY-MM-DD strings, UTC.
ads.helpers.formatDate(date) | daysBetween(a,b) | withActPrefix(id) | stripActPrefix(id)
Constants:
ads.activeAccountId — the active ad-account numeric id (no act_ prefix).
ads.fields.* — comma-joined field-list strings: campaign, adset, ad, adAccount, insightsAudit, insightsLite. Drop into params.fields.
ads.datePresets — array of preset strings accepted by /insights date_preset.
Path templates:
"/{accountId}/campaigns" → "/act_/campaigns"
"/{accountId}/insights" → "/act_/insights"
Plain ids like "/me/adaccounts" are untouched.
── COMMON PATTERNS ──
Single insights pull:
return await ads.insights(null, {
level: "campaign",
date_preset: "last_30d",
fields: ads.fields.insightsAudit.split(","),
});Audit fan-out — campaigns + ad sets + ads + last 30d insights, in one call:
const r = await ads.graphParallel([
{ name: "campaigns", path: "/{accountId}/campaigns", params: { fields: ads.fields.campaign }, paged: true },
{ name: "adsets", path: "/{accountId}/adsets", params: { fields: ads.fields.adset }, paged: true },
{ name: "ads", path: "/{accountId}/ads", params: { fields: ads.fields.ad }, paged: true, limit: 200 },
{ name: "insights", path: "/{accountId}/insights", params: { level: "campaign", date_preset: "last_30d", fields: ads.fields.insightsAudit }, paged: true },
]);
const worst = (r.insights.ok ? r.insights.data : []).filter(x => Number(x.spend) > 100 && Number(x.ctr) < 0.5);
return { worstCampaigns: worst, totals: { campaigns: r.campaigns.rowCount, adsets: r.adsets.rowCount } };── RULES ──
Top-level await works. No fetch / require / process / fs reachable.
Return value must be JSON-serializable. Limits: 30s timeout (max 45s), 500KB return cap, 100K log chars.
Mutations (pause/enable/budget) go through dedicated tools (
pauseCampaign,pauseAdSet,pauseAd, ...). Never write through runScript.
── ANTI-PATTERNS ──
Calling runScript 5+ times to fetch different surfaces — that's what graphParallel replaces.
Returning entire data arrays — summarize, rank, or aggregate first.
Manually computing dates with new Date() math — use ads.helpers.getDateRange / formatDate.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript source. Top-level await allowed. See tool description for the API surface. | |
| accountId | No | Account ID (omit for primary) | |
| timeoutMs | No | Wall-clock cap before the script is interrupted. Default 30s, max 45s. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds extensive behavioral details: sandboxed runtime, timeout limits (30s default, max 45s), return cap (500KB), log limit (100K chars), no mutations allowed, top-level await, and that return must be JSON-serializable. This goes far beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with clear sections (WHEN TO USE, BATCHING DISCIPLINE, API SURFACE, COMMON PATTERNS, RULES, ANTI-PATTERNS). It is front-loaded with the core message. While every sentence is informative, it could be slightly more concise without losing 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 the tool's complexity (multiple sub-APIs, constants, helpers, constraints), the description is remarkably complete. It covers the entire API surface, common patterns, rules, limits, and return expectations. No output schema exists, but the description explains return value requirements and limits.
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 has 100% description coverage with three parameters (code, accountId, timeoutMs) each having a description. The tool description adds significant context: explains how to use 'code' with the ads namespace, that accountId is optional, and that timeoutMs has a default and max. This adds meaning 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 it runs JavaScript orchestration scripts in a sandboxed QuickJS runtime against the Meta Marketing API. It clearly distinguishes itself from sibling tools by stating it can replace 10+ sequential Graph API calls and owns reads, differentiating from specific tools like getInsights.
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 when-to-use scenarios: open-ended analytical questions, correlation tasks, replacing multiple Graph endpoint calls. Also states when not to use: mutations must go to dedicated tools, and getInsights is for single pulls. Includes anti-patterns like calling runScript 5+ times instead of using graphParallel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAdCreativeAIdempotentInspect
Swap the creative on an existing ad to a different creative. The new creative must already exist (call createAdCreative first to mint one). Useful for A/B testing or refreshing fatigued creative without rebuilding the ad set.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | Yes | ||
| accountId | No | Account ID (omit for primary) | |
| creative_id | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true), consistent with description. Description adds behavioral context: prerequisite for creative existence. No mention of side effects or return value, but adequately complements 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?
Two sentences only: first states purpose, second adds prerequisite and use cases. No redundant information, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, prerequisite, and use cases. Lacks return value description and potential errors, but for a simple swap with no output schema, it is sufficiently complete for an agent to use 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 low at 33% (only accountId described). Description adds meaning to creative_id by stating it must exist and be created first. adId is implied but not explicitly described. Partial compensation for low 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 clearly states the tool swaps the creative on an existing ad, using specific verb 'Swap' and resource 'creative on an existing ad'. It distinguishes from siblings like createAdCreative (which mints a new creative) and rebuilds ad set.
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 prerequisite: new creative must already exist (call createAdCreative first). Suggests use cases: A/B testing or refreshing creative. Does not explicitly mention when not to use, but implies avoidance if creative doesn't exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAdSetAIdempotentInspect
Update one or more ad-set fields beyond status / budget. Covers targeting, optimization_goal, billing_event, bid_amount/bid_strategy, schedule (start_time/end_time), and Advantage+ promoted_object. Pass only the fields that are changing. For simpler edits, prefer pauseAdSet / enableAdSet / updateAdSetBudget.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| adSetId | Yes | ||
| end_time | No | ISO 8601. | |
| accountId | No | Account ID (omit for primary) | |
| targeting | No | Replaces the entire targeting spec. Provide the full object — Meta does not merge. | |
| bid_amount | No | ||
| start_time | No | ISO 8601. | |
| bid_strategy | No | ||
| daily_budget | No | ||
| billing_event | No | ||
| lifetime_budget | No | ||
| promoted_object | No | ||
| optimization_goal | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive. The description adds useful context about what fields it covers, though it could mention that targeting replaces the entire spec (which is in schema description). No contradictions.
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: first states purpose and scope, second provides usage guidance and alternatives. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 14 parameters and no output schema, the description provides a solid overview and key behavioral notes, but could detail replacement behavior for targeting and schedule. Still fairly complete for an update 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 low (29%). Description mentions key fields (targeting, optimization_goal, etc.) and suggests passing only changed fields, but doesn't fully compensate for undocumented parameters like name, end_time, or accountId.
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 states it updates ad-set fields beyond status/budget and lists specific fields (targeting, optimization_goal, etc.), distinguishing it from simpler tools like pauseAdSet/enableAdSet.
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 advises 'Pass only the fields that are changing' and recommends simpler tools for simpler edits, providing clear when-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAdSetBudgetAIdempotentInspect
Update an ad set's daily or lifetime budget. Pass exactly one of dailyBudget or lifetimeBudget, in account-currency MINOR units. Note: Meta blocks this when the parent campaign uses Campaign Budget Optimization (CBO).
| Name | Required | Description | Default |
|---|---|---|---|
| adSetId | Yes | ||
| accountId | No | Account ID (omit for primary) | |
| dailyBudget | No | ||
| lifetimeBudget | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds the critical behavioral constraint that Meta blocks the update when the campaign uses CBO, which is not in annotations. It also implies the operation is not read-only (consistent with readOnlyHint=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?
Two sentences, no superfluous words. The purpose is front-loaded. Every sentence adds value: the first states what it does, the second provides critical usage constraints.
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, but the operation is straightforward. The description covers the key constraint (CBO blocking). With 4 parameters and no nested objects, the description is adequate. Could mention expected response (e.g., updated ad set ID), but not essential.
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 25% (only accountId has a description). The description adds meaning: budget parameters are in 'account-currency MINOR units' and must be mutually exclusive. It clarifies the budget semantics beyond the schema, compensating for low 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?
Clearly states the verb 'Update' and the resource 'an ad set's daily or lifetime budget'. It distinguishes from sibling tools like updateAdSet (which updates other ad set settings) and updateCampaignBudget (which updates campaign budget).
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?
Provides explicit guidance: 'Pass exactly one of dailyBudget or lifetimeBudget' and warns about Meta blocking when the parent campaign uses CBO. This helps the agent understand constraints and correct usage. No explicit alternatives mentioned, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCampaignAIdempotentInspect
Update one or more campaign fields beyond status / budget / name. Use this for bid strategy, start/stop time, or special_ad_categories changes. For simpler edits prefer pauseCampaign / enableCampaign / updateCampaignBudget / renameCampaign.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| accountId | No | Account ID (omit for primary) | |
| stop_time | No | ISO 8601. | |
| campaignId | Yes | ||
| start_time | No | ISO 8601. | |
| bid_strategy | No | ||
| daily_budget | No | ||
| lifetime_budget | No | ||
| special_ad_categories | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false; the description adds context that this tool updates multiple fields and is not for simple operations. No contradiction, and it reinforces the non-destructive, idempotent nature. However, it does not mention any additional behavioral traits like permission requirements or immediate effect, but the core is covered.
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 two sentences long, front-loaded with the core purpose, and contains no filler. Every sentence adds necessary 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?
Given 10 parameters and no output schema, the description is minimal. It covers the main use case but lacks details on required parameters (campaignId is required but not mentioned in the description), response format, or side effects. For a complex tool, it is adequate 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?
Schema description coverage is low (30%), and while the description mentions field categories (bid strategy, start/stop time, special_ad_categories), it does not provide detailed semantics for individual parameters (e.g., units for budgets, format for arrays). It adds moderate value over the schema but does not fully compensate for the lack of 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?
The description clearly states it updates campaign fields beyond status/budget/name, listing specific examples like bid strategy, start/stop time, and special_ad_categories. It explicitly distinguishes from sibling tools like pauseCampaign, enableCampaign, updateCampaignBudget, and renameCampaign, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (for bid strategy, start/stop time, special_ad_categories) and when to use simpler alternatives (pauseCampaign, enableCampaign, updateCampaignBudget, renameCampaign). This clearly delineates usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCampaignBudgetAIdempotentInspect
Update a campaign's daily or lifetime budget. Pass exactly one of dailyBudget or lifetimeBudget. Values are in the ad account's currency MINOR units (cents for USD, etc.) — Meta's native unit, no conversion done. Use getAdAccount if you need the currency first.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Account ID (omit for primary) | |
| campaignId | Yes | ||
| dailyBudget | No | New daily budget in account currency MINOR units (e.g. 5000 = $50.00 USD). Mutually exclusive with lifetimeBudget. | |
| lifetimeBudget | No | New lifetime budget in account currency MINOR units. Mutually exclusive with dailyBudget. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by explaining unit details ('currency MINOR units', 'no conversion done') and the mutual exclusivity constraint. Annotations already indicate idempotency (idempotentHint: true) and non-destructiveness, which are consistent. The description also hints at the need for currency knowledge via getAdAccount.
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 focused sentences: purpose, parameter constraint, unit clarification, and a pointer to a related tool. Every sentence earns its place with no fluff. It is front-loaded and easy to parse.
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 covers the key nuance of budget updates (units, exclusivity) but omits details on response behavior, error states (e.g., providing both budgets), or handling of accountId/campaignId. Given no output schema and moderate parameter count, the description is adequate but not thorough.
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 description reinforces the schema's explanation of dailyBudget and lifetimeBudget (units, exclusivity) but does not add meaning for the other two parameters (accountId, campaignId). Schema coverage is 75% (campaignId missing description), but the description does not compensate for that gap. Baseline of 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 starts with a clear verb+resource: 'Update a campaign's daily or lifetime budget.' It specifies the exact action and resource, and the nuance of daily vs lifetime distinguishes it from generic update tools. The sibling tools include updateCampaign and updateAdSetBudget, and this tool's focus on budget alone is clear from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Pass exactly one of dailyBudget or lifetimeBudget,' providing a key usage constraint. It also suggests using getAdAccount to check currency. However, it does not explicitly contrast with sibling tools like updateCampaign (which might also update budget) or updateAdSetBudget, leaving some ambiguity about when to prefer this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!