The Airops MCP connector routes your AI agent's tool calls to Airops's own MCP server through Scalekit. Each user connects their own Airops API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 91 tools.
- Tools
- 91
- What they doRead · write · destructive
- 37 · 25 · 2937 read25 write29 destructive
- Users sign in with
- API key
What you can do
- Track AI search visibility: query analytics, AI answers, citations, and cited domains to see how AI engines mention a brand
- Manage AEO prompts: create, tag, and delete tracked prompts, and group them by topic and persona
- Manage Brand Kits: update brand voice, audiences, competitors, writing rules, palettes, and fonts, then publish the draft
- Work with grids: create grids and sheets, read and write rows, and run workflow columns on selected rows
- Manage knowledge bases: create knowledge bases, add web pages and files, and search their content by meaning
- Review campaign opportunities: list, create, accept, or reject improvement opportunities for a campaign
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Airops MCP connection
In AgentKit > Connections, create an Airops MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Console steps with screenshots
Register your Scalekit environment with the AirOps connector so Scalekit can proxy API requests and inject your API key automatically. There is no redirect URI or OAuth flow — authentication uses your AirOps API key.
-
Get your AirOps API key
- Sign in to AirOps and click Settings in the bottom-left sidebar.
- Select Workspace from the settings menu.
- Under API Key, click the copy icon to copy your key. To rotate the key, click Regenerate.

