chaturbate-mcp
Read-only MCP server exposing three Chaturbate APIs as tools, for use from Claude Code or any MCP client (e.g. lobehub):
| API | Endpoint | Tool | Data |
|---|---|---|---|
| Room/user stats | chaturbate.com/statsapi/ |
fetch_room_stats |
viewers, token balance, satisfaction score, broadcast status… (refreshes ~every 5 min) |
| Affiliate earnings | chaturbate.com/affiliates/apistats/ |
fetch_affiliate_stats |
per-program earnings tables (9 programs), totals, payout |
| Events feed | eventsapi.chaturbate.com/events/… |
fetch_events, build_events_feed_url, get_events_schema |
live long-poll stream: chat, tips, follows, media purchases, private messages… |
Built with the official Python MCP SDK (mcp ≥ 2.1, the release that renamed FastMCP →
MCPServer) and httpx2.
Requirements
- Python ≥ 3.10 (developed on 3.14)
- uv
Install
uv sync --dev
Configure
Copy .env.example to .env and fill in your Chaturbate account values:
cp .env.example .env # then edit
Credentials are read from the environment, with .env as a local convenience:
CHATURBATE_USERNAME— your Chaturbate accountCHATURBATE_STATS_TOKEN— Stats-API scope token. The same token authorizes both the room-stats and the affiliate-earnings endpoints.CHATURBATE_EVENTS_TOKEN— Events-API scope token for the live feed. A private scope exposes tips + private messages; a public scope omits them.
Create/manage tokens at https://chaturbate.com/statsapi/authtoken/.
.env is gitignored. Never commit a real token.
Run
Start the stdio server manually:
uv run chaturbate-mcp
For Claude Code, a project-scoped entry is committed in .mcp.json (launches via uv, no
secrets in the config — the server reads them from .env). Approve the chaturbate server
once under /mcp.
Tools
| Tool | Purpose |
|---|---|
config_status |
Which credential sets are configured (booleans, never values) |
fetch_room_stats |
One-shot stats snapshot (optionally override username/token) |
fetch_affiliate_stats |
9-program earnings report. Sends only username+token unless you supply start_date/end_date/breakdown (undocumented upstream — see note) |
fetch_events |
Stateless long-poll of the events feed; thread next_url to stream |
build_events_feed_url |
Return the base feed URL for explicit cursor control |
get_events_schema |
Reference table of the 12 event methods and their object shapes |
Streaming events
The events feed is cursor-based and stateless:
fetch_events(timeout=0)→ returns{events, next_url}(recent events + a cursor).- Pass that
next_urlback tofetch_events(next_url=…)to receive the next batch. events: []+ a validnext_urlmeans nothing new in the window — poll again.
timeout (0–90 s) is how long the server waits for new events before returning. Default to
0 for a quick peek; a long poll can exceed an MCP client's tool-call deadline.
The companion skill .claude/skills/chaturbate/ documents these workflows for Claude Code.
Tests
Offline unit tests (no network, no tokens):
uv run pytest -q
Live smoke test against the real API — it reads the account/tokens from
review/Stats Token Authorization - Chaturbate.html in memory (or CHATURBATE_* env) and
never prints or persists them:
uv run python scripts/smoke_test.py
Releasing (PyPI)
This package publishes to PyPI from GitHub Actions via a Trusted Publisher (OIDC) — no API tokens or passwords are used.
To cut a release:
- Bump
versioninpyproject.toml, commit, and push. - Tag and push the tag (must match the new version):
git tag v0.1.0 && git push origin v0.1.0 .github/workflows/publish-python.ymlruns the offline tests, builds the wheel + sdist, smoke-tests the install, then publishes tohttps://pypi.org/project/chaturbate-mcp.
The PyPI trusted publisher is registered once at https://pypi.org/manage/account/publishing/ with exactly these values (the workflow name and environment must match the file/job in this repo):
| Field | Value |
|---|---|
| PyPI Project Name | chaturbate-mcp |
| Owner | Heretek-AI |
| Repository | chaturbate-mcp |
| Workflow name | publish-python.yml |
| Environment | pypi |
Security notes
review/(a saved copy of your authtoken page — contains live tokens) andmitm_mcp_traffic.dbare gitignored and must never be committed. SeeCLAUDE.md.- Real tokens live only in
.env(gitignored) or the environment. - Events
next_urlvalues embed the events token. Treat tool output as sensitive: do not echo feed URLs verbatim into chat, logs, or files. - API error messages are redacted before they reach the client.
Caveats
- Stats are ~5 minutes stale upstream; don't treat a single snapshot as live.
- Affiliate date-range params are undocumented and unreliable — Chaturbate can answer rapid requests carrying them with HTTP 403 (throttling). The tool sends none by default.
- The affiliate/room-stats data refreshes once every ~5 minutes regardless of request rate.
- The events feed rate limit is 2000 requests/minute.
Metadata
Release files for chaturbate-mcp 0.1.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 | Provenance | |
|---|---|---|---|---|
| chaturbate_mcp-0.1.0.tar.gz | 86.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| chaturbate_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 98.4 kB
Release files / chaturbate_mcp-0.1.0.tar.gz
| Download URL | chaturbate_mcp-0.1.0.tar.gz |
|---|---|
| Size | 86.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b2f21a731adeddcd589d32cd658c62bddeaa433caee0e5fe66cbb12ac7076335
|
|
BLAKE2b-256 checksum How to use checksums |
38e3aff466e365eb4eea3d9a13eef9a6918409fd85990c80ed11f40df74f4f66
|
| 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 Sep 3, 2026.
Transparency logRelease files / chaturbate_mcp-0.1.0-py3-none-any.whl
| Download URL | chaturbate_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8da07a50a1ceed893f22dec772e858d7f814f21b87db9cc525b79b034d1ea18b
|
|
BLAKE2b-256 checksum How to use checksums |
939d45a03f880a75b33a32dd1eed3f23035ac0922a6b616617af349d83b4b5e6
|
| 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 Sep 3, 2026.
Transparency logSecurity for chaturbate-mcp 0.1.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for chaturbate_mcp-0.1.0.tar.gz
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 Sep 3, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.