0.0 / 30
What changed in the harness
Selection accuracy 100→98, token cost up 8%, unconfirmed writes 0%→0%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
18.0 / 30
03Economics
8.1 / 20
04Discoverability
11.4 / 20
Highest-impact fix
Estimated gain +30 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
114 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
get_campaign |
name_restates_behavior params_unexplained no_return_description |
Fetch a single campaign by its campaign_id and return its configuration, including objective, status, and budget settings. Optionally restrict the result to the comma-separated fields listed in fields to reduce the payload. |
create_campaign |
no_return_description |
Create a new ad campaign with the required name and objective. New campaigns default to PAUSED status and must be activated to deliver. Budget can be set at the campaign level via daily_budget or lifetime_budget, or left to the ad set level. Returns the created campaign ID and details. |
delete_campaign |
name_restates_behavior no_return_description |
Permanently remove the campaign identified by campaign_id from the ad account. This action is irreversible and also removes the campaign's ad sets and ads. Returns confirmation that the deletion succeeded. |
copy_campaign |
no_return_description |
Duplicate an existing campaign, optionally under a new name and status. By default the full structure including ad sets and ads is copied; set deep_copy to false to copy only the campaign. Returns the new campaign ID and details. |
get_campaign_adsets |
params_unexplained no_return_description |
List the ad sets that belong to the campaign identified by campaign_id. Returns paginated results with the requested fields, using limit and after for pagination. |
get_campaign_ads |
name_restates_behavior params_unexplained no_return_description |
List the ads that belong to the campaign identified by campaign_id. Returns paginated results with the requested fields, using limit and after for pagination. |
get_campaign_leads |
name_restates_behavior params_unexplained no_return_description |
Return the leads generated by the campaign identified by campaign_id. Requires the leads_retrieval permission. Returns paginated results with the requested fields. |
list_adsets |
no_return_description |
List ad sets in the ad account, optionally filtered by campaign_id or status. Returns paginated results limited to the requested fields. |
get_adset |
no_return_description |
Fetch a single ad set by its adset_id and return its details such as budget, targeting, and optimization goal. Optionally restrict the result to the requested fields. |
create_adset |
no_return_description |
Create a new ad set under a campaign. Requires name, campaign_id, optimization_goal, billing_event, and targeting. New ad sets default to PAUSED status. Returns the created ad set ID and details. |
delete_adset |
no_return_description |
Permanently remove the ad set identified by adset_id along with its ads. This action is irreversible. Returns confirmation that the deletion succeeded. |
copy_adset |
no_return_description |
Duplicate an existing ad set, either within the same campaign or into a different one via campaign_id. By default the ad set's ads are also copied; set deep_copy to false to skip them. Returns the new ad set ID and details. |
get_adset_targeting_sentence |
no_return_description |
Return a human-readable sentence describing the targeting of the ad set identified by adset_id, converting its raw targeting spec into readable text. |
get_adset_ads |
no_return_description |
List the ads that belong to the ad set identified by adset_id. Returns paginated results with the requested fields, using limit and after for pagination. |
get_adset_leads |
no_return_description |
Return the leads generated by the ad set identified by adset_id. Requires the leads_retrieval permission. Returns paginated results with the requested fields. |
list_ads |
no_return_description |
List ads in the ad account, optionally filtered by campaign_id, adset_id, or status. Returns paginated results with the requested fields. |
get_ad |
name_restates_behavior params_unexplained no_return_description |
Fetch a single ad by its ad_id and return its details such as creative, status, and placement. Optionally restrict the result to the requested fields. |
create_ad |
no_return_description |
Create a new ad inside an ad set. Requires name, adset_id, and a creative given as a JSON object_story_spec. New ads default to PAUSED status. Returns the created ad ID and details. |
delete_ad |
name_restates_behavior no_return_description |
Permanently remove the ad identified by ad_id. This action is irreversible. Returns confirmation that the deletion succeeded. |
copy_ad |
no_return_description |
Duplicate an existing ad, either within the same ad set or into a different one via adset_id, optionally renaming it and setting its status. Returns the new ad ID and details. |
get_ad_preview |
params_unexplained |
Render a preview of the existing ad identified by ad_id in the format specified by ad_format (for example DESKTOP_FEED_STANDARD or INSTAGRAM_STORY). Returns an HTML iframe showing how the ad will appear in that placement. |
get_delivery_estimate |
name_restates_behavior params_unexplained no_return_description |
Estimate delivery for the ad identified by ad_id under the given optimization_goal. Returns the estimated daily reach and cost to help forecast performance before launch. |
list_creatives |
name_restates_behavior no_return_description |
List the ad creatives in the ad account, returning paginated results with the requested fields. Use this to find creative IDs for use in ads. |
get_creative |
name_restates_behavior params_unexplained no_return_description |
Fetch a single ad creative by its creative_id and return its details such as its name and object_story_spec. Optionally restrict the result to the requested fields. |
create_creative |
no_return_description |
Create a new ad creative from an object_story_spec, which defines the ad content (link, photo, or video) and the associated Facebook Page. Returns the created creative ID and details. |
update_creative |
name_restates_behavior no_return_description |
Modify an existing ad creative identified by creative_id. Only its name and url_tags can be changed after creation; the object_story_spec is immutable. Returns the updated creative ID and details. |
create_dynamic_creative |
no_return_description |
Create a dynamic creative from an asset_feed_spec so Meta automatically combines the provided images, videos, titles, bodies, and CTAs into the best-performing variations. Returns the created creative ID and details. |
list_images |
no_return_description |
List the ad images uploaded to the ad account, returning paginated results with the requested fields. Use this to find image hashes for use in creatives. |
get_image |
name_restates_behavior params_unexplained no_return_description |
Fetch a single uploaded ad image by its image_id and return its details such as its hash, dimensions, and URL. Optionally restrict the result to the requested fields. |
delete_image |
name_restates_behavior no_return_description |
Permanently remove the ad image identified by its hash from the ad account. This action is irreversible. Returns confirmation that the deletion succeeded. |
list_videos |
no_return_description |
List the ad videos uploaded to the ad account, returning paginated results with the requested fields. Use this to find video IDs for use in creatives. |
get_video |
name_restates_behavior params_unexplained no_return_description |
Fetch a single uploaded ad video by its video_id and return its details such as its length, thumbnail, and status. Optionally restrict the result to the requested fields. |
delete_video |
name_restates_behavior no_return_description |
Permanently remove the ad video identified by video_id from the ad account. This action is irreversible. Returns confirmation that the deletion succeeded. |
list_canvases |
no_return_description |
List the Instant Experience (Canvas) creatives in the ad account, returning paginated results with the requested fields. |
get_canvas |
name_restates_behavior params_unexplained no_return_description |
Fetch a single Instant Experience (Canvas) by its canvas_id and return its details such as its body elements and name. Optionally restrict the result to the requested fields. |
create_canvas |
no_return_description |
Create a new Instant Experience (Canvas) on the Facebook Page identified by page_id, using the body_elements JSON array to define its layout (for example buttons, carousels, photos, videos, or text). Returns the created canvas ID and details. |
delete_canvas |
name_restates_behavior no_return_description |
Permanently remove the Instant Experience (Canvas) identified by canvas_id. This action is irreversible. Returns confirmation that the deletion succeeded. |
list_custom_audiences |
name_restates_behavior no_return_description |
List the custom audiences in the ad account, returning paginated results with the requested fields. Use this to find audience IDs for targeting. |
get_audience |
name_restates_behavior params_unexplained no_return_description |
Fetch a single custom audience by its audience_id and return its details such as its size, subtype, and delivery status. Optionally restrict the result to the requested fields. |
create_custom_audience |
no_return_description |
Create a new custom audience with the required name and subtype, which determines the audience source (CUSTOM, WEBSITE, APP, OFFLINE_CONVERSION, LOOKALIKE, ENGAGEMENT, etc.). Returns the created audience ID and details. |
delete_audience |
name_restates_behavior no_return_description |
Permanently remove the custom audience identified by audience_id. This action is irreversible. Returns confirmation that the deletion succeeded. |
add_users_to_audience |
params_unexplained no_return_description |
Add users to the custom audience identified by audience_id. The payload must be a JSON string of hashed user data with a schema array defining the data types (for example EMAIL, PHONE, FN, LN) and all PII SHA-256 hashed. Returns confirmation that the users were added. |
remove_users_from_audience |
params_unexplained no_return_description |
Remove users from the custom audience identified by audience_id. The payload format is the same as add_users_to_audience: a JSON string with a schema array and SHA-256 hashed user data. Returns confirmation that the users were removed. |
create_lookalike_audience |
no_return_description |
Create a lookalike audience modeled on the existing custom audience given by origin_audience_id. The lookalike_spec country and ratio (0.01 to 0.10) control how closely the new audience matches the source. Returns the created audience ID and details. |
get_audience_health |
name_restates_behavior no_return_description |
Return the health status and delivery readiness of the custom audience identified by audience_id, including its match rate, size, and operation status. |
list_saved_audiences |
name_restates_behavior no_return_description |
List the saved (reusable) targeting presets in the ad account, returning paginated results with the requested fields so they can be reused in ad set targeting. |
get_saved_audience |
name_restates_behavior no_return_description |
Fetch a single saved audience by its audience_id and return its targeting criteria. Optionally restrict the result to the requested fields. |
search_targeting |
no_return_description |
Search targeting options (such as interests, behaviors, and demographics) by the keyword q, optionally filtered by type. Returns matching targeting IDs suitable for use in ad set targeting specs. |
search_locations |
name_restates_behavior no_return_description |
Search geographic locations (countries, regions, cities, zip codes) by the query q, optionally restricted by location_types. Returns matching locations with IDs usable in ad targeting. |
search_targeting_map |
no_return_description |
Look up the targeting IDs in the targeting_list JSON array and return their full details, including names, types, and paths. Useful for resolving targeting IDs obtained from other endpoints. |
get_reach_estimate |
no_return_description |
Return the estimated audience reach for the given targeting_spec JSON string. Useful for planning campaign budgets and audience size expectations before creating campaigns. |
get_targeting_suggestions |
name_restates_behavior no_return_description |
Return targeting suggestions related to the targeting criteria in the targeting_list JSON string. Meta suggests related interests, behaviors, and demographics to expand or refine the target audience. |
get_campaign_insights |
name_restates_behavior params_unexplained no_return_description |
Return performance insights for the campaign identified by campaign_id, including metrics such as impressions, clicks, spend, and reach. Shape the results with fields, breakdowns, and the date range (date_preset or time_range). |
get_adset_insights |
no_return_description |
Return performance insights for the ad set identified by adset_id, including metrics such as impressions, clicks, spend, and reach. Shape the results with fields, breakdowns, and the date range (date_preset or time_range). |
get_ad_insights |
name_restates_behavior params_unexplained no_return_description |
Return performance insights for the ad identified by ad_id, including metrics such as impressions, clicks, spend, and reach. Shape the results with fields, breakdowns, and the date range (date_preset or time_range). |
get_form_leads |
name_restates_behavior no_return_description |
Return the leads submitted through the lead generation form identified by form_id. Returns paginated results with the requested fields, using limit and after for pagination. |
get_lead |
name_restates_behavior params_unexplained no_return_description |
Fetch a single lead by its lead_id and return its details such as the answers submitted in the form. Optionally restrict the result to the requested fields. |
list_lead_forms |
name_restates_behavior no_return_description |
List the lead generation forms for the Facebook Page identified by page_id. Returns paginated results with the requested fields, useful for finding form IDs before retrieving leads. |
create_lead_form |
name_restates_behavior params_unexplained no_return_description |
Create a new lead generation form on the Facebook Page identified by page_id, defining its questions and the required privacy_policy_url (the page where your privacy policy is hosted). Requires the pages_manage_ads permission. Returns the created form ID and details. |
get_lead_form |
name_restates_behavior no_return_description |
Fetch a single lead generation form by its form_id and return its details such as its questions and configuration. Optionally restrict the result to the requested fields. |
list_catalogs |
name_restates_behavior no_return_description |
List the product catalogs for the ad account, returning paginated results with the requested fields. Use this to find catalog IDs for product operations. |
get_catalog |
name_restates_behavior no_return_description |
Fetch a single product catalog by its catalog_id and return its details such as name and vertical. Optionally restrict the result to the requested fields. |
create_catalog |
name_restates_behavior no_return_description |
Create a new product catalog for the ad account with the given name and vertical (such as commerce, hotels, flights, destinations, home_listings, or vehicles). Returns the created catalog ID and details. |
update_catalog |
name_restates_behavior no_return_description |
Modify an existing product catalog identified by catalog_id, updating its name. Returns the updated catalog details. |
list_product_sets |
name_restates_behavior no_return_description |
List the product sets within the catalog identified by catalog_id. Returns paginated results with the requested fields. |
create_product_set |
name_restates_behavior no_return_description |
Create a new product set within the catalog identified by catalog_id, using the filter JSON rules to select which products belong to the set. Returns the created product set ID and details. |
get_product_set |
name_restates_behavior no_return_description |
Fetch a single product set by its set_id and return its details such as its name and filter rules. Optionally restrict the result to the requested fields. |
update_product_set |
name_restates_behavior no_return_description |
Modify an existing product set identified by set_id, updating its name and filter rules. Returns the updated product set details. |
list_products |
name_restates_behavior no_return_description |
List the products within the catalog identified by catalog_id, optionally filtered by filter rules. Returns paginated results with the requested fields. |
get_product |
name_restates_behavior params_unexplained no_return_description |
Fetch a single product by its product_id and return its details such as name, price, and availability. Optionally restrict the result to the requested fields. |
update_product |
name_restates_behavior params_unexplained no_return_description |
Modify an existing product identified by product_id, updating fields such as name, price, url, image_url, and availability. Returns the updated product details. |
batch_products |
no_return_description |
Batch create, update, or delete products in a catalog, supporting up to 5,000 items per request. UPDATE operations upsert when allow_upsert is true. Returns a batch handle to track progress with get_batch_status. |
get_batch_status |
no_return_description |
Check the status of the catalog batch operation identified by the handle returned from batch_products for the given catalog_id. Returns the current status and results of the batch. |
list_feeds |
name_restates_behavior no_return_description |
List the product feeds for the catalog identified by catalog_id. Returns paginated results with the requested fields. |
create_feed |
name_restates_behavior no_return_description |
Create a new product feed for the catalog identified by catalog_id, optionally configuring its schedule and file_url. Returns the created feed ID and details. |
upload_feed |
name_restates_behavior no_return_description |
Trigger an upload of the feed file at url for the product feed identified by feed_id. Returns status or a reference for tracking the upload. |
get_feed_uploads |
name_restates_behavior no_return_description |
Return the upload history for the product feed identified by feed_id, listing each past upload. Returns paginated results with the requested fields. |
list_rules |
name_restates_behavior no_return_description |
List the automated rules for the ad account, returning paginated results with the requested fields. Use this to find rule IDs for management. |
get_rule |
name_restates_behavior params_unexplained no_return_description |
Fetch a single automated rule by its rule_id and return its details such as its evaluation and execution specs. Optionally restrict the result to the requested fields. |
create_rule |
name_restates_behavior no_return_description |
Create a new automated rule for the ad account, defining its evaluation_spec (conditions), execution_spec (actions), and optional schedule_spec. Returns the created rule ID and details. |
update_rule |
name_restates_behavior params_unexplained no_return_description |
Modify an existing automated rule identified by rule_id, updating its name, conditions (evaluation_spec), actions (execution_spec), schedule, or status. Returns the updated rule details. |
delete_rule |
name_restates_behavior params_unexplained no_return_description |
Permanently remove the automated rule identified by rule_id. Returns confirmation that the deletion succeeded. |
list_experiments |
name_restates_behavior no_return_description |
List the A/B test experiments (ad studies) for the ad account, returning paginated results with the requested fields. |
create_experiment |
name_restates_behavior no_return_description |
Create a new A/B test experiment (ad study) with the given name, start and end times, and cells (a JSON array of test cells referencing campaigns). Returns the created experiment ID and details. |
get_experiment |
name_restates_behavior no_return_description |
Fetch a single experiment (ad study) by its experiment_id and return its details such as its name, dates, and cells. Optionally restrict the result to the requested fields. |
update_experiment |
name_restates_behavior no_return_description |
Modify an existing experiment (ad study) identified by experiment_id, updating its name or description. Returns the updated experiment details. |
get_experiment_results |
name_restates_behavior |
Return the results and cells for the experiment (ad study) identified by experiment_id, allowing review of A/B test outcomes. Optionally restrict the result to the requested fields. |
send_conversion_event |
name_restates_behavior no_return_description |
Send one or more server-side conversion events via the Conversions API (pixel), with each event specifying event_name, event_time, user_data, custom_data, and action_source. Returns the API response confirming event delivery. |
send_offline_event |
no_return_description |
Send offline conversion events to the offline event set identified by event_set_id, with events as a JSON array of offline events. Returns the API response confirming delivery. |
list_offline_event_sets |
name_restates_behavior no_return_description |
List the offline conversion data sets for the ad account, returning paginated results with the requested fields. |
create_offline_event_set |
name_restates_behavior no_return_description |
Create a new offline conversion data set with the given name and optional description. Returns the created event set ID and details. |
create_budget_schedule |
name_restates_behavior no_return_description |
Create a new ad budget schedule with the given budget_value (in account currency cents) and budget_value_type, active between time_start and time_end. Returns the created schedule ID and details. |
delete_budget_schedule |
name_restates_behavior no_return_description |
Permanently remove the budget schedule identified by schedule_id. This action is irreversible. Returns confirmation that the deletion succeeded. |
get_rf_prediction |
params_unexplained no_return_description |
Fetch a single reach and frequency prediction by its prediction_id (the ID returned when the prediction was created) and return its details such as expected reach and frequency. Optionally restrict the result to the requested fields. |
delete_rf_prediction |
no_return_description |
Permanently remove the reach and frequency prediction identified by prediction_id. This action is irreversible. Returns confirmation that the deletion succeeded. |
create_block_list |
name_restates_behavior no_return_description |
Create a new publisher block list for the ad account with the given name. Returns the created block list ID and details. |
add_to_block_list |
name_restates_behavior no_return_description |
Add the publisher URLs in the urls JSON array to the block list identified by list_id. Returns confirmation that the URLs were added. |
remove_from_block_list |
name_restates_behavior no_return_description |
Remove the publisher URLs in the urls JSON array from the block list identified by list_id. Returns confirmation that the URLs were removed. |
delete_block_list |
name_restates_behavior no_return_description |
Permanently remove the publisher block list identified by list_id. This action is irreversible. Returns confirmation that the deletion succeeded. |
get_ad_account |
name_restates_behavior no_return_description |
Return the configured ad account details, including status, balance, currency, timezone, and spend information. Use fields to select the specific account attributes returned. |
get_account_activities |
no_return_description |
Return the activity log for the ad account, showing changes made to campaigns, ad sets, ads, and other objects. Returns paginated results with the requested fields. |
list_account_users |
name_restates_behavior no_return_description |
List the users who have access to the ad account, returning their roles and permissions as paginated results with the requested fields. |
get_business |
name_restates_behavior params_unexplained no_return_description |
Fetch a single business by its business_id and return its details such as its name and related attributes. Optionally restrict the result to the requested fields. |
list_business_ad_accounts |
name_restates_behavior no_return_description |
List the ad accounts owned by the configured business (requires the META_BUSINESS_ID env var). Returns paginated results with the requested fields. |
list_business_users |
name_restates_behavior no_return_description |
List the users of the configured business (requires the META_BUSINESS_ID env var). Returns paginated results with the requested fields. |
add_business_user |
name_restates_behavior no_return_description |
Add a user to the configured business (requires the META_BUSINESS_ID env var) by their email, assigning the given role (ADMIN or EMPLOYEE). Returns the added user details. |
remove_business_user |
name_restates_behavior no_return_description |
Remove the user identified by user_id from the configured business (requires the META_BUSINESS_ID env var). Returns confirmation that the removal succeeded. |
list_business_pages |
name_restates_behavior no_return_description |
List the Facebook Pages owned by the configured business (requires the META_BUSINESS_ID env var). Returns paginated results with the requested fields. |
list_business_instagram_accounts |
name_restates_behavior no_return_description |
List the Instagram accounts owned by the configured business (requires the META_BUSINESS_ID env var). Returns paginated results with the requested fields. |
list_system_users |
name_restates_behavior no_return_description |
List the system users of the configured business (requires the META_BUSINESS_ID env var). Returns paginated results with the requested fields. |
create_system_user |
name_restates_behavior no_return_description |
Create a new system user in the configured business (requires the META_BUSINESS_ID env var) with the given name and role. Returns the created system user details. |
exchange_token |
no_return_description |
Exchange a short-lived access token for a long-lived token, keeping API access valid for a longer period. Requires META_APP_ID and META_APP_SECRET to be configured. Returns the long-lived token and its expiration. |
debug_token |
no_return_description |
Inspect the access token in input_token, returning its properties, permissions, expiration, and validity. Requires META_APP_ID and META_APP_SECRET. |
search_ad_library |
no_return_description |
Search the Meta Ad Library by search_terms within the ad_reached_countries, optionally filtering by ad_type. Returns matching ads as paginated results with the requested fields. Useful for competitive research and transparency. |
Selection evidence
Confusable tool pairs.
28 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_form_leads |
get_lead_form |
high | Both take a form_id and differ only by word order; a task like 'show me the data for this lead form' is ambiguous between form details and the leads submitted through it. |
list_product_sets |
list_products |
high | Descriptions are nearly identical ('list product... within a catalog') and both take catalog_id; 'list the products in catalog X' is ambiguous between product sets and individual products. |
get_audience |
get_saved_audience |
high | Both take audience_id and describe getting details of a specific audience by ID; unless the task explicitly says 'custom' or 'saved', a request like 'get the audience with ID 123' is ambiguous. |
get_product_set |
get_product |
medium | Both fetch details of 'a specific product(set)' but take different IDs (set_id vs product_id); users often drop the word 'set', so 'get me the product' can wrongly select get_product for a product-set request. |
list_ad_accounts |
list_business_ad_accounts |
medium | Both list ad accounts with identical signatures; 'list the ad accounts' is ambiguous between all accounts accessible to the user and those owned by the configured business unless scope is stated. |
create_creative |
create_dynamic_creative |
medium | Both create a creative and share the name prefix; 'create a creative for the ad' does not specify whether a static object_story_spec or an asset_feed_spec dynamic creative is wanted, so the agent may default to the wrong variant. |
get_ad |
get_ad_insights |
medium | Both take ad_id and read as 'get the ad...'; a task like 'pull the ad's data' or 'get info on this ad' is ambiguous between entity details and performance insights. |
get_adset |
get_adset_insights |
medium | Same pattern as ad vs ad insights: 'get info on this ad set' is ambiguous between the ad set's details and its performance insights since both take adset_id. |
get_adset |
get_adset_leads |
medium | A task like 'get the adset's data' could target either the ad set details or the leads it generated; both take adset_id and share the get_adset prefix. |
get_adset_leads |
get_lead |
medium | Vague 'get the leads' requests are ambiguous between a list scoped by adset_id and a single-lead lookup by lead_id; passing the wrong ID type selects the wrong tool. |
get_campaign |
get_campaign_insights |
medium | Both take campaign_id; 'get the campaign data' or 'show me the campaign' is ambiguous between campaign details and its performance insights. |
get_campaign |
get_campaign_leads |
medium | Both take campaign_id; a task like 'get the campaign's data/leads' can be misrouted to the details tool when leads were intended, or vice versa. |
get_campaign_leads |
get_lead |
medium | 'Get the leads' is ambiguous between campaign-scoped lead lists and individual lead retrieval; the agent may feed a lead_id to the campaign tool or a campaign_id to the lead tool. |
get_campaign_adsets |
get_adset |
medium | Both are adset retrieval; 'get the adsets' is ambiguous between listing all adsets for a campaign (campaign_id) and retrieving one adset (adset_id), so the wrong ID can go to the wrong tool. |
get_experiment |
get_experiment_results |
medium | Both take experiment_id and share the get_experiment prefix; 'get the experiment outcome/result' may be served by the details tool or the results tool depending on phrasing. |
get_form_leads |
get_lead |
medium | Both fetch lead data; 'get the leads' is only disambiguated by whether the user supplies a form_id (get_form_leads) or a lead_id (get_lead), allowing misrouting when one ID is given. |
get_lead |
get_lead_form |
medium | Near-identical names, both 'get a specific lead...' by ID-like parameter; 'get details for this lead form' vs 'get details for this lead' is easy to conflate, especially when a form_id and lead_id are confused. |
update_product_set |
update_product |
medium | Both 'update an existing product(set)' with similar names but different required IDs; 'update the product' can be misread as updating the item rather than its set, and the agent may pass a set_id to the wrong tool. |
list_business_ad_accounts |
list_business_instagram_accounts |
medium | Both list accounts 'owned by the configured business' with identical signatures; a generic task like 'list the business's accounts' does not reveal whether ad accounts or Instagram accounts are wanted. |
get_adset_insights |
get_ad_insights |
medium | Both fetch performance insights, differing only by level (adset_id vs ad_id); a task like 'get the performance of this ad' is ambiguous if the ID supplied actually refers to the parent ad set. |
list_business_users |
list_system_users |
medium | Both list users of the configured business with identical signatures; 'list the business users' is ambiguous between regular business users and system users. |
get_account_insights |
get_ad_insights |
medium | get_account_insights needs no ID while get_ad_insights requires ad_id; a task like 'get the account performance' is ambiguous between the account-level tool and an ad-scoped tool when an ad_id is present. |
get_campaign_insights |
get_ad_insights |
medium | Both return the same insight shape at different levels (campaign_id vs ad_id); 'get performance for this ad' can be misattributed to the campaign tool when the ID belongs to an ad under it, or vice versa. |
list_custom_audiences |
list_saved_audiences |
medium | Both list audiences in the ad account with no distinguishing parameters; 'list all the audiences' is ambiguous between custom audiences and reusable saved audiences. |
get_campaign_ads |
get_adset_ads |
medium | Both return 'all ads belonging to' a parent level; if the user says 'get all the ads' with an ID, the agent may attach a campaign_id to the adset tool or an adset_id to the campaign tool. |
get_account_insights |
get_adset_insights |
medium | Both fetch performance insights at different levels; 'show me the metrics for this group' is ambiguous between account-level and adset-level tools, especially when an adset ID is supplied to the account tool. |
get_campaign_insights |
get_adset_insights |
medium | Both fetch performance insights at campaign vs adset level; a request like 'get the performance of the ad group' can be routed to the campaign tool if the user's ID is actually an adset ID or unclear. |
get_campaign_leads |
get_adset_leads |
medium | Both return leads generated by an ad structure and differ only by parent ID; 'get the leads for this group' is ambiguous about campaign vs adset, so the ID can be wired to the wrong parent tool. |
Compare the field