Skip to main content
SEO Helper finds what your blog should rank for next, using DataForSEO’s numbers, and briefs the post: keywords, titles, an outline, the questions people ask, internal links and sources. Your coding agent writes the post in your repo, under your repo’s own rules. SEO Helper never writes the post. Orca is where it runs. Tokens cost OpenRouter’s price plus their fee, with no markup from us, and the harness underneath is built to spend fewer of them. SEO Helper needs no sandbox, so it uses no machine time, and every session shows exactly what it cost. Each step below builds on the one before, and you can stop after any of them.
No account yet? Sign up first. New accounts start with free credit and no card, and every step on this page runs on it, apart from DataForSEO’s own charges.

What you need

  • A DataForSEO account. SEO Helper reads every number from DataForSEO through its MCP server, with your own login. Use the API login and password from app.dataforseo.com, under API access: the API password is not your dashboard password.
  • DataForSEO’s charges go to that account, not to Orca. Each search is billed by DataForSEO at their prices, from your DataForSEO balance. The model’s tokens are paid from your Orca credit. Step 6 has both, measured.
  • A blog in a repo, and a coding agent, for the full flow. SEO Helper sees only what it’s sent: your posts, the topics you picked before, and your site’s essentials. Your coding agent sends those, checks the answers against your repo, and writes the post. From a terminal alone you get the topics and the brief.

What you’ll do

  1. Install the CLI and sign in.
  2. Copy SEO Helper with one command, or build it from code.
  3. Add your DataForSEO login to a vault, in your own terminal.
  4. Use it: topics, more topics, and a brief.
  5. Let your coding agent drive: it sends your posts, checks the topics, saves the brief and writes the post.
  6. See what it cost, and clean up.
You need a terminal on macOS or Linux. Python or Node is only needed to build SEO Helper from code (step 2).

Or hand this page to your coding agent

If you work in Claude Code, Codex, or Cursor, it can do the typing while you watch. Open it in your blog’s repo and paste this prompt:
The commands below work in bash, zsh, and fish, on macOS and Linux. Each command is on its own line.

1. Install the CLI and sign in

The script installs a single orca binary to ~/.local/bin. If your shell then says orca: command not found, add that folder to your PATH as the script suggests, and open a new terminal. On Windows, download the binary from the releases page. SEO Helper needs CLI 1.3.1 or later: an older CLI updates itself with orca update.
It prints a one-time code and a link to the Orca dashboard. Open the link, sign in, check that the code matches, and choose Approve. The CLI then prints “Logged in to Orca as” your role and organization. It works the same over SSH and inside a coding agent, which relays the code and the link to you. Check your credit:
balance is your Orca credit. The amount new accounts start with is on the pricing page.

2. Copy SEO Helper

SEO Helper is a model, a reasoning effort, its instructions, and one tool: DataForSEO’s MCP server, limited to ten read tools for keywords, difficulty, intent, page 1 results and page text. The instructions hold the method: how to read what it’s sent, the five gates every topic must pass, a DataForSEO budget for each turn, and the exact format of every reply. This is all of it:
The instructions are the whole program: Orca runs each conversation and keeps every message, and the model follows the rules. reasoning gives the model room to check every gate before it lists a topic. allowed_tools is why the agent can call only these ten of DataForSEO’s tools, and nothing that writes or costs more. The model name also says who pays: orca/openrouter/<id> runs on your Orca credit. See models and provider keys. Get SEO Helper into your account whichever way you like:
SEO Helper is shared as a kit, a link anyone can copy an agent from.
1

See what it holds

It lists what the kit would copy, one agent called seo-helper, and copies nothing. Read the list, and go on only if you want what it holds.
2

Copy it into your account

Once you’ve decided to copy it:
Or open SEO Helper’s kit page and choose Copy.
3

See your agent

It shows the same definition as the code above.
Either way, SEO Helper is now in your account. Its code is in orca-kits on GitHub.

3. Add your DataForSEO login

SEO Helper calls DataForSEO with your login, which you keep in a vault: Orca sends it to DataForSEO’s server and never shows it again, not to you and not to the model. Create the vault:
Then add your login. Run this yourself, in your own terminal, with your DataForSEO API login in place of YOUR_LOGIN:
It asks for your API password at a hidden prompt, so the password is never on your screen or in your shell history. If you hand this to a coding agent, it gives you the command and waits: never paste the password into a chat. Two messages tell you something is wrong here, and both cost nothing on DataForSEO:
  • “No credential in the attached vaults for https://mcp.dataforseo.com/mcp”: the chat didn’t name the vault with --vault dataforseo, or the vault holds no login yet. No session is created.
  • “DataForSEO refused the login in your dataforseo vault”: the login or the password is wrong, often the dashboard password instead of the API one. Delete the credential with orca vaults credentials delete, and add it again.

