addrbookFor publishers
← The evidence ledger

Evidence row 567232

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint a7f25be0-0874-44f4-b4b5-630c23052929
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
8320fd78a4d26bbb698ed77e1f11a971eac4b9dff86cbd67839804c0acce6e10
Leaf
0xd67d119c29418fab19977cb3db648162b51e03a754f993e554db97cd06ce27a7

What was observed

{
  "count": 18,
  "tools": [
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "election": {
            "description": "The draft's id or slug.",
            "type": "string"
          },
          "voters": {
            "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.",
            "items": {
              "properties": {
                "email": {
                  "format": "email",
                  "type": "string"
                },
                "name": {
                  "description": "Owner or member name, shown on the roster.",
                  "type": "string"
                },
                "unit": {
                  "description": "Unit, lot or address label, e.g. \"Unit 4B\".",
                  "type": "string"
                }
              },
              "required": [
                "email"
              ],
              "type": "object"
            },
            "maxItems": 5000,
            "type": "array"
          }
        },
        "required": [
          "election",
          "voters"
        ],
        "type": "object"
      },
      "name": "add_voters"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "competitor": {
            "description": "Competitor to compare against (optional)",
            "enum": [
              "electionbuddy",
              "opavote",
              "simply-voting",
              "vote-hoa-now",
              "hoaballot",
              "associationvoting",
              "surveymonkey",
              "google-forms",
              "helios-voting",
              "paper-ballots"
            ],
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "compare_platforms"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "election": {
            "description": "The election's id or slug, from list_elections or create_election_draft.",
            "type": "string"
          }
        },
        "required": [
          "election"
        ],
        "type": "object"
      },
      "name": "create_checkout_link"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "closes_at": {
            "description": "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 result says the exact time so it can be relayed and changed.",
            "format": "date-time",
            "type": "string"
          },
          "community_type": {
            "description": "hoa or condo, when the state rules differ between them.",
            "enum": [
              "hoa",
              "condo"
            ],
            "type": "string"
          },
          "description": {
            "description": "Optional instructions or background shown above the ballot. Plain text.",
            "type": "string"
          },
          "opens_at": {
            "description": "When voting opens, ISO 8601 with offset. Omit to open when published.",
            "format": "date-time",
            "type": "string"
          },
          "organization_name": {
            "description": "Association name shown to voters and used as the email sender name. Defaults to the account's organization.",
            "type": "string"
          },
          "questions": {
            "description": "The ballot, in order.",
            "items": {
              "properties": {
                "allow_write_in": {
                  "description": "Let voters write in one candidate (single_choice, multiple_choice, approval, cumulative).",
                  "type": "boolean"
                },
                "description": {
                  "description": "Optional help text under the question.",
                  "type": "string"
                },
                "include_abstain": {
                  "description": "Add an \"Abstain\" choice that counts toward turnout but never wins (yes_no, single_choice, multiple_choice, approval).",
                  "type": "boolean"
                },
                "options": {
                  "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.",
                  "items": {
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "properties": {
                          "description": {
                            "type": "string"
                          },
                          "text": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "text"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "required": {
                  "description": "Whether a voter must answer. Defaults to true, except open_text.",
                  "type": "boolean"
                },
                "seats": {
                  "description": "How many winners (board seats). multiple_choice: the \"vote for up to N\" limit. ranked_choice/approval/cumulative: seats to fill.",
                  "minimum": 1,
                  "type": "integer"
                },
                "text": {
                  "description": "The question or race, e.g. \"Elect three directors\".",
                  "type": "string"
                },
                "type": {
                  "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.",
                  "enum": [
                    "single_choice",
                    "multiple_choice",
                    "yes_no",
                    "ranked_choice",
                    "approval",
                    "cumulative",
                    "open_text"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "text",
                "type"
              ],
              "type": "object"
            },
            "minItems": 1,
            "type": "array"
          },
          "quorum": {
            "description": "Optional quorum: {type: \"percentage\" | \"count\", threshold}. E.g. {type: \"percentage\", threshold: 25} means a quarter of eligible voters must vote.",
            "properties": {
              "threshold": {
                "minimum": 1,
                "type": "integer"
              },
              "type": {
                "enum": [
                  "percentage",
                  "count"
                ],
                "type": "string"
              }
            },
            "required": [
              "type",
              "threshold"
            ],
            "type": "object"
          },
          "results": {
            "description": "after_close (default): voters see results once voting closes. live: running totals while voting is open. owner_only: only the organizer sees results.",
            "enum": [
              "after_close",
              "live",
              "owner_only"
            ],
            "type": "string"
          },
          "secret_ballot": {
            "description": "Keep who voted for what private from the organizer. Defaults to true.",
            "type": "boolean"
          },
          "state": {
            "description": "Two-letter US state code of the association (e.g. CA). Turns on that state's election-law checks before publishing.",
            "type": "string"
          },
          "timezone": {
            "description": "IANA timezone of the association, e.g. America/Denver. Voters see times in it.",
            "type": "string"
          },
          "title": {
            "description": "Election title voters see, e.g. \"2026 Board of Directors Election\".",
            "type": "string"
          },
          "verification": {
            "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).",
            "enum": [
              "email",
              "email_or_sms"
            ],
            "type": "string"
          },
          "vote_type": {
            "description": "What the vote decides, for the state-law checks.",
            "enum": [
              "board_election",
              "budget",
              "amendment",
              "resolution",
              "custom"
            ],
            "type": "string"
          },
          "voters": {
            "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.",
            "items": {
              "properties": {
                "email": {
                  "format": "email",
                  "type": "string"
                },
                "name": {
                  "description": "Owner or member name, shown on the roster.",
                  "type": "string"
                },
                "unit": {
                  "description": "Unit, lot or address label, e.g. \"Unit 4B\".",
                  "type": "string"
                }
              },
              "required": [
                "email"
              ],
              "type": "object"
            },
            "maxItems": 5000,
            "type": "array"
          }
        },
        "required": [
          "title",
          "questions",
          "timezone"
        ],
        "type": "object"
      },
      "name": "create_election_draft"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "closes_at": {
            "description": "Optional close time, ISO 8601.",
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "publish": {
            "description": "Publish now (default true) or save a draft.",
            "type": "boolean"
          },
          "questions": {
            "items": {
              "properties": {
                "description": {
                  "type": "string"
                },
                "options": {
                  "description": "Required (at least 2) for single, multiple and ranking.",
                  "items": {
                    "properties": {
                      "text": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "text"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "required": {
                  "type": "boolean"
                },
                "settings": {
                  "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.",
                  "type": "object"
                },
                "text": {
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "single",
                    "multiple",
                    "yes_no",
                    "rating",
                    "ranking",
                    "open_text"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "text"
              ],
              "type": "object"
            },
            "minItems": 1,
            "type": "array"
          },
          "settings": {
            "description": "Optional: showResultsDuring, showResultsAfter, requireAllQuestions, collectEmail, collectName.",
            "type": "object"
          },
          "timezone": {
            "description": "IANA timezone for the close time. Defaults to UTC.",
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "title",
          "questions"
        ],
        "type": "object"
      },
      "name": "create_survey"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "election": {
            "description": "The election's id or slug, from list_elections or create_election_draft.",
            "type": "string"
          }
        },
        "required": [
          "election"
        ],
        "type": "object"
      },
      "name": "get_election"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "election": {
            "description": "The election's id or slug, from list_elections or create_election_draft.",
            "type": "string"
          }
        },
        "required": [
          "election"
        ],
        "type": "object"
      },
      "name": "get_election_price"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "election": {
            "description": "The election's id or slug, from list_elections or create_election_draft.",
            "type": "string"
          }
        },
        "required": [
          "election"
        ],
        "type": "object"
      },
      "name": "get_election_readiness"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "members": {
            "description": "How many members, owners or units the community has. Returns the band that covers them.",
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "get_governance_center_overview"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "get_platform_overview"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "elections_per_year": {
            "description": "If provided, adds the yearly total for that many elections of this size",
            "minimum": 1,
            "type": "integer"
          },
          "gov_id_voters": {
            "description": "Voters needing assisted government-ID verification (optional)",
            "minimum": 0,
            "type": "integer"
          },
          "mailed_letters": {
            "description": "Mailed access letters to send (optional)",
            "minimum": 0,
            "type": "integer"
          },
          "voters": {
            "description": "How many voters will be invited",
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "voters"
        ],
        "type": "object"
      },
      "name": "get_price_quote"
    },
    {
      "description": "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).",
      "inputSchema": {
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "get_review_record"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "state": {
            "description": "State name, two-letter abbreviation, or slug (e.g. \"Texas\", \"TX\", \"texas\")",
            "type": "string"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "name": "get_state_hoa_rules"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "How many to return. Defaults to 20.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "status": {
            "description": "Only this status. Defaults to all.",
            "enum": [
              "draft",
              "scheduled",
              "live",
              "closed",
              "all"
            ],
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "list_elections"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "after_payment": {
            "description": "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 answers already_published if the page they returned to has published it. Leave it out otherwise.",
            "type": "boolean"
          },
          "election": {
            "description": "The election's id or slug, from list_elections or create_election_draft.",
            "type": "string"
          }
        },
        "required": [
          "election"
        ],
        "type": "object"
      },
      "name": "publish_election"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "election": {
            "description": "The draft's id or slug.",
            "type": "string"
          },
          "emails": {
            "description": "Email addresses of the voters to take off.",
            "items": {
              "format": "email",
              "type": "string"
            },
            "maxItems": 5000,
            "type": "array"
          },
          "units": {
            "description": "Units, lots or address labels whose voters to take off, e.g. \"Unit 4B\".",
            "items": {
              "type": "string"
            },
            "maxItems": 5000,
            "type": "array"
          }
        },
        "required": [
          "election"
        ],
        "type": "object"
      },
      "name": "remove_voters"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "closes_at": {
            "description": "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 result says the exact time so it can be relayed and changed.",
            "format": "date-time",
            "type": "string"
          },
          "community_type": {
            "description": "hoa or condo, when the state rules differ between them.",
            "enum": [
              "hoa",
              "condo"
            ],
            "type": "string"
          },
          "description": {
            "description": "Optional instructions or background shown above the ballot. Plain text.",
            "type": "string"
          },
          "opens_at": {
            "description": "When voting opens, ISO 8601 with offset. Omit to open when published.",
            "format": "date-time",
            "type": "string"
          },
          "organization_name": {
            "description": "Association name shown to voters and used as the email sender name. Defaults to the account's organization.",
            "type": "string"
          },
          "questions": {
            "description": "The ballot, in order.",
            "items": {
              "properties": {
                "allow_write_in": {
                  "description": "Let voters write in one candidate (single_choice, multiple_choice, approval, cumulative).",
                  "type": "boolean"
                },
                "description": {
                  "description": "Optional help text under the question.",
                  "type": "string"
                },
                "include_abstain": {
                  "description": "Add an \"Abstain\" choice that counts toward turnout but never wins (yes_no, single_choice, multiple_choice, approval).",
                  "type": "boolean"
                },
                "options": {
                  "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.",
                  "items": {
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "properties": {
                          "description": {
                            "type": "string"
                          },
                          "text": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "text"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "required": {
                  "description": "Whether a voter must answer. Defaults to true, except open_text.",
                  "type": "boolean"
                },
                "seats": {
                  "description": "How many winners (board seats). multiple_choice: the \"vote for up to N\" limit. ranked_choice/approval/cumulative: seats to fill.",
                  "minimum": 1,
                  "type": "integer"
                },
                "text": {
                  "description": "The question or race, e.g. \"Elect three directors\".",
                  "type": "string"
                },
                "type": {
                  "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.",
                  "enum": [
                    "single_choice",
                    "multiple_choice",
                    "yes_no",
                    "ranked_choice",
                    "approval",
                    "cumulative",
                    "open_text"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "text",
                "type"
              ],
              "type": "object"
            },
            "minItems": 1,
            "type": "array"
          },
          "quorum": {
            "description": "Optional quorum: {type: \"percentage\" | \"count\", threshold}. E.g. {type: \"percentage\", threshold: 25} means a quarter of eligible voters must vote.",
            "properties": {
              "threshold": {
                "minimum": 1,
                "type": "integer"
              },
              "type": {
                "enum": [
                  "percentage",
                  "count"
                ],
                "type": "string"
              }
            },
            "required": [
              "type",
              "threshold"
            ],
            "type": "object"
          },
          "results": {
            "description": "after_close (default): voters see results once voting closes. live: running totals while voting is open. owner_only: only the organizer sees results.",
            "enum": [
              "after_close",
              "live",
              "owner_only"
            ],
            "type": "string"
          },
          "secret_ballot": {
            "description": "Keep who voted for what private from the organizer. Defaults to true.",
            "type": "boolean"
          },
          "state": {
            "description": "Two-letter US state code of the association (e.g. CA). Turns on that state's election-law checks before publishing.",
            "type": "string"
          },
          "timezone": {
            "description": "IANA timezone of the association, e.g. America/Denver. Voters see times in it.",
            "type": "string"
          },
          "title": {
            "description": "Election title voters see, e.g. \"2026 Board of Directors Election\".",
            "type": "string"
          },
          "verification": {
            "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).",
            "enum": [
              "email",
              "email_or_sms"
            ],
            "type": "string"
          },
          "vote_type": {
            "description": "What the vote decides, for the state-law checks.",
            "enum": [
              "board_election",
              "budget",
              "amendment",
              "resolution",
              "custom"
            ],
            "type": "string"
          },
          "voters": {
            "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.",
            "items": {
              "properties": {
                "email": {
                  "format": "email",
                  "type": "string"
                },
                "name": {
                  "description": "Owner or member name, shown on the roster.",
                  "type": "string"
                },
                "unit": {
                  "description": "Unit, lot or address label, e.g. \"Unit 4B\".",
                  "type": "string"
                }
              },
              "required": [
                "email"
              ],
              "type": "object"
            },
            "maxItems": 5000,
            "type": "array"
          }
        },
        "required": [
          "title",
          "questions",
          "timezone"
        ],
        "type": "object"
      },
      "name": "start_election_draft"
    },
    {
      "description": "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.",
      "inputSchema": {
        "properties": {
          "election": {
            "description": "The draft's id or slug.",
            "type": "string"
          },
          "patch": {
            "additionalProperties": false,
            "description": "Only the fields to change; every field means what it means in create_election_draft. At least one field.",
            "minProperties": 1,
            "properties": {
              "closes_at": {
                "description": "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 result says the exact time so it can be relayed and changed.",
                "format": "date-time",
                "type": "string"
              },
              "community_type": {
                "description": "hoa or condo, when the state rules differ between them.",
                "enum": [
                  "hoa",
                  "condo"
                ],
                "type": "string"
              },
              "description": {
                "description": "Instructions or background shown above the ballot. Plain text; an empty string removes it.",
                "type": "string"
              },
              "opens_at": {
                "description": "When voting opens, ISO 8601 with offset. null opens voting when the election is published.",
                "format": "date-time",
                "type": [
                  "string",
                  "null"
                ]
              },
              "organization_name": {
                "description": "Association name shown to voters and used as the email sender name. Defaults to the account's organization.",
                "type": "string"
              },
              "questions": {
                "additionalProperties": false,
                "description": "Changes to the ballot. set replaces every question and is sent on its own; otherwise remove, update and add run in that order. Positions count from 1, as the ballot stood before this change.",
                "minProperties": 1,
                "properties": {
                  "add": {
                    "description": "New questions, added after the last one, in this order.",
                    "items": {
                      "properties": {
                        "allow_write_in": {
                          "description": "Let voters write in one candidate (single_choice, multiple_choice, approval, cumulative).",
                          "type": "boolean"
                        },
                        "description": {
                          "description": "Optional help text under the question.",
                          "type": "string"
                        },
                        "include_abstain": {
                          "description": "Add an \"Abstain\" choice that counts toward turnout but never wins (yes_no, single_choice, multiple_choice, approval).",
                          "type": "boolean"
                        },
                        "options": {
                          "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.",
                          "items": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "properties": {
                                  "description": {
                                    "type": "string"
                                  },
                                  "text": {
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "text"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "type": "array"
                        },
                        "required": {
                          "description": "Whether a voter must answer. Defaults to true, except open_text.",
                          "type": "boolean"
                        },
                        "seats": {
                          "description": "How many winners (board seats). multiple_choice: the \"vote for up to N\" limit. ranked_choice/approval/cumulative: seats to fill.",
                          "minimum": 1,
                          "type": "integer"
                        },
                        "text": {
                          "description": "The question or race, e.g. \"Elect three directors\".",
                          "type": "string"
                        },
                        "type": {
                          "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.",
                          "enum": [
                            "single_choice",
                            "multiple_choice",
                            "yes_no",
                            "ranked_choice",
                            "approval",
                            "cumulative",
                            "open_text"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "text",
                        "type"
                      ],
                      "type": "object"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "remove": {
                    "description": "Questions to take off the ballot. A ballot keeps at least one question.",
                    "items": {
                      "oneOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "position": {
                              "description": "The question's place on the ballot as it stood before this change: 1 is the first.",
                              "maximum": 1000,
                              "minimum": 1,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "position"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "id": {
                              "description": "The question's id, from get_election.",
                              "format": "uuid",
                              "type": "string"
                            }
                          },
                          "required": [
                            "id"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "set": {
                    "description": "The whole ballot, in order, replacing every question on it.",
                    "items": {
                      "properties": {
                        "allow_write_in": {
                          "description": "Let voters write in one candidate (single_choice, multiple_choice, approval, cumulative).",
                          "type": "boolean"
                        },
                        "description": {
                          "description": "Optional help text under the question.",
                          "type": "string"
                        },
                        "include_abstain": {
                          "description": "Add an \"Abstain\" choice that counts toward turnout but never wins (yes_no, single_choice, multiple_choice, approval).",
                          "type": "boolean"
                        },
                        "options": {
                          "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.",
                          "items": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "properties": {
                                  "description": {
                                    "type": "string"
                                  },
                                  "text": {
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "text"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "type": "array"
                        },
                        "required": {
                          "description": "Whether a voter must answer. Defaults to true, except open_text.",
                          "type": "boolean"
                        },
                        "seats": {
                          "description": "How many winners (board seats). multiple_choice: the \"vote for up to N\" limit. ranked_choice/approval/cumulative: seats to fill.",
                          "minimum": 1,
                          "type": "integer"
                        },
                        "text": {
                          "description": "The question or race, e.g. \"Elect three directors\".",
                          "type": "string"
                        },
                        "type": {
                          "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.",
                          "enum": [
                            "single_choice",
                            "multiple_choice",
                            "yes_no",
                            "ranked_choice",
                            "approval",
                            "cumulative",
                            "open_text"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "text",
                        "type"
                      ],
                      "type": "object"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "update": {
                    "description": "Questions to change, one entry each. Wording, help text, required, seats and write-ins change in place; a new type, new options or the Abstain choice rebuilds the question in the same place.",
                    "items": {
                      "additionalProperties": false,
                      "description": "Name the question by position or by id (not both), then give only the fields to change.",
                      "properties": {
                        "allow_write_in": {
                          "description": "Let voters write in one candidate (single_choice, multiple_choice, approval, cumulative).",
                          "type": "boolean"
                        },
                        "description": {
                          "description": "Optional help text under the question.",
                          "type": "string"
                        },
                        "id": {
                          "description": "The question's id, from get_election.",
                          "format": "uuid",
                          "type": "string"
                        },
                        "include_abstain": {
                          "description": "Add an \"Abstain\" choice that counts toward turnout but never wins (yes_no, single_choice, multiple_choice, approval).",
                          "type": "boolean"
                        },
                        "options": {
                          "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.",
                          "items": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "properties": {
                                  "description": {
                                    "type": "string"
                                  },
                                  "text": {
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "text"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "type": "array"
                        },
                        "position": {
                          "description": "The question's place on the ballot as it stood before this change: 1 is the first.",
                          "maximum": 1000,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "required": {
                          "description": "Whether a voter must answer. Defaults to true, except open_text.",
                          "type": "boolean"
                        },
                        "seats": {
                          "description": "How many winners (board seats). multiple_choice: the \"vote for up to N\" limit. ranked_choice/approval/cumulative: seats to fill.",
                          "minimum": 1,
                          "type": "integer"
                        },
                        "text": {
                          "description": "The question or race, e.g. \"Elect three directors\".",
                          "type": "string"
                        },
                        "type": {
                          "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.",
                          "enum": [
                            "single_choice",
                            "multiple_choice",
                            "yes_no",
                            "ranked_choice",
                            "approval",
                            "cumulative",
                            "open_text"
                          ],
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "quorum": {
                "description": "The quorum: {type: \"percentage\" | \"count\", threshold}. null removes it.",
                "properties": {
                  "threshold": {
                    "minimum": 1,
                    "type": "integer"
                  },
                  "type": {
                    "enum": [
                      "percentage",
                      "count"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "threshold"
                ],
                "type": [
                  "object",
                  "null"
                ]
              },
              "results": {
                "description": "after_close (default): voters see results once voting closes. live: running totals while voting is open. owner_only: only the organizer sees results.",
                "enum": [
                  "after_close",
                  "live",
                  "owner_only"
                ],
                "type": "string"
              },
              "secret_ballot": {
                "description": "Keep who voted for what private from the organizer. Defaults to true.",
                "type": "boolean"
              },
              "state": {
                "description": "Two-letter US state code of the association (e.g. CA). Turns on that state's election-law checks before publishing.",
                "type": "string"
              },
              "timezone": {
                "description": "IANA timezone of the association, e.g. America/Denver. Voters see times in it.",
                "type": "string"
              },
              "title": {
                "description": "Election title voters see, e.g. \"2026 Board of Directors Election\".",
                "type": "string"
              },
              "verification": {
                "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).",
                "enum": [
                  "email",
                  "email_or_sms"
                ],
                "type": "string"
              },
              "vote_type": {
                "description": "What the vote decides, for the state-law checks.",
                "enum": [
                  "board_election",
                  "budget",
                  "amendment",
                  "resolution",
                  "custom"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "election",
          "patch"
        ],
        "type": "object"
      },
      "name": "update_election_draft"
    }
  ]
}

What the leaf hashes

{"body":"8320fd78a4d26bbb698ed77e1f11a971eac4b9dff86cbd67839804c0acce6e10","id":567232,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793138645243557,"prev":null,"subject":"a7f25be0-0874-44f4-b4b5-630c23052929","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0xd67d4c9aa2461dba5c67934830d849b5da8a5fc68cb2ffacb540387f1030e317
  2. 0xce46c8eee60ee70f9aa65d11841c08b0d09de88c527b9bdcf38f82cfb96a9054
  3. 0xc70c6391e2c957a7be09569272f397e8128c170eff52471e9994efe4fd9a456e
  4. 0x46d9225ff254972b73c1fea2fd6f0f82aa218d52906bbc97a9d80b10fab9dfdd
  5. 0xc6f7bf70915a6875bce19ba6e6df98f29f095e594997f4e8757286caf99212ec
  6. 0xc7d0caf990c3a17fb547c244759105e57ed5639c35cd249a2806a54ad5e17112
  7. 0xe90e9249b6e2f55f40af85eda8013440894d69acd532f7f674a9f21c5ae4cc06
  8. 0x86d88186a5965e430d8716a90b886f4159c17ad1a86ab99bef097376e36f4935
  9. 0x71cf3f5eb720811d151d02cf7f2cc83634abf2ca94fe09a9382270bccb50fc4c
  10. 0x72504bd53701397e27c52ff196a27f74cc8f2967565814efee0fe2866174a6e9
  11. 0x0c83e32e6b84db0bb021929c13eebf1647014f39c62859879ee0a904e7595a5b
  12. 0xde4e8f5f4fa654e4fdaf9393a62fe8d551a621b11ce6193db126f9c7825b0974
  13. 0x3b3e4fecead12aaf883ab4f21b6e21efddd0a8d055ced058cb62bcdca8a6c9d6
  14. 0x8f676edfb4faaa290229d8f4f69ab721fc627424463d62f5146b3d1ca7f2f0c6
  15. 0x969cd44e5a4e8dc3110540398fbf689659eb51df735c1cda5d8f021ef9ff5683
  16. 0xa94627de1af0e823832e05a9069b304ecccb8c0cdb8f9cfc4f2039bfb9799dc5
  17. 0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON