OnlyFans over MCP
Drive OnlyFans accounts from Claude, ChatGPT, Manus, or any AI agent. 290+ tools, account-scoped by acct_ ID.
The OnlyFans half of the server
The MCP server covers both creator platforms. OnlyFans is by far the larger half — 290+ of the 350+ tools — and its tools are unprefixed:
listChats · sendMessage · sendMassMessage · listAllFans · getEarningStatisticsFansly tools sit alongside them under a fansly_ prefix. If you only work with OnlyFans, see scoping below to drop them from your agent's context.
Every documented OnlyFans endpoint maps one-to-one to a tool, so the OnlyFans API reference is the current list — or just ask your client for tools/list.
Prerequisites
- An OnlyFans API account and an API key
- At least one connected OnlyFans account
Your agent can do the connecting itself: startAuthentication, then submit2FA if a code is required, polling pollAuthenticationStatus in between.
Account IDs
The large majority of tools are account-scoped. They take an account parameter in the form acct_XXXXXXXXXXXXXXX.
listAccounts— every OnlyFans account on your team. Usually your agent's first call.whoami— the team behind the API key. Needs noaccountat all.
If your agent works on one creator, pin it in the system prompt so it stops asking:
Use account acct_XXXXXXXXXXXXXXX for all tool calls unless told otherwise.acct_… IDs work on OnlyFans tools only. Passing one to a fansly_… tool — or a fansly_acct_… ID to an unprefixed tool — fails. If a call 403s on an account you know exists, check that the tool prefix matches the account prefix.
Scoping to OnlyFans only
350+ tools is a lot of context, and some clients cap how many they will load. If you never touch Fansly, append ?platforms=onlyfans to the MCP URL:
https://app.onlyfansapi.com/mcp/onlyfans-mcp?platforms=onlyfansThe server then registers only the OnlyFans tools. The filter applies to tool execution as well as listing, so a scoped connection cannot call a Fansly tool even if the model guesses the name.
An unrecognised value (a typo like ?platforms=onlyfan) falls back to loading every tool rather than none, so a bad config never leaves you with an empty server.
Things to tell your agent
Three behaviours an agent cannot infer from the tool schema alone.
Media upload is URL-based over MCP
uploadMediaToTheOnlyFansCDN accepts a raw file or a file_url. Binary file parameters are stripped from MCP tool schemas — they can't travel as JSON — so over MCP you always pass file_url.
For large files and videos, set async: true. The call returns a polling_url; poll getUploadStatus until it completes, then attach the resulting ofapi_media_… ID.
Direct binary uploads still work over plain HTTP — this only affects the MCP tool surface. See Upload media.
Prices are plain USD, with a floor
On sendMessage and sendMassMessage, price is in US dollars — 12 means $12.00. OnlyFans accepts 0 or a value between 3 and 200; anything in between 0 and 3 is rejected.
This is the opposite convention to Fansly, where 1000 = $1.00. If your agent drives both platforms, state the unit per platform in your system prompt — a model that carries the Fansly habit across will try to charge $1,200.
Setting a non-zero price requires mediaFiles, and locks that media behind the paywall.
Media can be attached three ways
mediaFiles on messages and posts accepts ofapi_media_… upload IDs, OnlyFans vault IDs, or direct uploads. Over MCP you'll use the first two — upload via file_url and pass the returned ID, or reference something already in the vault via listVaultMedia.
previews works the same way, and also accepts integer indices pointing at entries in mediaFiles.
Example prompts
Drop these into a chat with the connector enabled:
Reporting & analytics
- "Summarize today's PPV revenue per creator."
- "List my top 20 spenders this week with their last message timestamp."
- "Pull last quarter's chargebacks and group them by reason."
Fan & chat ops
- "Find every chat with no reply in 24h and surface them."
- "Tag whales spending over $500 with the
viplabel." - "Identify whales who haven't messaged in 14 days — draft a re-engagement DM."
Mass messaging & monetization
- "Mass-message expired subs with a 50% reactivation offer. Draft it, don't send."
- "Upload
https://example.com/promo.jpgand send it as a $15 PPV to my VIP list."
Troubleshooting
Sending safely
Don't let an autonomous agent blind-retry a send. If sendMessage or sendMassMessage times out, the message may already have gone through. Have the agent confirm with listChatMessages before resending, and prefer draft-then-approve for mass messages.
Scoped API keys, per-account permissions, and a full audit log of every call your agent makes all apply here — see Control & safety.
See also
- MCP overview — what MCP is, the server URL, and supported clients
- Fansly over MCP — the other half of the server
- Claude · ChatGPT · Manus — install guides
- Embed in your app — backend integration with your own API key
- OnlyFans API reference — every endpoint exposed as a tool
- Connect an OnlyFans account — prerequisite for account-scoped calls