4. Use it

Ask for topics, with the vault:
SEO Helper sees only what’s in the message, so it needs to be told today’s date (it has no clock) and about your blog. Your coding agent adds a context block after your words (step 5): today’s date, the blog’s URL, your site’s essentials, and every post and earlier pick with its target keyword. With no date, SEO Helper asks for it and stops. From a terminal, write the question and the block in a file, message.txt, and send it on standard input:
A real run on 2026-10-18 sent that question with this block for orcapods.ai’s blog, 2 KB in all (the lists are shortened here):
It answered in 141 seconds with five topics, each with who ranks on page 1 today, what they cover, the gap the blog can win, and an angle: Then it listed all 15 candidates it dropped, each with the gate that dropped it, such as:
The reply ends with a JSON block holding the same topics and rejections, with the thresholds it applied, for your coding agent to check. Asking for five can return fewer. A topic is listed only if it passes all five gates, and SEO Helper never fills the list with one that failed: if three pass, you get three, and it says so. A run on 2026-10-17 listed three topics, then none. Every rejected topic is in the reply, with its gate and its number. Ask for more topics, and for a brief, by the keyword, exactly as the topics list gives it. Continue the same conversation with the session the first turn printed when it ended (session session_...), in place of SESSION_ID:
A number on its own doesn’t pick a topic. “More like #2” or “Brief #2” gets one line back, Which keyword? Ask as Brief: <keyword>, with the keyword as the topics list gives it., and no DataForSEO call, so a misread number never researches the wrong keyword. More like a keyword seeds new candidates from it alone, puts them through the same gates, and numbers them after the last topic in the conversation. On 2026-10-18, “More like what is an mcp server” listed five, with eight rejected: what is an mcp server (9,900 a month, difficulty 20), mcp vs rag (720, 3), mcp server vs api (170, 11), how to create mcp server (210, 7) and how to use mcp servers (110, 21). In a fresh conversation the seed itself can be listed; later in one, it collides with the topic you took it from. A brief is one keyword’s research, in a fixed format: a title line, a JSON block, then sections. It holds no prose, no voice and no word counts. A real brief for “what is mcp” on 2026-10-18 began like this (shortened):
  • secondary: related keywords, each with its volume and difficulty. titles and metas: 2 or 3 of each, each with its length in characters (titles at most 60, metas at most 155).
  • outline: H2s, each with the results that cover it, or "gap": true for what none of them covers. questions: from “People also ask” and related searches, only those about the keyword.
  • links: posts from the context block only, with an anchor and where each fits. sources: pages read in the session, each to verify before citing.
  • competitors: the top 3 results it read, each with what it covers. They have no word counts: your coding agent fetches the 3 pages and counts their words.
Then come the sections: Why this topic, What ranks now, The gap and the angle, Outline, Questions people ask, Titles and meta descriptions, Internal links, Sources worth citing, and the list to run on the finished post. The one in that brief:
Before you publish from a brief that’s a few days old, ask in the same conversation: Is page 1 for <keyword> still the same?, such as “Is page 1 for what is mcp still the same?”. SEO Helper reads page 1 again and answers from it.

The gates and thresholds

A topic is listed only if it passes all five gates: To use other thresholds, put a Gates: line in the message, in the context block or after the question: Gates: min_volume 50, max_difficulty 25, prefer_difficulty 15, intent informational. A threshold you leave out keeps its default. Location and language default to United States and English: change them with a Location and language: line. The JSON block repeats the thresholds it applied, so your coding agent can check them against what it sent.

5. Let your coding agent drive

