What you need

  • Node.js 22.0.0 or newer, as the node your assistant starts. On an older Node it stops before it unpacks anything, with a sentence that says what it needs.
  • macOS or Linux. Windows is untested.
  • npx and tar on your PATH.
  • Claude Desktop, Claude Code or Cursor.
  • Nothing to sign up for. It needs no account or key.

Install

npx -y @oods/foundry

Every client starts this same command and registers it as oods-foundry. On its first start it downloads the package and unpacks its runtime into ~/.oods-foundry, so that start takes longer than the ones after it.

Apache-2.0: free for any use, including at work. What it generates for you is yours.

claude mcp add oods-foundry -- npx -y @oods/foundry
claude mcp get oods-foundry
  • Check it worked: the second command prints Status: ✓ Connected.
  • Options go after the name: -s user registers it for every project, and -e MCP_TOOLSET=all adds the on-demand tool, 21 tools in all.
  • Remove it: claude mcp remove oods-foundry

Or install 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.

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

In Claude Code the skill is /oods-foundry:oods-foundry.

Updating: the plugin runs an exact version of the server and moves when its repository does. Update it with claude plugin marketplace update oods-foundry, then claude plugin update oods-foundry@oods-foundry.

In the MCP Registry

OODS Foundry is listed in the official MCP Registry as com.oods-foundry/foundry.

Your first prompt

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

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. Open one in your browser.

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"
        ],
        "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-7426ab6e",
  "schemaRefCreatedAt": "2026-10-08T15:09:43.737Z",
  "schemaRefExpiresAt": "2026-10-08T15:39:43.737Z",
  "compositionId": "cmp-b411a9ebf6dc",
  "version": 1,
  "parentVersion": null,
  "operation": "compose",
  "head": "af36064f0f930eec023a3e02e0f1280cf8dbe8f7",
  "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
    }
  }
}

Then, to see what it knows:

Use oods-foundry to check its health.

What comes back: a status of ok, the version, and how many objects, traits and components it knows. The object count includes internal objects that its listings leave out. Each measurement it keeps names the version it was measured on.

