DESTRUCTIVE

create_component

Adds one of the applications a project is made of, so Heimdall can lay down the web app and the API of a new project on the house stack.

Add a component to a project: project_id and name are required; slug is derived from the name when left out and names the component in versions such as web@1.4.0; kind is web_app by default or one of api, mobile_ios, mobile_android, mobile_cross_platform, desktop, service, integration, database, infrastructure, other; description (HTML), tech_stack (short tags) and owner_id fill in the rest. The component is written through the same action the Components page and the intake wizard run, and component.created goes out.

Assume the house stack unless the brief rules it out: a Laravel 13 web app with Livewire 4 and Flux, a Laravel API where one is needed, PostgreSQL and Redis behind them. A staff token with component:create on the project is needed.

Requires ability

The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.

The REST endpoint and this tool share one action, so validation, permissions and events are identical.

Fires one event

Delivered to every endpoint subscribed to it once the change is made.

Annotations

Destructive

A client that honours annotations asks a person before running it.

Arguments

project_id*string

UUID of the project.

name*string

What the component is called within the project, 2 to 80 characters.

slugstringoptional

The slug shown in versions such as web@1.4.0; derived from the name when left out.

kindstringoptional

What the component is; web_app by default.

web_appapimobile_iosmobile_androidmobile_cross_platformdesktopserviceintegrationdatabaseinfrastructureother
descriptionstringoptional

What the component does, as HTML.

tech_stackstring[]optional

Short technology tags, such as Laravel 13 and PostgreSQL.

owner_idstringoptional

UUID of the team member who answers for it.

What it returns

{  "data": {    "id": "c0a1b2c3-d4e5-4f60-8a7b-9c0d1e2f3a4b",    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",    "name": "Web app",    "slug": "web-app",    "kind": "web_app",    "description": "<p>The customer-facing site: services, ordering, tracking and bookings.</p>",    "tech_stack": ["Laravel 13", "Livewire 4", "Flux UI", "PostgreSQL"],    "owner_id": null,    "position": 1,    "environments_count": 0,    "archived_at": null,    "created_at": "2026-10-28T09:18:00+00:00",    "updated_at": "2026-10-28T09:18:00+00:00"  }}

How it fails

VALIDATION_FAILED

name missing or outside 2 to 80 characters, a kind outside the list, a slug or name another component of the project already uses, more tags than allowed, or an owner_id who is not on the team.

RESOURCE_NOT_FOUND

unknown project_id, or a project outside the token's scope or the person's visibility.

FORBIDDEN

the token is a client guest's, or the holder's role on the project does not carry component:create.

TOKEN_MISSING_ABILITY

token lacks component:create.

How is this guide?

Last updated on