Searchlark

API and MCP

Everything you can do in the app, available to your scripts and AI agents. Included in Growth and Agency.

Authentication

Create a key under Settings, API. Keys are shown once, can be read-only or read/write, and can be revoked at any time. Send it as a bearer token. Limit: 120 requests per minute per key.

curl https://YOUR-KESTREL-URL/api/v1/sites \
  -H "Authorization: Bearer kst_live_…"

Endpoints

Base path /api/v1. Full schema: OpenAPI 3.1. Errors are {"error":{"code","message"}} with 401, 402 (plan limit), 403 (plan or scope), 404, 409 (wrong state), 429.

GET/sitesList sites
GET/sites/{siteId}/keywordsTop keyword opportunities
GET/sites/{siteId}/contentList articles (?status=)
POST/sites/{siteId}/contentPlan an article for a keyword
GET/content/{id}Article, current draft, publication
POST/content/{id}/generateWrite the draft (returns job id)
POST/content/{id}/approveApprove a draft in review
POST/content/{id}/publishPublish now (returns job id)
GET/jobs/{id}Job status
GET/sites/{siteId}/analyticsSearch Console summary
GET/sites/{siteId}/ai-visibilityAI mention rates per engine

MCP (Claude Desktop, Claude Code, other agents)

The Searchlark MCP server exposes the same operations as tools: list_sites, list_keywords, list_articles, create_article, generate_article, get_job, get_article, approve_article, publish_article, get_analytics, get_ai_visibility. Use a read-only key if the agent should only look.

{
  "mcpServers": {
    "kestrel": {
      "command": "node",
      "args": ["/path/to/kestrel/packages/mcp/dist/index.js"],
      "env": {
        "KESTREL_API_KEY": "kst_live_…",
        "KESTREL_API_URL": "https://YOUR-KESTREL-URL"
      }
    }
  }
}

Until the package is published to npm, build it from the repository (pnpm --filter @kestrel/mcp build) and point args at packages/mcp/dist/index.js.

Example prompt: “Plan an article on month-end close checklists for my site, write it, show me the draft, and publish it if the fact-check is clean.”