What health_check answered:
{
  "status": "ok",
  "server": {
    "version": "0.10.1",
    "uptime": 1325
  },
  "registry": {
    "components": 114,
    "traits": 49,
    "objects": 16,
    "lastSync": "2026-10-06T04:59:14Z",
    "countsFrom": {
      "components": "live",
      "objects": "live",
      "traits": "live"
    },
    "definitions": {
      "folders": {
        "objects": "~/.oods-foundry/objects",
        "traits": "~/.oods-foundry/traits"
      },
      "objects": {
        "total": 16,
        "shipped": 16,
        "user": 0,
        "replacingShipped": []
      },
      "traits": {
        "total": 49,
        "shipped": 49,
        "user": 0
      },
      "issues": []
    }
  },
  "tokens": {
    "built": true,
    "brands": [
      "A",
      "B"
    ],
    "themes": [
      "dark",
      "hc",
      "light"
    ],
    "scopes": {
      "A": [
        "dark",
        "hc",
        "light"
      ],
      "B": [
        "dark",
        "hc",
        "light"
      ]
    },
    "defaultScope": {
      "brand": "A",
      "theme": "light",
      "source": "default"
    },
    "registry": {
      "brands": [
        "A",
        "B"
      ],
      "default": "A",
      "folder": "~/.oods-foundry/runtime/0.10.1-8f7d4c36f4a2/packages/tokens/src/tokens/brands",
      "teamFolder": "~/.oods-foundry/brands",
      "issues": []
    }
  },
  "schemas": {
    "savedCount": 0,
    "storeDir": "~/.oods-foundry/schemas"
  },
  "latency": 16,
  "productReality": {
    "runtime": {
      "cells": 200,
      "pass": 200,
      "typedGap": 0,
      "fail": 0,
      "head": "debfc52e74881829b2d79726262fe955dc96cb7f",
      "archiveSha256": "6ebf8a9caaaaed13b0b865bd7d101daa0e6cb273d7ecb9deeafc0753523fb19f",
      "thisBuild": false,
      "measuredOn": {
        "version": "0.4.1",
        "sourceHead": "debfc52e74881829b2d79726262fe955dc96cb7f",
        "archiveSha256": "6ebf8a9caaaaed13b0b865bd7d101daa0e6cb273d7ecb9deeafc0753523fb19f"
      }
    },
    "release": {
      "bundleHead": "93c5224a48c1a2e87aed3dbd24c49d8a62009327",
      "archiveSha256": "cd1f7f71b52e7e5a33297bcec7e74aa186a8cc370558a2aa6f588ceb80117ad7",
      "apps": [
        "Organization",
        "Subscription",
        "User"
      ],
      "frameworks": [
        "react",
        "vue"
      ],
      "cells": 42,
      "pass": 42,
      "typedGap": 0,
      "fail": 0,
      "head": "93c5224a48c1a2e87aed3dbd24c49d8a62009327",
      "thisBuild": false,
      "measuredOn": {
        "version": "0.2.0",
        "sourceHead": "93c5224a48c1a2e87aed3dbd24c49d8a62009327",
        "archiveSha256": "cd1f7f71b52e7e5a33297bcec7e74aa186a8cc370558a2aa6f588ceb80117ad7"
      }
    },
    "tools": {
      "entries": 21,
      "byTestImportLocation": {
        "test/product-reality": 20,
        "test/contracts": 1,
        "other-spec": 0,
        "none": 0
      },
      "head": "d59cb600a7d8279ceb50c4354c91b2df00eef6b7",
      "sourceHead": "867f29346095587218cf9d9e7b834fd09bf38b7b",
      "portable": {
        "path": "build record (not shipped): e2e-host2.json",
        "sha256": "sha256:1a35cf31d2ab7a2e4c29a0f8a99cde814d40992f48ef1c22ae99753cb442cd5c",
        "bundleHead": "d59cb600a7d8279ceb50c4354c91b2df00eef6b7",
        "dirty": false,
        "tools": 20,
        "pass": 20,
        "typed": 0
      },
      "thisBuild": false,
      "measuredOn": {
        "version": "0.8.0",
        "sourceHead": "d59cb600a7d8279ceb50c4354c91b2df00eef6b7",
        "archiveSha256": null
      }
    },
    "html": {
      "head": null,
      "heads": [
        "36a3220f18a6743c4c7a75216cd1cfcddcd9b157",
        "c49317088d7e83690d1de709b2e43d39debf5eb9"
      ],
      "cells": 300,
      "pass": 300,
      "fail": 0,
      "receipt": "packages/mcp-server/registry/html-cells.v1.json",
      "sha256": "sha256:b61105d596aa58dd488ce2e236013110ca6767cd3aa7d5b202cb6a9383ce4453",
      "thisBuild": false,
      "measuredOn": {
        "version": "0.2.1",
        "sourceHead": "36a3220f18a6743c4c7a75216cd1cfcddcd9b157",
        "archiveSha256": null
      }
    },
    "fidelity": {
      "head": null,
      "heads": [
        "dfc723b1b9f2f14e11ebb3bdc49ae2dee85b0193"
      ],
      "cells": 18,
      "pass": 18,
      "fail": 0,
      "receipt": "build record (not shipped): fidelity-proof.json",
      "sha256": "sha256:9863cfe150a5b2e9a326e02683a10097371f6e07770427f7c8022912b0d306c2",
      "files": 138,
      "thisBuild": false,
      "measuredOn": {
        "version": "0.8.0",
        "sourceHead": "dfc723b1b9f2f14e11ebb3bdc49ae2dee85b0193",
        "archiveSha256": null
      }
    },
    "viz": {
      "types": 13,
      "patterns": 22,
      "retiredPatterns": 1,
      "families": 8,
      "classified": 36,
      "coreCells": 17,
      "coreSurfaceComplete": 17,
      "typedGaps": 0,
      "retiredCells": 3,
      "certifiedChartTypes": 13,
      "certifiedScopes": 78,
      "measuredOn": {
        "version": "0.6.2",
        "sourceHead": "1e6e024a3524ff475bc12cdb50215a42fe0e3ac5",
        "archiveSha256": null
      }
    }
  },
  "dslVersion": "1.0"
}

Next

Report bugs in GitHub Issues. For everything else: hello@aquex.ai