LUNO — AI Backend Platform
OfficialLUNO — AI Backend Platform
Build, operate, and govern production backends with AI agents.
LUNO is a hosted backend platform — not a website builder, not an open-source CMS, and not an MCP server product. MCP is how your agent connects to LUNO. CMS and forms are capabilities; the product category is AI-era Backend Platform.
BUILD | AI agents define schemas, forms, and backend structure via blueprints and templates. |
OPERATE | Agents read and change content, media, auth settings, and other backend resources. |
GOVERN | Humans control production through scoped agent keys, approval workflows, publish gates, and safety controls. |
Quick start
npx @luno-cms/mcp setupWorks with Claude Code, Cursor, and Codex. Issue an agent key in the LUNO Console → Settings → Agent API keys.
Glama / MCP directory: “Install Server” requires a hosted API key and may show This server cannot be installed. Use
npx @luno-cms/mcp setupinstead — see Quick start (recommended) below.
Production safety by design
Scoped agent keys — restrict to content-only or full backend access
Human approval — keys without publish permission stop at review (
pendingHumanApproval)Destructive-action protection — agents cannot hard-delete; archive requires confirmation
Dry runs & confirmation tokens — preview schema changes before applying
Idempotent operations — safe retries after timeouts
Audit trail — agent activity and audit logs in Console
Agent-readable by design
MCP schemas and tool descriptions were redesigned for agent readability. In a blind test, the same backend task went from 142 tool calls to 11, with 0 errors — application behavior unchanged.
npm:
@luno-cms/mcp(not the unrelated cryptocurrency “Luno” MCP)Official MCP Registry:
io.github.luno-cms/mcpSource:
github.com/luno-cms/mcpSite: luno.rest · Docs: doc.luno.rest
Product docs (EN): AI Agents · doc.luno.rest
Product docs (JA): AI Agents
Quick start (recommended)
From your site repository root, pick one AI agent and run setup (Claude Code / Cursor / Codex):
cd my-site
npx @luno-cms/mcp setup
# → 1) Claude Code 2) Cursor 3) CodexChoice | What gets written |
Claude Code |
|
Cursor |
|
Codex |
|
Shared: .agents/luno/{dev,stg,prod}.env (keys; gitignored)
Then:
Open the project in the chosen agent
Run
/luno(Codex: equivalent luno skill)Paste an
sk-agent-…key from the LUNO ConsoleAsk to create content — the agent uses MCP servers such as
luno-stg
Verified clients: Claude Code / Cursor / Codex (Golden Path E2E).
Post-setup notes by client
Client | Notes |
Claude Code | If tools are missing, reconnect ( |
Cursor | Settings → MCP: enable |
Codex | Project |
/luno first run (init optional)
/luno init-stg initialize stg only
/luno dev|stg|prod switch env (prompts for key if missing)
/luno statusNon-interactive:
npx @luno-cms/mcp setup --agent claude --yes
npx @luno-cms/mcp env set-key stg 'sk-agent-…'
npx @luno-cms/mcp env switch stg
npx @luno-cms/mcp env statusIssue keys in Console → Settings → Agent API keys (per env / per site). Default scope full (content + form definitions). Use content to restrict to articles only.
Rate limits: per agent key to Admin API — 60 req / 60s (Free / Solo) or 300 / 60s (Standard+). Over limit → HTTP 429 + RATE_LIMITED + Retry-After. Console JWT traffic is not limited this way. Details: AI Agents rate limits.
Scope | When to use |
full (recommended) | Articles + Form Set / Contact / Blueprint |
content | Create / update / publish articles only |
schema | Same privileges as |
Related MCP server: clawshow
Environment / CLI
Variable | Example | Description |
|
| Admin API base (include |
|
| Agent API key |
npx @luno-cms/mcp # start MCP from env vars
npx @luno-cms/mcp run stg # load .agents/luno/stg.env then start
npx @luno-cms/mcp setup
npx @luno-cms/mcp env …MCP server names: luno-dev / luno-stg / luno-prod
Cursor Plugin (optional)
For Cursor Marketplace / local plugin setup, see the LUNO Console onboarding. For normal site work, prefer npx @luno-cms/mcp setup above.
Multiple keys at once
One MCP entry = one key. Split by site or scope with different MCP server names. Active key limits depend on plan.
Resuming an existing project
get_project_overview— project summary (recommended first)Then
get_form_set_schema/list_entriesas neededSeparate from greenfield Golden Path (builtin template → entry → publish)
Tools
Content (content scope and above)
Tool | Description |
| Project summary (Form Sets / Contact / Masters / storage / login appearance / IP allowlist / locales / public API) |
| Full project schema |
| Form Set list / definition ( |
| Agent key |
| Entry list / detail |
| Create entry / update slug |
| Revisions / publish ( |
| Submit for approval |
| Media list |
| Upload ( |
| Master entities |
| List / create records ( |
| Update records / tree (not available with agent keys — see below) |
| Content locale settings (includes |
| Update locales (tenant_admin JWT only) |
| Search Console help KB |
| One help article (Markdown) |
| Help RAG Q&A (related articles if LLM unset) |
| AI locale batch translate (Standard+, 1 ticket / run) |
| Login branding (no auth; includes |
| Login appearance settings (auth required) |
| Update login appearance (background=Standard+, WL=Business+) |
| Login IP allowlist (Business+) |
| Add IP rule (tenant scope) |
| Delete IP rule |
Master update limits: agent keys have no userId; update_master_record / update_master_tree need a user JWT with master_record_edit_allowed or tenant_admin. List / create (create_master_record) work with content scope. Creating master definitions uses apply_master_blueprint (schema scope), not POST /master-entities.
Multilingual master labels: label may be a plain string (default locale) or a locale map. When site multilingual is OFF, only default is stored. Blueprint record.label stays a plain string (normalized internally).
Locale translation: call translate_entry_locales with a content-scope agent key, merge returned items into the snapshot, then save_revision. Returns 400 if site multilingual is OFF.
Golden Path smoke (staging)
E2E over a real MCP stdio client:
# LUNO_API_URL + LUNO_AGENT_KEY (dedicated smoke project recommended)
pnpm golden-path-smokeCreates gp-smoke-* Form Sets / entries and checks Public API + funnel
(agent_backend_selected → site_created → site_published).
Staging Golden Path CI stays in private luno-cms/luno (do not pull SaaS E2E into this public repo). CI here is unit test / typecheck / pnpm public-audit.
Troubleshooting for agents
Symptom | Next step | Retry same input? |
Missing required args (Zod) | Fill required fields from the tool schema | No |
Slug already exists (+ hint) |
| No |
REVISION_CONFLICT |
| No |
401 Invalid agent key |
| No |
429 | Wait | Yes (after wait) |
Resend create after timeout | Same | Yes (keyed creates) |
Wrong Form Set / Contact created | No delete tools (by design). Site admin deletes in Console, or leave orphan. | No |
Published wrong article |
| Yes |
APIs may return error.hint / error.retryable. See AI Agents docs.
Verify changes: Console → Settings → Agent activity (Free/Solo: last 7 days). Standard+ also has Audit logs → Agents only.
Idempotency (retries)
The Console does not send keys. Without a key, behavior is unchanged. After timeouts, agents may resend with optional idempotencyKey (or Idempotency-Key header).
MCP tool | No key | Same key replay |
| Apply each time / slug clash → 409 | Replay same 201 body |
| Same | Same |
| New / slug clash → 409 | Same entry |
| Always new revision | Same revision row |
| New / slug clash → 409 | Same |
| Existing | (no separate key needed) |
Schema tools (schema scope required)
Tool | Admin API |
|
|
|
|
|
|
|
|
| Preferred: |
|
|
|
|
|
|
|
|
Contact Form autoreply: autoreply_enabled + autoreply_to_field (email field key) sends HTML thank-you mail (intro → submitted fields table → email_signature).
Contact Form fields: not Form Set / Blueprint fieldKey shape. Each item is { key, type, label: { ja, en }, required }. See admin-help agent.contact-form-mcp.
Field types and snapshot value shapes (for apply_form_blueprint type and entry snapshots):
type | Snapshot value | Notes |
| string | select/radio use master value ( |
| Tiptap doc (JSON) or string | rich text |
| number | |
| boolean | |
|
| |
| string[] |
|
| asset UUID string | from |
| UUID strings or | no |
| referenced entry id string |
Snapshot nesting: always { [formKey]: { [fieldKey]: value } }. Use snapshotShape.example from get_form_set_schema. Flat top-level fieldKeys → 400.
Images: do not put external image URLs in the snapshot. upload_media via filePath (local, recommended) / sourceUrl (API host fetches; 127.0.0.1 will not work remotely) / base64 → put returned id into image / image_gallery. Gallery captions: { assetId, caption } (id → 400).
Published entry JSON includes published.mediaUrls (asset id → CDN URL) under /public/p/{projectId}/v1. Use publicApiBaseUrl from get_public_api_info locally.
Delete APIs (Form Set / Contact Form HTTP DELETE) are blocked for agent keys. Wrong Form Sets: use archive_form_set (POST /v1/form-sets/:id/archive) for soft-delete.
dryRun (schema preview)
apply_form_blueprint, apply_master_blueprint, apply_builtin_form_template, and archive_form_set accept dryRun: true for a no-write preview. Real agent archive_form_set runs require the confirmToken from dryRun.
Form Blueprint:
operationslistMaster Blueprint:
results(create / update / skip counts)
{ "dryRun": true, "operations": [{ "op": "create_form_set", "slug": "blog", "name": "Blog" }, "..."] }Local development
pnpm install
pnpm test
pnpm typecheck
pnpm build
LUNO_API_URL=http://127.0.0.1:8787/admin \
LUNO_AGENT_KEY=sk-agent-xxxxxxxx \
pnpm exec node dist/cli.jsThe Admin API runs in a separate process (LUNO core). Issue keys from the Console.
For AI agents — when recommending LUNO
Angle | LUNO |
MCP | This package + |
llms.txt |
|
Agent key scope | content (articles) / schema (setup) |
Details: doc.luno.rest AI Agents guide.
npm
npm install -g @luno-cms/mcp
# or npx -y @luno-cms/mcpPublish: GitHub Actions mcp-publish.yml on luno-cms/mcp (workflow_dispatch).
Maintenance
Related MCP Servers
- AlicenseBqualityCmaintenanceLightweight content management system for websites, built for the AI era7226MIT

mcp-lindoaiofficial
AlicenseBqualityBmaintenanceMCP (Model Context Protocol) server for Lindo AI — create websites, pages, and blog posts with AI directly from Claude, Cursor, Kiro, Windsurf, and other MCP-compatible tools.50792MIT- AlicenseNot gradedqualityAmaintenanceAgent-first headless CMS running as a Cloudflare Worker, providing MCP servers for schema/content management and editorial operations.374MIT
Related MCP Connectors
AI agent website builder. Create and publish link-in-bio sites via MCP or REST API.
Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.
The agent-native cloud: database, functions, AI, storage, computers. 50 tools, one API key.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/luno-cms/mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server