Skip to content
Conduit

mcp server

openseo

Open Source Ahrefs & SEMrush

duckduckdeploy/openseocommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 25, 2026

OpenSEO (openseo.gg) is an open-source alternative to Ahrefs and Semrush. It covers full SEO audits of any domain, keyword research, rank tracking, backlinks, technical site audits, AI visibility and local rank tracking, and reads your own Google Search Console and Analytics data. Run it on your own machine or server, read every line of it, and hand it to your AI agent.

No monthly plan: the software is free, and search data is paid per lookup, under a monthly limit you set. A rank check is from $0.02, a keyword search of 150 ideas about $0.08.

⭐ If OpenSEO is useful to you, a star helps other people find it.

[!NOTE] OpenSEO is released and gets active updates. Issues and ideas are very welcome.

📸 A look inside

Every tool is one search: type a keyword, domain or URL, pick a country (and a city or state where it helps), press Enter, and everything loads together. The search is in the address, so any view can be bookmarked or shared. Each tool has its own page, and the guide goes through every screen.

🆓 Try it free, no account

Six tools run right on the website, a few free checks a day, no sign-up:

ToolWhat it checks
Keyword generator50 keyword ideas for a seed, with volume, difficulty and CPC
Keyword difficulty checkerDifficulty of up to 20 keywords
SERP checkerThe live Google top 20 for a keyword
Website traffic checkerEstimated Google traffic of up to 5 sites
Website authority checkerDomain Rating, referring domains and backlinks of up to 3 sites
AI Overview checkerWhether Google shows an AI Overview, and which sites it cites

✨ Why OpenSEO

  • 🔓 Open source, all of it. The app, the API, the crawler and the agent server are MIT licensed. Change what you need and keep your changes.
  • 🏠 Your server, your data. One Docker command runs the whole suite on your own computer or server. Your keywords, rankings and audits stay in your own database.
  • 💸 No surprise bills. Every call is listed with its cost, and a monthly limit stops all spending once it is reached.
  • 🤖 Agents on a leash. 76 MCP tools cover the whole workspace. Every paid tool takes dry_run and max_cost_usd, so an agent cannot spend more than you agreed.
  • 📈 Your own Google data. Connect Search Console. You get queries one push from page one, and pages scored by where improving them is most worth it.
  • 🎯 Focused workflows. The SEO work most sites actually do, without the hundred reports nobody opens.

🧰 Workflows

🥊 OpenSEO vs the paid suites

Ahrefs, Semrush, SE Ranking, MozOpenSEO
Source codeClosedOpen source (MIT)
Where it runsTheir cloudopenseo.gg, or your own server with Docker
PriceMonthly plans from $49 (Moz) to $140 (Semrush) to startFree software; data paid per lookup
SeatsPaid per userNo seats
AI agentsAPI or MCP on some plans76 MCP tools and a REST API, spending capped per call
Data depthTheir own crawlers and indexes, the deepestA large commercial dataset through a provider

Honest side-by-sides, including when each one is the better buy: Ahrefs · Semrush · SE Ranking · Mangools · Ubersuggest · Moz · Screaming Frog · Otterly.AI

🐳 Self-host with Docker

You need Docker. On Windows or macOS that's Docker Desktop with at least 4 GB of memory.

git clone https://github.com/duckduckdeploy/openseo.git openseo
cd openseo
cp .env.example .env
# In .env, set AUTH_SECRET (32+ random characters)
# and ENCRYPTION_KEY (openssl rand -base64 32)
docker compose up -d --build
ServiceAddress
Dashboardhttp://localhost:3200
Site and docshttp://localhost:3101
API and MCPhttp://localhost:4100 (/api/*, /mcp)

One image runs everything: Postgres, the API with its MCP server and background worker, the dashboard and the site. Database migrations run when the API starts.

On a cloud server with your own domain, add HTTPS with automatic Let's Encrypt certificates:

  1. Point your domain, app. and api. at the server.
  2. Set OPENSEO_DOMAIN, APP_URL, WEB_URL, PUBLIC_API_URL and POSTGRES_PASSWORD in .env.
  3. Run docker compose --profile https up -d --build.

The self-hosting guide covers servers, updates, backups and every setting.

