# For agents

OODS Foundry, the object-oriented design system, is driven by your AI assistant over MCP. This page is for the assistant: how to install it, what to ask first, every tool with its schemas, and the files on this site an agent can read. You can try the hosted tools before installing.

## Use it in Claude

Connect OODS Foundry to Claude to explore its objects and components, find recorded React and Vue screens, and draw charts from data you provide. The hosted tools are free and read-only. You don't need an OODS Foundry account, an API key or a local installation.

### Add the connector

1. In claude.ai, open **Customize → Connectors**, choose **+ Add**, then **Add custom connector**.
2. Name it **OODS Foundry** and enter `https://oods-foundry.com/mcp` as the remote MCP server URL. Choose **Continue**.
3. Review the connection settings and choose **Continue**. If Claude asks for an authentication method, choose **No sign in**. OODS Foundry needs no credentials or request headers. Finish with **Add**.
4. In a chat, open **+ → Connectors** and enable **OODS Foundry**. Try a prompt below.

On a Team or Enterprise plan, an owner or authorized administrator must first add the connector for the organization. See [Claude's custom connector instructions](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) for the steps for your plan.

### Try these prompts

#### Explore components

`Use OODS Foundry to show the first 10 components in the core category, with a short summary of each. Tell me whether there are more.`

You get a page of components from the current registry and whether another page follows.

#### Read an object

`Use OODS Foundry to show the Subscription object's fields and traits. Explain what each trait contributes.`

You get the object's definition, including its fields, traits and relationships.

#### Find a screen

`Use OODS Foundry to find the recorded Subscription detail screen in Vue. Give me its link and content hash.`

You get a link to a screen already generated by the site's pinned release, with the hash identifying that recorded app.

#### Draw and check a chart

`Use OODS Foundry to draw a bar chart of subscriptions by plan: Starter 12, Team 28, Business 9. Use brand A in the light theme. Include the data table, narrative and certification results.`

You get the chart as SVG, its data table and narrative, and the results of the chart's checks. Certification reports what passed or failed; read the results alongside the chart.

### What the hosted tools can do

The connector reads OODS Foundry's published objects, components and tokens, looks up recorded screens, and draws and checks charts from up to 500 rows. Importing your schema files, composing new screens, creating brands and writing files are available through the [local package](#install).

### If something doesn't work

- **The tools aren't available in your chat:** check that OODS Foundry is enabled under **+ → Connectors**. On a work account, check that your organization has added it.
- **The connection fails:** check that the URL is exactly `https://oods-foundry.com/mcp`, including `/mcp`. No OODS Foundry sign-in or key is needed.
- **The service is busy:** a `429` or `503` response gives a retry delay. Wait for that delay, then try the same request again. Anthropic's hosted MCP clients, including Claude's custom connectors, share a budget of 600 requests and 30 new charts a minute. That budget is shared across users.
- **A reply is too large:** ask for fewer components per page, shorter component summaries or fewer chart rows.

Read the [privacy policy](https://oods-foundry.com/privacy). For help, [contact us](https://oods-foundry.com/about) at <hello@aquex.ai>. Report bugs in [GitHub Issues](https://github.com/kneelinghorse/OODS-Foundry/issues).

### Hosted endpoint details

`https://oods-foundry.com/mcp`

Connect an MCP client over Streamable HTTP. No account or key is needed. The tools read the pinned package's catalog and registry. They draw and certify charts. They also look up the screens already recorded on this site.

- `health_check`, `catalog_list` and `object_registry` list and show read the running package, and `registry_snapshot` returns the package's summary of every object and trait in it.
- `structured_data_fetch` reads the tokens and manifest datasets, and their available versions. Read components a page at a time with `catalog_list`.
- `tool_schema` returns a tool's shipped schema, source URL and file hash. `tools/list` describes the narrower hosted inputs.
- `design_preview` returns a recorded screen's URL and content hash, by object, context and React or Vue. This site's lookup is separate from the local package's preview writer and `design_versions` history reader.
- `viz_render` draws from inline data in brand A or B, in light, dark or high contrast, through the same route as the [chart playground](https://oods-foundry.com/charts/playground).
- `artifact_certify` takes that chart input in `chart`, then draws and certifies its normalized spec in the same scope.

```
{
  "name": "design_preview",
  "arguments": {
    "object": "Subscription",
    "context": "detail",
    "framework": "react",
    "reproduce": true
  }
}
```

Set `reproduce: true` to include the pinned local command and calls or files to check. It is off by default. Repeat those locally and compare the recorded content hash. For a screen, create the recorded brand, compose, then use your own composition's `schemaRef` to generate. `health_check`'s process measurements and registry snapshot timestamps vary; host folder paths are omitted.

Chart replies contain hashes and certification by default. Set `output.svg` for the drawing, `output.includeA11y` for the data table and narrative, or `output.includeNormalizedSpec` for its specification. For `artifact_certify`, these options go inside `chart.output`. Reproduction details use `specFrom`, `rowsFrom` or `dataFrom` to name data already in the reply or preceding call, instead of repeating it.

Replies are bounded so that every Claude client accepts them. A reply that would be larger is refused with its size and a narrower call to make instead, and `catalog_list` limits the page size at full detail and reports any adjustment. The `sparkline-grid` pattern is not offered here. The package over local stdio returns the full outputs.

Local stdio is the authoritative path for the full toolset: generation, your objects and brands, file inputs and certification of your own specs. Hosted tools share the chart route's request budget and cache. Each address has a budget of its own, except that MCP clients hosted by Anthropic, such as claude.ai custom connectors, call from Anthropic's published addresses and share one larger budget between them. Past a budget, the reply is `429` with `Retry-After`. A retryable refusal says when to retry; repeated chart input can use the cached reply.

## Install

`npx -y @oods/foundry`

It runs on your machine as a local MCP server over stdio, registered as `oods-foundry`. It needs Node.js 22.0.0 or newer, as the `node` the client starts, on macOS or Linux (Windows is untested), with `npx` and `tar` on the PATH. Nothing to sign up for: it needs no account or key.

The package documents Claude Desktop, Claude Code and Cursor. Each starts the same command.

### Claude Code

```
claude mcp add oods-foundry -- npx -y @oods/foundry
claude mcp get oods-foundry
```

The second command prints `Status: ✓ Connected`. `-e MCP_TOOLSET=all` after the name adds the on-demand tool, 27 tools in all.

### Claude Desktop

Add this under `mcpServers` in `~/Library/Application Support/Claude/claude_desktop_config.json`, then restart Claude Desktop:

```
{
  "mcpServers": {
    "oods-foundry": {
      "command": "npx",
      "args": [
        "-y",
        "@oods/foundry"
      ]
    }
  }
}
```

### Cursor

Add this to `.cursor/mcp.json` in the project, or `~/.cursor/mcp.json` for every project, then reload the window:

```
{
  "mcpServers": {
    "oods-foundry": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@oods/foundry"
      ]
    }
  }
}
```

How to check each one worked, and what to do when one doesn't: [Get started](https://oods-foundry.com/start).

## The Claude Code plugin

The plugin bundles the server with the `oods-foundry` skill, which walks your assistant through the calls and tells it to report what wasn't checked. In Claude Code the skill is `/oods-foundry:oods-foundry`.

```
claude plugin marketplace add https://github.com/kneelinghorse/oods-foundry-claude-plugin.git
claude plugin install oods-foundry@oods-foundry
```

Another agent can read the skill as it ships: [SKILL.md](https://cdn.jsdelivr.net/npm/@oods/foundry@0.11.2/skills/oods-foundry/SKILL.md), in `@oods/foundry` 0.11.2.

## In the MCP Registry

OODS Foundry is listed in the official MCP Registry as `com.oods-foundry/foundry`. The `server.json` the package ships names the npm package and that entry: [the package's original server.json](https://cdn.jsdelivr.net/npm/@oods/foundry@0.11.2/server.json). That entry already lists this site's hosted endpoint, and [this site's server card](https://oods-foundry.com/.well-known/mcp/server-card.json) preserves that entry, including its title and icon.

## Source

OODS Foundry is open source under Apache-2.0. [The public source repository](https://github.com/kneelinghorse/OODS-Foundry) mirrors each release.

## Your first prompt with the local package

Each reply shown here is the real one, recorded by this site from the published OODS Foundry 0.11.2.

This example needs the local package connected to your assistant. The hosted connector can look up recorded screens, but it cannot compose a new one.

`Use oods-foundry to compose the Subscription detail screen and preview it.`

**What comes back:** OODS Foundry composes the screen by rule and names the component it chose for each slot, and why. The preview answers with a link to the screen running in React and another in Vue, with the Subscription's sample records, on your machine.

What `design_compose` answered for Subscription detail:

```
{
  "status": "ok",
  "layout": "detail",
  "schema": {
    "version": "2026.02",
    "screens": [
      {
        "id": "screen-detail-13",
        "component": "Stack",
        "layout": {
          "type": "stack",
          "gapToken": "cluster-default"
        },
        "children": [
          {
            "id": "detail-header-1",
            "component": "Stack",
            "layout": {
              "type": "stack",
              "align": "space-between",
              "gapToken": "stack-default"
            },
            "children": [
              {
                "id": "detail-header-1-record-title",
                "component": "DetailHeader",
                "props": {
                  "titleField": "plan_name",
                  "headingLevel": 1
                }
              },
              {
                "id": "screen-detail-13-record-summary",
                "component": "Stack",
                "layout": {
                  "type": "inline",
                  "gapToken": "cluster-tight"
                },
                "meta": {
                  "intent": "record-summary"
                },
                "children": [
                  {
                    "id": "screen-detail-13-record-summary-1",
                    "component": "StatusBadge",
                    "props": {
                      "tone": "lifecycle",
                      "statusField": "status",
                      "domain": "subscription"
                    }
                  },
                  {
                    "id": "screen-detail-13-record-summary-2",
                    "component": "BillingSummaryBadge",
                    "props": {
                      "amountField": "amount",
                      "currencyField": "currency",
                      "intervalField": "billing_interval",
                      "minorUnitsParameter": "minorUnits",
                      "minorUnits": 100
                    }
                  }
                ]
              },
              {
                "id": "slot-header-2",
                "component": "Stack",
                "meta": {
                  "intent": "slot:header",
                  "label": "header"
                },
                "children": [
                  {
                    "id": "ve-header-26",
                    "component": "VizMarkPreview",
                    "props": {
                      "title": "Payment amounts",
                      "description": "Payments recorded for this subscription, in its currency."
                    },
                    "chart": {
                      "chartType": "bar",
                      "source": "payment-events",
                      "dateFields": [
                        "last_payment_at",
                        "next_payment_due_at"
                      ],
                      "amountField": "amount",
                      "minorUnits": 100,
                      "currencyField": "currency"
                    }
                  },
                  {
                    "id": "ve-header-27",
                    "component": "StatusTimeline",
                    "props": {
                      "field": "status",
                      "historyField": "state_history",
                      "statesParameter": "states",
                      "showActorId": true,
                      "showReason": true
                    }
                  },
                  {
                    "id": "ve-header-28",
                    "component": "CancellationSummary",
                    "props": {
                      "hideWhenDefault": true,
                      "cancelAtPeriodEndField": "cancel_at_period_end",
                      "reasonField": "cancellation_reason",
                      "codeField": "cancellation_reason_code",
                      "requestedAtField": "cancellation_requested_at"
                    }
                  },
                  {
                    "id": "ve-header-29",
                    "component": "ArchiveSummary",
                    "props": {
                      "hideWhenDefault": true,
                      "archivedField": "is_archived",
                      "archivedAtField": "archived_at",
                      "restoredAtField": "restored_at",
                      "reasonField": "archive_reason",
                      "archivedByField": "archived_by",
                      "metadataField": "archive_metadata",
                      "retainHistoryParameter": "retainHistory",
                      "restoreWindowParameter": "restoreWindowDays",
                      "allowPartialRestoreParameter": "allowPartialRestore"
                    }
                  }
                ],
                "layout": {
                  "type": "stack",
                  "gapToken": "cluster-default"
                }
              }
            ]
          },
          {
            "id": "detail-body-10",
            "component": "Card",
            "layout": {
              "type": "stack",
              "gapToken": "cluster-default"
            },
            "children": [
              {
                "id": "detail-tabs-9",
                "component": "Tabs",
                "children": [
                  {
                    "id": "detail-tab-panel-3",
                    "component": "Stack",
                    "layout": {
                      "type": "stack",
                      "gapToken": "cluster-default"
                    },
                    "props": {
                      "label": "Billing"
                    },
                    "children": [
                      {
                        "id": "slot-tab-0-4",
                        "component": "CycleProgressCard",
                        "meta": {
                          "intent": "slot:tab-0",
                          "label": "tab-0"
                        },
                        "props": {
                          "progressField": "current_period_progress",
                          "periodStartField": "current_period_start",
                          "periodEndField": "current_period_end",
                          "intervalField": "billing_interval"
                        }
                      },
                      {
                        "id": "slot-tab-1-6",
                        "component": "PaymentTimeline",
                        "meta": {
                          "intent": "slot:tab-1",
                          "label": "tab-1"
                        },
                        "props": {
                          "lastPaymentField": "last_payment_at",
                          "nextPaymentField": "next_payment_due_at",
                          "paymentStatusField": "payment_status",
                          "paymentMethodField": "payment_method_type",
                          "amountField": "amount",
                          "currencyField": "currency"
                        }
                      }
                    ]
                  },
                  {
                    "id": "detail-tabs-9-read-fields",
                    "component": "Stack",
                    "props": {
                      "label": "Details"
                    },
                    "children": [
                      {
                        "id": "detail-tabs-9-subscription_id-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-subscription_id-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Subscription"
                            }
                          },
                          {
                            "id": "detail-tabs-9-subscription_id-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "subscription_id"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-plan_code-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-plan_code-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Plan code"
                            }
                          },
                          {
                            "id": "detail-tabs-9-plan_code-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "plan_code"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-plan_interval-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-plan_interval-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Plan interval"
                            }
                          },
                          {
                            "id": "detail-tabs-9-plan_interval-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "plan_interval"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-customer_name-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-customer_name-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Customer name"
                            }
                          },
                          {
                            "id": "detail-tabs-9-customer_name-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "customer_name"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-customer_email-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-customer_email-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Customer email"
                            }
                          },
                          {
                            "id": "detail-tabs-9-customer_email-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "customer_email"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-created_at-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-created_at-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Created at"
                            }
                          },
                          {
                            "id": "detail-tabs-9-created_at-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "created_at"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-updated_at-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-updated_at-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Updated at"
                            }
                          },
                          {
                            "id": "detail-tabs-9-updated_at-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "updated_at"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-last_event-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-last_event-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Last event"
                            }
                          },
                          {
                            "id": "detail-tabs-9-last_event-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "last_event"
                            }
                          }
                        ]
                      },
                      {
                        "id": "detail-tabs-9-last_event_at-read-field",
                        "component": "Stack",
                        "children": [
                          {
                            "id": "detail-tabs-9-last_event_at-label",
                            "component": "Text",
                            "props": {
                              "as": "strong",
                              "content": "Last event at"
                            }
                          },
                          {
                            "id": "detail-tabs-9-last_event_at-value",
                            "meta": {
                              "intent": "read-only-field"
                            },
                            "component": "Text",
                            "props": {
                              "field": "last_event_at"
                            }
                          }
                        ]
                      }
                    ]
                  }
                ],
                "props": {
                  "ariaLabel": "Record details"
                }
              }
            ]
          }
        ],
        "bindings": {
          "onEdit": "handleEdit",
          "onDelete": "handleDelete",
          "onCancel": "handleCancel",
          "onViewTimeline": "handleViewTimeline"
        },
        "meta": {
          "label": "Subscription"
        }
      }
    ],
    "objectSchema": {
      "status": {
        "type": "string",
        "required": true,
        "default": "future",
        "description": "Current lifecycle status of the subscription.",
        "enum": [
          "future",
          "trialing",
          "active",
          "paused",
          "pending_cancellation",
          "past_due",
          "unpaid",
          "terminated"
        ],
        "semanticType": "billing.subscription.status",
        "examples": [
          "active",
          "paused",
          "active",
          "trialing",
          "past_due",
          "active",
          "terminated",
          "pending_cancellation"
        ]
      },
      "state_history": {
        "type": "StateTransition[]",
        "required": false,
        "default": [],
        "description": "Chronological log of state transitions. Each entry records the before/after states,\ntimestamp, and (when governance is enabled) the actor, reason, and transition metadata.\nRendered by StatusTimeline in the detail and timeline views.\n\nEntry structure:\n  - from: string (previous state)\n  - to: string (new state)\n  - timestamp: ISO 8601 datetime\n  - actor_id: string (user/system who triggered the transition, optional)\n  - reason: string (human-readable justification, required when requireTransitionReason is true)\n  - transition_metadata: Record<string, unknown> (arbitrary context, optional)\n",
        "semanticType": "timeline.state_transition",
        "examples": [
          [
            {
              "title": "Trial started",
              "from": "future",
              "to": "trialing",
              "at": "2026-02-16T15:00:00Z",
              "reason": "Started a 14-day Team trial"
            },
            {
              "title": "Trial converted",
              "from": "trialing",
              "to": "active",
              "at": "2026-03-02T15:00:00Z",
              "reason": "First Team payment collected"
            }
          ],
          [
            {
              "title": "Started",
              "from": "future",
              "to": "active",
              "at": "2026-04-10T15:00:00Z",
              "reason": "Analytics add-on purchased"
            },
            {
              "title": "Paused",
              "from": "active",
              "to": "paused",
              "at": "2026-08-20T14:00:00Z",
              "reason": "Paused during the ERP migration"
            }
          ],
          [
            {
              "title": "Started",
              "from": "future",
              "to": "active",
              "at": "2026-01-15T08:00:00Z",
              "reason": "Subscribed to the Starter plan"
            },
            {
              "title": "Payment failed",
              "from": "active",
              "to": "past_due",
              "at": "2026-05-15T08:00:00Z",
              "reason": "Card expired; retrying"
            },
            {
              "title": "Recovered",
              "from": "past_due",
              "to": "active",
              "at": "2026-05-17T08:00:00Z",
              "reason": "New card charged"
            }
          ],
          [
            {
              "title": "Scheduled",
              "from": null,
              "to": "future",
              "at": "2026-09-19T10:00:00Z",
              "reason": "Trial starts once a card is verified"
            },
            {
              "title": "Trial started",
              "from": "future",
              "to": "trialing",
              "at": "2026-09-21T09:00:00Z",
              "reason": "Card verified; 14-day trial started"
            }
          ],
          [
            {
              "title": "Trial started",
              "from": "future",
              "to": "trialing",
              "at": "2026-01-20T10:30:00Z",
              "reason": "Started a 14-day Team trial"
            },
            {
              "title": "Trial converted",
              "from": "trialing",
              "to": "active",
              "at": "2026-02-03T10:00:00Z",
              "reason": "First payment collected"
            },
            {
              "title": "Payment failed",
              "from": "active",
              "to": "past_due",
              "at": "2026-09-03T10:00:00Z",
              "reason": "Card declined; retrying"
            }
          ],
          [
            {
              "title": "Started",
              "from": "future",
              "to": "active",
              "at": "2024-10-30T14:00:00Z",
              "reason": "Annual Enterprise agreement signed"
            },
            {
              "title": "Invoice overdue",
              "from": "active",
              "to": "past_due",
              "at": "2025-11-14T14:00:00Z",
              "reason": "Renewal invoice unpaid after 15 days"
            },
            {
              "title": "Recovered",
              "from": "past_due",
              "to": "active",
              "at": "2025-11-20T02:00:00Z",
              "reason": "Paid by bank transfer"
            }
          ],
          [
            {
              "title": "Started",
              "from": "future",
              "to": "active",
              "at": "2026-01-09T10:15:00Z",
              "reason": "Subscribed to the Starter plan"
            },
            {
              "title": "Cancellation requested",
              "from": "active",
              "to": "pending_cancellation",
              "at": "2026-06-20T09:00:00Z",
              "reason": "Closing the studio in July"
            },
            {
              "title": "Ended",
              "from": "pending_cancellation",
              "to": "terminated",
              "at": "2026-07-09T10:15:00Z",
              "reason": "Cancelled at the end of the billing period"
            }
          ],
          [
            {
              "title": "Trial started",
              "from": "future",
              "to": "trialing",
              "at": "2026-04-23T12:30:00Z",
              "reason": "Started a 14-day Business trial"
            },
            {
              "title": "Trial converted",
              "from": "trialing",
              "to": "active",
              "at": "2026-05-07T12:00:00Z",
              "reason": "First payment collected"
            },
            {
              "title": "Cancellation requested",
              "from": "active",
              "to": "pending_cancellation",
              "at": "2026-09-21T16:40:00Z",
              "reason": "Moving to an annual contract elsewhere"
            }
          ]
        ]
      },
      "allowed_transitions": {
        "type": "string[]",
        "required": false,
        "default": [],
        "description": "Materialized list of valid next states from the current status, computed from the\ntransitionRules parameter. When transitionRules is null (open model), this contains\nall states except the current one. Used by StatusSelector to disable invalid options\nand by StatusBadge to indicate available paths.\n",
        "semanticType": "status.navigation"
      },
      "cancel_at_period_end": {
        "type": "boolean",
        "required": true,
        "description": "Whether the subscription will cancel at the natural billing period end.",
        "semanticType": "billing.subscription.cancel_at_period_end",
        "examples": [
          false,
          false,
          false,
          false,
          false,
          false,
          true,
          true
        ]
      },
      "cancellation_reason": {
        "type": "string",
        "required": false,
        "description": "Free-form explanation captured during cancellation workflows.",
        "semanticType": "billing.subscription.cancellation_reason",
        "examples": [
          null,
          null,
          null,
          null,
          null,
          null,
          "Closing the studio in July",
          "Moving to an annual contract elsewhere"
        ]
      },
      "cancellation_reason_code": {
        "type": "string",
        "required": false,
        "description": "Structured reason code chosen from the allowedReasons parameter.",
        "semanticType": "status.cancel.reason_code"
      },
      "cancellation_requested_at": {
        "type": "datetime",
        "required": false,
        "description": "Timestamp when cancellation was initiated.",
        "semanticType": "billing.subscription.cancellation_requested_at",
        "examples": [
          null,
          null,
          null,
          null,
          null,
          null,
          "2026-06-20T09:00:00Z",
          "2026-09-21T16:40:00Z"
        ]
      },
      "created_at": {
        "type": "datetime",
        "required": true,
        "description": "Timestamp recording when the entity was first created.",
        "semanticType": "audit.created_at",
        "examples": [
          "2026-02-16T15:00:00Z",
          "2026-04-10T15:00:00Z",
          "2026-01-15T08:00:00Z",
          "2026-09-19T10:00:00Z",
          "2026-01-20T10:30:00Z",
          "2024-10-30T14:00:00Z",
          "2026-01-09T10:15:00Z",
          "2026-04-23T12:30:00Z"
        ]
      },
      "updated_at": {
        "type": "datetime",
        "required": false,
        "description": "Timestamp for the most recent modification, when available.",
        "semanticType": "audit.updated_at",
        "examples": [
          "2026-09-02T15:00:00Z",
          "2026-09-10T15:00:00Z",
          "2026-09-15T08:00:00Z",
          "2026-09-21T09:00:00Z",
          "2026-09-03T10:00:00Z",
          "2025-11-20T02:00:00Z",
          "2026-07-09T10:15:00Z",
          "2026-09-21T16:40:00Z"
        ]
      },
      "last_event": {
        "type": "string",
        "required": true,
        "description": "Lifecycle event associated with the most recent timestamp mutation.",
        "enum": [
          "billing_cycle_started",
          "billing_cycle_completed",
          "payment_received",
          "cancellation_requested"
        ],
        "semanticType": "audit.event.type",
        "examples": [
          "payment_received",
          "billing_cycle_completed",
          "payment_received",
          "billing_cycle_started",
          "billing_cycle_started",
          "payment_received",
          "billing_cycle_completed",
          "cancellation_requested"
        ]
      },
      "last_event_at": {
        "type": "datetime",
        "required": false,
        "description": "Timestamp for the lifecycle event captured in last_event.",
        "semanticType": "audit.event.timestamp",
        "examples": [
          "2026-09-02T15:00:00Z",
          "2026-09-10T15:00:00Z",
          "2026-09-15T08:00:00Z",
          "2026-09-21T09:00:00Z",
          "2026-09-03T10:00:00Z",
          "2025-11-20T02:00:00Z",
          "2026-07-09T10:15:00Z",
          "2026-09-21T16:40:00Z"
        ]
      },
      "amount": {
        "type": "integer",
        "required": true,
        "description": "Recurring price expressed in minor units (e.g., cents).",
        "semanticType": "billing.plan.amount",
        "money": {
          "currencyField": "currency",
          "minorUnits": 100
        },
        "examples": [
          14900,
          3900,
          1900,
          4900,
          4900,
          1200000,
          1900,
          14900
        ]
      },
      "currency": {
        "type": "string",
        "required": true,
        "description": "ISO 4217 currency code used for billing.",
        "semanticType": "billing.plan.currency",
        "examples": [
          "USD",
          "USD",
          "EUR",
          "USD",
          "GBP",
          "USD",
          "USD",
          "USD"
        ]
      },
      "billing_interval": {
        "type": "string",
        "required": false,
        "description": "Recurrence cadence (monthly, yearly, quarterly, etc.).",
        "semanticType": "billing.subscription.interval",
        "examples": [
          "monthly",
          "monthly",
          "monthly",
          "monthly",
          "monthly",
          "yearly",
          "monthly",
          "monthly"
        ]
      },
      "payment_status": {
        "type": "string",
        "required": false,
        "default": "pending",
        "description": "Outcome of the most recent collection attempt. Distinct from subscription\nlifecycle status — a subscription can be \"active\" with payment_status \"retrying\".\n",
        "enum": [
          "pending",
          "succeeded",
          "failed",
          "retrying",
          "refunded"
        ],
        "semanticType": "billing.cycle.payment_status",
        "examples": [
          "succeeded",
          "succeeded",
          "succeeded",
          "pending",
          "retrying",
          "succeeded",
          "succeeded",
          "succeeded"
        ]
      },
      "payment_method_type": {
        "type": "string",
        "required": false,
        "description": "Payment instrument category used for collection.",
        "enum": [
          "card",
          "ach",
          "wire",
          "invoice",
          "other"
        ],
        "semanticType": "billing.cycle.payment_method",
        "examples": [
          "card",
          "card",
          "card",
          "card",
          "card",
          "wire",
          "card",
          "card"
        ]
      },
      "proration_amount": {
        "type": "integer",
        "required": false,
        "default": 0,
        "description": "Prorated credit or charge in minor currency units generated by a mid-cycle\nplan change. Positive values are charges; negative values are credits.\nOnly populated when the supportProration parameter is true.\n",
        "semanticType": "billing.cycle.proration",
        "money": {
          "currencyField": "currency",
          "minorUnits": 100
        },
        "examples": [
          5333,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ]
      },
      "proration_date": {
        "type": "integer",
        "required": false,
        "description": "Unix timestamp (epoch SECONDS) at which proration is calculated. Pinned when an\nupcoming-invoice PREVIEW is requested and MUST be passed identically on commit so the\ncommitted charge equals the previewed amount. The preview is read-only and does NOT\nmutate the subscription. Stored as an integer (not a datetime) so the value round-trips\nbyte-identically between preview and commit — an ISO string normalization could shift it\nand desync the previewed vs charged amount. Only populated when supportProration is true.\nSource: docs.stripe.com/billing/subscriptions/prorations.\n",
        "semanticType": "billing.cycle.proration_timestamp"
      },
      "last_payment_at": {
        "type": "datetime",
        "required": false,
        "description": "Timestamp of the most recent successful payment.",
        "semanticType": "billing.subscription.last_payment_at",
        "examples": [
          "2026-09-02T15:00:00Z",
          "2026-08-10T15:00:00Z",
          "2026-09-15T08:00:00Z",
          null,
          "2026-08-03T10:00:00Z",
          "2025-11-20T02:00:00Z",
          "2026-06-09T10:15:00Z",
          "2026-09-07T12:00:00Z"
        ]
      },
      "next_payment_due_at": {
        "type": "datetime",
        "required": false,
        "description": "Timestamp when the next payment attempt should occur.",
        "semanticType": "billing.subscription.next_payment_due_at",
        "examples": [
          "2026-10-02T15:00:00Z",
          null,
          "2026-10-15T08:00:00Z",
          "2026-10-05T09:00:00Z",
          "2026-10-01T10:00:00Z",
          "2026-10-30T14:00:00Z",
          null,
          null
        ]
      },
      "current_period_start": {
        "type": "datetime",
        "required": true,
        "description": "Start timestamp of the current billing cycle.",
        "semanticType": "billing.subscription.current_period_start",
        "examples": [
          "2026-09-02T15:00:00Z",
          "2026-08-10T15:00:00Z",
          "2026-09-15T08:00:00Z",
          "2026-09-21T09:00:00Z",
          "2026-09-03T10:00:00Z",
          "2025-10-30T14:00:00Z",
          "2026-06-09T10:15:00Z",
          "2026-09-07T12:00:00Z"
        ]
      },
      "current_period_end": {
        "type": "datetime",
        "required": true,
        "description": "End timestamp of the current billing cycle.",
        "semanticType": "billing.subscription.current_period_end",
        "examples": [
          "2026-10-02T15:00:00Z",
          "2026-09-10T15:00:00Z",
          "2026-10-15T08:00:00Z",
          "2026-10-05T09:00:00Z",
          "2026-10-03T10:00:00Z",
          "2026-10-30T14:00:00Z",
          "2026-07-09T10:15:00Z",
          "2026-10-07T12:00:00Z"
        ]
      },
      "current_period_progress": {
        "type": "number",
        "required": false,
        "description": "Decimal progress (0-1) through the active billing cycle.",
        "semanticType": "billing.subscription.current_period_progress",
        "examples": [
          0.93,
          1,
          0.5,
          0.64,
          0.9,
          0.92,
          1,
          0.77
        ]
      },
      "is_archived": {
        "type": "boolean",
        "required": true,
        "default": false,
        "description": "Flag indicating whether the entity is currently archived (soft-deleted).",
        "semanticType": "status.archive.state"
      },
      "archived_at": {
        "type": "datetime?",
        "required": false,
        "description": "Timestamp for when the entity entered the archived state.",
        "semanticType": "status.archive.timestamp"
      },
      "restored_at": {
        "type": "datetime?",
        "required": false,
        "description": "Timestamp for when the entity was most recently restored from an archived state.",
        "semanticType": "status.archive.restore_timestamp"
      },
      "archive_reason": {
        "type": "string",
        "required": false,
        "description": "Human-readable narrative describing why the entity was archived.",
        "semanticType": "status.archive.reason"
      },
      "archived_by": {
        "type": "string",
        "required": false,
        "description": "User ID or system identifier of the actor who archived this entity.\nSet to \"system\" for automated/policy-driven archival. Supports audit trail queries\nlike \"show all entities archived by user X\" or \"show all auto-archived entities\".\n",
        "semanticType": "status.archive.actor"
      },
      "archive_metadata": {
        "type": "object",
        "required": false,
        "description": "Structured metadata about the archival action for compliance and audit purposes.\n\nProperties:\n  - method: \"manual\" | \"automated\" | \"policy\" — how the archive was triggered\n  - compliance_tags: string[] — regulatory labels (e.g., [\"GDPR\", \"SOX\", \"HIPAA\"])\n  - retention_policy_id: string — reference to the retention policy that triggered archival\n  - original_status: string — the Stateful status before archival\n  - related_entity_count: number — count of related entities also archived (cascade)\n",
        "semanticType": "status.archive.compliance"
      },
      "restoration_metadata": {
        "type": "object",
        "required": false,
        "description": "Metadata about the most recent restoration action.\n\nProperties:\n  - restored_by: string — user ID or \"system\"\n  - restored_fields: string[] — when partial restore, which fields were restored\n  - restoration_reason: string — why the entity was restored\n  - restored_from_snapshot: boolean — whether restored from a point-in-time snapshot\n",
        "semanticType": "status.archive.restoration"
      },
      "subscription_id": {
        "type": "string",
        "required": true,
        "description": "Primary identifier used across billing and lifecycle systems.",
        "semanticType": "billing.subscription.id",
        "examples": [
          "sub_northwind_business",
          "sub_northwind_analytics",
          "sub_lindqvist_starter",
          "sub_blueharbor_team",
          "sub_kestrel_team",
          "sub_tidewater_enterprise",
          "sub_marlow_starter",
          "sub_summit_business"
        ]
      },
      "plan_name": {
        "type": "string",
        "required": true,
        "description": "Human-readable plan label shown in headers.",
        "semanticType": "billing.plan.name",
        "examples": [
          "Business",
          "Analytics add-on",
          "Starter",
          "Team",
          "Team",
          "Enterprise",
          "Starter",
          "Business"
        ]
      },
      "plan_code": {
        "type": "string",
        "required": false,
        "description": "Internal plan code or price identifier.",
        "semanticType": "billing.plan.code",
        "examples": [
          "business-monthly",
          "analytics-addon-monthly",
          "starter-monthly",
          "team-monthly",
          "team-monthly",
          "enterprise-annual",
          "starter-monthly",
          "business-monthly"
        ],
        "displayLabel": "Plan code",
        "referenceLabels": {
          "plan_starter_monthly": "plan_starter_monthly",
          "plan_team_monthly": "plan_team_monthly",
          "plan_business_monthly": "plan_business_monthly",
          "plan_team_annual": "plan_team_annual",
          "plan_enterprise_annual": "plan_enterprise_annual",
          "plan_analytics_addon_monthly": "plan_analytics_addon_monthly",
          "plan_pro_monthly_2025": "plan_pro_monthly_2025",
          "plan_business_plus_monthly": "plan_business_plus_monthly"
        }
      },
      "plan_interval": {
        "type": "string",
        "required": false,
        "description": "Billing interval descriptor (monthly, yearly, etc.).",
        "semanticType": "billing.plan.interval",
        "examples": [
          "monthly",
          "monthly",
          "monthly",
          "monthly",
          "monthly",
          "yearly",
          "monthly",
          "monthly"
        ]
      },
      "customer_name": {
        "type": "string",
        "required": false,
        "description": "Customer or account name associated with the subscription.",
        "semanticType": "text.summary",
        "examples": [
          "Northwind Traders",
          "Northwind Traders",
          "Lindqvist Bakery",
          "Blue Harbor Studio",
          "Kestrel Print Co.",
          "Tidewater Co-op",
          "Marlow Yoga",
          "Summit Outfitters"
        ]
      },
      "customer_email": {
        "type": "email",
        "required": false,
        "description": "Billing contact email address.",
        "semanticType": "customer.account.email",
        "examples": [
          "billing@northwind.example",
          "billing@northwind.example",
          "finance@lindqvist.example",
          "accounts@blueharbor.example",
          "hello@kestrelprint.example",
          "treasurer@tidewater.example",
          "studio@marlowyoga.example",
          "ap@summit.example"
        ]
      },
      "payment_history": {
        "type": "PaymentRecord[]",
        "required": false,
        "description": "Recorded payments, oldest first, each with its time and amount in minor units. Drawn by the payment chart.",
        "examples": [
          [
            {
              "at": "2026-03-02T15:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-04-02T15:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-05-02T15:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-06-02T15:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-06-16T15:00:00Z",
              "amount": 5333
            },
            {
              "at": "2026-07-02T15:00:00Z",
              "amount": 14900
            },
            {
              "at": "2026-08-02T15:00:00Z",
              "amount": 14900
            },
            {
              "at": "2026-09-02T15:00:00Z",
              "amount": 14900
            }
          ],
          [
            {
              "at": "2026-04-10T15:00:00Z",
              "amount": 3900
            },
            {
              "at": "2026-05-10T15:00:00Z",
              "amount": 3900
            },
            {
              "at": "2026-06-10T15:00:00Z",
              "amount": 3900
            },
            {
              "at": "2026-07-10T15:00:00Z",
              "amount": 3900
            },
            {
              "at": "2026-08-10T15:00:00Z",
              "amount": 3900
            }
          ],
          [
            {
              "at": "2026-01-15T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-02-15T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-03-15T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-04-15T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-05-17T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-06-15T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-07-15T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-08-15T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-08-16T08:00:00Z",
              "amount": 1900
            },
            {
              "at": "2026-08-19T11:30:00Z",
              "amount": -1900
            },
            {
              "at": "2026-09-15T08:00:00Z",
              "amount": 1900
            }
          ],
          [],
          [
            {
              "at": "2026-02-03T10:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-03-03T10:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-04-03T10:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-05-03T10:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-06-03T10:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-07-03T10:00:00Z",
              "amount": 4900
            },
            {
              "at": "2026-08-03T10:00:00Z",
              "amount": 4900
            }
          ],
          [
            {
              "at": "2024-10-30T14:00:00Z",
              "amount": 1200000
            },
            {
              "at": "2025-11-20T02:00:00Z",
              "amount": 1200000
            }
          ],
          [
            {
              "at": "2026-01-09T10:15:00Z",
              "amount": 1900
            },
            {
              "at": "2026-02-09T10:15:00Z",
              "amount": 1900
            },
            {
              "at": "2026-03-09T10:15:00Z",
              "amount": 1900
            },
            {
              "at": "2026-04-09T10:15:00Z",
              "amount": 1900
            },
            {
              "at": "2026-05-09T10:15:00Z",
              "amount": 1900
            },
            {
              "at": "2026-06-09T10:15:00Z",
              "amount": 1900
            }
          ],
          [
            {
              "at": "2026-05-07T12:00:00Z",
              "amount": 14900
            },
            {
              "at": "2026-06-07T12:00:00Z",
              "amount": 14900
            },
            {
              "at": "2026-07-07T12:00:00Z",
              "amount": 14900
            },
            {
              "at": "2026-08-07T12:00:00Z",
              "amount": 14900
            },
            {
              "at": "2026-09-07T12:00:00Z",
              "amount": 14900
            }
          ]
        ]
      }
    }
  },
  "schemaRef": "compose-ea30891c",
  "schemaRefCreatedAt": "2026-10-11T13:50:08.162Z",
  "schemaRefExpiresAt": "2026-10-11T14:20:08.162Z",
  "compositionId": "cmp-26d2c8416df1",
  "version": 1,
  "parentVersion": null,
  "operation": "compose",
  "head": "e9d6b1a07217107c95b28cbf9f25a020dc118e2a",
  "selections": [
    {
      "slotName": "tab-0",
      "intent": "data-display",
      "selectedComponent": "CycleProgressCard",
      "explanation": "CycleProgressCard leads slot \"tab-0\" because view_extension placement.",
      "candidates": [
        {
          "name": "CycleProgressCard",
          "reason": "view_extension placement"
        }
      ],
      "placedComponents": [
        "CycleProgressCard"
      ]
    },
    {
      "slotName": "tab-1",
      "intent": "status-indicator",
      "selectedComponent": "PaymentTimeline",
      "explanation": "PaymentTimeline leads slot \"tab-1\" because view_extension placement.",
      "candidates": [
        {
          "name": "PaymentTimeline",
          "reason": "view_extension placement"
        }
      ],
      "placedComponents": [
        "PaymentTimeline"
      ]
    },
    {
      "slotName": "header",
      "intent": "page-header",
      "selectedComponent": "DetailHeader",
      "explanation": "DetailHeader leads slot \"header\" because record title placed by the layout from the object's label field. The slot also renders VizMarkPreview, StatusTimeline, CancellationSummary, ArchiveSummary after it, in that order.",
      "candidates": [
        {
          "name": "DetailHeader",
          "reason": "record title placed by the layout from the object's label field"
        },
        {
          "name": "VizMarkPreview",
          "reason": "view_extension placement"
        }
      ],
      "placedComponents": [
        "DetailHeader",
        "VizMarkPreview",
        "StatusTimeline",
        "CancellationSummary",
        "ArchiveSummary"
      ]
    }
  ],
  "validation": {
    "status": "ok",
    "errors": [],
    "warnings": []
  },
  "warnings": [
    {
      "code": "OODS-V121",
      "message": "Object 'Subscription' has maturity 'beta' — composed output may change.",
      "hint": "Consider using stable objects for production compositions."
    },
    {
      "code": "OODS-V117",
      "message": "Subscription refines 11 fields its traits define, and its own definitions are used: lifecycle/Stateful (status); lifecycle/Cancellable (cancel_at_period_end, cancellation_reason, cancellation_requested_at); financial/Billable (amount, currency, billing_interval, current_period_start, current_period_end, current_period_progress, next_payment_due_at)."
    }
  ],
  "objectUsed": {
    "name": "Subscription",
    "version": "2.0.0",
    "traits": [
      "lifecycle/Stateful",
      "lifecycle/Cancellable",
      "lifecycle/Timestampable",
      "financial/Billable",
      "lifecycle/Archivable",
      "viz/MarkBar"
    ],
    "fieldsComposed": 37,
    "viewExtensionsApplied": {
      "list": 4,
      "detail": 7,
      "form": 4,
      "card": 4,
      "timeline": 1,
      "dashboard": 1
    }
  },
  "meta": {
    "intentParsed": "Subscription detail view",
    "layoutDetected": "context-inferred: detail (from context=\"detail\")",
    "slotCount": 3,
    "nodeCount": 44,
    "intentSynthetic": true,
    "warnings": [
      "Object 'Subscription' has maturity 'beta' — composed output may change.",
      "Subscription refines 11 fields its traits define, and its own definitions are used: lifecycle/Stateful (status); lifecycle/Cancellable (cancel_at_period_end, cancellation_reason, cancellation_requested_at); financial/Billable (amount, currency, billing_interval, current_period_start, current_period_end, current_period_progress, next_payment_due_at)."
    ],
    "intelligence": {
      "fieldsExpanded": true,
      "slotsExpanded": 5,
      "expansionReason": "Expanded from 3 to 8 tabs for 37 fields",
      "patternGroups": [
        {
          "slotName": "tab-0",
          "patternId": "status-timeline",
          "compositeComponent": "StatusTimeline",
          "matchedFields": [
            "status",
            "updated_at"
          ],
          "confidence": 1
        }
      ],
      "fieldAffinityUsed": true
    }
  }
}
```

What `health_check` answers next, and what each part of it means: [Get started](https://oods-foundry.com/start#first-prompt).

## Tools

27 tools. Your assistant sees 26 by default, and `MCP_TOOLSET=all` turns on the rest. Each tool's input and output schemas are here as JSON, as the package ships them, beside a real call this site recorded.

| Tool | Listed | Input schema | Output schema | A real call |
| - | - | - | - | - |
| [`a11y_scan`](https://oods-foundry.com/tools/a11y-scan) | with MCP_TOOLSET=all | [JSON: the input schema of a11y_scan](https://oods-foundry.com/registry/0.11.2/tools/a11y_scan.input.json) | none ships | [JSON: a recorded call of a11y_scan](https://oods-foundry.com/tools/a11y-scan/call.json) |
| [`artifact_certify`](https://oods-foundry.com/tools/artifact-certify) | by default | [JSON: the input schema of artifact_certify](https://oods-foundry.com/registry/0.11.2/tools/artifact_certify.input.json) | [JSON: the output schema of artifact_certify](https://oods-foundry.com/registry/0.11.2/tools/artifact_certify.output.json) | [JSON: a recorded call of artifact_certify](https://oods-foundry.com/tools/artifact-certify/call.json) |
| [`brand_apply`](https://oods-foundry.com/tools/brand-apply) | by default | [JSON: the input schema of brand_apply](https://oods-foundry.com/registry/0.11.2/tools/brand_apply.input.json) | [JSON: the output schema of brand_apply](https://oods-foundry.com/registry/0.11.2/tools/brand_apply.output.json) | [JSON: a recorded call of brand_apply](https://oods-foundry.com/tools/brand-apply/call.json) |
| [`brand_create`](https://oods-foundry.com/tools/brand-create) | by default | [JSON: the input schema of brand_create](https://oods-foundry.com/registry/0.11.2/tools/brand_create.input.json) | [JSON: the output schema of brand_create](https://oods-foundry.com/registry/0.11.2/tools/brand_create.output.json) | [JSON: a recorded call of brand_create](https://oods-foundry.com/tools/brand-create/call.json) |
| [`brand_read`](https://oods-foundry.com/tools/brand-read) | by default | [JSON: the input schema of brand_read](https://oods-foundry.com/registry/0.11.2/tools/brand_read.input.json) | [JSON: the output schema of brand_read](https://oods-foundry.com/registry/0.11.2/tools/brand_read.output.json) | [JSON: a recorded call of brand_read](https://oods-foundry.com/tools/brand-read/call.json) |
| [`catalog_list`](https://oods-foundry.com/tools/catalog-list) | by default | [JSON: the input schema of catalog_list](https://oods-foundry.com/registry/0.11.2/tools/catalog_list.input.json) | [JSON: the output schema of catalog_list](https://oods-foundry.com/registry/0.11.2/tools/catalog_list.output.json) | [JSON: a recorded call of catalog_list](https://oods-foundry.com/tools/catalog-list/call.json) |
| [`code_generate`](https://oods-foundry.com/tools/code-generate) | by default | [JSON: the input schema of code_generate](https://oods-foundry.com/registry/0.11.2/tools/code_generate.input.json) | [JSON: the output schema of code_generate](https://oods-foundry.com/registry/0.11.2/tools/code_generate.output.json) | [JSON: a recorded call of code_generate](https://oods-foundry.com/tools/code-generate/call.json) |
| [`component_map`](https://oods-foundry.com/tools/component-map) | by default | [JSON: the input schema of component_map](https://oods-foundry.com/registry/0.11.2/tools/component_map.input.json) | [JSON: the output schema of component_map](https://oods-foundry.com/registry/0.11.2/tools/component_map.output.json) | [JSON: a recorded call of component_map](https://oods-foundry.com/tools/component-map/call.json) |
| [`component_map_read`](https://oods-foundry.com/tools/component-map-read) | by default | [JSON: the input schema of component_map_read](https://oods-foundry.com/registry/0.11.2/tools/component_map_read.input.json) | [JSON: the output schema of component_map_read](https://oods-foundry.com/registry/0.11.2/tools/component_map_read.output.json) | [JSON: a recorded call of component_map_read](https://oods-foundry.com/tools/component-map-read/call.json) |
| [`dashboard_render`](https://oods-foundry.com/tools/dashboard-render) | by default | [JSON: the input schema of dashboard_render](https://oods-foundry.com/registry/0.11.2/tools/dashboard_render.input.json) | [JSON: the output schema of dashboard_render](https://oods-foundry.com/registry/0.11.2/tools/dashboard_render.output.json) | [JSON: a recorded call of dashboard_render](https://oods-foundry.com/tools/dashboard-render/call.json) |
| [`design_compose`](https://oods-foundry.com/tools/design-compose) | by default | [JSON: the input schema of design_compose](https://oods-foundry.com/registry/0.11.2/tools/design_compose.input.json) | [JSON: the output schema of design_compose](https://oods-foundry.com/registry/0.11.2/tools/design_compose.output.json) | [JSON: a recorded call of design_compose](https://oods-foundry.com/tools/design-compose/call.json) |
| [`design_preview`](https://oods-foundry.com/tools/design-preview) | by default | [JSON: the input schema of design_preview](https://oods-foundry.com/registry/0.11.2/tools/design_preview.input.json) | [JSON: the output schema of design_preview](https://oods-foundry.com/registry/0.11.2/tools/design_preview.output.json) | [JSON: a recorded call of design_preview](https://oods-foundry.com/tools/design-preview/call.json) |
| [`design_versions`](https://oods-foundry.com/tools/design-versions) | by default | [JSON: the input schema of design_versions](https://oods-foundry.com/registry/0.11.2/tools/design_versions.input.json) | [JSON: the output schema of design_versions](https://oods-foundry.com/registry/0.11.2/tools/design_versions.output.json) | [JSON: a recorded call of design_versions](https://oods-foundry.com/tools/design-versions/call.json) |
| [`fidelity_preview`](https://oods-foundry.com/tools/fidelity-preview) | by default | [JSON: the input schema of fidelity_preview](https://oods-foundry.com/registry/0.11.2/tools/fidelity_preview.input.json) | [JSON: the output schema of fidelity_preview](https://oods-foundry.com/registry/0.11.2/tools/fidelity_preview.output.json) | [JSON: a recorded call of fidelity_preview](https://oods-foundry.com/tools/fidelity-preview/call.json) |
| [`health_check`](https://oods-foundry.com/tools/health-check) | by default | [JSON: the input schema of health_check](https://oods-foundry.com/registry/0.11.2/tools/health_check.input.json) | [JSON: the output schema of health_check](https://oods-foundry.com/registry/0.11.2/tools/health_check.output.json) | [JSON: a recorded call of health_check](https://oods-foundry.com/tools/health-check/call.json) |
| [`object_import`](https://oods-foundry.com/tools/object-import) | by default | [JSON: the input schema of object_import](https://oods-foundry.com/registry/0.11.2/tools/object_import.input.json) | [JSON: the output schema of object_import](https://oods-foundry.com/registry/0.11.2/tools/object_import.output.json) | [JSON: a recorded call of object_import](https://oods-foundry.com/tools/object-import/call.json) |
| [`object_import_read`](https://oods-foundry.com/tools/object-import-read) | by default | [JSON: the input schema of object_import_read](https://oods-foundry.com/registry/0.11.2/tools/object_import_read.input.json) | [JSON: the output schema of object_import_read](https://oods-foundry.com/registry/0.11.2/tools/object_import_read.output.json) | [JSON: a recorded call of object_import_read](https://oods-foundry.com/tools/object-import-read/call.json) |
| [`object_register`](https://oods-foundry.com/tools/object-register) | by default | [JSON: the input schema of object_register](https://oods-foundry.com/registry/0.11.2/tools/object_register.input.json) | [JSON: the output schema of object_register](https://oods-foundry.com/registry/0.11.2/tools/object_register.output.json) | [JSON: a recorded call of object_register](https://oods-foundry.com/tools/object-register/call.json) |
| [`object_registry`](https://oods-foundry.com/tools/object-registry) | by default | [JSON: the input schema of object_registry](https://oods-foundry.com/registry/0.11.2/tools/object_registry.input.json) | [JSON: the output schema of object_registry](https://oods-foundry.com/registry/0.11.2/tools/object_registry.output.json) | [JSON: a recorded call of object_registry](https://oods-foundry.com/tools/object-registry/call.json) |
| [`pipeline_run`](https://oods-foundry.com/tools/pipeline-run) | by default | [JSON: the input schema of pipeline_run](https://oods-foundry.com/registry/0.11.2/tools/pipeline_run.input.json) | [JSON: the output schema of pipeline_run](https://oods-foundry.com/registry/0.11.2/tools/pipeline_run.output.json) | [JSON: a recorded call of pipeline_run](https://oods-foundry.com/tools/pipeline-run/call.json) |
| [`registry_snapshot`](https://oods-foundry.com/tools/registry-snapshot) | by default | [JSON: the input schema of registry_snapshot](https://oods-foundry.com/registry/0.11.2/tools/registry_snapshot.input.json) | [JSON: the output schema of registry_snapshot](https://oods-foundry.com/registry/0.11.2/tools/registry_snapshot.output.json) | [JSON: a recorded call of registry_snapshot](https://oods-foundry.com/tools/registry-snapshot/call.json) |
| [`schema_read`](https://oods-foundry.com/tools/schema-read) | by default | [JSON: the input schema of schema_read](https://oods-foundry.com/registry/0.11.2/tools/schema_read.input.json) | [JSON: the output schema of schema_read](https://oods-foundry.com/registry/0.11.2/tools/schema_read.output.json) | [JSON: a recorded call of schema_read](https://oods-foundry.com/tools/schema-read/call.json) |
| [`schema_render`](https://oods-foundry.com/tools/schema-render) | by default | [JSON: the input schema of schema_render](https://oods-foundry.com/registry/0.11.2/tools/schema_render.input.json) | [JSON: the output schema of schema_render](https://oods-foundry.com/registry/0.11.2/tools/schema_render.output.json) | [JSON: a recorded call of schema_render](https://oods-foundry.com/tools/schema-render/call.json) |
| [`schema_store`](https://oods-foundry.com/tools/schema-store) | by default | [JSON: the input schema of schema_store](https://oods-foundry.com/registry/0.11.2/tools/schema_store.input.json) | [JSON: the output schema of schema_store](https://oods-foundry.com/registry/0.11.2/tools/schema_store.output.json) | [JSON: a recorded call of schema_store](https://oods-foundry.com/tools/schema-store/call.json) |
| [`structured_data_fetch`](https://oods-foundry.com/tools/structured-data-fetch) | by default | [JSON: the input schema of structured_data_fetch](https://oods-foundry.com/registry/0.11.2/tools/structured_data_fetch.input.json) | [JSON: the output schema of structured_data_fetch](https://oods-foundry.com/registry/0.11.2/tools/structured_data_fetch.output.json) | [JSON: a recorded call of structured_data_fetch](https://oods-foundry.com/tools/structured-data-fetch/call.json) |
| [`tokens_build`](https://oods-foundry.com/tools/tokens-build) | by default | [JSON: the input schema of tokens_build](https://oods-foundry.com/registry/0.11.2/tools/tokens_build.input.json) | none ships | [JSON: a recorded call of tokens_build](https://oods-foundry.com/tools/tokens-build/call.json) |
| [`viz_render`](https://oods-foundry.com/tools/viz-render) | by default | [JSON: the input schema of viz_render](https://oods-foundry.com/registry/0.11.2/tools/viz_render.input.json) | [JSON: the output schema of viz_render](https://oods-foundry.com/registry/0.11.2/tools/viz_render.output.json) | [JSON: a recorded call of viz_render](https://oods-foundry.com/tools/viz-render/call.json) |

## Rate limits

The README that ships with OODS Foundry 0.11.2 gives them, from the server's own policy:

Each tool accepts 60 calls a minute, except `design_preview` and `design_versions` (10); `brand_apply` and `a11y_scan` (12); `object_import` and `object_import_read` (20); `tokens_build`, `brand_create`, `brand_read`, `fidelity_preview`, `component_map`, `component_map_read`, `schema_store` and `schema_read` (30); and `pipeline_run` (40). A call past its tool's limit is refused with a rate-limit error; wait a few seconds and call again.

## Files for agents

- [/llms.txt](https://oods-foundry.com/llms.txt): this site's map for language models, with the pages to read first and these files.
- [/llms-full.txt](https://oods-foundry.com/llms-full.txt): the front door, the guides and the tool reference, whole, in one file.
- Every page as Markdown, at its path with `.md` added, such as [/agents.md](https://oods-foundry.com/agents.md); the home page's is `/index.md`. A request for the page's own URL with `Accept: text/markdown` gets the same text, and Copy as Markdown at the top of each page copies it.
- [/registry/0.11.2/index.json](https://oods-foundry.com/registry/0.11.2/index.json): every file below with its source and SHA-256 hash, and where each tool's schemas are.
- [/registry/0.11.2/tools.json](https://oods-foundry.com/registry/0.11.2/tools.json): every tool as a client lists it with MCP_TOOLSET=all: its name, description and input schema.
- [/registry/0.11.2/objects.json](https://oods-foundry.com/registry/0.11.2/objects.json): the 11 business objects, as object show returns them.
- [/registry/0.11.2/traits.json](https://oods-foundry.com/registry/0.11.2/traits.json): the 49 traits, as registry_snapshot with detail full returns them.
- [/registry/0.11.2/components.json](https://oods-foundry.com/registry/0.11.2/components.json): the 114 components, as catalog_list returns them.
- [/registry/0.11.2/tokens.json](https://oods-foundry.com/registry/0.11.2/tokens.json): every CSS variable by brand and theme, as @oods/tokens ships it.
- The same files for the version this site is built from, without the version in the path, such as `/registry/tools.json`.
- [/.well-known/mcp/server-card.json](https://oods-foundry.com/.well-known/mcp/server-card.json): the package's registry entry, which lists this site's Streamable HTTP endpoint. It's also at `/.well-known/mcp-server-card` and `/.well-known/mcp.json`, the paths earlier proposals named.
