Skip to main content
Glama
Paydirt MCP
by Paydirt-AI

Paydirt MCP

CI npm License: MIT

MCP Registry name: io.github.Paydirt-AI/paydirt-mcp

The agent-native installer and control plane for Paydirt, an iOS SDK for Suggest a Feature, trial cancellation, and subscription cancellation.

Paydirt MCP lets a coding agent add Paydirt to an iOS app from chat: propose the forms, create them, write the SDK key into the project, build and launch the app with a Debug setup check open, route responses to Slack and the agent, and read raw feedback. Paydirt supports native StoreKit, RevenueCat, Superwall, app-owned billing, and apps without subscriptions.

Install

Pick one. The hosted server is the golden path: sign in with Google once and never paste a key.

Claude Code plugin (bundles the install skill):

/plugin marketplace add Paydirt-AI/paydirt-mcp
/plugin install paydirt@paydirt-plugins

Claude Code, hosted server:

claude mcp add --transport http paydirt https://mcp.paydirt.ai/mcp

Codex, hosted server:

codex mcp add paydirt --url https://mcp.paydirt.ai/mcp

Fallback, local stdio (any MCP host; Node.js 18 or newer):

npx -y paydirt-mcp
{
  "mcpServers": {
    "paydirt": {
      "command": "npx",
      "args": ["-y", "paydirt-mcp"]
    }
  }
}

Current Codex desktop builds may need a restart before a newly added MCP server appears. That is a one-time tool-discovery refresh, not a Paydirt requirement.

Related MCP server: asc-mcp

First run

Say:

Add Paydirt to this app. Set up cancellation feedback and Suggest a Feature.

  1. Connect. The agent host opens a browser tab: Continue with Google, then Allow. The tab says to return to your agent. No keys.

  2. One proposal. The agent inspects the project and sends one message: Subscription Cancellation, Trial Cancellation, and Suggest a Feature, citing the file where your real cancel flow lives, with responses going to Slack and here in the agent. Reply "yes", or choose Slack only, here only, or drop a form. Without subscriptions, it says cancellation feedback has nothing to trigger it yet and recommends Suggest a Feature only. Nothing is created until you confirm.

  3. Live demo. The agent creates the app and forms, saves your destination, and, if you chose Slack, shares a Slack link while it keeps working. It adds the SDK, writes the key into your project, adds a Debug setup check that opens on first launch, and builds and launches the app.

  4. Slack routing. After Slack's Allow screen, the agent lists your channels and proposes routing in chat, for example cancellations to one channel and feature ideas to another. It saves the routing after you confirm.

  5. First response. Submit one test answer by voice or text. The agent is already waiting with paydirt_wait_for_response and announces it when it lands.

Existing feedback screens and purchase flows are preserved. A daily read-only brief is offered when responses come to the coding agent.

With the local stdio server, paydirt_begin_setup returns an authorization_url that only signs you in, and paydirt_finish_setup returns the same installation contract. The MCP process never opens a browser, sleeps, or polls; the only bounded wait is paydirt_wait_for_response (max 90 seconds). paydirt_setup remains as a compatibility alias.

Local credentials are saved at ~/.paydirt/credentials.json with owner-only permissions. They are not written to an app repository or sent anywhere except api.paydirt.ai. For ephemeral environments, set PAYDIRT_AUTH_TOKEN instead.

Daily feedback brief

paydirt_get_feedback_digest returns a read-only period summary designed for scheduled tasks: total completed responses, Suggest a Feature, Trial Cancellation, Subscription Cancellation, other feedback, the change from the preceding equal period, and concise highlights. A quiet day explicitly reports zero. Digests never create coding tasks or modify an app automatically.

Natural agent workflows

Add a form at an in-app action

Ask:

Add a feedback form titled “Export Feedback” after a successful export and send it to #product-feedback.

The agent should use paydirt_add_feedback_form. It reuses an existing custom form with the same normalized title, preserves the requested placement, resolves Slack when possible, and returns the exact Swift presentation call. A remote form is not considered installed until the agent edits and builds the host app.

Supported triggers are user taps, successful in-app actions, screen appearance, and app-owned custom conditions.

