Skip to content

feat(mcp): governance tools, and a vendor-neutral setup guide - #361

Merged
QSchlegel merged 1 commit into
preprodfrom
claude/mcp-connections-ui
Aug 12, 2026
Merged

feat(mcp): governance tools, and a vendor-neutral setup guide#361
QSchlegel merged 1 commit into
preprodfrom
claude/mcp-connections-ui

Conversation

@QSchlegel

Copy link
Copy Markdown
Collaborator

Three governance tools, answering the three questions a treasury actually asks:

governance_list_ballots the team's internal decision log — how the
signers decided on each proposal, with any
drafted rationale
governance_vote_history what the wallet's DRep actually put on-chain,
newest first, with proposal titles
governance_open_proposals active proposals this wallet has NOT voted on
— the outstanding decisions. Cross-references
live proposals against on-chain vote history;
includeVoted returns the whole active set
annotated with how we voted.

open_proposals degrades rather than fails: if the DRep is unset or Koios is unreachable it still returns the active set and flags voteHistoryUnavailable, so a model can say "I could not check" instead of implying nothing has been voted on.

Two handler changes to support them, both mirroring the pattern already used for botBallotsUpsert:

  • botBallots gains a human branch. It was bot-only and required ballot:write even to GET; a wallet signer can already read these ballots through the tRPC router, so the bot gate now sits behind isBotJwt and humans are authorized by the same signer-or-owner predicate.

  • drepInfo gains a wallet-access check. It previously looked up ANY walletId for ANY authenticated caller, letting anyone map a wallet id to its DRep credential. Now goes through authorizeProxyReadForV1, the canonical dual-identity read check. This is a pre-existing hole, fixed here because this change exposes the endpoint through MCP.

Landing page: the hero now leads with MCP rather than one vendor. It shows the endpoint and a plain mcpServers JSON block that works in any client, with a per-vendor CLI mentioned only as an aside. Prompts in the demo were rewritten to match tools we actually expose, including the governance ones. The setup card is vendor-neutral for the same reason and gained an anchor the hero links to.

Three governance tools, answering the three questions a treasury actually
asks:

  governance_list_ballots    the team's internal decision log — how the
                             signers decided on each proposal, with any
                             drafted rationale
  governance_vote_history    what the wallet's DRep actually put on-chain,
                             newest first, with proposal titles
  governance_open_proposals  active proposals this wallet has NOT voted on
                             — the outstanding decisions. Cross-references
                             live proposals against on-chain vote history;
                             includeVoted returns the whole active set
                             annotated with how we voted.

open_proposals degrades rather than fails: if the DRep is unset or Koios is
unreachable it still returns the active set and flags
voteHistoryUnavailable, so a model can say "I could not check" instead of
implying nothing has been voted on.

Two handler changes to support them, both mirroring the pattern already
used for botBallotsUpsert:

- botBallots gains a human branch. It was bot-only and required
  ballot:write even to GET; a wallet signer can already read these ballots
  through the tRPC router, so the bot gate now sits behind isBotJwt and
  humans are authorized by the same signer-or-owner predicate.

- drepInfo gains a wallet-access check. It previously looked up ANY
  walletId for ANY authenticated caller, letting anyone map a wallet id to
  its DRep credential. Now goes through authorizeProxyReadForV1, the
  canonical dual-identity read check. This is a pre-existing hole, fixed
  here because this change exposes the endpoint through MCP.

Landing page: the hero now leads with MCP rather than one vendor. It shows
the endpoint and a plain `mcpServers` JSON block that works in any client,
with a per-vendor CLI mentioned only as an aside. Prompts in the demo were
rewritten to match tools we actually expose, including the governance
ones. The setup card is vendor-neutral for the same reason and gained an
anchor the hero links to.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
multisig Ready Ready Preview Aug 12, 2026 10:52pm

Request Review

@QSchlegel
QSchlegel merged commit cf1e9f8 into preprod Aug 12, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant