Skip to content
MrKeyword
Developers · MCP

Connect MrKeyword to your AI assistant.

MrKeyword serves the Model Context Protocol at https://app.mrkeyword.io/mcp — JSON-RPC 2.0 over one HTTP POST, authenticated with a workspace token. Every tool it answers today is a read.

Step one

Get a token.

In MrKeyword, open Settings → Connections → API & MCP Tokens and press Create token. The value starts mk_ and is displayed once; MrKeyword stores only its SHA-256 hash, so it cannot show it to you again. Send it as Authorization: Bearer mk_….

One workspace

A token is bound to the workspace it was created in. A site, crawl or report belonging to any other workspace answers 404 — the same answer as one that does not exist.

Read-only

Every tool the server answers today performs a read. There is no tool that can edit your site, your workspace, your billing or your Google and Bing connections.

Revocable, and self-expiring

Revoke a token from the same screen and it stops working on the next call. A token also stops working automatically when the person who created it is removed from the workspace, and when its optional expiry passes.

Step two

Point a client at it.

Claude Code

One command, then /mcp inside Claude Code to confirm it connected.

claude mcp add --transport http mrkeyword \
  https://app.mrkeyword.io/mcp \
  --header "Authorization: Bearer mk_your_token"

Claude Desktop

Settings → Developer → Edit Config, into claude_desktop_config.json, then restart Claude Desktop.

{
  "mcpServers": {
    "mrkeyword": {
      "type": "http",
      "url": "https://app.mrkeyword.io/mcp",
      "headers": { "Authorization": "Bearer mk_your_token" }
    }
  }
}

Cursor

.cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project.

{
  "mcpServers": {
    "mrkeyword": {
      "url": "https://app.mrkeyword.io/mcp",
      "headers": { "Authorization": "Bearer mk_your_token" }
    }
  }
}

Anything else, over plain HTTP

The endpoint is JSON-RPC 2.0 over a single POST. It answers initialize, tools/list and tools/call.

curl -s https://app.mrkeyword.io/mcp \
  -H "Authorization: Bearer mk_your_token" \
  -H "content-type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Replace mk_your_token with the token you just created. The endpoint URL is also printed beside the token when MrKeyword creates it, which is the copy to trust if you are on a different deployment.

Reference

The 24 tools.

This table is generated from the server's own tool definitions, and the build fails if the two disagree — but tools/list on your own token is still the authority, because that is the one that answers you. Read tools work with any token. Action tools change something in the workspace and need a token created with the actions scope.

Every MCP tool MrKeyword exposes: 19 reads and 5 actions.
ToolWhat it returnsKind
list_sitesEvery website in the workspace, with its connected Search Console property and latest totals.Read
get_site_summaryClicks, impressions, CTR and average position for one site, with the period comparison.Read
get_daily_issuesToday's highest-priority ranking, technical, sync and cannibalisation issues for one site.Read
get_page_keywordsEvery query one page is ranking with — which is how you catch the wrong page ranking.Read
get_latest_page_auditThe saved page audit: score, ranked recommendations and the structured data found.Read
get_page_briefAn evidence-only content brief for a page, built from its Search Console queries and its audit.Read
get_work_itemsThe workspace's list of SEO jobs and the state each one is in.Read
research_keywordA live Google Keyword Planner report for one keyword: volume, trend, ideas and questions. Uses one lookup credit every time.Read
bulk_keyword_checkLive Google Keyword Planner volume, estimated difficulty and intent for up to 100 keywords. One lookup credit per 25 keywords.Read
get_rankingsTracked positions, filtered by moved_up, moved_down, top3, top10, not_ranking or wrong_page.Read
get_rank_summaryThe headline ranking picture: average position, the position bands, and what moved.Read
get_keyword_historyOne keyword's position, clicks and impressions day by day.Read
get_search_queriesQueries the site already appears for, filtered page_one, almost_there or seen_not_clicked.Read
get_site_auditThe latest crawl: health score, severity counts and the crawl-over-crawl diff.Read
get_audit_issuesIssues from the crawler's 60 checks, with the affected pages and the fix for each.Read
get_page_templatesURL templates found in the crawl with their thin and near-duplicate share.Read
list_reportsThe saved reports in the workspace and their schedules.Read
get_reportOne report run, section by section, with each number's source.Read
get_account_usagePlan limits and what is left this month: tracked keywords, audit pages, AI audits, scheduled reports, keyword lookups.Read
track_keywordsAdds keywords to rank tracking for a site.Action
set_target_pageSets the page a keyword is meant to rank with, which turns on the wrong-page warning.Action
add_annotationWrites a dated note onto the chart, so a jump has its explanation attached.Action
start_site_auditStarts a crawl. It would spend audit pages from the workspace allowance.Action
run_reportRuns a saved report and returns the result.Action
Prompts

