OnlyFans API

Fansly over MCP

Drive Fansly accounts from Claude, ChatGPT, Manus, or any AI agent. Same MCP server, same API key — Fansly tools are prefixed fansly_.

Fansly is already in your MCP server

There is no separate Fansly MCP server. Fansly tools live on the same endpoint you already use:

https://app.onlyfansapi.com/mcp/onlyfans-mcp

If you have already connected Claude, ChatGPT, or Manus, you have Fansly today — no reinstall, no second connector, no new API key. Reconnect the connector once so your client refreshes its tool list, and the Fansly tools appear.

Every documented Fansly endpoint maps one-to-one to a tool, so the Fansly API reference is the current list — or just ask your client for tools/list.

Already set up? Skip to tool naming — that's the only thing that behaves differently.

Prerequisites

Connecting a Fansly account works exactly like connecting an OnlyFans one, and your agent can do it: fansly_startAuthentication, then fansly_submit2FA if a code is required, polling fansly_pollAuthenticationStatus in between.

Tool naming

Every Fansly tool is prefixed fansly_. OnlyFans tools are unprefixed.

TaskOnlyFansFansly
List connected accountslistAccountsfansly_listAccounts
List chatslistChatsfansly_listChats
Send a chat messagesendChatMessagefansly_sendChatMessage
Send a mass messagesendMassMessagefansly_sendMassMessage
Create a postsendPostfansly_sendPost
Upload mediauploadMediafansly_uploadMedia

This prefix is not cosmetic. The two platforms share 26 identically-named operationslistAccounts, sendMassMessage, sendPost, blockUser, listVaultMedia and more. Without a namespace, an agent could not tell which platform a tool belonged to.

The two platforms are separate APIs with separate accounts. A fansly_acct_… ID will not work on an OnlyFans tool, and an acct_… ID will not work on a Fansly tool. If a tool call fails with a 403 or "not found" on an account you know exists, check that the prefix of the tool matches the prefix of the account ID.

Account IDs

Most tools are account-scoped, and the parameter name differs per platform:

PlatformParameterFormatDiscover with
OnlyFansaccountacct_XXXXXXXXXXXXXXXlistAccounts
FanslyfanslyAccountfansly_acct_XXXXXXXXXXXXXXXfansly_listAccounts

If your agent works on one creator, pin it in the system prompt so it stops asking:

Use Fansly account fansly_acct_XXXXXXXXXXXXXXX for all tool calls unless told otherwise.

Narrowing the tool list

The server exposes 350+ tools — 290+ OnlyFans and 80+ Fansly. That is a lot of context to hand a model, and some clients cap how many tools they will load.

If you only work with one platform, append ?platforms= to the MCP URL and the server registers only that platform's tools:

https://app.onlyfansapi.com/mcp/onlyfans-mcp?platforms=fansly
https://app.onlyfansapi.com/mcp/onlyfans-mcp?platforms=onlyfans

Both platforms is the default, and ?platforms=onlyfans,fansly is the same as omitting it.

The filter applies to tool execution as well as listing — a connection scoped to fansly cannot call an OnlyFans tool even if the model guesses the name. It is a safe way to hand an agent one platform and nothing else.

An unrecognised value (a typo like ?platforms=fansley) falls back to loading every tool rather than none, so a bad config never leaves you with an empty server.

Fansly-specific behaviour

Four things differ from OnlyFans in ways an agent cannot infer from the tool schema alone.

There is no "FYP post" tool

Posting to the For You Page is a parameter on fansly_sendPost, not a separate endpoint:

  • fypFlags: 0 — post to the FYP if it meets Fansly's requirements (default)
  • fypFlags: 4 — do not post to the FYP

If you ask an agent to "make an FYP post" it may hunt for a tool that does not exist. Say "post it and leave FYP enabled" instead, or pin the behaviour in your system prompt.

Media upload is URL-based over MCP

fansly_uploadMedia accepts either a raw file or a file_url. Binary file parameters are stripped from MCP tool schemas — they cannot be transported as JSON — so over MCP you always pass file_url.

For large files and videos, set async: true. The call returns HTTP 202 with a polling_url; poll fansly_getUploadStatus until it completes, then pass the returned fansly_media_… ID in mediaFiles on a post or message.

Direct binary uploads still work over plain HTTP — this only affects the MCP tool surface. See Upload Media.

Prices are in thousandths of a dollar

Fansly's smallest money unit is not cents. On price (for requirePurchase), 1000 = $1.00 and 10000 = $10.00.

Models frequently assume cents and under-price PPV content by 100×. If your agent sets prices, state the unit explicitly in your system prompt.

Media is attached by upload ID

mediaFiles on fansly_sendPost, fansly_sendChatMessage, and fansly_sendMassMessage takes fansly_media_… IDs returned by fansly_uploadMedia — not URLs and not vault IDs. Upload first, then attach.

Example prompts

Drop these into a chat with the connector enabled:

Chat ops

  • "List my Fansly chats with unread messages and summarize what each fan last asked."
  • "Reply to every unanswered Fansly chat from the last 24h with a short friendly nudge. Draft them, don't send."
  • "Who are my top 20 Fansly supporters this month?"

Mass messaging

  • "Send a Fansly mass message to groupId X announcing tomorrow's drop. Text only, no media."
  • "Show my scheduled Fansly mass messages and cancel anything going out this weekend."

Posting

  • "Upload https://example.com/promo.jpg to Fansly, then post it to my main wall with FYP enabled."
  • "Post this caption to Fansly, lock the media behind a $12 unlock, and give it a free preview."

Reporting

  • "Compare this month's earnings across my OnlyFans and Fansly accounts."
  • "Pull Fansly tracking link revenue stats for the last 30 days and rank the links."

The cross-platform prompt above is the reason both platforms share one server: the agent can call listAccounts and fansly_listAccounts in the same turn and reconcile them without you switching connectors.

Troubleshooting

Sending safely

Don't let an autonomous agent blind-retry a send. If fansly_sendChatMessage or fansly_sendMassMessage times out, the message may already have gone through — retrying can deliver it twice. Have the agent call fansly_listChatMessages to confirm before resending, and prefer draft-then-approve for mass messages.

The same controls that apply to OnlyFans apply here: scoped API keys, per-account permissions, and a full audit log of every call your agent makes. See Control & safety.

See also

On this page