CrowdOS MCP Server
Simulated focus groups as agent-callable tools. Connects AI agents (Claude Desktop, Cursor, Cline, LangGraph, CrewAI, and any other Model Context Protocol host) to CrowdOS, so they can run simulated public-opinion research with a single tool call.
Every plan can use it — Free, Pro and Max — at that plan's limits on the web. Enterprise accounts get every tool.
What this gives you
> Run a focus group on whether companies should mandate 4-day weeks.
Use 200 people from the us_general_population preset.
[tool: run_focus_group]
{
"id": "ad4b3736-...",
"sentiment_summary": {
"positive_pct": 71.5, "negative_pct": 18.0, "neutral_pct": 10.5,
"positive": 143, "negative": 36, "neutral": 21
},
"total_responses": 200,
"billing": { "actual_cents": 400 }
}
Two ways to connect
Hosted (no install). Add https://api.crowdos.ai/mcp as a remote
MCP server in any client that supports them (claude.ai connectors,
Cursor, agent frameworks). OAuth-capable clients sign in and approve on
first connect; the grant shows up as a revocable key under
Account → MCP keys. Header-based clients pass
Authorization: Bearer crowd_....
This package (stdio, for desktop hosts). Since 1.0.0 the package is a thin relay to that same hosted endpoint: it holds no tools of its own, so the tools, limits and checks your agent sees are exactly the ones your key has there, and a new tool reaches you without an upgrade.
pip install crowdos-mcp
Then create an MCP key at https://crowdos.ai/account/api-keys (any plan can).
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"crowdos": {
"command": "crowdos-mcp",
"env": {
"CROWDOS_API_KEY": "crowd_..."
}
}
}
}
Restart Claude Desktop; the CrowdOS tools appear in the tool picker.
Cursor / Cline
Same shape in their MCP-server settings: command crowdos-mcp, env
CROWDOS_API_KEY.
Tools, and who gets them
| Tool | What it does | Plans |
|---|---|---|
run_focus_group |
Simulated poll on a topic — sentiment + quotes | Every plan |
run_debate |
Multi-round simulated debate — convergence + key arguments | Every plan |
compare_options |
Simulated A/B test on text options — leaderboard + winner | Every plan |
test_pricing |
Van Westendorp / Gabor-Granger pricing study | Pro, Max, Enterprise |
rank_items |
MaxDiff (best-worst scaling) on 4-200 items | Pro, Max, Enterprise |
pretest_questions |
Pretest 1-40 draft survey questions before fielding them | Enterprise |
estimate_reach |
Preview how broad a custom_audience filter is (free) |
Every plan |
preview_cost |
Cents + seconds before running (free) | Every plan |
list_demographic_presets |
The audience templates | Every plan |
get_simulation |
Fetch a study you ran | Every plan |
cancel_simulation |
Stop a running study (releases the wallet reservation) | Every plan |
crowd_sample |
Browse the public crowd (sanitized) | Every plan |
list_panels / get_panel / delete_panel |
Saved panels — the same respondents across runs | Enterprise |
test_pricing and rank_items need Pro or Max because their smallest
panels (50 and 100 respondents) are larger than Free's limit — the same
rule as the web app.
Limits by plan
| Free | Pro | Max | Enterprise | |
|---|---|---|---|---|
| Respondents per study | 20 | 500 | 1,000 | 750 (Pro) / 2,000 (Max) |
compare_options options |
3 | 5 | 10 | 5 (Pro) / 10 (Max) |
| Requests per minute | 5 | 30 | 120 | per plan |
| Monthly spend ceiling (list price) | $5 | $500 | $2,500 | per plan or agreement |
| Results | totals | totals | totals | totals, or respondent-level with the add-on |
On Free, Pro and Max the tools also take the web's 17 answer languages,
and image_url and the saved-panel arguments are Enterprise-only. The
hosted endpoint checks every call before it runs (an off-plan call comes
back as not_on_your_plan or over_plan_cap, naming the limit to retry
with), and the API checks it again.
Studies draw down your CrowdOS wallet at the same per-respondent prices
as the web app; every run returns billing.actual_cents. Top up at
https://crowdos.ai/account/billing.
Recommended flow
list_demographic_presets— if the user didn't pick an audience, propose one.estimate_reach(free) — when usingcustom_audience. Asmallaudience is not a blocked one: the panel is still delivered at the size you ask for, with every respondent matching the filter. Pass several related interest tags (they are OR-matched) rather than one.preview_cost— the cents and seconds before committing.- Confirm with the user, then run.
Run tools block 5-120 s depending on panel size, and stream progress:
when your host sends a progressToken (the default), it shows
"47/200 respondents" live. If a call fails after the study launched, the
error carries sim_id and recoverable: true — call get_simulation
in 30-60 s rather than re-running, which would launch and bill a second
study.
Errors
Failures come back as a typed envelope (isError set on the MCP
result). The error field is one of:
error |
When | Agent action |
|---|---|---|
auth_error |
401 / 403 — a missing, revoked or disabled key | Get a fresh key |
not_on_your_plan |
The tool or argument isn't on this account's plan | Use what the plan offers, or upgrade |
over_plan_cap |
Panel larger than the plan's limit | Retry with the limit in the message |
validation_error |
A bad request (or one caught before sending) | Fix the request |
insufficient_funds |
Wallet drained | Top up at top_up_url |
not_found |
A sim_id / panel_id that is missing or not yours |
Check the id |
rate_limited |
429 | Wait retry_after seconds |
quota_exceeded |
Monthly spend ceiling reached | Wait for the 1st, or upgrade |
simulation_failed |
The study failed | Inspect sim_id; try a smaller run |
stream_disconnected / timeout |
The connection dropped after launch | get_simulation(sim_id) later — do not re-run |
server_error / request_failed |
5xx, or the endpoint unreachable | Retry with backoff |
configuration_error |
CROWDOS_API_KEY unset |
Fix the host config |
Configuration
| Env var | Default | Required |
|---|---|---|
CROWDOS_API_KEY |
— | yes |
CROWDOS_MCP_URL |
https://api.crowdos.ai/mcp |
no |
CROWDOS_API_BASE_URL |
— | no (older name: <base>/mcp is used when set) |
Versioning
Semver. 1.0.0 made the package a relay, so the tool surface is now the hosted endpoint's and follows the API's own deploys; the package itself changes only when the relay does.
Releasing: tag a commit already on
main—git tag mcp-v<version> && git push origin mcp-v<version>— and.github/workflows/publish-mcp.ymlbuilds and publishes to PyPI over Trusted Publishing. The run stops before building if the tag,pyproject.tomland__init__.pydisagree, if the tests fail, or if the built server does not start on the installed SDK.
Changelog
- 1.0.0 — the package relays to
https://api.crowdos.ai/mcpinstead of calling the REST API itself: tools, limits and checks come from the hosted endpoint for your key's account. Every plan can use it (the REST API is for Enterprise accounts since Oct 10, 2026). Progress notifications and thesim_idon a dropped stream are relayed. NewCROWDOS_MCP_URL. - 0.12.x — the last releases that called the REST API directly.
License
MIT.
Issues / questions
Email hello@motifmotion.sg. Setup guide: https://crowdos.ai/mcp.
Metadata
Release files for crowdos-mcp 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| crowdos_mcp-1.0.0.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| crowdos_mcp-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.4 kB
Release files / crowdos_mcp-1.0.0.tar.gz
| Download URL | crowdos_mcp-1.0.0.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
28c04610332ea71e16dece3f46bd19b29b2e769d804d66d4fb9b22b74b4444e1
|
|
BLAKE2b-256 checksum How to use checksums |
a7f467078e0c91e74bd796ef8125d364cc95668829e50fe756f6e66e59ae55cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / crowdos_mcp-1.0.0-py3-none-any.whl
| Download URL | crowdos_mcp-1.0.0-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
88278bf1bfa497bdde00650f156366cec96db7702ba0bb6412e75f4e0add52b0
|
|
BLAKE2b-256 checksum How to use checksums |
afe5d8052e26bf7a60f1443b523a4eaa74e23936a189e8430be16d316779d328
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency log