Agency Analytics MCP

Live

OAUTH 2.1

MARKETING REPORTING

Analytics

Agency Analytics MCP gives agents authenticated access to your marketing reporting: pull client metrics, keyword ranks, and campaign insights across every channel.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Agency Analytics MCP
agent · Acme Q3
Run
What changed the most for Acme Dental this month?
S
agencyanalyticsmcp_read_client_insights
88ms
Reporting agent
Top mover: organic sessions up 34% (GA4). Google Ads CPL down 18% to $42. Facebook reach fell 12%, and 3 keywords entered the top 10.
Sources: 3 providers, client Acme Dental, Jun 1 to Jun 30
agencyanalyticsmcp
3 providers
18:29
Message Claude...

Tools your reporting agent reaches for on Agency Analytics, scoped per user.

CALL ANY TOOL
Marketing reporting end to end: find clients, pull metric trends and keyword ranks, surface biggest movers, and read dashboards.
agencyanalyticsmcp_search_web
Search web
Search the live web and return a compact keyword-research result set: organic results (position, title, link, domain, snippet), related searches, People Also Ask questions, and the answer box when present. Use for keyword research, SERP inspection, and competitor discovery. Not client-scoped : no clientId required.
Parameters
Name
Type
Required
Description
query
string
Required
The search query : a keyword phrase to research.
countryCode
string
Optional
Optional two-letter Google country code (gl), e.g. 'ca'.
engine
string
Optional
Search engine to use: 'google' (desktop, default), 'google_mobile', or 'bing'.
language
string
Optional
Optional language code (hl for Google, bing_language for Bing), e.g. 'en'.
limit
integer
Optional
Maximum organic results to return (1-100). Defaults to 10.
location
string
Optional
Optional free-form location to localize results, e.g. 'Toronto, Ontario, Canada'.
agencyanalyticsmcp_create_mcp_feedback
Create mcp feedback
agencyanalyticsmcp_search_users
Search users
agencyanalyticsmcp_fetch_web
Fetch web
agencyanalyticsmcp_search_clients
Search clients
agencyanalyticsmcp_browse_clients
Browse clients
agencyanalyticsmcp_read_client_ads
Read client ads
agencyanalyticsmcp_browse_client_reports
Browse client reports
agencyanalyticsmcp_read_client_crm
Read client crm
agencyanalyticsmcp_browse_client_dashboards
Browse client dashboards
agencyanalyticsmcp_read_client_calls
Read client calls
agencyanalyticsmcp_browse_client_data_sources
Browse client data sources
agencyanalyticsmcp_read_client_email
Read client email
agencyanalyticsmcp_browse_client_custom_metrics
Browse client custom metrics
agencyanalyticsmcp_read_client_forms
Read client forms
agencyanalyticsmcp_read_client_pages
Read client pages
agencyanalyticsmcp_read_client_report
Read client report
agencyanalyticsmcp_read_client_content
Read client content
agencyanalyticsmcp_read_client_metrics
Read client metrics
agencyanalyticsmcp_read_client_reviews
Read client reviews
agencyanalyticsmcp_read_client_traffic
Read client traffic
agencyanalyticsmcp_read_knowledge_base
Read knowledge base
agencyanalyticsmcp_read_client_audience
Read client audience
agencyanalyticsmcp_read_client_insights
Read client insights
agencyanalyticsmcp_read_client_keywords
Read client keywords
agencyanalyticsmcp_read_client_dashboard
Read client dashboard
agencyanalyticsmcp_read_client_ecommerce
Read client ecommerce
agencyanalyticsmcp_read_client_knowledge
Read client knowledge
agencyanalyticsmcp_read_client_reputation
Read client reputation
agencyanalyticsmcp_read_client_conversions
Read client conversions
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Agency Analytics tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["agencyanalyticsmcp"], toolNames: [
    "agencyanalyticsmcp_search_clients",
    "agencyanalyticsmcp_read_client_metrics",
    "agencyanalyticsmcp_read_client_insights"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "What changed the most for Acme Dental this month?" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["agencyanalyticsmcp"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "How is organic traffic trending for Acme Dental?" }],
  tools,
});

// Execute the tool call with the user's vaulted Agency Analytics credential
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["agencyanalyticsmcp"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Which keywords entered the top 10 for Acme Dental this month?" }],
  tools,
});