Install cancellation feedback

The agent inspects the app before setup and selects the existing subscription source of truth:

  • Native StoreKit uses Paydirt's built-in StoreKit integration.

  • RevenueCat uses installer-managed compatibility source and the familiar Paydirt.enableRevenueCatIntegration(...) call, avoiding duplicate package dependencies.

  • Native StoreKit covers ordinary App Store subscriptions, including apps where Superwall is only the paywall.

  • App-owned billing emits Paydirt's provider-independent cancellation event.

  • Apps without subscriptions can install manual feedback alone.

The agent must preserve all existing host-app feedback forms, buttons, screens, handlers, destinations, and side effects. It may only add or change regular feedback when the user explicitly requests that exact placement. If a requested cancellation bridge is blocked, the agent reports the narrow provider blocker, preserves the existing app behavior, and completes every unaffected requested form.

An older RevenueCat version is not a blocker. The agent keeps the installed version and adapts the installer-managed integration source to the customer-info or purchaser-info API already compiling in the app. Newer optional metadata may be omitted, or Paydirt can be called from the app's existing confirmed RevenueCat cancellation path.

Deliver to Slack and coding agents

Slack receives one message after a conversation finishes, containing the exact raw questions and answers. An optional AI summary may follow the raw conversation. Coding-agent tools expose responses read-only; Paydirt does not automatically take action on feedback.

Tools

Tool

Purpose

paydirt_begin_setup

Start non-blocking browser authorization

paydirt_finish_setup

Check authorization once and return the installation contract

paydirt_setup

Backward-compatible begin/finish alias

paydirt_add_feedback_form

Create/reuse a named form and return its host-app placement contract

paydirt_list_apps, paydirt_create_app, paydirt_get_app, paydirt_update_app

Manage apps

paydirt_list_forms, paydirt_create_form, paydirt_get_form, paydirt_update_form, paydirt_toggle_form, paydirt_delete_form

Manage forms

paydirt_get_responses

Read raw conversations using a stable cursor

paydirt_get_summary, paydirt_ask

Read optional AI analysis

paydirt_set_delivery

Save where responses go: Slack, the coding agent, or both

paydirt_connect_slack, paydirt_slack_status, paydirt_list_slack_channels, paydirt_set_slack_channels

Connect Slack and route cancellations and feature ideas

paydirt_set_form_channel

Route one custom form to its own channel

paydirt_wait_for_response

Wait up to 90 seconds for the first test response

paydirt_health_check

Verify API connectivity and credentials

Development

npm ci
npm test
npm pack --dry-run

The repository intentionally contains only the public MCP client. Paydirt's API, dashboard, infrastructure, and operational configuration remain private.

Official MCP Registry metadata lives at .mcp/server.json. It lists the npm stdio package and the hosted Streamable HTTP endpoint at https://mcp.paydirt.ai/mcp.

See SUPPORT.md for support, SECURITY.md before reporting a vulnerability, and CONTRIBUTING.md before opening a pull request.

License

MIT

Hosted transport

The same package also includes the authenticated Streamable HTTP server at https://mcp.paydirt.ai/mcp. See HOSTED.md for deployment, OAuth configuration, session isolation, and release verification. Discovery metadata is at https://mcp.paydirt.ai/.well-known/oauth-protected-resource/mcp. A reachable health or metadata endpoint alone does not verify authenticated tool use.

Available Tools

23 tools
paydirt_add_feedback_formA
DestructiveIdempotent

Use this when the user asks for a named feedback form at a screen, button, lifecycle moment, or in-app action. Creates or reuses a normalized-title match, preserves the placement verbatim, optionally resolves Slack, and returns exact Swift plus mandatory edit/build/test actions. Remote form creation alone is not completion.

Inputs: title (required), app_id (required), trigger (required), placement (required), +3 more. Returns: ios, form, slack, success, +4 more

paydirt_askA
Read-onlyIdempotent

Use this when the user asks a natural-language analytical question about their Paydirt feedback, such as pricing themes or feature requests. Reads actual responses and returns analysis without taking action.

Inputs: app_id (required), question (required), days, form_id. Returns: days, answer, response_count

