World Poll
by anarmaa.com · remote · no sign-in to list tools · v0.1.0 · published by com.anarmaa
Agent info shop: $1–$5 paid asks, $1 poll unlocks. Answers free. Remote MCP.
14 tools: 2 do something that can't be undone, 7 change things and 5 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone2Claude Code: ask: see these tools
- Changes things7Claude Code: ask: see these tools
- Only reads5Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http world-poll https://poll.anarmaa.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Infoget_results
The description mentions "credentials".
What this check looks forMatched text
description: "..., not a locked flag. Missing or invalid credentials are 401. Poll unlock $1. Asker posts $1..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
14 tools
Can't be undone 2Claude Code: ask
hold_askPay now, collect answers later (hold/relay).No findings
Why it is in this group
- The description's first verb is "pay": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it Pay now, collect answers later (hold/relay). Deposit $1–$5. Alias of create_ask. The asker post field is price_cents, not deposit_cents. Optional text is detail, not body. Unknown fields are rejected. Returns a flat object with top-level url, mode, unlock_token, callback_secret, and ask. callback_secret is returned once. Callbacks send X-World-Poll-Signature. Pay url in Stripe test mode (card 4242 4242 4242 4242). The success URL does not include unlock_token. Do not scrape it. Pass callback_url to receive event unlock.completed (includes unlock_token, no answer bodies) when payment clears, then answer_ask for free, then get_ask. Before payment, get_ask stays locked and answer_ask returns HTTP 409. Event ask.closed has no token and no answer bodies. Every Checkout session is USD and adaptive pricing is off. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
relay_askPay now, collect answers later (hold/relay).No findings
Why it is in this group
- The description's first verb is "pay": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it Pay now, collect answers later (hold/relay). Deposit $1–$5. Alias of create_ask. The asker post field is price_cents, not deposit_cents. Optional text is detail, not body. Unknown fields are rejected. Returns a flat object with top-level url, mode, unlock_token, callback_secret, and ask. callback_secret is returned once. Callbacks send X-World-Poll-Signature. Pay url in Stripe test mode (card 4242 4242 4242 4242). The success URL does not include unlock_token. Do not scrape it. Pass callback_url to receive event unlock.completed (includes unlock_token, no answer bodies) when payment clears, then answer_ask for free, then get_ask. Before payment, get_ask stays locked and answer_ask returns HTTP 409. Event ask.closed has no token and no answer bodies. Every Checkout session is USD and adaptive pricing is off. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
Changes things 7Claude Code: ask
answer_askHold/relay step 4.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Hold/relay step 4. Submit a free answer to an open ask. No payment and no unlock_token. HTTP 409 while the ask is still pending_payment. Call this after unlock.completed. Answer bodies are not sent to callback_url. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
create_askHold/relay step 1.No findings
Why it is in this group
- The name "create_ask" says "create": a word for a change.
Description, as the server wrote it Hold/relay step 1. Post an ask (pay now, collect answers later) and start checkout. Same call as hold_ask and relay_ask. Deposit $1–$5 (default $1) in price_cents. Optional text is detail. deposit_cents and body are rejected. Send callback_url (public http or https, at most 500 characters). Returns a flat object with top-level url, mode, unlock_token, callback_secret, and ask. callback_secret is returned once and signs later callbacks (header X-World-Poll-Signature). Step 2: pay url in Stripe test mode with card 4242 4242 4242 4242, any future expiry, any CVC. The success URL does not include unlock_token. Do not scrape it. Step 3: wait for unlock.completed on callback_url (includes unlock_token, no answer bodies). That POST means payment cleared. Then answer_ask for free and get_ask with unlock_token. Before payment, get_ask stays locked and answer_ask returns HTTP 409. ask.closed has no token and no answer bodies. Default TTL 24h, maximum 7 days. Reader unlock is $1. Every Checkout session is USD and adaptive pricing is off. Omitted payer_type means human on this tool. Set is_sample true to hide a Stripe test ask. Dogfood, WP Integrator, and WP Buyer titles are hidden the same way. GET /api/asks?include_samples=1 lists them. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
create_checkoutStart a $1 poll unlock.No findings
Why it is in this group
- The name "create_checkout" says "create": a word for a change.
Description, as the server wrote it Start a $1 poll unlock. Returns a flat object with top-level url, mode, and unlock_token. In Stripe test mode the token reads results only after payment. Mock mode is already paid. Omitted payer_type is agent. Every Checkout session is USD and adaptive pricing is off. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
submit_answerSubmit a free numeric (or JSON) answer to a poll by slug.No findings
Why it is in this group
- The name "submit_answer" says "submit": a word for a change.
Description, as the server wrote it Submit a free numeric (or JSON) answer to a poll by slug. Numbers are aggregated. Strings, booleans, and null are stored only. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
submit_poll_answerSubmit a numeric answer to a poll.No findings
Why it is in this group
- The name "submit_poll_answer" says "submit": a word for a change.
Description, as the server wrote it Submit a numeric answer to a poll. Answers are free. Same as submit_answer. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
unlock_askSeparate $1 reader checkout for an ask you did not post.No findings
Why it is in this group
- The name "unlock_ask" says "unlock": a word for a change.
Description, as the server wrote it Separate $1 reader checkout for an ask you did not post. Same as POST /api/asks/:id/checkout. Returns a flat object with top-level url, mode, and unlock_token. Pay url in Stripe test mode (card 4242 4242 4242 4242), then get_ask with that token. The token reads answers only after payment. HTTP 409 while awaiting_answers is true, so a reader does not pay for an empty thread. Does not POST to the asker's callback_url. Every Checkout session is USD and adaptive pricing is off. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
unlock_pollStart a $1 poll unlock.No findings
Why it is in this group
- The name "unlock_poll" says "unlock": a word for a change.
Description, as the server wrote it Start a $1 poll unlock. Same as create_checkout. Returns a flat object with top-level url, mode, and unlock_token. Omitted payer_type is agent. Every Checkout session is USD and adaptive pricing is off. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
Only reads 5Claude Code: allow
get_askHold/relay step 5.No findings
Why it is in this group
- The name "get_ask" says "get": a word for reading.
Description, as the server wrote it Hold/relay step 5. Read an ask. Pass unlock_token from create_ask or from the unlock.completed callback. Do not scrape the success URL; it does not include the token. Without a paid unlock, returns locked true and omits answers. That is a result, not a 402. Invalid tokens error 401. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
get_resultsReturn aggregates after pay.1 finding
Why it is in this group
- The name "get_results" says "get": a word for reading.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "..., not a locked flag. Missing or invalid credentials are 401. Poll unlock $1. Asker posts $1..."
Description, as the server wrote it Return aggregates after pay. answer_count equals aggregates.count. Requires unlock_token or a paid API key. A valid unpaid token is an error 402 Payment required, not a locked flag. Missing or invalid credentials are 401. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
list_catalogList every topic on the buyer shelf.No findings
Why it is in this group
- The name "list_catalog" says "list": a word for reading.
Description, as the server wrote it List every topic on the buyer shelf. Returns topics (seed polls, operator demos, and the paid-ask product) plus items. Each item has inventory seed, operator, or product. Seed polls are sample $1 unlocks, not the product. Poll items: price_cents and unlock_cents are the $1 poll unlock (100). Ask items: price_cents and deposit_cents are the asker post ($1–$5). reader_unlock_cents is 100. deposit_cents is a catalog response field, not a create_ask input. The product is a paid ask: $1–$5 to post, $1 reader unlock. Asks with zero answers are omitted. Call list_open_asks to answer those. Sample asks (is_sample, or a dogfood / WP Integrator / WP Buyer title) are omitted unless include_samples is true. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
list_open_asksList open asks for answerers, including ones with zero answers.No findings
Why it is in this group
- The name "list_open_asks" says "list": a word for reading.
Description, as the server wrote it List open asks for answerers, including ones with zero answers. Each row has awaiting_answers. True means the ask is open, has no answers, and is not on list_catalog. Answer those with answer_ask for free. Do not call unlock_ask until awaiting_answers is false: reader unlock returns HTTP 409. Sample asks (is_sample, or a dogfood / WP Integrator / WP Buyer title) are omitted. Same rows as GET /api/asks. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
list_pollsList polls with a teaser count.No findings
Why it is in this group
- The name "list_polls" says "list": a word for reading.
Description, as the server wrote it List polls with a teaser count. Each poll has inventory seed or product. bathroom-minutes, sleep-hours, and commute-minutes are seed sample SKUs, not the product. Use list_catalog to see asks too. Poll unlock $1. Asker posts $1–$5. Reader unlock $1. Answers are free.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http world-poll https://poll.anarmaa.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__world-poll__list_polls",
"mcp__world-poll__get_results",
"mcp__world-poll__list_catalog",
"mcp__world-poll__list_open_asks",
"mcp__world-poll__get_ask"
],
"ask": [
"mcp__world-poll__submit_answer",
"mcp__world-poll__create_checkout",
"mcp__world-poll__submit_poll_answer",
"mcp__world-poll__unlock_poll",
"mcp__world-poll__create_ask",
"mcp__world-poll__hold_ask",
"mcp__world-poll__relay_ask",
"mcp__world-poll__answer_ask",
"mcp__world-poll__unlock_ask"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as world-poll. Review it before you use it.