AINDF

Serves one design-system bundle to a coding agent and checks screen configs against it

By Oleg.Design (individual) JavaScript Local · stdio DesignDeveloper tools

28 popularity score ★ 28 ↓ 51/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

FirstTerminal
npx -y @ai-native-design-framework/kit check aindf.config.json
npx -y @ai-native-design-framework/kit bundle aindf.config.json --out aindf.bundle.json
Claude CodeTerminal
claude mcp add aindf -- npx -y @ai-native-design-framework/kit mcp '<ABSOLUTE_PATH_TO_BUNDLE>'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "aindf": {
      "command": "npx",
      "args": [
        "-y",
        "@ai-native-design-framework/kit",
        "mcp",
        "<ABSOLUTE_PATH_TO_BUNDLE>"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "aindf": {
      "command": "npx",
      "args": [
        "-y",
        "@ai-native-design-framework/kit",
        "mcp",
        "<ABSOLUTE_PATH_TO_BUNDLE>"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "aindf": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@ai-native-design-framework/kit",
        "mcp",
        "<ABSOLUTE_PATH_TO_BUNDLE>"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.aindf]
command = "npx"
args = ["-y", "@ai-native-design-framework/kit", "mcp", "<ABSOLUTE_PATH_TO_BUNDLE>"]
Gemini CLITerminal
gemini mcp add --scope user aindf npx -- -y @ai-native-design-framework/kit mcp '<ABSOLUTE_PATH_TO_BUNDLE>'
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

FirstTerminal
git clone https://github.com/0design/ai-native-design-framework <ABSOLUTE_PATH_TO_CLONE>
node <ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs check aindf.config.json
node <ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs bundle aindf.config.json --out aindf.bundle.json
Claude CodeTerminal
claude mcp add aindf -- node '<ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs' mcp '<ABSOLUTE_PATH_TO_BUNDLE>'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "aindf": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs",
        "mcp",
        "<ABSOLUTE_PATH_TO_BUNDLE>"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "aindf": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs",
        "mcp",
        "<ABSOLUTE_PATH_TO_BUNDLE>"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "aindf": {
      "type": "stdio",
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs",
        "mcp",
        "<ABSOLUTE_PATH_TO_BUNDLE>"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.aindf]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs", "mcp", "<ABSOLUTE_PATH_TO_BUNDLE>"]
Gemini CLITerminal
gemini mcp add --scope user aindf node -- '<ABSOLUTE_PATH_TO_CLONE>/packages/aindf-kit/src/cli.mjs' mcp '<ABSOLUTE_PATH_TO_BUNDLE>'

What it does

AINDF (AI-Native Design Framework) is a specification and a Node.js kit for making a coding agent build screens from your design system rather than writing its own HTML and CSS. You describe the design system in a set of JSON sources (tokens, taxonomy, slots, applicability, presets, components, bindings), check them with `aindf check`, and pack them into one content-addressed bundle file with `aindf bundle`. The MCP server, started with `aindf mcp <bundle>`, serves that single bundle over stdio.

Through it an agent can ask what the design system offers (components by layer or role, a component's full prop and slot contract, what a slot accepts, which modifiers apply, named presets) and then submit a screen config, written as JSON pinned to that bundle's version, to `validate-screen`. The check returns ok or stable error codes with paths. It does not generate code: the separate `aindf build` command turns accepted screens into Next.js App Router pages.

The source defines nine tools, but the stdio server lists only seven. `submit-screen` and `request-extension` are offered only when the server is created with a staging store, as in a self-hosted edge deployment through the kit's `createDsMcp` and `mcpFetchHandler` exports, and they then need an author token. Under `aindf mcp` they are hidden, and a direct call returns a READ_ONLY error (packages/aindf-kit/src/mcp.mjs at v0.2.1).

What it needs

RuntimeNode.js 20+

Node.js 20.10 or newer. A design system written as AINDF 0.2 sources plus an aindf.config.json, which you must first pass through `aindf check` and pack with `aindf bundle` into a bundle file. The server is started with the absolute path to that bundle. No account or API key.

Limits

It serves one bundle, meaning one version of one design system, per server process. It only looks up and validates: it does not build, publish or accept screens, and it writes no files. The staging tools (`submit-screen`, `request-extension`) are not offered by `aindf mcp`; they need a self-built deployment with a staging store and an author token. Code generation targets Next.js App Router only, and that runs through the separate `aindf build` CLI command, not the MCP server. The npm page notes that a builder receipt is not a signature. The kit is at version 0.2 and its schemas are versioned.

Who it suits

Teams that keep their own design system and want a coding agent such as Claude Code to compose screens only from it, with a check that rejects props, slots or values the system lacks. It needs up-front work to write the design system as AINDF sources, so it suits maintainers willing to adopt the spec, not someone who wants an agent to read an existing Figma file or component library as it is. The stdio server is local and read-only. Pick something else if your screens are not built with Next.js and you want generated code.

Tools 9

get-ds
Returns the design system's identity, version pin and an overview of roles, components and bindings.
list-by-facet
Lists components, filtered by layer, role or render target.
get-component
Returns one component's contract: props, slots, states, accessibility notes and examples.
slot-accepts
Shows which layers and components a component's slot accepts, and how many.
applicable-modifiers
Lists the modifiers that can be applied to a component.
get-preset
Returns a named preset, or lists all presets when no name is given.
validate-screen
Checks a screen config against this bundle and returns ok or error codes with paths.
submit-screen
Stages a validated screen as a draft; only on a deployment with staging and an author token.
request-extension
Files a request to the design-system owner for a missing capability; staging deployments only.

Similar servers