paydirt_begin_setupA

Use this when installing voice cancellation feedback or Suggest a Feature for an iOS app with RevenueCat or StoreKit, and connect Slack during browser authorization. For website-started setup, pass its app_id to reuse the prepared app and delivery settings. Inspect the host first. Without form_plan_confirmed, returns the concise cancellation/Suggest a Feature confirmation and does not start authorization. After confirmation, pass the selected use_cases and placement to receive authorization_url and finish_arguments immediately.

Inputs: app_id, app_name, bundle_id, use_cases, +6 more. Returns: status, message, success

paydirt_connect_slackA
Read-onlyIdempotent

Use this when the user asks to connect Slack or repair Slack delivery after onboarding. Returns the Slack OAuth URL for the app owner’s workspace. Browser onboarding lets the owner select channels; preserve those choices and verify every requested form assignment. Only completed Q&A is sent.

Inputs: app_id (required). Returns: auth_url

paydirt_create_appA

Use this when the user explicitly needs a separate Paydirt app and setup cannot reuse or create it. Creates a new app; list existing apps first when duplication is possible.

Inputs: name (required), bundle_id, app_description. Returns: id, name, api_key, bundle_id

paydirt_create_formA

Use this when creating a low-level remote form without a host-app placement request. First confirm a matching form does not exist. Map subscription cancellation to cancellation, trial cancellation to trial_expiration, and regular feedback to custom; then wire the returned ID into iOS and assign Slack. Prefer paydirt_add_feedback_form for named screen or action placement.

Inputs: name (required), type (required), app_id (required), prompt (required), +1 more. Returns: id, name, type, app_id, +3 more

paydirt_delete_formA
DestructiveIdempotent

Use this when the user explicitly asks to permanently delete a specific Paydirt form. This is destructive and should only be called after inspecting the form when its identity is uncertain.

Inputs: form_id (required). Returns: success

paydirt_finish_setupA
Idempotent

Use this when the user has opened the authorization URL returned by paydirt_begin_setup. Checks one setup session and returns immediately. If pending, do not loop or sleep. When ready, securely saves credentials and returns the host-app build, visible verification, and post-verification delivery-choice contract.

Inputs: session_id (required), app_id, app_name, bundle_id, +7 more. Returns: status, message, success

paydirt_get_appA
Read-onlyIdempotent

Use this when the agent needs the current identity, bundle ID, SDK key, or configuration for one known Paydirt app. Does not modify the app.

Inputs: app_id (required). Returns: id, name, api_key, bundle_id

paydirt_get_feedback_digestA
Read-onlyIdempotent

Use this when the user or a scheduled task needs a read-only daily or periodic Paydirt brief. Returns completed-response totals by feedback type, comparison with the previous equal period, and concise highlights. Never turn feedback into code changes or tasks automatically.

Inputs: app_id (required), hours. Returns: items, app_id, counts, period, +3 more

paydirt_get_formA
Read-onlyIdempotent

Use this when the agent needs the current prompt, type, enabled state, or Slack assignment for one known form. Does not modify the form.

Inputs: form_id (required). Returns: form

paydirt_get_responsesA
Read-onlyIdempotent

Use this when the user or coding agent needs raw feedback conversations, exact Q/A turns, input type, subscription metadata, or a read-only inbox cursor. Defaults to completed conversations. Use since plus the newest updated_at for incremental reads; never take action from responses automatically.

Inputs: app_id (required), limit, since, status, +1 more.

paydirt_get_summaryA
Read-onlyIdempotent

Use this when the user asks for an aggregate AI summary of recent Paydirt responses. Raw questions and answers remain the source of truth; this read-only summary is supplementary.

Inputs: app_id (required), days, form_id. Returns: period, summary, top_reasons, response_count

paydirt_health_checkA
Read-onlyIdempotent

Use this when diagnosing whether the Paydirt API is reachable and stored authentication is valid. Performs a read-only connectivity check.

Inputs: no named parameters. Returns: status, authenticated

paydirt_list_appsA
Read-onlyIdempotent

Use this when the user asks which Paydirt apps exist or when an agent must resolve an app ID after setup. Lists all apps for the authenticated Paydirt account without changing them.

Inputs: no named parameters.

paydirt_list_formsA
Read-onlyIdempotent

Use this when the user asks which forms exist or the agent needs to resolve or deduplicate forms for a Paydirt app. Does not modify forms.

Inputs: app_id (required).

paydirt_list_slack_channelsA
Read-onlyIdempotent

Use this when Slack is connected and the agent must resolve a requested channel name to its channel ID. Lists available channels without changing assignments.

Inputs: app_id (required). Returns: channels, team_name

paydirt_set_form_channelA
DestructiveIdempotent

Use this when a form must deliver completed conversations to a specific Slack channel ID. Replaces that form’s current channel assignment and should be verified afterward.

Inputs: app_id (required), form_id (required), channel_id (required). Returns: form

paydirt_setupA

Use this when an older client expects the single setup tool. Without session_id it starts setup and immediately returns authorization_url plus finish arguments; with session_id it checks once and returns pending, expired, or the complete installation contract. It never opens a browser or blocks. New agents should prefer paydirt_begin_setup and paydirt_finish_setup.

Inputs: app_id, app_name, bundle_id, use_cases, +7 more. Returns: status, message, success

paydirt_slack_statusA
Read-onlyIdempotent

Use this when the developer selected Slack or combined delivery and completed authorization. Reports the Paydirt feedback channel and whether every installed form is assigned. Do not call it for agent-only delivery.

Inputs: app_id (required). Returns: connected, team_name

paydirt_toggle_formA
DestructiveIdempotent

Use this when the user asks to enable or disable an existing form remotely. Disabled forms are not shown by the SDK; calling again with the opposite value reverses the change.

Inputs: enabled (required), form_id (required). Returns: form

paydirt_update_appA
DestructiveIdempotent

Use this when the user asks to change an existing Paydirt app’s identity, bundle ID, description, or AI context. Only supplied fields are updated.

Inputs: app_id (required), name, bundle_id, system_prompt, +2 more. Returns: id, name, api_key, bundle_id

paydirt_update_formA
DestructiveIdempotent

Use this when the user asks to change an existing form’s name, initial question, or AI follow-up guidance. Only supplied fields are updated.

Inputs: form_id (required), name, prompt, custom_system_prompt. Returns: form

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 23 tools

    Disambiguation3/5

    Most tools have clear roles, but there is meaningful overlap among setup/legacy setup, create_form/add_feedback_form, and the several read/analytics tools (get_responses, get_feedback_digest, ask, get_summary). Agents may need to read descriptions carefully to pick the right one.

    Naming Consistency4/5

    Tool names follow a mostly consistent paydirt_verb_noun pattern and all use snake_case. Minor exceptions like paydirt_ask and paydirt_slack_status break the strict verb-noun pattern but do not create significant confusion.

    Tool Count4/5

    23 tools is on the higher end but still reasonable for a domain covering apps, forms, responses, Slack integration, setup, and analytics. A few redundant legacy compatibility tools inflate the count slightly.

    Completeness4/5

    The tool set covers app and form CRUD, response retrieval, Slack channel management, setup flow, and summary/analytics. Missing operations like app deletion are not explicitly present, but the provided surface is fairly complete for the described use cases.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to build, test, run, and manage Apple platform projects (iOS, macOS, tvOS, watchOS, visionOS) directly through Xcode. Provides comprehensive control over Xcode projects, Swift packages, simulators, and development workflows without leaving your editor.
      5
      4 npm
      2
      MIT
    • A
      license
      Not graded
      quality
      F
      maintenance
      Enables AI agents to manage App Store Connect apps, including registering bundle IDs, uploading metadata and screenshots, setting age ratings, managing TestFlight groups and testers, and submitting apps for review.
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI coding agents to review Swift code, scaffold new iOS apps, and build, test, and preview them in the Xcode Simulator using local Apple guides and source references.
      36
      40
      MIT
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI coding agents to add stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based entitlement logic to applications. It also provides tools for workspace registration, settlement and webhook configuration, paylink creation, and crypto payment status checks.
      -