Ads Manager by AdKit: Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads
Server Details
PPC advertising on Google Ads, Meta Ads (Facebook Ads), TikTok Ads, LinkedIn Ads, Reddit Ads & more.
- Status
- Healthy
- Uptime
- 75.5% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
- Repository
- adkit/ads-mcp
- GitHub Stars
- 14
- Server Listing
- AdKit
TDQS
Scored across 11 tools
Most tools target distinct areas (projects, setup, status, library, studio, integrations) and their descriptions explicitly cross-reference one another. However, adkit_upload_file overlaps with the media upload flows described inside adkit_manage and adkit_studio, and adkit_checkin/adkit_setup/adkit_status all touch setup or connection state, creating minor confusion.
All tools use a consistent adkit_ snake_case prefix with predictable noun or verb labels. No camelCase or mixed styles appear, making the names easy to parse and remember.
11 tools fit a multi-platform ads manager and stay within the expected 3-15 range. The set includes several auxiliary/meta tools (checkin, feedback, help) alongside one broad adkit_manage tool, which is slightly heavy on auxiliary surface but still reasonable.
Core domains are covered: projects, setup, connection status, campaign management/reporting across major platforms, media upload, creative generation, and integrations. Minor gaps exist around explicit delete operations and some platform-specific workflows, but raw API access and help discovery mitigate them.
Available Tools
11 toolsadkit_checkinAInspect
Onboarding only. Records that this agent successfully used AdKit after setup. Intended solely for setup and connection verification, at the user's explicit request.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | No | Canonical agent id for this setup flow, for example "openclaw", "claude-code", or "cursor". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=false and idempotentHint=false, so the writing nature is implied. The description adds the important consent and onboarding context, but it does not disclose what happens on repeated calls or what the tool returns, leaving some behavioral ambiguity.
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 the key constraint front-loaded. Every phrase 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?
For a lightweight one-parameter tool with no output schema, the description adequately covers purpose, scope, and consent requirements. Minor missing context includes duplicate-call behavior and expected return value, but these are low-risk for an onboarding check-in.
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 single agentId parameter is fully documented by the schema. The tool description adds no parameter-level detail, which is acceptable since the schema already carries the 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 action (records check-in), a specific resource (successful AdKit usage after setup), and a strict scope (onboarding only). This clearly distinguishes it from siblings like adkit_setup or adkit_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?
Provides clear usage context: onboarding, setup and connection verification, and only at the user's explicit request. It also excludes non-onboarding use via 'Onboarding only' and 'solely,' though it does not explicitly name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_feedbackAInspect
Report an AdKit bug, confusing behavior, missing capability, or product feedback. Fire-and-forget: it never blocks the user's task.
Fields, filled with whatever is known:
intent: what the user was trying to accomplish.
error: the exact error text, code, or HTTP status.
context: {"toolPath": "adkit_manage meta campaigns create", "platform": "meta", "accountId": "..."}.
Do not include secrets, tokens, request/response bodies, uploaded files, or personal data.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Report type. | |
| error | No | The exact error text, code, or HTTP status. | |
| intent | No | What the user was trying to accomplish. | |
| context | No | Operation context: {"toolPath": "adkit_manage meta campaigns create", "platform": "meta", "accountId": "act_123"}. Include resource IDs relevant to the issue. No secrets or personal data. | |
| message | Yes | Plain-English feedback or bug report. Required. | |
| severity | No | Severity. Use critical when the agent is blocked or users are likely affected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide basic mutability hints, but the description adds valuable behavioral context: fire-and-forget semantics, that it never blocks the user's task, and a clear privacy boundary excluding secrets, tokens, bodies, uploaded files, and personal data. This goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with purpose. The field list is short and earns its place by adding filling guidance rather than just repeating the schema, and the privacy rule is a single necessary sentence. 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 fire-and-forget feedback tool with no output schema, the description covers what triggers it, what fields to populate, the expected non-blocking behavior, and what to omit. It does not explicitly state what the tool returns, but the fire-and-forget framing makes that less critical.
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 practical guidance by saying fields should be filled with whatever is known, giving a concrete context example with toolPath/platform/accountId, and reinforcing the sensitive-data exclusion. This elevates it above the schema-only case.
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 ('Report'), the target resource (AdKit), and enumerates accepted categories (bug, confusing behavior, missing capability, product feedback). It is clear and specific, though it does not explicitly distinguish itself from the sibling tool adkit_help.
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 to use the tool: to report a bug or feedback, and it calls out the fire-and-forget, non-blocking nature. It does not explicitly name alternatives or state when not to use it, but the conditions are reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_helpARead-onlyIdempotentInspect
Discover the AdKit MCP contract with progressive drill-down. Top-level paths: "manage" (campaigns, accounts, and reporting across Meta, Google, TikTok, Reddit, X, and LinkedIn, plus Microsoft and ChatGPT Ads raw access and drafts), "integrations" (read-only GA4 data), "library" (browse ads, advertisers, and inspiration boards), and "studio" (AI static ad generation). Start with adkit_help() for the root overview, or drill down like adkit_help({ path: "manage google campaigns create" }). A keyword search with q, e.g. adkit_help({ q: "keyword planner" }) → "manage google research keywords", covers the full command catalog: a capability missing from one drill-down path may still exist under another.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Keyword search across every help path (Manage, Google/Meta/TikTok/LinkedIn/Reddit/X/Microsoft, Library, Studio). Returns the top matching command paths, e.g. q: "keyword planner" finds "manage google research keywords". A nonblank q takes precedence over path and detail. Search here before telling the user a capability is unavailable. | |
| path | No | Help path, for example "manage meta campaigns" or "library advertisers". | |
| detail | No | Optional detail level. Use "full" to include advanced params. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds navigational behavior: progressive drill-down, q-based keyword search across the full catalog, and cross-path fallback semantics. It does not contradict the annotations, though it could describe the return/response format more explicitly.
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 well-organized sentences carry the full contract: the first establishes the catalog categories, the second gives concrete invocation patterns and search behavior. It is dense but front-loaded and free of 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 help tool with no required parameters and rich annotations, the description covers root invocation, drill-down paths, keyword search, and precedence semantics, with examples. The lack of an output schema is not a gap because the return is clearly help content.
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 covers 100% of the parameters, so the baseline is 3; the description adds value with worked examples for path and q and clarifies that q searches the entire command catalog. This extends the schema documentation meaningfully without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly identifies this as the AdKit help/discovery tool with a specific verb ('discover') and resource (the AdKit MCP contract). The top-level path categories distinguish it from sibling operation tools and make its scope concrete with examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: start with adkit_help() for the root overview, drill down via path, or use q for keyword search. The directive to search before telling a user a capability is unavailable, plus the note that a capability may exist under another path, is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_integrationsARead-onlyIdempotentInspect
Read connected GA4 reports and Google Search Console websites, organic keywords, and pages. For actions and fields, call adkit_help with path "integrations ga4" or "integrations gsc".
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Optional exact page URL. GSC get_keywords only. | |
| limit | No | Result limit from 1 to 100 (default: 50). GA4 list_properties or any GSC operation. | |
| query | No | Optional property name, account name, or property resource search. Use only with list_properties. | |
| action | Yes | GA4: list_properties, get_metadata, run_report. GSC: list_sites, get_keywords, get_pages. | |
| device | No | Optional GSC device filter. | |
| offset | No | Zero-based result offset (default: 0). GA4 list_properties or any GSC operation. Use nextOffset for another available page. | |
| report | No | Native GA4 runReport request body (dateRanges, metrics, dimensions, filters, etc.). Required for run_report. | |
| country | No | Optional GSC ISO alpha-3 country filter, e.g. USA. | |
| endDate | No | GSC inclusive end date YYYY-MM-DD (Pacific Time). Required for get_keywords/get_pages. | |
| keyword | No | Optional exact organic search query. GSC get_pages only. | |
| siteUrl | No | GSC property from list_sites: sc-domain:example.com or https://example.com/. Required for get_keywords/get_pages. | |
| property | No | GA4 property resource from list_properties, e.g. "properties/123456789". Required for get_metadata and run_report. | |
| provider | Yes | Data provider: Google Analytics 4 or Google Search Console. | |
| projectId | No | Required. Get from adkit_projects. Auto-resolves only for single-project users. | |
| startDate | No | GSC inclusive start date YYYY-MM-DD (Pacific Time). Required for get_keywords/get_pages. | |
| connectionId | No | Optional connected Google login. Use connectionId from list_properties (GA4) or list_sites (GSC) when several logins are connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety profile is covered. The description adds that this is read-oriented and points to help for actions, but doesn't describe auth requirements, rate limits, or pagination behavior beyond what schema offsets imply.
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 read purpose, followed by a concrete help pointer. No wasted words and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 16 parameters, 100% schema coverage, and rich annotations, the description covers the broad purpose and defers detail to adkit_help. It is nearly complete for a router-style tool, though it omits any mention of the required projectId and its dependency on adkit_projects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema, including action enums, provider enums, and per-action requirements. The description adds nothing about parameter semantics beyond the schema, 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?
States a specific verb ('Read') and concrete resources (GA4 reports, GSC websites, organic keywords, pages). It distinguishes the resource domain from siblings like adkit_projects, though it doesn't explicitly name which sibling to use for other integrations actions.
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?
Says to call adkit_help with specific paths for 'actions and fields,' implying this tool covers reads. However, it doesn't state when to use this tool versus alternatives, nor when NOT to use it, leaving routing largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_libraryAInspect
Browse 1M+ ads from thousands of advertisers across Meta, Google, and LinkedIn. Keep a per-project watchlist of advertisers and save ads to shareable inspiration boards. For advertiser list/search, params.scope is library (default, all advertisers) or watchlist (the selected project's My Watchlist). Create and fill boards before setting shareEnabled: true through boards update, and only enable sharing when the user explicitly asks. The user's own campaigns live in adkit_manage.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Entity identifier. Required for get, track, untrack, boards get, boards update, and boards add-ads. | |
| action | Yes | list, search, get, and similar only read. add and track put an advertiser on the selected project's watchlist; untrack takes it off that list and leaves the advertiser and its ads in the library. Boards: create starts an empty board, update edits its name, description, color, or sharing, and add-ads adds library ads to it. | |
| entity | Yes | Library entity to query. | |
| params | No | Free-form request params. Sent as query for GET requests and as body fields for mutations. | |
| projectId | No | Required. Get from adkit_projects. Auto-resolves only for single-project users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is partly covered. The description adds genuine behavioral context beyond the annotations: the sharing action is gated on explicit user intent, and create/add-ads have ordered prerequisites. It does not discuss rate limits or return shape, but the added sharing constraint is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by capability, scope semantics, and a safety caveat. It is dense but every sentence carries distinct information; the middle sentences are somewhat packed but not wasteful.
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 multi-entity, multi-action tool with a free-form params object and no output schema, the description covers the main entity/action split, the boards workflow, and the sibling boundary. Remaining gaps (e.g., search vs list distinction, similar) are minor since the schema's action enum documents those.
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%, giving a baseline of 3, and the description exceeds that by explaining params.scope values (library vs watchlist) that the free-form params object (additionalProperties: true) leaves undefined. That is real meaning beyond the schema, though it covers only one of the nested params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Browse 1M+ ads from thousands of advertisers across Meta, Google, and LinkedIn') and layers on the watchlist and boards capabilities. It explicitly names the sibling boundary by pointing to adkit_manage for the user's own campaigns, so an agent can distinguish this library-browsing tool from management tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use rules: params.scope library vs watchlist, and the sequencing rule 'Create and fill boards before setting shareEnabled: true through boards update.' It also states an exclusion ('only enable sharing when the user explicitly asks') and routes own campaigns to adkit_manage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_manageADestructiveInspect
Manage AND report on Meta, Google, TikTok, Reddit, X, LinkedIn, Microsoft, and ChatGPT Ads.
Reporting & analytics — campaign performance, results, spend, ROAS, impressions, clicks, conversions, CPC/CPA: use entity:"results" (Google also supports action:"placements" and "search-terms"). For advertiser benchmarks, use entity:"benchmarks", a platform, and params.from:"YYYY-MM"; omit to for one month and omit action (Meta, Google, TikTok and LinkedIn). Answers "how are my ads doing" / "what's my spend" / "show campaign performance".
Management — connect project accounts and create, edit, or publish supported ad resources. ChatGPT Ads supports normalized account assignment; its advertiser operations use entity:"platform-api-request".
Coverage differs per platform — the exact entities, actions, and params for each platform are documented under adkit_help({ path: "manage " }).
Most mutations create drafts by default; publish:true sends changes live and requires explicit user approval. Use AdKit field names in params (not raw platform fields); pass full request bodies as top-level data. Use platformOverrides for raw fields on supported resources. Unsupported native platform resources and workflows are reachable via the raw platform API: entity:"platform-api-request" action:"mutate" (project opt-in); adkit_feedback is the channel for reporting these AdKit gaps. File uploads: entity:"media" action:"request_upload_url" → PUT the bytes → reference the returned uploadId. For creatives/variants/images inside an ad set, use entity:"ads".
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optional entity identifier for single-item actions like get, update, disconnect, pages, pixels, and similar routes. Do not use this for drafts publish/delete; those require ids[]. | |
| ids | No | Draft batch identifier list. Required for entity: "drafts" with action: "publish" or "delete", even for a single draft. Each array item must be exactly one draft ID. Good: ["id1","id2"]. Bad: ["id1,id2"]. | |
| data | No | Top-level AdKit request body merged over params for mutation requests after request shaping. | |
| action | No | Required except for benchmarks reports, which take no action. Actions and entity-specific requirements are documented in adkit_help. | |
| entity | Yes | Entity name. Common: campaigns, adsets, ads, accounts, media, research, results, benchmarks, drafts, platform-api-request. Platform-specific entities are listed under adkit_help({ path: "manage <platform>" }). | |
| params | No | Free-form request params. GET requests send params as query. Mutations send params as body fields by default, but some Google mutations route IDs like accountId/adGroupId/campaignId into query when the REST route expects them there. Batch/full AdKit bodies belong in top-level data. | |
| publish | No | Optional publish flag for create flows that support immediate execution. | |
| platform | No | Ad platform for the requested entity and action. | |
| accountId | No | Ad account to act on for the selected platform. Auto-resolved when the project has exactly one account on that platform; REQUIRED when multiple are connected. Get available ids from adkit_status or the platform accounts entity. | |
| projectId | No | Required. Get from adkit_projects. Auto-resolves only for single-project users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false and destructive=true, so mutation risk is signposted; the description adds genuinely new behavior: "Most mutations create drafts by default; publish:true sends changes live and requires explicit user approval," plus project opt-in for the raw platform API. This draft-vs-live distinction is not derivable from the annotations and is the key safety context. Auth/permission scope and rate limits are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the headline capability and organized under em-dash section headers, which helps scanning. However it is long and dense, with several clauses (per-platform coverage, platformOverrides, media uploads, ChatGPT normalization) that add bulk to a single description and partly restate schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must stand alone, and for a high-complexity multi-platform tool it covers routing, draft/publish semantics, field-naming rules, raw-API fallback, and file-upload flow while deferring per-platform specifics to adkit_help. Return-value shape and pagination behavior are not described, though the help-tool deferral mitigates this.
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 ten parameters, making 3 the baseline. The description adds routing meaning for entity values and clarifies that full bodies go in top-level data and AdKit field names must be used, but it does not explain params/platformOverrides semantics beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb pair (manage AND report) and the resource (ads across eight named platforms), then splits into reporting vs management modes. It names siblings it delegates to (adkit_help for docs, adkit_feedback for gaps), so the agent can route without opening schemas. It is a broad catch-all tool, so its boundary against every other manage-capable sibling is not fully drawn.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing is given for the main branches: entity:"results" for performance/spend/ROAS, entity:"benchmarks" for advertiser benchmarks with the from/for omission rules, entity:"platform-api-request" for unsupported native resources, entity:"media" for uploads, entity:"ads" for creatives. It does not explicitly say when NOT to use this tool (e.g. vs adkit_upload_file, which overlaps with the media upload flow).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_projectsADestructiveInspect
List, create, or update AdKit projects. Use a projectId returned by list for update and other project-scoped tools. List also returns accessible workspaces.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Project or business name. | |
| tags | No | Business tags for action "create" or "update". Updating replaces the full list. | |
| brand | No | Brand colors for action "update". | |
| limit | No | Maximum projects to return for action "list". Defaults to 20; max 50. | |
| query | No | Optional project name or website search for action "list". | |
| action | No | Defaults to "list". Use "create" when no project exists. For "update", pass projectId and only the fields to change. | |
| website | No | Project website URL or domain. | |
| category | No | Business category for action "create" or "update". | |
| industry | No | Business industry for action "create" or "update". | |
| projectId | No | Project to update. Required when action is "update". | |
| description | No | Business description for action "create" or "update". | |
| workspaceId | No | Optional workspace for action "create". Choose an ID returned in workspaces; omit for the default workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is largely covered by structured data. The description adds the useful side-effect that list also returns accessible workspaces, but it never warns that update can overwrite project fields (e.g. tags replacing the full list) despite carrying the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb+resource, then the identifier workflow, then the list-return detail. No sentence is redundant and nothing is buried.
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 12 parameters, 100% schema coverage, and no output schema, the description adequately covers how to obtain and use projectId and what list returns. It omits any hint about destructive update behavior or create prerequisites, but the annotations and schema fill most of that 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, and the description goes beyond it by explaining the projectId lifecycle (obtain via list, then reuse for update and other project-scoped tools). It adds workflow meaning but no additional format or constraint detail for the remaining parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific verbs and a clear resource ('List, create, or update AdKit projects'), so the agent immediately knows this is the CRUD entry point for projects. It does not explicitly contrast itself with siblings like adkit_manage or adkit_setup, but the resource-level specificity is strong.
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 real workflow guidance: use a projectId from list for update, note that list returns accessible workspaces, and (in the schema) that action defaults to list and create is for when no project exists. There is no explicit when-not guidance or named alternative sibling, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_setupRead-onlyIdempotentInspect
Use when the user wants to connect an ad platform (Meta, Google Ads, ...). Returns the link they open to sign in and pick an ad account. Requires projectId from adkit_projects.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Setup flow to launch. Currently only "manage" is supported for linking ad platforms. | |
| platform | No | Optional platform to deep-link directly into. Omit to get the general manage setup links. | |
| projectId | No | Required. Get from adkit_projects. Auto-resolves only for single-project users. |
adkit_statusARead-onlyIdempotentInspect
Return project context, connected platforms, assigned ad accounts, and Studio setup. Requires projectId from adkit_projects.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Required. Get from adkit_projects. Auto-resolves only for single-project users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, and the description adds what data is returned. However, 'Requires projectId' is slightly overstated because the schema notes the parameter auto-resolves for single-project users, and no edge-case behavior is disclosed. 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?
One sentence that front-loads the return contents and immediately states the dependency. 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?
The description explains what the tool returns and the input dependency. It lacks an explicit call scenario or output-shape details, but given a single parameter and read-only safe operation, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds no new parameter meaning; it simply repeats that projectId is required and sourced from adkit_projects, which the schema already documents.
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 ('Return') and a precise resource ('project context, connected platforms, assigned ad accounts, and Studio setup'), which clearly identifies the tool as a status/read-only lookup and distinguishes it from sibling tools like adkit_projects or adkit_setup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the prerequisite: projectId must come from adkit_projects. This tells the agent which prior tool to call. It does not name alternatives or exclusion cases, so it misses the highest bar, but the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_studioADestructiveInspect
AI ad generation workspace. Create ad briefs, generate images (create/clone/resize/edit), list ad media, inspect media items, and share briefs. Use entity "ads" + action "generate" to generate images. Omit id to auto-create an ad, or provide id to add variants to an existing ad.
To use a user's own photo as a clone/edit reference: entity:"media" action:"request_upload_url" → PUT file bytes → pass { type:"temporary_upload", id: } in generate references.
Has no live campaign data, spend, or performance reporting; that data lives in adkit_manage. Studio ads are creative drafts, not launched ads.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Ad or media ID. For generate: omit to auto-create an ad, or provide an ad ID to add variants. For media list: provide the ad ID whose media should be returned. | |
| action | Yes | Ads actions: list, get, create, update, delete, generate, share. Media actions: list, get, delete, request_upload_url. | |
| entity | Yes | Studio entity to operate on. | |
| params | No | Request params. For generate: mode, aspectRatio, quantity, instructions, audience, model (for example: gpt-image-2), quality (OpenAI: Low/Medium/High; Gemini: 1K/2K/4K), colors, references (array of { type: "media"|"library-ad"|"temporary_upload", id: string }), title. For reads: fields (comma-separated or "all"). | |
| projectId | No | Required. Get from adkit_projects. Auto-resolves only for single-project users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly=false and destructiveHint=true; the description adds meaningful behavior beyond that: Studio entities are drafts, no live campaign data is exposed, and the temporary-upload workflow requires a PUT before passing the reference. It does not detail side effects of delete/update, but the key conceptual boundary is well 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 dense but efficiently organized: capability overview, critical action mapping, the upload workflow, and boundary with adkit_manage. Every sentence contributes guidance an agent needs, and no space is wasted restating the tool name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-entity, multi-action tool with nested params and no output schema, the description covers the major decision points: which entity/action combos to use, id behavior, the upload sequence, and where live data lives. It does not describe return payloads, but that is a minor gap given the breadth of operations and the strong schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description enhances it materially with action-specific id semantics ('omit to auto-create' vs 'provide id to add variants'), the temporary_upload reference shape, and example enum values for model/quality. It leaves a few actions to the schema, but adds real operational meaning beyond the property 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 opens with a specific role: 'AI ad generation workspace' and enumerates concrete operations (create briefs, generate images, list media, inspect media items, share briefs). It also distinguishes itself from adkit_manage by explicitly stating Studio ads are creative drafts, so an agent can separate this tool from its 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?
It gives explicit routing instructions: use entity 'ads' with action 'generate', omit or provide id depending on variant behavior, and use the media request_upload_url flow for user photos. It also states what the tool does NOT contain (live campaign data/spend/performance) and directs that data to adkit_manage, which is clear when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adkit_upload_fileAInspect
Beta. Upload one file to Meta, Google, TikTok, LinkedIn, X, ChatGPT Ads, or Studio from a host-provided attachment, public HTTPS URL, or completed temporary upload. X and ChatGPT Ads currently support images. When no attachment or public URL exists, a requested upload URL fills the same role. Base64 payloads and local file paths are not accepted. Report upload failures with adkit_feedback.
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | File supplied automatically by a host that supports MCP attachments. Never construct this field. | |
| action | Yes | Use "upload" when the file is already attached, at a public URL, or in a completed temporary upload. Use "request_upload_url" only when the client cannot pass the file. | |
| source | No | One public URL or completed temporary upload. Do not use when the host supplied a file. | |
| filename | No | Filename for request_upload_url. | |
| accountId | No | Ad account for Meta, Google, TikTok, LinkedIn, X, or ChatGPT Ads. May be omitted when AdKit can resolve one account. | |
| projectId | No | Required. Get from adkit_projects. Auto-resolves only for single-project users. | |
| sizeBytes | No | Optional exact file size for request_upload_url. | |
| contentType | No | MIME type for request_upload_url, for example image/png or video/mp4. | |
| destination | No | Required for upload. The platform or Studio library that should receive the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds valuable non-obvious constraints: beta status, which source types are accepted, that base64 and local paths are rejected, and that X and ChatGPT Ads are image-only. It stops short of describing success output or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the beta flag and core action, then constraints, then failure routing. Dense and largely waste-free, though the middle sentence about upload URLs is slightly convoluted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with nested objects and no output schema, the description covers sources, platform restrictions, rejection cases, and failure handling. It omits what a successful call returns (e.g., file id) and any permission requirements, which are minor 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%, so every parameter is already documented in the schema, including the action semantics and the source object. The description restates the accepted source forms but adds no syntax or format detail beyond what the schema provides, 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?
States a specific verb and resource ('Upload one file') plus the full set of destinations, so an agent can immediately distinguish this from adkit_library, adkit_studio, or adkit_manage. The scope constraint ('one file') is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the two action modes ('upload' when the file is attached/URL/temporary upload; 'request_upload_url' only when the client cannot pass the file) and the fallback when no attachment or URL exists. It also routes failures to adkit_feedback, but gives no explicit guidance on when NOT to use this tool versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
adkit_manage1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"Required except for benchmarks, which takes no action. Action: list, get, create, update, delete. Entity-specific actions are listed under adkit_help({ path: \"manage <platform>\" })."New value: +"Required except for benchmarks reports, which take no action. Actions and entity-specific requirements are documented in adkit_help."
1 tool update
- Changed
adkit_manage3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action: list, get, create, update, delete. Entity-specific actions are listed under adkit_help({ path: \"manage <platform>\" })."New value: +"Required except for benchmarks, which takes no action. Action: list, get, create, update, delete. Entity-specific actions are listed under adkit_help({ path: \"manage <platform>\" })." - changed
Input schema / properties / entity / descriptionPrevious value: -"Entity name. Common: campaigns, adsets, ads, accounts, media, research, results, drafts, platform-api-request. Platform-specific entities are listed under adkit_help({ path: \"manage <platform>\" })."New value: +"Entity name. Common: campaigns, adsets, ads, accounts, media, research, results, benchmarks, drafts, platform-api-request. Platform-specific entities are listed under adkit_help({ path: \"manage <platform>\" })." - changed
Input schema / requiredPrevious value: -[ - "entity", - "action" -]New value: +[ + "entity" +]
1 tool update
- Changed
adkit_integrations14 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"List accessible properties, discover property-specific custom fields and key events, or run a read-only GA4 report."New value: +"GA4: list_properties, get_metadata, run_report. GSC: list_sites, get_keywords, get_pages." - changed
Input schema / properties / action / enumPrevious value: -[ - "list_properties", - "get_metadata", - "run_report" -]New value: +[ + "list_properties", + "get_metadata", + "run_report", + "list_sites", + "get_keywords", + "get_pages" +] - changed
Input schema / properties / connectionId / descriptionPrevious value: -"Optional connected GA4 login. Use the connectionId returned by list_properties when more than one login is connected."New value: +"Optional connected Google login. Use connectionId from list_properties (GA4) or list_sites (GSC) when several logins are connected." - added
Input schema / properties / countryAdded value: +{ + "description": "Optional GSC ISO alpha-3 country filter, e.g. USA.", + "type": "string" +} - added
Input schema / properties / deviceAdded value: +{ + "description": "Optional GSC device filter.", + "enum": [ + "desktop", + "mobile", + "tablet" + ], + "type": "string" +} - added
Input schema / properties / endDateAdded value: +{ + "description": "GSC inclusive end date YYYY-MM-DD (Pacific Time). Required for get_keywords/get_pages.", + "type": "string" +} - added
Input schema / properties / keywordAdded value: +{ + "description": "Optional exact organic search query. GSC get_pages only.", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Optional property result limit from 1 to 100. Use only with list_properties; defaults to 50."New value: +"Result limit from 1 to 100 (default: 50). GA4 list_properties or any GSC operation." - changed
Input schema / properties / offset / descriptionPrevious value: -"Optional zero-based property result offset. Use only with list_properties; defaults to 0."New value: +"Zero-based result offset (default: 0). GA4 list_properties or any GSC operation. Use nextOffset for another available page." - added
Input schema / properties / pageAdded value: +{ + "description": "Optional exact page URL. GSC get_keywords only.", + "type": "string" +} - changed
Input schema / properties / provider / descriptionPrevious value: -"Data provider. Currently Google Analytics 4."New value: +"Data provider: Google Analytics 4 or Google Search Console." - changed
Input schema / properties / provider / enumPrevious value: -[ - "ga4" -]New value: +[ + "ga4", + "gsc" +] - added
Input schema / properties / siteUrlAdded value: +{ + "description": "GSC property from list_sites: sc-domain:example.com or https://example.com/. Required for get_keywords/get_pages.", + "type": "string" +} - added
Input schema / properties / startDateAdded value: +{ + "description": "GSC inclusive start date YYYY-MM-DD (Pacific Time). Required for get_keywords/get_pages.", + "type": "string" +}
1 tool update
- Changed
adkit_library1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"Library action to execute. For advertisers, track/untrack changes the selected project watchlist. For boards, list/get reads the selected project, create/update changes board metadata, and add-ads saves selected library ads."New value: +"list, search, get, and similar only read. add and track put an advertiser on the selected project's watchlist; untrack takes it off that list and leaves the advertiser and its ads in the library. Boards: create starts an empty board, update edits its name, description, color, or sharing, and add-ads adds library ads to it."
1 tool update
- Changed
adkit_integrations6 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"List accessible properties or run a read-only GA4 report."New value: +"List accessible properties, discover property-specific custom fields and key events, or run a read-only GA4 report." - changed
Input schema / properties / action / enumPrevious value: -[ - "list_properties", - "run_report" -]New value: +[ + "list_properties", + "get_metadata", + "run_report" +] - added
Input schema / properties / limitAdded value: +{ + "description": "Optional property result limit from 1 to 100. Use only with list_properties; defaults to 50.", + "type": "number" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Optional zero-based property result offset. Use only with list_properties; defaults to 0.", + "type": "number" +} - changed
Input schema / properties / property / descriptionPrevious value: -"GA4 property resource from list_properties, e.g. \"properties/123456789\". Required for run_report."New value: +"GA4 property resource from list_properties, e.g. \"properties/123456789\". Required for get_metadata and run_report." - added
Input schema / properties / queryAdded value: +{ + "description": "Optional property name, account name, or property resource search. Use only with list_properties.", + "type": "string" +}
1 tool update
- Changed
adkit_upload_file2 fields changed- changed
Input schema / properties / accountId / descriptionPrevious value: -"Ad account for Meta, Google, TikTok, LinkedIn, or X. May be omitted when AdKit can resolve one account."New value: +"Ad account for Meta, Google, TikTok, LinkedIn, X, or ChatGPT Ads. May be omitted when AdKit can resolve one account." - changed
Input schema / properties / destination / enumPrevious value: -[ - "meta", - "google", - "tiktok", - "linkedin", - "x", - "studio" -]New value: +[ + "meta", + "google", + "tiktok", + "linkedin", + "x", + "chatgpt", + "studio" +]
1 tool update
- Added
adkit_integrations
3 tool updates
- Changed
adkit_library2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Library action to execute. For advertisers, track/untrack changes the selected project watchlist. For boards, create/update changes board metadata and add-ads saves selected library ads."New value: +"Library action to execute. For advertisers, track/untrack changes the selected project watchlist. For boards, list/get reads the selected project, create/update changes board metadata, and add-ads saves selected library ads." - changed
Input schema / properties / id / descriptionPrevious value: -"Entity identifier. Required for get, track, untrack, boards update, and boards add-ads."New value: +"Entity identifier. Required for get, track, untrack, boards get, boards update, and boards add-ads."
- Changed
adkit_manage2 fields changed- changed
Input schema / properties / accountId / descriptionPrevious value: -"Ad account to act on: Meta act_ id, Google customerId, TikTok advertiserId, Reddit ad account id, or X ad account id. Auto-resolved when the project has exactly one account on that platform; REQUIRED when multiple are connected. Get the available ids from adkit_status."New value: +"Ad account to act on for the selected platform. Auto-resolved when the project has exactly one account on that platform; REQUIRED when multiple are connected. Get available ids from adkit_status or the platform accounts entity." - changed
Input schema / properties / platform / enumPrevious value: -[ - "meta", - "google", - "tiktok", - "reddit", - "x", - "linkedin", - "microsoft" -]New value: +[ + "meta", + "google", + "tiktok", + "reddit", + "x", + "linkedin", + "microsoft", + "chatgpt" +]
- Changed
adkit_setup1 field changed- changed
Input schema / properties / platform / enumPrevious value: -[ - "meta", - "google", - "tiktok", - "reddit", - "x", - "linkedin", - "microsoft" -]New value: +[ + "meta", + "google", + "tiktok", + "reddit", + "x", + "linkedin", + "microsoft", + "chatgpt" +]
1 tool update
- Changed
adkit_library4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Library action to execute. For advertisers, track/untrack adds/removes an existing advertiser from the selected project watchlist; add requires a website or ad library URL and tracks the advertiser. For a name, search first, then track its ID."New value: +"Library action to execute. For advertisers, track/untrack changes the selected project watchlist. For boards, create/update changes board metadata and add-ads saves selected library ads." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "search", - "get", - "similar", - "add", - "track", - "untrack" -]New value: +[ + "list", + "search", + "get", + "similar", + "add", + "track", + "untrack", + "create", + "update", + "add-ads" +] - changed
Input schema / properties / entity / enumPrevious value: -[ - "advertisers", - "ads" -]New value: +[ + "advertisers", + "ads", + "boards" +] - changed
Input schema / properties / id / descriptionPrevious value: -"Entity identifier. Required for get, track, and untrack; track/untrack change watchlist membership for the selected project only."New value: +"Entity identifier. Required for get, track, untrack, boards update, and boards add-ads."
10 tool updates
- First observed
adkit_checkin - First observed
adkit_feedback - First observed
adkit_help - First observed
adkit_library - First observed
adkit_manage - First observed
adkit_projects - First observed
adkit_setup - First observed
adkit_status - First observed
adkit_studio - First observed
adkit_upload_file
Related MCP Connectors
Audit and monitor PPC accounts: Google Ads, Microsoft Advertising, and Meta Ads.
Launch campaigns, manage ads and analyze performance across Meta, TikTok, Google Ads and Snapchat.
Google & Meta Ads management with 100+ tools. Audit, create, and optimize campaigns.
Run Google Ads, Meta Ads, LinkedIn Ads and ChatGPT Ads from Claude or ChatGPT. You approve every change.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables direct management of Google Ads and Meta Ads campaigns, keywords, ads, and ad review status through the official APIs, without third-party quotas or intermediaries.1339 npmMIT

PaidSync (Ads analysis &official
AlicenseNot gradedqualityFmaintenanceMCP server for managing Google Ads, Meta Ads, LinkedIn Ads, and TikTok Ads via AI. 210+ tools including account audits, wasted spend detection, and PMax insights.2MIT
PaidSync MCP Serverofficial
AlicenseNot gradedqualityFmaintenanceConnects Google Ads, Meta Ads, and LinkedIn Ads to AI assistants, enabling natural language ad campaign management, reporting, and optimization across platforms.MIT- AlicenseAqualityCmaintenanceMCP server for AI agents to manage ad campaigns across Google, Meta, LinkedIn, Microsoft, Reddit, TikTok, and more2189 npm18MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.