Servidor MCP

vote.direct

direct.vote/vote-direct
Negocio y operaciones Legal y cumplimiento Público y accesible MCP 2026-07-28

Qué hace este MCP

Creates and manages elections and surveys, voter lists, ballots, publishing workflows, pricing, and state-specific HOA voting rule references.

add_voters
Add voters to a draft election
Add eligible voters (email, optional name and unit) to a DRAFT election in the connected account. Idempotent: people already on the list are skipped. Returns how many were added 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.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['election', 'voters'], 'properties': {'voters': {'type': 'array', 'items': {'type': 'object', 'required': ['email'], 'properties': {'name': {'type': 'string', 'description': 'Owner or member name, shown on the roster.'}, 'unit': {'type': 'string', 'description': 'Unit, lot or address label, e.g. "Unit 4B".'}, 'email': {'type': 'string', 'format': 'email'}}}, 'maxItems': 2000, 'description': '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.'}, 'election': {'type': 'string', 'description': "The draft's id or slug."}}}
compare_platforms
Compare vote.direct with a competitor
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, plus a vendor disclosure. Without a competitor, returns which-platform-for-which-need guidance.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'competitor': {'enum': ['electionbuddy', 'opavote', 'simply-voting', 'vote-hoa-now', 'hoaballot', 'associationvoting', 'surveymonkey', 'google-forms', 'helios-voting', 'paper-ballots'], 'type': 'string', 'description': 'Competitor to compare against (optional)'}}}
create_election_draft
Draft an election
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, what still blocks publishing, the exact price, and the finish link where the person reviews, pays if needed, and publishes. Ask the person for anything you do not know (closing date and time zone, seats, candidates) rather than guessing: this is a binding vote.
Esquema de entrada
{'type': 'object', 'required': ['title', 'questions', 'closes_at', 'timezone'], 'properties': {'state': {'type': 'string', 'description': "Two-letter US state code of the association (e.g. CA). Turns on that state's election-law checks before publishing."}, 'title': {'type': 'string', 'description': 'Election title voters see, e.g. "2026 Board of Directors Election".'}, 'quorum': {'type': 'object', 'required': ['type', 'threshold'], 'properties': {'type': {'enum': ['percentage', 'count'], 'type': 'string'}, 'threshold': {'type': 'integer', 'minimum': 1}}, 'description': 'Optional quorum: {type: "percentage" | "count", threshold}. E.g. {type: "percentage", threshold: 25} means a quarter of eligible voters must vote.'}, 'voters': {'type': 'array', 'items': {'type': 'object', 'required': ['email'], 'properties': {'name': {'type': 'string', 'description': 'Owner or member name, shown on the roster.'}, 'unit': {'type': 'string', 'description': 'Unit, lot or address label, e.g. "Unit 4B".'}, 'email': {'type': 'string', 'format': 'email'}}}, 'maxItems': 2000, 'description': '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.'}, 'results': {'enum': ['after_close', 'live', 'owner_only'], 'type': 'string', 'description': 'after_close (default): voters see results once voting closes. live: running totals while voting is open. owner_only: only the organizer sees results.'}, 'opens_at': {'type': 'string', 'format': 'date-time', 'description': 'When voting opens, ISO 8601 with offset. Omit to open when published.'}, 'timezone': {'type': 'string', 'description': 'IANA timezone of the association, e.g. America/Denver. Voters see times in it.'}, 'closes_at': {'type': 'string', 'format': 'date-time', 'description': 'When voting closes, ISO 8601 with offset, e.g. 2026-11-12T17:00:00-07:00. Must be in the future.'}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['text', 'type'], 'properties': {'text': {'type': 'string', 'description': 'The question or race, e.g. "Elect three directors".'}, 'type': {'enum': ['single_choice', 'multiple_choice', 'yes_no', 'ranked_choice', 'approval', 'cumulative', 'open_text'], 'type': 'string', 'description': 'single_choice: pick one. multiple_choice: pick up to `seats` (a multi-seat board race). yes_no: approve or reject a motion (Yes/No options are added automatically). ranked_choice: rank candidates; instant runoff for one seat, single transferable vote when seats > 1. approval: approve any number of candidates. cumulative: each voter spreads `seats` votes (minimum 2) across candidates, used where bylaws require cumulative voting. open_text: a written answer.'}, 'seats': {'type': 'integer', 'minimum': 1, 'description': 'How many winners (board seats). multiple_choice: the "vote for up to N" limit. ranked_choice/approval/cumulative: seats to fill.'}, 'options': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string'}, 'description': {'type': 'string'}}}]}, 'description': 'Candidates or choices; required (at least 2) for every type except yes_no and open_text. A string, or {text, description} to include a candidate statement.'}, 'required': {'type': 'boolean', 'description': 'Whether a voter must answer. Defaults to true, except open_text.'}, 'description': {'type': 'string', 'description': 'Optional help text under the question.'}, 'allow_write_in': {'type': 'boolean', 'description': 'Let voters write in one candidate (single_choice, multiple_choice, approval, cumulative).'}, 'include_abstain': {'type': 'boolean', 'description': 'Add an "Abstain" choice that counts toward turnout but never wins (yes_no, single_choice, multiple_choice, approval).'}}}, 'minItems': 1, 'description': 'The ballot, in order.'}, 'vote_type': {'enum': ['board_election', 'budget', 'amendment', 'resolution', 'custom'], 'type': 'string', 'description': 'What the vote decides, for the state-law checks.'}, 'description': {'type': 'string', 'description': 'Optional instructions or background shown above the ballot. Plain text.'}, 'verification': {'enum': ['email', 'email_or_sms'], 'type': 'string', 'description': '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).'}, 'secret_ballot': {'type': 'boolean', 'description': 'Keep who voted for what private from the organizer. Defaults to true.'}, 'community_type': {'enum': ['hoa', 'condo'], 'type': 'string', 'description': 'hoa or condo, when the state rules differ between them.'}, 'organization_name': {'type': 'string', 'description': "Association name shown to voters and used as the email sender name. Defaults to the account's organization."}}}
create_survey
Create a survey
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.
Esquema de entrada
{'type': 'object', 'required': ['title', 'questions'], 'properties': {'title': {'type': 'string'}, 'publish': {'type': 'boolean', 'description': 'Publish now (default true) or save a draft.'}, 'settings': {'type': 'object', 'description': 'Optional: showResultsDuring, showResultsAfter, requireAllQuestions, collectEmail, collectName.'}, 'timezone': {'type': 'string', 'description': 'IANA timezone for the close time. Defaults to UTC.'}, 'closes_at': {'type': 'string', 'format': 'date-time', 'description': 'Optional close time, ISO 8601.'}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'text'], 'properties': {'text': {'type': 'string'}, 'type': {'enum': ['single', 'multiple', 'yes_no', 'rating', 'ranking', 'open_text'], 'type': 'string'}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string'}}}, 'description': 'Required (at least 2) for single, multiple and ranking.'}, 'required': {'type': 'boolean'}, 'settings': {'type': 'object', 'description': 'Optional: minRating/maxRating/ratingLabels for rating, scale "nps", variant "short"|"email"|"number"|"date"|"phone" for open_text, allowWriteIn for single/multiple, maxSelections for multiple.'}, 'description': {'type': 'string'}}}, 'minItems': 1}, 'description': {'type': 'string'}}}
get_election
Status of one election or survey
One election or survey in the connected account: schedule, ballot, voters, ballots cast, turnout and quorum, and links. For a DRAFT election it also reports what still blocks publishing and 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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['election'], 'properties': {'election': {'type': 'string', 'description': "The election's id or slug, from list_elections or create_election_draft."}}}
get_governance_center_overview
What governance.center is and what it costs
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'members': {'type': 'integer', 'minimum': 1, 'description': 'How many members, owners or units the community has. Returns the band that covers them.'}}}
get_platform_overview
What vote.direct is and does
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}}
get_price_quote
Exact election price quote
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, and whether a subscription would beat paying per election. Same constants the product bills against.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['voters'], 'properties': {'voters': {'type': 'integer', 'minimum': 1, 'description': 'How many voters will be invited'}, 'gov_id_voters': {'type': 'integer', 'minimum': 0, 'description': 'Voters needing assisted government-ID verification (optional)'}, 'mailed_letters': {'type': 'integer', 'minimum': 0, 'description': 'Mailed access letters to send (optional)'}, 'elections_per_year': {'type': 'integer', 'minimum': 1, 'description': 'If provided, compares per-election cost against subscriptions'}}}
get_review_record
Every third-party review, verbatim
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).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}}
get_state_hoa_rules
HOA voting rules for a US state
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['state'], 'properties': {'state': {'type': 'string', 'description': 'State name, two-letter abbreviation, or slug (e.g. "Texas", "TX", "texas")'}}}
list_elections
List this account's elections and surveys
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'How many to return. Defaults to 20.'}, 'status': {'enum': ['draft', 'scheduled', 'live', 'closed', 'all'], 'type': 'string', 'description': 'Only this status. Defaults to all.'}}}
publish_election
Publish a draft election
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 instead. Publishing does NOT send invitations: the organizer sends them from the election page. Confirm with the person before calling this; it can spend their money.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['election'], 'properties': {'election': {'type': 'string', 'description': "The election's id or slug, from list_elections or create_election_draft."}}}
start_election_draft
Start an election for someone without an account
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.
Esquema de entrada
{'type': 'object', 'required': ['title', 'questions', 'closes_at', 'timezone'], 'properties': {'state': {'type': 'string', 'description': "Two-letter US state code of the association (e.g. CA). Turns on that state's election-law checks before publishing."}, 'title': {'type': 'string', 'description': 'Election title voters see, e.g. "2026 Board of Directors Election".'}, 'quorum': {'type': 'object', 'required': ['type', 'threshold'], 'properties': {'type': {'enum': ['percentage', 'count'], 'type': 'string'}, 'threshold': {'type': 'integer', 'minimum': 1}}, 'description': 'Optional quorum: {type: "percentage" | "count", threshold}. E.g. {type: "percentage", threshold: 25} means a quarter of eligible voters must vote.'}, 'voters': {'type': 'array', 'items': {'type': 'object', 'required': ['email'], 'properties': {'name': {'type': 'string', 'description': 'Owner or member name, shown on the roster.'}, 'unit': {'type': 'string', 'description': 'Unit, lot or address label, e.g. "Unit 4B".'}, 'email': {'type': 'string', 'format': 'email'}}}, 'maxItems': 2000, 'description': '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.'}, 'results': {'enum': ['after_close', 'live', 'owner_only'], 'type': 'string', 'description': 'after_close (default): voters see results once voting closes. live: running totals while voting is open. owner_only: only the organizer sees results.'}, 'opens_at': {'type': 'string', 'format': 'date-time', 'description': 'When voting opens, ISO 8601 with offset. Omit to open when published.'}, 'timezone': {'type': 'string', 'description': 'IANA timezone of the association, e.g. America/Denver. Voters see times in it.'}, 'closes_at': {'type': 'string', 'format': 'date-time', 'description': 'When voting closes, ISO 8601 with offset, e.g. 2026-11-12T17:00:00-07:00. Must be in the future.'}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['text', 'type'], 'properties': {'text': {'type': 'string', 'description': 'The question or race, e.g. "Elect three directors".'}, 'type': {'enum': ['single_choice', 'multiple_choice', 'yes_no', 'ranked_choice', 'approval', 'cumulative', 'open_text'], 'type': 'string', 'description': 'single_choice: pick one. multiple_choice: pick up to `seats` (a multi-seat board race). yes_no: approve or reject a motion (Yes/No options are added automatically). ranked_choice: rank candidates; instant runoff for one seat, single transferable vote when seats > 1. approval: approve any number of candidates. cumulative: each voter spreads `seats` votes (minimum 2) across candidates, used where bylaws require cumulative voting. open_text: a written answer.'}, 'seats': {'type': 'integer', 'minimum': 1, 'description': 'How many winners (board seats). multiple_choice: the "vote for up to N" limit. ranked_choice/approval/cumulative: seats to fill.'}, 'options': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string'}, 'description': {'type': 'string'}}}]}, 'description': 'Candidates or choices; required (at least 2) for every type except yes_no and open_text. A string, or {text, description} to include a candidate statement.'}, 'required': {'type': 'boolean', 'description': 'Whether a voter must answer. Defaults to true, except open_text.'}, 'description': {'type': 'string', 'description': 'Optional help text under the question.'}, 'allow_write_in': {'type': 'boolean', 'description': 'Let voters write in one candidate (single_choice, multiple_choice, approval, cumulative).'}, 'include_abstain': {'type': 'boolean', 'description': 'Add an "Abstain" choice that counts toward turnout but never wins (yes_no, single_choice, multiple_choice, approval).'}}}, 'minItems': 1, 'description': 'The ballot, in order.'}, 'vote_type': {'enum': ['board_election', 'budget', 'amendment', 'resolution', 'custom'], 'type': 'string', 'description': 'What the vote decides, for the state-law checks.'}, 'description': {'type': 'string', 'description': 'Optional instructions or background shown above the ballot. Plain text.'}, 'verification': {'enum': ['email', 'email_or_sms'], 'type': 'string', 'description': '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).'}, 'secret_ballot': {'type': 'boolean', 'description': 'Keep who voted for what private from the organizer. Defaults to true.'}, 'community_type': {'enum': ['hoa', 'condo'], 'type': 'string', 'description': 'hoa or condo, when the state rules differ between them.'}, 'organization_name': {'type': 'string', 'description': "Association name shown to voters and used as the email sender name. Defaults to the account's organization."}}}
Añadido
publish_election
2 de October de 2026 a las 02:40
Añadido
create_survey
2 de October de 2026 a las 02:40
Añadido
add_voters
2 de October de 2026 a las 02:40
Añadido
create_election_draft
2 de October de 2026 a las 02:40
Añadido
get_election
2 de October de 2026 a las 02:40
Añadido
list_elections
2 de October de 2026 a las 02:40
Añadido
start_election_draft
2 de October de 2026 a las 02:40
Añadido
get_governance_center_overview
2 de October de 2026 a las 02:40
Añadido
get_platform_overview
2 de October de 2026 a las 02:40
Añadido
get_review_record
2 de October de 2026 a las 02:40
Añadido
compare_platforms
2 de October de 2026 a las 02:40
Añadido
get_state_hoa_rules
2 de October de 2026 a las 02:40
Añadido
get_price_quote
2 de October de 2026 a las 02:40