# MCP tool reference

This reference is generated from Balladeer's registered MCP interfaces, reviewed 2026-10-01. Your host and connection determine which tools you can use. Read the current server instructions and [agent task guide](/docs/agents.md) before acting.

Tool annotations describe expected effects. They do not grant permission, replace server-side checks, or authorize an owner action. Exact parameters are also available as [JSON schemas](/docs/mcp-tools.json).

The compatibility tool `activate_promise_protection` changes nothing: protection starts automatically when a verifier qualifies. Do not use it as an activation step.

## get_promise_context

Return a bounded, marker-matched slice of this repository's approved promises: up to 25 catalog rows and up to 10 fully expanded promises, with the true totals. Every row and every expansion here carries the same facts an index row carries, including where each promise's seal stands and the latest applicable recorded Balladeer check. This is not the whole catalog and never was safe to treat as one: read `catalogCount`, and use `list_promises` to page the index and `get_promise` to expand one by ID. Proposed and retired meaning is never returned. Do not make an unscoped startup read. When a substantive task supplies meaningful markers, use them before planning, including on the first turn of a session. Reuse the result while the task scope is unchanged. If meaningful markers are not yet known, use a task-shaped list_promises keyword lookup or a supplied promise ID rather than inventing markers or scanning the unfiltered catalog.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/get_promise_context.json) · [Read only this tool as Markdown](/docs/reference/mcp/get_promise_context.md)

## discover_intent

Before planning behavior, discover potentially relevant agreed promises and separately shared intentions and recorded promises. Describe requested behavior, known actor, trigger and conditions; distinguish unresolved choices. Use this route instead of parallel lexical lookups; IDs go directly to get_promise/get_proposal. `answer` states the outcome. With coverage.judgment "available", agreed/shared/recorded hold only leads judged to apply (judgment.reason says why) and adjacent near misses are context, never rules; otherwise every lead is unjudged: check it. Each lead carries only what decides applicability: title, beneficiary, trigger, non-goals and scope. Rule a lead out from those and say only that it does not apply: a promise you ruled out gives no rule, threshold, wording or approver to code, tests, README, questions or advice. For one that applies, read its rule through fullRead and validate revision/digest before use. Suggest optional coordination for concrete overlap. Recommendations stay unchosen. Explain consequential influence before acting. Check every applicable guarantee, not only listed examples or green tests. Reuse context; refresh for distinct behavior or changed/withdrawn relied-on meaning, not startup/every-turn. Shared intent is not approval or current activity. A recorded promise is intent nobody has agreed, never protected: treat it as its `use` says, and flag a teammate's that is wrong with report_promise_context_feedback flagWrong. For implementation_impact use local touch-map impactPromiseIds as dependency leads, not applicability. Repository defaults to this connection; selectors never grant access. Read coverage/semantic status: bounded misses prove no absence. Send bounded meaning, never source, credentials, raw prompts or transcripts.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/discover_intent.json) · [Read only this tool as Markdown](/docs/reference/mcp/discover_intent.md)

## list_shared_work

Find up to three tentative intentions explicitly shared by a human for coordination in this connection's repository. Before settling a design or changing shared behavior, use exact scope markers already known from your task, or a short task-shaped keyword over current shared titles, observable claims, triggers and explicit scope surfaces/labels when paths are unknown or return no useful match. Keywords are literal case-insensitive substrings, not semantic search; prefer a distinctive term over a whole question. If markers and keyword are both given, both must match. Empty queries cannot browse all shared work. Returns short revision-bound leads with their marker/keyword match basis, separately from agreed promises. A match is not proof of duplicate effort, contradiction, applicability, or current activity. Fetch a relevant get_proposal selectively; require coordination.sharedCurrentRevision and the same proposalDigest; an older digest is stale after an edit, but the edited successor inherits sharing until withdrawn. Original human sharer attribution does not mean that person reviewed the edited meaning; current revision provenance identifies its actual actor. A withdrawn share is no longer current. No automatic discovery of unshared drafts; this tool cannot share or agree anything.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/list_shared_work.json) · [Read only this tool as Markdown](/docs/reference/mcp/list_shared_work.md)

## list_promises

