{
  "schemaVersion": "1.0",
  "updatedAt": "2026-07-24",
  "agentApiVersion": "2026-07-24",
  "editorialResponsibilityVersion": "2026-07-23",
  "name": "SEODrafts",
  "canonical": "https://seodrafts.com/",
  "description": "Connect AI agents to SEODrafts with scoped tokens, 25 bounded MCP tools, per-project hero palettes, versioned edits, and customer-owned publishing.",
  "discovery": {
    "agentsPage": "https://seodrafts.com/agents/",
    "llms": "https://seodrafts.com/llms.txt",
    "openApi": "https://api.seodrafts.com/api/v1/agent/openapi.json",
    "capabilityCatalog": "https://seodrafts.com/agents/capabilities.json",
    "integrationCatalog": "https://seodrafts.com/integrations/catalog.json",
    "integrationGuide": "https://seodrafts.com/docs/integration.html",
    "tenantSkill": "https://seodrafts.com/skills/seo-blog-admin-projects/SKILL.md",
    "tenantSkillSource": "https://raw.githubusercontent.com/Wotaso/seodrafts-agent-skills/main/skills/seo-blog-admin-projects/SKILL.md",
    "tenantSkillRepository": "https://github.com/Wotaso/seodrafts-agent-skills",
    "agentSkillIndex": "https://seodrafts.com/.well-known/agent-skills/index.json",
    "mcpServerManifest": "https://mcp.seodrafts.com/.well-known/mcp/server.json",
    "mcpServerManifestAlias": "https://mcp.seodrafts.com/server.json"
  },
  "interfaces": [
    {
      "id": "mcp",
      "label": "Hosted MCP",
      "type": "mcp",
      "endpoint": "https://mcp.seodrafts.com/mcp",
      "manifest": "https://mcp.seodrafts.com/.well-known/mcp/server.json",
      "transport": "streamable-http",
      "environment": "remote",
      "authentication": {
        "type": "bearer",
        "scope": "project",
        "description": "Configure a revocable, expiring sda_live_ agent token with explicit tool scopes and project grants in a compatible MCP client.",
        "oauthDiscovery": false
      },
      "readTools": [
        "get_agent_capabilities",
        "list_projects",
        "get_project",
        "list_posts",
        "get_post",
        "list_post_revisions",
        "list_opportunities",
        "get_opportunity",
        "get_editorial_insights",
        "get_integration_health",
        "get_billing_status",
        "list_agent_audit_events",
        "recommend_publisher_integration",
        "list_publisher_integrations"
      ],
      "writeTools": [
        "update_project_context",
        "update_project_image_style",
        "create_post_draft",
        "update_post",
        "schedule_post",
        "approve_post",
        "decline_post",
        "restore_post_to_review",
        "check_post_publish_health",
        "create_opportunity",
        "generate_review_draft"
      ],
      "publishTools": [],
      "approvalGate": "approve_post requires the separately granted posts:approve scope, exact current contentVersion and stateVersion values, the exact editorialResponsibilityVersion discovered from capabilities, and explicit responsibility, claim-verification, original-value, and author-identity attestations. Scheduling is a separate posts:schedule operation. Approval returns an approvalEpoch that binds the later asynchronous publisher handoff; it cannot publish directly."
    },
    {
      "id": "cli",
      "label": "Tenant CLI",
      "type": "cli",
      "package": "@wotaso/seo-blog-admin-cli",
      "packageUrl": "https://www.npmjs.com/package/@wotaso/seo-blog-admin-cli",
      "environment": "tenant-ci-or-server",
      "description": "Use the published package for project-allowlisted agent workflows, secure token management, tenant-side setup, and customer-owned publishing. Check its --help output before relying on a newly released command."
    },
    {
      "id": "typescript-sdk",
      "label": "TypeScript SDK",
      "type": "sdk",
      "package": "@wotaso/seo-blog-admin-sdk",
      "packageUrl": "https://www.npmjs.com/package/@wotaso/seo-blog-admin-sdk",
      "environment": "server-or-ci-only",
      "description": "Use the typed Agent API client for all scoped project, post, opportunity, insight, integration, billing, and audit operations, or build a customer-owned publisher without exposing tokens to browser code."
    }
  ],
  "pricing": {
    "model": "weekly_posts_v1",
    "currency": "EUR",
    "billingPeriod": "month",
    "publicUrl": "https://seodrafts.com/pricing/",
    "contentUnit": "One generated article, landing page, or language version.",
    "free": {
      "monthlyPriceCents": 0,
      "monthlyContentUnits": 2,
      "activeProjectLimit": 1
    },
    "paid": {
      "minimumWeeklyContentUnits": 1,
      "maximumWeeklyContentUnits": 30,
      "coreMonthlyCents": 1300,
      "perWeeklyContentUnitMonthlyCents": 600,
      "perAdditionalActiveProjectMonthlyCents": 400,
      "monthlyPriceFormula": "1300 + (600 * weeklyContentUnits) + (400 * (activeProjectLimit - 1))",
      "activeProjectLimits": [
        {
          "minimumWeeklyPosts": 1,
          "maximumWeeklyPosts": 5,
          "activeProjectLimit": 1
        },
        {
          "minimumWeeklyPosts": 6,
          "maximumWeeklyPosts": 9,
          "activeProjectLimit": 2
        },
        {
          "minimumWeeklyPosts": 10,
          "maximumWeeklyPosts": 14,
          "activeProjectLimit": 3
        },
        {
          "minimumWeeklyPosts": 15,
          "maximumWeeklyPosts": 19,
          "activeProjectLimit": 4
        },
        {
          "minimumWeeklyPosts": 20,
          "maximumWeeklyPosts": 24,
          "activeProjectLimit": 5
        },
        {
          "minimumWeeklyPosts": 25,
          "maximumWeeklyPosts": 29,
          "activeProjectLimit": 6
        },
        {
          "minimumWeeklyPosts": 30,
          "maximumWeeklyPosts": 30,
          "activeProjectLimit": 7
        }
      ],
      "averageMonthlyContentUnitsFormula": "round(weeklyContentUnits * 52 / 12)",
      "utcCalendarMonthSafetyCapFormula": "weeklyContentUnits * 5"
    }
  },
  "capabilities": [
    "read-work",
    "bounded-editorial-changes",
    "customer-owned-publishing"
  ],
  "publishingProviders": [
    {
      "id": "wordpress",
      "provider": "wordpress",
      "adapter": "wordpress",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/wordpress/"
    },
    {
      "id": "webflow",
      "provider": "webflow",
      "adapter": "webflow",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/webflow/"
    },
    {
      "id": "framer",
      "provider": "framer",
      "adapter": "framer",
      "type": "cms",
      "status": "beta",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/framer/"
    },
    {
      "id": "wix",
      "provider": "wix",
      "adapter": "wix",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/wix/"
    },
    {
      "id": "github-app",
      "provider": "github_app",
      "adapter": "github_app",
      "type": "git",
      "status": "stable",
      "setupKind": "managed",
      "docsUrl": "https://seodrafts.com/integrations/github-app/"
    },
    {
      "id": "markdown-mdx",
      "provider": "static",
      "adapter": "static",
      "type": "git",
      "status": "stable",
      "setupKind": "initializer",
      "docsUrl": "https://seodrafts.com/integrations/markdown-mdx/"
    },
    {
      "id": "contentful",
      "provider": "contentful",
      "adapter": "contentful",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/contentful/"
    },
    {
      "id": "sanity",
      "provider": "sanity",
      "adapter": "sanity",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/sanity/"
    },
    {
      "id": "strapi",
      "provider": "strapi",
      "adapter": "strapi",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/strapi/"
    },
    {
      "id": "ghost",
      "provider": "ghost",
      "adapter": "ghost",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/ghost/"
    },
    {
      "id": "hubspot",
      "provider": "hubspot",
      "adapter": "hubspot",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/hubspot/"
    },
    {
      "id": "shopify",
      "provider": "shopify",
      "adapter": "shopify",
      "type": "cms",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/shopify/"
    },
    {
      "id": "custom-webhook",
      "provider": "webhook",
      "adapter": "webhook",
      "type": "webhook",
      "status": "stable",
      "setupKind": "preview",
      "docsUrl": "https://seodrafts.com/integrations/custom-webhook/"
    },
    {
      "id": "squarespace",
      "provider": "squarespace",
      "adapter": "manual_handoff",
      "type": "manual",
      "status": "reviewed_fallback",
      "setupKind": "manual",
      "docsUrl": "https://seodrafts.com/integrations/squarespace/"
    }
  ],
  "boundaries": [
    "MCP exposes no direct publish-now tool. A separately scoped approval binds exact contentVersion and stateVersion values and returns an approvalEpoch for the later customer-owned publisher handoff; scheduling remains separately scoped.",
    "MCP exposes no shell, SQL, arbitrary-URL fetch, bulk page factory, or provider-credential tool.",
    "CMS, Git, webhook, and publish credentials stay in tenant CI, encrypted server-side storage, or a tenant-owned secret store; they never enter MCP tool arguments.",
    "Hosted MCP currently requires a configured, expiring, revocable Bearer token with an exact project allowlist. SEODrafts does not advertise a one-click OAuth connection.",
    "Agent access and publishing do not guarantee indexing, rankings, traffic, backlinks, or AI citations."
  ]
}
