BetterFans Link: the OnlyFans APIBetterFans Link

Client setup

Connect Claude Code, Claude, ChatGPT, Cursor, VS Code, Windsurf, Codex or Gemini CLI to the BetterFans Link MCP server.

Every client connects to the same URL. The Developers, then MCP page of the dashboard shows the same steps with the URL filled in.

https://mcp.betterfans.link/mcp

Each client below can sign in with OAuth, and most can send an API key instead. Signing in is simpler on your own machine. Use a key for agents that run unattended, or to limit the agent to some accounts with an allow-list. The key examples read it from a BFL_KEY environment variable, so it never sits in the config file. See signing in.

Start in test mode. Pick Test on the consent page, or use a bfl_test_ key.

Claude Code

claude mcp add --transport http betterfans-link https://mcp.betterfans.link/mcp

With OAuth, start Claude Code, run /mcp, pick betterfans-link and sign in. Add --scope user to the command to use the server in every project, not only the current one.

Claude.ai and Claude Desktop

  1. Open Settings, then Connectors.
  2. Choose Add custom connector. Name it BetterFans Link and paste the server URL.
  3. Choose Connect and approve access on the page that opens.
  4. In a chat, turn the connector on from the tools menu.

Connectors added on Claude.ai also show up in Claude Desktop and the mobile apps. On Team and Enterprise plans, an organization owner may have to add the connector before members can connect. Claude connectors sign in with OAuth only.

ChatGPT

  1. Open Settings, then Apps, then Advanced settings, and turn on developer mode.
  2. Create an app. Name it BetterFans Link, paste the server URL and pick OAuth for authentication.
  3. Approve access on the page that opens.
  4. In a chat, turn the app on from the tools menu.

Write tools are marked as not read only, so ChatGPT may ask you to confirm before it calls one. That confirmation only lets it create the pending action. A person still approves the write in BetterFans Link.

Cursor

Add the server to ~/.cursor/mcp.json, or to .cursor/mcp.json in one project.

{
  "mcpServers": {
    "betterfans-link": {
      "url": "https://mcp.betterfans.link/mcp"
    }
  }
}

With OAuth, sign in when Cursor asks.

VS Code

Add the server to .vscode/mcp.json in a project.

{
  "servers": {
    "betterfans-link": {
      "type": "http",
      "url": "https://mcp.betterfans.link/mcp"
    }
  }
}

To add it for every project instead, run this in a terminal:

code --add-mcp '{"name":"betterfans-link","type":"http","url":"https://mcp.betterfans.link/mcp"}'

Start the server from the file or the command palette. With OAuth, sign in when VS Code asks. With a key, VS Code asks for it once and stores it securely.

Windsurf

Add the server to ~/.codeium/windsurf/mcp_config.json.

{
  "mcpServers": {
    "betterfans-link": {
      "serverUrl": "https://mcp.betterfans.link/mcp"
    }
  }
}

Refresh the MCP servers in Cascade. With OAuth, sign in when Windsurf asks.

Codex

Add the server to ~/.codex/config.toml.

[mcp_servers.betterfans-link]
url = "https://mcp.betterfans.link/mcp"

With OAuth, sign in from a terminal:

codex mcp login betterfans-link

Gemini CLI

Add the server to ~/.gemini/settings.json, or to .gemini/settings.json in one project.

{
  "mcpServers": {
    "betterfans-link": {
      "httpUrl": "https://mcp.betterfans.link/mcp"
    }
  }
}

With OAuth, start Gemini CLI and run /mcp auth betterfans-link.

Other clients

Any client that supports Streamable HTTP works. Give it the server URL, and either let it sign in with OAuth or have it send Authorization: Bearer with your key.

A client that only starts local servers can reach BetterFans Link through the mcp-remote bridge, which handles OAuth for it:

{
  "mcpServers": {
    "betterfans-link": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.betterfans.link/mcp"]
    }
  }
}

Check the connection

Ask the agent "Which BetterFans Link accounts can you see?" It should call list_accounts and name your accounts, or the sandbox creators in test mode.

To look at the raw tools and responses, run the MCP Inspector with npx @modelcontextprotocol/inspector, choose Streamable HTTP and enter the server URL.

If the client cannot connect:

What you seeWhat to do
The sign-in page never opensRemove the server and add it again, then start the sign-in from the client's MCP menu.
401 with a keyCheck that the key starts with bfl_live_ or bfl_test_, has not been revoked, and that the variable is set where the client runs. Dashboard keys do not work here.
No accounts listedThe key's allow-list may leave them out, or the key is in the other mode. Test keys only see the sandbox creators.
Write tools fail with missing_scopeGive the key the write scope, or connect again and approve write access.

On this page