BillDog

Official registry Marketing and sales

Set up and inspect app paywalls, subscriptions, offerings and analytics from your AI agent.

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

Remote (streamable-http)
Claude Code
claude mcp add --transport http billdog 'https://api.billdog.io/mcp' --header 'Authorization: <Optional. Bearer bd_mcp_… key for clients without OAuth. Omit it to sign in with BillDog in the browser.>'
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "billdog": {
            "type": "http",
            "url": "https://api.billdog.io/mcp",
            "headers": {
                "Authorization": "<Optional. Bearer bd_mcp_… key for clients without OAuth. Omit it to sign in with BillDog in the browser.>"
            }
        }
    }
}

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. 🐶 BillDog MCP Server
  2. Install
  3. Sign in with BillDog
  4. What you can ask
  5. Tools
  6. Permissions & safety
  7. Claude Code plugin
  8. Troubleshooting
  9. Repository layout
  10. Links

🐶 BillDog MCP Server

Set up and inspect paywalls, subscriptions and analytics for your app — from your AI coding agent.

https://api.billdog.io/mcp

Install · What you can ask · Tools · Permissions · Troubleshooting


BillDog is paywalls, in-app purchases, subscriptions, analytics, messaging, surveys and journeys behind one SDK for iOS, Android, React Native, Flutter, Expo and the web. This repository is how AI agents connect to it:

  • A hosted MCP server. 55 tools: diagnose an integration, build the product catalog, design and publish paywalls, and query revenue and retention.
  • A Claude Code plugin. The server plus two skills: wiring the SDK into an app, and migrating from RevenueCat, Superwall, Adapty and others.

Nothing runs on your machine. The server is hosted by BillDog and every client connects to the same URL.

Install

You need a free BillDog account at billdog.io with at least one project.

ClientHow
Claude Code (plugin, recommended)/plugin marketplace add billdogai/billdog-mcp, then /plugin install billdog@billdog
Claude Code (server only)claude mcp add --transport http billdog https://api.billdog.io/mcp
Claude.ai / Claude DesktopSettings → Connectors → Add custom connector → paste https://api.billdog.io/mcp
CursorSettings → MCP → Add server, or the config below
VS Code (Copilot)Command palette → MCP: Add Server → HTTP → paste the URL
AntigravityAdd the server to mcp_config.json using the config below
Windsurf / othersAny client that supports remote Streamable HTTP servers

The first time a tool runs, your browser opens Sign in with BillDog. That's the whole setup.

Config file snippets

Cursor (~/.cursor/mcp.json) and most clients:

{
  "mcpServers": {
    "billdog": { "url": "https://api.billdog.io/mcp" }
  }
}

VS Code (.vscode/mcp.json):

{
  "servers": {
    "billdog": { "type": "http", "url": "https://api.billdog.io/mcp" }
  }
}

Antigravity (mcp_config.json, which uses serverUrl rather than url):

{
  "mcpServers": {
    "billdog": { "serverUrl": "https://api.billdog.io/mcp" }
  }
}

Clients that only launch local (stdio) servers, bridged with mcp-remote:

{
  "mcpServers": {
    "billdog": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.billdog.io/mcp"]
    }
  }
}

Sign in with BillDog

The server uses OAuth 2.1 with PKCE and dynamic client registration, so your client registers and authenticates itself:

  1. Your client discovers the authorization server from the server's 401 (RFC 9728).
  2. It registers itself and opens BillDog in your browser.
  3. You sign in, pick one project, and choose what the agent may do.
  4. The agent gets a short-lived token for that project only. It refreshes on its own, and you can disconnect it at any time.
Using a key instead

For scripts, CI, or clients without OAuth, create a key at Dashboard → AI Assistant (MCP) Keys. MCP keys start with bd_mcp_ and are read-only.

claude mcp add --transport http billdog https://api.billdog.io/mcp \
  --header "Authorization: Bearer bd_mcp_YOUR_KEY"

[!IMPORTANT] bd_public_… and bd_secret_… keys are SDK keys for your app and won't work here. The server tells you so if you paste one.

What you can ask

"Why isn't my paywall showing on iOS?" → get_setup_status and resolve_placement_preview show exactly what's missing, with dashboard links.

"Set up monthly and annual Pro plans with a 7-day trial and an onboarding placement." → apply_setup_plan creates the products, entitlement, offering and placement in one step. Everything starts inactive.

"Design a dark paywall for the annual plan from a template, show me a preview, then publish it." → list_templates → create_paywall_from_template → update_paywall → preview_paywall → publish_paywall

"What was MRR last month and which paywall converts best?" → run_analytics_query

"Migrate this app from RevenueCat." → the billdog-migration skill (Claude Code plugin) rewrites the call sites and recreates the catalog.

Tools

27 read · 28 write · publish means it changes what live users see and needs the publish permission. Machine-readable list: tools.json.

Setup & diagnostics
ToolAccessWhat it does
get_setup_statusreadInspect the setup status of BillDog for this project.
get_projectreadGet project metadata including bundle ID, package name, and registered domains.
get_recent_sdk_activityreadIs the app sending data? For the last window_hours (default 24): events by name, purchases and session replays, split into sandbox and production, with has_traffic for each.
resolve_placement_previewreadDry-run preview of what a client SDK receives when resolving a placement.
Analytics
ToolAccessWhat it does
run_analytics_queryreadRun a single analytics report.
discover_schemareadReturn the full BillDog analytics schema — every (source, metric) pairing the project supports, with a 1-line description of what each returns.
list_event_namesreadList the event names this project received in the last days days (default 30), most frequent first, with each one's count and unique users.
list_cohortsreadList saved cohorts for this project.
list_saved_viewsreadList saved analytics views for this project, each with what it asks (source, metric, dims, filters, date range, segment).
get_saved_view_resultsreadRe-run a saved view and return its results.
Catalog: products, entitlements, offerings, placements
ToolAccessWhat it does
list_productsreadList all products configured in this project's catalog, including their identifiers, product types, subscription durations, and store mapping IDs.
list_entitlementsreadList all entitlements in this project and the product IDs associated with each entitlement.
list_offeringsreadList all offerings in this project, showing their packages, attached products, and default/current status.
list_placementsreadList all placements in this project, including access gating settings and linked offerings.
apply_setup_planwrite · publishDeclaratively evaluate and execute a complete monetization catalog setup (products, entitlements, offerings, packages, placements).
create_productwriteCreate a store product (subscription or in-app purchase) in the project catalog.
update_productwriteUpdate metadata, store IDs, or display pricing for an existing product in this project.
create_entitlementwriteCreate a new entitlement in the catalog and optionally link it to products.
update_entitlementwriteUpdate display name, description, or linked products for an existing entitlement (product_ids replaces the list).
set_entitlement_productswriteSet the explicit list of product IDs granting an entitlement (replaces the list; only the links that change are touched).
create_offeringwriteCreate a new offering with packages.
manage_offering_packageswriteAdd or remove packages within an existing offering.
set_current_offeringwrite · publishMake an offering the project current offering (the others stop being current, atomically).
create_placementwriteCreate a new placement in the project.
link_placementwrite · publishLink one or more offerings to a placement with priority order (replaces its links).
Paywalls
ToolAccessWhat it does
list_paywallsreadList all paywalls in this project, including active state, wall type, and publication timestamps.
get_paywallreadGet a paywall by UUID or identifier: status, layouts, offering, colours and copy_outline — every text and button with its component id, for update_paywall patch.copy. include_config returns the full draft and published configs (large).
list_templatesreadList available paywall and onboarding templates from the BillDog template catalog.
create_paywall_from_templatewriteCreate a new paywall in the project from an existing template.
design_paywallwriteDesign a paywall and save it as an inactive draft.
update_paywallwriteApply constrained patch updates to a paywall's draft (copy, title, subtitle, CTA text, brand colors, offering binding).
preview_paywallreadEvaluate paywall publish gate (validating components, bindings, offerings) and generate a secure short-lived preview link and token.
publish_paywallwrite · publishPublish a draft paywall to make it active for SDK delivery.
unpublish_paywallwrite · publishDeactivate an active paywall.
Experiments & feature flags
ToolAccessWhat it does
list_experimentsreadList the project's experiments with their status, what devices are served now (variants, the shipped winner, or the control only), and each variant's paywall and traffic share.
create_experimentwriteCreate a paywall A/B experiment as a DRAFT: each variant shows a different paywall at the same place in the app.
start_experimentwrite · publishStart (or resume) an experiment: users who reach its paywall are split between the variants.
stop_experimentwrite · publishStop an experiment: pause or end it (everyone sees the control paywall), or end it and ship the winning variant to everyone.
get_experiment_resultsreadPer-variant results of an experiment for its whole run: users, conversions, conversion rate, revenue per user, lift vs control, p-value and significance (p < 0.05 with 100+ users per arm), plus a verdict: winner, loser, keep_running or no_data.
list_feature_flagsreadList the project's feature flags: key, on/off, rollout percentage, variants, and whether it has release conditions (audience rules, edited in the dashboard).
create_feature_flagwriteCreate a feature flag, OFF: every user gets false until update_feature_flag turns it on.
update_feature_flagwrite · publishTurn a feature flag on (start) or off (stop), change its rollout percentage or variants, or rename it.
get_feature_flag_resultsreadHow many users and evaluations got each value of a flag over the last N days (default 30, max 90), from the $feature_flag_called events the SDKs send.
Projects & SDK keys
ToolAccessWhat it does
list_projectsreadList all BillDog projects accessible to the authenticated user, identifying the current active project, bundle ID, and platform.
create_projectwriteCreate a new BillDog project for the authenticated user with a specified name, bundle ID, and platform.
create_public_sdk_keywriteGenerate a client-safe public SDK key (bd_public_live_... or bd_public_test_...) for mobile and web apps.
use_projectwriteSwitch this connection to another project it may use: the project chosen when it was connected, or one it created with create_project.
Engagement: surveys, campaigns, journeys, messages
ToolAccessWhat it does
list_surveysreadList all multi-page surveys and micro-survey walls configured for this project.
create_surveywriteSave a survey as a DRAFT with its questions (activate it in the dashboard).
list_campaignsreadList all marketing and engagement campaigns configured for this project.
create_campaignwriteSave a campaign as a DRAFT.
list_journeysreadList all customer onboarding and engagement journeys with their sequence of steps.
create_journeywriteSave a linear journey as a DRAFT (activate it in the dashboard; branches are built on its canvas).
list_message_templatesreadList the project's message templates (push, in-app, email, SMS) with their title and body, as the dashboard Templates library shows them.
create_message_templatewriteSave a reusable push or in-app message template (the same kind the dashboard Templates library shows).

