Connect over MCP
Point Claude or any MCP client at Inklate's Streamable HTTP server, authenticate with an API key or OAuth, and call the full tool catalog.
Inklate exposes a Model Context Protocol server so any AI agent — Claude Code, Claude Desktop, Cursor, and other MCP clients — can discover channels, author posts, preflight, schedule, publish, and measure through natural language. The agent drives the same procedures the dashboard uses, so an agent and a human can never diverge.
Endpoint and transport
- Transport: Streamable HTTP.
- Production URL:
https://api.inklate.com/mcp - Local dev:
http://localhost:3000/mcp(the server runs on:3000, the web dashboard on:3001). - Auth: a bearer token in the
Authorizationheader — either an Organization API key (prefixinklate_) or an OAuth 2.1 access token.
Scheduling and publishing are durable, background operations. create_post and preflight_post
work on their own, but a schedule_post or publish_post call fails loudly rather than silently
if the durable-execution layer isn’t running — a scheduled ship is never dropped.
Authenticate
Option A — Organization API key
Create a key in the dashboard under Settings → API (see API keys), then pass it as a bearer token. A key is bound to exactly one organization, so tools act on that organization with no further selection.
Option B — OAuth 2.1
Instead of a pasted key, a client can sign the user in through the browser — Inklate is a full OAuth 2.1 provider with dynamic client registration, PKCE, and a consent screen. Connect the server with no auth header; the first unauthenticated call returns 401 with a WWW-Authenticate header that kicks off discovery and the browser handshake.
An OAuth connection is not pinned to one organization. Tools act on your active organization by default; pass an organization slug argument (from list_organizations) to target a specific one. Every tool accepts this optional organization argument — it is needed only on the OAuth door.
claude.ai and Claude Desktop custom connectors require a public HTTPS URL. Local CLI clients
(Claude Code, MCP Inspector) can use localhost because their OAuth callback is a local port.
Client configuration
Claude Code (CLI), API key:
claude mcp add inklate https://api.inklate.com/mcp -t http \
-H "Authorization: Bearer inklate_XXXXXXXX"
claude mcp list # inklate should show connectedClaude Code (CLI), OAuth — add with no header; the 401 starts the flow:
claude mcp add inklate https://api.inklate.com/mcp -t http
# then in a session: /mcp → Authenticate → completes in the browserCursor / Claude Desktop (mcp.json / MCP config):
{
"mcpServers": {
"inklate": {
"url": "https://api.inklate.com/mcp",
"headers": { "Authorization": "Bearer inklate_XXXXXXXX" }
}
}
}Tool catalog
The tools are grouped by what they are for. Every tool takes an optional organization slug (needed only on the OAuth door).
Discover
| Tool | What it does |
|---|---|
list_organizations | Organizations (brands/clients) you can act in, with slug and your role. Pass a slug as organization to other tools. |
list_channels | Publishable destinations connected to the organization plus their connection health. Posts target channels by id. |
get_capabilities | What each channel can do right now (a publish verdict, with the reason when blocked — missing scope, disconnected, unsupported) plus every provider’s manifest (text limits, metrics, platform_options schema). |
Author
One Story fans out into per-channel Renditions. Write the Story once; each placement’s rendition is adapted from it unless you supply an explicit variants entry.
| Tool | What it does |
|---|---|
create_post | Create a draft. Supply content (a Story doc or markdown) for cross-platform authoring, or body for plain text; target via placements (channel + format) or channel_ids. Also takes variants, idempotency_key, per-channel platform_options, and ordered media_handles. |
update_post | Edit a draft / scheduled / failed post’s content/body, placements/channel_ids, or authored variants. Changing targets re-materializes renditions; a content change after approval re-enters the approval pipeline. Published posts are immutable. |
preflight_post | Fit-check a draft with no persistence: per-placement publishability (reachability → scopes → content) plus adapt warnings and lengths. Run before schedule/publish. |
apply_fix | Apply a machine-readable repair from preflight_post’s refusal.fixes to one placement’s rendition: trim_to_fold (over-length text), rebalance_thread (too many/long items), or crop_to (image aspect). Returns the refreshed verdict. |
sync_variants | Copy from the Story (default) or a Rendition into target Renditions, scoped copy / assets / both. Overwrites — check wasEdited on the response before re-syncing edited targets. |
Media
| Tool | What it does |
|---|---|
upload_media | Upload an image by public https url (preferred) or inline base64; returns a med_… handle in the uploaded state. Images only for now. |
get_media | Poll an asset’s status (uploaded → processing → ready | rejected | failed), dimensions, scan status, and variants — before attaching or publishing. |
Schedule and publish
| Tool | What it does |
|---|---|
schedule_post | Schedule (or reschedule) the whole post for a future instant; the pipeline publishes it automatically. |
schedule_placements | Per-placement scheduling: a default fire time all placements fall back to, plus per-placement overrides, plus an optional cascade that staggers them N minutes apart. |
publish_post | Publish immediately (also the failed-post retry path); idempotency_key makes retries replay. Returns a per-platform result envelope, one entry per target channel. |
unschedule_post | Cancel a pending scheduled publish and return the post to draft. |
get_job_status | A post’s async journey: overall status plus per-target status / external id / URL / last error — poll after publish or schedule. |
Find your content
| Tool | What it does |
|---|---|
list_posts | Posts plus per-channel targets; filter by status (draft/scheduled/publishing/published/failed) and/or a scheduled-time range. |
search_content | Full-text search over your own stored posts (ranked, highlighted snippets, keyset pagination, websearch syntax). Not on-platform search. |
list_interactions | Ingested comments and mentions on your content, filtered by kind/channel/since. |
Skills — durable multi-step workflows
| Tool | What it does |
|---|---|
list_skills | Declarative workflows you can run (e.g. cross_platform_publish), each with its JSON-Schema input — read it before run_skill. |
run_skill | Start a skill run (async, durable) by name and input; returns a run id. |
get_skill_run | Poll a skill run: status (running/succeeded/failed/compensated), per-step results, error. |
Metrics
| Tool | What it does |
|---|---|
get_post_metrics | Per-channel totals (impressions, reactions, comments, shares, clicks) plus the full snapshot time series for one post. |
get_channel_metrics | Aggregated totals plus per-day engagement across one channel’s published posts, optionally restricted to a time range. |
Timestamps must be ISO-8601 with an offset — for example 2026-07-14T09:00:00-07:00 or
...Z. Naive local times are rejected with a corrective error; the agent’s client resolves the
user’s timezone and sends the offset explicitly.