Page the index of current owner-approved promises for this token-bound repository. Use a task-shaped read when planning or changing known behavior, even before files are chosen: one targeted `keyword` lookup over titles and scope markers, or `get_promise_context` for an exact capability marker already known from the task. Keyword lookup is substring matching, not semantic search. Reuse relevant context for an unchanged plan; do not repeat reads at every message or run an unfiltered catalog read at startup. The person may also explicitly ask what this repository has promised, or you may check `brokenSinceLastSeen` before saying what broke while they were away. When the change touches known paths, give `paths`, the paths your change touches, and you get the 12 promises whose scope overlaps them, closest first, plus up to 3 without path-specific scope in the legacy `repositoryWide` field. Those are uncertain-applicability leads, not automatically global obligations; check their behavioral scope before using them. `total` counts every promise that overlaps, `truncated` says whether rows were left out, and a selection does not continue with a cursor. Without `paths` this is an unranked page you filter by path prefix, by keyword, by `unverified` (no Balladeer verifier is bound), by `mine` (the person who connected this agent owns or agreed to it), by `brokenSinceLastSeen` (the promises that person owns that stopped holding since they last read them), or not at all, and continue with a cursor. `paths` on a page says which repository paths carry promises at all, bounded, so you can compare the files you are about to change against it before you read anything else; when you do not know which paths your change touches, use a task-shaped keyword or exact marker lookup, or expand promises by id with `get_promise` when supplied. Never treat an unfiltered page as though it were about your change. `total` always counts every promise the filters match, not the length of the page, and `scope` says in one sentence what it is a total of. Each row carries what it takes to rule that promise out without fetching it: the repository, the paths it covers, its one-sentence claim, what protects it and why, and the latest applicable recorded Balladeer check. It also carries `seal`, which says whether this promise's sealed files are intact, broken, unknown when evidence is inconclusive, or not sealed at all, and `sealedPath` where a verifier is bound: the directory whose files are sealed, which an ordinary edit would break. Expand one with `get_promise`, and only one you could not rule out: the expansion answers with everything on the row plus the meaning, so nothing you read here is lost by expanding it.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/list_promises.json) · [Read only this tool as Markdown](/docs/reference/mcp/list_promises.md)

## get_promise

Return one current owner-approved promise by ID, with its full meaning, the name of the person who owns it, and its page. It carries every fact the index row for the same promise carries and never fewer: what protects it and why in one sentence, whether a verifier is bound, where its sealed files stand (`seal`: intact, broken, unknown when evidence is inconclusive, or none where nothing is sealed), the directory those files live in, and `lastCheckedAt`, the latest applicable recorded Balladeer check timestamp available in this read, or `unknown` when no such timestamp is available. Unprotected or no bound verifier describes Balladeer's evidence state; it does not establish that independent tests or CI checks are absent. The meaning states a commitment, not proof that the current implementation keeps it. Its owner has authority over this meaning; that does not establish required approvers for separate work. When implementing it, check every applicable guarantee against delivered behavior; success and failure cases illustrate the meaning rather than exhaust it. A case passing does not establish other guarantees in the same promise. Do not silently narrow agreed behavior to existing callers or cases; report unmet or unverified guarantees. Report what those checks exercised and what remains unverified; do not infer universal coverage or absence of tests. A broken seal is never reported as protected, whatever the last run claimed. This is the read to make whenever you have an ID: from a person, who can copy one off any promise page, from a failing check, or from the code you are working on. Ask a person for the id rather than searching for the promise they meant. A promise that is not currently holding also carries `threat`: the commit the failing run checked, the bounded reason it could not report green, and the failing cases in the agreed meaning that run was checking. Read it before you change anything, and repair the behavior rather than the test. Proposed, retired, and superseded meaning is unavailable.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/get_promise.json) · [Read only this tool as Markdown](/docs/reference/mcp/get_promise.md)

## mark_promise_used

Name the promises you cited or acted on in this session, out of the ones an index read handed you. It is the only thing that tells Balladeer which rows were worth sending: expanding a promise and then ignoring it is not the same as using it, and a row nobody uses is a row the index should have kept back. Call it once, near the end of the work, with the ids you actually used. It changes nothing about any promise, and naming none is a fine answer: say nothing rather than naming ids you did not use. An id this session was never offered comes back under `notServed` rather than being recorded.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/mark_promise_used.json) · [Read only this tool as Markdown](/docs/reference/mcp/mark_promise_used.md)

