OpenRush MCP

Live

OAUTH 2.1

SEO RESEARCH

Marketing

OpenRush MCP gives your agent SEO research: keyword demand, live SERPs, backlink gaps, site audits, AI answer citations, and owned Search Console and Analytics data.

  • 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.
OpenRush MCP
agent · Acme Q3
Run
Which referring domains link to my three competitors but not to acme.com?
S
openrushmcp_compare_backlink_gap
212ms
SEO agent
38 referring domains link to at least two of your three competitors and not to acme.com. 11 of them link to all three, ranked by authority.
Sources: backlink index, 3 competitor domains
openrushmcp
38 domains
18:29
Message Claude...

Tools your SEO research agent reaches for on OpenRush, scoped per user.

CALL ANY TOOL
20 read-only SEO research tools: research keywords, inspect SERPs, domains and backlinks, audit sites, track AI citations, and read connected Search Console, Analytics, and Ads data.
openrushmcp_audit_site
Audit site
Fast, opinionated technical / content health audit across a sampled set of a domain's pages, tuned for organic-search signal over noise. Discovers URLs from the sitemap/robots (or a homepage link-crawl fallback), then samples one representative per URL template BY VALUE: money/content pages first, while enumerated low-value sections (e.g. a jobs board or event listings) get a single spot-check rather than eating the budget. Fetches the sample concurrently, then GATES OUT non-indexable pages, anything intentionally `noindex` (on a low-value page) or canonicalized to another URL is excluded from scoring instead of being reported as a problem (a noindexed job listing is working as intended). Returns: grouped `issue_clusters` (issue + severity + affected page count + which page roles + a fix), a ranked `recommendations` list weighted by the *value* of the pages affected, an `onpage_score`, and cross-page duplicate-title/description checks. Full per-page rows, including excluded pages and why, are linked via `resources` (fetch with export_dataset). Runs in seconds. - `max_pages` (default 10, max 20): how many sampled pages to audit. Key fields: `page_class_summary` (sampled pages by role: core/content/ utility/ephemeral), `pages_excluded` + `excluded_summary` (non-indexable pages skipped, by reason), and `worst_page` (the highest-value page with the most issues, the best drill-down target). Each cluster/recommendation carries `page_classes` so you can tell whether a finding hits money pages or just utility ones. Scope: this reads each page's raw HTML, it does NOT execute JavaScript or measure Core Web Vitals. `render_warning: true` means ≥1 audited page looks client-rendered (its raw HTML is near-empty), so its content checks are low-confidence. Also read `coverage` (audited vs discovered), `discovery_source` (a `homepage_fallback` means no sitemap was found), and `fetch_failures` (pages that didn't respond in time). To confirm which findings hit pages that actually earn search traffic, follow the `inspect_domain` / `inspect_page` next_actions.
Parameters
Name
Type
Required
Description
domain
string
Required
The site to audit: "example.com", or a subdomain host to audit that property alone. A URL or www. prefix is normalized; must be a public host.
max_pages
integer
Optional
How many sampled pages to audit (1-20). Default: `10`.
openrushmcp_compare_backlink_gap
Compare backlink gap
openrushmcp_compare_keyword_coverage
Compare keyword coverage
openrushmcp_describe_capabilities
Describe capabilities
openrushmcp_discover_ai_citations
Discover ai citations
openrushmcp_discover_competitors
Discover competitors
openrushmcp_export_dataset
Export dataset
openrushmcp_get_ad_performance
Get ad performance
openrushmcp_get_search_performance
Get search performance
openrushmcp_get_website_analytics
Get website analytics
openrushmcp_inspect_ai_visibility
Inspect ai visibility
openrushmcp_inspect_backlinks
Inspect backlinks
openrushmcp_inspect_domain
Inspect domain
openrushmcp_inspect_keyword
Inspect keyword
openrushmcp_inspect_page
Inspect page
openrushmcp_inspect_search_visibility
Inspect search visibility
openrushmcp_inspect_serp
Inspect serp
openrushmcp_list_connections
List connections
openrushmcp_list_websites
List websites
openrushmcp_research_keywords
Research keywords
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);

// OpenRush MCP tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["openrushmcp"], toolNames: [
    "openrushmcp_research_keywords",
    "openrushmcp_inspect_domain",
    "openrushmcp_compare_backlink_gap"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Find keyword gaps between acme.com and its top competitors" }] });
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: ["openrushmcp"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Find keyword gaps between acme.com and its top competitors" }],
  tools,
});

// Execute the tool call with the user's vaulted OpenRush token
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: ["openrushmcp"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Find keyword gaps between acme.com and its top competitors" }],
  tools,
});

// Tool call runs with the user's vaulted OpenRush token
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: ["openrushmcp"] }, pageSize: 100,
});

const agent = new Agent({
  name: "seo_agent",
  model: "gemini-2.5-pro",
  instruction: "OpenRush MCP tools scoped to this user",
  tools,
});

await agent.run("Find keyword gaps between acme.com and its top competitors");
Try these prompts
Copy any prompt into your agent. Each maps directly to a OpenRush MCP tool. Click to copy, paste into your agent, done.
Keywords and SERPs
Copy the prompt
Copied
Expand "project management software" into a ranked keyword list with volume and CPC.
Copy the prompt
Copied
Show the live SERP for "crm for startups" and which SERP features it triggers.
Copy the prompt
Copied
Find keywords my competitors rank for that acme.com does not.
Domains and backlinks
Copy the prompt
Copied
Give me the starting map for competitor.com: top keywords, top pages, and traffic.
Copy the prompt
Copied
Which referring domains link to my competitors but not to me?
Copy the prompt
Copied
Run a quick technical audit of acme.com and rank the fixes.
AI visibility and owned data
Copy the prompt
Copied
How often do AI answers cite acme.com compared with two competitors?
Copy the prompt
Copied
Which domains does AI cite for "expense management software"?
Copy the prompt
Copied
Show clicks, impressions, and average position from my Search Console for the last 28 days.
SEE HOW AUTH WORKS
Each user signs in to OpenRush once; Scalekit stores and refreshes their tokens. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
OpenRush 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
OpenRush 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
OpenRush 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
OpenRush 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 marketing and analytics connectors.
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.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
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
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.
Test other agents
See the same per-user auth pattern across other marketing and analytics connectors.
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.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
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
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared OpenRush token looks fine in a demo. In production every keyword and backlink query looks like one service account, and you cannot tell which user triggered it. 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.
OpenRush 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 OpenRush as the user or as a shared key?
As the user. Each user signs in to OpenRush once, and Scalekit stores and refreshes their tokens. Audit logs attribute every SEO query to that user, not a shared service account.
Where is the OpenRush OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in OpenRush?
Yes. Filter by tool name in listScopedTools to expose only what you want. Scalekit also enforces scope checks before every API call.
What happens when a user revokes OpenRush access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
What data does OpenRush MCP cover?
SEO research across 20 read-only tools: keyword research, live SERP snapshots, domain and page inspection, backlink profiles and gaps, competitor discovery, site audits, and AI answer citations. When the user has connected owned data, it also reads Search Console, Google Analytics, and Google Ads performance.
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"": {
""openrushmcp"": {
""url"": ""https://mcp.scalekit.com/openrushmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.openrushmcp]
url = ""https://mcp.scalekit.com/openrushmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""openrushmcp"": {
""url"": ""https://mcp.scalekit.com/openrushmcp"",
""type"": ""http""
}
}
}