POST https://api.skayle.ai/mcp— MCP Streamable HTTPGET https://api.skayle.ai/v2/tools— authenticated operation discoveryPOST https://api.skayle.ai/v2/tools/:operation— authenticated operation executionGET https://api.skayle.ai/v2/openapi.json— Agent API contract
Agent API versus CMS Content API
These are separate interfaces:- The Agent API and MCP use
/v2and/mcp. They let authenticated agents read and change Skayle data, run workflows, publish content, and manage integrations. - The Skayle CMS Content API uses
/v1/{organizationId}. It is a read-only content delivery API for websites using Skayle CMS as their headless CMS.
/v1 while an AI client manages that content through MCP or
/v2.
Compare all developer interfaces →
What agents can access
The live operation catalog is authoritative and expands as Skayle adds features. It currently covers:- organizations, members, settings, and connector state;
- profile, onboarding, billing/credit status, and API-key metadata;
- content, topics, collections, taxonomies, and the Context Library;
- generation, editing, media/avatar uploads, scheduling, publishing, and deletion;
- article SEO/social metadata editing and duplicate-content consolidation;
- dashboard, Search Console, and content analytics;
- AI Search Visibility prompts, engines, competitors, analyses, and runs;
- Site Audit status, results, performance, and runs;
- member invitations, role management, Slack, GSC, and CMS integration operations;
- organization-scoped agent audit records.
Search content by title, slug, or URL
ThelistManagerItems and listItems operations search titles, excerpts,
slugs, canonical URLs, and external CMS URLs. You can pass either a bare slug
or a full article URL; Skayle extracts the final URL path segment as an
additional search term.
This makes requests such as “find the content at
https://example.com/blog/my-article” work even when the title does not
contain my-article.
Connect an MCP client
Use this Streamable HTTP endpoint:Codex with OAuth
Codex with an API key
Add the server and header to~/.codex/config.toml:
codex mcp list. Never commit a live key to a repository.
Authentication
OAuth 2.1
MCP clients should connect directly to the/mcp URL. Skayle publishes OAuth
authorization-server and protected-resource metadata under /.well-known/,
supports PKCE and dynamic client registration, and shows a consent screen with
the requested scopes.
OAuth access and refresh tokens are bound to the selected organization.
Membership is checked again on every agent request, so removing a user from an
organization immediately removes access even if a token has not expired.
Skayle advertises offline_access so compatible MCP clients receive a
30-day refresh token and can renew the one-hour access token during long-running
tasks without reconnecting. Expired bearer tokens return an invalid_token
challenge so clients can refresh automatically.
API keys
Create a key in Settings → API & MCP. Keys:- are shown once;
- are hashed at rest;
- expire after 90 days by default;
- are bound to the organization that was active when they were created;
- are rate limited to 1,200 requests per minute by default;
- can be revoked from the same settings page.
429 with a
Retry-After header. HTTP 401 is reserved for invalid, expired, or disabled
keys, so MCP clients do not mistake temporary throttling for lost
authentication.
Use an API key as:
X-API-Key connection is authenticated when
Skayle accepts the header, even though no OAuth session exists.
Scopes
The operation catalog reports the exact scope for every operation.
Stored connector passwords, OAuth tokens, API keys, cookies, private keys, and
webhook secrets are redacted from all agent responses and audit summaries.
CMS connector behavior
Agent operations can inspect connector status, schemas, mappings, and supported taxonomies. With the required integration scope and explicit confirmation, they can also change connector configuration or run externally visible connector actions. Agents never receive stored CMS passwords, provider access tokens, application passwords, or other connector secrets. Connector calls continue to run through Skayle’s existing provider-specific validation and publishing logic. When an organization uses Skayle CMS, published content is available to its website through the separate/v1/{organizationId} Content API. When it uses
WordPress, Sanity, Webflow, or Contentful, Skayle pushes content to that
provider instead.
Calling the Agent API
Discover operations:createBlogTopic creates a pending topic in an enabled collection. Topic,
primary keyword, angle, and collection are required; article type, writing
style, and custom instructions are optional.
Call a confirmation-required operation:
updateItem can edit the core article body and publishing state as well as
h1, tldr, metaDescription, canonicalUrl, primaryKeyword,
secondaryKeywords, Open Graph and Twitter titles/descriptions,
schemaJsonLd, relatedArticles, and internalLinkSuggestions.
For published items, the response also includes publishingWarnings covering
missing or weak SEO fields, canonical mismatches, thin content, internal-link
gaps, duplicate primary keywords, and likely title/intent cannibalization.
Call the read-only validatePost operation before publishing to retrieve the
same publishing warnings without changing the item.
When content revalidation is configured, publishing, editing, unpublishing, or
consolidating a content item sends its canonical URL to the connected website.
The website can revalidate its content routes and notify IndexNow immediately;
the XML sitemap remains the complete inventory for normal crawler discovery.
For multiple organizations, configure CONTENT_REVALIDATION_WEBHOOKS as a JSON
object keyed by organization ID, with webhookUrl and webhookSecret for each
website. The legacy single-webhook environment variables remain supported.
To consolidate duplicate content items in any enabled collection, call
consolidateItems with one
winnerId, one or more duplicateIds, and rewriteReferences and
createRedirects set to true. Skayle rewrites stored links and references to
the winner, drafts and unpublishes the duplicates, and stores permanent
redirects from each old slug. Requests to an old slug through the CMS Content
API return HTTP 308 to the winner. This destructive MCP operation requires
content:delete, confirm: true, and a stable idempotency key.
Publishing, scheduling, deletion, integration writes, and external analysis
runs reject requests without confirm: true. Mutations should always provide a
stable idempotency key so retries cannot create duplicate work.
Security boundaries
Agent access does not expose:- superadmin procedures;
- impersonation or authentication internals;
- raw SQL or unrestricted database access;
- checkout, subscription cancellation, or plan mutation;
- stored connector credentials or token material.
listAgentAuditLog.
Audit records include the operation, credential type, required scope, risk,
status, request ID, timestamps, and sanitized input/result summaries. Audit
reads and writes run in the same organization and user RLS context enforced for
the rest of Skayle.