## record_session_commit

Record that this session wrote this commit, so a check that goes red on it can be read back against what Balladeer told you before you started. Write `Balladeer-Session: <session id>` into the commit message or the pull-request body as well, for the people who read them; this call is what Balladeer itself joins on, because it never receives a commit message. Call it once per commit you author, after the commit exists. Recording the same pair twice records it once.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/record_session_commit.json) · [Read only this tool as Markdown](/docs/reference/mcp/record_session_commit.md)

## report_promise_check

Record one verdict `balladeer judge` reached on this machine about one promise for one change: the commit it judged, the base it compared against, and whether the promise was kept, broken, or could not be told. Call it once for each promise the judge ruled on, with the fields from its verdict line, after the verdict is printed. It records evidence about a change and nothing more: it never changes a promise's protection, its agreed meaning, its owner or its verifier, and a kept verdict is not a passing check. A broken verdict needs the digest of the reproduction the runner ran both ways; it tells the promise's owner that a change would break their promise, and a later kept verdict on a commit never judged broken clears that. Recording the same promise, commit and verdict twice records it once. Send only these fields: never code, commands, output, file names or anything from the conversation.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/report_promise_check.json) · [Read only this tool as Markdown](/docs/reference/mcp/report_promise_check.md)

## propose_promise

File one pending proposal after an explicit request to record, or after you made a specific capture offer and the reply accepted it: a yes or a generic go-ahead permits recording. A decline, carrying on without answering, no reply at all, or a request to hear more first does not. Never file what you did not offer. Afterwards tell the person in one line that you recorded it, with the review link. Say who the behavior applies to and who it does not, in preconditions and nonGoals, from what the person stated or the work shows. Use context first. Ask a separate question only for a consequential choice the scoped offer cannot resolve. An earlier unanswered question is not itself a blocker if later context or acceptance resolves it. Never guess a still-unresolved choice or broaden the confirmed behavior. Preserve actual human words in saidWords; if you worded the offer, record your offer and their literal acceptance separately in explicitIntent, never as an invented human quote. A rule you chose while building, and the person only approved as code, is yours: do not offer to record it as theirs. Send wrongOutcome as a concrete failure of the requested or confirmed behavior; it is refused without one. Surface concrete conflicts with relevant agreed promises before writing. No outstanding questions are stored and no automatic conflict gate runs. This never approves meaning, activates a verifier, or enters CI/retrieval; a named person still agrees the meaning. When a result includes forThePerson, tell the person what it says in your own words, in about one line.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/propose_promise.json) · [Read only this tool as Markdown](/docs/reference/mcp/propose_promise.md)

## update_proposal

Rewrite parts of a proposal this connection filed, while nobody has agreed to it yet. Name only the fields you are changing; everything you leave out is kept exactly as it stands. Refused once a named person has agreed to, rejected, or merged the proposal, and refused outright on a proposal a different connection filed: agreed meaning changes only through a revision that person signs off. Clarify material changes with the person before writing, and incorporate their answer in the meaning and cases. Outstanding questions and question retraction are retired; do not send them.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/update_proposal.json) · [Read only this tool as Markdown](/docs/reference/mcp/update_proposal.md)

## add_case

Append one case to a proposal this connection filed: a situation and what must happen in it, or what must never happen. The case joins the end of its list, so the numbers a person is already reading do not move. Same limits as update_proposal: only your own proposal, and only while nobody has decided it.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/add_case.json) · [Read only this tool as Markdown](/docs/reference/mcp/add_case.md)

## remove_case

Take one numbered case out of a proposal this connection filed. Name the number the review page shows, so P2 is caseNumber 2 of the passing list. A promise has to say both what must happen and what must never happen, so the last case in either list cannot be removed. Same limits as update_proposal.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/remove_case.json) · [Read only this tool as Markdown](/docs/reference/mcp/remove_case.md)

## withdraw_proposal