The full flow runs from your coding agent, in your blog’s repo: it sends your posts, checks every topic against your repo, saves the brief, and writes the post. Give it Orca’s tools. orca mcp serve is an MCP server with one tool per CLI action, and it uses the login you already have.
Install the Orca plugin. It registers the MCP server and adds a skill that knows the CLI, including how to work with a research agent like this one:
Or add only the MCP server:
Start a new session of your coding agent so it loads the server. Then say “Let’s do SEO with seo-helper: top 5 topics for my next post.” A conversation goes like this:
  1. It sends the context. Your words, then the context block, at most 8 KB: today’s date, the blog’s URL, every post with its title, URL and target keyword, the topics picked before, and the essentials of your site brief. It starts the conversation with one call, chat({agent: "seo-helper", vaults: ["dataforseo"], message}), and later turns pass only the session.
  2. It checks the topics before you see them. It reads the reply’s JSON block and checks every topic against the thresholds it sent and against your repo, which it can read in full where SEO Helper saw only a list. It drops a topic that fails and says why, such as “Dropped #3: difficulty 67 is over your 35”.
  3. It asks by keyword. You say “More like #2” or “Brief for #4”; it sends More like <keyword> or Brief: <keyword> with that topic’s keyword exactly as the JSON block gives it.
  4. It saves the brief as it came, at .orca/seo-helper/briefs/<slug>.md, and shows you the outline and the title options.
  5. It measures the length. It fetches the brief’s 3 competitor URLs and counts their words, and keeps your post within that range unless your repo’s rules say otherwise.
  6. It writes the post in your repo’s layout, under your repo’s own rules (its CLAUDE.md or AGENTS.md, its README, its existing posts), never SEO Helper’s. Your one-off asks (“keep it short, for CTOs”) are its instructions for this post.
  7. It checks the post against the brief’s “Check before commit” list, and fixes what fails.
  8. It commits with its own git, a branch and a commit or a pull request, with the brief beside the post. Orca never needs a GitHub token. Then it deletes the session.
Your coding agent acts as you with these tools: it can create, delete, and spend. See use Orca from coding agents for every tool.

The site brief

Your coding agent keeps your site’s essentials in your repo, at .orca/seo-helper/site-brief.md: the blog’s URL, what you offer and to whom, the location and language, your lanes and any forbidden topics, the gate thresholds, and the folder for briefs. On first use it drafts the file from your repo and asks you to confirm the lanes, then sends its essentials in every first message. Voice, layout and figures stay in your repo’s own rules and never go to Orca. The file changes only at your word. Say “remember that” after a change, such as “max difficulty 25 from now on, remember that”, and your coding agent edits the line. SEO Helper never writes it.

6. See what it cost, and clean up

Every call is recorded with what it cost, down to the session:
orca sessions get SESSION_ID shows one session’s cost and tokens. DataForSEO’s charges show in your DataForSEO account. Measured on 2026-10-18 on a local Orca server, with Luna and no sandbox. The more-topics, brief and number turns ran with the agent exactly as it is on this page; the topics turn ran on an earlier version with the same topics instructions. A full conversation, topics then more topics then a brief, adds up to 0.349fromtheseturns:0.349 from these turns: 0.134 on Orca credit and 0.215onDataForSEO.Topicsandabriefaloneaddupto0.215 on DataForSEO. Topics and a brief alone add up to 0.233: 0.087and0.087 and 0.146. A turn’s model cost moves with how much the conversation already holds, and DataForSEO’s with how many candidates it checks.
  • Model tokens are paid from your Orca credit, since SEO Helper’s model starts with orca/.
  • DataForSEO is paid from your DataForSEO balance, at their prices. Each turn has a budget of DataForSEO calls in the instructions: a topics turn at most 6 keyword calls, 10 page 1 reads and 3 page reads; more topics 4 keyword calls and 5 page 1 reads; a brief 2 keyword calls, 1 page 1 read and 3 page reads.
  • SEO Helper uses no machine time. It runs with no sandbox.
The numbers for each plan are on the pricing page. See usage and wallet for the rest. Delete a conversation when you’re done with it:
Keep SEO Helper if you like it. To remove everything this page made instead, delete SEO Helper’s sessions, then SEO Helper, then list your vaults. Deleting an agent does not delete its sessions.
Then delete the vault named dataforseo, and the login in it, with its ID from that list:
If you built SEO Helper from code, revoke the key named seo-helper too: find its ID with orca keys list, then run orca keys revoke with it and --yes.

Where to go next

Margin Check

Another kit: what a deal does to margin, and who has to approve it.

Scout

Another kit: a research assistant that searches the web and answers with its sources.

Credentials and vaults

How vaults keep a login for an MCP server, and who can see it.

Questions

Post in #help on Orca’s Discord.