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.
Runs the same actions as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
project_id*stringUUID 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_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 import:view-any.
TOKEN_MISSING_ABILITYtoken lacks import:view-any.
How is this guide?
Last updated on