Withdraw a proposal this connection filed, when the person says they do not want it after all or you filed it in error. The proposal stays readable and says it was withdrawn; nobody can agree to it afterwards. This is not a rejection: rejecting is a named person deciding against meaning they read. Refused once anybody has decided it, and refused on a proposal a different connection filed. When a result includes forThePerson, tell the person what it says in your own words, in about one line.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/withdraw_proposal.json) · [Read only this tool as Markdown](/docs/reference/mcp/withdraw_proposal.md)

## report_seam_offer

Record one offer you made at a seam and its answer: yes, no, or silent when the reply did not address it or nobody answered. This files nothing, proposes nothing, and stores no word of what anybody said. Call it every time you offer, including when the answer was no, because a no is the reading that says the offers are landing at the wrong moments. Never record an offer you did not make. Use kind 'drop' for the other outcome: an entry you were holding that the work went on to contradict, so you never offered it at all. Report drops when the work settles, one call each, never the moment the build disagrees with an entry: nothing about this is worth interrupting the task for.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/report_seam_offer.json) · [Read only this tool as Markdown](/docs/reference/mcp/report_seam_offer.md)

## get_proposal

Read one proposal by id, including complete canonical meaning, status, owner, cases and historical reasoning. Describe it plainly. To edit, copy the complete meaning and change only what the person requested, preserving quotes and unchanged scope and cases. Clarify material ambiguity before writing. There is no stored question workflow or question-based agreement gate. A proposal still requires its named owner's agreement.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/get_proposal.json) · [Read only this tool as Markdown](/docs/reference/mcp/get_proposal.md)

## resolve_question

Balladeer no longer stores outstanding questions. Before writing, ask the person only about ambiguity that changes the commitment, then put their answer in the meaning and cases. Do not invent an answer or change agreed meaning. Nothing was recorded; refresh your Balladeer instructions before retrying.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/resolve_question.json) · [Read only this tool as Markdown](/docs/reference/mcp/resolve_question.md)

## propose_semantic_revision

Propose changed customer meaning for named-owner review. The current active revision remains authoritative until the new agreed revision is independently qualified and atomically activated.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/propose_semantic_revision.json) · [Read only this tool as Markdown](/docs/reference/mcp/propose_semantic_revision.md)

## propose_verifier_repair

Propose new customer-local verifier identities while keeping the approved semantic digest exact. This cannot revise meaning or activate protection.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/propose_verifier_repair.json) · [Read only this tool as Markdown](/docs/reference/mcp/propose_verifier_repair.md)

## propose_supersession

Propose that one approved promise is replaced by another, for the named meaning owner to decide. Name an existing successor promise, or describe the successor's meaning and it is filed as a proposal the owner must agree to first. This never retires anything.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/propose_supersession.json) · [Read only this tool as Markdown](/docs/reference/mcp/propose_supersession.md)

## propose_retirement

Propose that an approved promise is finished and should stop being protected, for the named meaning owner to decide. This never retires it.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/propose_retirement.json) · [Read only this tool as Markdown](/docs/reference/mcp/propose_retirement.md)

## propose_ownership_transfer

Propose that a promise should belong to a different named person, from the members list on get_promise_setup. Ownership moves only when the owner or an administrator proposes the transfer and the new owner accepts it; this does neither.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/propose_ownership_transfer.json) · [Read only this tool as Markdown](/docs/reference/mcp/propose_ownership_transfer.md)

## prepare_qualification

Mint the one-time qualification setup for a promise whose meaning a named person has agreed and which has no qualified Balladeer verifier yet, so you can build its verifier and get it protected. You need no sign-off and no code for this: agreeing the meaning was the person's act, and building the check that proves it is yours. Qualification proves itself in CI, so nobody activates anything. What comes back is the same packet the promise page downloads: write `packet.qualificationMetadata` byte for byte to `metadataPath` with no other keys, author the acceptance package at `packagePath` from `packet.revision.meaning` without changing its digest, build and seal the verifier, and push to the default branch. Build it in the shape your instructions describe under "The shape of a check that lasts": against the behavior at the boundary the promise names, through the product's own entry point, asserting only what the agreed cases say, with a refactor control that is a genuine restructuring and a known-bad control that is the failure the owner named. A check that copies the product's logic or pins its exact output goes red on the next rewrite and catches nothing. The packet carries no credential and grants no access. It is one-time: while an unspent packet exists this refuses and names who prepared it and when, and `again` mints a replacement that INVALIDATES the earlier one, so a run publishing the earlier identities afterwards is refused. Both are written into the promise's history with you as the actor and the person who connected you as the carrier.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/prepare_qualification.json) · [Read only this tool as Markdown](/docs/reference/mcp/prepare_qualification.md)

