Docs

MCP Server

Connect AI agents to Moonage content using the Model Context Protocol.

The Moonage Content MCP Server exposes blog, changelog, roadmap, search, and asset tools over the Model Context Protocol. Any MCP-compatible client can connect and manage content programmatically.

Connection

PropertyValue
TransportStreamable HTTP
Endpointhttps://content.moonage.ai/mcp
Server nameMoonage Content
Version1.0.0

Connecting with curl

# 1. Initialize a session
curl -X POST https://content.moonage.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": { "name": "my-client", "version": "1.0.0" }
    }
  }'

# 2. Save the Mcp-Session-Id header from the response

# 3. Send initialized notification
curl -X POST https://content.moonage.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: SESSION_ID" \
  -d '{"jsonrpc": "2.0", "method": "notifications/initialized"}'

# 4. Call tools
curl -X POST https://content.moonage.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: SESSION_ID" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "list_blog_posts",
      "arguments": { "limit": 5 }
    }
  }'

Connecting with the MCP TypeScript SDK

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const transport = new StreamableHTTPClientTransport(
  new URL("https://content.moonage.ai/mcp")
);

const client = new Client({
  name: "my-app",
  version: "1.0.0",
});

await client.connect(transport);

// List available tools
const { tools } = await client.listTools();

// Call a tool
const result = await client.callTool("list_blog_posts", { limit: 5 });

Tools

The server exposes 15 tools organized by content type.

Blog tools

list_blog_posts

List published blog posts with optional filtering.

ParameterTypeRequiredDescription
limitnumberNoMax posts (1-100, default 20)
tagstringNoFilter by tag
cursorstringNoISO date for pagination

get_blog_post

Get a single blog post by slug, including full markdown content.

ParameterTypeRequiredDescription
slugstringYesThe blog post slug
include_draftsbooleanNoInclude non-published posts (default false)

create_blog_post

Create a new blog post (draft by default).

ParameterTypeRequiredDescription
titlestringYesPost title
contentstringNoMarkdown content
descriptionstringNoSEO description (50-160 chars)
author_namestringNoAuthor name
tagsstring[]NoTags array
statusstringNodraft or published (default: draft)

update_blog_post

Update an existing blog post by slug.

ParameterTypeRequiredDescription
slugstringYesPost slug
titlestringNoNew title
contentstringNoNew markdown content
descriptionstringNoNew SEO description
tagsstring[]NoNew tags array

publish_blog_post

Publish a blog post (changes status to published).

ParameterTypeRequiredDescription
slugstringYesPost slug

Changelog tools

list_changelog_entries

List published changelog entries with optional type filter.

ParameterTypeRequiredDescription
limitnumberNoMax entries (1-100, default 20)
typestringNorelease, hotfix, beta, or alpha

get_changelog_entry

Get a single changelog entry by slug or version.

ParameterTypeRequiredDescription
identifierstringYesSlug or version string

create_changelog_entry

Create a new changelog entry.

ParameterTypeRequiredDescription
versionstringYesVersion string (e.g. v2.3.0)
titlestringNoEntry title
summarystringNoShort summary
contentstringNoFull markdown content
typestringNorelease, hotfix, beta, alpha
highlightsstring[]NoKey highlights
statusstringNodraft or published

Roadmap tools

list_roadmap_items

List public roadmap items with optional filters.

ParameterTypeRequiredDescription
statusstringNoall, planned, in_progress, shipped, cancelled, considering
categorystringNoproduct, platform, integrations, api, dx
limitnumberNoMax items (1-100, default 50)

Returns items sorted by priority and a by_status count summary.

get_roadmap_item

Get a single roadmap item by slug.

ParameterTypeRequiredDescription
slugstringYesRoadmap item slug

create_roadmap_item

Create a new roadmap item.

ParameterTypeRequiredDescription
titlestringYesItem title
descriptionstringNoFull description (markdown)
summarystringNoShort summary
categorystringNoproduct, platform, integrations, api, dx
statusstringNoplanned, in_progress, shipped, cancelled, considering
prioritystringNolow, medium, high, critical
quarterstringNoTarget quarter (e.g. Q2 2026)

update_roadmap_item

Update an existing roadmap item.

ParameterTypeRequiredDescription
slugstringYesItem slug
titlestringNoNew title
descriptionstringNoNew description
summarystringNoNew summary
statusstringNoNew status
prioritystringNoNew priority
quarterstringNoNew target quarter

Search tool

search_content

Search across blog posts, changelog entries, and roadmap items.

ParameterTypeRequiredDescription
querystringYesSearch query
typestringNoall, blog, changelog, roadmap (default: all)
limitnumberNoMax results per type (1-50, default 10)

Returns results grouped by content type.


Asset tool

get_asset_upload_url

Get information about how to upload images to the content R2 bucket. Returns the upload endpoint, accepted fields, and the public URL base.

No parameters required.


Activity tool

get_activity_log

Query the activity log for content changes.

ParameterTypeRequiredDescription
resourcestringNoFilter: blog, changelog, roadmap
limitnumberNoMax entries (1-200, default 50)

Architecture

The MCP server runs on the same Cloudflare Worker as the REST API. Each request creates a stateless server instance with access to the D1 database and R2 bucket.

Client (Claude, Cursor, custom agent)

  ▼ Streamable HTTP
┌───────────────────────────┐
│  Cloudflare Worker        │
│  /mcp → MCP Handler      │
│  /blog, /changelog, ...   │
│          → Hono REST API  │
│                           │
│  ┌─────┐  ┌────────────┐ │
│  │ D1  │  │ R2 (media) │ │
│  └─────┘  └────────────┘ │
└───────────────────────────┘

The MCP tools perform the same operations as the REST endpoints but are optimized for agent consumption — they return structured JSON text content directly rather than HTTP response objects.