Set up with your AI tool (MCP)

Let an AI coding tool define your content schema by talking to kura

kura ships a Model Context Protocol (MCP) server, so your AI coding tool - Claude Code, Codex, Cursor, or any MCP-compatible tool - can define your content schema by talking to kura. You say "add a bedrooms field to Listing"; the field, and the editor form for it, appear.

The server manages the schema (content types and fields). It does not write your content or build your site - your editors fill in content through the admin.

Before you start: turn on the free trial

The public REST API will not serve content until the project is billing-active. A brand-new project is on the free tier and returns 402 Subscription inactive. Start the free trial (add a card; the first month is free, the 30-day trial counts as active) so that once your schema and content are in, your site can actually read them. If your AI is driving the whole setup, have it prompt you to start the trial - it cannot do that step for you.

Get your project slug and a token

On your project page at /app/{slug}:

  • The slug is shown there ("Your project slug is ...").
  • Expand the Developer section and click Create token, name it (e.g. "MCP"), and copy it. The token (prefixed kr_live_) is shown once.

Add the MCP server

Add this to your tool's MCP config (the in-app "Set up with AI" panel emits it pre-filled with your real slug and a fresh token):

{
  "mcpServers": {
    "kura": {
      "command": "npx",
      "args": ["-y", "@kuracms/mcp"],
      "env": {
        "KURA_PROJECT": "your-project-slug",
        "KURA_TOKEN": "kr_live_your_token",
        "KURA_BASE_URL": "https://kuracms.com"
      }
    }
  }
}

Where this config goes depends on your tool (Claude Code, Codex, and Cursor each read MCP servers from their own config file or settings UI - the JSON block is the same). Restart the tool so it picks up the server.

What the server can do (4 tools)

The package is @kuracms/mcp (v0.1.0). It has four schema tools:

  • list_content_types - no arguments. Lists every content type and its fields.
  • get_content_type - { slug }. One content type with its full field schema.
  • create_content_type - { name }. Creates a content type; the slug is derived from the name.
  • add_field - { type_slug, kind, label, required?, integer?, options?, target_type? }. Adds a field to a content type.
    • kind is one of: text, long_text, markdown, number, boolean, image, enum, url, color, coordinates, date, datetime, slug, rich_text, gallery, relation.
    • options - comma-separated values for an enum (e.g. "Available,Sold").
    • target_type - the referenced content-type slug for a relation.
    • integer - restrict a number field to whole numbers.

The one gotcha: it is additive only

In v0.1 these tools add content types and fields. There is no rename and no delete. So get your names right the first time - if you ask your AI to "add a price field" and later want it called "price_jpy", you cannot rename it in v0.1. When you prompt your AI, tell it to choose final field names up front.

Example exchange

You:  Add a bedrooms field to the Listing type, whole numbers, required.
kura: Done. add_field on "listing": kind=number, label="bedrooms",
      integer=true, required=true. The editor form for Listing now shows it.

Schema defined? Add content in the admin, then read it from your site - see Getting started and the REST API reference.