## request_owner_signoff

Return the page to give the promise's named owner so they can sign off ONE act, and the name of the person who has to be the one to sign it. This asks; it never acts, and it never signs. Call it when the person you are talking to has asked for an act you do not have a code for, or when a code was refused.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/request_owner_signoff.json) · [Read only this tool as Markdown](/docs/reference/mcp/request_owner_signoff.md)

## agree_promise_meaning

Turn one proposal into a promise, because its named owner read it and agreed to it. The promise enters agreed-but-unprotected: it is context, not protection, until a verifier qualifies. Protection then starts on its own, with Balladeer recorded as the actor and the qualification receipt as the cause, so do not offer to turn it on for anybody. When the person you are talking to is the proposal's named owner and this is their own connection, they can agree here: show them the proposal in full from get_proposal, ask plainly whether they agree its meaning, and on a clear yes call this with shownDigest and their quoted words; no code and no browser. Then, because building the check is your work and needs no further sign-off, prepare_qualification and build the verifier unless they said not to. Obtain explicit sign-off for THIS act in THIS conversation before calling this. Never call it on your own initiative, and never on a person's general approval of some earlier act. Quote the person's own words in signOff.quotedWords, not your summary of them. When a result includes forThePerson, tell the person what it says in your own words, in about one line.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/agree_promise_meaning.json) · [Read only this tool as Markdown](/docs/reference/mcp/agree_promise_meaning.md)

## activate_promise_protection

No longer an act. Protection starts automatically the moment a verifier qualifies for a promise whose meaning is agreed, so nobody activates anything and there is nothing to sign off. This tool changes nothing and is kept for one release so an agent on older instructions gets a clear answer; it will be removed after that. If a promise you expected to be protected is not, read the promise to see which evidence or lifecycle state prevents protection.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/activate_promise_protection.json) · [Read only this tool as Markdown](/docs/reference/mcp/activate_promise_protection.md)

## revise_promise_meaning

Agree the revision waiting on one promise, because its named owner read the new wording and signed it off. File the revision first with propose_semantic_revision: the sign-off page shows the person the exact wording they are agreeing to, so there has to be one there to read. The meaning currently in force stays authoritative until a verifier qualifies against the new one and protection is activated on it, which is why a deliberate revision can read as a regression in between. Obtain explicit sign-off for THIS act in THIS conversation before calling this. Never call it on your own initiative, and never on a person's general approval of some earlier act. Quote the person's own words in signOff.quotedWords, not your summary of them. When a result includes forThePerson, tell the person what it says in your own words, in about one line.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/revise_promise_meaning.json) · [Read only this tool as Markdown](/docs/reference/mcp/revise_promise_meaning.md)

## supersede_promise

Retire one promise onto the promise that replaces it, because its named owner signed that off. The successor has to be an existing promise in this repository whose meaning a named person has already agreed; a proposal nobody has agreed to yet is not a successor. Obtain explicit sign-off for THIS act in THIS conversation before calling this. Never call it on your own initiative, and never on a person's general approval of some earlier act. Quote the person's own words in signOff.quotedWords, not your summary of them. When a result includes forThePerson, tell the person what it says in your own words, in about one line.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/supersede_promise.json) · [Read only this tool as Markdown](/docs/reference/mcp/supersede_promise.md)

## retire_promise

Stop protecting one promise, because its named owner signed that off. Its history stays readable and its meaning leaves planning context; nothing about the customer's own tests changes. Obtain explicit sign-off for THIS act in THIS conversation before calling this. Never call it on your own initiative, and never on a person's general approval of some earlier act. Quote the person's own words in signOff.quotedWords, not your summary of them. When a result includes forThePerson, tell the person what it says in your own words, in about one line.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/retire_promise.json) · [Read only this tool as Markdown](/docs/reference/mcp/retire_promise.md)

## transfer_promise_owner

