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 | /sites | List sites |
| GET | /sites/{siteId}/keywords | Top keyword opportunities |
| GET | /sites/{siteId}/content | List articles (?status=) |
| POST | /sites/{siteId}/content | Plan an article for a keyword |
| GET | /content/{id} | Article, current draft, publication |
| POST | /content/{id}/generate | Write the draft (returns job id) |
| POST | /content/{id}/approve | Approve a draft in review |
| POST | /content/{id}/publish | Publish now (returns job id) |
| GET | /jobs/{id} | Job status |
| GET | /sites/{siteId}/analytics | Search Console summary |
| GET | /sites/{siteId}/ai-visibility | AI 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.”