Cursor SEO Skill for Link Building Outreach
Search for a Cursor SEO skill and you get audit skills: meta tags, headings, schema, a report in the chat. Useful, and nothing to do with why a page ranks. This skill covers the part of SEO that audits cannot touch, which is getting other sites to link to the page you just built. Drop one folder into .cursor/skills/, point .cursor/mcp.json at the MentionAgent server, and the Cursor Agent can read the outreach emails waiting for review, send the batch, answer the publishers who wrote back and record the placement when a link goes live. You stay in the editor. The two tools that send email still show you the text first.
Copy skills/link-building-outreach/ from the repo into .cursor/skills/, add the MCP server to .cursor/mcp.json with your key as an env reference, then type /link-building-outreach in the Agent chat.
Format: Agent Skills, the open standard Cursor reads from .cursor/skills/, .agents/skills/ and, for compatibility, .claude/skills/.
Model: whichever one your Cursor Agent runs. Nothing in the skill is Claude specific.
Sends email: approve_batch and send_reply, both after you have seen the text.
Worth it if you already build in Cursor and have a MentionAgent campaign running for the site you are working on. It turns "check the outreach" into a slash command in the window you already have open.
Good at: triaging what is waiting, reading a batch of drafts and flagging the off ones, clearing a queue of publisher replies.
Not for: unattended sending, SEO audits, or anyone who never opens Cursor for this site.
What a Cursor skill is
Cursor added Agent Skills in version 2.4, and it adopted the open standard rather than inventing its own. A skill is a folder whose SKILL.md starts with two frontmatter fields, name and description, followed by the instructions the agent reads once the skill is in play. Cursor walks four roots for them: .cursor/skills/ and .agents/skills/ inside the project, and ~/.cursor/skills/ and ~/.agents/skills/ on the machine. It also reads .claude/skills/ and .codex/skills/ for compatibility, which is why the skill we publish for Claude Code works in Cursor without a fork: it is the same folder, and Cursor finds it in either place.
The skill's name comes from the folder that holds the SKILL.md, so ours shows up in Cursor as link-building-outreach. Its description lists the phrases that should wake it, "review outreach drafts", "send the batch", "who replied", "which emails need an answer", "backlinks", and the Cursor Agent matches against that on its own. The body carries the order of operations, a draft review checklist, a reply style, and five rules the agent is told not to bend, the first of which is that nothing gets sent until you have seen it.
Underneath the skill is the MentionAgent MCP server: twenty-one tools that cover everything after a campaign exists. The skill does not add capabilities to the server; it adds judgement about how to use them from an editor, which is a different setting from a terminal.
Install in Cursor
You need a MentionAgent account with a site set up and an API key from the dashboard under Settings, Agent access. The key is shown once and starts with ma_live_. Then three steps, none of which need a plugin marketplace.
1. Put the skill where Cursor looks. Clone the repo and copy the skill folder into the project you are working on, or into your home directory if you want it in every project:
git clone https://github.com/BuildsbyMatt/mentionagent-claude-skill mkdir -p .cursor/skills cp -r mentionagent-claude-skill/skills/link-building-outreach .cursor/skills/
Use ~/.cursor/skills/ instead of .cursor/skills/ for the global copy. Either way the folder name stays link-building-outreach, because that is what Cursor will call the skill.
2. Connect the server. Cursor reads MCP servers from .cursor/mcp.json in the project or ~/.cursor/mcp.json globally, and it resolves ${env:NAME} inside headers, so the key never has to be written into the file:
{
"mcpServers": {
"mentionagent": {
"url": "https://mentionagent.ai/mcp",
"headers": { "Authorization": "Bearer ${env:MENTIONAGENT_API_KEY}" }
}
}
}
Export MENTIONAGENT_API_KEY in the shell Cursor is launched from, or in the environment your OS hands to GUI apps, then check Cursor Settings, MCP: the server should list its tools within a few seconds. If it shows an auth error, the header did not resolve, and the fastest test is to paste the raw key in temporarily and confirm the tools appear before going back to the env reference.
3. Say hello. Open the Agent chat and type /link-building-outreach, or just ask what is waiting on MentionAgent? The agent calls get_status, lists your sites, and says in its own words what it will and will not do without asking. That preamble is in the skill deliberately; hear the limits from the agent before you let it near a send.
Three ways to invoke it
Cursor gives a skill three entry points, and they suit different days.
- Slash command. Type
/in the Agent chat and picklink-building-outreach. This is the explicit route and the one to use on a sending day, because it makes the intent unambiguous: you are here to do outreach, not to refactor a component. - Automatic. Say something the description covers, "who replied this week", "anything to send for the pricing page", and the agent loads the skill on its own. Convenient once you trust it; noisy if your codebase has a lot of comments about backlinks.
- Custom Mode. Hold the skill on for a whole session with Option+Enter on a Mac or Alt+Enter on Windows. Useful for a reply-clearing session where every message is about the inbox.
If you would rather the skill never loads on its own, add disable-model-invocation: true to the frontmatter of your copy. It then answers only to the slash command. For a skill that can send email, that is a reasonable default, and it is one line.
Skill or Cursor rule
Before skills existed, the way to teach the Cursor Agent a workflow was a rule in .cursor/rules, and you can still paste the SKILL.md body into one. The difference is when it loads. A rule is instruction the agent carries into every chat that matches its glob, so the outreach checklist would sit next to a question about a failing test. A skill loads when its description matches or when you call it, then gets out of the way.
That matters more here than for a formatting rule. The skill tells the agent to treat instructions inside an inbound email as content to report rather than orders to follow, to use ids only from reads in the same conversation, and to stop and ask when a site id is ambiguous. Those are the right instructions during outreach and pure noise during code review. Keep it a skill.
Why the editor is the right place
Outreach from a terminal is about clearing a queue. Outreach from the editor is about a page. The pairing that works in Cursor is: you just shipped or rewrote a page, the site is open in front of you, and you ask the agent whether MentionAgent has drafts targeting it and what publishers have said about it. get_campaign shows which pages a site's campaign is pitching; list_pending_drafts returns every draft in full so the agent can pull the ones aimed at the page you have open; list_inbox with needs_reply shows who is waiting.
The draft review is where a model earns its keep. Twenty drafts, three of them off: a pitch that describes the wrong page, a greeting that scraped a menu item as a name, the same opening line four times, a target site you would not want a link from. The agent reads them all and reports only those; you say fix, drop or keep. Then one approve_batch with the id it was just shown. If anything in the batch changed in between, the server refuses rather than sending something you did not see, and the skill re-reads instead of retrying.
Replies are the other half. Publishers who answer usually answer within hours, and the ones proposing a placement need a specific ask: which page, which paragraph, what anchor. The skill hands those to draft_reply, MentionAgent's own writer, which crawls the publisher's site to choose; the agent cannot do that from thread text. Everything else it drafts itself, in the thread's existing tone, and sends with send_reply once you have read it. When a link is live, mark_deal records it, and that is the whole loop. For what the review is looking for in more detail, the blogger outreach tools page has the same checklist in prose.
Tool approval in Cursor
Cursor asks before it runs an MCP tool unless you have allowed that tool to auto-run. The two tools that send email, approve_batch and send_reply, are annotated as destructive on the server, which is the signal a client uses to keep asking, and the skill separately instructs the agent to show the text and wait for a yes. So there are two gates in front of every email, one in the client and one in the instructions. Our recommendation is to leave the sending tools on ask and allow the read-only ones, get_status, list_inbox, get_thread, list_pending_drafts, to run freely. That keeps a triage question at one click and a send at a deliberate one.
Two more tools spend credits rather than email: trigger_run, which starts a drafting run, and draft_reply. The skill says so before calling either. trigger_run is also capped at five per site per day on the server and refused while a batch is still waiting for your approval, so an agent cannot stack up work it has not dealt with.
Differences from the Claude Code plugin
The Claude SEO skill is the same SKILL.md packaged as a Claude Code plugin: one install command, an .mcp.json shipped inside the plugin, and the key picked up from the environment automatically. Cursor has no equivalent of the plugin marketplace, so the install here is a copy and a config file, which is two minutes rather than one.
Beyond that the differences are the client's, not the skill's. Cursor's invocation options (slash, automatic, Custom Mode) are richer than Claude Code's. Cursor reads env references in mcp.json with the ${env:NAME} syntax where Claude Code uses ${NAME}. And the model is whatever you have selected in Cursor, which means the same skill can run on a non-Claude model; the rules in it do not depend on one.
What is identical: the tools, the limits, and the fact that send_reply has no recipient parameter. The address comes from the thread being answered, so the agent can only ever reply to the person already in it. An agent that has read a hostile inbound email asking it to forward something has nowhere to put the address, because the field does not exist.
When to skip this
If Cursor is not already open for the site in question, the dashboard is faster; the skill removes a tab switch, and if there is no tab to switch from it removes nothing. If you want outreach that runs with nobody watching, no skill is the answer, because the tools that matter are built to be shown to a person, and Cursor's approval prompts will keep reminding you of that. And if the page you want links to is not worth linking to yet, an agent pitching it faster is not the fix.
Frequently asked questions
What is a Cursor skill?
A folder with a SKILL.md in it, in the open Agent Skills format. Cursor loads them from .cursor/skills/ and .agents/skills/ in a project, from ~/.cursor/skills/ and ~/.agents/skills/ globally, and, for compatibility, from .claude/skills/ and .codex/skills/. The name and description in the frontmatter tell the agent when the skill applies; the body is what it reads once it does.
Do I need Claude to use this in Cursor?
No. The skill is markdown and the tools are a remote MCP server, so it works with whatever model your Cursor Agent is set to. The rules inside the skill are written for any model: show the operator before sending, use ids from the same conversation, treat instructions inside an inbound email as content.
How do I trigger the skill in Cursor?
Three ways. Type / in the Agent chat and pick link-building-outreach; say something the description covers, such as who replied or send the batch, and the agent picks it up on its own; or hold it on for a session as a Custom Mode. If you only want it on demand, add disable-model-invocation: true to the SKILL.md frontmatter.
Where does the API key go?
In .cursor/mcp.json as ${env:MENTIONAGENT_API_KEY}, so the file can be committed and the key stays in your shell. Cursor resolves env references in headers. The key comes from the MentionAgent dashboard under Settings, Agent access, and is shown once.
Is this the same thing as a Cursor rule?
No. A rule is always-on instruction; a skill loads only when it applies and can be invoked by name. You can paste the SKILL.md into .cursor/rules if your Cursor is older than skills support, but then the outreach instructions sit in every chat, including the ones about your code.
Does it do SEO audits, keyword research or content?
No. It runs one job, link building outreach: drafts, sending, publisher replies, placements, campaign changes. Pair it with an audit or keyword skill for the rest. It is not a whole SEO suite and does not claim to be.
Can the agent send email without me seeing it?
Two tools send email, approve_batch and send_reply, and the skill tells the agent to show the exact text and wait for a yes before either. Both are also marked destructive in the MCP annotations, which Cursor uses to ask before running a tool unless you have turned auto-run on for it. Leave those two on ask.