# Populr SEO

> Apply the SEO fixes you approve in Populr — titles, descriptions, JSON-LD, llms.txt — in your code.

- name: in.trypopulr/seo
- version: 1.0.0
- connection class: R2 (oauth_consent_once)
- trust: 96/100
- quality: 94/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/in.trypopulr%2Fseo
- tools: https://api.protogrid.dev/v1/servers/in.trypopulr%2Fseo/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "seo": {
      "type": "http",
      "url": "https://www.trypopulr.in/api/mcp",
      "headers": {
        "Authorization": "Bearer ${populr_key}"
      }
    }
  }
}
```

Placeholders to fill: `${populr_key}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% +updated-9d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 94/100 (strong)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 100 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- pass `auth.cimd`: Client ID Metadata Documents supported
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 7 of 7 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 760 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 7 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 760 tokens to load them all
- tool set hash: d4ecd1e0fa0dea3683e9d3b30a2bf8db
- tools last changed: 2026-10-11T14:14:35.061Z
- badge: [![protogrid quality](https://protogrid.dev/badge/in.trypopulr/seo.svg)](https://protogrid.dev/servers/in.trypopulr/seo)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-11 `verify_page` changed (outputSchema)
- 2026-10-11 `generate_llms_txt` changed (outputSchema)
- 2026-10-11 `draft_page_fix` changed (outputSchema)
- 2026-10-11 `audit_page` changed (outputSchema)
- 2026-10-11 `get_structured_data` changed (outputSchema)
- 2026-10-11 `get_seo_fixes` changed (outputSchema)
- 2026-10-11 `seo_status` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/in.trypopulr%2Fseo/changes

## Remotes

- https://www.trypopulr.in/api/mcp (streamable-http, auth oauth2, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `audit_page`: 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.
- `draft_page_fix`: 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.
- `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.
- `get_seo_fixes`: 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.
- `get_structured_data`: 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>.
- `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.
- `verify_page`: 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.
