Skip to content

Free prompt pack

Claude SEO prompts that run on your own data

Sixteen prompts for Claude Code and Claude Desktop. Three run with no account. The rest read your audits, rankings and articles through a content API key.

prompts
16prompts
run with no key
5run with no key
tools on the server
11tools on the server

Claude can write an SEO checklist from memory. It cannot tell you, from memory, which of your tracked keywords lost ground since the last check, or whether your pricing page still trips the title check it failed in June.

The MCP server closes that gap with eleven tools. Each one returns a JSON block that Claude reads before it answers, so a position is a position the tool looked up, and a grade is the grade the audit gave. The prompts below are written to keep it that way: call first, quote the values, name the tool, and stop when the data is not there.

What each tool returns

  • rank_checkno key

    a domain's live Google position for one keyword in one market, and the URL that ranks. 0 means not in the top 100

  • ai_presenceno key

    whether Google shows an AI Overview or AI Mode answer for a keyword, and whether the domain is cited in it

  • page_metano key

    a URL's title, meta description, H1 and up to 20 headings, fetched now

  • list_projects

    the projects the key can see: name, domain, country and the grade of the latest finished audit, or null

  • list_articles

    generated articles, newest first, up to 50 per call: title, slug, seed keyword, keywords, excerpt

  • generate_article

    a job for a new article on a keyword. Spends article credits. Refuses a keyword that already has an article

  • get_article_status

    where a job stands: queued (with queue position), drafting, revising, done with an article_id and score, or failed with the error

  • list_integrations

    a project's publishing connections: provider, status, last error, and the draft-or-live default

  • publish_article

    the result of pushing one article through one connection: sent, external_url, and a state that reads published only after the public URL was fetched and carried the article

  • get_latest_audit

    the latest finished audit: score, grade, verdict, totals, per-category scores, up to 20 recommendations with severity and fix, and what could not be assessed

  • rank_history

    per market, each tracked keyword's current, best and first position with a dated series, up to 100 keywords

3 public, 8 behind a key. Full reference: the MCP guide.

Connect Claude

Six steps. The first decides whether you need a key at all, the last is the one limit to know about before you start.

Server URL

https://searchblueprint.io/api/mcp
  1. Step 1

    Decide whether you need a key

    Three tools run with nothing: rank_check, ai_presence and page_meta. They compute over what you send and never touch a workspace, and the public bucket allows 30 calls a minute per IP address. The other eight read and write your projects, so they only appear once the server sees a content API key.

  2. Step 2

    Mint a key in the project

    Open a project, go to Publishing, then the Developer tab, and create a content API key. The sbk_ string is shown once and stored as a hash, so copy it then. A key minted in a project sees that project and nothing else, which is also how you keep a client's key out of another client's data.

  3. Step 3

    Add the server to Claude Code

    One command from a terminal. Leave the --header off and you get the three public tools only.

    Terminal

    claude mcp add --transport http searchblueprint https://searchblueprint.io/api/mcp \
      --header "Authorization: Bearer sbk_YOUR_KEY"
  4. Step 4

    Or add it to Claude Desktop

    Claude Desktop reaches remote servers through mcp-remote. Put this in claude_desktop_config.json and restart the app.

    claude_desktop_config.json

    {
      "mcpServers": {
        "searchblueprint": {
          "command": "npx",
          "args": [
            "mcp-remote",
            "https://searchblueprint.io/api/mcp",
            "--header",
            "Authorization: Bearer sbk_YOUR_KEY"
          ]
        }
      }
    }
  5. Step 5

    Check what Claude can see

    Ask Claude to list its searchblueprint tools. Three names means the key did not reach the server, or it has been revoked. Eleven means you are in. The list is decided per request, so a wrong key does not error, it just shows the public tier.

  6. Step 6

    Not claude.ai, yet

    The custom connector form in claude.ai authenticates with OAuth and has nowhere to put a header. This server takes an API key, so pasting the URL there connects the three public tools at most. The pack runs in Claude Code and Claude Desktop today, and this note will change when the server offers OAuth.

Paste this first

One message that gives Claude your site, your markets and four rules. Every prompt after it assumes these are in the conversation.

You are working on SEO for [domain] with the searchblueprint MCP tools. Keep this context for the whole conversation.

