Online Poll Maker MCP
An MCP server that allows AI agents to prepare poll drafts via HTTP API. It provides tools to create, retrieve, and update poll drafts, which are then reviewed and published by a human in the browser. Agents cannot publish, vote, or manage polls directly.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://onlinepollmaker.com/mcpWhat its tools do
3 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (1)
Can change data (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Create a poll draft with single-choice questions
- Retrieve the status of an existing poll draft
- Update the content of a poll draft before human review
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- online-poll-maker 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 3 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"logging": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
3 advertised
create_poll_draft — Create poll draft
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.
{
"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
}{
"type": "object",
"required": [
"id",
"version",
"expires_at"
],
"properties": {
"id": {
"type": "string"
},
"token": {
"type": "string"
},
"content": {
"type": [
"null",
"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
},
"version": {
"type": "integer",
"maximum": 2147483647,
"minimum": -2147483648
},
"edit_url": {
"type": "string"
},
"expires_at": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_poll_draft — Read poll draft
Read the latest content and version of a draft. Call this before every update: the person may have edited the draft in the browser.
{
"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
}{
"type": "object",
"required": [
"id",
"version",
"expires_at"
],
"properties": {
"id": {
"type": "string"
},
"token": {
"type": "string"
},
"content": {
"type": [
"null",
"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
},
"version": {
"type": "integer",
"maximum": 2147483647,
"minimum": -2147483648
},
"edit_url": {
"type": "string"
},
"expires_at": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"idempotentHint": false
}update_poll_draft — Replace poll draft
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.
{
"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
}{
"type": "object",
"required": [
"id",
"version",
"expires_at"
],
"properties": {
"id": {
"type": "string"
},
"token": {
"type": "string"
},
"content": {
"type": [
"null",
"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
},
"version": {
"type": "integer",
"maximum": 2147483647,
"minimum": -2147483648
},
"edit_url": {
"type": "string"
},
"expires_at": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-09: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 670 ms
- 95th percentile latency
- 670 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 670 ms · metadata changed · 3 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http online-poll-maker-mcp https://onlinepollmaker.com/mcpCodex
codex mcp add online-poll-maker-mcp --url https://onlinepollmaker.com/mcpCursor
{
"mcpServers": {
"online-poll-maker-mcp": {
"url": "https://onlinepollmaker.com/mcp"
}
}
}Cline
{
"mcpServers": {
"online-poll-maker-mcp": {
"type": "streamableHttp",
"url": "https://onlinepollmaker.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"online-poll-maker-mcp": {
"type": "http",
"url": "https://onlinepollmaker.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http online-poll-maker-mcp https://onlinepollmaker.com/mcpClaude Desktop
https://onlinepollmaker.com/mcpWindsurf
{
"mcpServers": {
"online-poll-maker-mcp": {
"serverUrl": "https://onlinepollmaker.com/mcp"
}
}
}Let your agent find its tools
Find servers like Online Poll Maker MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.