_ registry / mcp streamable-http · checked 1h ago

qrvote

https://mcp.qrvote.org

Registry code: 482c7a36cf0b5057

api record

QRvote runs contests, surveys, quizzes and scavenger hunts at in-person events with printed QR codes, plus boards the crowd writes: live Q&A, ideas boards and message walls, and nominations (people suggest the entries, then vote). Anyone can read a public contest and its results by slug (from https://qrvote.org/c/<slug>). Managing one needs its organizer key, sent by the MCP client as `Authorization: Bearer <key>`; the organizer finds it in their organizer link (#key=…). It controls that one contest only. Voting, answering and posting are for people at the event; organizers moderate posts…

endpoint
https://mcp.qrvote.org/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is qrvote live?
Yes — it answered the hub's last check (checked 1h ago). It answered 99% of checks over the last 30 days.
Is qrvote free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does qrvote have?
23 tools: get_results, draft_contest, get_campaign, create_contest, set_entry_photo, remove_judge, export_csv, get_certificate_orders, ….
Is qrvote safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.1%

90 days 99.4%· all time 99.4%

latency
296ms

last good check

priced tools
0

of 23 tools

_ answered our checks, 90 days 355 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • unknown → live
_ what it is for
used for
  • create an event contest or survey
  • get contest results
  • run a live quiz
  • export votes and responses
takes → gives
text, data → data, documents
tools
6 reads9 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 23 tools
20 auth-required 3 never probed 20 of 23 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • create_contest changes data auth-required never probed

    Create it now, on a signed-in connection with Manage (https://mcp.qrvote.org/mcp/organizer); up to 5 a day per connection. This connection can manage it straight away. You get its public link and a one-time claim link (valid 24 hours) for the person to open, which gives them the organizer dashboard; never ask for or share the organizer key. Without signing in, use draft_contest.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind",
        "title"
      ],
      "properties": {
        "host": {
          "type": "boolean",
          "description": "Quizzes: run it live on a big screen, one question at a time"
        },
        "kind": {
          "enum": [
            "contest",
            "survey",
            "quiz",
            "hunt",
            "qa",
            "ideas",
            "nominate",
            "wall"
          ],
          "type": "string",
          "description": "contest: people vote for entries; survey: questions; quiz: questions with right answers and a leaderboard; hunt: find QR checkpoints; qa: the audience asks and upvotes questions; ideas: people share and upvote ideas; nominate: people suggest the entries, then vote on the finalists; wall: people leave messages (no voting)"
        },
        "lang": {
          "enum": [
            "en",
            "es",
            "de",
            "zh",
            "fr",
            "pt",
            "ja",
            "ko",
            "it",
            "hi",
            "id",
            "tr",
            "ar"
          ],
          "type": "string",
          "description": "The voters' language: its QR codes, big screen and printed signs use it (anyone can still switch). Default: the language the person is using, else en."
        },
        "mode": {
          "enum": [
            "single",
            "each"
          ],
          "type": "string",
          "description": "Contests: one vote in total, or one vote per entry (like/heart each)"
        },
        "names": {
          "type": "boolean",
          "description": "qa, ideas, nominate, wall: people may add their name (default on, except ideas)"
        },
        "posts": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 280
          },
          "maxItems": 10,
          "description": "qa, ideas, wall: starter posts, up from the start"
        },
        "theme": {
          "enum": [
            "classic",
            "halloween",
            "harvest",
            "winter",
            "garden",
            "carnival",
            "beach",
            "sports",
            "hearts",
            "stars",
            "lunar",
            "diwali",
            "muertos",
            "hanami",
            "cats",
            "dogs",
            "campfire",
            "art",
            "trivia",
            "classroom",
            "cookoff",
            "science",
            "wedding",
            "carshow",
            "workplace",
            "thanksgiving"
          ],
          "type": "string"
        },
        "title": {
          "type": "string",
          "maxLength": 120
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "maxItems": 10,
          "description": "ideas: categories people pick from (e.g. Went well, To improve, Try next)"
        },
        "approve": {
          "type": "boolean",
          "description": "qa, ideas, nominate, wall: new posts wait for the organizer's approval (default on, except ideas)"
        },
        "entries": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 80
              },
              {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "description": {
                    "type": "string",
                    "maxLength": 300
                  }
                }
              }
            ]
          },
          "maxItems": 200,
          "description": "Contests and nominations: the entries (a nomination's suggestions join them); hunts: the checkpoints. A name, or { name, description }."
        },
        "results": {
          "enum": [
            "live",
            "after",
            "private"
          ],
          "type": "string",
          "description": "When people see results"
        },
        "closesAt": {
          "type": "string",
          "description": "When voting ends, ISO 8601 with a time zone offset"
        },
        "questions": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "prompt"
            ],
            "properties": {
              "max": {
                "enum": [
                  5,
                  10
                ],
                "type": "integer"
              },
              "type": {
                "enum": [
                  "single",
                  "multi",
                  "yesno",
                  "likert",
                  "rating",
                  "short",
                  "long"
                ],
                "type": "string"
              },
              "answer": {},
              "prompt": {
                "type": "string",
                "maxLength": 300
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 100
                },
                "maxItems": 20
              },
              "required": {
                "type": "boolean"
              }
            }
          },
          "maxItems": 50,
          "description": "Surveys and quizzes, as in setQuestions: { type: single|multi|yesno|likert|rating|short|long, prompt, options? (single/multi), max? (rating 5 or 10), required?, answer? (quiz: option index, list of indexes, yesno 1/0, or accepted texts for short) }"
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60
          },
          "maxItems": 20,
          "description": "Contests: separate awards, one vote in each (e.g. Scariest, Funniest)"
        },
        "description": {
          "type": "string",
          "maxLength": 1000
        },
        "leaderboard": {
          "type": "boolean",
          "description": "Quizzes: show a leaderboard"
        }
      },
      "description": "What to fill the create form with. Same shapes as the API (https://qrvote.org/openapi.json)."
    }
    arguments 224 lines
  • set_entry_photo changes data auth-required never probed

    Give an entry (or hunt checkpoint) a photo from a public https image URL: JPEG, PNG or WebP, up to 3 MB. Hidden metadata (GPS, camera) is removed. Replaces any photo it had. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "entry",
        "photo_url"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$"
        },
        "entry": {
          "type": "integer",
          "description": "The entry’s id, from get_dashboard’s entrants"
        },
        "photo_url": {
          "type": "string",
          "pattern": "^https://",
          "maxLength": 2000
        }
      }
    }
    arguments 23 lines
  • remove_judge changes data auth-required never probed

    Contests: remove a judge, their link and their scores Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer"
        },
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 17 lines
  • export_csv reads auth-required never probed

    Download votes, survey responses, hunt players or board posts as CSV Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 13 lines
  • get_certificate_orders auth-required never probed

    Order printed certificates on Zazzle, once voting has closed Changes nothing. Contests, quizzes and hunts, after voting closes (409 not_closed before). QRvote writes the certificates as the dashboard's Print page does: one for each award's winner (top3: true for the top three), with their place and how they won, in the contest's language and colors. awards[i] says who certificate i is for. orders[i] maps each size (11x85 is letter, 14x11 is large) to a Zazzle link that opens that certificate filled in; give the person the links, and they order and pay on Zazzle. It's null when the print font can't draw the award or the name (print that one from the dashboard instead). certificates[i] holds the print images. No winners yet means empty lists. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "top3": {
          "type": "boolean",
          "description": "The top three of each award, not only the winners"
        },
        "accent": {
          "type": "string",
          "pattern": "^[0-9a-fA-F]{6}$",
          "description": "The color as 6 hex digits, no #. Leave it out for the contest theme's color, as on the Print page."
        }
      }
    }
    arguments 22 lines
  • host_step changes data auth-required never probed

    Run a live quiz: start, reveal, next question, finish, or pause/resume its clock For quizzes with host = true. Body: { action: 'start' | 'reveal' | 'next' | 'finish' | 'pause' | 'resume' }. Steps must follow lobby → question → reveal → question … → done; anything else is 409. With hostSecs > 0 the quiz also moves on by itself (each question hostSecs seconds, each answer shown 8 s); pause/resume stop and restart that clock, and a step by hand restarts it. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "action"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "action": {
          "enum": [
            "start",
            "reveal",
            "next",
            "finish",
            "pause",
            "resume"
          ],
          "type": "string"
        }
      }
    }
    arguments 25 lines
  • set_answer_key changes data auth-required never probed

    Fix a quiz's answer key (allowed after people have answered; every score updates) Body: { answers: { <question id>: key | null } }. The key is an option index (single; yes/no uses 1 = yes, 0 = no), a list of option indexes (multi, all must match), or a list of accepted texts (short; case, accents and punctuation are ignored). null stops scoring that question. At least one question must stay scored. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "answers"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "answers": {
          "type": "object",
          "additionalProperties": true
        }
      }
    }
    arguments 18 lines
  • moderate_post auth-required never probed

    Boards and nominations: approve, hide or answer a post; Ideas: set its status, category, reply or pin Body (any of): status shown (approve or show again), hidden, answered (Q&A) or pending; stage review, planned, doing, done, not or '' (Ideas); label (a category id); reply (≤500 chars, '' removes it); pinned. Organizers never edit what people wrote. On a nomination these work only while suggestions are open (409 suggestions_closed after). Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer"
        },
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "label": {
          "type": "integer"
        },
        "reply": {
          "type": "string",
          "maxLength": 500
        },
        "stage": {
          "enum": [
            "",
            "review",
            "planned",
            "doing",
            "done",
            "not"
          ],
          "type": "string"
        },
        "pinned": {
          "type": "boolean"
        },
        "status": {
          "enum": [
            "shown",
            "hidden",
            "answered",
            "pending"
          ],
          "type": "string"
        }
      }
    }
    arguments 47 lines
  • combine_posts auth-required never probed

    Ideas and nominations: combine a duplicate into another post Body: { into: <post id> }. The duplicate's upvotes move to that post (someone who upvoted both counts once) and the duplicate is hidden as merged; its author sees where it went. On a nomination only while suggestions are open. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "id",
        "into"
      ],
      "properties": {
        "id": {
          "type": "integer"
        },
        "into": {
          "type": "integer"
        },
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 21 lines
  • approve_all_posts auth-required never probed

    Boards and nominations: approve every post waiting for approval Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 13 lines
  • host_question auth-required never probed

    Q&A: put a question on the big screen, mark it answered, or take it down Body: { action: 'show', id } (a waiting question is approved too), { action: 'answer', id, next?: true } (next puts the most upvoted open question up), or { action: 'down' }. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "action"
      ],
      "properties": {
        "id": {
          "type": "integer"
        },
        "next": {
          "type": "boolean"
        },
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "action": {
          "enum": [
            "show",
            "answer",
            "down"
          ],
          "type": "string"
        }
      }
    }
    arguments 28 lines
  • close_suggestions auth-required never probed

    Nominations: close suggestions and start voting with the finalists Body: { finalists?: [post ids] }. Without finalists, every approved suggestion goes on; with them, only those (a waiting one is approved). The finalists become the entries, the rest are hidden, and voting opens. Can't be undone. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "finalists": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "minItems": 1
        }
      }
    }
    arguments 20 lines
  • update_settings changes data auth-required never probed

    Change settings, or end / reopen voting Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "lang": {
          "enum": [
            "en",
            "es",
            "de",
            "zh",
            "fr",
            "pt",
            "ja",
            "ko",
            "it",
            "hi",
            "id",
            "tr",
            "ar"
          ],
          "type": "string",
          "description": "The voters' language: the contest's QR codes and links open in it (anyone can switch). Defaults to en."
        },
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "names": {
          "type": "boolean",
          "description": "Boards and nominations (while suggesting): people may add their name."
        },
        "theme": {
          "type": "string",
          "pattern": "^(classic|halloween|harvest|winter|garden|carnival|beach|sports|hearts|stars|lunar|diwali|muertos|hanami|cats|dogs|campfire|art|trivia|classroom|cookoff|science|wedding|carshow|workplace|custom:[0-9a-f]{6}-[0-9a-f]{6})$",
          "description": "classic, halloween, harvest, winter, garden, carnival, beach, sports, hearts, stars, lunar, diwali, muertos, hanami, cats, dogs, campfire, art, trivia, classroom, cookoff, science, wedding, carshow, workplace, thanksgiving, or custom:<accent hex>-<second hex> (e.g. custom:1a73e8-ff8a5b)"
        },
        "title": {
          "type": "string",
          "maxLength": 120
        },
        "closed": {
          "type": "boolean",
          "description": "true ends voting now; false reopens it"
        },
        "labels": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer"
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 40
                  }
                }
              }
            ]
          },
          "maxItems": 10,
          "description": "Ideas: categories, names (new) or {id, name} (renames). A category with posts can't be removed."
        },
        "paused": {
          "type": "boolean",
          "description": "Boards: pause new posts."
        },
        "approve": {
          "type": "boolean",
          "description": "Boards and nominations (while suggesting): new posts wait for approval."
        },
        "ipLimit": {
          "type": "integer",
          "maximum": 100000,
          "minimum": 1
        },
        "opensAt": {
          "type": [
            "integer",
            "null"
          ]
        },
        "replyAs": {
          "type": "string",
          "maxLength": 60,
          "description": "Ideas: how replies are signed, e.g. The library team."
        },
        "results": {
          "enum": [
            "live",
            "after",
            "private"
          ],
          "type": "string"
        },
        "closesAt": {
          "type": [
            "integer",
            "null"
          ]
        },
        "criteria": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 30
          },
          "maxItems": 5,
          "description": "Contests: what judges score, 1–10 each. Empty turns judging off."
        },
        "categories": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer"
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 40
                  }
                }
              }
            ]
          },
          "maxItems": 10,
          "description": "Contests: award categories. Names (new) or {id, name} (keeps that category's votes when renaming). A category with votes can't be removed."
        },
        "allowChange": {
          "type": "boolean"
        },
        "description": {
          "type": "string",
          "maxLength": 1000
        },
        "suggestUntil": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Nominations, while suggesting: when suggestions close by themselves (Unix ms, before closesAt), or null to close them by hand."
        },
        "requireBallot": {
          "type": "boolean"
        }
      }
    }
    arguments 163 lines
  • get_dashboard reads auth-required 5h ago

    Everything on the organizer dashboard Settings, entries with vote counts, ballot tickets, fairness signals (grouped, hashed), and survey or hunt data. campaign.note, when set, is a message to the organizer from QRvote's moderators (pass it on to the person). Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 13 lines
  • list_responses reads auth-required 13h ago

    Survey responses, newest first (up to 500). Quizzes include each response's score. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 13 lines
  • add_judge changes data auth-required never probed

    Contests: add a judge (judging must be on) The dashboard (getDashboard → judging.judges) then lists the judge with their private scorecard link key: https://qrvote.org/j/<slug>#<id>.<key>. Give it to that judge only. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 60
        },
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 18 lines
  • list_posts auth-required never probed

    Boards and nominations: every post, including those waiting for approval or hidden board.posts with each post's id, text, optional name, status (pending, shown, hidden, answered, merged), votes, and for Ideas its stage, category, reply and pinned; board.counts per status and board.onScreen (Q&A). Never who posted: organizers can't see that. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 13 lines
  • add_entries changes data auth-required never probed

    Add entries (contests) or checkpoints (hunts) Not on boards (409 board_entries: posts come from people). On a nomination still taking suggestions, these are your own nominees, shown with the suggestions. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "entrants"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "entrants": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 80
              },
              "description": {
                "type": "string",
                "maxLength": 300
              }
            }
          }
        }
      }
    }
    arguments 33 lines
  • set_questions changes data auth-required never probed

    Surveys and quizzes: replace the questions (only until the first response) Body: { questions: [...] }, 1–50, in order; the whole list is replaced. Each: { type, prompt (≤300 chars), required?, options?, max?, answer?, id? }. type is single (pick one) or multi (pick any) with options (2–20 distinct texts), yesno, likert (disagree…agree), rating (max 5 or 10 stars), short or long (written). Quizzes: answer is the correct option index (single; yesno uses 1 = yes, 0 = no), a list of option indexes (multi), or a list of accepted texts (short); at least one question needs one. Send a question's id back to keep its picture. Refused with 409 once anyone has answered; the answer key can still be fixed with setAnswerKey. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "questions"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "questions": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "prompt"
            ],
            "properties": {
              "id": {
                "type": "integer"
              },
              "max": {
                "enum": [
                  5,
                  10
                ],
                "type": "integer"
              },
              "type": {
                "enum": [
                  "single",
                  "multi",
                  "yesno",
                  "likert",
                  "rating",
                  "short",
                  "long"
                ],
                "type": "string"
              },
              "answer": {},
              "prompt": {
                "type": "string",
                "maxLength": 300
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 100
                },
                "maxItems": 20
              },
              "required": {
                "type": "boolean"
              }
            }
          },
          "maxItems": 50,
          "minItems": 1
        }
      }
    }
    arguments 66 lines
  • get_poster_orders auth-required never probed

    Order printed posters on Zazzle: a ready order link and print image for each size The poster from the dashboard's Print page, in the contest's language, with its QR code (it opens the public page only). orders maps each size (18x24 and 12x18 posters, 16x20 foam board) to a Zazzle link that opens that product filled in; give the person the link, and they order and pay on Zazzle. posters holds the print images. englishWords means the contest's language can't be printed yet, so the poster is in English. Sheets of entry signs aren't offered here: they carry entry codes, so they're ordered from the Print page. Needs the organizer key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        },
        "accent": {
          "type": "string",
          "pattern": "^[0-9a-fA-F]{6}$",
          "description": "The sign color as 6 hex digits, no #. Leave it out for the contest theme's color, as on the dashboard's Print page."
        }
      }
    }
    arguments 18 lines
  • get_results reads unknown 13h ago

    Results: vote tallies, survey totals, or a hunt leaderboard Public when the organizer made results visible; otherwise send the organizer key. Contests also return categoryResults (standings per award category) and, once voting has closed, judgeResults (each criterion averaged over the judges, summed). Written survey answers and individual judges' scores are never included here. Public; the organizer key also unlocks private results.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 13 lines
  • draft_contest reads unknown 5h ago

    Make a link that opens QRvote’s create form already filled in: name, entries, questions or starter posts, rules, closing time, look. Give the link to the person: they check it and click Create (it needs a human check). Nothing is created until they do. To manage it afterwards, they can connect you at https://mcp.qrvote.org/mcp/organizer.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind",
        "title"
      ],
      "properties": {
        "host": {
          "type": "boolean",
          "description": "Quizzes: run it live on a big screen, one question at a time"
        },
        "kind": {
          "enum": [
            "contest",
            "survey",
            "quiz",
            "hunt",
            "qa",
            "ideas",
            "nominate",
            "wall"
          ],
          "type": "string",
          "description": "contest: people vote for entries; survey: questions; quiz: questions with right answers and a leaderboard; hunt: find QR checkpoints; qa: the audience asks and upvotes questions; ideas: people share and upvote ideas; nominate: people suggest the entries, then vote on the finalists; wall: people leave messages (no voting)"
        },
        "lang": {
          "enum": [
            "en",
            "es",
            "de",
            "zh",
            "fr",
            "pt",
            "ja",
            "ko",
            "it",
            "hi",
            "id",
            "tr",
            "ar"
          ],
          "type": "string",
          "description": "The voters' language: its QR codes, big screen and printed signs use it (anyone can still switch). Default: the language the person is using, else en."
        },
        "mode": {
          "enum": [
            "single",
            "each"
          ],
          "type": "string",
          "description": "Contests: one vote in total, or one vote per entry (like/heart each)"
        },
        "names": {
          "type": "boolean",
          "description": "qa, ideas, nominate, wall: people may add their name (default on, except ideas)"
        },
        "posts": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 280
          },
          "maxItems": 10,
          "description": "qa, ideas, wall: starter posts, up from the start"
        },
        "theme": {
          "enum": [
            "classic",
            "halloween",
            "harvest",
            "winter",
            "garden",
            "carnival",
            "beach",
            "sports",
            "hearts",
            "stars",
            "lunar",
            "diwali",
            "muertos",
            "hanami",
            "cats",
            "dogs",
            "campfire",
            "art",
            "trivia",
            "classroom",
            "cookoff",
            "science",
            "wedding",
            "carshow",
            "workplace",
            "thanksgiving"
          ],
          "type": "string"
        },
        "title": {
          "type": "string",
          "maxLength": 120
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "maxItems": 10,
          "description": "ideas: categories people pick from (e.g. Went well, To improve, Try next)"
        },
        "approve": {
          "type": "boolean",
          "description": "qa, ideas, nominate, wall: new posts wait for the organizer's approval (default on, except ideas)"
        },
        "entries": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 80
              },
              {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "description": {
                    "type": "string",
                    "maxLength": 300
                  }
                }
              }
            ]
          },
          "maxItems": 200,
          "description": "Contests and nominations: the entries (a nomination's suggestions join them); hunts: the checkpoints. A name, or { name, description }."
        },
        "results": {
          "enum": [
            "live",
            "after",
            "private"
          ],
          "type": "string",
          "description": "When people see results"
        },
        "closesAt": {
          "type": "string",
          "description": "When voting ends, ISO 8601 with a time zone offset"
        },
        "questions": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "prompt"
            ],
            "properties": {
              "max": {
                "enum": [
                  5,
                  10
                ],
                "type": "integer"
              },
              "type": {
                "enum": [
                  "single",
                  "multi",
                  "yesno",
                  "likert",
                  "rating",
                  "short",
                  "long"
                ],
                "type": "string"
              },
              "answer": {},
              "prompt": {
                "type": "string",
                "maxLength": 300
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 100
                },
                "maxItems": 20
              },
              "required": {
                "type": "boolean"
              }
            }
          },
          "maxItems": 50,
          "description": "Surveys and quizzes, as in setQuestions: { type: single|multi|yesno|likert|rating|short|long, prompt, options? (single/multi), max? (rating 5 or 10), required?, answer? (quiz: option index, list of indexes, yesno 1/0, or accepted texts for short) }"
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60
          },
          "maxItems": 20,
          "description": "Contests: separate awards, one vote in each (e.g. Scariest, Funniest)"
        },
        "description": {
          "type": "string",
          "maxLength": 1000
        },
        "leaderboard": {
          "type": "boolean",
          "description": "Quizzes: show a leaderboard"
        }
      },
      "description": "What to fill the create form with. Same shapes as the API (https://qrvote.org/openapi.json)."
    }
    arguments 224 lines
  • get_campaign reads unknown 5h ago

    A contest, survey, hunt or board as the public sees it Entries (contests), questions (surveys), checkpoints (hunts; unfound ones show only their clue) or board.posts (boards, and nominations while suggesting: only approved posts, never who posted). Entry QR codes are never included when scanning is required. Boards take ?sort=top|new|hot|answered, ?limit and ?filter=<category id>. Public: no key needed.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^[a-z0-9-]{1,64}$",
          "description": "The id in the public link, e.g. `scarecrow-contest-2026-ab12` from https://qrvote.org/c/scarecrow-contest-2026-ab12"
        }
      }
    }
    arguments 13 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 482c7a36cf0b5057.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/482c7a36cf0b5057/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/482c7a36cf0b5057/badge.svg)](https://brick.blue/agent/482c7a36cf0b5057?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.