- What the site sells, and to whom: [one line]
- Home market: [country code, e.g. sg] Second market, if any: [code or none]
- Pages that earn money: [URLs]
- Keywords I care about most: [5 to 10]
- Competitors on those keywords: [domains]
- Tone for anything you draft: [e.g. plain, specific, no hype]
- Project name in SearchBlueprint: [name, or "the only one"]

Rules for every task after this one:
1. Call a tool before you state a number. Never estimate a position, a grade or a score.
2. Quote the tool's own values (position, grade, category score, state) and name the tool they came from.
3. If a task needs data the tools do not return (Search Console clicks, GA4 sessions, backlinks), say so in one line and stop. Do not fill the gap from memory.
4. generate_article spends credits and publish_article writes to my CMS. Ask before calling either one.

Confirm you have this in one line, then wait for the first task.

The prompts

Grouped by job. Each one names the tools it calls, what comes back, and how often it is worth running. Square brackets are yours to fill.

Research

Four prompts on the public tools. No account, no key. Each one is a live lookup, so two runs a minute apart are two lookups.

01

Position check across markets

One keyword, one domain, four countries. The tool returns a position and the URL that holds it, so you also learn whether the same page ranks everywhere.

Calls
rank_check
Cadence
Before you write for a new market
Key
None
Using rank_check, look up [domain] for [keyword] in sg, us, uk and au. Return one row per market with the position and the ranking URL. A position of 0 means not in the top 100, so write "not in top 100" instead of the number. Then say which market is strongest and whether one URL ranks in every market or different pages do.

02

AI Overview presence sweep

For each keyword: did Google show an AI answer, and were you cited in it. Keep the list to ten, since the public bucket is 30 calls a minute.

Calls
ai_presence
Cadence
Monthly
Key
None
Run ai_presence for [domain] on each of these keywords in [country]: [up to 10 keywords]. Build a table with three columns: keyword, whether an AI Overview or AI Mode answer showed, whether [domain] was cited in it. Finish with the keywords where an answer shows and we are absent, in the order I listed them. Report what the tool returned and nothing more; do not guess at why.

03

Competitor title and heading teardown

Your page and two or three rivals, fetched now: title, meta, H1 and the H2s side by side. The gaps in your headings are the brief for the rewrite.

Calls
page_meta
Cadence
Before you rewrite a page
Key
None
Call page_meta on these URLs: [my URL], [competitor URL 1], [competitor URL 2]. Lay out title, meta description, H1 and the H2 headings side by side. Tell me which subtopics their headings cover that mine do not, and whether my title contains [keyword] at all. Only if my title or meta fails on that count, draft one replacement title under 60 characters and one meta description under 155.

04

Does this page own this keyword

Two calls answer whether the page you are editing is the page Google ranks. When a different URL on your domain holds the spot, you find out before you spend a day on the wrong one.

Calls
page_metarank_check
Cadence
On demand
Key
None
For [URL] and [keyword] in [country]: call page_meta on the URL and rank_check on the domain. Report the position and whether the URL that rank_check returns is the same page. If a different page on my domain ranks, name it and say which of the two the title and H1 suggest should carry the keyword. Do not recommend merging pages; that is my call.

Content

What is written, what to write next, and one article from brief to job id. The writing calls spend credits, so each prompt makes Claude stop and ask first.

05

What we have already written

The article list grouped into topics, plus any pair sharing a keyword. generate_article refuses a keyword that already has an article, so this is the check that saves a refused call.

Calls
list_articles
Cadence
Monthly
Key
Content API key
Call list_articles with limit 50. Group the articles by their seed keyword and keywords into topics. List any two articles that share a keyword. Then suggest five keywords that sit next to these topics but have no article yet, as candidates only. Do not call generate_article.

06

Brief and write one article

Claude shows the brief, waits for a yes, starts the job and polls it. Done arrives with an article_id and a score; failed arrives with the reason.

Calls
generate_articleget_article_status
Cadence
When you have a keyword ready
Key
Content API key

Spends article credits. Refused with 402 when the workspace has none, and with 409 when the keyword already has an article.

Write one article for the [project name] project on [keyword]. Before calling generate_article, show me the brief you will pass: the angle, the reader, three points it must cover, under 4000 characters. Wait for my yes. After the call, poll get_article_status about every two minutes and tell me the status each time: queued with the queue position, drafting, revising, then done with the article_id and score, or failed with the error. Stop polling after done or failed.

07

Turn an audit finding into an article

Reads the recommendations, keeps the ones a new page would fix rather than a tag change, and proposes one brief. Nothing is generated until you say so.

Calls
get_latest_auditgenerate_article
Cadence
After each audit
Key
Content API key

Spends article credits once you approve.

Call get_latest_audit for [project name]. From the recommendations, keep the ones whose fix is a missing page or thin content rather than a tag or a header change. For the most severe of those, propose a keyword and a brief, and quote the recommendation's issue and fix text next to it. Wait for my approval, then call generate_article with that brief and report the job_id.

Technical

The latest finished audit, read three ways. The grade does not move until the next run; these prompts tell you what to fix and whether a fix is live.

08

Read the latest audit

Score, grade and verdict as returned, categories worst first, recommendations by severity, and the three to ship first. If a newer audit is running, it says so.

Calls
get_latest_audit
Cadence
After each audit
Key
Content API key
Call get_latest_audit for [project name]. Give me: the score, grade and verdict as returned; the totals (pages, checks, pass, warn, fail); each category with its score and grade, worst first; and the recommendations grouped by severity, with the url where one is present. Then name the three fixes to ship first, using only those recommendations. If audit_running is true, say a newer audit is in progress and this may be superseded.

09

Where the audit could not look

Every unassessed check with its reason. Some are yours to clear, such as a crawler that was blocked; some are limits of the audit. Neither one is scored, and the prompt keeps it that way.

Calls
get_latest_audit
Cadence
After each audit
Key
Content API key
Call get_latest_audit for [project name] and list every entry in unassessed with its reason. For each, say whether the reason text points at something on my side (a blocked crawler, a missing sitemap, a page that timed out) or at a limit of the audit itself. Do not score or guess at what was not assessed.

10

Is the fix live yet

Takes the title, meta and H1 findings that carry a URL, fetches each page now and marks it fixed, unchanged, or changed and still failing. The score stays put until the next audit, and the prompt says so.

Calls
get_latest_auditpage_meta
Cadence
Weekly, while working a fix list
Key
Content API key
Call get_latest_audit for [project name] and pull every recommendation that mentions a title, a meta description or an H1 and carries a url. For each url, call page_meta now and compare what is live against the issue. Mark each one fixed, unchanged, or changed but still failing, and quote the live value. Remind me at the end that this does not rerun the audit, so the score is unchanged until the next run.

Rankings and AI visibility

The tracker's own series, per market, plus a public AI check on the keywords that slipped. Nothing here reads clicks or sessions; positions are what the tool has.

11

Weekly movement report

Per market: each keyword's current, best and first position with its last check date, sorted by how far each one sits from its best. Keywords still waiting on their first check get a count of their own rather than a made-up row.

Calls
rank_history
Cadence
Weekly, Monday
Key
Content API key
Call rank_history for [project name]. For each market (each location_code) list the keywords with current, best and first position and the last_checked date. A position of 0 means not in the top 100. Skip keywords marked pending and tell me how many there were. Sort by the gap between current and best, largest gap first. Then list the five keywords sitting at their best position ever. Write it so I can paste it into a Monday message.

12

Slipped, and is an AI answer in the way

The keywords three or more places off their best, then a live AI check on up to ten of them. The table shows where an AI answer sits on a keyword that slipped; whether one caused the other is a question this data cannot settle.

Calls
rank_historyai_presence
Cadence
Monthly
Key
Content API key
Call rank_history for [project name]. Take the keywords where current is worse than best by 3 or more positions. For up to ten of them, call ai_presence for [domain] in [country]. Table: keyword, best, current, AI answer shown, cited. Say which slips coincide with an AI answer we are not cited in. Report this as a coincidence in the data, not a cause.

13

A grade for every project

One call, one table: name, domain, country and latest grade, with the ungraded projects set apart because they have no finished audit to read.

Calls
list_projects
Cadence
Weekly, for an agency
Key
Content API key
Call list_projects. Table: name, domain, country, latest_grade. Put the projects whose latest_grade is null in their own list, since those have no finished audit. Sort the rest worst grade first. Do not call get_latest_audit on each of them yet; ask me which one to open.

Publishing

Draft by default. A publish call reports sent, then a state, and the state reads published only after the product fetched the public URL and found the article on it.

14

Publish as a draft

Lists the connections with their health, then pushes one article as a draft and reports the result fields as returned. A draft has no public URL, so its state is unverified, and that is expected.

Calls
list_integrationspublish_article
Cadence
Per article
Key
Content API key

