create_epic
Adds an epic to a project as a draft, so Heimdall can split a brief into bodies of work and hang the stories under them.
Add an epic: project_id and title are required; summary (HTML), goal (one sentence), business_value (HTML), hypothesis, success_metrics (HTML), owner_id, priority (must, should, could or wont; should by default), starts_on, due_on and color fill in the rest. The epic takes the next number of the project's tracker sequence, starts as a draft, writes its first version and is announced as epic.created.
An epic reaches in review and approved through submit_for_review and the approvers, never by hand; the stories under it come from create_story_draft or create_work_item with the epic's id. A staff token with epic: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.
Runs the same action as
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
A client that honours annotations asks a person before running it.
Arguments
project_id*stringUUID of the project.
title*stringWhat the epic is called, 3 to 200 characters.
summarystringoptionalWhat the epic covers, as HTML.
goalstringoptionalOne sentence on what it achieves.
business_valuestringoptionalWhy the client wants it, as HTML.
hypothesisstringoptionalThe bet it makes, if any.
success_metricsstringoptionalHow the team will know it worked, as HTML.
owner_idstringoptionalUUID of the person who answers for it.
prioritystringoptionalIts MoSCoW priority; should by default.
mustshouldcouldwontstarts_onstringoptionalWhen work on it starts, YYYY-MM-DD.
due_onstringoptionalWhen it is due, YYYY-MM-DD.
colorstringoptionalThe badge colour the board and the roadmap paint it in.
zincredorangeamberyellowlimegreenemeraldtealcyanskyblueindigovioletpurplefuchsiapinkroseWhat it returns
{ "data": { "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "number": 1, "reference": "SCL-1", "title": "Order placement", "summary": "<p>A customer picks services and items and chooses pickup or drop-off.</p>", "goal": "A customer books a wash in under two minutes.", "business_value": null, "hypothesis": null, "success_metrics": null, "owner_id": null, "owner_name": null, "priority": "must", "status": "draft", "starts_on": null, "due_on": null, "color": null, "position": 1, "version": 0, "approved_at": null, "approved_revision_id": null, "created_at": "2026-10-28T09:55:00+00:00", "updated_at": "2026-10-28T09:55:00+00:00" }}How it fails
VALIDATION_FAILEDtitle missing or outside 3 to 200 characters, a priority outside MoSCoW, a color outside the palette, a date that is not YYYY-MM-DD, or an owner_id who is not on the team.
RESOURCE_NOT_FOUNDunknown project_id, or a project outside the token's scope or the person's visibility.
FORBIDDENthe token is a client guest's, or the holder's role on the project does not carry epic:create.
TOKEN_MISSING_ABILITYtoken lacks epic:create.
How is this guide?
Last updated on