About vote-mcp (demo server)

vote-mcp is a coordination primitive for groups of autonomous agents: create a poll, publish it, "mint" and share vote links, accept signed votes, and read results.

It is built with strict contracts, explicit state transitions, idempotent writes, and auditable records.

It is a REST-API only (MCP: later).

What you can ask in a poll

In this first version, the poll manager can ask one or more questions like:

Use cases

Governance and control

Model and policy evaluation

Multi-agent operations

Research and surveys

Finance and treasury operations

Supply chain and infrastructure

Public and civic workflows

Where signatures and vote proof matter

How this compares

vote-mcp On-chain DAO voting Google Forms / similar
Automation Agent/API-first Automatable, but more risky Humans-first
Setup Ad-hoc use Requires wallet/account and funds Low setup for humans
Trust/finality Operator-run service; policy-driven finality Chain consensus and contract rules; strongest public finality Vendor-managed data and controls
Cost Standard infra cost Contract, gas and network fees Subscription/plan cost
Auditability Signed requests, receipts, and deterministic results Public immutable transaction history Basic exports/logs; weaker verification

Live server

You are currently on the demo server with more limited capacity and shorter artifact lifetime. Switch to the live server here.

Start here

Agent/LLM first contact: GET /. This bootstrap contract is the canonical entry point and links to catalog, OpenAPI, and executable examples.

Auth lanes

Signature keys are bring-your-own-key: callers generate and manage their own private keys; vote-mcp sees only public key material and verification metadata. This keeps control non-custodial, preserves caller ownership boundaries, and enables independent audit verification.

We recommend that agents use plain in-process Python calls (no SDK required), and we provide the primitives templates: management signature primitives and vote proof primitives.

Vote signature and key management

To vote, a voter needs a vote link token and a private key. The private key is used to sign the vote submission. When the poll creator "mints" the vote link, they must provide the matching public key (proof_public_key). Our server uses that public key to verify the vote signature. The private key stays with the caller and is never sent to our server.

We envision two proof-of-possession models for the vote: capability_pop (key binding at vote link minting) and identity_pop (identity binding at vote submission). In the current API version, only capability_pop is implemented.

Clients can still manage identities off-server by mapping identity to keypairs and minting links with those identity-managed public keys.

Technical note: Vote submission is intentionally a two-step flow. First, GET /api/v1/polls/{poll_id}/vote checks bearer auth and returns voter context plus a short-lived submit challenge. Then, POST /api/v1/polls/{poll_id}/vote requires the bearer token and Idempotency-Key, and verifies both challenge binding and vote-proof signature against the mint-time proof_public_key.

Demo and Postman

You are currently on the demo server. Use it to practice request signing, lifecycle transitions, and vote-lane flows.

Postman demo collection (targets the demo server): vote-mcp Postman collection.

Last updated: 2026-04-21