BillDog

io.github.billdogaiPublished by GitHub account billdogaiv1.1.0Updated Oct 30, 2026

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

VerifiedStreamable HTTPWeb executableDeveloper ToolsData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Hosted BillDog MCP server that lets an AI agent set up and inspect app paywalls, subscriptions, offerings, experiments and analytics.

What you can do
  • Inspect setup status, project metadata, recent SDK activity and placement resolution
  • Run analytics reports, discover the analytics schema, list event names, cohorts and saved views
  • Read and write the catalog: products, entitlements, offerings, packages and placements
  • Create paywalls from templates, edit drafts, preview and publish or unpublish them
  • Manage A/B experiments and feature flags, including results and rollout changes
  • List and create projects, public SDK keys, surveys, campaigns, journeys and message templates
When to use it
Useful when an app already uses or is adopting BillDog for in-app purchases and paywalls, and you want an agent to diagnose why a paywall is not showing, build the product catalog, draft and publish paywalls, or query revenue and retention.
Requirements
A remote Streamable HTTP endpoint; nothing runs locally. A free BillDog account with at least one project. OAuth sign-in in the browser on first tool use, or an Authorization header with a bd_mcp_ key for clients without OAuth. Clients that only launch local servers need a bridge such as mcp-remote.
Before you install
Write and publish tools change live configuration: publishing paywalls, setting the current offering, linking placements and starting experiments affect what real users see. Access scope is chosen at consent (read-only, edit, or publish); bd_mcp_ keys are read-only. The Authorization header carries a secret key. Every write is audit-logged and attributed to the agent and user.

Installation

In SourceWeft

  1. Open BillDog in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.billdogai%2Fbilldog-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

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

README

🐶 BillDog MCP Server

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

[MCP] [Tools] [Auth] [Docs]

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:

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

VS Code (.vscode/mcp.json):

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

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

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

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

json
{  "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.

bash
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 configserver.json                       official MCP Registry entrysmithery.yaml                     Smithery (stdio bridge via mcp-remote)glama.json                        Glama ownership claimtools.json                        all 55 tools, grouped, with access levelassets/icon.png                   listing icon

Links

Source: README.md at commit 0b47e14

Tools

0
This server asks you to sign in, so SourceWeft could not read its tools without an account and has not indexed them. What a connected account sees can depend on that account and its permissions.

Version history

1
  1. v1.1.0LatestOct 15, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.