AirOps MCP

Live

API KEY

CONTENT

AI

Brand guidelines, content workflows, and AI templates your agent needs to produce on-brand output live in Airops. Airops MCP gives your content agent per-user API access, credentials vaulted, scoped, never in the prompt.

  • Acts as the user: Each team member's Airops key is scoped to their content workflows and brand assets.
  • Credentials stay vaulted: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: User permissions enforced. 90-day audit trail on every workflow run.
AirOps MCP
agent · Acme Q3
Run
Run the product launch email workflow with these features and output a draft for review.
S
airops_workflow_run
243ms
Content agent
Workflow completed. 3-email sequence generated following brand voice guidelines — subject lines, CTAs, and tone validated against your brand kit. Ready for review.
Sources: brand kit, email workflow template
airopsmcp
3
18:29
Message Claude...

Tools your content agent reaches for on Airops, scoped per team member.

CALL ANY TOOL
API key scoped per user. Every workflow run attributed to the authorizing team member.
airopsmcp_accept_opportunity
Accept 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.
Parameters
Name
Type
Required
Description
play_id
integer
Required
Campaign ID.
opportunity_ids
array
Optional
Opportunity IDs to accept. Required for v2; for v1 this accepts every pending item in each opportunity.
opportunity_item_ids
array
Optional
V1-only opportunity item IDs to accept. Use this for item-level acceptance.
airopsmcp_add_aeo_region
Add aeo region
airopsmcp_bulk_update_aeo_prompt_tags
Bulk update aeo prompt tags
airopsmcp_create_aeo_persona
Create aeo persona
airopsmcp_create_brand_kit_direct_upload
Upload create brand kit direct
airopsmcp_create_grid_sheet
Create grid sheet
airopsmcp_create_report
Create report
airopsmcp_delete_aeo_prompt
Delete aeo prompt
airopsmcp_delete_topic
Delete topic
airopsmcp_get_aeo_citation
Get aeo citation
airopsmcp_get_answer
Get answer
airopsmcp_get_grid_row_execution_status
Get grid row execution status
airopsmcp_get_page_prompts
Get page prompts
airopsmcp_get_sentiment_theme_answers
Get sentiment theme answers
airopsmcp_knowledge_base_update_document_metadata
Knowledge base update document metadata
airopsmcp_list_aeo_citations
List aeo citations
airopsmcp_list_aeo_prompts
List aeo prompts
airopsmcp_list_campaigns
List campaigns
airopsmcp_list_opportunities
List opportunities
airopsmcp_list_reports
List reports
airopsmcp_manage_brand_kit_audience
Manage brand kit audience
airopsmcp_manage_brand_kit_font
Manage brand kit font
airopsmcp_manage_brand_kit_product_line
Manage brand kit product line
airopsmcp_manage_brand_kit_visual_use_case
Manage brand kit visual use case
airopsmcp_publish_brand_kit
Publish brand kit
airopsmcp_query_analytics
Query analytics
airopsmcp_read_grid
Read grid
airopsmcp_run_grid_rows
Run grid rows
airopsmcp_search_knowledge_base
Search knowledge base
airopsmcp_update_aeo_tag
Update aeo tag

For more tools, view docs.

Build your Agent
Drop the toolkit in, point it at the authorized team member, and your agent can run Airops workflows and access brand kits from the first run.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { DynamicStructuredTool } from "@langchain/core/tools";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { z } from "zod";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["airopsmcp"], toolNames: ["airops_workflow_run", "airops_brand_kit_get", "airops_templates_list"] },
pageSize: 100,
});

const lcTools = tools.map((t) => new DynamicStructuredTool({
name: t.tool.definition.name,
description: t.tool.definition.description,
schema: z.object({}).passthrough(),
func: async (args) => {
const { data } = await sk.tools.executeTool({
toolName: t.tool.definition.name,
identifier: "user_123",
params: args,
});
return JSON.stringify(data);
},
}));

const agent = createReactAgent({ llm, tools: lcTools });
import { ScalekitClient } from "@scalekit-sdk/node";
import OpenAI from "openai";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["airopsmcp"], toolNames: ["airops_workflow_run", "airops_brand_kit_get", "airops_templates_list"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
type: "function",
function: {
name: t.tool.definition.name,
description: t.tool.definition.description,
parameters: t.tool.definition.input_schema,
},
}));