Writes to your CMS. Draft here; pass status publish only when you mean it.

Call list_integrations for [project name]. Show each connection with provider, status, last_error and auto_publish_status. If there is exactly one, use it; otherwise ask me which. Then call publish_article for article [article_id] with status draft. Report sent, requested, state and external_url exactly as returned. If state is unverified, say that a draft has no public URL to verify and that this is expected.

15

Check whether a publish is really live

After a live publish comes back as checking, fetch the external URL yourself. A matching title means the verifier will flip it on its next pass. A second publish call is never the fix; it makes a second post.

Calls
page_meta
Cadence
Per live publish
Key
None
The publish I just ran came back with state "checking" and external_url [URL]. Call page_meta on that URL. If the title matches the article, tell me the page is reachable and the product's verifier should mark it published on its next pass. If page_meta returns an error or a different title, tell me that and do not call publish_article again; a second publish creates a second post, and the verifier decides the state, not us.

16

Client roundup

One paragraph per graded client, drawn from the audit and the tracker, plus a closing line that names the client to look at first. Twenty clients is forty calls, inside the 60 a minute the key allows.

Calls
list_projectsget_latest_auditrank_history
Cadence
Weekly, Friday
Key
Content API key
Call list_projects. For each project with a latest_grade, call get_latest_audit and rank_history. Write one paragraph per client: the grade and verdict, the worst category by score, how many keywords sit at their best position and how many have slipped from it. Use no adjective the tools did not return. End with the one project that needs attention first and the two values that say so.

How to run them

One job per conversation, the brief at the top, and a cadence so the schedule does the remembering.

Open a fresh conversation for each prompt. A long thread with six jobs in it makes Claude carry every earlier table into the next answer.

Paste the brief, wait for the one-line confirmation, then paste the prompt. Fill every bracket before you send; an unfilled [project name] makes Claude guess, and the brief forbids guessing.

Claude's summaries can drift a little from the numbers it quotes. When a sentence and a value disagree, the value is what the tool returned, so read the values first.

Monday
Weekly movement report. Then Is the fix live yet, if you are working a list.
Friday, for an agency
A grade for every project, then Client roundup.
Monthly
AI Overview presence sweep, What we have already written, Slipped and is an AI answer in the way.
After each audit
Read the latest audit, Where the audit could not look, Turn an audit finding into an article.
When something changes
The rest. A new market, a page rewrite, an article ready to go out.

Questions before you connect

Is this read-only?
Nine of the eleven tools read. Two write: generate_article spends article credits, and publish_article pushes to your CMS. publish_article defaults to the connection's own draft-or-live setting, and the brand brief tells Claude to ask before calling either one. Nothing else changes anything in your workspace or on your site.
What does it cost?
The public tools are free to call, 30 a minute per IP address. Workspace reads are free, 60 a minute per key, counted separately. generate_article spends article credits exactly as the app does and refuses with a 402 when the workspace has none, so Claude cannot run up a bill the product would not let you run up yourself.
What can a key see?
The project it was minted in. A workspace key reaches every project in that workspace and nothing outside it. Revoke a key from the same Developer tab; a revoked key behaves like no key at all, three public tools and nothing else, which is why a lost key is a nuisance rather than a breach.
Does this replace Search Console or GA4?
No. Nothing here reads clicks, impressions, sessions or backlinks. Positions come from a live results-page read or from the weekly tracker, and the audit is the product's own crawl. When a prompt needs Search Console data, the brand brief tells Claude to say so and stop rather than invent a number.
Can I run it in claude.ai?
Not today. The custom connector form in claude.ai authenticates with OAuth and cannot send a header, and this server takes an API key. Claude Code and Claude Desktop both pass headers, which is why the connect steps above cover those two.
Can I schedule a prompt?
Claude Code runs a prompt without a terminal session (claude -p), so the Monday report can sit in a cron with the brief prepended. Keep generate_article and publish_article out of anything unattended; the brief's fourth rule only works when a person is there to answer.
Why does the audit score not change after I fix things?
Because get_latest_audit returns a stored result, and the score in it was recorded when that audit finished. To see whether a fix landed in the meantime, run Is the fix live yet, which compares the stored findings against the page as it stands today. The score itself moves at the next audit run.

Mint a key and run the first one

A project's Developer tab issues the key. Read the latest audit is the prompt to start with, because it costs nothing and tells you what to fix.