Populr SEO
Apply the SEO fixes you approve in Populr — titles, descriptions, JSON-LD, llms.txt — in your code.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"seo": {
"url": "https://www.trypopulr.in/api/mcp"
}
}
}Remote endpoints
https://www.trypopulr.in/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (7)
🟢seo_status
Start here. Shows the site Populr manages for this workspace, which page fixes are approved and ready to apply in code, which are waiting for the owner's approval, and whether the business details for structured data are filled in.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"not_set_up"
]
},
"message": {
"type": "string",
"description": "Why the status isn't the usual one, in a sentence."
},
"site": {
"type": "string"
},
"business": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
}
},
"description": "Present once the business details for structured data are filled in."
},
"faqCount": {
"type": "integer"
},
"approvedPages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pages with approved fixes, ready to apply in code."
},
"waitingPages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pages with drafts waiting for the owner's approval in Populr."
},
"snippet": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"seenOnPages": {
"type": "integer"
}
}
}
},
"required": [
"status"
]
}🟢get_seo_fixes(path)
Returns the SEO changes the site owner has approved in Populr — each page's <title>, meta description and JSON-LD structured data — so you can apply them in the site's source code. Pass a path for one page, or omit it for every page.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "A page path such as / or /about. Omit for all pages."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"not_set_up",
"unknown_page"
]
},
"message": {
"type": "string",
"description": "Why the status isn't the usual one, in a sentence."
},
"site": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"jsonld": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"path",
"jsonld"
]
},
"description": "Approved changes per page. A missing title or description means no approved change."
}
},
"required": [
"status"
]
}🟢get_structured_data(path)
Returns schema.org JSON-LD for a page, built only from the business details the owner entered in Populr (name, type, contact, address, hours, profiles; FAQs on the home page). Ready to paste into the page's <head>.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Page path, default /"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"not_set_up",
"needs_business_details"
]
},
"message": {
"type": "string",
"description": "Why the status isn't the usual one, in a sentence."
},
"path": {
"type": "string"
},
"jsonld": {
"type": "array",
"items": {
"type": "object"
},
"description": "schema.org JSON-LD objects for the page."
}
},
"required": [
"status"
]
}🟢audit_page(url)
Fetches a live page and checks its on-page SEO: title length, meta description, H1, canonical, viewport, Open Graph and structured data. Returns each problem with why it matters.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Full public URL, e.g. https://example.com/about"
}
},
"required": [
"url"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok"
]
},
"message": {
"type": "string",
"description": "Why the status isn't the usual one, in a sentence."
},
"url": {
"type": "string"
},
"signals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
},
"verdict": {
"type": "string",
"enum": [
"pass",
"warn",
"fail"
]
}
},
"required": [
"label",
"value",
"verdict"
]
}
},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"warning",
"error"
]
},
"title": {
"type": "string"
},
"detail": {
"type": "string"
}
},
"required": [
"severity",
"title",
"detail"
]
}
}
},
"required": [
"status"
]
}⚪draft_page_fix(path)
Reads one page of the managed site and drafts a better <title> and meta description from what the page actually says. The draft is saved in Populr for the owner to approve; nothing changes on the live site.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Page path on the managed site, e.g. /pricing"
}
},
"required": [
"path"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"saved",
"not_saved_already_approved",
"not_set_up"
]
},
"message": {
"type": "string",
"description": "Why the status isn't the usual one, in a sentence."
},
"path": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"before": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
}
},
"description": "What the live page has now."
}
},
"required": [
"status"
]
}🟢generate_llms_txt
Builds an llms.txt for the managed site from the owner's business details and the approved page titles and descriptions — a plain map of the site for AI assistants. Save it at the site root as /llms.txt.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"not_set_up",
"needs_business_details"
]
},
"message": {
"type": "string",
"description": "Why the status isn't the usual one, in a sentence."
},
"site": {
"type": "string"
},
"content": {
"type": "string",
"description": "The llms.txt file. Save it at the site root (public/llms.txt in most frameworks)."
}
},
"required": [
"status"
]
}🟢verify_page(url)
Fetches a live page of the managed site and checks that its approved title, description and structured data are present in the HTML as served. Use after deploying.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Live URL of a page on the managed site"
}
},
"required": [
"url"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"live",
"missing_changes",
"no_approved_fixes",
"not_set_up"
]
},
"message": {
"type": "string",
"description": "Why the status isn't the usual one, in a sentence."
},
"url": {
"type": "string"
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"ok": {
"type": "boolean"
}
},
"required": [
"label",
"ok"
]
}
},
"missing": {
"type": "integer",
"description": "How many approved changes aren't in the served HTML yet."
}
},
"required": [
"status"
]
}Community
Evidence