🤖 Connect your AI agent

The SEO MCP server gives agents the whole workspace as 76 tools, listed with their prices in MCP tools.

ChatGPT and Claude (web and desktop): add a custom connector with the URL {API_URL}/mcp and OAuth sign-in. You sign in with your OpenSEO account and approve; no key needed. Connected apps can be revoked in Settings.

For other agents, create an API key under Settings and store it in an environment variable named OPENSEO_API_KEY.

The quick way: copy the setup prompt from Settings and paste it into your agent. The agent connects itself and checks the connection with free calls only.

Claude Code: install the plugin, which bundles the connection and the skills:

/plugin install openseo --marketplace duckduckdeploy/openseo

Set OPENSEO_MCP_URL to point it at a self-hosted install.

Any other MCP client: add {API_URL}/mcp with the header Authorization: Bearer <key>. The MCP guide has the exact config for:

  • Claude Code and Claude Desktop
  • Cursor
  • VS Code
  • Codex
  • Gemini CLI
  • OpenCode
  • Windsurf

🧩 Skills

Ready-made SEO workflows in plugins/openseo/skills, built on the 76 MCP tools:

SkillWhat it does
seo-coachLearn SEO on your own site, and pick the first thing worth doing
seo-auditAny domain's rankings, links and competitors, as a short plan
site-auditCrawl your site: the one or two technical fixes that matter most
keyword-researchTopics worth writing about, grouped and saved
competitor-analysisTheir strategy, the keyword gap, and where you can win
search-console-reviewQuick wins from your own Google data, free
local-seoYour Maps profile, reviews and rankings street by street

Every skill prices paid steps with dry_run first and passes the limit you agree as max_cost_usd. In Claude Code, /seo-audit example.com audits any domain in one call (the seo_audit tool, about $0.50 to $0.65) and turns it into a short plan. Or just ask, for example "which of my pages are stuck on page two?". The same features are available over the REST API.

🔎 Search data

The crawler, site audit and Google data are free. Keyword volumes, rankings, backlinks and other search data come from YepAPI. You add your own key when you set up your account, and each lookup is billed to it at the price the app shows first: a page-one rank check costs $0.01, and 150 keyword ideas cost about $0.08.

🛠️ Development

Requirements: Node 26+, pnpm 10, Postgres 15+ (or docker compose up -d postgres).

pnpm install
pnpm db:migrate
pnpm dev                 # API :4100, dashboard :3200, site :3101, with live reload
pnpm typecheck
pnpm test

The tests need no database, network or API keys. apps/api/test runs the real API against an in-memory Postgres (PGlite) with the real migrations, plus stand-ins for the data provider (apps/api/src/testing/fake-yepapi.ts) and Google (apps/api/src/testing/fake-google.ts). For local work without a data key, run the stand-in with pnpm --filter @openseo/api fake-yepapi and set YEPAPI_BASE_URL=http://localhost:4199.

apps/api          Fastify API, MCP server, background worker (pg-boss)
apps/app          Dashboard (Next.js)
apps/web          Public site and docs (Next.js)
packages/yepapi   Typed data client with price estimates
packages/crawler  Site-audit crawler
packages/shared   Model catalog and shared helpers

User documentation and tutorials live on the site under /docs (apps/web/src/app/docs).

🔐 Security

  • Stored data keys and Google tokens are encrypted at rest with AES-256-GCM (ENCRYPTION_KEY) and never returned by the API.
  • API keys are stored as SHA-256 hashes and shown once.
  • OAuth for MCP clients:
    • dynamic client registration and PKCE (S256)
    • exact redirect URIs
    • single-use codes
    • access tokens that last one hour
    • rotating refresh tokens; a reused one ends the grant
    • tokens stored as hashes
  • Paid lookups are not retried after a server error or a lost connection, since they may already have been billed.
  • The crawler refuses private, loopback and metadata addresses, including through redirects.
  • In Docker, the app, site and API listen only on the machine itself. The optional Caddy service is the only thing facing the internet.

🤝 Contributing

Clear issues are the most useful contribution: what you did, what you expected and what happened. For code, run pnpm typecheck and pnpm test before opening a pull request.

📄 Licence

MIT. Use it, change it, host it.

↑↓ navigate openesc close