const resp = await openai.responses.create({
model: "gpt-4o", input: prompt, tools: llmTools,
});
import { ScalekitClient } from "@scalekit-sdk/node";
import Anthropic from "@anthropic-ai/sdk";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["airopsmcp"], toolNames: ["airops_workflow_run", "airops_brand_kit_get", "airops_templates_list"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
name: t.tool.definition.name,
description: t.tool.definition.description,
input_schema: t.tool.definition.input_schema,
}));

const msg = await anthropic.messages.create({
model: "claude-sonnet-4-6", max_tokens: 1024,
tools: llmTools,
messages: [{ role: "user", content: prompt }],
});
import { Agent } from "@google/adk/agents";
import {
MCPToolset, StreamableHTTPConnectionParams,
} from "@google/adk/tools/mcp";

const toolset = new MCPToolset({
connectionParams: new StreamableHTTPConnectionParams({
url: "https://mcp.scalekit.com/airopsmcp",
headers: { Authorization: `Bearer ${userScopedToken}` },
}),
});

const agent = new Agent({
name: "agent", model: "gemini-2.0-flash",
tools: await toolset.getTools(),
});
Try these prompts
Paste any prompt into your content agent to start running Airops workflows and accessing brand assets.
Search & recall
Copy the prompt
Copied
List all content templates available in my workspace.
Copy the prompt
Copied
Get our brand voice guidelines and approved terminology.
Copy the prompt
Copied
Show the last 5 workflow runs and their output status.
Action & create
Copy the prompt
Copied
Run the [workflow name] workflow with these inputs: [inputs].
Copy the prompt
Copied
Generate a blog post draft for [topic] using our brand voice template.
Copy the prompt
Copied
Create social media captions for [campaign] following our brand guidelines.
SEE HOW AUTH WORKS
Team members authorize Airops once. Their API key stays vaulted, every workflow run is scoped to their workspace permissions, and every action is logged.
1
Authorize
Your user connects
AirOps MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
AirOps MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
AirOps MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
AirOps MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
Same per-user auth pattern across other content and AI workflow connectors.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
Engineering Teams
DevOps assistant agent
Polls GitHub for failing checks and stale PRs, opens Linear issues for the ones that need work, and posts a daily digest to Slack. It acts as the engineer, not a shared service account.
Support and Ops Teams
Email-to-calendar agent
Reads scheduling intent out of Gmail threads, resolves the times everyone actually has free, and creates the event on the user's own Google Calendar. No shared service account.
Test other agents
Same per-user auth pattern across other content and AI workflow connectors.
ENGINEERING
DevOps assistant agent
Poll GitHub for failing checks and stale pull requests, open Linear issues for the ones that need work, and digest to Slack.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
OPS
Email-to-calendar scheduling agent
Read scheduling intent out of Gmail threads, resolve mutual free time, and create the Google Calendar event.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared token looks fine in a demo. In production every call looks like a service account. Scalekit resolves the real user credential so attribution, audit, and scope stay accurate.
// shared token
 audit → bot_service_account
 user_filter → broken

 // scalekit
 audit → user_abc
 scope → enforced ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Airops MCP today. Others tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent use a shared Airops key or per-user keys?
Per-user keys. Each team member provisions their own Airops API key and Scalekit vaults it under their identity. Workflow runs are attributed to that user, not a shared team credential.
Where is the Airops API key stored?
In Scalekit's AES-256 vault, namespaced per tenant. Keys resolve at request time and never appear in prompts, logs, or LLM completions.
Can I restrict which Airops workflows the agent can execute?
Yes. Use listScopedTools with a tool name filter to allow only specific workflow types, for example, email drafting but not social media publishing, for a given user.
What happens when a user's Airops key is revoked?
The next tool call fails closed for that user with a clear error. Other users in the workspace continue unaffected. Revocation is logged with a timestamp.
Can one agent run Airops workflows for multiple users?
Yes. Scalekit resolves the credential for each user identifier at call time. A single agent deployment serves all users in a tenant, each with their own scoped Airops access.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""airopsmcp"": {
""url"": ""https://mcp.scalekit.com/airopsmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.airopsmcp]
url = ""https://mcp.scalekit.com/airopsmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""airopsmcp"": {
""url"": ""https://mcp.scalekit.com/airopsmcp"",
""type"": ""http""
}
}
}