MCP Integration
Connect Claude, ChatGPT, Meta Muse, Grok Bot, Cursor or any other Model Context Protocol client to BlogSEO, so your AI assistant can work directly in your account: read your articles and keywords, plan the calendar, run SEO checks and publish.
The Model Context Protocol (MCP) is the open standard AI assistants use to talk to external tools. BlogSEO exposes a remote MCP server, so there is nothing to install and no API key to copy: your assistant signs in as you through OAuth and acts with your own permissions.
You can ask it in plain language to:
- Review what is published, what is scheduled and what is out of sync with your CMS
- Research keywords, refresh their metrics and grow topic clusters
- Fill the content calendar, rewrite headlines and move articles around
- Rewrite an article with AI, fix its SEO score and publish it to your CMS
- Score any content, benchmark it against the pages ranking for a keyword and apply the fixes
- Check a domain's rating, its backlink profile or the keyword density of any page
- Read your rankings, clicks and impressions from Search Console
MCP is a data integration, not a publishing destination. It sits alongside whatever CMS you already use, so connecting it never replaces or disables your WordPress, Shopify, Webflow or webhook integration.
Before you start
You need a BlogSEO account with at least one website where you are an admin or owner. Everything else is handled during the connection: your assistant registers itself, you sign in once, and you approve what it can reach.
Reading your data does not need an active subscription, so a lapsed plan still reads fine. A website that never completed checkout is refused, reads included, with one exception: Google Search Console. Actions gated behind a subscription in the app stay gated here.
Google Search Console without a plan
One part of the MCP server works on a website that has no plan and never started a trial: reading Google Search Console. You need a BlogSEO account, your website and a Search Console connection. No card is asked for.
- Open app.blogseo.io/auth/search-console and sign in, or create your account there.
- Add your website if your account has none yet.
- Click Connect Search Console and approve the Google screen. BlogSEO picks the property that matches your website, or lets you choose it.
- Add the server to your assistant as described under Connect your assistant.
Your assistant can then call query_search_console: clicks, impressions, click-through rate and average position over any period of the last 16 months, grouped by query, page, country, device or date, with filters on any of them. The numbers are read live from Search Console at the moment of the call. Without a plan, BlogSEO does not sync or store that data, and the other tools answer that the website has not been activated.
When you start a plan later, there is nothing to reconnect. The same connection feeds Analytics, and its first sync runs just before your first content calendar is planned, so that calendar already leaves aside the keywords a page of your site ranks for. A website that already has Search Console connected in the dashboard shows as connected on that page too, and query_search_console works for it straight away.
Server URL
The server URL is the same for every client:
https://mcp.blogseo.io/mcp
The server uses the streamable HTTP transport and OAuth 2.1 with PKCE and dynamic client registration. Most clients configure themselves once you point them at that URL.
Connect your assistant
| Client | How to add it |
|---|---|
| Claude (web, desktop, mobile) | Settings → Connectors → Add custom connector |
| Claude Code | claude mcp add --transport http blogseo https://mcp.blogseo.io/mcp |
| ChatGPT | Developer mode, then New Plugin with the server URL |
| Meta Muse (web, iOS, Android, WhatsApp) | Send the setup message in a chat, then open the sign-in link Muse sends back |
| Muse Code | mcp_servers entry in ~/.config/muse/settings.json, then muse mcp login blogseo |
| Grok Bot (desktop, iOS, Android) | Send the setup message to any Bot, then choose Authorize on the connect card |
| Cursor | .cursor/mcp.json entry, or Settings → Tools & Integrations |
| VS Code (Copilot) | code --add-mcp "{\"name\":\"blogseo\",\"type\":\"http\",\"url\":\"https://mcp.blogseo.io/mcp\"}" |
| Codex CLI | codex mcp add blogseo --url https://mcp.blogseo.io/mcp |
| Gemini CLI | gemini mcp add --transport http blogseo https://mcp.blogseo.io/mcp |
| Windsurf | mcp_config.json entry |
Details for each client are below. The last step is the same everywhere: a browser window opens, you sign in to BlogSEO, and you approve the access request.
Claude (web, desktop and mobile)
- Open Connectors in Claude and click Add custom connector.
- Enter the name
BlogSEOand the URLhttps://mcp.blogseo.io/mcp, then continue. - Claude probes the server and pre-selects Always required under Authentication and No client ID, register one automatically under OAuth client, both marked Detected. Keep them, add no request header, and click Add. Anthropic's hosted client metadata (CIMD) is not supported by the BlogSEO sign-in server yet, so leave that option off.
- Click Connect on the new BlogSEO connector, sign in to BlogSEO, and approve the access request.
There is no website to pick during the connection: the connector is tied to your BlogSEO account, and the consent screen lists the websites it can reach, which are those where you are an admin or owner. The assistant targets your only website automatically, or asks you to name one when you have several (see Choosing the website).
Claude Desktop cannot reach remote MCP servers through claude_desktop_config.json. Add BlogSEO
through Connectors instead. The connector then works in Claude on the web, on desktop and on mobile.
Claude Code
claude mcp add --transport http blogseo https://mcp.blogseo.io/mcp
Then type /mcp, choose to authenticate, and approve the access request in the browser window that opens. Tools appear as mcp__blogseo__*, and the prompt that connects a custom-built website appears as the /mcp__blogseo__plug_website command.
ChatGPT
- Turn on Developer mode under Settings → Security and login.
- Open New Plugin: name it
BlogSEO, keep Server URL, pastehttps://mcp.blogseo.io/mcp, keep OAuth. - Tick I understand and want to continue, then Create.
- Sign in to BlogSEO and approve. The plugin then shows up under Developer mode in the composer's + menu.
Meta Muse
Muse adds a service that is not in its connector list by building a custom connector when you ask for one in a chat. There is no form to fill: the message below gives it everything it needs.
-
Open Muse on the web, in the iOS or Android app, or in WhatsApp.
-
Send this message:
Add my BlogSEO connector: https://mcp.blogseo.io/mcp Setup: remote MCP over streamable HTTP with OAuth 2.1 and dynamic client registration. Send me the sign-in link and I will approve it. The server is stateless and replies in JSON, so no session ID is needed. Save it as a skill so every SEO question goes through the BlogSEO tools first, then list my BlogSEO websites. -
Open the sign-in link Muse sends back right away, as it expires quickly. Sign in to BlogSEO and approve the access request.
-
Muse lists your BlogSEO websites, which confirms the connection works.
From then on, ask Muse for SEO work in plain language. In its default Ask for some actions mode, Muse asks before write actions such as publishing an article: allow them once, for the current task, or always. You can change this under Settings → Permissions in Muse, and remove the connector under Settings → Connectors.
BlogSEO does not use API keys. If Muse asks for a token or an API key, reply that the server uses OAuth and ask for the sign-in link. Never paste your BlogSEO password into the chat.
Muse Code
Muse Code, Meta's coding agent, supports remote MCP servers with OAuth sign-in. Add BlogSEO to the mcp_servers block of ~/.config/muse/settings.json, keeping the keys already in the file:
{
"schema_version": 1,
"mcp_servers": {
"blogseo": {
"transport": "streamable_http",
"url": "https://mcp.blogseo.io/mcp"
}
}
}
Then sign in:
muse mcp login blogseo
Muse Code keeps and refreshes the tokens for you. muse mcp logout blogseo signs it out.
Grok Bot
Grok Bot adds a custom MCP server when you ask a Bot for one in a chat. There is no settings form: the message below gives it everything it needs. Grok Bot is included with paid Cursor plans and with a linked SuperGrok, SuperGrok Plus, SuperGrok Heavy or X Premium+ subscription.
-
Open the Grok Bot desktop app and start a chat with any Bot. Make the first connection on desktop: on iPhone, the browser may not return to the app after you sign in.
-
Send this message:
Add a custom MCP server called blogseo at https://mcp.blogseo.io/mcp It is a remote server (streamable HTTP) that signs in with OAuth, so leave the headers, Client ID and Client Secret empty. There is no API key. Show me the connect card so I can authorize it, then list my BlogSEO websites to confirm it works. -
Before saving anything, the Bot shows a card with the server name and URL. Check that the URL is exactly
https://mcp.blogseo.io/mcp, with no header and no API key, then confirm. -
On the connect card that follows, choose Authorize and sign in to BlogSEO in your browser. The consent page may name Cursor, which Grok Bot runs on. Check the websites under Websites it can use and click Approve within about 10 minutes.
-
The Bot lists your BlogSEO websites, which confirms the connection works. The connector is account-wide: every Bot on your account can use it, on desktop and on mobile.
From then on, type @ and pick blogseo to attach BlogSEO to a task, then ask for SEO work in plain language. With Auto-review on, a Bot may stop on a Review an action card before a BlogSEO tool runs: choose Allow once (Allow on mobile), Always allow to save a rule, or Deny. Manage the rules under Settings → General → Bot → Auto-review, and add an Ask first rule for publishing if you want to approve every article before it goes live. Approvals requested by a routine, a trigger or another Bot expire after about 10 minutes, and the action does not run.
On Cursor Teams and Enterprise, Grok Bot follows the team's connector policy, so an admin may need to allow BlogSEO first (see Troubleshooting). Admins cannot add it for members: each member connects BlogSEO themselves.
BlogSEO does not use API keys: Grok Bot signs in with OAuth, and the Bot never sees the token. If a card asks for a header, a token or an API key, leave it empty. Never paste your BlogSEO password into the chat.
Cursor
Add BlogSEO to your project's .cursor/mcp.json, or to the global one in ~/.cursor/mcp.json:
{
"mcpServers": {
"blogseo": {
"url": "https://mcp.blogseo.io/mcp"
}
}
}
Or install it in one click: Add to Cursor (opens the Cursor app).
BlogSEO is also listed on the Cursor Directory, which offers the same one-click install plus the BlogSEO plugin with its SEO skills.
Cursor then shows a Needs login prompt next to the server. Click it and approve the access request.
You can do the same from the UI: Settings, then Tools & Integrations, then Add custom MCP.
VS Code (GitHub Copilot)
code --add-mcp "{\"name\":\"blogseo\",\"type\":\"http\",\"url\":\"https://mcp.blogseo.io/mcp\"}"
Or add it to .vscode/mcp.json for a single workspace:
{
"servers": {
"blogseo": {
"type": "http",
"url": "https://mcp.blogseo.io/mcp"
}
}
}
Or install it in one click: Add to VS Code (opens VS Code).
Start the server from the MCP view in Copilot Chat and approve the access request.
Codex CLI
codex mcp add blogseo --url https://mcp.blogseo.io/mcp
codex mcp login blogseo
The login command opens your browser for the OAuth flow.
Gemini CLI
gemini mcp add --transport http blogseo https://mcp.blogseo.io/mcp
The browser opens for authorization the first time a BlogSEO tool is used.
Windsurf
Add BlogSEO to Windsurf's mcp_config.json, at ~/.codeium/windsurf/mcp_config.json (create it if it is missing). Windsurf uses serverUrl rather than url:
{
"mcpServers": {
"blogseo": {
"serverUrl": "https://mcp.blogseo.io/mcp"
}
}
}
Any other client
Point it at https://mcp.blogseo.io/mcp over the streamable HTTP transport and let it run the OAuth flow. Clients that support dynamic client registration need no further configuration.
Your first conversation
Ask your assistant to read your account:
list my BlogSEO websites and how many credits I have
That calls get_account, which returns your websites, your role on each of them, your credit balances and your plan. It is the quickest way to confirm the connection works.
After that, plain requests are enough:
what did we publish last month, and is anything out of sync with WordPress?
Choosing the website
If your organization has a single website, every action targets it automatically. If you have several, ask the assistant to list them first, or name the site in your request:
schedule three articles about winter tyres on example.com next week
Each action takes a website_id, and the assistant can only reach websites where you are an admin or owner. Websites where you are only a member are never listed and cannot be used, even for reading.
Plug a custom-built website
If your website is custom-built (Next.js, Astro, Rails, a site made with an AI builder, anything without a supported CMS), your assistant can connect it for you. Ask it:
plug this website into BlogSEO
In Claude Code the same request is available as the /mcp__blogseo__plug_website command, and clients that list MCP prompts, such as Claude and Cursor, show it as "Plug my website into BlogSEO". Elsewhere the plain request works: the tool descriptions give the assistant the steps for both options.
The assistant offers two options and sets up the one you choose:
- Hosted blog on a subdomain. BlogSEO serves the blog at
blog.yourdomain.comwith HTTPS, a sitemap, an RSS feed and your branding. The assistant creates it withcreate_hosted_blog, gives you the CNAME record to add (or adds it itself when it can manage your DNS), then pollsget_hosted_blog_statusuntil the blog is connected. No code to write, but the blog lives on a subdomain and cannot be combined with a CMS integration. - Custom webhook into your codebase. The assistant reads
get_webhook_contract, builds the endpoint and the blog pages in your project, deploys, connects the endpoint withconnect_custom_webhook, stores the shared secret in your environment variables and verifies the delivery withtest_custom_webhook. The blog stays on your main domain, in your own design.
Both paths end with auto-publish on, so every article BlogSEO generates is published without further action. The Hosted Blog and Custom Webhook pages describe the underlying integrations.
What your assistant can do
BlogSEO exposes 60 tools. Your assistant picks them from what you ask, so you never have to name one. Costs are in AI brain credits and match the app.
Account
| Tool | Cost | What it does |
|---|---|---|
get_account | Free | Lists your websites with their role, credit balances and plan. The recommended first call. |
get_credit_balance | Free | AI brain credits, article credits and backlink credits of one website. |
Articles
| Tool | Cost | What it does |
|---|---|---|
list_articles | Free | Lists generated articles with status and target keyword, filterable by search, status and date. |
get_article | Free | One article with its metadata, translations and optionally its full body. |
update_article_headline | Free | Renames an article or one of its translations. |
update_article_meta_description | Free | Rewrites the SEO meta description. |
update_article_slug | Free | Changes the URL slug. |
update_article_cover_alt_text | Free | Sets the alt text of the cover image (shared by every language). |
update_article_content | Free | Replaces the body with the markdown you send and recomputes the SEO score. Works on translations too. |
create_image_upload | Free | Prepares the upload of an image file from your machine, for the two tools below. |
set_article_cover_image | Free | Replaces the cover image with an image from a public URL or an uploaded file, with its alt text. |
upload_article_image | Free | Hosts an image from a public URL or an uploaded file and returns its address to use inside the body. |
edit_article_with_ai | 1 credit per language | Rewrites the body with AI following your instructions. |
batch_edit_articles_with_ai | 1 credit per article | Queues the same AI rewrite across up to 50 articles. |
publish_article | Free | Queues an article for publishing to a connected integration. The assistant first tells you where it would land and whether it goes live or as a draft, and publishes only once you agree. |
sync_article_to_cms | Free | Pushes current content to every connected CMS at once, clearing the Out of Sync state. The assistant first lists the CMSs it would overwrite and syncs only once you agree. |
Images need no public URL. In a client with a terminal (Claude Code, Cursor, Codex CLI, Gemini CLI, Windsurf, VS Code), create_image_upload gives the assistant a one-time upload address and a ready-to-run command; it sends the file, then passes the resulting upload_id to set_article_cover_image or upload_article_image. Files go to a private staging area, are accepted up to 10 MB, are deleted the moment they are used and otherwise after 6 hours, with at most 10 waiting per connection. On claude.ai, which cannot read files from your computer, set the cover in the dashboard instead.
Content calendar
| Tool | Cost | What it does |
|---|---|---|
list_scheduled_articles | Free | The upcoming calendar, one row per day slot. |
schedule_article | Free | Adds a custom article on a given date, with a keyword and a brief if you want. Refuses a full day and names the next free date. Consumes 1 article credit when it is generated. |
update_scheduled_article | Free | Edits the headline, brief, keyword or products of a pending article. |
reschedule_article | Free | Moves an article to another date, or swaps with the article already there. Refuses a full day and names the next free date. |
delete_scheduled_article | Free | Unschedules an article: removes it from the calendar before it is generated. |
suggest_headline | Free | Asks the AI for an alternative headline without saving it. |
regenerate_headlines | Free | Queues a rewrite of every upcoming automatically planned headline. |
Keywords
| Tool | Cost | What it does |
|---|---|---|
list_keywords | Free | Tracked keywords with volume, difficulty, CPC, opportunity and intent. |
get_keyword | Free | One keyword with 90 days of position history and the articles targeting it. |
get_keyword_rankings | Free | Rank tracking from Search Console: position, ranking page, clicks, impressions and CTR per keyword, with position and impression filters. |
get_keyword_trends | Free | Compares the last 7, 28 or 90 days with the period before: clicks, impressions and position per keyword, and which pages lost traffic. |
find_keyword_cannibalization | Free | Keywords where a page of yours already ranks and a BlogSEO article targets the same keyword, with a consolidate or differentiate call. |
add_keywords | 1 credit | Adds up to 20 keywords as written, with their volume, difficulty and CPC. |
research_keywords | 1 credit | Expands up to 20 seed keywords into related ideas and adds the relevant ones. |
refresh_keyword_metrics | 1 credit | Re-fetches metrics for one keyword plus up to 49 companions. |
expand_keyword_cluster | 1 credit | Grows a topic cluster with semantically related ideas. |
schedule_articles_for_keywords | Free | Queues one article per keyword in the calendar. |
set_keyword_favorite | Free | Stars or unstars a keyword. |
delete_keywords | Free | Permanently deletes keywords. Refused when an article already targets one. |
SEO analysis
| Tool | Cost | What it does |
|---|---|---|
check_article_seo_score | Free | The on-page score of one of your articles, with every failing check and how to fix it. |
check_seo_score | Free | The same score for any content you paste, even from a site that is not in BlogSEO. |
run_advanced_seo_check | 1 credit | Benchmarks one of your articles against the pages ranking for its keyword. Runs in the background. |
get_advanced_seo_report | Free | Reads the stored competitor analysis: gaps, strengths, recommendations and recommended keywords. |
run_advanced_seo_check_for_content | 1 credit | The same competitor benchmark for content you paste, returned in the same call. Takes 1 to 3 minutes. |
improve_article_seo | 1 credit | Rewrites one of your articles to fix its failing checks, like the Improve with AI button. |
improve_content_seo | 1 credit | Returns an SEO-improved version of content you paste, without saving anything. |
Analytics
| Tool | Cost | What it does |
|---|---|---|
query_search_console | Free | Live Google Search Console data for the website: clicks, impressions, CTR and position by query, page, country, device, date or search appearance, with filters, position and impression thresholds and sorting. Works without a plan once Search Console is connected. Up to 500 rows per call, 200 calls per hour per website. |
get_ai_visibility | Free | The AI Visibility dashboard: how often ChatGPT, Claude, Gemini, Perplexity and the others mention and cite you per prompt, the competitor leaderboard, citations and recommendations. Needs the AI Visibility add-on. |
Free SEO tools
| Tool | Cost | What it does |
|---|---|---|
check_domain_rating | Free | The Ahrefs Domain Rating of any domain. |
check_keyword_density | Free | Keyword density of any public page URL or block of text, with the top phrases. |
check_backlinks | 1 credit | The backlink profile of any domain: referring domains, anchors, top links and Domain Rating. |
Settings, integrations and backlinks
| Tool | Cost | What it does |
|---|---|---|
get_website_settings | Free | Your website configuration, grouped like the settings tabs. |
update_general_settings | Free | Sitemap URL, automatic scheduling, publishing time and timezone. |
update_content_settings | Free | Default language, audiences, offer summary and writing instructions. |
update_image_settings | Free | Image styles, brand color and image instructions. |
update_competitors | Free | The competitor list used for tracking and analysis. |
list_integrations | Free | Connected CMS, e-commerce and webhook integrations, plus Search Console. |
get_backlinks_overview | Free | Domain Rating, backlink credits and the backlinks you received. |
convert_credits_to_backlink_credits | 1 to 100 credits | Converts AI brain credits into backlink credits, 5 backlink credits per AI brain credit. Irreversible. |
Connect a custom-built website
| Tool | Cost | What it does |
|---|---|---|
create_hosted_blog | Free | Creates the hosted blog on a subdomain such as blog.example.com and returns the CNAME record to add. |
get_hosted_blog_status | Free | Re-checks DNS and SSL like the Refresh status button and lists the records still to add. |
get_webhook_contract | Free | The custom webhook contract: headers, payload fields, multi-language delivery, retries and response rules. |
connect_custom_webhook | Free | Connects a deployed endpoint as the custom webhook and returns the shared secret once. |
test_custom_webhook | Free | Sends a sample article to the connected webhook, or to an endpoint before connecting it. |
Prompts to try
- "Schedule an article for October 3 targeting the keyword 'cold email deliverability', titled 'Cold email deliverability in 2026', and brief it to compare Gmail and Outlook filtering." If that day is already full for your publishing frequency, the assistant is told the next free date and asks you whether to use it.
- "Replace the cover image of the article about winter tires with this image: https://..."
- "Set ./covers/winter-tires.jpg as the cover of the article about winter tires." In Claude Code, Cursor and the other terminal clients, the assistant uploads the file itself.
- "Give the cover of the article about winter tires a proper alt text." Inline images keep their alt text in the markdown, so "fix the alt texts of the inline images" goes through the body instead.
- "Rewrite the introduction of the article about winter tires, keep the rest as is." The assistant reads the body, edits the markdown and saves it back.
Each of these runs end to end with the tools above. Copy one into your assistant as is.
Page-2 keywords to page 1
Show my tracked keywords ranking between position 5 and 15 with at least 200 impressions, sorted by impressions. For each one give me the ranking page, its CTR, and the single on-page change most likely to move it to page 1.
Weekly. Free: it reads Search Console and scores the ranking pages.
Catch traffic loss early
Compare the last 28 days with the 28 days before for my keywords and pages. Which pages lost the most clicks? For the top 10, tell me the likely cause and the one fix to recover each.
Monthly. Free.
Stop your own pages from competing
Find the keywords where one of my pages already ranks and another BlogSEO article targets the same keyword. For each, say whether to consolidate or differentiate, and which URL should win.
Quarterly. Free.
See how often AI models mention you
Read my AI visibility for the last 30 days and build an HTML dashboard: overall mention rate, mention rate per platform, the competitor leaderboard with my brand highlighted, a table of every prompt with its status per platform, the most cited domains, and the recommendations sorted by priority. Green means mentioned, red means not.
Monthly. Free with the AI Visibility add-on.
Fix the worst articles first
Score every article published this month and list the failing checks by how often they occur. Then fix the three lowest-scoring articles.
Monthly. Scoring is free; each rewrite costs 1 credit and asks for confirmation first.
Benchmark one article against the pages that rank
Benchmark my article about winter tyres against the pages ranking for its keyword, then apply the recommendations.
As needed. 1 credit for the benchmark and 1 for the rewrite.
Example prompts
Shorter things to ask once BlogSEO is connected.
Reviewing your content
- "How many articles are scheduled for next month?"
- "Show me everything published this quarter that targets a keyword we rank below position 10 for"
- "Which articles are out of sync with my CMS?"
- "Read me the intro of the article about winter tyres"
Planning the calendar
- "Fill next week with articles about e-bike maintenance"
- "Move Thursday's article to the following Monday"
- "Suggest a better headline for the article scheduled on the 12th"
- "Schedule one article for each of my five favorite keywords"
Keyword work
- "Research keywords around cold email deliverability"
- "Which of my keywords gained positions in the last 30 days, and which page ranks for each?"
- "Expand the cluster around indoor cycling into related ideas"
- "Refresh the metrics for my top 20 keywords"
Improving articles
- "Score my article about hydraulic brakes and tell me what is failing"
- "Fix the failing SEO checks on that article"
- "Rewrite the meta description of the last three published articles so they mention the brand"
- "Here is a draft from our newsletter: score it and give me an SEO-optimized version"
Publishing
- "Publish the article about tubeless tyres to WordPress"
- "Sync everything that is out of sync"
SEO research
- "What is the Domain Rating of competitor.com?"
- "Show me the backlink profile of competitor.com"
- "What is the keyword density of https://example.com/blog/post?"
Settings
- "Set the publishing time to 8am Paris time"
- "Add these three competitors to my website"
- "What writing instructions is my website using?"
Connecting a custom website
- "Plug this Next.js site into BlogSEO with a webhook and test it"
- "Set up the BlogSEO hosted blog on blog.example.com and tell me which DNS record to add"
- "Is my hosted blog connected yet?"
Credits
Actions that spend AI brain credits cost what the same action costs in the app. Every one of them first gives your assistant the price and your balance, and it has to confirm with you before anything is charged:
You: research keywords around "cold email deliverability"
Assistant: This will use 1 AI brain credit and you have 31. Should I run it?
You: yes
Assistant: Added 24 keywords. 30 AI brain credits left.
Every credit-spending result ends with your remaining balance.
A few specifics:
- Scheduling an article is free, but generating it later consumes 1 article credit, exactly as in the app.
check_backlinkscosts 1 credit per request, including when the profile comes from cache.improve_article_seoandedit_article_with_aicharge after the rewrite.improve_content_seoreturns the improved text without touching your saved article.- Batch actions charge per article, so ask for the count before confirming a large batch.
Permissions and security
- Your assistant acts as you, on the websites where you are an admin or owner. A plain member of an organization gets nothing over MCP, and an account with no organization where you are an admin or owner cannot approve a connection at all.
- Payment details, Stripe identifiers, API keys and integration tokens are never returned. The one exception is the webhook shared secret, which
connect_custom_webhookreturns once so the assistant can store it in your deployment's environment variables. Billing cannot be changed through MCP: no cancelling, no purchasing, no plan changes. - The consent screen names the assistant, says where it will send you back, and lets you choose which websites it may use. "All websites where I am an admin or owner, including the ones I add later" is ticked by default. Untick it to pick specific websites: search the list, or use Select all and Unselect all. Only websites where you are an admin or owner are offered; websites where you are a member are never included.
- Deleting a keyword that an article already targets is refused.
- Image files uploaded through
create_image_uploadland in a private bucket that is never served publicly. Each upload address works once and expires after 2 hours; the file is deleted as soon as it is used, or after 6 hours if it is not.
Managing connected assistants
Open Integrations, then MCP in your dashboard, or Settings, then Security. Both list every connected assistant with the date it was connected and the websites it may use, and let you revoke it. To change the websites, revoke the assistant and connect it again.
Revoking takes effect immediately for new sessions. A session already in progress stops working within an hour. In Muse, also remove BlogSEO under Settings → Connectors. In Grok Bot, open Plugins in the sidebar, open blogseo and choose Remove, or ask a Bot to remove the blogseo MCP server.
Troubleshooting
The assistant says it cannot reach the server. Check the URL is exactly https://mcp.blogseo.io/mcp with no trailing slash, and that you completed the sign-in step.
Muse asks for an API key or a token. BlogSEO has none. Reply that the server uses OAuth with dynamic client registration and ask Muse to send the sign-in link. If it still asks for a token, the Muse app cannot complete the sign-in on your account yet: connect through Muse Code or another assistant listed under Connect your assistant.
No sign-in link arrives in Muse, or its answers ignore your BlogSEO data. Ask "Send me the sign-in link for the BlogSEO connector". If answers still lack your data, send the setup message again so Muse saves the connector.
Grok Bot never starts the sign-in, or shows "fetch failed" or a redirect_uri error. Check that the URL on the card is exactly https://mcp.blogseo.io/mcp with no header set. Then remove the server and add it again from the desktop app rather than the phone.
No connect card appears, or Grok Bot shows BlogSEO as "Added" but the Bot cannot use it. "Added" does not mean signed in. Open Plugins in the sidebar (Marketplace → Your plugins in some versions), open blogseo and choose Authorize. On a connect card, Reopen brings back a sign-in that is waiting and Retry restarts one that failed. Finish the BlogSEO sign-in within about 10 minutes.
On iPhone, the browser stays on a Cursor page after you click Approve. The sign-in usually went through: switch back to Grok Bot yourself, and BlogSEO shows as connected once the app refreshes. For the first connection, prefer the desktop app.
Grok Bot shows "Disabled by team admin". Your Cursor team admin must allow BlogSEO on the Plugins page of the team dashboard and, if the team uses an MCP allowlist (Enterprise), add https://mcp.blogseo.io/mcp to it. Then restart Grok Bot.
The client shows "Needs login" or lists no tools. The OAuth flow was not finished. Click the login prompt (/mcp in Claude Code, the Needs login badge in Cursor, the MCP view in VS Code) and approve the request.
"Your account has N websites, pass website_id". The message lists every website with its id: name the site in your request.
"You are only a member of this website's organization". MCP needs the admin or owner role on the website. Ask your organization owner for it, or use the app, where members keep their usual access.
"This feature needs an active subscription". The action is gated in the app too. Reading your data keeps working.
"Google Search Console is not connected for this website yet". query_search_console needs a Search Console connection on the website. An admin or owner connects it at app.blogseo.io/auth/search-console, with or without a plan. If the message says Google no longer accepts the connection, reconnect it from the same page.
Tools stopped working after you revoked an assistant. That is expected. Reconnect it from your client to get a new grant.
"No uploaded image found for upload_id". The file was not sent to the upload address, the address expired (2 hours), or the file was already used or swept (6 hours). Ask the assistant to call create_image_upload again and rerun the upload command.
Actions time out on long rewrites. AI rewrites and competitor benchmarks take one to three minutes. Some clients give up sooner; ask the assistant to retry, or use the background variants (run_advanced_seo_check then get_advanced_seo_report).