Meta Ads by Get MCP Ads
Enables reading Facebook Pages, posts, and organic engagement data through the Facebook/Meta Graph API.
Provides access to linked Instagram accounts and basic Instagram profile data.
Provides read and write access to Meta Ads, including campaigns, ad sets, ads, creatives, audiences, pixels, catalogs, insights, budgets, schedules, and campaign creation.
Meta Ads MCP server
Ask better questions about your Meta campaigns.
Compare campaign performance, inspect delivery and prepare changes from your MCP client.
Watch the demo · What's new · Install · Tool reference · Try hosted getmcpads

Play the 27-second product film
The film demonstrates hosted getmcpads with staged data. Its creative galleries and MCP Apps interface belong to the hosted product. This repository provides the standalone native API tools.
41 read tools · 23 write tools, disabled by default.
Run locally with your own platform credentials and a client that supports stdio MCP, such as Claude Desktop, Claude Code or Cursor. Your requests go directly to the platform. For managed connections, including supported ChatGPT setups, use the hosted option.
What's new
v2.0.1: Native tools and security update · September 20, 2026
Use account-scoped creative reads compatible with Graph v26, including bounded historical fallback and ownership verification.
Add exact entity configuration and uploaded-video readiness reads.
Update campaign creation, budget ownership, schedule validation and post-write verification.
Require Node.js 22.12 or newer and check Node 22/24 in CI.
Update vulnerable dependencies and regenerate the MCP catalog.
Full changelog · Source synchronization details · All releases
Upgrade notes
Requires Node.js 22.12 or newer. CI covers Node 22 and 24. Version 2.0.1 drops Node 18 and 20 support. Read the current tool schemas before reusing saved arguments. Writes remain optional and require explicit confirmation. Hosted creative integrations and MCP Apps UI are outside this release.
Related MCP server: Meta Ads MCP
Install this release
This is a GitHub source release. npm and MCP Registry versions are published separately. The commands below select this exact version; unpinned npx examples later in this document select the version currently available on npm.
git clone --branch v2.0.1 --depth 1 https://github.com/get-mcp-ads/meta-ads-mcp-server.git
cd meta-ads-mcp-server
npm ci
npm run buildConfigure your MCP client to run node with the absolute path to dist/cli.js and the platform credentials documented below.
Prefer a managed connection? Use Meta Ads with hosted getmcpads. Connect your account, select the data your assistant may access and use the hosted MCP connection. See the site for current features and plans.
What you get
41 read tools | Campaigns, ad sets, ads, creatives, audiences, pixels, catalogs, Pages, Instagram, activity logs, A/B tests and lift studies |
23 write tools | Off by default. Status, budgets, schedules, renames, campaign creation. Each one previews before it applies |
190 metrics | Including derived ones computed client-side (ROAS, CPA, frequency, hook rate, attribution-window views) |
56 breakdowns · 90 dimensions | With a compatibility matrix that catches invalid combinations before they hit the API |
7 resources | Live catalogues the model can read: metrics, breakdowns, compatibility rules, 11 workflow recipes |
Forward-compatible reads |
|
The query planner
Meta rejects many metric/breakdown combinations, and the error messages rarely say why. This server encodes the compatibility matrix, so it splits an impossible request into several valid API calls and merges the results instead of failing.
meta_validate_query lets the model check a combination before spending a call on it.
That is the difference between an assistant that reports "the API returned error 100" and
one that returns your numbers.
Getting a token
This is the one step that takes real effort, and it's worth doing properly.
You need a Meta access token with ads_read. There are three ways to get one; the
second is the one we recommend.
Recommended: System User token (does not expire)
A System User belongs to your Business, not to a person. Its token survives password changes and staff departures, and needs no App Review to access ad accounts your Business already owns.
Go to Business Settings → Users → System Users
Add a system user. Give it the Employee role unless you need more.
Assign Assets → select your ad accounts → grant View performance (add Manage campaigns only if you plan to enable writes).
Generate New Token → pick your app → select scope
ads_read(addads_managementonly for writes).Set the expiry to Never.
Copy the token. Meta shows it once.
📖 Meta's System User documentation
Quick test: Graph API Explorer (expires in ~1 hour)
Fine for trying the server out, useless for daily work.
Graph API Explorer → select your app →
add ads_read → Generate Access Token.
Long-lived user token (~60 days)
Exchange a short-lived token for a 60-day one. You will have to redo this every two months. 📖 Long-lived tokens
Which permissions?
Permission | When you need it |
| Always. Campaigns, insights, everything read-only |
| Only if you set |
| Optional. Business Manager asset discovery |
| Optional. Page posts and organic enrichment |
| Optional. Linked Instagram accounts |
| Optional. Product catalog reads |
Run meta_health_check as your first call: it reports which scopes you actually have
and which ones are missing for the tools you tried to use, without printing your token.
Setup
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"meta-ads": {
"command": "npx",
"args": ["-y", "@getmcpads/meta-ads-mcp-server"],
"env": {
"META_ACCESS_TOKEN": "your-token-here"
}
}
}
}Restart Claude Desktop. Ask it: "list my Meta ad accounts".
Claude Code
claude mcp add meta-ads --env META_ACCESS_TOKEN=your-token-here -- npx -y @getmcpads/meta-ads-mcp-serverCursor
.cursor/mcp.json in your project, same shape as the Claude Desktop config above.
From source
git clone https://github.com/get-mcp-ads/meta-ads-mcp-server.git
cd meta-ads-mcp-server
npm install && npm run build
cp .env.example .env # then fill in META_ACCESS_TOKEN
npm startConfiguration
Variable | Default | Meaning |
| none | Required. Your Meta access token |
| unset | Set to |
|
| Graph API version. Override to pin another |
|
|
|
Check your setup at any time:
npm run doctorWrites, and why they preview first
Write tools are disabled by default. Enable them with META_ENABLE_WRITES=1.
When enabled, every write tool returns a preview and changes nothing:
// meta_update_adset_budget { adSetId: "123", currency: "EUR", dailyBudget: 50 }
{
"applied": false,
"action": "meta_update_adset_budget",
"change": { "adSet": "123", "field": "daily_budget", "amount": 50,
"currency": "EUR", "inMinorUnits": 5000 },
"message": "Preview only, nothing was changed. Repeat the same call with confirm: true to apply this change to the live account."
}Only a second call carrying confirm: true touches the live account.
This is deliberate. An assistant composes these calls, and it can pick the wrong account, the wrong campaign, or the wrong order of magnitude on a budget. A mandatory preview makes the mistake visible before it costs money, and gives a human the stopping point the protocol does not guarantee on its own.
Two further guardrails:
meta_create_campaignalways creates the campaignPAUSED. There is no option to create it active.Budgets are converted to minor units per currency. The yen, the won and the CFA franc have no subunit, so sending 1250 for ¥12.50 would multiply the spend by a hundred. The server knows the zero-decimal currencies.
Tool | What it changes |
| Pause or reactivate |
| Daily or lifetime budget |
| Start and end time |
| Name only |
| Creates a campaign, always |
Tools
Every tool is listed below. See server-card.json for complete parameter and output schemas.
Tool | Purpose |
| Agent-ready read-only health check: validates token metadata, lists accessible ad accounts, and warns about missing read scopes without exposing the access token. |
| Discover accessible Meta Business assets read-only: businesses, pages, Instagram accounts, pixels, and datasets when permissions allow. |
| List accessible Facebook Pages with id, name, category, tasks, picture, and linked Instagram account references when available. |
| List Instagram accounts linked to accessible Pages, Business Manager assets, or an ad account when permissions allow. |
| List pixels and datasets from an ad account or Business Manager when accessible, returning actionable warnings for permission-limited edges. |
| Read ad account activity logs from /{ad_account_id}/activities with object, event, actor, timestamp, and extra_data fields. |
| Aggregate read-only delivery diagnostics across campaigns, ad sets, and ads using status/effective_status/issues_info where available plus simple delivery insights. |
| Return ad-linked creative media with actual ad names, collection covers, all carousel/flexible components, resolved image hashes and video URLs. |
| Read detailed custom, saved, and lookalike audiences with pagination and rich fields where permissions allow. |
| Read Product Catalogs and Product Items when catalog access is available. |
| Query product-breakdown insights and enrich rows with Product Catalog metadata when catalog access is available. |
| Read brand safety, suitability, placement, and context-control signals from ad account/ad set targeting and optional block-list edges. |
| Read and interpret A/B test or conversion lift study results with confidence guardrails, cells, objectives, and optional cell entities. |
| Read Facebook Page posts and Instagram media with URLs, native periods and optional insights. |
| List all Meta ad accounts accessible with the current token. |
| Get detailed information for a specific Meta ad account: name, currency, timezone, spend cap, status, business info. |
| List campaigns for a Meta ad account. |
| List ad sets for a Meta ad account, optionally filtered by campaign. |
| List ads for a Meta ad account, optionally filtered by ad set. |
| Query Meta Ads performance insights. |
| Get hierarchical campaign structure: campaigns -> ad sets -> ads. |
| Get ad creative content: text, images, videos, links, call-to-action. |
| List custom, saved, and lookalike audiences for a Meta ad account. |
| List conversion lift studies and A/B tests (Ad Studies) for an ad account. |
| Get detailed results for a conversion lift or A/B test study. |
| Validate a metric/breakdown combination BEFORE executing. |
| Read published Facebook Page posts using a Page token resolved from the connected user. |
| Check the current access token validity, expiration, and granted scopes. |
| Search campaigns, ad sets, or ads by name within an ad account. |
| Read arbitrary flat fields from one Meta Graph node. |
| List an allowlisted read-only Meta Graph edge with caller-selected flat fields, filters, and cursor pagination. |
| Query the Meta Insights edge with validated native field names, breakdowns, action breakdowns, attribution windows, filters, sort, summary, and pagination. |
| Search Meta's read-only targeting metadata for interests, validated interests, geographies, locales, countries, cities, regions, markets, or postal codes. |
| Get the read-only preview markup for an existing Meta ad in a requested placement format. |
| List the ad account image library (/adimages): hash, name, dimensions, status, a permanent publicly served display URL (permalink_url), short-lived CDN URLs, and optionally the creatives using each image. |
| List the ad account video library (/advideos): title, duration, processing status, and publicly served thumbnails (preferred and largest sizes). |
| Resolve fresh download URLs (source) and thumbnails for specific ad videos. |
| Read a specific entity in its ad account for reconciliation. |
| Check video processing and membership in the selected account library. |
| Read an existing ad set, its parent campaign budget/objective and account currency before preparing an edit. |
| Read the completion and per-item errors for a catalog batch handle. |
Disabled by default. Calls preview unless explicitly confirmed. Check the configuration and exact schema before use.
Tool | Purpose |
| Create a PAUSED Meta campaign with either ad set budgets (omit campaign budget), a daily campaign budget, or a lifetime campaign budget. |
| Change an ad set daily or lifetime budget after checking its parent budget and existing schedule. |
| Change start and/or end time using ISO 8601 with an explicit offset. |
| Change an existing campaign-owned budget after verifying currency and ownership. |
| Create a PAUSED Meta ad set with explicit targeting, optimization, placements, attribution, bidding and schedule. |
| Update targeting, optimization, placements, attribution, bidding, budget or schedule. |
| Duplicate a known-good ad set within the selected account, preserving complex native configuration. |
| Create an ad creative from an existing post or an explicit object_story_spec and optional asset_feed_spec. |
| Create a PAUSED ad using an existing ad set and creative from the selected account. |
| Replace an ad’s creative with another existing creative from the same account. |
| Upload an image into the selected ad account using base64 bytes (up to 5 MiB decoded). |
| Import a video from a publicly reachable HTTPS URL or base64 MP4 bytes (up to 5 MiB decoded). |
| Create a website, engagement, customer-list container or lookalike audience. |
| Update an existing custom audience name, description, retention or complete rule. |
| Create a filtered product set in a catalog owned by the same Business as the selected ad account. |
| Replace a product set filter or rename it. |
| Create or update up to 50 catalog products by retailer_id. |
| Pause or reactivate a Meta campaign. |
| Pause or reactivate a Meta ad set. |
| Pause or reactivate a Meta ad. |
| Rename a Meta campaign. |
| Rename a Meta ad set. |
| Rename a Meta ad. |
URI | Contents |
| What this server exposes, and which tool to run first |
| All 190 metrics with categories and formats |
| All 56 breakdowns and where they are valid |
| The compatibility matrix, 90 dimensions |
| 11 step-by-step workflows |
| Read-only scope guidance |
| Scope positioning for a Meta App Review submission |
Security
The server holds a credential that can read live ad accounts, and modify them when writes are enabled. Concretely:
The token is never logged, at any log level, and never written to disk.
Requests go only to
graph.facebook.comon the pinned version. Any other host is refused rather than called. Covered by tests.Redirects are refused once a token is attached, so a redirect cannot forward your credential elsewhere. Covered by tests.
No telemetry. The server makes no network call other than to the Graph API. There is no analytics, no phone-home, and no usage reporting. You can verify this by grepping the source for
fetch.
Full policy and reporting instructions: SECURITY.md.
Looking for a managed, multi-platform version?
Try hosted Meta Ads if you want to use this source without operating a local server. getmcpads also connects advertising, Search Console and GA4 through one MCP URL. Source availability and plan limits are listed on the site; connecting an account is still required.
Follow the Meta Ads connection guide.
Select the account or property your assistant may read.
Try a read-only review: “Compare campaign results and investigate frequency alongside CTR. State missing data and do not change anything.”
See the current hosted tool catalogue and pricing before choosing a paid plan. This Apache 2.0 adapter remains independently useful with your own credentials.
Contributing
Issues and pull requests are welcome. See CONTRIBUTING.md. Please read SECURITY.md before reporting anything security-related.
Licence
Apache License 2.0. See also NOTICE.
Facebook, Meta, Instagram and the Meta Marketing API are trademarks of Meta Platforms, Inc. This project is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. It is an independent client of a public API.
MCP contracts and desktop bundle
Every tool declares read/write annotations, parameter descriptions and a structured output schema. Successful calls expose the payload as structuredContent.result; errors retain isError: true. The generated server card contains definitions only.
Run npm run bundle -- /path/to/output to build a .mcpb desktop bundle from the current catalog. Credentials are entered locally during installation. Write tools remain disabled unless explicitly enabled.
More from getmcpads
Google Ads · Google Analytics 4 · Google Search Console · TikTok Ads · Pinterest Ads · X Ads
Maintained by Emmanuel at getmcpads. Questions: hello@getmcpads.com.
Available Tools
41 toolsmeta_debug_tokenmeta debug tokenARead-onlyIdempotent
Check the current access token validity, expiration, and granted scopes. Useful for diagnosing auth issues.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value by specifying that it inspects the 'current' token and lists the details it reports (validity, expiration, scopes), which annotations do not convey. 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, no filler. The core function is front-loaded in the first sentence, and the use case completes the second. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool with an output schema present and safety already disclosed via annotations, the description covers the purpose, the specific data inspected, and the common usage scenario. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with 100% coverage, so all parameters are already fully described (none exist). The description correctly makes no parameter claims, and the baseline of 4 applies for zero-parameter tools.
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 ('Check') with a concrete resource ('access token') and enumerates the exact aspects checked (validity, expiration, granted scopes). This distinguishes it from sibling tools like meta_health_check and the many get_* tools, which target business assets or system health rather than token state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for diagnosing auth issues' provides clear context for when to invoke this tool. However, it does not explicitly name alternatives or state when not to use it, though the token-specific scope makes those exclusions largely implicit among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_account_detailsmeta get account detailsARead-onlyIdempotent
Get detailed information for a specific Meta ad account: name, currency, timezone, spend cap, status, business info.
| Name | Required | Description | Default |
|---|---|---|---|
| adAccountId | Yes | Ad account ID (e.g., act_123456789) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds no behavioral context such as required permissions, rate limits, or error conditions, but it also does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence that front-loads the action and resource, then lists the relevant fields. Every word earns its place, with no redundant phrasing or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema, rich safety annotations, and an output schema, the description is sufficient. An agent can correctly select and invoke this tool for a targeted account-details lookup without needing additional context.
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 single parameter adAccountId is fully described in the schema, including an example format (act_123456789). The description adds no further parameter meaning beyond confirming the target is a specific ad account, so it provides no extra value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Get detailed information for a specific Meta ad account') and enumerates concrete data fields (name, currency, timezone, spend cap, status, business info). This clearly distinguishes it from sibling list-style tools like meta_list_ad_accounts.
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 'for a specific Meta ad account' phrasing implies a targeted single-account lookup, which is useful context versus listing tools. However, it does not explicitly state when to prefer this tool, what prerequisites exist, or how it relates to alternatives like meta_list_ad_accounts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_ad_activitymeta get ad activityARead-onlyIdempotent
Read ad account activity logs from /{ad_account_id}/activities with object, event, actor, timestamp, and extra_data fields.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| since | No | Optional start time accepted by Graph API, usually YYYY-MM-DD or Unix seconds. | |
| until | No | Optional end time accepted by Graph API, usually YYYY-MM-DD or Unix seconds. | |
| cursor | No | Pagination cursor from previous response | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered externally. The description adds endpoint and field context but does not disclose operational behavior such as pagination behavior, rate limits, or authentication requirements, leaving it at the baseline for annotation-backed tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence front-loads the verb, resource, endpoint, and expected fields with no filler or redundancy. Every word contributes to the agent's understanding.
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 endpoint, field list, complete parameter schema, and rich annotations give an agent enough to invoke the tool correctly. The main gap is a brief usage pointer or sibling distinction, which would make it fully complete given the large set of sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents all five parameters with defaults, bounds, and formats, so the description does not need to add parameter detail. The mention of output fields like object, event, actor, timestamp, and extra_data is useful context but does not alter parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Read'), resource ('ad account activity logs'), endpoint path ('/{ad_account_id}/activities'), and expected output fields, so an agent can tell it apart from insight or asset tools. It does not explicitly name or contrast a sibling tool such as meta_get_insights_raw or meta_list_edge_raw, which keeps it just below the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'activity logs' implies an audit/event use case, but there is no explicit statement of when to prefer this tool over alternatives like meta_get_insights or meta_get_node_fields. No exclusions, prerequisites, or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_ad_previewmeta get ad previewARead-onlyIdempotent
Get the read-only preview markup for an existing Meta ad in a requested placement format. The response may contain an iframe body but never creates or edits a creative.
| Name | Required | Description | Default |
|---|---|---|---|
| adId | Yes | Exact ad ID in the selected advertising account. | |
| adFormat | No | Native Meta ad preview format; must be compatible with this ad's creative. | DESKTOP_FEED_STANDARD |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds valuable behavioral detail by noting the response may contain an iframe body and that it never creates or edits a creative, which goes beyond the structured annotation fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly worded sentence conveys the action, the object, the scope, and a key behavioral caveat. It is front-loaded with the core purpose and contains no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a complete input schema, a comprehensive output schema, and strong annotations, the description covers all necessary aspects: what it does, the read-only nature, the format dimension, and the iframe body caveat. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both adId and adFormat are already well documented in the schema. The description reinforces the role of the placement format ('requested placement format') but adds no new parameter-specific semantics beyond what the schema provides, matching the baseline.
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 ('Get') and a specific resource ('preview markup for an existing Meta ad'), and further narrows it to a requested placement format. It clearly distinguishes this tool from generic getters like meta_get_ads or meta_get_creatives by focusing on preview markup, not data records.
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 clearly positions the tool for fetching read-only preview markup of an existing ad, which is a distinct use case among the many getter siblings. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough that an agent can infer its appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_adsmeta get adsARead-onlyIdempotent
List ads for a Meta ad account, optionally filtered by ad set. Returns ad ID, name, status, and creative reference.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| adSetId | No | Alias for adsetId. If both are supplied, they must match. | |
| adsetId | No | Filter by ad set ID; adSetId is also accepted. | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| statusFilter | No | Filter by native effective_status, not configured status. PAUSED excludes IN_PROCESS, CAMPAIGN_PAUSED and ADSET_PAUSED. Omit for post-creation verification and inspect both returned status fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a read-only, idempotent, non-destructive operation, so the description does not need to restate safety. It adds some useful return-field context, but it does not disclose pagination behavior or the effective-vs-configured status nuance, which remain in the parameter schema rather than the description.
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 with the core action front-loaded and no filler. The return summary is compact and complements, rather than duplicates, the schema and output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given rich annotations, a full schema with 100% parameter coverage, an output schema, and a clear description, the tool is largely complete for an agent to invoke effectively. It is only slightly incomplete in not providing explicit alternative routing or behavioral caveats beyond what structured fields already handle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and parameters like adSetId/adSetId aliasing plus statusFilter semantics are already documented. The description adds only the high-level notion of an optional ad-set filter, matching baseline value over the schema without going further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a clear resource ('ads'), a scope ('Meta ad account'), and an optional ad-set filter, making the tool's purpose immediately distinguishable from sibling tools like meta_get_campaigns and meta_get_adsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'List ads for a Meta ad account, optionally filtered by ad set' gives clear context for when the tool applies. It does not explicitly contrast alternatives such as meta_get_adsets or meta_get_ad_activity, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_adset_configurationmeta get adset configurationARead-onlyIdempotent
Read an existing ad set, its parent campaign budget/objective and account currency before preparing an edit. Returns native settings; no mutation.
| Name | Required | Description | Default |
|---|---|---|---|
| adSetId | Yes | Exact Meta ad set ID in the selected advertising account. | |
| adAccountId | Yes | Owning advertising account ID. Use the exact ID returned by account discovery; do not substitute a campaign or business ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the 'no mutation' statement is mostly redundant. The description adds useful scope detail about parent campaign budget/objective and account currency, but does not disclose additional behavioral traits such as error behavior, rate limits, or output caveats beyond what the annotations already cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense, front-loaded sentence conveys purpose, scope, return type, and safety in around 20 words. There is no filler or repetition of schema 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?
With only two fully documented required parameters, a complete annotation set, and an output schema present, the description supplies the remaining operational context an agent needs: this is a read-before-edit configuration lookup with native settings and no 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 100%, and the schema already explains both adSetId and adAccountId with usage guidance such as not substituting a campaign or business ID. The description itself adds no parameter-level meaning beyond the schema, so the 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 names a concrete verb and resource: read an existing ad set plus its parent campaign budget/objective and account currency. It also clarifies the return nature with 'Returns native settings; no mutation,' making it distinct from broader list/read siblings like meta_get_adsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before preparing an edit' gives a clear and specific context for when this tool is appropriate. It does not explicitly name alternatives or exclusions, but the intended use case is obvious enough for selecting this over sibling getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_adsetsmeta get adsetsARead-onlyIdempotent
List ad sets for a Meta ad account, optionally filtered by campaign. Returns targeting, budget, optimization, and schedule info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| campaignId | No | Filter by campaign ID | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| statusFilter | No | Filter by native effective_status, not configured status. PAUSED excludes IN_PROCESS, CAMPAIGN_PAUSED and ADSET_PAUSED. Omit for post-creation verification and inspect both returned status fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the description does not need to restate safety. It adds some behavioral context by summarizing what kind of information is returned (targeting, budget, optimization, schedule), but it does not surface pagination or status-filter nuances beyond what the schema already exposes.
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 states the core purpose first, then the optional filter, then the return value summary. Every clause earns its place with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full parameter schema, rich annotations, and an output schema, the description is largely sufficient for an agent to invoke the tool correctly. The main missing piece is guidance for distinguishing this tool from sibling listing tools such as meta_get_ads and meta_get_campaigns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters in detail. The description adds only that filtering by campaign is possible, which is already evident from the campaignId property. This meets the baseline but provides no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List'), a clear resource ('ad sets for a Meta ad account'), and an optional filter ('by campaign'). It also previews the returned data categories. However, it does not explicitly differentiate this tool from siblings like meta_get_ads or meta_get_campaigns, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is the one to use for listing ad sets and that campaignId can narrow results. It does not provide explicit when-to-use or when-not-to-use guidance, nor does it reference alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_ad_studiesmeta get ad studiesARead-onlyIdempotent
List conversion lift studies and A/B tests (Ad Studies) for an ad account. Includes study type, status, and cells.
| Name | Required | Description | Default |
|---|---|---|---|
| adAccountId | Yes | Ad account ID (e.g., act_123456789) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds information about the output content ('Includes study type, status, and cells') but does not disclose behavioral traits like pagination, rate limits, or data freshness. Since annotations carry the main behavioral burden, the description provides modest additional 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 states the primary action and scope immediately, followed by a brief note on included fields. No unnecessary words or 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 list tool with one parameter and an output schema available, the description is sufficient. It states the purpose and what the result includes, without needing to explain return values since the output schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter adAccountId with a clear description and example. The tool description adds nothing beyond that. With 100% schema coverage, the baseline is 3, and there is no reason to score higher.
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 a specific verb ('List') and resource ('conversion lift studies and A/B tests (Ad Studies)') with a scope ('for an ad account'). It adds detail on included fields (type, status, cells). However, it does not explicitly distinguish this tool from siblings like meta_get_study_results, which is a similar retrieval tool.
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 purpose is clear enough that an agent can infer when to use it (when needing ad studies), but there is no explicit guidance on when not to use it or mention of alternative tools. It relies on the agent's ability to infer context from the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_audience_detailsmeta get audience detailsARead-onlyIdempotent
Read detailed custom, saved, and lookalike audiences with pagination and rich fields where permissions allow.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Provider object or operation type selected from this schema's allowed values. | all |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| adAccountId | No | Ad account ID used when listing audiences. | |
| audienceIds | No | Specific audience IDs to fetch via batch IDs lookup. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the readOnly and destructive annotations: it discloses pagination support and that rich fields depend on permissions. It avoids contradicting any annotation, and 'where permissions allow' helps set expectations about partial data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the core purpose ('Read detailed ... audiences') and then adds two key behaviors (pagination, permission-dependent fields). Every word earns its place and there is 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?
The schema fully documents parameters, annotations cover safety, and an output schema exists, so the description does not need to explain return values. It covers the essential scope, pagination, and permission nuance, but the lack of guidance on choosing this over meta_get_audiences leaves a slight completeness gap for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all five parameters, including constraints and defaults. The description itself adds no parameter-specific meaning, so the baseline of 3 is appropriate; it has zero effect on parameter clarity.
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 reads detailed custom, saved, and lookalike audiences, naming both the resource and action. It hints at being the detailed counterpart to other audience tools, but it does not explicitly differentiate from the sibling meta_get_audiences.
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 given about when to use this tool over alternatives such as meta_get_audiences. The description implies it serves detailed audience reads, but it does not state exclusions, prerequisites, or which sibling to prefer for simpler queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_audiencesmeta get audiencesBRead-onlyIdempotent
List custom, saved, and lookalike audiences for a Meta ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by audience type | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'List' wording is consistent with those. The description adds no extra behavioral context like pagination limitations, rate limits, or the meaning of open-world results, but the annotations carry most of the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that directly states the verb, resource, and scope with zero filler. Every word contributes meaning, and the size is appropriate for this simple list-type tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full parameter descriptions, complete output schema, and annotations covering read-only/idempotent behavior, the description is mostly sufficient. It could have pointed to meta_get_audience_details for single-audience lookups, but the core calling context is adequately covered by the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description's mention of custom/saved/lookalike mirrors the enum for 'type' and adds no new meaning beyond the schema; 'limit' and 'adAccountId' are fully covered by their 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 the specific verb 'List' with the resource 'audiences' and names the three audience types (custom, saved, lookalike) plus the ad account scope. It clearly differentiates the list-level function from a detail-level tool like meta_get_audience_details, though it does not name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus siblings such as meta_get_audience_details or other audience-related tools. There are no alternatives named, no exclusions, and no context indicating when a user should choose a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_brand_safety_controlsmeta get brand safety controlsARead-onlyIdempotent
Read brand safety, suitability, placement, and context-control signals from ad account/ad set targeting and optional block-list edges.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| adsetIds | No | Specific ad set IDs to inspect. If omitted, reads ad sets from the ad account. | |
| businessId | No | Optional Business Manager ID for block-list discovery. | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| includeAdsets | No | Include ad set configuration when checking brand safety. | |
| includeBlockLists | No | Include accessible brand-safety block-list metadata. | |
| includeRawTargeting | No | Include the native targeting specification for diagnostics. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the behavioral burden with readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the description adds modest context about data sources: ad account/ad set targeting and optional block-list edges. The verb 'Read' is consistent with annotations, and there is no contradiction, but no additional behavioral details such as permissions or rate limits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler: it starts with the verb 'Read', identifies the resource, and states the data source scope. Every phrase contributes meaningful selection information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With all parameters documented in the schema, an output schema present, and annotations covering safety and mutability, the description is largely complete for an agent to invoke the tool. It conveys the read scope and optional block-list dimension, though it does not explicitly guide selection among sibling read tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters with descriptions, types, defaults, and constraints. The description only broadly references block-list edges, matching includeBlockLists, but the schema handles parameter semantics adequately, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Read brand safety, suitability, placement, and context-control signals from ad account/ad set targeting and optional block-list edges.' This is clearly distinct from the sibling tools, none of which mention brand safety or block-list controls.
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 use when brand safety, suitability, placement, or context-control signals are needed, and it names optional block-list edges as part of the scope. However, it does not provide explicit when-to-use vs. when-not-to-use guidance or name alternatives like meta_get_adset_configuration or meta_get_entity_configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_business_assetsmeta get business assetsARead-onlyIdempotent
Discover accessible Meta Business assets read-only: businesses, pages, Instagram accounts, pixels, and datasets when permissions allow.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Legacy cursor for /me/businesses only. Use cursors for asset edges. | |
| cursors | No | Per-edge cursors from paging/nextActions. Never reuse a cursor for another edge. | |
| maxPages | No | Maximum pages per edge; remaining pages are reported explicitly. | |
| businessId | No | Business Manager ID. With adAccountId, discover only its owning Business; otherwise list /me/businesses when this is omitted. | |
| adAccountId | No | Optional ad account ID to discover its owner Business and assigned pixels; datasets are read from that Business when permitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds a permission-dependent availability caveat ('when permissions allow') and the notion of 'accessible' assets, which is useful context beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly packed sentence that front-loads the key facts: read-only discovery, the asset categories, and the permission caveat. There is no filler or repetition of schema 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 tool's complexity—six parameters, nested outputs, and pagination semantics—the description is minimal, but the input schema, annotations, and output schema carry most of the necessary detail. It is complete enough for an agent to understand the tool's core role, though it would be stronger with explicit guidance on pagination strategy and sibling-tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each of the six parameters already has rich semantic documentation including defaults, bounds, and contextual usage notes for cursor, cursors, businessId, and adAccountId. The description does not add parameter-level detail, so the 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 uses a specific action ('Discover') and a concrete resource scope ('Meta Business assets') with the asset types enumerated: businesses, pages, Instagram accounts, pixels, and datasets. This makes the tool's purpose clear and distinguishes it from the more granular sibling getters, though it does not explicitly name or differentiate from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The list of multiple asset types implies this is a broad discovery tool, but the description never states when to prefer it over sibling tools like meta_get_pages or meta_get_pixels, nor does it mention any exclusions. Usage context is only implicit through the 'assets' aggregation language.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_campaignsmeta get campaignsARead-onlyIdempotent
List campaigns for a Meta ad account. Returns campaign ID, name, status, objective, budget, and bid strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| statusFilter | No | Filter by native effective_status, not configured status. PAUSED excludes IN_PROCESS, CAMPAIGN_PAUSED and ADSET_PAUSED. Omit for post-creation verification and inspect both returned status fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by specifying the returned fields and the statusFilter nuance about native effective_status vs configured status. It does not mention pagination behavior beyond the cursor parameter, but the output schema and parameter descriptions cover much of that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that states the action, the resource, and the key output fields. It is front-loaded with the verb and resource, and every word earns its place. No fluff or repetition of schema 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?
For a read-only list tool with a rich output schema and 100% parameter coverage, the description is nearly complete. It could be improved by explicitly noting pagination behavior or the relationship to sibling tools like meta_get_campaign_structure, but the annotations and schema cover the main operational needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds a small amount of context by listing the returned fields, which helps an agent understand what the output will contain. The statusFilter description in the schema is already rich, so the description itself doesn't need to repeat it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a resource ('campaigns for a Meta ad account'), and the key returned fields (ID, name, status, objective, budget, bid strategy). This clearly distinguishes it from sibling tools like meta_get_adsets, meta_get_ads, and meta_get_campaign_structure.
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 is for listing campaigns at the ad account level, and the statusFilter parameter description adds guidance on when to omit it ('Omit for post-creation verification and inspect both returned status fields'). However, it does not explicitly name alternatives or state when to prefer this over meta_get_campaign_structure or meta_get_insights.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_campaign_structuremeta get campaign structureARead-onlyIdempotent
Get hierarchical campaign structure: campaigns -> ad sets -> ads. Useful for understanding account organization.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | No | Get structure for a specific campaign only | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value by disclosing the structural containment behavior of the response (campaigns contain ad sets contain ads) beyond what the annotations express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core purpose and hierarchy are front-loaded, and the usage context is provided in the second sentence without 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 read-only, two-parameter tool with a full output schema, the description is sufficient. All required parameters are documented, annotations cover side effects, and the hierarchy explanation sets clear expectations. No critical behavioral information appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (adAccountId, campaignId) are well documented in the schema. The description adds no additional parameter-level semantics beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('Get'), a specific resource ('hierarchical campaign structure'), and defines the hierarchy as 'campaigns -> ad sets -> ads'. This clearly separates it from flat sibling tools like meta_get_campaigns, meta_get_adsets, and meta_get_ads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for understanding account organization' provides clear context for when to use this tool. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_catalog_batch_statusmeta get catalog batch statusARead-onlyIdempotent
Read the completion and per-item errors for a catalog batch handle. Acceptance of a batch is not proof that every product succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Asynchronous catalog batch handle returned by the submission to inspect. | |
| catalogId | Yes | Exact product catalog ID accessible to the selected account. | |
| adAccountId | Yes | Owning advertising account ID. Use the exact ID returned by account discovery; do not substitute a campaign or business ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description is fully consistent with them. It adds useful behavioral context beyond the annotations by warning that a successfully accepted batch can still contain per-item failures.
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 the action and object, followed by a meaningful warning. No filler or repetition of schema 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?
For a read-only, idempotent status-check tool with fully documented parameters and an output schema, the description covers the critical operational nuance (per-item failures may exist even after acceptance). Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already explains the batch handle, catalog ID, and ad account ID. The description adds no additional parameter semantics beyond tying the whole operation to the batch handle.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Read'), a specific resource ('completion and per-item errors for a catalog batch handle'), and a key nuance that distinguishes it from catalog product queries: acceptance is not proof of success. This clearly sets it apart from sibling tools like meta_get_catalog_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for inspecting a catalog batch handle after submission, with the explicit warning to verify per-item results because batch acceptance alone is insufficient. It does not explicitly name alternatives or exclusions, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_catalog_productsmeta get catalog productsARead-onlyIdempotent
Read Product Catalogs and Product Items when catalog access is available. Returns join-ready product metadata without creating or updating catalog assets.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| search | No | Client-side substring filter across product id, retailer_id, name, brand, category, type, and custom labels. | |
| catalogId | No | Product Catalog ID to read directly. | |
| businessId | No | Business Manager ID used to discover owned/client product catalogs. | |
| productIds | No | Specific Product Item IDs to fetch via the batch IDs endpoint. | |
| includeProducts | No | Fetch product items for discovered/provided catalogs. | |
| includeProductSets | No | Also attempt product_sets edges for catalog context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, idempotentHint=true), and the 'without creating or updating' phrase largely restates that. The description does add value beyond annotations by disclosing an access prerequisite ('when catalog access is available' is a decision-relevant access condition) and the join-ready output framing, but it does not describe error behavior when access is unavailable or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The verb-resource-access condition is front-loaded in the opening sentence, and the second sentence earns its place by clarifying read-only scope and output intent. Every clause adds 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 tool's complexity (8 params, multiple invocation modes, dependency on access), the description plus a full output schema and rich per-parameter schema descriptions cover most of what an agent needs. The only notable gap is behavior when catalog access is unavailable, which is relevant for error handling and is not addressed.
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%, with each of the 8 parameters already documented (defaults, bounds, filters, and endpoint distinctions like batch IDs vs discovery via businessId). The description adds no parameter-level detail, so it correctly relies on the schema baseline rather than compensating for any missing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') with a specific resource ('Product Catalogs and Product Items') and a scope condition ('when catalog access is available'). It also differentiates the tool from any mutation workflow by explicitly saying it does not create or update catalog assets, which separates it from sibling tools like meta_get_catalog_batch_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this for read-only product metadata when catalog access exists, and the 'join-ready' phrasing signals a primary use case (feeding join operations with product insights). However, it does not explicitly name an alternative for scenarios where catalog access is missing or when mutations are needed, so it falls short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_creative_assetsmeta get creative assetsARead-onlyIdempotent
Return ad-linked creative media with actual ad names, collection covers, all carousel/flexible components, resolved image hashes and video URLs. Catalog-only ads are classified separately; use the hosted GetMCPAds service for an interactive visual gallery. Raw creative metadata remains available for diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | Specific ad IDs to enrich. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| adAccountId | No | Ad account ID. Used when adIds/creativeIds are omitted. | |
| creativeIds | No | Specific creative IDs to enrich. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the description only needs to add value beyond those. It does so by describing the enrichment behavior: real ad names, collection covers, all carousel/flexible components, resolved hashes and video URLs, plus the separate classification of catalog-only ads. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, front-loaded sentences with no filler. Every clause adds information: what is returned, how catalog-only ads are handled, where to go for an interactive gallery, and what remains available for diagnostics.
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 enrichment tool with complete schema documentation, existing annotations, and an output schema, this description is sufficient. It clarifies the value-add output, the catalog-only edge case, and the escape hatch for raw diagnostics or interactive browsing, leaving no critical selection or invocation gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even though the description itself adds no parameter-specific detail. The description's 'ad-linked' phrasing implies the identifier parameters, but all syntax, defaults, bounds, and selection behavior are already carried by 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 opens with a specific verb and resource ('Return ad-linked creative media') and enumerates concrete outputs: actual ad names, collection covers, carousel/flexible components, resolved image hashes, and video URLs. It also signals boundary cases (catalog-only ads) and distinguishes its enriched output from raw creative metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: resolving ad-linked creative media with enriched human-readable assets. It also provides a when-not signal by routing interactive visual gallery needs to GetMCPAds and noting raw metadata remains available for diagnostics. It does not explicitly name the sibling meta_get_creatives as the raw-metadata alternative, so the guidance is slightly below fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_creativesmeta get creativesBRead-onlyIdempotent
Get ad creative content: text, images, videos, links, call-to-action. Returns creative details for specified ads.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | Specific ad IDs to get creatives for | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that it returns creative details and lists content categories, but does not disclose behavior beyond that, such as pagination or how optional adIds affects results. 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 short sentences, no filler. The main verb and resource are front-loaded, and the content-type list earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, simple 3-parameter tool with a full schema and output schema, the description is adequate. It could be more complete by noting that adIds is optional and specifying what happens when it is omitted, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: adAccountId, adIds, and limit all have meaningful schema descriptions. The tool description adds no semantic detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Get ad creative content') and enumerates content types returned (text, images, videos, links, call-to-action), so an agent can tell what the tool does. It does not explicitly distinguish this from sibling meta_get_creative_assets, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to reach for this tool versus alternatives such as meta_get_creative_assets, meta_list_ad_images, or meta_list_ad_videos. The phrase 'for specified ads' implies a use case, but no exclusions, prerequisites, or sibling routing are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_delivery_diagnosticsmeta get delivery diagnosticsARead-onlyIdempotent
Aggregate read-only delivery diagnostics across campaigns, ad sets, and ads using status/effective_status/issues_info where available plus simple delivery insights.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Entity or aggregation level for the requested report. | all |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| timeRange | No | Optional custom insights date range. | |
| datePreset | No | Insights date preset for simple delivery metrics. Defaults to last_7d. | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| effectiveStatusFilter | No | Optional effective_status filter values such as ACTIVE, PAUSED, WITH_ISSUES, DISAPPROVED. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly, openWorld, and idempotent annotations, it adds that data is aggregated across levels and that diagnostics depend on status/effective_status/issues_info 'where available.' This communicates partial data availability and non-raw aggregation behavior. It 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?
A single front-loaded sentence with no filler, starting with the key verb and scope. The later clause is dense but acceptable; it could be split for readability without changing substance.
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 full parameter descriptions, an output schema, and safety annotations, the remaining burden is selection context, which the 'delivery diagnostics' scope mostly covers. It could add explicit alternatives or caveats about pagination and data availability, but schema and annotations already carry much of the load.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters. The description adds light context by mapping 'status/effective_status/issues_info' to diagnostic fields and 'simple delivery insights' to date/time filtering, but it does not materially extend schema semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('aggregate') and resource ('delivery diagnostics') with explicit scope across campaigns, ad sets, and ads. The phrase 'delivery diagnostics' clearly differentiates it from sibling reporting tools like meta_get_insights or meta_health_check.
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 is for read-only delivery health aggregation but gives no explicit when-to-use or when-not-to-use guidance. It does not name alternatives or selection conditions, so an agent must infer usage from the phrase 'delivery diagnostics.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_entity_configurationmeta get entity configurationARead-onlyIdempotent
Read a specific entity in its ad account for reconciliation. Read-only; never creates, changes or retries the entity. Missing or normalized fields must be inspected before claiming an exact match.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Exact fields to re-read from the reviewed native creation payload. IDs and account ownership are always checked. | |
| entityId | Yes | Exact entity ID saved in the acknowledged creation receipt. | |
| adAccountId | Yes | Owning advertising account ID. Use the exact ID returned by account discovery; do not substitute a campaign or business ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior, so the bar for additional value is lower. The description adds meaningful context beyond annotations: 'never creates, changes or retries the entity' and the caveat that missing or normalized fields must be inspected before claiming an exact match. This helps an agent understand result reliability without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and read-only guarantee, followed by the reconciliation caveat. Every sentence earns its place and there is no redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a fully described input schema, an output schema, and annotations covering safety and open-world behavior, the description is complete enough. It supplies the reconciliation purpose and the critical caveat about missing/normalized fields, which are the only non-obvious details an agent needs 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?
Schema description coverage is 100%, so the input schema fully explains adAccountId, entityId, and fields. The description adds little per-parameter meaning, though it reinforces that fields are read during reconciliation and that normalized/missing values are possible. Baseline 3 is appropriate because the schema carries the param-semantics load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read'), a resource ('a specific entity in its ad account'), and a purpose ('reconciliation'), which clearly conveys what the tool does. It differentiates itself from the many list/get siblings by focusing on a single entity by ID and fields, though it does not explicitly name an alternative to distinguish from.
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 usage for reconciliation and explicitly warns against expecting mutation or retries, but it does not state when to prefer this tool over siblings like meta_get_campaigns or meta_get_adset_configuration. There is no explicit when-to-use/when-not-to-use guidance or mention of alternatives, leaving selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_insightsmeta get insightsARead-onlyIdempotent
Query Meta Ads performance insights. Supports 170+ metrics, 43+ breakdowns with intelligent query planning. Use meta://metrics resource to see available metrics. Use meta://breakdowns for available breakdowns. The query planner automatically splits incompatible metric/breakdown combinations into multiple API requests and merges results.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | Restrict ad-level insights to these ad IDs. | |
| level | Yes | Aggregation level: account, campaign, adset, or ad | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| metrics | Yes | Metric keys from meta://metrics (e.g., impressions, spend, ctr) | |
| timeRange | No | Custom date range with since/until in YYYY-MM-DD format | |
| breakdowns | No | Breakdown keys from meta://breakdowns (e.g., age, gender, country) | |
| datePreset | No | Predefined date range (e.g., last_7d, last_30d) | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| timeIncrement | No | Time granularity: 1 (daily), 7 (weekly), 'monthly', or 'all_days' | |
| attributionMode | No | Use Meta account settings, ad-set settings, or explicitly supplied windows. No setting is inferred from returned numbers. | account |
| actionReportTime | No | Date basis for actions, sent explicitly to Meta. | impression |
| attributionWindows | No | Only with attributionMode explicit. These windows are sent identically to every split query and account total. | |
| includeAccountTotals | No | Also read native account-level totals with the same dates, metrics and attribution. Requires no adIds or breakdowns. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the query planner automatically splits incompatible metric/breakdown combinations into multiple API requests and merges results. This is a significant behavioral trait that an agent must know to understand response shape and performance. It doesn't mention pagination or rate limits, but the schema's limit parameter already covers pagination bounds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The core purpose is front-loaded, the resource pointers are concise, and the key behavioral trait (automatic splitting/merging) is stated last but is the most important non-obvious detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 13 parameters, nested objects, and an output schema, the description is reasonably complete. It covers the core purpose, available metrics/breakdowns, and the automatic query planning behavior. The output schema exists, so return values don't need explanation. The only minor gap is not explicitly mentioning pagination behavior beyond the limit parameter, but the schema's limit description already covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 13 parameters thoroughly. The description adds the crucial context that metrics come from meta://metrics and breakdowns from meta://breakdowns, which is genuinely useful. However, it doesn't add much beyond that because the schema already explains each parameter's meaning, defaults, and constraints. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries Meta Ads performance insights, lists supported metrics/breakdowns, and distinguishes itself from siblings like meta_get_insights_raw by mentioning intelligent query planning and automatic splitting of incompatible combinations. The verb 'Query' plus the resource 'Meta Ads performance insights' is specific and 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 clear context for when to use this tool (querying performance insights with metrics/breakdowns) and points to meta://metrics and meta://breakdowns resources for available values. It doesn't explicitly state when NOT to use it versus alternatives like meta_get_insights_raw, but the mention of automatic query planning and merging implies this is the higher-level, more convenient option. A clear exclusion of raw access would have made this a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_insights_rawmeta get insights rawARead-onlyIdempotent
Query the Meta Insights edge with validated native field names, breakdowns, action breakdowns, attribution windows, filters, sort, summary, and pagination. This complements meta_get_insights when Meta adds fields before the curated metric catalog is updated.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Native provider ordering expressions. | |
| after | No | Opaque cursor for the next page returned by Meta. | |
| level | No | Entity or aggregation level for the requested report. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| fields | Yes | Native Meta Insights API fields; calculated aliases are not accepted here | |
| objectId | Yes | Ad account (act_...), campaign, ad set, or ad ID whose /insights edge should be queried | |
| filtering | No | Native provider filter expressions; credentials and account overrides are not allowed. | |
| timeRange | No | Explicit provider reporting period with since and until dates. | |
| breakdowns | No | Native reporting breakdowns. Check compatibility before combining them. | |
| datePreset | No | Named reporting period. Use the custom date range when you need exact start and end dates. | |
| timeIncrement | No | Provider time-bucket size or supported aggregate value. | |
| includeSummary | No | Request the provider's available summary or total-count metadata. | |
| actionBreakdowns | No | Meta action-level breakdowns, subject to Insights compatibility rules. | |
| actionAttributionWindows | No | Meta attribution windows used to attribute action metrics. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds a small behavioral note about using 'validated native field names' and mentions pagination, but it does not disclose significant additional traits such as rate-limit implications, error behavior on invalid fields, or that the openWorldHint means the tool may accept unknown native fields. Given the strong annotation coverage, the description provides only marginal extra value beyond what annotations already state, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences. The first sentence front-loads the core action and all major parameter categories, and the second sentence provides the crucial sibling-context. Zero filler or redundant restatement of the tool name. Every word earns its place and the structure leads with the most important 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 tool's complexity (14 parameters, nested objects, output schema present), the description is complete enough for an agent to decide whether to invoke it and what to expect in general. The output schema exists, so return-value documentation is not required from the description. The description covers purpose, scope, and the key differentiator from the curated tool. However, for such a complex raw API tool, a slightly richer note on how pagination works or how open-world field names are handled might improve completeness, but the schema and annotations already fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — every parameter has a meaningful description in the schema itself (e.g., fields: 'Native Meta Insights API fields; calculated aliases are not accepted here'; limit has bounds and default). The tool description only lists parameter categories ('breakdowns, action breakdowns, attribution windows, filters, sort, summary, and pagination') without adding specific semantics beyond what the schema already provides. Per the rubric, when schema coverage is high, the baseline is 3, and the description does not significantly raise it.
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 ('Query') with a specific resource ('Meta Insights edge'), and enumerates the exact capabilities (native field names, breakdowns, filters, sort, summary, pagination). It also names the sibling tool meta_get_insights and draws a clear distinction: this tool is the raw-native-field counterpart to the curated metric catalog. An agent can immediately tell what this tool does and how it differs from the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit use case: 'complements meta_get_insights when Meta adds fields before the curated metric catalog is updated.' This clearly identifies when to prefer this tool and names the alternative. However, it does not explicitly state when NOT to use this tool (e.g., 'if you need curated metrics, use meta_get_insights'), leaving the 'when-not' implicit rather than explicit. Also, no mention of other potential siblings like meta_list_edge_raw, though that is not necessary for a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_instagram_accountsmeta get instagram accountsARead-onlyIdempotent
List Instagram accounts linked to accessible Pages, Business Manager assets, or an ad account when permissions allow.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| pageId | No | Optional Page ID to read linked instagram_business_account/connected_instagram_account. | |
| businessId | No | Optional Business Manager ID for owned/client Instagram account edges. | |
| adAccountId | No | Optional ad account ID for /instagram_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the permission caveat ('when permissions allow') and clarifies the sources of the data, which is beyond the annotations. However, it does not disclose pagination behavior or error handling, though the output schema and cursor parameter imply pagination. Given the annotations cover the main behavioral aspects, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words. It front-loads the verb and resource, and the scope is stated efficiently. Every word earns its place, making it an exemplar of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 5 optional parameters and an output schema, the description covers the core purpose and the three source contexts. It does not explain whether parameters are mutually exclusive or if multiple can be used together, but the schema and output schema likely fill that gap. The permission caveat is a useful nuance. Overall, it is complete enough for an agent to invoke correctly without ambiguity.
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 each parameter already described in detail. The description adds context by naming the three possible source types (Pages, Business Manager, ad account) that map to pageId, businessId, and adAccountId, but it does not introduce new information about limit or cursor. Since the schema carries the full parameter documentation, the description adds marginal value beyond it, aligning with the 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?
The description clearly states a specific verb ('List'), a specific resource ('Instagram accounts'), and the scope ('linked to accessible Pages, Business Manager assets, or an ad account'). This distinguishes it from siblings like meta_get_pages (pages only) or meta_get_business_assets (assets) by focusing on Instagram accounts as the output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use this tool: when you need Instagram accounts linked to Pages, Business Manager assets, or an ad account. It does not explicitly name alternatives or exclusions, but the specificity of the resource makes the use case evident, especially given sibling tools like meta_get_pages and meta_list_ad_accounts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_node_fieldsmeta get node fieldsARead-onlyIdempotent
Read arbitrary flat fields from one Meta Graph node. This GET-only escape hatch covers newly released campaign, ad set, ad, creative, audience, catalog, Page, Instagram, pixel, and other accessible node fields without waiting for a fixed MCP schema update.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Flat Graph field names; nested field expansion is intentionally disabled | |
| nodeId | Yes | Graph node ID, for example a campaign, ad set, ad, creative, Page, IG account, pixel, audience, or catalog ID | |
| includeMetadata | No | Ask Graph for field metadata when supported |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, and the description's 'GET-only' phrasing aligns with these rather than adding new information. It does add context around the 'escape hatch' purpose and the flat-fields limitation, but much of that is also present in the schema's parameter descriptions, so the net added behavioral insight is modest.
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 tight sentences with zero fluff. The core action is front-loaded, and the second sentence explains the tool's raison d'être without digressing. Every sentence earns its place, making it efficient for an agent to parse quickly.
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, idempotent tool with full schema coverage and an output schema, the description supplies the essential context — it is a fast-moving escape hatch for fields not yet in the fixed schema. It does not explain return value details, but the output schema covers that, and the annotations already cover safety. It is nearly complete for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (nodeId, fields, includeMetadata) is already well documented in the input schema. The description reinforces the notion of 'arbitrary flat fields' for the fields parameter, but it does not add substantive semantic detail beyond what the schema already provides, so a baseline score 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 states a clear action ('Read arbitrary flat fields') on a specific resource ('one Meta Graph node'), and directly distinguishes itself from sibling tools by framing itself as an 'escape hatch' for newly released fields that fixed schema tools may not yet cover. This makes the tool's unique role immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool — when you need fields that are 'newly released' and not yet in the fixed MCP schema. It provides this context clearly, but it does not explicitly name the alternative specific tools (e.g., meta_get_campaigns) or state when not to use the escape hatch, leaving the exclusion to inference rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_organic_content_enrichmentmeta get organic content enrichmentARead-onlyIdempotent
Read Facebook Page posts and Instagram media with URLs, native periods and optional insights. These are content insights, not Ads Insights; do not infer an organic-only breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| since | No | Optional Graph time filter. For IG media this should be Unix seconds or strtotime-compatible text. | |
| until | No | Optional Graph time filter. For IG media this should be Unix seconds or strtotime-compatible text. | |
| cursor | No | Pagination cursor from previous response | |
| pageId | No | Facebook Page ID for /posts and linked IG discovery. | |
| postIds | No | Specific Facebook post IDs to enrich. | |
| mediaIds | No | Specific Instagram media IDs to enrich. | |
| includeInsights | No | Include available insight metrics; additional provider permissions may be required. | |
| includePagePosts | No | Read related Facebook Page posts when the token has permission. | |
| instagramAccountId | No | Instagram professional account ID for /media. | |
| includeInstagramMedia | No | Read related Instagram media when the token has permission. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds a meaningful caveat that results are content insights and must not be interpreted as organic-only, which goes beyond the annotations. However, it does not mention provider permission requirements for insights or pagination behavior, though those are partly covered by the schema and 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 two sentences with no filler. The main action and scope are front-loaded, and the caveat is placed second. Every word earns its place, making it an exemplary concise definition.
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 gives a clear purpose and a key caveat, and the schema plus output schema are detailed. However, with 11 optional parameters and no required fields, an agent may need more guidance on which parameter combinations to use or when to apply this tool relative to the many similar getters. 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?
Schema description coverage is 100%, so all 11 parameters are already thoroughly documented. The description only summarizes the resource types and mentions 'optional insights', which maps to includeInsights, but adds no additional meaning beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Read'), specific resources (Facebook Page posts, Instagram media), and the enrichments (URLs, native periods, optional insights). It explicitly distinguishes these as 'content insights, not Ads Insights', which differentiates it from advertising-focused siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or reference to alternative tools. The only comparative statement is a caution about not inferring an organic-only breakdown, which is interpretive rather than a routing instruction. With 40+ sibling tools, an agent receives no direction on when to choose this over meta_get_page_posts or meta_get_insights.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_page_postsmeta get page postsARead-onlyIdempotent
Read published Facebook Page posts using a Page token resolved from the connected user. Returns exact PageID_PostID, message, permalink and media attachments. Use postId for an exact existing-post ad preflight. No Instagram media, comments, likes or insights are requested; this read alone does not establish advertising eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| pageId | Yes | Facebook Page ID | |
| postId | No | Exact PageID_PostID to read instead of the recent-post list; must belong to pageId. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds meaningful context on top: it resolves a Page token from the connected user, returns only core post fields, and explicitly notes that no advertising eligibility is established. No contradiction exists, and the added behavioral context is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core read action appears first, followed by return contents, then the key parameter use case, then scoping exclusions. Every sentence contributes information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated tool with a fully documented input schema and output schema, the description covers the functional purpose, token resolution, return fields, parameter-specific behavior, and exclusions. Nothing an agent needs to correctly select and call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds beyond the schema by explaining that postId switches the call from the recent-post list to an exact existing post and ties it to the ad preflight scenario. This semantic clarity goes beyond the raw schema field 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 uses a specific verb-resource pair ('Read published Facebook Page posts') and clearly delimits its scope by stating what it returns (PageID_PostID, message, permalink, media attachments) and what it does not request (Instagram media, comments, likes, insights). This distinguishes it from the many sibling tools focused on insights, ad accounts, or creative assets.
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 an explicit use case ('Use postId for an exact existing-post ad preflight') and clarifies that this read alone does not establish advertising eligibility, setting expectations about what the tool can and cannot accomplish. It does not explicitly name alternative sibling tools for insights or other data, but the exclusions are sufficient for practical routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_pagesmeta get pagesARead-onlyIdempotent
List accessible Facebook Pages with id, name, category, tasks, picture, and linked Instagram account references when available.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| businessId | No | Optional Business Manager ID to list owned/client pages. Omit to use /me/accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful scope information ('accessible' pages) and notes Instagram account references are included 'when available', but it does not add extensive behavioral context beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the action and resource first, followed by a compact field list. It contains no filler and does not repeat schema or annotation 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?
The structured metadata is rich: full parameter descriptions, an output schema, and safety annotations. The description covers the core purpose, and remaining details like pagination and businessId behavior live in the schema. Slightly more explicit routing among similar page/account tools would make it 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 100%, so limit, cursor, and businessId are fully documented in the input schema. The description does not add parameter-specific meaning, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('Facebook Pages') and enumerates the returned fields (id, name, category, tasks, picture, linked Instagram account references). This clearly distinguishes it from siblings like meta_get_business_assets and meta_get_instagram_accounts.
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: use this when you need accessible Facebook Pages with the listed fields. It does not explicitly name alternatives or exclusions, but the resource-specific wording gives enough guidance for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_pixelsmeta get pixelsARead-onlyIdempotent
List pixels and datasets from an ad account or Business Manager when accessible, returning actionable warnings for permission-limited edges.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| businessId | No | Business Manager ID for owned/client pixels and datasets. | |
| adAccountId | No | Ad account ID for /adspixels and offline conversion datasets. | |
| includeDatasets | No | Also attempt dataset/offline conversion dataset edges. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds useful behavior: it returns 'actionable warnings' for permission-limited edges, which is not in annotations. This enriches the agent's understanding of potential partial results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is concise and front-loads the core purpose before mentioning the warning behavior. Every word contributes to the agent's understanding.
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 presence of an output schema reduces the need to describe return values, and the description covers the key behavioral nuance (warnings). However, it doesn't clarify edge cases like when both businessId and adAccountId are provided or how pagination interacts with warnings, but these are minor given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (limit, cursor, businessId, adAccountId, includeDatasets). The description adds no extra parameter-level semantics, but it doesn't need to since the schema is complete. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('List') and resource ('pixels and datasets') with context (ad account or Business Manager). However, it doesn't explicitly distinguish this from siblings like meta_get_business_assets or meta_get_entity_configuration, which could also list related assets.
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 mentions 'when accessible' and 'permission-limited edges', indicating conditional use, but it does not explicitly state when NOT to use it or point to alternatives. Given the many sibling tools, more specific routing would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_study_resultsmeta get study resultsARead-onlyIdempotent
Get detailed results for a conversion lift or A/B test study. Returns objectives, cells, and lift results.
| Name | Required | Description | Default |
|---|---|---|---|
| studyId | Yes | The Ad Study ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior, so the description only needs to add context. It adds that results are for conversion lift or A/B tests and enumerates the returned components (objectives, cells, lift results), but it does not mention anything about study status requirements, empty results, or pagination.
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 short sentences with no filler. The core action and resource are front-loaded, and the second sentence adds the key return categories without unnecessary detail.
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 tool with one documented parameter, strong read-only annotations, and an output schema, the description is nearly complete. A small gap is the lack of explicit differentiation from the closely related interpret-experiment-results sibling, but the intended call context is still clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single required studyId parameter is already documented adequately. The description reinforces the parameter's meaning by referring to 'a conversion lift or A/B test study' but does not need to add more, so the baseline score 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 opens with a specific verb and resource: 'Get detailed results for a conversion lift or A/B test study,' which is clear and action-oriented. It further distinguishes itself from sibling tools by naming the resource type (study results) and the key return concepts (objectives, cells, lift results), so an agent can tell it apart from tools like meta_get_ad_studies or meta_interpret_experiment_results.
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 an agent needs detailed results for a study, but it does not explicitly say when to prefer this over alternatives such as meta_get_ad_studies or meta_interpret_experiment_results. No exclusions, prerequisites, or when-not-to-use guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_uploaded_videometa get uploaded videoARead-onlyIdempotent
Check video processing and membership in the selected account library. If the first page misses the ID, use the video title to narrow the account-scoped lookup. A direct video read alone never proves membership or readiness. Bounded pagination; not_found is not success.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | Exact uploaded video ID returned by Meta in this account. | |
| adAccountId | Yes | Owning advertising account ID. Use the exact ID returned by account discovery; do not substitute a campaign or business ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral context beyond that: 'direct video read alone never proves membership or readiness' and 'Bounded pagination; not_found is not success.' This gives agents important caveats about interpreting results and pagination, which annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information: purpose, fallback strategy, an important caveat, and pagination/not_found semantics. The main verb and resource are front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with an output schema and strong annotations, the description covers the key behavioral subtleties: membership verification, bounded pagination, and not_found semantics. It could be more explicit about the exact meaning of 'video processing' and how pagination is exposed, but it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema descriptions cover both adAccountId and videoId fully, so the baseline is 3. The description does not add substantive parameter-level detail; the reference to 'video title' is not backed by a title parameter in the schema, so it does not improve parameter understanding.
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 opens with a clear directive: 'Check video processing and membership in the selected account library.' This names the resource (uploaded video) and the specific checks (processing, membership), and 'account-scoped lookup' signals its scope. It doesn't name sibling tools like meta_list_ad_videos or meta_get_video_sources, and leaves 'processing' and 'membership' somewhat undefined, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives practical usage hints: use the video title if the first page misses the ID, and remember bounded pagination and 'not_found is not success.' However, it does not explicitly say when to prefer this over sibling tools or when to avoid it, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_video_sourcesmeta get video sourcesARead-onlyIdempotent
Resolve fresh download URLs (source) and thumbnails for specific ad videos. Call this at download time: the returned URLs are signed and expire quickly.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Owning Page ID from the ad creative. Allows Page-token fallback even when the user token cannot read the video node. | |
| videoIds | Yes | Video IDs to resolve (at most 10 per call, one Graph request each) | |
| adAccountId | Yes | Ad account that owns the videos, used for scoping and rate limits |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the readOnlyHint/idempotentHint annotations: URLs are freshly minted, signed URLs expire quickly. This is exactly the kind of behavioral nuance annotations alone do not provide, and it matters for agent behavior at download time.
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 with no wasted words. The core behavior is front-loaded — 'Resolve fresh download URLs and thumbnails' — and the temporal constraint follows immediately after the colon, making the key call-time behavior prominent.
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 resolver with full schema coverage, an output schema present, and safety annotations provided, the description covers the purpose, the trigger condition, and the key behavioral caveat. Nothing essential for a correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents adAccountId, videoIds, and pageId thoroughly. The description reinforces that videoIds are ad-video IDs to resolve and that URLs are fresh/short-lived, but it does not need to add much 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 is specific and action-oriented: 'Resolve fresh download URLs (source) and thumbnails for specific ad videos.' It clearly identifies the resource, the verb, and the distinguishing trait — freshness/signed URLs — which separates it from nearby siblings like meta_get_uploaded_video and meta_list_ad_videos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Call this at download time: the returned URLs are signed and expire quickly,' giving the agent a clear temporal condition for when to use this tool. It does not explicitly name alternative tools or exclusions, but the download-time framing is clear enough for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_health_checkmeta health checkARead-onlyIdempotent
Agent-ready read-only health check: validates token metadata, lists accessible ad accounts, and warns about missing read scopes without exposing the access token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely valuable context beyond annotations: the tool 'warns about missing read scopes' (a diagnostic behavior) and critically guarantees it does so 'without exposing the access token' — a security property no annotation covers. No contradiction with the readOnlyHint annotation; the description's 'read-only' aligns with it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence of 23 words, front-loaded with the core identity ('Agent-ready read-only health check') followed by a compact enumeration of the three behaviors. The closing safety clause ('without exposing the access token') earns its place as a high-value behavioral guarantee. Zero filler words; every clause adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with a full annotation safety profile and an output schema that presumably documents return values, the description covers everything an agent needs to call it correctly: what it validates, what it lists, what it warns about, and the token-exposure guarantee. The only gap is the absence of sibling differentiation, which is more of a usage-guideline concern, and no mention of error behavior on an invalid token — minor given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is trivially 100%, so the baseline of 4 applies. There is nothing for the description to document or explain about inputs, and it correctly does not invent parameter guidance. The description's focus on behavior rather than inputs is appropriate for a no-arg health check.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific composite action ('health check') with three concrete behaviors: validates token metadata, lists accessible ad accounts, warns about missing read scopes. This is far more specific than the title alone and effectively distinguishes the tool from single-purpose siblings like meta_debug_token or meta_list_ad_accounts. It stops short of a 5 only because it never explicitly names a sibling or contrast to preempt confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'Agent-ready' and the health-check framing suggest this is a preflight diagnostic an agent runs before performing operations, but no explicit when-to-use, when-not-to-use, or alternative routing is given. Given 40+ sibling tools, including the overlapping meta_debug_token, an explicit 'use this first, use meta_debug_token for deep token inspection' sentence would have moved this to a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_interpret_experiment_resultsmeta interpret experiment resultsARead-onlyIdempotent
Read and interpret A/B test or conversion lift study results with confidence guardrails, cells, objectives, and optional cell entities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| studyId | No | Specific Ad Study ID to interpret. | |
| adAccountId | No | Ad account ID used to discover ad_studies when studyId is omitted. | |
| cellEntityType | No | Entity type represented by experiment cells. | campaigns |
| includeCellEntities | No | Also read campaigns/adsets/adaccounts attached to each study cell. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so no contradiction exists. The description adds that this is an interpretive/analytical read rather than a raw fetch, which is useful, but it does not disclose details like how missing studyId maps to adAccountId discovery or any rate-limit behavior.
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 compact sentence with the core action front-loaded before the qualifying detail. The tail is a slightly dense list, but every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations, an output schema, and fully described parameters, the description is nearly complete. It could improve by clarifying how this 'interpret' tool relates to meta_get_study_results or what form the interpretation takes, but an agent can select and call it safely with the current information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents limit, studyId, adAccountId, cellEntityType, and includeCellEntities. The description's mention of 'cells, objectives, and optional cell entities' loosely maps to cellEntityType/includeCellEntities, but it adds no information beyond what the input schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names a concrete verb-resource pair: 'Read and interpret A/B test or conversion lift study results,' and lists relevant facets (confidence guardrails, cells, objectives, optional cell entities). This is clearer than the bare title and distinguishes it from raw study-fetching siblings, though it doesn't explicitly contrast with meta_get_study_results.
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 intended scenario: interpreting experiment study results rather than merely fetching them. It does not explicitly name alternatives (e.g., meta_get_study_results for raw results) or give when-not-to-use guidance, but the phrase 'A/B test or conversion lift study results' provides enough context for an agent to infer the primary use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_join_product_insightsmeta join product insightsARead-onlyIdempotent
Query product-breakdown insights and enrich rows with Product Catalog metadata when catalog access is available.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Entity or aggregation level for the requested report. | ad |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| metrics | No | Native or documented calculated metric names to request. Check compatibility with the selected dimensions. | |
| catalogId | No | Product Catalog ID used to load product metadata for joins. | |
| timeRange | No | Optional custom insights date range. | |
| datePreset | No | Insights date preset. Defaults to last_30d. | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| productBreakdown | No | Native product grouping used to join catalog items with reported insights. | product_id |
| catalogProductLimit | No | Maximum catalog product records read for the join. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful context about conditional enrichment with Product Catalog metadata, but it does not explain what happens if catalog access is unavailable, whether enrichment is best-effort, or how the join affects returned rows.
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 sentence that front-loads the main action and contains no filler. Every word contributes to conveying the tool's purpose and the conditional enrichment behavior.
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 rich input schema, output schema, and annotations cover most operational detail, so the description does not need to repeat them. However, the tool is complex with 9 params, and the description leaves the conditional catalog-access behavior vague and omits guidance on selecting this tool over sibling insight tools, which is a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter. The description does not add parameter-level detail beyond the concepts of 'product-breakdown insights' and 'Product Catalog metadata', which map to existing params but add no new semantic value. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's operation: 'Query product-breakdown insights and enrich rows with Product Catalog metadata'. This distinguishes it from general insights tools by specifying the product-breakdown dimension and catalog join. However, it does not explicitly mention or differentiate from sibling tools like meta_get_insights or meta_get_catalog_products.
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 a use case: when product-level insights are needed and catalog metadata is accessible. The phrase 'when catalog access is available' gives some context, but there is no explicit comparison to alternatives, no when-not-to-use guidance, and no mention of when the simpler meta_get_insights would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_list_ad_accountsmeta list ad accountsARead-onlyIdempotent
List all Meta ad accounts accessible with the current token. Returns account ID, name, currency, timezone, and status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds the token-scoped 'all accessible ad accounts' context and the exact fields returned, but does not mention pagination or rate-limit behavior. This is adequate but not rich.
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 the core scope front-loaded ('List all Meta ad accounts') and the return fields summarized briefly. Every sentence adds information without 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 zero-parameter, read-only listing tool with an output schema and annotations covering safety, the description fully covers what the tool does and what it returns. No additional context is needed for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so there is no parameter semantics to document. The description's mention of the current token and the returned fields is sufficient for a no-argument call.
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 ('List') with a clearly bounded resource ('all Meta ad accounts accessible with the current token') and enumerates the returned fields. This differentiates it from sibling tools that target specific accounts or other asset types.
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 intended use is implied: call this when you need an overview of every ad account reachable with the current token. However, it does not explicitly state when to prefer it over alternatives like meta_get_account_details or meta_get_business_assets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_list_ad_imagesmeta list ad imagesARead-onlyIdempotent
List the ad account image library (/adimages): hash, name, dimensions, status, a permanent publicly served display URL (permalink_url), short-lived CDN URLs, and optionally the creatives using each image.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| hashes | No | Only these image hashes (exact match) | |
| minWidth | No | Only images at least this wide, in pixels | |
| minHeight | No | Only images at least this tall, in pixels | |
| nameFilter | No | Only images whose file name matches this value | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| includeUsage | No | Also return the creative IDs using each image |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds useful context: returns permanent display URL vs short-lived CDN URLs, and includes optional creative usage. It doesn't contradict annotations. The openWorldHint implies pagination, which is supported by the cursor parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with front-loaded resource and a clear list of returned fields, plus the optional includeUsage. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the return fields are covered. The description mentions pagination implicitly via the cursor and openWorldHint, but could explicitly state that not all images may be returned without pagination. However, the schema covers cursor and limit, so the description is sufficient.
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 fully described. The description reiterates the main return fields but doesn't add semantic detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and resource ('ad account image library /adimages') and explicitly enumerates the fields returned. Clearly distinct from siblings like meta_list_ad_videos and meta_get_creative_assets, with the openWorldHint indicating partial returns.
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 clearly states the tool lists ad images with optional filtering and creative usage. It does not explicitly name alternatives or when not to use it, but the scope is evident. Could mention not to use for videos or other assets, but sibling names make the distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_list_ad_videosmeta list ad videosARead-onlyIdempotent
List the ad account video library (/advideos): title, duration, processing status, and publicly served thumbnails (preferred and largest sizes). Source file URLs are returned only on request because they expire quickly.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Videos per page (thumbnail payloads are heavy, keep this modest) | |
| cursor | No | Pagination cursor from previous response | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| titleFilter | No | Only videos whose title contains this value | |
| includeSource | No | Also return the short-lived raw video file URL for each video | |
| maxLengthSeconds | No | Only videos at most this many seconds long | |
| minLengthSeconds | No | Only videos at least this many seconds long |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, open-world, idempotent, and non-destructive. The description adds valuable behavioral context beyond those annotations: publicly served thumbnails, short-lived source URLs that are returned only on request, and the specific API endpoint. 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 endpoint, scope, and returned fields, followed by a caveat about source URL expiry. Every clause carries information and there is no fluff.
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 an output schema present and annotations covering read-only/idempotent behavior, the description does not need to explain return values. It covers endpoint, fields, and the one behavioral caveat (URL expiry) that affects invocation, making it sufficient for correct 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 description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the 'includeSource' trade-off (short-lived URLs) and the thumbnail size behavior, which is not present in the parameter 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 uses a specific verb ('List') and resource ('ad account video library (/advideos)') and enumerates the returned fields: title, duration, processing status, and publicly served thumbnails. This clearly distinguishes it from sibling get/list tools without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit alternatives or when/when-not conditions are provided; usage is implied by 'List the ad account video library.' The only guidance is that source file URLs are returned only on request because they expire quickly, which frames parameter choice rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_list_edge_rawmeta list edge rawARead-onlyIdempotent
List an allowlisted read-only Meta Graph edge with caller-selected flat fields, filters, and cursor pagination. Use this for broad metadata/entity discovery when a specialized tool does not expose a newly added field.
| Name | Required | Description | Default |
|---|---|---|---|
| edge | Yes | Allowlisted Meta Graph edge to read on the selected node. | |
| after | No | Opaque cursor for the next page returned by Meta. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| since | No | Beginning of the requested reporting period; use the format accepted by the provider. | |
| until | No | End of the requested reporting period; use the format accepted by the provider. | |
| before | No | Opaque cursor for the previous page returned by Meta. | |
| fields | No | Native provider fields to return. Select only fields supported by the chosen object or report. | |
| parentId | Yes | Parent Graph node ID, such as act_123, a Business, Page, catalog, campaign, or ad set ID | |
| filtering | No | Native provider filter expressions; credentials and account overrides are not allowed. | |
| parameters | No | Additional documented GET parameters, for example targeting_spec or optimization_goal; auth and HTTP method override parameters are blocked | |
| includeSummary | No | Request the provider's available summary or total-count metadata. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'read-only' is consistent with them. The description adds meaningful context beyond annotations by disclosing the 'allowlisted' edge restriction and the fallback role for newly added fields. It does not discuss auth or rate limits, but the output schema and read-only annotations cover the main safety profile.
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 carry the full message: first the core behavior and mechanism, then the use-case guidance. There is no filler, repetition of schema details, or unnecessary prose.
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 complex 11-parameter schema, 100% schema coverage, full annotations, and an output schema, the description is complete enough. It explains the operation, the allowlist constraint, and when to fall back to this tool rather than a specialized sibling, leaving no material gap an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter having a description, enum, bounds, or pattern, so the baseline is 3. The description's phrase 'caller-selected flat fields, filters, and cursor pagination' loosely maps to the fields, filtering, before, after, and limit parameters, but adds no meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'List an allowlisted read-only Meta Graph edge', and adds caller-selected fields, filters, and cursor pagination. It further distinguishes itself from specialized siblings by describing the tool as broad metadata/entity discovery for newly added fields, making selection 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 explicitly states when to use this tool: broad metadata/entity discovery when a specialized tool does not expose a newly added field, which implies specialized tools are preferred when they do cover the need. It does not name specific sibling tools or give explicit 'do not use for X' exclusions, so it is clear but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_search_entitiesmeta search entitiesARead-onlyIdempotent
Search campaigns, ad sets, or ads by name within an ad account. Useful for finding specific entities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| cursor | No | Pagination cursor from previous response | |
| entityType | Yes | Type of entity to search | |
| nameFilter | Yes | Name substring to search for | |
| adAccountId | Yes | Ad account ID (e.g., act_123456789) | |
| statusFilter | No | Filter by native effective_status, not configured status. PAUSED excludes IN_PROCESS, CAMPAIGN_PAUSED and ADSET_PAUSED. Omit for post-creation verification and inspect both returned status fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds account-scoped search-by-name behavior, but it does not add extra behavioral details such as substring/case behavior, inclusion of deleted entities, or pagination semantics beyond what the schema already says.
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 short sentences with the key verb and resource front-loaded. The second sentence adds a practical use case without redundant elaboration.
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 a fully documented 6-parameter schema, an output schema, and annotations for read-only/idempotent/non-destructive behavior, the description is sufficient for correct invocation. It does not need to describe return values, and no critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter details in the description. The description does not add meaning beyond the schema, merely restating the name filter and ad account scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (search), resource (campaigns/ad sets/ads), and scope (by name within an ad account), so an agent can grasp what the tool does. It does not explicitly call out how this differs from sibling get/search tools such as meta_get_campaigns or meta_search_targeting_options, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Useful for finding specific entities" provides an implied use case, but there is no explicit when-to-use/when-not-to-use guidance and no reference to alternative tools among the many sibling list/search tools. An agent must infer when this should be preferred over meta_get_campaigns/meta_get_adsets/meta_get_ads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_search_targeting_optionsmeta search targeting optionsARead-onlyIdempotent
Search Meta's read-only targeting metadata for interests, validated interests, geographies, locales, countries, cities, regions, markets, or postal codes.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Provider object or operation type selected from this schema's allowed values. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| query | No | Search text; required by most interest and geography searches | |
| countryCode | No | Country code used to localize keyword or targeting results. | |
| locationTypes | No | Location dictionary categories to include in targeting search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description reinforces 'read-only' and adds the targeting-metadata context, but it does not disclose additional behavior such as pagination behavior or rate limits; this is a minor gap given the strong 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?
It is one front-loaded sentence with no filler: the action, resource, and scope all appear immediately, and the list of targeting categories is compact. Every part of the sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full input schema descriptions, a rich output schema, and annotations covering safety and idempotency, this one-sentence description is sufficient for an agent to select and invoke the tool correctly. No critical behavioral or parameter context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all five parameters, so a baseline of 3 applies. The description adds some semantic help by mapping the `type` enum values to business categories, but it does not add meaning for limit, query, countryCode, or locationTypes 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 opens with the verb 'Search' and the concrete resource 'Meta's read-only targeting metadata,' then names the categories it covers: interests, validated interests, geographies, locales, countries, cities, regions, markets, and postal codes. This makes the tool's scope unambiguous and distinguishes it from broad sibling tools like meta_search_entities.
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 intended use is implied by the targeted scope, but the description never states when to prefer this tool over alternatives such as meta_search_entities or meta_validate_query, nor does it give when-not-to-use conditions. An agent can infer the use case, but not with explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_validate_querymeta validate queryARead-onlyIdempotent
Validate a metric/breakdown combination BEFORE executing. Returns errors and warnings. Use this to check if your query will work.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Aggregation level | |
| metrics | Yes | Metric keys to validate | |
| breakdowns | No | Breakdown keys to validate |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds value beyond annotations by stating the tool returns errors and warnings and is meant to run before execution, which clarifies its behavioral role without contradicting the hints.
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 sentences with zero filler. The core purpose is front-loaded ('Validate... BEFORE executing'), and the return type is stated immediately after. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple validation tool with only 3 parameters, full schema coverage, a safety profile in annotations, and an output schema present, the description covers purpose, timing, and usage completely. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description mentions 'metric/breakdown combination', which loosely maps to metrics and breakdowns, but adds no additional semantic detail beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Validate') and resource ('metric/breakdown combination'), which clearly states what the tool does. It also adds the temporal context 'BEFORE executing' and names its output ('errors and warnings'), making it unambiguous and distinct from the many get_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence, 'Use this to check if your query will work,' gives explicit when-to-use guidance. It doesn't name specific alternatives or exclusions, but the pre-execution validation role is clear enough for an agent to select it over execution tools like meta_get_insights.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
41 tool updates
v2.0.1- First observed
meta_debug_token - First observed
meta_get_account_details - First observed
meta_get_ad_activity - First observed
meta_get_ad_preview - First observed
meta_get_ad_studies - First observed
meta_get_ads - First observed
meta_get_adset_configuration - First observed
meta_get_adsets - First observed
meta_get_audience_details - First observed
meta_get_audiences - First observed
meta_get_brand_safety_controls - First observed
meta_get_business_assets - First observed
meta_get_campaign_structure - First observed
meta_get_campaigns - First observed
meta_get_catalog_batch_status - First observed
meta_get_catalog_products - First observed
meta_get_creative_assets - First observed
meta_get_creatives - First observed
meta_get_delivery_diagnostics - First observed
meta_get_entity_configuration - First observed
meta_get_insights - First observed
meta_get_insights_raw - First observed
meta_get_instagram_accounts - First observed
meta_get_node_fields - First observed
meta_get_organic_content_enrichment - First observed
meta_get_page_posts - First observed
meta_get_pages - First observed
meta_get_pixels - First observed
meta_get_study_results - First observed
meta_get_uploaded_video - First observed
meta_get_video_sources - First observed
meta_health_check - First observed
meta_interpret_experiment_results - First observed
meta_join_product_insights - First observed
meta_list_ad_accounts - First observed
meta_list_ad_images - First observed
meta_list_ad_videos - First observed
meta_list_edge_raw - First observed
meta_search_entities - First observed
meta_search_targeting_options - First observed
meta_validate_query
TDQS
Scored across 41 tools
Multiple tool names are nearly identical or easily confused: meta_get_creatives vs meta_get_creative_assets, meta_get_audiences vs meta_get_audience_details, and meta_get_ad_studies vs meta_get_study_results. There is also a cluster of raw/escape-hatch tools (meta_get_node_fields, meta_list_edge_raw, meta_get_insights_raw) that overlap conceptually. Descriptions help, but an agent would need to read closely to avoid misselecting.
All names share the meta_ prefix and snake_case, making them readable, but verb usage is inconsistent: meta_get_campaigns, meta_list_ad_accounts, meta_validate_query, meta_debug_token, and meta_interpret_experiment_results mix get/list/debug/validate/interpret. The list/get distinction is not applied predictably across collection endpoints.
With 41 tools, this surface is too large for a coherent MCP tool set and starts to resemble raw API exposure rather than a curated interface. The broad domain justifies many tools, but this count will slow agent selection and increase the risk of choosing the wrong endpoint.
For a read-only Meta Ads server, the coverage is exceptionally complete: account discovery, entity hierarchy, creatives, media, audiences, insights, studies, catalogs, diagnostics, and raw fallbacks are all present. The server even includes validation, preview, and health-check tools, so there are no obvious dead ends for the stated read-only purpose.
Maintenance
Related MCP Connectors
Google Ads MCP server: 16 tools for reporting, campaigns, keywords, assets. Writes preview first.
Google Ads MCP server — manage campaigns, keywords, and metrics.
Hosted Meta ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for Meta/Facebook Marketing API allowing you to view and manage ad accounts, campaigns, ad sets, ads, and creatives, as well as fetch insights and upload ad images.MIT
- AlicenseCqualityDmaintenanceMCP server for the Meta Marketing API with 118 typed tools across ads, insights, pixels/CAPI, pages, Instagram, WhatsApp, catalogs, audiences, leads, and billing, featuring secure token storage and a confirmation gate on destructive calls.1001MIT
- AlicenseAqualityBmaintenanceSelf-hosted Google Ads MCP server: 35 read tools and 10 opt-in, preview-first write tools. Maintained source relocated from getmcpads-com/google-ads-mcp-server; npm package remains @getmcpads/google-ads-mcp-server.35248 npmApache 2.0
- AlicenseNot gradedqualityAmaintenanceSelf-hosted Pinterest Ads MCP server with 28 read tools and 25 opt-in, preview-first write tools. Maintained source relocated to get-mcp-ads/pinterest-ads-mcp-server; npm package remains @getmcpads/pinterest-ads-mcp-server.229 npmApache 2.0