vote.direct
REMOTE · VOTE.DIRECT
Run a real election or board vote: price it, check state HOA rules, draft the ballot and voter list.
Available components
Last scanned (20 hours ago)
Scores higher than 69% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Project Management
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (remove_voters). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability65
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3819 tokens (~212/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
- Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 95% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 0
- Stability: pass → 0.97 functional
- 30 Oct 26 0
- Stability: 0.97 → pass security
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Oct 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- New tool “remove_voters”, which the server declares destructive security
- Tool “add_voters” rewrote its description, which is the text the model reads security
- Tool “create_election_draft” rewrote its description, which is the text the model reads security
- Tool “get_election” rewrote its description, which is the text the model reads security
- Tool “publish_election” rewrote its description, which is the text the model reads security
- Schema quality: 2633 → 3819 ▼ functional
- New tool “create_checkout_link” functional
- New tool “get_election_price” functional
- New tool “get_election_readiness” functional
- New tool “update_election_draft” functional
- “publish_election” added an optional parameter “after_payment” cosmetic
- “create_election_draft” reworded the description of “closes_at” cosmetic
- “start_election_draft” reworded the description of “closes_at” cosmetic
- “create_election_draft” made “closes_at” optional cosmetic
- “start_election_draft” made “closes_at” optional cosmetic
- 18 Oct 26 +1
- Tool “compare_platforms” rewrote its description, which is the text the model reads security
- Tool “get_review_record” rewrote its description, which is the text the model reads security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Probed https://vote.direct/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=vote.direct | CN=WE1,O=Google Trust Services,C=US | 20 Sept 2026 | 20 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | 5e8c38dfee794c6c13909c98f4fec9f5 |
| SANs: vote.direct, *.vote.direct | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of vote.direct. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| direct. | present | 53200 | 8 | Verified |
| vote.direct. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://vote.direct/api/mcp | Verified | 200 | |
| http (plaintext) | http://vote.direct/api/mcp | HTTPS enforced | 301 | https://vote.direct/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_voters Add voters to a draft election ~159
Add eligible voters (email, optional name and unit) to a DRAFT election in the connected account, through the import the voter list page uses. Idempotent: people already on the list are skipped, a voter listed twice is added once, and rows that cannot be added are named by row number. Returns counts, never the rows, and the updated price. For a published election, voters are added by the organizer on the election page, because a larger list can change the price.
| Name | Type | Req | Description |
|---|---|---|---|
| election | string | yes | The draft's id or slug. |
| voters | array | yes | The eligible voters (the roster), one per owner/member. Email addresses only; people reached by text or mail are added by the organizer on the election page. |
No output schema declared.
No examples provided.
compare_platforms Compare vote.direct with a competitor ~90
Honest head-to-head between vote.direct and a named competitor (including the cases where the competitor is the better choice), with published prices checked on the competitor’s own pages, a vendor disclosure, and the price-beat offer where the competitor is a paid election platform. Without a competitor, returns which-platform-for-which-need guidance.
| Name | Type | Req | Description |
|---|---|---|---|
| competitor | string | – | Competitor to compare against (optional) |
No output schema declared.
No examples provided.
create_checkout_link A card payment page for a draft election ~163
A secure Stripe payment page for a DRAFT election's fee, for the person you act for to pay by card. It creates the page and charges nothing: hand the person the link. The page asks for exactly the price get_election_price reports. Publishing follows the payment either way: the election's page, where Stripe returns them, publishes it once the payment lands, and publish_election with after_payment: true publishes it from here or answers already_published. Refused when nothing is owed (free, already paid, or covered by a plan) and when the prepaid balance covers the fee, because publishing then takes it without a card.
| Name | Type | Req | Description |
|---|---|---|---|
| election | string | yes | The election's id or slug, from list_elections or create_election_draft. |
No output schema declared.
No examples provided.
create_election_draft Draft an election ~615
Create a DRAFT election in the connected account: the ballot, schedule, verification, secrecy, results visibility, optional quorum and state-law checks, and optionally the voter list (emails). A draft charges nothing and contacts nobody. Returns the draft's id, the draft as saved, what still blocks publishing, the exact price, and the finish link where the person reviews, pays if needed, and publishes. Create it once and change it with update_election_draft: an account can create 10 elections an hour. Ask the person for anything you do not know (closing date and time zone, seats, candidates) rather than guessing: this is a binding vote.
| Name | Type | Req | Description |
|---|---|---|---|
| closes_at | string | – | When voting closes, ISO 8601 with offset, e.g. 2026-11-12T17:00:00-07:00. Must be in the future. Leave it out when nobody said: voting then closes at 5pm in `timezone` seven days from today, and the… |
| community_type | string | – | hoa or condo, when the state rules differ between them. |
| description | string | – | Optional instructions or background shown above the ballot. Plain text. |
| opens_at | string | – | When voting opens, ISO 8601 with offset. Omit to open when published. |
| organization_name | string | – | Association name shown to voters and used as the email sender name. Defaults to the account's organization. |
| questions | array | yes | The ballot, in order. |
| quorum | object | – | Optional quorum: {type: "percentage" | "count", threshold}. E.g. {type: "percentage", threshold: 25} means a quarter of eligible voters must vote. |
| results | string | – | after_close (default): voters see results once voting closes. live: running totals while voting is open. owner_only: only the organizer sees results. |
| secret_ballot | boolean | – | Keep who voted for what private from the organizer. Defaults to true. |
| state | string | – | Two-letter US state code of the association (e.g. CA). Turns on that state's election-law checks before publishing. |
| timezone | string | yes | IANA timezone of the association, e.g. America/Denver. Voters see times in it. |
| title | string | yes | Election title voters see, e.g. "2026 Board of Directors Election". |
| verification | string | – | email: every voter confirms a code sent to their email (included free). email_or_sms: voters may also confirm by text message (paid elections only; elections of 25 voters or fewer are email-only). |
| vote_type | string | – | What the vote decides, for the state-law checks. |
| voters | array | – | The eligible voters (the roster), one per owner/member. Email addresses only; people reached by text or mail are added by the organizer on the election page. |
No output schema declared.
No examples provided.
create_survey Create a survey ~229
Create a free, anonymous survey in the connected account and publish it (or save it as a draft with publish: false). Surveys are for feedback, not binding votes: anyone with the link can answer and respondents are not verified. For anything binding (a board election, a bylaw amendment, an assessment) use create_election_draft. Question types: single (pick one), multiple (checkboxes), yes_no, rating (1-5 by default; settings {scale: "nps"} makes a 0-10 Net Promoter Score), ranking, open_text. Returns the share link.
| Name | Type | Req | Description |
|---|---|---|---|
| closes_at | string | – | Optional close time, ISO 8601. |
| description | string | – | – |
| publish | boolean | – | Publish now (default true) or save a draft. |
| questions | array | yes | – |
| settings | object | – | Optional: showResultsDuring, showResultsAfter, requireAllQuestions, collectEmail, collectName. |
| timezone | string | – | IANA timezone for the close time. Defaults to UTC. |
| title | string | yes | – |
No output schema declared.
No examples provided.
get_election Status of one election or survey ~167
One election or survey in the connected account, as it is saved now: the schedule in its time zone, every question with its type, seats and options (in the words create_election_draft takes), the settings, the voter list as counts, ballots cast, turnout and quorum, and links. For a DRAFT election it also reports what still blocks publishing, what is worth checking, the exact price the publish step would charge, and who pays it (free, plan, prepaid balance, or card at the finish link). Per-question results are on the election page link; this tool reports counts only, never a voter's name, email or phone number.
| Name | Type | Req | Description |
|---|---|---|---|
| election | string | yes | The election's id or slug, from list_elections or create_election_draft. |
No output schema declared.
No examples provided.
get_election_price The exact price of one election ~110
The price of one election in the connected account as it stands, from the same function the payment page and the publish step charge: its voter count, the tier, what the total is made of (government ID, texts for a small roster), and who pays it now (free, plan, prepaid balance, or card). Ask again after the voter list changes. Changes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| election | string | yes | The election's id or slug, from list_elections or create_election_draft. |
No output schema declared.
No examples provided.
get_election_readiness Is a draft ready to publish ~134
Whether a DRAFT election in the connected account can publish now: the checks the publish button runs (schedule, ballot, voter list, state rules, size), each blocker in the words publish would refuse with, warnings a board should hear (voting closes inside the state's notice period, no quorum on an HOA or condo, voters the emailed ballot cannot reach), the exact price and who pays it. Fixing one blocker can show the next, so ask again after each fix. Changes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| election | string | yes | The election's id or slug, from list_elections or create_election_draft. |
No output schema declared.
No examples provided.
get_governance_center_overview What governance.center is and what it costs ~118
governance.center, the second product from this team: the Board Office for a volunteer-run HOA, condo, nonprofit board, club or congregation. Returns the annual price for a given community size from the same constants Stripe bills, what every band includes, what is priced per use, what the product deliberately does not do, and the support line. Annual price first; the monthly figure is only an explainer.
| Name | Type | Req | Description |
|---|---|---|---|
| members | integer | – | How many members, owners or units the community has. Returns the band that covers them. |
No output schema declared.
No examples provided.
get_platform_overview What vote.direct is and does ~82
Factual overview of vote.direct: free tier and pricing model, verification ladder, ballot-secrecy modes, the dispute-evidence pack (audit trail, results certificate, receipts), voting channels, question types, the full feature list with the no-tier-lock rule, who owns and runs the company, the founder's direct line, and where to read more.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_price_quote Exact election price quote ~159
Exact, current vote.direct pricing for an election: flat rate by voter count (email verification included, SMS on paid elections), optional government-ID and mailed-letter add-ons, promotional pricing status, whether a subscription would beat paying per election, and the price-beat offer (vote.direct beats a lower quote from another provider for the same self-serve online election). Same constants the product bills against.
| Name | Type | Req | Description |
|---|---|---|---|
| elections_per_year | integer | – | If provided, adds the yearly total for that many elections of this size |
| gov_id_voters | integer | – | Voters needing assisted government-ID verification (optional) |
| mailed_letters | integer | – | Mailed access letters to send (optional) |
| voters | integer | yes | How many voters will be invited |
No output schema declared.
No examples provided.
get_review_record Every third-party review, verbatim ~63
The complete third-party review record for vote.direct: every published Capterra and Trustpilot review quoted verbatim with links, including the honest caveats (small record, TrustScore explanation, which reviewers had actually run an election, and anything a reviewer received from us).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_state_hoa_rules HOA voting rules for a US state ~95
Stored HOA/condo voting-rule summary for any US state: whether electronic voting is expressly allowed, key statutes with citations, quorum, notice and proxy rules, and whether vote.direct may serve as inspector of elections there. Summaries support review; they are not legal advice.
| Name | Type | Req | Description |
|---|---|---|---|
| state | string | yes | State name, two-letter abbreviation, or slug (e.g. "Texas", "TX", "texas") |
No output schema declared.
No examples provided.
list_elections List this account's elections and surveys ~90
Elections and surveys in the connected vote.direct account, newest first: id, slug, title, kind (election or survey), status (draft, scheduled, live, closed), schedule, voters and ballots cast, and the links to hand the person.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | How many to return. Defaults to 20. |
| status | string | – | Only this status. Defaults to all. |
No output schema declared.
No examples provided.
publish_election Publish a draft election ~324
Publish a DRAFT election in the connected account, running every check the publish button runs (ballot, schedule, voter list, state law, price) and charging the price from the account's prepaid balance or plan. Free elections (up to 25 voters) publish at no cost. If the balance does not cover it, nothing is charged and the person pays by card, at the finish link or on a payment page from create_checkout_link. Publishing follows a card payment either way: the page the person returns to from Stripe publishes once the payment lands, or call this with after_payment: true, which waits for the payment and publishes without a second charge, never drawing on the balance as well. An election that is already published and paid for answers status already_published with its links, not a refusal. Once published it emails voters their ballots when it can send as the organizer; through an assistant connection it usually cannot, so the result says whether ballots were emailed and, if not, links the election page where the organizer sends them. Confirm with the person before calling this; it can spend their money.
| Name | Type | Req | Description |
|---|---|---|---|
| after_payment | boolean | – | true once the person has paid by card (on a create_checkout_link page or at the finish link): waits up to 15 seconds for the payment to reach vote.direct, then publishes without charging anything, or… |
| election | string | yes | The election's id or slug, from list_elections or create_election_draft. |
No output schema declared.
No examples provided.
remove_voters Take voters off a draft election ~143
Take voters off a DRAFT election in the connected account, by email address or by unit. A voter goes when their email is named, or when every unit they hold is named, so nobody loses a unit by accident; the contact book is not touched. Returns how many were taken off and how many of those named are not on the list, never the rows, and the updated price.
| Name | Type | Req | Description |
|---|---|---|---|
| election | string | yes | The draft's id or slug. |
| emails | array | – | Email addresses of the voters to take off. |
| units | array | – | Units, lots or address labels whose voters to take off, e.g. "Unit 4B". |
No output schema declared.
No examples provided.
start_election_draft Start an election for someone without an account ~586
Build a complete election (ballot, schedule, verification, voter emails) for a person who does not have a vote.direct account yet, and get the link where they claim it: they open it, create an account with their email, and the election appears in their dashboard ready to review and publish. Nothing is charged and no voter is contacted until they do. The link expires in 48 hours. For a person who has an account, or will sign in, create_election_draft works in their account directly.
| Name | Type | Req | Description |
|---|---|---|---|
| closes_at | string | – | When voting closes, ISO 8601 with offset, e.g. 2026-11-12T17:00:00-07:00. Must be in the future. Leave it out when nobody said: voting then closes at 5pm in `timezone` seven days from today, and the… |
| community_type | string | – | hoa or condo, when the state rules differ between them. |
| description | string | – | Optional instructions or background shown above the ballot. Plain text. |
| opens_at | string | – | When voting opens, ISO 8601 with offset. Omit to open when published. |
| organization_name | string | – | Association name shown to voters and used as the email sender name. Defaults to the account's organization. |
| questions | array | yes | The ballot, in order. |
| quorum | object | – | Optional quorum: {type: "percentage" | "count", threshold}. E.g. {type: "percentage", threshold: 25} means a quarter of eligible voters must vote. |
| results | string | – | after_close (default): voters see results once voting closes. live: running totals while voting is open. owner_only: only the organizer sees results. |
| secret_ballot | boolean | – | Keep who voted for what private from the organizer. Defaults to true. |
| state | string | – | Two-letter US state code of the association (e.g. CA). Turns on that state's election-law checks before publishing. |
| timezone | string | yes | IANA timezone of the association, e.g. America/Denver. Voters see times in it. |
| title | string | yes | Election title voters see, e.g. "2026 Board of Directors Election". |
| verification | string | – | email: every voter confirms a code sent to their email (included free). email_or_sms: voters may also confirm by text message (paid elections only; elections of 25 voters or fewer are email-only). |
| vote_type | string | – | What the vote decides, for the state-law checks. |
| voters | array | – | The eligible voters (the roster), one per owner/member. Email addresses only; people reached by text or mail are added by the organizer on the election page. |
No output schema declared.
No examples provided.
update_election_draft Change a draft election ~196
Change a DRAFT election in the connected account: title, description, organization name, schedule and time zone, secret ballot, results visibility, quorum, and the ballot (add, remove or change questions, or replace them all). While nobody has paid for it, its state, community type, vote type and verification can change too. Fields mean what they mean in create_election_draft. Changes go through the election editor, so anything the election page would refuse is refused with its reason and nothing is half-changed where that can be checked first. Returns one plain sentence per change, written from the saved election, and what still blocks publishing. A published election is changed by the organizer on its page.
| Name | Type | Req | Description |
|---|---|---|---|
| election | string | yes | The draft's id or slug. |
| patch | object | yes | Only the fields to change; every field means what it means in create_election_draft. At least one field. |
No output schema declared.
No examples provided.
How do I install the vote.direct MCP server?
vote.direct is a hosted endpoint at https://vote.direct/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · vote.direct
claude mcp add --transport http direct-vote-vote-direct 'https://vote.direct/api/mcp'
What is the vote.direct MCP server?
vote.direct is an MCP server listed in the public MCP registry as direct.vote/vote-direct. Run a real election or board vote: price it, check state HOA rules, draft the ballot and voter list. This page covers its hosted endpoint (https://vote.direct/api/mcp).
Is the vote.direct MCP server safe to use?
vote.direct scores 77 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the vote.direct MCP server expose?
vote.direct exposes 18 tools: get_price_quote, get_state_hoa_rules, compare_platforms, get_review_record, get_platform_overview, and 13 more. Their descriptions and schemas cost roughly 3,523 tokens of context every time the server is loaded.
Does the vote.direct MCP server require authentication?
No. We connected to vote.direct without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the vote.direct MCP server still maintained?
vote.direct is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.