READ

list_council_sessions

The sittings of Heimdall's council on a project, newest first, each with its moment, record, voices, status, verdict, counts, cost and turns; free to call.

Return every time Heimdall's council sat on a project, newest first: each sitting with its moment, the record it read (by alias, id and title), the voices that sat, where it stands (queued, running, summarising, ready or failed), Heimdall's verdict once written (the summary, the findings ranked by id with a reason each, and where the voices disagreed), how many findings the voices left, what it cost, who convened it and when, and the voices' turns with their stances. Read it before convening the council on a record it already sat on, and read one sitting in full, findings included, with get_council_session.

The project is named by project_id. The list is empty for a project the council never sat on. Free to call; convene_council is the one that spends. A guest token is refused.

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.

Annotations

Read-only

It reads and never changes anything.

Arguments

project_id*string

UUID of the project.

What it returns

{  "data": [    {      "id": "d4e5f6a7-b8c9-4d0e-8f1a-2b3c4d5e6f70",      "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",      "moment": "requirement_review",      "subject_type": "work-item",      "subject_id": "0f9e8d7c-6b5a-4c3d-8e2f-1a0b9c8d7e6f",      "subject_title": "Apply a voucher at checkout",      "status": "ready",      "voices": ["thor", "loki"],      "round": 3,      "phase": "verdict",      "summary": "The story is sound; one criterion cannot be verified and the voucher code is personal data the record does not say how to keep.",      "plan": "1. Name the limit on the voucher criterion.\n2. Add the masking rule.",      "ranked": [        {          "finding_id": "e5f6a7b8-c9d0-4e1f-8a2b-3c4d5e6f7a81",          "reason": "A tester is blocked until the limit is named."        }      ],      "disagreements": [],      "finding_count": 2,      "cost_micros": 12500,      "cost": "$0.0125",      "failure_reason": null,      "requested_by": "c3d4e5f6-a7b8-4c9d-8e0f-1a2b3c4d5e6f",      "requester_name": "Jane Doe",      "started_at": "2026-10-28T15:00:05+00:00",      "finished_at": "2026-10-28T15:03:00+00:00",      "created_at": "2026-10-28T15:00:00+00:00",      "turns": [        {          "id": "a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c03",          "session_id": "d4e5f6a7-b8c9-4d0e-8f1a-2b3c4d5e6f70",          "voice": "thor",          "voice_name": "Thor",          "lens": "Testing, verification and defects",          "round": 1,          "kind": "reading",          "status": "ready",          "stance": "One criterion cannot be verified as written.",          "sources": null,          "finding_count": 1,          "failure_reason": null,          "started_at": "2026-10-28T15:00:05+00:00",          "finished_at": "2026-10-28T15:01:10+00:00"        }      ]    }  ]}

How it fails

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 import:view-any.

TOKEN_MISSING_ABILITY

token lacks import:view-any.

How is this guide?

Last updated on