RevenueDot

io.github.revenuedotv0.2.0更新於 Oct 5, 2026

Open-source RevenueCat alternative: 38 tools for subscriptions, customers, webhooks and revenue.

已驗證Streamable HTTP可網頁執行Developer ToolsBusiness & CommerceData & Analytics

概覽

AI 產生的概覽

讓助理管理 RevenueDot 訂閱應用程式、產品、權益、優惠、客戶、Webhook 和營收指標。

功能
RevenueDot 提供 38 個工具用於訂閱管理:建立應用程式、產品、權益、優惠和套裝方案;讀取 SDK 金鑰和商店通知設定;尋找客戶及其歷史;授予、延長、取消或退款;新增和偵錯 Webhook;檢查商店憑證;讀取營收指標和匯入狀態。另有一個免費知識端點提供六個唯讀工具,包含付費牆模式、商店規範和程式碼片段。行為相同的工具名稱與 RevenueCat 的 MCP 工具一致。
適用情境
當助理需要操作 RevenueDot(或自架)訂閱後端時使用:設定目錄物件、查看客戶和交易、處理 Webhook 或檢查指標。免費知識端點適合無需帳號的唯讀變現指引。
執行需求
託管 Streamable HTTP 端點為 mcp.revenuedot.app,使用 OAuth 登入或在 RevenueDot 儀表板建立的 Authorization Bearer 金鑰。本機方式透過 npx @revenuedot/mcp 執行,需要 Node.js 以及 REVENUEDOT_API_KEY,可選 REVENUEDOT_URL。免費知識端點無需帳號或金鑰。
安裝前請注意
寫入和破壞性工具可以建立和變更目錄物件、授予或撤銷存取、刪除客戶、取消、退款或延長訂閱、封存優惠、重試或刪除 Webhook,以及變更商店通知的接收網址。除非確實需要寫入,否則應將 API 金鑰或 OAuth 授權限制為唯讀;退款和取消會另外要求 project:support。建立 Webhook 時其簽章密鑰只會回傳一次。沒有工具接受商店金鑰或憑證,這些在儀表板中輸入。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 RevenueDot,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "mcp": {
      "type": "http",
      "url": "https://mcp.revenuedot.app/mcp"
    }
  }
}

README

[RevenueDot]

RevenueDot MCP server

Connect Claude, ChatGPT, Cursor and other AI assistants to RevenueDot, the open-source RevenueCat alternative. 38 tools to set up apps, products, entitlements and offerings, find customers, grant access and check webhooks, hosted at mcp.revenuedot.app or run locally.

Main repository · Docs · Agent skills · Start free on RevenueDot Cloud

[npm] [License: MIT] [Hosted]

Learn more: RevenueCat MCP server, official and open source: config for Claude Code, Claude, Codex, Cursor, ChatGPT and Windsurf, the tool table, the approval model, and what RevenueCat's own MCP server offers.

[Watch the 87-second demo of RevenueDot in ChatGPT]

The server has 38 tools to create apps and read their SDK keys and store notification settings, set up products, entitlements, offerings and packages, find customers and read their history, grant, extend, cancel or refund, add and debug webhooks, check store credentials, read revenue metrics and follow an import from RevenueCat. It is also the server behind the RevenueDot ChatGPT plugin and Claude connector (install: revenuedot/agent-skills). Tool names match RevenueCat's MCP tools where the tool does the same thing, so prompts written for RevenueCat work here.

Status (2026-09-30): the hosted server is live at https://mcp.revenuedot.app/mcp, in front of RevenueDot Cloud (https://api.revenuedot.app). The local server is published on npm as @revenuedot/mcp, so npx -y @revenuedot/mcp runs the latest release.

Connect

Hosted (Streamable HTTP): https://mcp.revenuedot.app/mcp. Your client signs you in with OAuth, or you send Authorization: Bearer sk_.... https://mcp.revenuedot.app/claude/mcp (the Claude connector) serves the same 38 tools. https://mcp.revenuedot.app/chatgpt/mcp (the ChatGPT plugin) serves 37: it leaves out refund-subscription, because OpenAI does not list plugins that move money.