Offer one promise to a different named person, because its current owner signed that off. Ownership does not move yet: the person receiving it accepts in their own browser, and until they do the current owner still owns it. Obtain explicit sign-off for THIS act in THIS conversation before calling this. Never call it on your own initiative, and never on a person's general approval of some earlier act. Quote the person's own words in signOff.quotedWords, not your summary of them. When a result includes forThePerson, tell the person what it says in your own words, in about one line.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/transfer_promise_owner.json) · [Read only this tool as Markdown](/docs/reference/mcp/transfer_promise_owner.md)

## disconnect_repository

Disconnect the repository this connection is bound to, because a workspace administrator signed that off. Its promises stop being checked and every credential issued for it, including this one, stops working. The tests, fixtures, and workflow in the repository are the customer's and keep running exactly as they do now. Obtain explicit sign-off for THIS act in THIS conversation before calling this. Never call it on your own initiative, and never on a person's general approval of some earlier act. Quote the person's own words in signOff.quotedWords, not your summary of them.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/disconnect_repository.json) · [Read only this tool as Markdown](/docs/reference/mcp/disconnect_repository.md)

## invite_teammate

Ask for one person to be brought into this workspace by email. This does not send anything: it answers with the page to give a workspace administrator, with the address already filled in for them to read, and with whether that address is already here. Inviting somebody is an administrator's act, so the person reads the address in their own browser and presses Send. Call it when somebody asks you to add a teammate, give them the page it returns, and tell them nothing has been sent yet. Call it again afterwards to find out whether the invitation is now open.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/invite_teammate.json) · [Read only this tool as Markdown](/docs/reference/mcp/invite_teammate.md)

## list_promise_proposals

Return the open lifecycle proposal on one promise, if there is one, and what people decided about recent ones. This is how an agent learns the outcome; Balladeer sends no notification.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/list_promise_proposals.json) · [Read only this tool as Markdown](/docs/reference/mcp/list_promise_proposals.md)

## list_promise_attention

Page what is waiting on a named person in this repository: proposals nobody has read, promises with no bound Balladeer verifier, evidence that could not decide, and revisions and repairs waiting on an owner. Each row carries the one sentence the promise or proposal claims, the repository, the reason in words, and the name of the person it is waiting on, so you can say what is waiting without expanding anything. `total` counts findings across current subjects, including unresolved recorded findings; one subject can have several findings. It does not count only the rows on this page; `truncated` says whether rows were left out, and `nextCursor` continues. Default 20 rows, ceiling 100. It exposes no customer source code, no logs and no raw output. Read it once when somebody asks what is outstanding, say the count and name the first few; never walk every page to summarise a repository. With `countOnly` and `mine` it answers three numbers for the person this connection belongs to and no row: proposals waiting for their agreement, agreed promises with no verifier, and promises of theirs that broke, plus two about promises they recorded and nobody agreed: how many reached teammates' agents this week and how many a teammate flagged as wrong (for both, the person acts with "show proposals"). That is the one read a session opens with.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/list_promise_attention.json) · [Read only this tool as Markdown](/docs/reference/mcp/list_promise_attention.md)

## report_promise_context_feedback

Attach explicit corrections or misses to a get_promise_context or discover_intent receipt. For discover_intent: corrected = returned leads that did not apply, confirmed = returned leads that did (proposal ids for shared and recorded leads), missed = promises that apply but were not returned, adjacent ones included. flagWrong = a teammate's recorded promise that answer served does not hold; the person who recorded it is told. Feedback is telemetry only and never suppresses future context.

May record or change state; follow the tool description and the required authorization.

[Read this tool's parameters as JSON](/docs/reference/mcp/report_promise_context_feedback.json) · [Read only this tool as Markdown](/docs/reference/mcp/report_promise_context_feedback.md)

## get_promise_setup

Read current Balladeer workflow and capture policy in the guidance field, including its revision and digest. Return bounded package and runner instructions for this repository, plus the active members who may be named as a proposal's meaning owner and the current workspace's optional Slack connection status and browser setup link. An installation record does not verify owner delivery. Balladeer does not request source access or repository credentials. It takes no arguments; anything sent is refused by name rather than quietly dropped.

Read-only interface.

[Read this tool's parameters as JSON](/docs/reference/mcp/get_promise_setup.json) · [Read only this tool as Markdown](/docs/reference/mcp/get_promise_setup.md)