-
Create a connection in Scalekit
- In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find AirOps and click Create.
- Note the Connection name — use this as
connection_namein your code (e.g.,airopsmcp). - Click Save.
-
Add a connected account
Connected accounts link a user identifier in your system to an AirOps API key.
In the dashboard, to test
- Open the connection and click the Connected Accounts tab → Add account.
- Fill in:
- Your User’s ID — a unique identifier for this user in your system (e.g.,
user_123) - API Key — the AirOps API key you copied in step 1
- Your User’s ID — a unique identifier for this user in your system (e.g.,
- Click Save.
In production
Each user adds their own account through the authorization link: they enter their credentials on the page it opens.
From your backend, if your app already has the credentials
For example, when users enter them on a settings page in your app:
import { ConnectorStatus } from '@scalekit-sdk/node'// Never hard-code API keys — read from secure storage or user inputconst airopsApiKey = getUserAiropsKey(); // retrieve from your secure storeconst authorizationDetails = {details: {case: 'staticAuth',value: { details: { api_key: airopsApiKey } },},};let { connectedAccount } = await scalekit.actions.upsertConnectedAccount({connectionName: 'airopsmcp',identifier: 'user_123',authorizationDetails,});// Make sure the account is ACTIVE before the first tool call.if (connectedAccount?.status !== ConnectorStatus.ACTIVE) {({ connectedAccount } = await scalekit.actions.upsertConnectedAccount({connectionName: 'airopsmcp',identifier: 'user_123',authorizationDetails,}));}# Never hard-code API keys — read from secure storage or user inputairops_api_key = get_user_airops_key() # retrieve from your secure storeauthorization_details = {"static_auth": {"api_key": airops_api_key}}response = scalekit_client.actions.upsert_connected_account(connection_name="airopsmcp",identifier="user_123",authorization_details=authorization_details,)# Make sure the account is ACTIVE before the first tool call.if response.connected_account.status != "ACTIVE":response = scalekit_client.actions.upsert_connected_account(connection_name="airopsmcp",identifier="user_123",authorization_details=authorization_details,)
-
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'airopsmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Airops MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'airopsmcp_list_aeo_page_content_updates',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "airopsmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Airops MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="airopsmcp_list_aeo_page_content_updates",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user opens the link once and enters their Airops MCP server credentials there. If your app already has a user's credentials, add the account from your backend instead, as the console steps above show. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolairopsmcp_analytics_chartQuery analytics data and display it as an interactive chart.Read-onlyAnalytics Chart
Query analytics data and display it as an interactive chart. Returns data with a UI reference for visualization.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to query analytics for
metricsarrayrequired- Metrics to calculate and display (e.g., citation_rate, mention_rate, share_of_voice).
chart_typestring- Type of chart to render. Line for time series, bar for comparisons, pie for proportions, area for comparison and visualizing totals with filled area under the curve. Default: line.one of
linebarpiearea countriesarray- Filter by country codes (ISO 3166-1 alpha-2)
dimensionsarray- Dimensions to group by (max 3).
end_datestring- End date (YYYY-MM-DD). Defaults to yesterday. Must be before today because today's data may still be processing and is incomplete — yesterday is used to ensure robust, complete data. Leave blank unless a specific date is requested.
grainstring- Time granularity for aggregation. Default: totalone of
dailyweeklymonthlytotal personasarray- Filter by persona IDs
providersarray- Filter by AI providers
start_datestring- Start date (YYYY-MM-DD). Default: 7 days ago
tagsarray- Filter by tag IDs. Returns data only for prompts tagged with any of the given tags.
themesarray- Filter sentiment data by theme IDs. Only applies to sentiment_score metric.
titlestring- Optional chart title. If not provided, a title will be auto-generated.
topicsarray- Filter by topic IDs
airopsmcp_get_aeo_citationGet prompts citing a specific URL.Read-onlyGet Aeo Citation
Get prompts citing a specific URL. The 'id' parameter is the URL to look up.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
idstringrequired- Resource ID
countriesarray- Filter metrics by country codes
end_datestring- End date for metrics (ISO 8601). Defaults to today.
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
personasarray- Filter metrics by persona IDs
providersarray- Filter metrics by AI providers
start_datestring- Start date for metrics (ISO 8601). Defaults to 1 month ago.
airopsmcp_get_aeo_page_content_updateGet a specific page content update by ID.Read-onlyGet Aeo Page Content Update
Get a specific page content update by ID. Track content updates.
Inputs
idintegerrequired- Resource ID
brand_kit_idinteger- Optional Brand Kit ID to filter content updates by
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
workspace_idinteger- ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.
airopsmcp_get_aeo_prompt_assignments_statusInspect the current prompt-assignment draft state for a Brand Kit without modifying anything.Read-onlyGet Aeo Prompt Assignments Status
Inspect the current prompt-assignment draft state for a Brand Kit without modifying anything. Read-only. This is the authoritative source for workspace estimated-answers numbers (live and draft). Call it whenever you need them — never compute or guess them yourself. In particular: - At the start of a session, to detect a pre-existing draft from unsaved UI edits. - Immediately after `commit_aeo_prompt_assignments`, to read the new live `estimated_answers` — the commit tool does not return them. - Before staging more changes via `update_aeo_prompt_assignments`, to compare against `max_answers`. Returns: - `has_draft`: whether a draft session exists for this brand kit. - `has_changes`: whether the draft has uncommitted edits relative to live (null if no draft). - `draft_id`: the draft's ID (null if no draft). - `live_estimated_answers`: current workspace estimated answers/month based on live assignments. - `draft_estimated_answers`: what the workspace estimated answers/month would be if the draft were committed now (null if no draft). - `max_answers`: the workspace's effective answers limit. - `limit_exceeded`: whether committing the draft now would exceed the limit (false if no draft).
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to inspect.
airopsmcp_get_answerGet a specific AI answer by ID with full text content.Read-onlyGet Answer
Get a specific AI answer by ID with full text content.
Inputs
idintegerrequired- Resource ID
fieldsarray- Specify which fields to return in the response, as a list of field names.
includesarray- Related resources to include in the response, as a list of relationship names.
airopsmcp_get_brand_kitFetch a Brand Kit's brand identity (writing_tone, writing_persona) and associated entities (product lines, audiences, content types, regions, writing rules, cus...Read-onlyGet Brand Kit
Fetch a Brand Kit's brand identity (writing_tone, writing_persona) and associated entities (product lines, audiences, content types, regions, writing rules, cus...
Inputs
idintegerrequired- Resource ID
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
versionstring- Brand Kit version to read from (`active` or `draft`). Defaults to `active`.one of
activedraft workspace_idinteger- ID of the workspace to retrieve brand kits from. If not provided, returns brand kits from all workspaces the user belongs to.
airopsmcp_get_campaignGet a campaign by ID, including action grid IDs needed to inspect or update its grid.Read-onlyGet Campaign
Get a campaign by ID, including action grid IDs needed to inspect or update its grid. Campaigns are Plays that coordinate strategy playbooks, action grids, and related opportunities for improving AEO performance.
Inputs
idintegerrequired- Resource ID
fieldsarray- Select specific fields to return. **Available fields:** - **id**: Campaign ID - **name**: Campaign name - **status**: Campaign status - **resource_type**: Resource type this campaign works on - **brand_kit_id**: Brand Kit this campaign belongs to - **workspace_id**: Workspace this campaign belongs to - **strategy_playbook_id**: Strategy playbook generated for this campaign - **opportunity_schema_version**: Persisted Opportunity schema version - **created_at**: When the campaign was created - **updated_at**: When the campaign was last updated - **action_grid_id**: Action grid ID to use with grid tools - **action_grid_table_id**: Action grid table ID to use with grid tools - **custom_instructions**: Campaign-specific guidance for working related opportunities
filtersarray- Filter results. Nested fields (e.g. `writing_rules.text`) filter within an included association and require that association in `includes`. **Available fields:** - **name** (EQUALS, CONTAINS): Filter by campaign name - **status** (EQUALS, IN): Filter by campaign status - **workspace_id** (EQ, IN): Filter by workspace ID - **brand_kit_id** (EQ, IN): Filter by Brand Kit ID - **resource_type** (EQUALS, IN): Filter by campaign resource type
airopsmcp_get_grid_row_execution_statusCheck the status of grid row executions.Read-onlyGet Grid Row Execution Status
Check the status of grid row executions. Returns the overall status and per-column detail for each execution.
Inputs
grid_idintegerrequired- The ID of the grid containing the executions.
row_execution_idsarrayrequired- IDs of the row executions to check (max 50).
airopsmcp_get_insights_settingsGet AEO insights configuration for a Brand Kit, this includes the relevant information to use any AEO and analytics tools.Read-onlyGet Insights Settings
Get AEO insights configuration for a Brand Kit, this includes the relevant information to use any AEO and analytics tools.
Inputs
idintegerrequired- Resource ID
fieldsarray- Specify which fields to return in the response, as a list of field names.
workspace_idinteger- ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.
airopsmcp_get_page_detailsGet AEO metrics for a specific web page.Read-onlyGet Page Details
Get AEO metrics for a specific web page. Page details include citation share, citation rate, unique cited questions count, and Google Search Console metrics (cl...
Inputs
idintegerrequired- Resource ID
end_datestring- End date for metrics period (YYYY-MM-DD format). Defaults to current date.
fieldsarray- Specify which fields to return in the response, as a list of field names.
start_datestring- Start date for metrics period (YYYY-MM-DD format). Defaults to 1 month ago.
airopsmcp_get_page_promptsGet prompts citing a specific web page.Read-onlyGet Page Prompts
Get prompts citing a specific web page. Returns AI prompts that cite the page along with citation metrics (citation_rate, mention_rate) and trends.
Inputs
brand_kit_idintegerrequired- ID of the brand kit
web_page_idintegerrequired- ID of the web page to get citing prompts for
countriesarray- Country codes to filter by (ISO 3166-1 alpha-2 format).
end_datestring- End date for analysis period (ISO 8601 format, defaults to today)
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 personasarray- Filter by persona IDs
providersarray- Filter by AI providers (e.g., chat_gpt, gemini, perplexity, google_ai_mode, google_ai_overview, claude, grok, microsoft_copilot)
start_datestring- Start date for analysis period (ISO 8601 format, defaults to 1 month ago)
topic_idsarray- Filter by topic IDs
airopsmcp_get_prompt_answersGet AI answers for a specific prompt/question.Read-onlyGet Prompt Answers
Get AI answers for a specific prompt/question. Prompt answers are the AI answers for a specific question/prompt asked to multiple AI providers and the answers a...
Inputs
prompt_idintegerrequired- ID of the question/prompt to get answers for
countriesstring- Country codes to filter by (ISO 3166-1 alpha-2 format).
end_datestring- End date for analysis period (ISO 8601 format, defaults to today)
fieldsarray- Specify which fields to return in the response, as a list of field names.
includesarray- Related resources to include in the response, as a list of relationship names.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 personasstring- Comma-separated persona IDs to filter by.Use "default" for the default persona.
sortstring- Sort field. Prefix with - for descending.one of
created_at-created_atdefault-created_at start_datestring- Start date for analysis period (ISO 8601 format, defaults to 1 month ago)
airopsmcp_get_reportGet a specific report by ID with its module configurations.Read-onlyGet Report
Get a specific report by ID with its module configurations. Reports are saved analytics views for a Brand Kit.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
idintegerrequired- Resource ID
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
airopsmcp_get_sentiment_theme_answersGet individual AI answers with sentiment details for a specific theme.Read-onlyGet Sentiment Theme Answers
Get individual AI answers with sentiment details for a specific theme. Returns answer text, sentiment (positive/neutral/negative), confidence score, and provide...
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
sentiment_theme_idintegerrequired- The sentiment theme ID to drill into. Use query_analytics with dimensions=[theme] to discover available theme IDs first.
countriesarray- Filter by country codes (ISO 3166-1 alpha-2)
end_datestring- End date (YYYY-MM-DD). Defaults to yesterday. Must be before today.
pageinteger- Page number. Default: 1
per_pageinteger- Results per page (1-50). Default: 10
personasarray- Filter by persona IDs
providersarray- Filter by AI providers
start_datestring- Start date (YYYY-MM-DD). Default: 30 days ago
topicsarray- Filter by topic IDs
airopsmcp_knowledge_base_get_documentRead the full reconstructed text content of a Knowledge Base document end-to-end — the loader-extracted text from every chunk concatenated in `position` order.Read-onlyGet Knowledge Base Document
Read the full reconstructed text content of a Knowledge Base document end-to-end — the loader-extracted text from every chunk concatenated in `position` order. Use when chunked search results aren't enough: summarizing a whole document, answering questions across an entire report, or reading back a doc before delete-and-recreate. For finding specific passages, prefer `search_knowledge_base`. Returns up to `max_chars` characters starting at `offset` (defaults to 0 and 200000). When the document is larger than the slice, the response includes `next_offset` (the value to pass on the next call to continue reading); when fully read, `next_offset` is `null`. For documents still indexing (`status: pending`) or in error (`status: error`), content may be empty — check `status` first. Content is reconstructed by joining chunks; minor overlap or duplication between adjacent chunks is possible depending on the original loader's chunking strategy. For the original source file, use the existing download path outside MCP.
Inputs
document_idintegerrequired- The ID of the document to read.
knowledge_base_idintegerrequired- The ID of the Knowledge Base the document belongs to.
max_charsinteger- Maximum characters to return in this call (default 200000, cap 500000). For larger documents, paginate via `next_offset`.
offsetinteger- Character offset to start reading from (default 0). Use the `next_offset` from a previous call to paginate.
airopsmcp_knowledge_base_get_statusGet the indexing status of a Knowledge Base and its documents.Read-onlyGet Knowledge Base Status
Get the indexing status of a Knowledge Base and its documents. Returns a Knowledge Base–level rollup (status, pending and total document counts) plus a paginated list of per-document statuses. Use this to monitor indexing after writes — only documents with status "ready" are returned by search_knowledge_base. Pass the returned `cursor` back to fetch the next page; pass `document_ids` to filter to specific documents.
Inputs
knowledge_base_idintegerrequired- The ID of the Knowledge Base to inspect.
cursorinteger- Optional. Cursor token returned by a previous call. Pass it back to fetch the next page.
document_idsarray- Optional. Filter the documents array to only the listed document IDs.
itemsinteger- Optional. Page size for the documents array (1–100, default 25).default
25
airopsmcp_list_aeo_citationsList citations (URLs) with metrics for a Brand Kit.Read-onlyList Aeo Citations
List citations (URLs) with metrics for a Brand Kit.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
countriesarray- Filter metrics by country codes
end_datestring- End date for metrics (ISO 8601). Defaults to today.
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 personasarray- Filter metrics by persona IDs
providersarray- Filter metrics by AI providers
sortstring- Sort field. Prefix with - for descending.one of
citation_count-citation_countcitation_share-citation_sharecitation_rate-citation_rateinfluence_score-influence_score start_datestring- Start date for metrics (ISO 8601). Defaults to 1 month ago.
airopsmcp_list_aeo_domainsList domains cited in AI answers for a Brand Kit.Read-onlyList Aeo Domains
List domains cited in AI answers for a Brand Kit. Cited domains aggregated by domain with citation metrics.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
countriesarray- Filter metrics by country codes
end_datestring- End date for metrics (ISO 8601). Defaults to today.
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 personasarray- Filter metrics by persona IDs
providersarray- Filter metrics by AI providers
sortstring- Sort field. Prefix with - for descending.one of
citation_count-citation_countcitation_share-citation_sharecitation_rate-citation_rate start_datestring- Start date for metrics (ISO 8601). Defaults to 1 month ago.
airopsmcp_list_aeo_page_content_updatesList page content updates for a workspace.Read-onlyList Aeo Page Content Updates
List page content updates for a workspace. Track content updates.
Inputs
brand_kit_idinteger- Optional Brand Kit ID to filter content updates by
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
created_at-created_atupdated_at-updated_aturl-urldefault-created_at workspace_idinteger- ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.
airopsmcp_list_aeo_promptsList AEO prompts for a specific Brand Kit.Read-onlyList Aeo Prompts
List AEO prompts for a specific Brand Kit. Questions are the AI prompts that can be asked about a brand.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
countriesarray- Filter metrics by country codes
end_datestring- End date for metrics (ISO 8601). Defaults to today.
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 personasarray- Filter metrics by persona IDs
providersarray- Filter metrics by AI providers
sortstring- Sort field. Prefix with - for descending.one of
text-textcreated_at-created_atprompt_volume-prompt_volumemention_rate-mention_ratecitation_rate-citation_rate start_datestring- Start date for metrics (ISO 8601). Defaults to 1 month ago.
airopsmcp_list_answersList AI answers for a brand kit with filters for date range, providers, countries, prompt_id, and brand_mentioned.Read-onlyList Answers
List AI answers for a brand kit with filters for date range, providers, countries, prompt_id, and brand_mentioned. Individual AI answers with their cited URLs and brand/competitor mentions.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
brand_mentionedboolean- When set, filter to answers where the brand was (or was not) mentioned.
countriesarray- Filter by ISO alpha-2 country codes.
end_datestring- End date (ISO 8601) on aeo_analyses.created_at. Defaults to today.
fieldsarray- Select additional fields to return. **Optional fields:** - **id**: Answer ID - **date**: Analysis date (YYYY-MM-DD) - **text**: Answer text. Truncated to 200 chars with ellipsis on list; full on show. - **prompt**: Prompt (question) text - **citations**: URLs cited by the answer (deduped) - **mentions**: Brand names mentioned in the answer (self brand + competitors) - **persona**: Persona name or "default" - **provider**: AI provider - **country**: ISO alpha-2 country code - **web_search_triggered**: Whether the AI performed a web search for this answer - **brand_mentioned**: Whether the brand was mentioned in this answer
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 prompt_idinteger- Filter answers by a single prompt (question) ID.
providersarray- Filter by AI providers.
start_datestring- Start date (ISO 8601) on aeo_analyses.created_at. Defaults to 30 days ago.
airopsmcp_list_brand_kitsList all Brand Kits the user has access to.Read-onlyList Brand Kits
List all Brand Kits the user has access to. Returns `brand_management_enabled` and `aeo_enabled` flags for each brand kit.
Inputs
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
brand_name-brand_namecreated_at-created_at versionstring- Brand Kit version to read from (`active` or `draft`). Defaults to `active`.one of
activedraft workspace_idinteger- ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.
airopsmcp_list_campaignsList campaigns the authenticated user has access to.Read-onlyList Campaigns
List campaigns the authenticated user has access to. Use get_campaign to retrieve action grid IDs and custom instructions for a campaign. Campaigns are Plays that coordinate strategy playbooks, action grids, and related opportunities for improving AEO performance.
Inputs
fieldsarray- Select additional fields to return. Default fields (id, name, status, resource_type, brand_kit_id, workspace_id, strategy_playbook_id, opportunity_schema_version, created_at, updated_at) are always included. **Optional fields:** - **action_grid_id**: Action grid ID to use with grid tools - **action_grid_table_id**: Action grid table ID to use with grid tools - **custom_instructions**: Campaign-specific guidance for working related opportunities
filtersarray- Filter results. Nested fields (e.g. `writing_rules.text`) filter within an included association and require that association in `includes`. **Available fields:** - **name** (EQUALS, CONTAINS): Filter by campaign name - **status** (EQUALS, IN): Filter by campaign status - **workspace_id** (EQ, IN): Filter by workspace ID - **brand_kit_id** (EQ, IN): Filter by Brand Kit ID - **resource_type** (EQUALS, IN): Filter by campaign resource type
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.
**Available sort fields:**
- **name/-name**: Sort by campaign name
- **created_at/-created_at**: Sort by creation date
- **updated_at/-updated_at**: Sort by last updated dateone of
name-namecreated_at-created_atupdated_at-updated_atdefault-updated_at
airopsmcp_list_gridsList grids the authenticated user has access to.Read-onlyList Grids
List grids the authenticated user has access to. Use includes=[\"grid_tables.grid_columns\"] to get table and column structure needed for read_grid and write_gr...
Inputs
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
name-nameupdated_at-updated_atcreated_at-created_atdefault-updated_at
airopsmcp_list_knowledge_basesList all Knowledge Bases the authenticated user has access to.Read-onlyList Knowledge Bases
List all Knowledge Bases the authenticated user has access to. Knowledge Bases store documents for semantic search.
Inputs
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
name-namecreated_at-created_at
airopsmcp_list_opportunitiesList opportunities for a campaign.Read-onlyList Opportunities
List opportunities for a campaign. V1 responses include matching opportunity items; v2 responses include parent review state, the target page, and ordered contexts.
Inputs
play_idintegerrequired- Campaign ID.
limitinteger- Maximum number of opportunities to return. Defaults to 30.
statusarray- Optional item statuses for v1 or parent statuses for v2. Defaults to all.
airopsmcp_list_pagesList web pages with daily metrics (AEO citations, GSC clicks/impressions, GA4 traffic) for a brand kit.Read-onlyList Pages
List web pages with daily metrics (AEO citations, GSC clicks/impressions, GA4 traffic) for a brand kit.
Inputs
brand_kit_idintegerrequired- ID of the brand kit to retrieve web page metrics for
end_datestring- End date for analysis period (ISO 8601 format, defaults to today)
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 smart_filterstring- Apply a predefined filter preset.one of
almost_page_onelosing_clicksrankings_slippinglosing_ai_visibilitycitation_rate_declinestale_pages sortstring- Sort field. Prefix with - for descending.one of
url-urlfolder_name-folder_namecitations_count-citations_countcitations_count_diff-citations_count_diffcitation_rate-citation_ratecitation_rate_diff-citation_rate_diffprompts_count-prompts_countprompts_count_diff-prompts_count_diffclicks-clicksclicks_diff-clicks_diffimpressions-impressionsimpressions_diff-impressions_diffctr-ctrctr_diff-ctr_diffposition-positionposition_diff-position_difftraffic-traffictraffic_diff-traffic_diffsessions-sessionssessions_diff-sessions_diffengagement-engagementengagement_diff-engagement_diffaverage_session_engagement-average_session_engagementaverage_session_engagement_diff-average_session_engagement_diffdefault-citations_count start_datestring- Start date for analysis period (ISO 8601 format, defaults to 1 month ago)
airopsmcp_list_personasList personas for a specific Brand Kit.Read-onlyList Personas
List personas for a specific Brand Kit. Personas are the characters that can be used to ask questions about a brand.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
title-titlecreated_at-created_at
airopsmcp_list_reportsList saved analytics reports for a specific Brand Kit.Read-onlyList Reports
List saved analytics reports for a specific Brand Kit.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
includesarray- Related resources to include in the response, as a list of relationship names.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
name-namecreated_at-created_atupdated_at-updated_at
airopsmcp_list_topicsList topics for a specific Brand Kit.Read-onlyList Topics
List topics for a specific Brand Kit. Topics are the categories of questions that can be asked about a Brand Kit.
Inputs
brand_kit_idintegerrequired- The ID of the Brand Kit
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
name-namecreated_at-created_at
airopsmcp_list_workspacesList all workspaces the authenticated user has access to.Read-onlyList Workspaces
List all workspaces the authenticated user has access to. Workspaces are the top-level container for all resources in the AirOps platform.
Inputs
fieldsarray- Specify which fields to return in the response, as a list of field names.
filtersarray- Filter results by column values. Each filter requires column_id, operator, and value.
pageinteger- Page numberdefault
1 per_pageinteger- Items per pagedefault
25 sortstring- Sort field. Prefix with - for descending.one of
name-namecreated_at-created_at
airopsmcp_query_analyticsQuery analytics data for a Brand Kit with flexible metrics, dimensions, and filters.Read-onlyQuery Analytics
Query analytics data for a Brand Kit with flexible metrics, dimensions, and filters.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to query analytics for
metricsarrayrequired- Metrics to calculate and display (e.g., citation_rate, mention_rate, share_of_voice).
brand_mentionedstring- Filter by prompt type. Options: category (generic prompts - recommended for accurate visibility metrics), brand (prompts mentioning the brand). Defaults to category if not specifiedone of
brandcategory countriesarray- Filter by country codes (ISO 3166-1 alpha-2)
dimensionsarray- Dimensions to group by (max 3).
end_datestring- End date (YYYY-MM-DD). Defaults to yesterday. Must be before today because today's data may still be processing and is incomplete — yesterday is used to ensure robust, complete data. Leave blank unless a specific date is requested.
grainstring- Time granularity for aggregation. Default: totalone of
dailyweeklymonthlytotal limitinteger- Maximum rows to return (1-1000). Default: 100
order_bystring- Custom sort order (e.g., "citation_count DESC")
personasarray- Filter by persona IDs
providersarray- Filter by AI providers
start_datestring- Start date (YYYY-MM-DD). Default: 7 days ago
tagsarray- Filter by tag IDs. Returns data only for prompts tagged with any of the given tags.
themesarray- Filter sentiment data by theme IDs. Only applies to sentiment_score metric.
topicsarray- Filter by topic IDs
airopsmcp_read_gridRead rows from a grid table.Read-onlyRead Grid
Read rows from a grid table. Returns rows as objects with column titles as keys.
Inputs
grid_idintegerrequired- The ID of the grid to read from.
grid_table_idintegerrequired- The ID of the grid table (sheet) to read.
column_idsarray- Optional list of column IDs to include. If omitted, all columns are returned.
filtersarray- Optional filters to apply.
limitinteger- Number of rows to return (1-100, default 50).
offsetinteger- Row offset for pagination (default: 0). Use with limit to page through results.
truncateinteger- Maximum number of characters per cell value. 0 means no truncation (default).
airopsmcp_read_grid_cellRead the full value of a single grid cell.Read-onlyRead Grid Cell
Read the full value of a single grid cell. read_grid() truncates cell values; use this tool when you need the complete content of one cell (e.g. a full article, brief, or HTML payload). Identify the cell via the row __id and column id returned by read_grid().
Inputs
column_idintegerrequired- The grid column ID (from the columns array returned by read_grid).
grid_idintegerrequired- The ID of the grid.
grid_table_idintegerrequired- The ID of the grid table (sheet).
row_idintegerrequired- The row ID (the __id field returned by read_grid).
airopsmcp_search_knowledge_baseSearch a Knowledge Base for relevant content using semantic similarity.Read-onlySearch Knowledge Base
Search a Knowledge Base for relevant content using semantic similarity. Use list_knowledge_bases() first to find available Knowledge Bases and their IDs.
Inputs
knowledge_base_idintegerrequired- The ID of the Knowledge Base to search.
querystringrequired- The search query. Use natural language to describe what you are looking for.
top_kinteger- Number of results to return (1-20, default 5).
airopsmcp_suggest_brand_kit_editsSuggest edits to a Brand Kit's fields without applying them.Read-onlySuggest Brand Kit Edits
Suggest edits to a Brand Kit's fields without applying them. Returns a comparison of current vs suggested values for user review.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
suggestionsobjectrequired- Field name to suggested value pairs. Valid fields depend on entity_type. Use arrays for multi_select fields (e.g. product_line_ids).
entity_typestring- Which entity to suggest edits for. Defaults to brand_kit.one of
brand_kitaudiencecontent_typeproduct_lineregionwriting_rulecompetitorcontent_samplecustom_variablelogo_variantlogo_sizefonttype_sizepalette idinteger- Record ID of the existing record to update. Omit to suggest creating a new record.
titlestring- Optional heading to display in the review UI
airopsmcp_accept_opportunityAccept pending opportunities for a campaign and add them to the campaign action grid.WriteAccept Opportunity
Accept pending opportunities for a campaign and add them to the campaign action grid. For v2 campaigns, pass opportunity_ids; acceptance uses the original rationale and every opportunity context. Before calling this tool, summarize the opportunities or opportunity items that will be accepted and get explicit user confirmation.
Inputs
play_idintegerrequired- Campaign ID.
opportunity_idsarray- Opportunity IDs to accept. Required for v2; for v1 this accepts every pending item in each opportunity.
opportunity_item_idsarray- V1-only opportunity item IDs to accept. Use this for item-level acceptance.
airopsmcp_add_aeo_regionAdd a region (ISO alpha-2 country code) to a Brand Kit's configured AEO regions.WriteAdd Aeo Region
Add a region (ISO alpha-2 country code) to a Brand Kit's configured AEO regions. Why this tool exists: AEO prompts and prompt-assignments can only reference regions that are configured on the Brand Kit. When `create_aeo_prompt` or `update_aeo_prompt_assignments` returns a `validation_error` mentioning that the country code is "not configured on this brand kit", call this tool to add the missing region first, then retry. Behavior: - Re-adding an already-configured region is a no-op (idempotent) and returns success. - The country code must be a valid ISO 3166-1 alpha-2 code supported by the platform (e.g. US, GB, DE, FR, JP, BR, IN, ...). - Optional `add_to_all_prompts` (default `false`): when `true`, the new region is also assigned to every existing live prompt in the Brand Kit. This may incur additional answer credits/month; if the workspace's estimated answers limit would be exceeded, the call is rejected with a `validation_error` containing `estimated_answers` and `max_answers` in `details`. Defaults to `false` so the agent does not silently incur credits. IMPORTANT: Always show the user the region you plan to add (and whether `add_to_all_prompts` is on) and get explicit confirmation before calling. Adding a region cannot be undone via this tool.
- Idempotent
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to add the region to.
country_codestringrequired- ISO 3166-1 alpha-2 country code (e.g. "US", "GB", "JP"). Must be one of the platform-supported codes.
add_to_all_promptsboolean- If true, also assigns this region to every existing live prompt in the Brand Kit (subject to the workspace answers limit). Defaults to false.
airopsmcp_add_grid_columnAdd a new column to a grid table.WriteAdd Grid Column
Add a new column to a grid table. Use this before write_grid when you need to write to a column that does not exist yet.
Inputs
data_typestringrequired- The data type for the column.one of
textnumberdatetimemarkdownurlhtmlimage_from_urljsonsingle_select grid_idintegerrequired- The ID of the grid.
grid_table_idintegerrequired- The ID of the grid table (sheet).
titlestringrequired- The column title.
positioninteger- Optional column position. If omitted, appended at the end.
airopsmcp_create_aeo_personaCreate a new AEO persona on a Brand Kit.WriteCreate Aeo Persona
Create a new AEO persona on a Brand Kit. Personas represent the characters used to simulate AI-search queries when measuring AI visibility, citations, and mentions. Behavior: - `title` must be unique within the Brand Kit (max 200 chars) and `description` is required (max 5000 chars). - Optional `add_to_all_prompts` (default `false`): when `true`, the new persona is also assigned to every existing live prompt in the Brand Kit. This may incur additional answer credits/month; if the workspace's estimated answers limit would be exceeded, the call is rejected with a `validation_error` containing `estimated_answers` and `max_answers` in `details`. Defaults to `false` so the agent does not silently incur credits. Writing guidance: avoid including specific brand names in the persona's title or description — the LLM may then mention the brand in its answer, which the analyzer will count as a mention and skew the data. IMPORTANT: Always show the user the persona you plan to create (title, description, and whether `add_to_all_prompts` is on) and get explicit confirmation before calling. You can verify the persona was created by calling `list_personas` sorted by `created_at` descending.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to add the persona to.
descriptionstringrequired- A description of the persona's perspective and concerns (max 5000 characters). Avoid including specific brand names.
titlestringrequired- The persona title (max 200 characters). Must be unique within the Brand Kit. Example: "Enterprise CTO".
add_to_all_promptsboolean- If true, also assigns this persona to every existing live prompt in the Brand Kit (subject to the workspace answers limit). Defaults to false.
airopsmcp_create_aeo_promptCreate a new AEO prompt for a Brand Kit.WriteCreate Aeo Prompt
Create a new AEO prompt for a Brand Kit. Prompts are questions that can be asked about a brand to AI search engines, used to track AI visibility and citations.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to add the prompt to
textstringrequired- The prompt text (max 512 characters). Must be unique within the Brand Kit.
topic_idintegerrequired- Topic ID to associate with the prompt. Must belong to the same Brand Kit. Use `list_topics` to discover available topics and either suggest one or ask the user to choose.
countriesarray- ISO alpha-2 country codes to assign (e.g., ["US", "GB"]). Must be configured on the Brand Kit.
persona_idsarray- Persona IDs to assign. Must belong to the same Brand Kit. Use `list_personas` to discover available personas.
platformsarray- Platforms to assign. Valid values: chat_gpt, gemini, perplexity, google_ai_mode, google_ai_overview.
airopsmcp_create_aeo_tagCreate a new AEO tag on a Brand Kit.WriteCreate Aeo Tag
Create a new AEO tag on a Brand Kit. Tags are user-defined labels that can be applied to prompts via `bulk_update_aeo_prompt_tags`. Behavior: - `name` must be unique within the Brand Kit (case-insensitive). The model enforces this via a unique index on (brand_kit_id, lower(name)). - `color` is optional. If omitted, a color is auto-assigned from the platform palette. Valid colors: light_grey, grey, green, teal, blue, purple, lilac, pink, red, coral, orange. - This tool does NOT apply the new tag to any prompts. Use `bulk_update_aeo_prompt_tags` with `operation: 'add'` to assign it afterward. IMPORTANT: Always show the user the tag you plan to create (name and color) and get explicit confirmation before calling. You can verify the tag was created by calling `list_tags` filtered by name.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to add the tag to.
namestringrequired- The tag name. Must be unique within the Brand Kit (case-insensitive).
colorstring- Optional. Named color from the platform palette. If omitted, a color is auto-assigned.one of
light_greygreygreentealbluepurplelilacpinkredcoralorange
airopsmcp_create_brand_kit_direct_uploadInitiate a direct file upload for use with Brand Kit visual tools.WriteCreate Brand Kit Direct Upload
Initiate a direct file upload for use with Brand Kit visual tools.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID this file is intended for
byte_sizeintegerrequired- Size of the file in bytes
checksumstringrequired- Base64-encoded MD5 digest of the file contents
content_typestringrequired- MIME type of the fileone of
image/pngimage/jpegimage/svg+xmlimage/gifimage/webpfont/ttffont/otffont/wofffont/woff2application/vnd.ms-fontobject filenamestringrequired- The filename including extension, e.g. "logo.png" or "brand-font.woff2"
airopsmcp_create_brand_kit_recap_entryRecord a recap entry summarizing the changes you made to a Brand Kit.WriteCreate Brand Kit Recap Entry
Record a recap entry summarizing the changes you made to a Brand Kit. Call this once, near the end of a session that mutated the Brand Kit draft — not for every edit. Do not call this tool if you made no Brand Kit draft mutations this session (for example, you only read the Brand Kit, suggested edits the user rejected, or worked on Playbooks, Campaigns, or Insights). Never create a recap that says nothing changed. Put the evidence behind the changes in `body_markdown`: verbatim quotes, source URLs, and pages. Example: create_brand_kit_recap_entry( brand_kit_id: 123, title: "Refreshed tone & voice and added 2 regions", body_markdown: "Made the tone more concise per the latest brand guidelines (https://acme.com/brand). Added US East and US West to support the Q3 launch." )
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
titlestringrequired- One-line summary of what changed (max 200 characters)
body_markdownstring- Markdown detail with the evidence behind the changes, e.g. quotes, source URLs, pages (max 4000 characters)
airopsmcp_create_gridCreate a new empty, general-purpose grid with the given name.WriteCreate Grid
Create a new empty, general-purpose grid with the given name. The grid is created with a single empty sheet (zero rows, zero columns).
Inputs
namestringrequired- The name for the new grid.
workspace_idinteger- Optional workspace ID. Defaults to the user's only workspace when unambiguous.
airopsmcp_create_grid_sheetCreate a new sheet (grid table) within an existing grid.WriteCreate Grid Sheet
Create a new sheet (grid table) within an existing grid. The sheet is created with zero rows and zero columns.
Inputs
grid_idintegerrequired- The ID of the grid to add the sheet to.
namestringrequired- The name for the new sheet.
airopsmcp_create_opportunityCreate a pending opportunity for a campaign.WriteCreate Opportunity
Create a pending opportunity for a campaign. Before calling this tool, summarize the proposed opportunity name, description, and target resources for the user, then get explicit confirmation. In Quill or other OAuth MCP clients, provide play_id from list_campaigns or get_campaign. In playbook sessions, play_id is optional and is derived from the current session.
Inputs
descriptionstringrequired- Opportunity description.
namestringrequired- Opportunity name.
contextsarray- Ordered supporting resources for v2 campaigns. Rejected for v1 campaigns.
itemsarray- Required for v1 campaigns and rejected for v2 campaigns.
play_idinteger- Campaign ID. Required outside playbook sessions.
target_page_idinteger- Required for v2 page-refresh campaigns and rejected otherwise.
airopsmcp_create_pageAdd a web page to a Brand Kit's AEO pages.WriteCreate Page
Add a web page to a Brand Kit's AEO pages. The URL is normalized before the page is created, and the page is associated with the Brand Kit's configured AEO domain. The URL must be unique within the Brand Kit. IMPORTANT: Always show the user the URL and Brand Kit you plan to use and get explicit confirmation before calling this tool. You can verify the page was created by calling `list_pages` filtered by URL.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to add the page to.
urlstringrequired- The web page URL. Must be unique within the Brand Kit.
airopsmcp_create_topicCreate a new AEO topic on a Brand Kit.WriteCreate Topic
Create a new AEO topic on a Brand Kit. Topics are categories used to group AEO prompts. Behavior: - `name` must be unique within the Brand Kit. - `color` is optional. If omitted, a color is auto-assigned from the platform palette. Valid colors: light_grey, grey, green, teal, blue, purple, lilac, pink, red, coral, orange. - This tool does NOT create or assign prompts. Use `create_aeo_prompt` with the returned topic ID to add prompts to the topic. IMPORTANT: Always show the user the topic you plan to create (name and color) and get explicit confirmation before calling. You can verify the topic was created by calling `list_topics` filtered by name.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to add the topic to.
namestringrequired- The topic name. Must be unique within the Brand Kit.
colorstring- Optional. Named color from the platform palette. If omitted, a color is auto-assigned.one of
light_greygreygreentealbluepurplelilacpinkredcoralorange
airopsmcp_knowledge_base_add_fileStep 2 of the two-step file ingestion flow for a Knowledge Base.WriteAdd file to Knowledge Base
Step 2 of the two-step file ingestion flow for a Knowledge Base. Consumes a `signed_id` returned by `knowledge_base_create_direct_upload` (step 1) plus the file's metadata, and registers the document with the Knowledge Base. Returns immediately with the new `document_id` in `pending` status — poll `knowledge_base_get_status` to monitor indexing. Workflow: 1. Call `knowledge_base_create_direct_upload` with the file metadata to get back a `signed_id` and a presigned `upload_url`. 2. PUT the file bytes to the `upload_url` with the provided headers. 3. Call this tool with the `signed_id`, the desired `name` (used as the document's display name), the `document_type` MIME (must match the supported types), and an optional `metadata` hash. The `metadata` hash, if provided, is a single-level key/value object. It **replaces** any existing metadata on the document (no merge) and is filterable at search time via `search_knowledge_base`.
Inputs
document_typestringrequired- MIME type to index the document as. Typically matches the `content_type` passed to `knowledge_base_create_direct_upload`, but may intentionally differ to select a different loader (e.g. registering a `text/csv` blob as `text/plain` to bypass CSV-specific parsing).one of
application/pdfapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentapplication/vnd.openxmlformats-officedocument.presentationml.presentationapplication/vnd.ms-powerpointapplication/rtfapplication/epub+ziptext/plaintext/markdowntext/csvtext/htmlmessage/rfc822image/pngimage/jpegimage/gifimage/webpimage/svg+xml knowledge_base_idintegerrequired- The ID of the Knowledge Base to register the document with.
namestringrequired- Display name for the document.
signed_idstringrequired- The `signed_id` returned by `knowledge_base_create_direct_upload`.
metadataobject- Optional single-level key/value hash to attach to the document. Filterable via `search_knowledge_base`.
airopsmcp_knowledge_base_add_urlsBulk-ingest one or more web pages into a Knowledge Base.WriteAdd URLs to Knowledge Base
Bulk-ingest one or more web pages into a Knowledge Base. Each URL becomes a separate document that fetches and indexes asynchronously. The call returns immediately with the new document IDs in `pending` state — poll `knowledge_base_get_status` to check progress. URLs must be absolute and include the `http://` or `https://` scheme (e.g. `https://example.com/page`). No documents are created if any URL fails validation. The `metadata` hash, if provided, is applied identically to every document in the batch (single-level keys only); it replaces (not merges) any existing metadata and is filterable at search time.
Inputs
knowledge_base_idintegerrequired- The ID of the Knowledge Base to add URLs to.
urlsarrayrequired- One or more absolute URLs starting with `http://` or `https://` (e.g. `https://example.com/page`). Each URL becomes its own document. Bare hostnames without a scheme are rejected.
metadataobject- Optional single-level hash applied identically to every new document. Replaces existing metadata (no merge). Filterable via search_knowledge_base.
airopsmcp_knowledge_base_create_direct_uploadInitiate a direct file upload for a Knowledge Base.WriteCreate Knowledge Base file upload URL
Initiate a direct file upload for a Knowledge Base. Returns a presigned S3 upload URL, the required upload headers, and a `signed_id` you'll use with `knowledge_base_add_file` to register the document. This is the first call in the two-step file ingestion flow — large files (PDFs, DOCX, MD, HTML, etc.) don't fit through the MCP transport, so the file bytes go directly from your client to S3. Workflow: 1. Call this tool with the file metadata (filename, content_type, byte_size, checksum). The checksum must be the Base64-encoded MD5 digest of the file contents. 2. PUT the raw file bytes to the returned `upload_url` with **all** the provided `upload_headers`. No additional authentication is needed — the URL is a time-limited presigned URL. 3. Pass the returned `signed_id` to `knowledge_base_add_file` to register the document. Only after step 3 is the file searchable. Example: > knowledge_base_create_direct_upload(knowledge_base_id: 1, filename: "report.pdf", content_type: "application/pdf", byte_size: 1234567, checksum: "...") # → { signed_id: "abc...", upload_url: "https://s3...", upload_headers: { ... } } > knowledge_base_add_file(knowledge_base_id: 1, signed_id: "abc...", name: "Q4 Report", document_type: "application/pdf") # → { document_ids: [42], status: "pending" } Maximum file size is 256 MB.
Inputs
byte_sizeintegerrequired- Size of the file in bytes. Maximum: 256 MB.
checksumstringrequired- Base64-encoded MD5 digest of the file contents.
content_typestringrequired- MIME type of the file.one of
application/pdfapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentapplication/vnd.openxmlformats-officedocument.presentationml.presentationapplication/vnd.ms-powerpointapplication/rtfapplication/epub+ziptext/plaintext/markdowntext/csvtext/htmlmessage/rfc822image/pngimage/jpegimage/gifimage/webpimage/svg+xml filenamestringrequired- The filename including extension, e.g. "report.pdf" or "transcript.md".
knowledge_base_idintegerrequired- The ID of the Knowledge Base the file will be ingested into.
airopsmcp_knowledge_base_manageCreate or update a Knowledge Base.WriteManage Knowledge Base
Create or update a Knowledge Base. Omit `knowledge_base_id` to create a new one; pass it to update an existing one. On create, `name` is required; pass `workspace_id` if you have access to more than one workspace. On update, only the fields you pass change.
Inputs
knowledge_base_idinteger- Omit to create a new Knowledge Base; pass it to update an existing one.
namestring- Display name. Required on create; optional on update (omit to leave unchanged).
workspace_idinteger- Workspace ID for the new Knowledge Base. Required on create when the caller has access to multiple workspaces; inferred otherwise. Ignored on update (workspace is fixed by the existing Knowledge Base).
airopsmcp_knowledge_base_update_document_metadataReplace a document's user-facing metadata in full.WriteUpdate Knowledge Base Document Metadata
Replace a document's user-facing metadata in full. Accepts a single-level hash that **replaces** (not merges) the existing user-facing metadata. To remove a key, pass the full new hash that omits it. To clear all metadata, pass `{}`. Filterable at search time via `search_knowledge_base`. Metadata-only — does not re-embed the document. Loader-derived metadata (scraped page metadata for URLs, chunker metadata for files) is not touched. Search filters may take a few seconds to reflect the new values. The document must be fully indexed (`status: ready`) before calling this tool. If indexing isn't complete, the tool returns a validation error.
- Idempotent
Inputs
document_idintegerrequired- The ID of the document whose metadata to replace.
knowledge_base_idintegerrequired- The ID of the Knowledge Base the document belongs to.
metadataobjectrequired- Single-level key/value hash. Replaces the existing user-facing metadata in full. Values must be a string, number, or boolean (no nested objects / arrays). String values are capped at 512 characters.
airopsmcp_manage_brand_kit_visual_use_caseCreate or update a Visual Use Case for a Brand Kit.WriteManage Brand Kit Visual Use Case
Create or update a Visual Use Case for a Brand Kit. A Visual Use Case is a named grouping of visual examples that share a common set of instructions for when and how to apply them (e.g., "Hero sections", "Social posts", "Email headers"). Omit `id` to create a new visual use case; provide `id` to update an existing one. On update, only provided fields are changed. This tool edits the Brand Kit draft version only; it does not change the active (live) version. IMPORTANT: Always show the user exactly which fields will be created or changed and ask for confirmation before calling this tool.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
idinteger- Visual use case ID (omit to create new)
instructionsstring- Free-form instructions for when and how to apply the visual examples grouped under this visual use case. Pass null to clear.
namestring- Name of the visual use case, e.g. "Hero sections" (required on create)
airopsmcp_reject_opportunityReject pending opportunities for a campaign.WriteReject Opportunity
Reject pending opportunities for a campaign. For v2 campaigns, pass opportunity_ids; opportunity item selection and rejection reasons are v1-only. Before calling this tool, summarize the opportunities or opportunity items that will be rejected and get explicit user confirmation.
Inputs
play_idintegerrequired- Campaign ID.
opportunity_idsarray- Opportunity IDs to reject. Required for v2; for v1 this rejects every pending item in each opportunity.
opportunity_item_idsarray- V1-only opportunity item IDs to reject. Use this for item-level rejection.
rejection_reasonstring- V1-only optional reason to store on rejected opportunity items.
airopsmcp_run_grid_rowsTrigger execution of one or more grid rows.WriteRun Grid Rows
Trigger execution of one or more grid rows. This runs all workflow (app execution) columns for each specified row in dependency order.
Inputs
grid_idintegerrequired- The ID of the grid containing the rows to execute.
grid_row_idsarrayrequired- IDs of the grid rows to execute (max 50).
grid_table_idintegerrequired- The ID of the grid table (sheet) containing the rows.
airopsmcp_track_aeo_page_content_updateTrack a page content update (publish/refresh) to correlate future analytics with content changes.WriteTrack Aeo Page Content Update
Track a page content update (publish/refresh) to correlate future analytics with content changes.
Inputs
typestringrequired- The type of content update to trackone of
page_publishedpage_refreshed urlstringrequired- The page URL to track (max 512 characters). The URL must belong to a brand_url or domain configured in one of the workspace's Brand Kits (use get_insights_settings to see domains). For example, if the Brand Kit domain is "example.com", URLs like "https://example.com/blog/post" will match.
workspace_idintegerrequired- The workspace ID to create the content update in
airopsmcp_update_aeo_tagUpdate an existing AEO tag's name and/or color on a Brand Kit.WriteUpdate Aeo Tag
Update an existing AEO tag's name and/or color on a Brand Kit. Behavior: - At least one of `name` or `color` must be provided. - If `name` is provided, it must remain unique within the Brand Kit (case-insensitive). - Valid colors: light_grey, grey, green, teal, blue, purple, lilac, pink, red, coral, orange. - Existing taggings on prompts are preserved — only the tag's own attributes change. IMPORTANT: Always show the user the tag (current name) and the change you plan to apply, and get explicit confirmation before calling. You can verify the change by calling `list_tags`.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID that owns the tag.
tag_idintegerrequired- The tag ID to update.
colorstring- Optional. New color from the platform palette.one of
light_greygreygreentealbluepurplelilacpinkredcoralorange namestring- Optional. New name for the tag. Must be unique within the Brand Kit (case-insensitive).
airopsmcp_update_topicUpdate an existing AEO topic's name and/or color on a Brand Kit.WriteUpdate Topic
Update an existing AEO topic's name and/or color on a Brand Kit. Behavior: - At least one of `name` or `color` must be provided. - If `name` is provided, it must remain unique within the Brand Kit. - Valid colors: light_grey, grey, green, teal, blue, purple, lilac, pink, red, coral, orange. - Existing prompt assignments are preserved. This tool cannot move a topic to another Brand Kit. IMPORTANT: Always show the user the topic (current name) and the change you plan to apply, and get explicit confirmation before calling. You can verify the change by calling `list_topics`.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID that owns the topic.
topic_idintegerrequired- The topic ID to update.
colorstring- Optional. New color from the platform palette.one of
light_greygreygreentealbluepurplelilacpinkredcoralorange namestring- Optional. New name for the topic. Must be unique within the Brand Kit.
airopsmcp_write_gridCreate or update rows in a grid table.WriteWrite Grid
Create or update rows in a grid table. When mode is 'create', rows are added as new rows with column titles as keys.
Inputs
grid_idintegerrequired- The ID of the grid to write to.
grid_table_idintegerrequired- The ID of the grid table (sheet) to write to.
modestringrequired- 'create' to add new rows, 'update' to modify existing rows (requires __id in each row).one of
createupdate rowsarrayrequired- Array of row objects. Keys are column titles, values are cell values. For update mode, include __id with the row ID.
airopsmcp_bulk_update_aeo_prompt_topicsReassign a batch of AEO prompts to an existing topic in one Brand Kit.DestructiveBulk Update AEO Prompt Topics
Reassign a batch of AEO prompts to an existing topic in one Brand Kit. Specifying the destination topic: - Pass `topic_id` (use `list_topics` to discover them). - The topic must already exist on the Brand Kit. This tool does NOT create topics. To create a new topic first, use `create_topic`, then pass its id here. Specifying prompts: - Pass `prompt_ids` (use `list_aeo_prompts` filtered by `topic_id` to find prompts currently under a source topic). - IDs that are missing, discarded, or not in the Brand Kit are skipped; only matching prompts are updated. IMPORTANT: Always show the user the prompts and destination topic you plan to operate on, and get explicit confirmation before calling.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID that owns the prompts and topic.
prompt_idsarrayrequired- AEO prompt (question) IDs to reassign. Unknown or discarded IDs are skipped.
topic_idintegerrequired- Destination topic ID. Must exist on the Brand Kit. Use `list_topics` to discover available topic_ids. Does NOT create topics — use `create_topic` first if needed.
airopsmcp_commit_aeo_prompt_assignmentsCommit the current prompt-assignment draft for a Brand Kit to live.DestructiveCommit Aeo Prompt Assignments
Commit the current prompt-assignment draft for a Brand Kit to live. Replaces all live country, persona, and platform assignments for the brand kit's prompts with the draft data. The workspace's estimated answers limit is enforced. If committing would push the workspace over its quota, the call is rejected with an `AnswersLimitExceeded` validation error containing `estimated_answers` and `max_answers` in `details`. Recover by calling `update_aeo_prompt_assignments` to adjust, or `discard_aeo_prompt_assignments` to abandon. IMPORTANT: - This action affects live data and is not undoable except by manually editing assignments again. Always get explicit user confirmation before calling. - If the human user has unsaved UI edits in the same draft, those will also be committed. Surface this to the user before proceeding. - After a successful commit, a fresh empty draft is automatically re-mirrored from the new live data. You may immediately stage further edits with `update_aeo_prompt_assignments`. - This tool does NOT return the new live estimated-answers/month. If you or the user need the post-commit estimates, call `get_aeo_prompt_assignments_status`. Do NOT reuse the pre-commit `draft_estimated_answers` from `update_aeo_prompt_assignments` and do NOT compute the estimate yourself — repetition-times, persona/country/platform interactions, and concurrent edits can all shift the result.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID whose draft should be committed.
airopsmcp_delete_aeo_promptDelete an AEO prompt from a Brand Kit.DestructiveDelete AEO Prompt
Delete an AEO prompt from a Brand Kit. Use `list_aeo_prompts` to find the prompt ID and verify the prompt text before deletion. IMPORTANT: This action is destructive. Always show the user the exact prompt text and get explicit confirmation before calling this tool.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID that owns the prompt.
prompt_idintegerrequired- The ID of the prompt to remove.
airopsmcp_delete_aeo_tagDelete an AEO tag from a Brand Kit.DestructiveDelete Aeo Tag
Delete an AEO tag from a Brand Kit. Behavior: - This is a HARD delete. The tag is removed from the Brand Kit entirely. - All taggings on prompts that referenced this tag are also deleted (cascade via `Aeo::Tag has_many :taggings, dependent: :destroy`). Every prompt that had this tag will lose it. - The response includes `tagged_prompts_count`: the number of prompts that lost the tag. Use this to communicate the blast radius back to the user. IMPORTANT: This action is destructive and cannot be undone via this tool. Always show the user the tag name AND `tagged_prompts_count` (look it up first via `list_tags` + `list_aeo_prompts` if needed) and get explicit confirmation before calling.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID that owns the tag.
tag_idintegerrequired- The tag ID to delete.
airopsmcp_delete_brand_kit_writing_rulesDelete one or more writing rules from a Brand Kit.DestructiveDelete Brand Kit Writing Rules
Delete one or more writing rules from a Brand Kit. This edits the Brand Kit draft version only; it does not change the active (live) version. A failure deleting one rule does not block or roll back the others: the response reports which rules were deleted and which could not be. IMPORTANT: Always show the user exactly which writing rules will be deleted and ask for confirmation before calling this tool.
- Idempotent
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
writing_rule_idsarrayrequired- The IDs of the writing rules to delete (up to 10)
airopsmcp_delete_topicDelete an AEO topic from a Brand Kit.DestructiveDelete Topic
Delete an AEO topic from a Brand Kit. Behavior: - This is a HARD delete. The topic is removed from the Brand Kit entirely. - Deletion is blocked when the topic has associated prompts. Use `list_aeo_prompts` filtered by `topic_id` to inspect prompts before deleting. - Candidate questions and question recommendations for the topic are deleted by model associations when the topic is deleted. IMPORTANT: This action is destructive and cannot be undone via this tool. Always show the user the topic name and associated prompt count, then get explicit confirmation before calling.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID that owns the topic.
topic_idintegerrequired- The topic ID to delete.
airopsmcp_discard_aeo_prompt_assignmentsDiscard the current prompt-assignment draft for a Brand Kit.DestructiveDiscard Aeo Prompt Assignments
Discard the current prompt-assignment draft for a Brand Kit. Throws away ALL uncommitted edits — both your own and any unsaved edits the human user made in the UI — and re-mirrors a fresh empty draft from live. Live assignments are never touched. IMPORTANT: - This action is destructive and unrecoverable. Pending UI edits the user has not committed will be lost. - Always get explicit user confirmation before calling. - Calling discard when no draft exists is a no-op; a fresh empty draft is still created so further `update_aeo_prompt_assignments` calls work without setup.
- Idempotent
Inputs
brand_kit_idintegerrequired- The Brand Kit ID whose draft should be discarded.
airopsmcp_knowledge_base_deletePermanently delete a Knowledge Base and ALL of its documents.DestructiveDelete Knowledge Base
Permanently delete a Knowledge Base and ALL of its documents. This cascades through every document in the KB and drops the underlying vectors. This action cannot be undone. IMPORTANT: Always warn the user that deletion is permanent and irreversible, name the Knowledge Base being deleted, and ask for explicit confirmation before calling this tool.
- Idempotent
Inputs
knowledge_base_idintegerrequired- The ID of the Knowledge Base to delete.
airopsmcp_knowledge_base_delete_documentPermanently delete a single document from a Knowledge Base.DestructiveDelete Knowledge Base Document
Permanently delete a single document from a Knowledge Base. This action cannot be undone. IMPORTANT: Always warn the user that deletion is permanent and ask for explicit confirmation before calling this tool.
- Idempotent
Inputs
document_idintegerrequired- The ID of the document to delete.
knowledge_base_idintegerrequired- The ID of the Knowledge Base the document belongs to.
airopsmcp_manage_brand_kit_audienceCreate or update an audience for a Brand Kit draft.DestructiveManage Brand Kit Audience
Create or update an audience for a Brand Kit draft. Omit `id` to create a new audience; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
descriptionstring- Audience description
idinteger- Audience ID (omit to create new)
namestring- Audience name (required on create)
airopsmcp_manage_brand_kit_competitorCreate or update a competitor for a Brand Kit.DestructiveManage Brand Kit Competitor
Create or update a competitor for a Brand Kit. Omit `id` to create a new competitor; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
domainstring- Competitor domain (e.g. "example.com")
idinteger- Competitor ID (omit to create new)
namestring- Competitor name (required on create)
product_line_idsarray- Product line IDs to associate (must belong to this brand kit, at least one required)
airopsmcp_manage_brand_kit_content_sampleCreate or update a content sample for a Brand Kit.DestructiveManage Brand Kit Content Sample
Create or update a content sample for a Brand Kit. Omit `id` to create a new content sample; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
audience_idsarray- Audience IDs to associate (must belong to this brand kit). Pass [] to clear.
contentstring- Plain text content for the sample. On create, provide either content or url (not both).
content_type_idinteger- Content type ID (required on create, must belong to this brand kit)
idinteger- Content sample ID (omit to create new)
region_idsarray- Region IDs to associate (must belong to this brand kit). Pass [] to clear.
urlstring- URL of the content sample. On create, provide either url or content (not both).
airopsmcp_manage_brand_kit_content_typeCreate or update a content type for a Brand Kit.DestructiveManage Brand Kit Content Type
Create or update a content type for a Brand Kit. Omit `id` to create a new content type; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
cta_textstring- Call-to-action text
cta_urlstring- Call-to-action URL
header_casestring- Header case styleone of
title_casesentence_casecustom header_case_custom_valuestring- Custom header case rules (when header_case is custom)
idinteger- Content type ID (omit to create new)
namestring- Content type name (required on create)
sample_urlstring- URL of a content sample (only used on create)
template_outlinestring- Template outline
airopsmcp_manage_brand_kit_custom_variableBefore creating a custom variable, you MUST analyze the user's intent and suggest the appropriate Brand Kit dimension instead.DestructiveManage Brand Kit Custom Variable
Before creating a custom variable, you MUST analyze the user's intent and suggest the appropriate Brand Kit dimension instead.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
idinteger- Custom variable ID (omit to create new)
namestring- Custom variable name (required on create)
valuestring- Custom variable value (required on create, editable on update)
airopsmcp_manage_brand_kit_fontCreate or update a font for a Brand Kit.DestructiveManage Brand Kit Font
Create or update a font for a Brand Kit. Omit `id` to create a new font; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
file_urlstring- Publicly accessible URL to a font file (TTF, OTF, WOFF, WOFF2, or EOT). Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null or empty to leave the existing file unchanged.
google_font_linkstring- Google Fonts URL for this font (e.g. https://fonts.google.com/specimen/Inter). Pass null or empty string to clear.
idinteger- Font ID (omit to create new)
namestring- Font name, e.g. "Inter" or "Brand Heading Font" (required on create)
signed_idstring- Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.
usage_instructionsstring- Instructions for agents on when and how to use this font. Pass null or empty string to clear.
airopsmcp_manage_brand_kit_logo_sizeCreate or update a logo size for a Brand Kit.DestructiveManage Brand Kit Logo Size
Create or update a logo size for a Brand Kit. Omit `id` to create a new logo size; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
heightinteger- Height in pixels. Pass null to clear.
idinteger- Logo size ID (omit to create new)
namestring- Logo size name, e.g. "Web Banner" or "Social Media Square" (required on create)
usage_instructionsstring- Instructions for agents on when and how to use this logo size. Pass null to clear.
widthinteger- Width in pixels. Pass null to clear.
airopsmcp_manage_brand_kit_logo_variantCreate or update a logo variant for a Brand Kit.DestructiveManage Brand Kit Logo Variant
Create or update a logo variant for a Brand Kit. Omit `id` to create a new logo variant; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
background_colorstring- Background color as a hex value (e.g. #ffffff). Pass null to clear.
file_urlstring- Publicly accessible URL to a PNG or SVG image. Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null to leave the existing file unchanged.
idinteger- Logo variant ID (omit to create new)
namestring- Logo variant name, e.g. "Primary Logo" or "Dark Background Logo" (required on create)
signed_idstring- Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.
usage_instructionsstring- Instructions for agents on when and how to use this logo, e.g. "Use on dark backgrounds only". Pass null to clear.
airopsmcp_manage_brand_kit_paletteCreate or update a color palette for a Brand Kit.DestructiveManage Brand Kit Palette
Create or update a color palette for a Brand Kit. Omit `id` to create a new palette; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
idinteger- Palette ID (omit to create new)
namestring- The palette name, e.g. "Primary" (required on create)
airopsmcp_manage_brand_kit_palette_colorCreate or update a color within a Brand Kit palette.DestructiveManage Brand Kit Palette Color
Create or update a color within a Brand Kit palette. Omit `id` to create a new color; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
idinteger- Color ID (omit to create new)
namestring- Color name, e.g. "Brand Blue" (required on create)
palette_idinteger- The palette ID (required on create)
usage_instructionsstring- Instructions for agents on when and how to use this color
valuestring- Hex color value, e.g. "#0055ff" (required on create)
airopsmcp_manage_brand_kit_product_lineCreate or update a product line for a Brand Kit.DestructiveManage Brand Kit Product Line
Create or update a product line for a Brand Kit. Omit `id` to create a new product line; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
detailsstring- Product line details
idinteger- Product line ID (omit to create new)
ideal_customer_profilestring- Ideal customer profile
namestring- Product line name (required on create)
positioningstring- Product positioning
urlstring- Product line URL
airopsmcp_manage_brand_kit_regionCreate or update a region for a Brand Kit.DestructiveManage Brand Kit Region
Create or update a region for a Brand Kit. Omit `id` to create a new region; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
descriptionstring- Region description
icon_namestring- Flag icon name (e.g. flag-us, flag-gb). Pass empty string or null to clear.one of
flag-adflag-aeflag-afflag-agflag-aiflag-alflag-amflag-aoflag-arflag-asflag-atflag-auflag-awflag-azflag-baflag-bbflag-bdflag-beflag-bfflag-bgflag-bhflag-biflag-bjflag-bnflag-boflag-brflag-bsflag-btflag-bwflag-byflag-bzflag-caflag-cdflag-cfflag-cgflag-chflag-ciflag-ckflag-clflag-cmflag-cnflag-coflag-crflag-cuflag-cvflag-cwflag-cyflag-czflag-deflag-djflag-dkflag-dmflag-doflag-dzflag-ecflag-eeflag-egflag-enflag-erflag-esflag-etflag-euflag-fiflag-fjflag-fkflag-fmflag-foflag-frflag-gaflag-gbflag-gdflag-geflag-ggflag-ghflag-giflag-glflag-gmflag-gnflag-gqflag-grflag-gtflag-guflag-gwflag-gyflag-hkflag-hnflag-hrflag-htflag-huflag-idflag-ieflag-ilflag-imflag-inflag-ioflag-iqflag-irflag-isflag-itflag-jeflag-jmflag-joflag-jpflag-keflag-kgflag-khflag-kiflag-kmflag-kpflag-krflag-kwflag-kyflag-kzflag-laflag-lbflag-lcflag-liflag-lkflag-lrflag-lsflag-ltflag-luflag-lvflag-lyflag-maflag-mcflag-mdflag-meflag-mgflag-mhflag-mkflag-mlflag-mmflag-mnflag-moflag-mpflag-mrflag-msflag-mtflag-muflag-mvflag-mwflag-mxflag-myflag-mzflag-naflag-neflag-nfflag-ngflag-niflag-nlflag-noflag-npflag-nrflag-nuflag-nzflag-omflag-paflag-peflag-pfflag-pgflag-phflag-pkflag-plflag-pnflag-prflag-psflag-ptflag-pwflag-pyflag-qaflag-roflag-rsflag-ruflag-rwflag-saflag-sbflag-scflag-sdflag-seflag-sgflag-siflag-skflag-slflag-smflag-snflag-soflag-srflag-ssflag-stflag-svflag-sxflag-syflag-szflag-tcflag-tdflag-tgflag-thflag-tjflag-tkflag-tlflag-tmflag-tnflag-toflag-trflag-ttflag-tvflag-twflag-tzflag-uaflag-ugflag-usflag-uyflag-uzflag-vaflag-vcflag-veflag-vgflag-viflag-vnflag-vuflag-wlflag-wsflag-xkflag-yeflag-zaflag-zmflag-zw idinteger- Region ID (omit to create new)
namestring- Region name (required on create)
airopsmcp_manage_brand_kit_type_sizeCreate or update a type size for a Brand Kit.DestructiveManage Brand Kit Type Size
Create or update a type size for a Brand Kit. Omit `id` to create a new type size; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
font_idinteger- ID of the font this type size belongs to
idinteger- Type size ID (omit to create new)
line_heightnumber- Line height as a decimal multiplier, e.g. 1.5.
namestring- Type size name, e.g. "H1 Display" or "Body Regular" (required on create)
sizeinteger- Font size in pixels.
usage_instructionsstring- Instructions for agents on when and how to use this type size. Pass null or empty string to clear.
weightinteger- Font weight as an integer (100–900), e.g. 400 or 700.
airopsmcp_manage_brand_kit_usage_ruleCreate or update a usage rule for a Brand Kit.DestructiveManage Brand Kit Usage Rule
Create or update a usage rule for a Brand Kit. Omit `id` to create a new usage rule; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
applies_tostring- What this rule applies to. Required on create; ignored on update.one of
logocolortypographyvisual_examples idinteger- Usage rule ID (omit to create new)
namestring- The usage rule text, e.g. "Use only on white backgrounds" (required on create)
airopsmcp_manage_brand_kit_visual_exampleCreate or update a visual example for a Brand Kit's Data Visualization section.DestructiveManage Brand Kit Visual Example
Create or update a visual example for a Brand Kit's Data Visualization section. Omit `id` to create a new visual example; provide `id` to update an existing one...
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
file_urlstring- Publicly accessible URL to a PNG, JPG, SVG, GIF, or WebP image. Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null to leave the existing file unchanged.
idinteger- Visual example ID (omit to create new)
sample_urlstring- Optional URL to a live sample. Pass null to clear.
signed_idstring- Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.
titlestring- Title of the visual example, e.g. "Dashboard Overview" (required on create)
usage_instructionsstring- Instructions for agents on when and how to use this visual example. Pass null to clear.
airopsmcp_manage_brand_kit_writing_ruleCreate or update a writing rule for a Brand Kit.DestructiveManage Brand Kit Writing Rule
Create or update a writing rule for a Brand Kit. Omit `id` to create a new rule; provide `id` to update an existing one.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID
audience_idinteger- Audience ID to scope this rule to (mutually exclusive with content_type_id and region_id). Only on create.
content_type_idinteger- Content type ID to scope this rule to (mutually exclusive with audience_id and region_id). Only on create.
idinteger- Writing rule ID (omit to create new)
region_idinteger- Region ID to scope this rule to (mutually exclusive with content_type_id and audience_id). Only on create.
textstring- Writing rule text (required on create)
airopsmcp_publish_brand_kitPublish a Brand Kit's current draft so changes become active.DestructivePublish Brand Kit
Publish a Brand Kit's current draft so changes become active. This promotes the current draft to active and creates a fresh draft from it.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to publish
airopsmcp_update_aeo_prompt_assignmentsUpdate the country, persona, and platform assignments of one or more existing AEO prompts on a Brand Kit.DestructiveUpdate Aeo Prompt Assignments
Update the country, persona, and platform assignments of one or more existing AEO prompts on a Brand Kit. Writes to the brand kit's draft session ONLY — changes do NOT take effect until you call `commit_aeo_prompt_assignments`. Semantics: - For each entry in `prompts`, a non-empty array REPLACES that prompt's current draft assignments for the given dimension. - An empty array CLEARS that dimension on the prompt. - Omitting a dimension or passing null leaves that dimension UNCHANGED. - At most 100 prompts can be updated per call. Workflow: 1. Call `update_aeo_prompt_assignments` to stage your changes in the draft. 2. Inspect `limit_exceeded` in the response. If true, the workspace would exceed its estimated-answers quota on commit. Adjust by calling `update_aeo_prompt_assignments` again, or call `discard_aeo_prompt_assignments` to abandon. 3. When ready, call `commit_aeo_prompt_assignments` to apply the draft to live. Always confirm with the user before committing. IMPORTANT — shared draft with the UI: - There is one draft per brand kit, shared between MCP and the human-facing UI. - If the user has unsaved UI edits, your edits accumulate in the same draft. A subsequent commit will publish both sets of edits together; a discard will destroy both. Surface this to the user before committing or discarding. To discover prompt IDs and current assignments, use `list_aeo_prompts`. To inspect current draft state without modifying it, use `get_aeo_prompt_assignments_status`.
Inputs
brand_kit_idintegerrequired- The Brand Kit ID owning the prompts to update.
promptsarrayrequired- Per-prompt assignment updates. Empty arrays clear a dimension; omitted or null dimensions remain unchanged.
airopsmcp_update_brand_kitUpdate a Brand Kit's base fields.DestructiveUpdate Brand Kit
Update a Brand Kit's base fields. Only provided fields are changed.
- Idempotent
Inputs
brand_kit_idintegerrequired- The Brand Kit ID to update
brand_aboutstring- Description/overview of the brand
brand_namestring- Name of the brand
brand_urlstring- URL of the brand website
writing_personastring- The persona/voice used in brand writing
writing_tonestring- The tone of voice for brand content
No tools match.