# OpenSEO MCP Tool Domains: Complete Guide to Available AI Agent Tools

> Discover OpenSEO MCP tool domains: Keyword, SERP, Domain, Backlink, Saved Keyword, and Rank-Tracking. Learn how AI agents access SEO data with this comprehensive guide.

- Repository: [Every App/open-seo](https://github.com/every-app/open-seo)
- Tags: deep-dive
- Published: 2026-09-05

---

**OpenSEO exposes six MCP tool domains—Keyword, SERP, Domain, Backlink, Saved Keyword, and Rank-Tracking—that AI agents use to retrieve and manipulate SEO data via the Multi-Channel Protocol.**

OpenSEO's **MCP (Multi-Channel Protocol)** layer provides structured access to SEO data through domain-specific tool collections. Each **MCP tool domain** maps to a distinct data model and implements validated, OAuth-scoped functions that both UI components and external AI clients can invoke. This guide breaks down all six available domains with their source implementations and practical usage patterns.

## What Is an MCP Tool Domain in OpenSEO?

An **MCP tool domain** is a logical grouping of AI-callable functions that share a primary data model and business purpose. Domains enforce consistent input schemas, apply the `MCP` OAuth scope, and return standardized payloads consumable by agents.

According to the OpenSEO source, domains are registered in [`src/server/mcp/server.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/server.ts) and implemented as individual TypeScript modules under `src/server/mcp/tools/`. The transport layer in [`src/server/mcp/transport.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/transport.ts) handles authentication, CORS, and request routing for all domain calls.

## Six Available MCP Tool Domains

The following table summarizes every **MCP tool domain** currently available in OpenSEO, including their data models, representative tools, and implementation files:

| MCP Tool Domain | Primary Data Model | Key Tools | Source File |
|-----------------|-------------------|-----------|-------------|
| **Keyword** | `Keyword` (search terms) | `search_keywords`, `save_keyword`, `list_keywords` | [`src/server/mcp/tools/saved-keywords-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/saved-keywords-tools.ts) |
| **SERP** | `SerpResult` (search results) | `search_serp`, `list_serp_pages` | [`src/server/mcp/tools/search-console-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/search-console-tools.ts) |
| **Domain** | `DomainOverview` (traffic, keywords, pages) | `get_domain_overview`, `list_domains`, `add_tracked_domains` | [`src/server/mcp/tools/project-context.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/project-context.ts) |
| **Backlink** | `BacklinkProfile` (incoming links) | `get_backlinks_profile`, `list_backlinks`, `list_referring_domains` | [`src/server/mcp/tools/get-backlinks-profile.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/get-backlinks-profile.ts) |
| **Saved Keyword** | `Keyword` (persistent storage) | `save_keyword`, `delete_keyword`, `update_keyword` | [`src/server/mcp/tools/saved-keywords-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/saved-keywords-tools.ts) |
| **Rank-Tracking** | `RankTrackingConfig` (monitoring setup) | `create_rank_tracker`, `list_rank_trackers`, `delete_rank_tracker` | [`src/server/mcp/tools/rank-tracking-management-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/rank-tracking-management-tools.ts) |

### Keyword Domain

The **Keyword domain** provides query and persistence operations for search terms.

Located in [`src/server/mcp/tools/saved-keywords-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/saved-keywords-tools.ts), this domain handles both transient keyword searches and saved keyword management. The `search_keywords` tool performs live lookups, while `save_keyword` and `list_keywords` interact with the persistent `Keyword` store.

### SERP Domain

The **SERP domain** retrieves search engine results pages for analysis.

Implemented in [`src/server/mcp/tools/search-console-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/search-console-tools.ts), this domain exposes `search_serp` for fetching result data and `list_serp_pages` for paginated access to historical SERP captures.

### Domain Domain

The **Domain domain** (note: the domain is named "Domain," not to confuse with the protocol concept) provides project-level website analytics.

Found in [`src/server/mcp/tools/project-context.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/project-context.ts), tools like `get_domain_overview` return traffic estimates, keyword counts, and page metrics. `list_domains` and `add_tracked_domains` manage the portfolio of monitored sites.

### Backlink Domain

The **Backlink domain** analyzes incoming link profiles.

The implementation in [`src/server/mcp/tools/get-backlinks-profile.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/get-backlinks-profile.ts) offers `get_backlinks_profile` for aggregate metrics, plus `list_backlinks` and `list_referring_domains` for detailed link inventories.

### Saved Keyword Domain

The **Saved Keyword domain** offers CRUD operations specifically for persistent keyword storage.

While sharing the `Keyword` model with the Keyword domain, this scoped domain in [`src/server/mcp/tools/saved-keywords-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/saved-keywords-tools.ts) focuses on lifecycle management: `save_keyword`, `delete_keyword`, and `update_keyword`.

### Rank-Tracking Domain

The **Rank-Tracking domain** configures monitoring jobs for keyword-domain-location combinations.

From [`src/server/mcp/tools/rank-tracking-management-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/rank-tracking-management-tools.ts), agents use `create_rank_tracker` to set up watches, `list_rank_trackers` to query configurations, and `delete_rank_tracker` to remove tracking jobs.

## Calling MCP Tools: Code Examples

Every **MCP tool domain** follows the same request pattern: a `name` identifying the tool and an `args` object matching the tool's input schema. The `fetchMcp` client injects authentication automatically.

### Domain Overview Lookup

```typescript
import { fetchMcp } from "@/lib/mcp-client";

const response = await fetchMcp({
  name: "get_domain_overview",
  args: { domain: "example.com" },
});

console.log(response.data);

```

### Saved Keyword Listing

```typescript
const kwResponse = await fetchMcp({
  name: "list_keywords",
  args: { projectId: "proj_123" },
});

kwResponse.data.forEach((kw) => console.log(kw.keyword));

```

### Backlink Profile Retrieval

```typescript
const blResponse = await fetchMcp({
  name: "get_backlinks_profile",
  args: { domain: "example.com", limit: 20 },
});

console.log(blResponse.data.backlinks);

```

## Key Implementation Files

Understanding these source files helps when extending or debugging **MCP tool domains**:

| File | Purpose |
|------|---------|
| [`src/server/mcp/server.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/server.ts) | Registers all domains and enforces the `MCP` OAuth scope |
| [`src/server/mcp/transport.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/transport.ts) | Handles CORS, auth context, and request routing |
| `src/server/mcp/tools/*.ts` | Individual domain implementations (one or more domains per file) |
| [`web/src/lib/feature-pages.ts`](https://github.com/every-app/open-seo/blob/main/web/src/lib/feature-pages.ts) | UI layer that advertises available domains |
| [`docs/SELF_HOSTING_CLOUDFLARE_OPERATIONS.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_CLOUDFLARE_OPERATIONS.md) | Client connection guide for Cloudflare Access |

## Summary

- OpenSEO provides **six MCP tool domains**: Keyword, SERP, Domain, Backlink, Saved Keyword, and Rank-Tracking
- Each domain maps to a specific data model (`Keyword`, `SerpResult`, `DomainOverview`, `BacklinkProfile`, `RankTrackingConfig`)
- Domain tools are implemented in `src/server/mcp/tools/*.ts` and registered in [`src/server/mcp/server.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/server.ts)
- All calls require the `MCP` OAuth scope and route through [`src/server/mcp/transport.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/transport.ts)
- The request pattern is standardized: `{ name: "tool_name", args: { ... } }`

## Frequently Asked Questions

### What is the difference between the Keyword and Saved Keyword MCP tool domains?

Both domains use the `Keyword` data model, but **Keyword** handles search and general operations while **Saved Keyword** is scoped specifically to persistent storage CRUD. They share implementation in [`src/server/mcp/tools/saved-keywords-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/saved-keywords-tools.ts) but expose different tool sets for distinct use cases.

### How do I add a new domain to track in OpenSEO via MCP?

Use the **Domain domain's** `add_tracked_domains` tool, defined in [`src/server/mcp/tools/project-context.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/project-context.ts). Pass the domain string in the `args` payload alongside your project identifier to attach it to your monitoring portfolio.

### Where is the MCP authentication scope enforced?

The `MCP` OAuth scope is validated in [`src/server/mcp/server.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/server.ts) at the entry point before any domain tool executes. The transport layer in [`src/server/mcp/transport.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/transport.ts) handles token extraction and CORS headers for cross-origin MCP clients.

### Can external AI agents use these MCP tool domains?

Yes. OpenSEO's MCP layer is designed for both internal UI components and external clients. Documentation in [`docs/SELF_HOSTING_CLOUDFLARE_OPERATIONS.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_CLOUDFLARE_OPERATIONS.md) explains connecting via Cloudflare Access, and the `fetchMcp` pattern shown above works with any HTTP client that supplies valid OAuth credentials.