// Tool call runs with the user's vaulted Agency Analytics credential
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["agencyanalyticsmcp"] }, pageSize: 100,
});

const agent = new Agent({
  name: "agency_reporting_agent",
  model: "gemini-2.5-pro",
  instruction: "Answer marketing reporting questions for the signed-in user.",
  tools,
});

await agent.run("Break down Facebook Ads spend by campaign for Northside Legal.");
Try these prompts
Copy any prompt into your agent. Each maps directly to an Agency Analytics tool. Click to copy, paste into your agent, done.
Client performance
Copy the prompt
Copied
What changed the most for Acme Dental this month?
Copy the prompt
Copied
Pull organic sessions for Acme Dental over the last 90 days.
Copy the prompt
Copied
How is Google Ads cost per click trending for Northside Legal?
Search and keywords
Copy the prompt
Copied
Which keywords entered the top 10 for Acme Dental this month?
Copy the prompt
Copied
List the Bing Ads keywords with the highest spend for Northside Legal.
Copy the prompt
Copied
Compare rank tracker positions month over month for Acme Dental.
Reports and KPIs
Copy the prompt
Copied
What is the cost per lead for Acme Dental this quarter?
Copy the prompt
Copied
Read the SEO section of Acme Dental's monthly dashboard.
Copy the prompt
Copied
Break down Facebook Ads spend by campaign for Northside Legal.
SEE HOW AUTH WORKS
Your users connect once. Their Agency Analytics credentials stay vaulted, every call is scope-checked, and every action is logged.
1
Authorize
Your user connects
Agency Analytics 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
Agency Analytics 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
Agency Analytics 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
Agency Analytics 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
See the same per-user auth pattern across other analytics connectors.
GTM and RevOps Teams
Revenue forecast commentary
Pulls open pipeline from Salesforce and HubSpot, calculates coverage against quota, flags at-risk stages, posts commentary to Slack, and logs every snapshot to Google Sheets.
GTM and RevOps Teams
Deal intelligence agent
Pulls recent Gong calls, scores deal risk with an LLM, cross-references the record in Attio, and DMs each owner their at-risk deals in Slack. Every read is scoped to that rep's own access.
Engineering Teams
Engineering standup agent
Pulls commits from GitHub and GitLab, tracks issue movement in Jira, and posts a per-engineer standup brief to Slack. Each engineer's activity is read on their own delegated OAuth.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
Test other agents
See the same per-user auth pattern across other analytics connectors.
SALES
Deal intelligence agent
Score Gong call risk with an LLM, cross-reference the Attio record, and DM each owner their at-risk deals in Slack.
ENGINEERING
Engineering standup agent
Pull commits from GitHub and GitLab, track Jira issue movement, and post a per-engineer standup brief to Slack.
GTM
Revenue forecast agent
Score pipeline coverage against quota across Salesforce and HubSpot, post forecast commentary to Slack, log snapshots to Sheets.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Agency Analytics token looks fine in a demo. In production every report pull looks like one service account, and you cannot tell which account manager queried which client's data. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Agency Analytics today. Ten connectors 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 access Agency Analytics as the user or through a shared key?
As the user. Scalekit resolves the credential of the person who triggered the agent at request time, so every metric pull and report read in your audit trail is attributed to a real user, not a shared service account.
Where is the Agency Analytics token stored?
In an AES-256 encrypted vault with per-tenant namespacing. Tokens are resolved at request time, never enter LLM context, refresh automatically, and can be revoked from one dashboard.
Can I limit what the agent does in Agency Analytics?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example read_client_metrics and read_client_insights without the raw AAQL export tool. Scalekit also enforces scope checks before every API call.
What happens when a user revokes access?
The credential is invalidated at the next tool call. The call fails closed, other users' connections are unaffected, and the revocation is logged in the audit chain.
Can the agent see every client in the agency account?
Only what the connected user can see. Tools like read_client_metrics and browse_clients require a client_id and run against the user's own OAuth token, so Agency Analytics staff permissions apply. Scalekit adds tool-level filtering on top if you want to narrow access further.
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"": {
""agencyanalyticsmcp"": {
""url"": ""https://mcp.scalekit.com/agencyanalyticsmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.agencyanalyticsmcp]
url = ""https://mcp.scalekit.com/agencyanalyticsmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""agencyanalyticsmcp"": {
""url"": ""https://mcp.scalekit.com/agencyanalyticsmcp"",
""type"": ""http""
}
}
}