import { createFileRoute, Link } from "@tanstack/react-router"; import { ArrowUpRight, ShieldAlert } from "lucide-react"; import { getAuthMode, isHostedClientAuthMode } from "@/lib/auth-mode"; import { captureClientEvent } from "@/client/lib/posthog"; import { ClaudeIcon, CodexIcon } from "@/client/features/ai-mcp/AgentIcons"; import { AvailableTools } from "@/client/features/ai-mcp/AvailableTools"; import { CodeBlock, Collapsible, CopyButton, } from "@/client/features/ai-mcp/SetupControls"; const DISCORD_URL = "https://discord.gg/c9uGs3cFXr"; const SUPPORT_EMAIL = "ben@openseo.so"; const SAM_GITHUB_URL = "https://github.com/every-app/sam"; const SKILL_NAMES = [ "seo-project-setup", "seo-coach", "keyword-research", "keyword-clustering", "competitive-landscape", "competitor-analysis", "link-prospecting", "local-seo", "seo-audit", ]; const SKILLS_INSTALL = `npx skills add every-app/open-seo`; const ALL_SKILLS_INSTALL = `npx skills add every-app/open-seo --skill '*'`; const CLAUDE_CODE_SKILLS_INSTALL = `npx skills add every-app/open-seo --skill '*' --agent claude-code`; const CODEX_SKILLS_INSTALL = `npx skills add every-app/open-seo --skill '*' --agent codex`; const SKILLS_MANUAL_INSTALL = `git clone https://github.com/every-app/open-seo.git # Codex mkdir -p ~/.codex/skills cp -R open-seo/.agents/skills/* ~/.codex/skills/ # Claude Code mkdir -p ~/.claude/skills cp -R open-seo/.agents/skills/* ~/.claude/skills/`; export const Route = createFileRoute("/_app/ai")({ component: AiPage, }); function AiPage() { const mcpUrl = typeof window === "undefined" ? "https://app.openseo.so/mcp" : `${window.location.origin}/mcp`; return (

AI & MCP

Connect your AI agent to CrawlerX. Run keyword research, SERP analysis, domain lookups, and backlink reviews from your editor or chat.

{getAuthMode(import.meta.env.AUTH_MODE) === "cloudflare_access" ? (
This instance is behind Cloudflare Access. MCP clients cannot connect until Managed OAuth is enabled on your Access application.{" "} Setup guide
) : null}

MCP server URL

captureClientEvent("mcp:setup_url_copy")} />
{mcpUrl}

Paste this into any MCP client. This URL points at the CrawlerX instance you are using now, whether hosted, self-hosted, or local. Sign in with CrawlerX when prompted.

{isHostedClientAuthMode() ? (

For headless or CI setups, use an API key from{" "} Settings {" "} instead of the OAuth login.

) : null}

Setup guides

Pick your agent.

} >

Run this in your terminal:

captureClientEvent("mcp:setup_command_copy", { agent: "claude-code", }) } />

Approve the login when prompted.

} >
  1. Open Settings →{" "} Connectors.
  2. Click{" "} Add custom connector .
  3. Paste the MCP URL above and click Add.
  4. Approve the CrawlerX login when prompted.
  5. Optional: after CrawlerX connects, click{" "} Configure , then choose{" "} Always Approved , except for any tools you want Claude to ask before using.

Requires a Claude Pro, Max, Team, or Enterprise plan.

} >

Run this in your terminal:

captureClientEvent("mcp:setup_command_copy", { agent: "codex", }) } />

Approve the login when prompted.

} >
  1. Open{" "} Settings → Integrations & MCP .
  2. Click{" "} Add your own .
  3. Paste the MCP URL above.
  4. Approve the CrawlerX login when prompted.

CrawlerX Skills

Skills give Codex and Claude Code reusable SEO workflows that can call your CrawlerX MCP tools when live SERP, keyword, backlink, or domain data is needed.

You can also auto-accept each CrawlerX skill:

} > } >

Start with{" "} /seo-project-setup . It will ask about your project and save your goals, positioning, and competitors to your project context.

Available skills

    {SKILL_NAMES.map((skill) => (
  • - {skill}
  • ))}

Available tools

Sam: AI SEO teammate

Sam is an experimental content workflow for Claude Code and other coding agents. It combines keyword research, source discovery, drafting, and QA.

View Sam on GitHub

Roadmap

    {[ { title: "In-app SEO Research Agent", description: "Ask questions and run research without leaving CrawlerX", }, { title: "Content Assistant", description: "Generate drafts using saved keywords and business context", }, ].map((item) => (
  • {item.title}
    {item.description}
  • ))}

Have feedback? Reach out on{" "} Discord {" "} or email{" "} {SUPPORT_EMAIL} .

); }