Permissions & safety

GuaranteeHow
One project per connectionThe project is fixed by your sign-in or key. Project ids in tool arguments are ignored, so the agent can't read another project.
You choose the accessOn the consent screen: read only, read + create/edit, or read + create/edit + publish. Keys are always read-only.
Nothing goes live by accidentNew products, offerings, placements and paywalls start inactive or as drafts. Publishing, setting the current offering and linking a placement with live traffic need the publish permission.
No customer contact dataEmail, phone, display name and custom attributes are withheld from every response, and the response says so.
AuditedEvery write is recorded in the project's audit log, attributed to the agent and the user who connected it.
RevocableDisconnect an agent, or revoke a key, from the dashboard at any time.

Claude Code plugin

/plugin install billdog@billdog gives you the server plus two skills:

  • billdog-integration: adds the SDK to an app (Web, React Native, Expo, iOS, Android) or diagnoses one that's already wired. It covers the identifier traps (@billdog.io, not @billdog; io.billdog, not com.billdog), configuration, placements and a verification checklist.
  • billdog-migration: moves an app off RevenueCat, Superwall, Adapty, Mixpanel, Amplitude, OneSignal, Braze, Typeform or SurveyMonkey. It covers both the code and the data.

Troubleshooting

MessageFix
"This is a BillDog SDK key…"You pasted a bd_public_/bd_secret_ key. Use Sign in with BillDog, or create a bd_mcp_ key.
"This key has MCP access turned off"Turn MCP access on for the key on the MCP keys page.
…lacks the mcp:write scopeKeys are read-only. Connect with Sign in with BillDog and allow Create and edit configuration (or Publish and go live for mcp:publish).
Browser didn't openRun /mcp in Claude Code and choose Authenticate, or reconnect the connector.
"Unknown or revoked client_id"Remove the BillDog server from your client and add it again.

Repository layout

One plugin at the repository root, in two formats so every client can read it:

plugin.json                       Agent Plugins / Open Plugins manifest (Cursor, cursor.directory, other clients)
mcp.json                          Agent Plugins MCP config (streamable-http)
skills/                           billdog-integration, billdog-migration (shared by both formats)
.claude-plugin/marketplace.json   Claude Code marketplace (this repo)
.claude-plugin/plugin.json        Claude Code plugin manifest
.mcp.json                         Claude Code MCP config
server.json                       official MCP Registry entry
smithery.yaml                     Smithery (stdio bridge via mcp-remote)
glama.json                        Glama ownership claim
tools.json                        all 55 tools, grouped, with access level
assets/icon.png                   listing icon

Frequently asked questions

What is BillDog?

Set up and inspect app paywalls, subscriptions, offerings and analytics from your AI agent.

How do I install BillDog?

It runs as a remote server. In Claude Code: claude mcp add --transport http billdog 'https://api.billdog.io/mcp' --header 'Authorization: <Optional. Bearer bd_mcp_… key for clients without OAuth. Omit it to sign in with BillDog in the browser.>'. For other clients, paste the JSON configuration from this page into their MCP settings.

Does BillDog need an API key?

Yes. It expects Authorization, which you set in its configuration.

Is BillDog open source?

Its code is public on GitHub, but the repository does not declare a standard license.

Who maintains BillDog?

It is published by billdogai. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.