Generate GEO/AEO-optimized articles and publish them to WordPress from your AI agent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
ChimpanSEO API key, created in the dashboard under Settings > API/MCP. Requires an active free trial or paid plan.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Fetches the site's homepage and checks the on-page technical SEO factors that matter for both Google and AI citation — title/meta tags, canonical, H1, mobile viewport, HTTPS, Open Graph, JSON-LD structured data, image alt coverage, indexability, response time. Each finding includes a concrete tip, not just pass/fail. Fast (a few seconds) — no background job needed.
Site id, from list_sites
Fetches the site's homepage and checks the on-page technical SEO factors that matter for both Google and AI citation — title/meta tags, canonical, H1, mobile viewport, HTTPS, Open Graph, JSON-LD structured data, image alt coverage, indexability, response time. Each finding includes a concrete tip, not just pass/fail. Fast (a few seconds) — no background job needed.
| Argument | Type | Description |
|---|---|---|
| siteId* | string | Site id, from list_sites |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"siteId"
],
"properties": {
"siteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site id, from list_sites"
}
}
}Removes a slot from the editorial calendar, from list_scheduled_articles. Same as deleting it from the dashboard calendar — works regardless of the slot's current status, so double-check it hasn't already published if that matters (see list_scheduled_articles' wp_post_id/article_id fields).
| Argument | Type | Description |
|---|---|---|
| scheduledArticleId* | string | The slot id, from list_scheduled_articles or schedule_article |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"scheduledArticleId"
],
"properties": {
"scheduledArticleId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The slot id, from list_scheduled_articles or schedule_article"
}
}
}Starts generating a new SEO/GEO-optimized article via AI for a given topic and site. Counts against the account's monthly article quota, same as generating from the dashboard. Does NOT publish it — call publish_article separately once you're happy with it. ASYNC: this returns a jobId immediately, it does NOT wait for the article. Generation typically takes 1-6 minutes (reasoning model, non-streaming) — poll get_generation_status with the returned jobId every ~15-20s until status is "ready" or "error". (Older integrations that awaited this call directly would hit their own client's default request timeout, typically 60s, long before generation finished — this is why it's async now.)
| Argument | Type | Description |
|---|---|---|
| topic* | string | The article topic or working title |
| siteId | string | Target site id (from list_sites) — determines language, tone and SEO tags used |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"topic"
],
"properties": {
"topic": {
"type": "string",
"minLength": 3,
"description": "The article topic or working title"
},
"siteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Target site id (from list_sites) — determines language, tone and SEO tags used"
}
}
}Fetch one article's full HTML content and metadata by id — list_articles deliberately omits content to stay compact, use this to actually read what was generated (e.g. after generate_article or refresh_article, or before deciding whether to publish it).
| Argument | Type | Description |
|---|---|---|
| articleId* | string | The article id, from list_articles, generate_article or get_generation_status |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"articleId"
],
"properties": {
"articleId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The article id, from list_articles, generate_article or get_generation_status"
}
}
}Poll the status of a generate_article or refresh_article call by jobId. Returns status: "pending" (still working), "ready" (done — includes articleId, title, excerpt, charCount), or "error" (includes the error message).
| Argument | Type | Description |
|---|---|---|
| jobId* | string | The jobId returned by generate_article |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The jobId returned by generate_article"
}
}
}Check the current plan, monthly article limit, articles used this month and articles remaining — call this before generating to use the quota consciously instead of guessing.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List the most recent articles generated on this account, with title, status, site and link.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max number of articles to return |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Max number of articles to return"
}
}
}List scheduled_article slots (past and future) — topic, target date, status, site. Use this before schedule_article to see what's already queued and avoid duplicating dates/topics.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| siteId | string | Filter to one site's slots only |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1
},
"siteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Filter to one site's slots only"
}
}
}List the WordPress/Framer/Webflow sites connected to this ChimpanSEO account, with id, name, url, platform and language.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Publish (or save as draft) a previously generated article to its WordPress site. Only works for WordPress sites — Framer/Webflow sites are copy-paste only (Beta) and are not supported here.
| Argument | Type | Description |
|---|---|---|
| siteId* | string | The WordPress site id to publish to |
| status | string | |
| articleId* | string | The article id, from generate_article or list_articles |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"articleId",
"siteId"
],
"properties": {
"siteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The WordPress site id to publish to"
},
"status": {
"enum": [
"draft",
"publish"
],
"type": "string",
"default": "publish"
},
"articleId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The article id, from generate_article or list_articles"
}
}
}Rewrites an existing article to be current and more SEO/AEO-optimized — updates dates/stats/examples, improves headings, adds a FAQ section, adds 300+ words. Same action as the dashboard's "Migliora & aggiorna" button. If the article is already published to WordPress, the refreshed version is automatically re-published there too (title and WordPress status unchanged); otherwise only ChimpanSEO's own copy is updated. ASYNC: returns a jobId immediately — poll get_generation_status with it, typically ready in 1-4 minutes.
| Argument | Type | Description |
|---|---|---|
| articleId* | string | The article id to refresh, from list_articles |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"articleId"
],
"properties": {
"articleId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The article id to refresh, from list_articles"
}
}
}Schedule a topic to be generated and auto-published at a future date/time on a WordPress site — the same editorial calendar the dashboard uses. Requires a plan with scheduling enabled.
| Argument | Type | Description |
|---|---|---|
| topic* | string | |
| siteId* | string | |
| dualLanguage | boolean | Also publish an Italian translation alongside the original |
| scheduledFor* | string | ISO 8601 date-time in the future, e.g. 2026-08-01T09:00:00Z |
| publishStatus | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"topic",
"siteId",
"scheduledFor"
],
"properties": {
"topic": {
"type": "string",
"minLength": 3
},
"siteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"dualLanguage": {
"type": "boolean",
"default": false,
"description": "Also publish an Italian translation alongside the original"
},
"scheduledFor": {
"type": "string",
"description": "ISO 8601 date-time in the future, e.g. 2026-08-01T09:00:00Z"
},
"publishStatus": {
"enum": [
"draft",
"publish"
],
"type": "string",
"default": "publish"
}
}
}Generates topic suggestions for a site's next articles, using the same logic as the dashboard's topic generator — biased toward an experiment/case-study angle for a share of the results, and informed by the site's differentiators if set, rather than generic keyword-chasing titles. Fast (a few seconds, not a background job) — use this before generate_article or schedule_article instead of inventing topics yourself.
| Argument | Type | Description |
|---|---|---|
| count | integer | How many topic suggestions to generate |
| siteId* | string | Target site id (from list_sites) — determines language, tone, SEO tags and differentiators used |
| creativity | integer | 0 = safe/proven angles, 100 = more experimental angles |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"siteId"
],
"properties": {
"count": {
"type": "integer",
"default": 5,
"maximum": 20,
"minimum": 1,
"description": "How many topic suggestions to generate"
},
"siteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Target site id (from list_sites) — determines language, tone, SEO tags and differentiators used"
},
"creativity": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 0,
"description": "0 = safe/proven angles, 100 = more experimental angles"
}
}
}