Create poll drafts on onlinepollmaker.com. Free, no sign-up; you review and publish in the browser.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a poll draft (1-100 single-choice questions, 2-10 options each). Returns id, token, version and edit_url. Give the edit_url to the person so they can review, verify and publish it in their browser; the draft expires 24 hours after creation. Never say the poll is published.
1-100 required single-choice questions
Optional poll title, up to 200 characters after trimming. Empty means the first question is used as the title.
One of none (default), optional or required: whether participants are asked for an email address shared with the creator. Cannot change after publishing.
Required when email_mode is optional or required: a short note (up to 200 characters) telling participants why the email is collected.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http online-poll-maker https://onlinepollmaker.com/mcp
Create a poll draft (1-100 single-choice questions, 2-10 options each). Returns id, token, version and edit_url. Give the edit_url to the person so they can review, verify and publish it in their browser; the draft expires 24 hours after creation. Never say the poll is published.
| Argument | Type | Description |
|---|---|---|
| title | string | Optional poll title, up to 200 characters after trimming. Empty means the first question is used as the title. |
| questions* | null | array | 1-100 required single-choice questions |
| email_mode | string | One of none (default), optional or required: whether participants are asked for an email address shared with the creator. Cannot change after publishing. |
| email_purpose | string | Required when email_mode is optional or required: a short note (up to 200 characters) telling participants why the email is collected. |
{
"type": "object",
"required": [
"questions"
],
"properties": {
"title": {
"type": "string",
"description": "Optional poll title, up to 200 characters after trimming. Empty means the first question is used as the title."
},
"questions": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"text",
"options"
],
"properties": {
"text": {
"type": "string",
"description": "Question text, 1-200 characters after trimming. Plain text."
},
"options": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Option text, 1-100 characters after trimming. Plain text."
},
"image_url": {
"type": "string",
"description": "Optional direct HTTPS image URL (up to 2048 characters)."
}
},
"additionalProperties": false
},
"description": "2-10 options; duplicates within a question are rejected"
},
"image_url": {
"type": "string",
"description": "Optional direct HTTPS image URL (up to 2048 characters). The image is loaded by participants' browsers, not by the server."
}
},
"additionalProperties": false
},
"description": "1-100 required single-choice questions"
},
"email_mode": {
"type": "string",
"description": "One of none (default), optional or required: whether participants are asked for an email address shared with the creator. Cannot change after publishing."
},
"email_purpose": {
"type": "string",
"description": "Required when email_mode is optional or required: a short note (up to 200 characters) telling participants why the email is collected."
}
},
"additionalProperties": false
}Read the latest content and version of a draft. Call this before every update: the person may have edited the draft in the browser.
| Argument | Type | Description |
|---|---|---|
| id* | string | draft id returned by create_poll_draft |
| token* | string | draft token returned by create_poll_draft |
{
"type": "object",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"description": "draft id returned by create_poll_draft"
},
"token": {
"type": "string",
"description": "draft token returned by create_poll_draft"
}
},
"additionalProperties": false
}Replace the whole draft content. Send the version you just read with get_poll_draft. On version_conflict, read the draft again and re-apply your change; never overwrite newer content with an older copy.
| Argument | Type | Description |
|---|---|---|
| id* | string | draft id returned by create_poll_draft |
| token* | string | draft token returned by create_poll_draft |
| content* | object | the complete poll content; it replaces the whole draft |
| version* | integer | the version you just read with get_poll_draft; a newer version on the server returns version_conflict |
{
"type": "object",
"required": [
"id",
"token",
"version",
"content"
],
"properties": {
"id": {
"type": "string",
"description": "draft id returned by create_poll_draft"
},
"token": {
"type": "string",
"description": "draft token returned by create_poll_draft"
},
"content": {
"type": "object",
"required": [
"questions"
],
"properties": {
"title": {
"type": "string",
"description": "Optional poll title, up to 200 characters after trimming. Empty means the first question is used as the title."
},
"questions": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"text",
"options"
],
"properties": {
"text": {
"type": "string",
"description": "Question text, 1-200 characters after trimming. Plain text."
},
"options": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Option text, 1-100 characters after trimming. Plain text."
},
"image_url": {
"type": "string",
"description": "Optional direct HTTPS image URL (up to 2048 characters)."
}
},
"additionalProperties": false
},
"description": "2-10 options; duplicates within a question are rejected"
},
"image_url": {
"type": "string",
"description": "Optional direct HTTPS image URL (up to 2048 characters). The image is loaded by participants' browsers, not by the server."
}
},
"additionalProperties": false
},
"description": "1-100 required single-choice questions"
},
"email_mode": {
"type": "string",
"description": "One of none (default), optional or required: whether participants are asked for an email address shared with the creator. Cannot change after publishing."
},
"email_purpose": {
"type": "string",
"description": "Required when email_mode is optional or required: a short note (up to 200 characters) telling participants why the email is collected."
}
},
"description": "the complete poll content; it replaces the whole draft",
"additionalProperties": false
},
"version": {
"type": "integer",
"maximum": 2147483647,
"minimum": -2147483648,
"description": "the version you just read with get_poll_draft; a newer version on the server returns version_conflict"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.