Free knowledge server, no sign-in: https://mcp.revenuedot.app/kit/mcp serves six read-only tools (search-monetization-knowledge, list-paywall-patterns, get-paywall-pattern, get-store-guideline, get-code-snippet, list-skills) with sourced paywall patterns, App Store and Google Play rules and code snippets. It needs no account or key, never calls a RevenueDot project, and every result ends with a line saying RevenueDot maintains it. It is the free half of the RevenueDot App Monetization plugin in revenuedot/agent-skills. The data lives in src/kit/data/.

Local (stdio), for RevenueDot Cloud or your own server (REVENUEDOT_URL defaults to https://api.revenuedot.app):

bash
# Claude Codeclaude mcp add revenuedot -e REVENUEDOT_API_KEY=sk_... -e REVENUEDOT_URL=https://your-server -- npx -y @revenuedot/mcp
json
{  "mcpServers": {    "revenuedot": {      "command": "npx",      "args": ["-y", "@revenuedot/mcp"],      "env": { "REVENUEDOT_API_KEY": "sk_...", "REVENUEDOT_URL": "https://your-server" }    }  }}

Create the secret key under API keys in the RevenueDot dashboard. Give it only the permissions you want the assistant to have: a key with read scopes only cannot change anything, and a tool call that needs more gets an error naming the missing permission.

Self-hosted HTTP: npx -y @revenuedot/mcp --http --port 8788 --url https://your-server serves http://127.0.0.1:8788/mcp. Put it behind your reverse proxy with --host 0.0.0.0 --public-url https://mcp.your-domain. OAuth works against your own server too: it is the authorization server.

Auth

  1. Secret key (bearer). Authorization: Bearer sk_... is passed to the RevenueDot REST API v2, which checks the key's project and scopes.
  2. OAuth 2.1. The RevenueDot server is the authorization server (/.well-known/oauth-authorization-server, dynamic client registration, authorization code with PKCE S256). The consent screen uses your dashboard session: you pick one project and read-only or read-and-write access. The access token is a secret key limited to that project and those scopes. It is listed under API keys as OAuth: <client name> and you revoke it there. This server publishes /.well-known/oauth-protected-resource and answers 401 with WWW-Authenticate so clients find the sign-in on their own.

Tools

Every tool takes an optional project_id. Leave it out when the key or connection has one project.

ToolWhat it doesAPI v2 call
list-projectsProjects this key or connection can useGET /v2/projects
list-appsApps, one per storeGET /apps
create-appAdds a Test Store, App Store (bundle id) or Google Play (package name) app; no credentialsPOST /apps
list-public-api-keysThe app's public SDK key (appl_, goog_, test_), which ships inside the appGET /apps/{id}/public_api_keys
list-productsProducts, optionally for one appGET /products
create-productAdds a store product to an appPOST /products
list-entitlementsEntitlements with their productsGET /entitlements
create-entitlementAdds an entitlement such as proPOST /entitlements
attach-products-to-entitlementMakes products unlock an entitlementPOST /entitlements/{id}/actions/attach_products
list-offeringsOfferings with packages and productsGET /offerings
create-offeringAdds an offering, optionally currentPOST /offerings
create-packagesAdds a package to an offeringPOST /offerings/{id}/packages
attach-products-to-packagePuts products in a packagePOST /packages/{id}/actions/attach_products
get-customerCustomer, active entitlements, attributes, subscriptions, purchasesGET /customers/{id} and sub-resources
grant-customer-entitlementPromotional access until a date (creates the customer if new)POST /customers/{id}/actions/grant_entitlement
revoke-customer-entitlementEnds granted accessPOST /customers/{id}/actions/revoke_granted_entitlement
list-webhook-integrationsWebhooksGET /integrations/webhooks
create-webhook-integrationAdds a webhookPOST /integrations/webhooks
get-import-statusCustomers, subscriptions and pending Google tokens after npx revenuedot importGET /import/status
get-project-healthPer app: do the store credentials work, do notifications arrive; are webhooks deliveredGET /setup_health
get-metricsOverview cards, or one metric's daily historyGET /metrics/overview, /metrics/history
list-customersNewest first, or search by app user id, email or transaction idGET /customers
list-transactionsPurchases, renewals, trials and refundsGET /transactions
list-eventsThe event log (the events webhooks send), by customer, type or environmentGET /events
set-customer-attributesSets or deletes attributes (destructive: it overwrites)POST /customers/{id}/attributes
delete-customerDeletes a customer's data (destructive)DELETE /customers/{id}
extend-subscriptionFree days, or until a datePOST /subscriptions/{id}/actions/extend
cancel-subscriptionCancels at period end (destructive)POST /subscriptions/{id}/actions/cancel
refund-subscriptionRefunds and ends access (destructive)POST /subscriptions/{id}/actions/refund
create-test-purchaseSimulates a Test Store purchase lifecyclePOST /test_purchases
archive-offeringHides an offering (destructive)POST /offerings/{id}/actions/archive
list-webhook-deliveriesDelivery attempts, by statusGET /webhooks/{id}/deliveries
retry-webhook-deliverySends a delivery againPOST /webhooks/{id}/deliveries/{id}/retry
send-test-webhookSends a TEST eventPOST /integrations/webhooks/{id}/test
delete-webhook-integrationDeletes a webhook (destructive)DELETE /integrations/webhooks/{id}
verify-store-credentialsCalls Apple or Google with the saved key and reports whether it worksPOST /apps/{id}/actions/verify_credentials
get-app-store-settingsNotification URL for App Store Connect or Pub/Sub, forward URL, last notification and forward; credentials only as configured or notGET /apps/{id}/store_settings
update-appRenames an app, sets or clears notification_forward_url, sets track_new_purchases; no credentials (destructive: it changes where store notifications go)POST /apps/{id}

No tool accepts a key, password or credential: store keys and webhook headers are entered in the dashboard. Creating a webhook returns its signing secret once.

OAuth scopes

ScopeLets the assistantTools
project:readRead everythingthe 17 read-only tools
project:writeCreate and update apps, change the catalog, grant and revoke access, manage webhooks, delete customers17 tools (12 writes, 5 destructive)
project:supportCancel, refund and extend subscriptions, make Test Store purchases. Asked for separately, only when a tool needs itextend-subscription, cancel-subscription, refund-subscription, create-test-purchase

A tool that needs more than the connection has returns an error with _meta["mcp/www_authenticate"], which ChatGPT and Claude use to ask you for the missing access. Every tool descriptor also carries _meta.securitySchemes.

scripts/verify-live.mjs checks a deployed server against the directories' rules (REVENUEDOT_MCP_TOKEN=sk_... node scripts/verify-live.mjs).

Entitlements can be named by id or lookup key. expires_at takes milliseconds, an ISO date or a duration such as 30d.

Use the tools without MCP

The tool definitions and executors depend only on zod and a small API client, so an in-app agent can reuse them:

ts
import { createClient } from "@revenuedot/mcp";import { tools, runTool } from "@revenuedot/mcp/tools";
const client = createClient({ baseUrl: "https://api.revenuedot.app", apiKey: process.env.REVENUEDOT_API_KEY! });await runTool(client, "grant-customer-entitlement", { customer_id: "user_42", entitlement_id: "pro", expires_at: "30d" });

Use with your coding agent

Coding agents can read this repository on demand, so they use the right package, imports and API:

Develop

bash
pnpm installpnpm test        # starts a real RevenueDot server from ../revenuedot (or REVENUEDOT_REPO) on in-memory Postgrespnpm typecheckpnpm dev         # HTTP on :8788 against REVENUEDOT_URLpnpm run deploy  # Cloudflare Worker with the cf CLI (cloudflare.config.ts, Circo account); needs Node 22.18+

Use Node 24. CI (.github/workflows/ci.yml) runs typecheck, build and tests on every push and pull request. On main it then deploys mcp.revenuedot.app with the production environment's secrets and checks it live with scripts/verify-live.mjs: the protected resource metadata answers and POST /mcp without a token answers 401. Pushing to main is a production deploy.

RevenueDot is not affiliated with RevenueCat, Inc.

來源:README.md,提交 6eb9529

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v0.2.0最新Oct 5, 2026