Paydirt
NPM · PAYDIRT-MCP · SCANNED SEP 20
Agent-native installer and control plane for Paydirt iOS feedback
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 38 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability75
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3199 tokens (~139/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (87% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 24 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Paydirt MCP server?
Paydirt runs locally as an npm package, launched with npx -y paydirt-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · paydirt-mcp
claude mcp add paydirt-ai-paydirt-mcp -- npx -y paydirt-mcp
{
"mcpServers": {
"paydirt-ai-paydirt-mcp": {
"command": "npx",
"args": [
"-y",
"paydirt-mcp"
]
}
}
} {
"servers": {
"paydirt-ai-paydirt-mcp": {
"command": "npx",
"args": [
"-y",
"paydirt-mcp"
]
}
}
} codex mcp add paydirt-ai-paydirt-mcp -- npx -y paydirt-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"paydirt-ai-paydirt-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"paydirt-mcp"
],
"enabled": true
}
}
} openclaw mcp add paydirt-ai-paydirt-mcp --command npx --arg -y --arg paydirt-mcp
mcp_servers:
paydirt-ai-paydirt-mcp:
command: "npx"
args: ["-y", "paydirt-mcp"] {
"McpServers": {
"paydirt-ai-paydirt-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"paydirt-mcp"
]
}
}
} assistant mcp add paydirt-ai-paydirt-mcp -t stdio -c npx -a -y paydirt-mcp
{
"mcpServers": {
"paydirt-ai-paydirt-mcp": {
"command": "npx",
"args": [
"-y",
"paydirt-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 −3
- Stability: pass → 0.80 functional
- 18 Sept 26 +1
- Stability: 0.97 → pass security
- 17 Sept 26 +1
- Security disclosure: unverified → pass ▲ functional
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 0
- Security disclosure: pass → unverified ▼ functional
- 12 Sept 26 −3
- Stability: pass → 0.80 functional
- 11 Sept 26 +1
- Stability: 0.97 → pass security
- 9 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/paydirt-mcp@2.3.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
paydirt_add_feedback_form ~305
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The Paydirt app ID. Discover it with setup or list_apps rather than asking if it is already available. |
| custom_system_prompt | string | – | Optional guidance for AI follow-up questions. |
| initial_question | string | – | Optional first question. Defaults to “What would you like us to know?”. If supplied on a retry, the existing matching form is updated instead of duplicated. |
| placement | string | yes | The exact host-app location or action from the user, such as “Settings below Restore Purchases” or “after a successful export”. Preserve this text through implementation and reporting. |
| slack_channel | string | – | Optional Slack channel name (with or without #) or channel ID when the developer already selected Slack delivery. If omitted, Slack is deferred until after visual verification. |
| title | string | yes | The exact user-requested form title, such as “Post Export Feedback”. |
| trigger | string | yes | How presentation is triggered. Use user_tap for a button/menu item, in_app_action after an action succeeds, screen_appearance when opening a screen, or custom_condition for app-specific logic. |
| Name | Type | Req | Description |
|---|---|---|---|
| agent_actions | array | yes | – |
| completion_requirements | object | yes | – |
| form | object | yes | – |
| form_action | string | yes | – |
| ios | object | yes | – |
| requested_placement | object | yes | – |
| slack | object | yes | – |
| success | boolean | yes | – |
No examples provided.
paydirt_ask ~123
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| days | number | – | Number of days of data to analyze (default: 30) |
| form_id | string | – | Filter to a specific form (optional) |
| question | string | yes | Your question about the feedback (e.g., "What are users saying about pricing?" or "What features are most requested?") |
| Name | Type | Req | Description |
|---|---|---|---|
| answer | string | yes | – |
| days | number | yes | – |
| response_count | number | yes | – |
No examples provided.
paydirt_begin_setup ~302
Use this when installing Paydirt for a new user, machine, or iOS app. 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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_description | string | – | Optional app description to save when creating or repairing setup |
| app_name | string | – | Preferred app name to reuse or create during setup |
| bundle_id | string | – | Preferred iOS bundle ID to match during setup |
| feature_placement | string | – | Developer-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings. |
| form_plan_confirmed | boolean | – | Set true only after the developer confirms cancellation, Suggest a Feature, or a customized form plan. Without confirmation, setup returns a concise confirmation prompt and does not start authorizati… |
| subscription_product_ids | array | – | Native StoreKit auto-renewable product IDs. Required for a complete storekit integration. |
| subscription_provider | string | – | Subscription source of truth discovered in the host app. Use auto only when it could not be resolved before setup. |
| use_cases | array | – | Confirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist. |
| uses_revenuecat | boolean | – | Deprecated compatibility input. Prefer subscription_provider. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | – |
| status | string | yes | – |
| success | boolean | yes | – |
No examples provided.
paydirt_connect_slack ~84
Use this when the user asks to connect Slack or repair Slack delivery after onboarding. Returns the Slack OAuth URL. Authorization provisions #paydirt-suggest-a-feature for feature forms and #paydirt-cancellations for trial and subscription cancellation forms, then assigns each form automatically when workspace policy allows it.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| Name | Type | Req | Description |
|---|---|---|---|
| auth_url | string | yes | – |
No examples provided.
paydirt_create_app ~85
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_description | string | – | Description of the app (optional) |
| bundle_id | string | – | iOS bundle ID (optional) |
| name | string | yes | Name of the app |
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | – |
| bundle_id | string|null | – | – |
| id | string | yes | – |
| name | string | yes | – |
No examples provided.
paydirt_create_form ~142
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| custom_system_prompt | string | – | Custom system prompt for AI (optional) |
| name | string | yes | Name of the form |
| prompt | string | yes | Initial prompt/question for the form |
| type | string | yes | Type of form |
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | – |
| enabled | boolean | – | – |
| id | string | yes | – |
| name | string | yes | – |
| prompt | string | yes | – |
| slack_channel_id | string|null | – | – |
| type | string | yes | – |
No examples provided.
paydirt_delete_form ~59
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.
| Name | Type | Req | Description |
|---|---|---|---|
| form_id | string | yes | The form ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| success | boolean | yes | – |
No examples provided.
paydirt_finish_setup ~315
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_description | string | – | Optional app description to save when creating or repairing setup |
| app_name | string | – | Preferred app name to reuse or create during setup |
| bundle_id | string | – | Preferred iOS bundle ID to match during setup |
| feature_placement | string | – | Developer-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings. |
| form_plan_confirmed | boolean | – | Set true only after the developer confirms cancellation, Suggest a Feature, or a customized form plan. Without confirmation, setup returns a concise confirmation prompt and does not start authorizati… |
| session_id | string | yes | The session_id returned by paydirt_begin_setup. |
| subscription_product_ids | array | – | Native StoreKit auto-renewable product IDs. Required for a complete storekit integration. |
| subscription_provider | string | – | Subscription source of truth discovered in the host app. Use auto only when it could not be resolved before setup. |
| use_cases | array | – | Confirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist. |
| uses_revenuecat | boolean | – | Deprecated compatibility input. Prefer subscription_provider. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | – |
| status | string | yes | – |
| success | boolean | yes | – |
No examples provided.
paydirt_get_app ~54
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | – |
| bundle_id | string|null | – | – |
| id | string | yes | – |
| name | string | yes | – |
No examples provided.
paydirt_get_feedback_digest ~103
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The Paydirt app ID |
| hours | number | – | Period length in hours (default: 24). The comparison uses the immediately preceding period of equal length. |
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | – |
| change_from_previous_period | number | yes | – |
| counts | object | yes | – |
| items | array | yes | – |
| period | object | yes | – |
| previous_period_total | number | yes | – |
| truncated | boolean | yes | – |
No examples provided.
paydirt_get_form ~51
Use this when the agent needs the current prompt, type, enabled state, or Slack assignment for one known form. Does not modify the form.
| Name | Type | Req | Description |
|---|---|---|---|
| form_id | string | yes | The form ID |
| Name | Type | Req | Description |
|---|---|---|---|
| form | object | yes | – |
No examples provided.
paydirt_get_responses ~141
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| form_id | string | – | Filter by form ID (optional) |
| limit | number | – | Maximum responses to return (default: 50) |
| since | string | – | Only return responses created at or after this ISO-8601 timestamp |
| status | string | – | Conversation status filter (default: completed) |
No output schema declared.
No examples provided.
paydirt_get_summary ~88
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| days | number | – | Number of days to include (default: 7) |
| form_id | string | – | Filter by form ID (optional) |
| Name | Type | Req | Description |
|---|---|---|---|
| period | string | yes | – |
| response_count | number | yes | – |
| summary | string | yes | – |
| top_reasons | array | yes | – |
No examples provided.
paydirt_health_check ~36
Use this when diagnosing whether the Paydirt API is reachable and stored authentication is valid. Performs a read-only connectivity check.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| authenticated | boolean | yes | – |
| status | string | yes | – |
No examples provided.
paydirt_list_apps ~49
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
paydirt_list_forms ~53
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
paydirt_list_slack_channels ~51
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| Name | Type | Req | Description |
|---|---|---|---|
| channels | array | yes | – |
| team_name | string | yes | – |
No examples provided.
paydirt_set_form_channel ~76
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| channel_id | string | yes | The Slack channel ID |
| form_id | string | yes | The form ID |
| Name | Type | Req | Description |
|---|---|---|---|
| form | object | yes | – |
No examples provided.
paydirt_setup ~334
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_description | string | – | Optional app description to save when creating or repairing setup |
| app_name | string | – | Preferred app name to reuse or create during setup |
| bundle_id | string | – | Preferred iOS bundle ID to match during setup |
| feature_placement | string | – | Developer-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings. |
| form_plan_confirmed | boolean | – | Set true only after the developer confirms cancellation, Suggest a Feature, or a customized form plan. Without confirmation, setup returns a concise confirmation prompt and does not start authorizati… |
| session_id | string | – | Setup session returned by the first call. When present, this call behaves like paydirt_finish_setup. |
| subscription_product_ids | array | – | Native StoreKit auto-renewable product IDs. Required for a complete storekit integration. |
| subscription_provider | string | – | Subscription source of truth discovered in the host app. Use auto only when it could not be resolved before setup. |
| use_cases | array | – | Confirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist. |
| uses_revenuecat | boolean | – | Deprecated compatibility input. Prefer subscription_provider. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | – |
| status | string | yes | – |
| success | boolean | yes | – |
No examples provided.
paydirt_slack_status ~61
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| Name | Type | Req | Description |
|---|---|---|---|
| connected | boolean | yes | – |
| team_name | string|null | yes | – |
No examples provided.
paydirt_toggle_form ~77
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.
| Name | Type | Req | Description |
|---|---|---|---|
| enabled | boolean | yes | Whether the form should be enabled (true) or disabled (false) |
| form_id | string | yes | The form ID |
| Name | Type | Req | Description |
|---|---|---|---|
| form | object | yes | – |
No examples provided.
paydirt_update_app ~129
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_context_prompt | string | – | Context about the app for AI (optional) |
| app_description | string | – | Description of the app (optional) |
| app_id | string | yes | The app ID |
| bundle_id | string | – | iOS bundle ID (optional) |
| name | string | – | New name for the app (optional) |
| system_prompt | string | – | Custom system prompt for AI responses (optional) |
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | – |
| bundle_id | string|null | – | – |
| id | string | yes | – |
| name | string | yes | – |
No examples provided.
paydirt_update_form ~97
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.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_system_prompt | string | – | New custom system prompt for AI (optional) |
| form_id | string | yes | The form ID |
| name | string | – | New name for the form (optional) |
| prompt | string | – | New prompt/question for the form (optional) |
| Name | Type | Req | Description |
|---|---|---|---|
| form | object | yes | – |
No examples provided.
What is the Paydirt MCP server?
Paydirt is an MCP server listed in the public MCP registry as io.github.Paydirt-AI/paydirt-mcp. Agent-native installer and control plane for Paydirt iOS feedback. This page covers its npm package (paydirt-mcp).
Is the Paydirt MCP server safe to use?
Paydirt scores 82 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Paydirt MCP server expose?
Paydirt exposes 23 tools: paydirt_setup, paydirt_begin_setup, paydirt_finish_setup, paydirt_list_apps, paydirt_create_app, and 18 more. Their descriptions and schemas cost roughly 2,815 tokens of context every time the server is loaded.
Is the Paydirt MCP server still maintained?
Paydirt is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Paydirt MCP server under?
Paydirt declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.