Four jobs, already written.

The server exposes MCP prompts as well as tools, so a client that shows them gives you these as ready-made commands. Each one drives several tools and comes back with the answer written up, not a table dump.

weekly_seo_review

Weekly rank review for one site: what moved, what needs attention, and five actions for this week.

fix_my_top_issues

Walk the latest site crawl: what is broken, grouped by category, with concrete fix steps per issue.

find_keyword_opportunities

Turn near-miss Search Console queries into a prioritised list, sized with live Google Keyword Planner volume when you agree to spend lookups.

client_report

Write a client-ready SEO report for one site from rankings, search queries and the latest site audit.

Scopes

Two scopes, and read is not optional.

read

Always granted

Every token can call the 19 read tools. It sees one workspace's data and nothing else: a site, crawl or report belonging to another workspace answers as though it does not exist.

actions

Opt-in, at creation

Only a token created with “Allow this token to make changes” ticked — the actions scope — can call the 5 action tools. An existing token cannot gain it later, a viewer cannot create one at all, and every action a token takes is written to the workspace audit log under the person who minted it.

A token without it that calls an action tool is refused with an error that names the tool and tells you to create a new token with “Allow this token to make changes” ticked — it never fails silently.

Behaviour

What to expect from the endpoint.

Protocol
JSON-RPC 2.0 over the Streamable HTTP transport, as a single POST to https://app.mrkeyword.io/mcp. It answers initialize, ping, tools/list, tools/call, prompts/list and prompts/get, and negotiates protocol versions 2025-06-18, 2025-03-26 and 2024-11-05. JSON-RPC batches are answered in one array. GET and DELETE return 405: there is no server-initiated SSE stream and no session to keep alive, because the server has nothing to push.
Capabilities
Exactly tools and prompts, both without listChanged. There is deliberately no resources capability, because there are no resources — declaring one would only make your client call resources/list and get an error.
Rate limit
120 calls a minute per token. Going over answers HTTP 429 with a Retry-After header and a message saying how long to wait. Separately, the tools that spend something spend it in the product, not at the protocol: start_site_audit uses audit pages and track_keywords uses tracked-keyword slots. Your plan sets those allowances.
Errors
A missing, revoked or expired token answers HTTP 401 with JSON-RPC -32001 and a WWW-Authenticate header. An unsupported method answers -32601; a bad argument, an unknown tool or a refused scope answers -32602. A tool that fails for an ordinary reason — no crawl yet, keyword not tracked — comes back as a normal MCP tool error with the reason in it, so your assistant can correct itself instead of treating it as a transport fault.
What the answers carry
Every payload includes an as_of date, so stale data is visible rather than implied to be current, and each figure says where it came from. The server's own initialize instructions tell your assistant the same things this website does: positions are period averages from the connected property and never live SERP ranks, and search volume comes only from research_keyword and bulk_keyword_check, fetched live from Google Keyword Planner and paid for with lookup credits, while difficulty and intent are MrKeyword estimates.
The same token works for the REST API
The workspace endpoints under /api accept the same Authorization: Bearer mk_… header, so a script that already speaks HTTP does not need an MCP client at all.
Data handling
Provider refresh tokens are encrypted at rest and are never returned by any tool. Crawled page content is escaped before it is rendered anywhere. The full picture is on the security page.
Scope

What this does not do

A reference page is a promise, so these are the gaps rather than a list we hope you do not check.

  • No resources, and no sampling. The server advertises tools and prompts, and nothing it does not implement.
  • No SSE stream and no sessions. One JSON-RPC POST per call. A GET to the endpoint is a 405, on purpose.
  • No per-call usage log in the app yet. Action tools are written to the workspace audit log; read calls are not itemised for you.
  • The rate limit is per token, not per workspace. 120 calls a minute each, so several tokens are several allowances.
  • No competitor or backlink tools, because those features are not offered in the product either.

Get a token and try it.

Create one in Settings → Connections, paste one line, and ask your assistant a question. Free to start, no credit card.

Get started free No credit card required.