Draftbase

MCP server

Draftbase exposes full template, entry, and media control as MCP tools — mirrors the REST API 1:1, so any MCP-capable client (Claude Code, Claude Desktop, etc.) can manage content directly.

Environments

EnvMCP endpointAPI URL
staginghttps://staging-mcp.draftbase.co/mcphttps://staging-api.draftbase.co
prodhttps://mcp.draftbase.co/mcphttps://api.draftbase.co

Auth

The server validates a Bearer JWT (aud: "mcp", sub = userId, orgId claim). Tokens are issued via standard OAuth 2.1 + PKCE with dynamic client registration. Discovery: GET <API_URL>/.well-known/oauth-authorization-server

Setup — Claude Code

Terminal
claude mcp add --transport http draftbase-staging https://staging-mcp.draftbase.co/mcp
# prod: claude mcp add --transport http draftbase-prod https://mcp.draftbase.co/mcp

Then run /mcp in Claude Code — opens a browser to log in, completes OAuth, and stores the token. Run /mcp again to check connection status.

Setup — other MCP clients

Point the client at the MCP endpoint (<MCP_URL>/mcp) with transport: http. The client must support the OAuth 2.1 + PKCE discovery flow (dynamic client registration, no client secret). Without an OAuth-capable client, drive /oauth/register /oauth/authorize /oauth/token by hand against the API URL and set the resulting access_token as the Bearer token.

Tools

19 tools across 3 groups, matching the templates / entries / media REST routes.

Templates
list_templatesList all templates defined for the current org
get_templateGet a single template by id, including its full field schema
create_templateCreate a template schema in one call — define all fields up front rather than creating then patching
update_templateUpdate a template's name and/or fields (partial update — omit unchanged fields)
delete_templateDelete a template. Fails if entries still reference it — delete those first
Entries
list_entriesList entries, optionally filtered by template or locale. Returns MDX with reference/media fields resolved inline
create_entryCreate a new content entry
update_entryUpdate an existing content entry
get_entryGet a single entry by id. Returns MDX with reference/media fields resolved inline
delete_entryDelete an entry permanently
set_entry_statusChange an entry's status (draft, updated, published, archived) — publishing requires all required fields to be set
list_entry_revisionsList an entry's revision history, newest first
rollback_entryRestore an entry's fields to a prior revision version
Media
list_mediaList uploaded media assets, optionally filtered by status
get_upload_urlGet a presigned S3 URL to upload a media asset. After uploading, call confirm_media with the returned s3Key to register it
confirm_mediaRegister an uploaded media asset after it's been PUT to the presigned URL from get_upload_url
replace_mediaSwap an existing media asset's image (e.g. after re-cropping). Upload the new file to a presigned URL from get_upload_url first, then call this with the returned s3Key. Re-runs the resize pipeline
set_media_tagsReplace a media asset's tags with the given list
delete_mediaDelete a media asset and its underlying S3 object