Skip to main content
Glama
Paydirt-AI
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 create forms, place them in an iOS app, connect Slack, build and launch the host app, leave a Debug-only requested-form setup check open for immediate verification, and read raw feedback. Paydirt supports native StoreKit, RevenueCat, Superwall, app-owned billing, and apps without subscriptions.

A generic installation first confirms cancellation feedback and Suggest a Feature, then creates the selected forms after Google sign-in. Browser onboarding asks whether completed feedback should go to Slack and coding agents (recommended), Slack only, or coding agents only. The agent then builds and opens the requested-form setup check on a simulator or connected iPhone.

One browser flow, from either entry point

Paydirt provides voice-first cancellation feedback and voice Suggest a Feature forms for iOS, working with the app's existing RevenueCat or StoreKit setup and connected to Slack and coding agents.

  • Agent start: inspect the iOS project, use the developer's explicitly requested form plan, and open the authorization URL from paydirt_begin_setup.

  • Website start: the developer signs in at https://www.paydirt.ai/setup, selects their app, and connects Slack. They then receive an installation prompt with the prepared app_id. Pass that ID to paydirt_begin_setup; never create a second app merely because setup began on the website.

  • In both paths, the human authorizes Paydirt and Slack in the browser. Existing delivery preferences and healthy Slack assignments are reused. Only request Slack authorization when missing, incomplete, or explicitly requested.

  • After authorization, paydirt_finish_setup returns the installation contract. Continue in the same project and conversation using the exact app/form IDs. Preparing forms is not proof that the SDK is installed or delivery is verified.

An explicit request to install specified forms counts as confirmation of that scope. Set form_plan_confirmed: true; ask only about missing or ambiguous choices, not whether to repeat work already requested.

Example request:

Add Paydirt voice cancellation feedback and a voice Suggest a Feature form to my iOS app. Use my existing RevenueCat or StoreKit setup, connect Slack during browser authorization, then build and verify my app.

Related MCP server: Slack MCP Server

Install in Codex

codex mcp add paydirt -- npx --yes --prefer-online paydirt-mcp@latest

After first registration, follow the refresh requested by your Codex client. Current Codex desktop builds may require you to quit and reopen Codex before a brand-new MCP server becomes visible. Return to the same task and ask:

Add Paydirt and show me it working.

This is a one-time Codex tool-discovery refresh, not a Paydirt authentication requirement. Once Paydirt is visible, Paydirt and Slack authorization do not require another restart. The already loaded paydirt_begin_setup and paydirt_finish_setup tools complete browser authorization in the same task and the same MCP process.

To remove the server later:

codex mcp remove paydirt

Install in Claude Code

claude mcp add paydirt -- npx --yes --prefer-online paydirt-mcp@latest

The public Paydirt Claude plugin marketplace is also included in this repository. After the public repository is available:

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

The plugin bundles both the Paydirt installation workflow and the pinned MCP server configuration.

Other MCP hosts can launch the same stdio command:

{
  "mcpServers": {
    "paydirt": {
      "command": "npx",
      "args": ["--yes", "--prefer-online", "paydirt-mcp@latest"]
    }
  }
}

Requires Node.js 18 or newer.

Authentication

Authentication is an explicit, headless-safe two-step flow:

  1. The agent inspects the app and uses the explicitly requested form plan. An explicit request naming the forms already counts as confirmation. If the scope is unclear, call paydirt_begin_setup without confirmation to receive the recommended plan and ask one concise question.

  2. After confirmation, the agent calls paydirt_begin_setup with form_plan_confirmed: true. It immediately receives an authorization_url, session_id, and exact finish_arguments. The MCP process never launches a browser, sleeps, or polls.

  3. Open authorization_url in any browser and sign in to Paydirt with Google. Paydirt creates the app and selected forms, then asks for Slack and coding agents (recommended), Slack only, or coding agents only.

  4. When Slack is selected, complete Slack OAuth. Choose your own workspace and channels. Paydirt assigns the requested forms and verifies routing before setup completes.

  5. The agent calls paydirt_finish_setup, respects the saved delivery choice, installs Paydirt, builds and launches the app, and leaves the requested-form setup check visibly open. The developer submits each installed form; Slack delivery is verified only when every required test reaches its selected channel. Separately verify actual trial and paid cancellation triggers with the host subscription provider.

  6. The coding-agent delivery choices disclose and include a read-only daily brief. After verification, a host with native scheduling creates a 9:00 AM local task that calls paydirt_get_feedback_digest; unsupported hosts return the reusable prompt and report the limitation without pretending a schedule was created. Slack-only delivery does not include it.

paydirt_setup remains as a compatibility alias: call it without session_id to begin and with session_id to finish.

Credentials are saved locally 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_connect_slack, paydirt_slack_status, paydirt_list_slack_channels, paydirt_set_form_channel

Connect and configure Slack delivery

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 describes the current npm stdio package; Paydirt does not claim a remote MCP transport until a public HTTPS endpoint is deployed and verified.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe exact user-requested form title, such as “Post Export Feedback”.
app_idYesThe Paydirt app ID. Discover it with setup or list_apps rather than asking if it is already available.
triggerYesHow 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.
placementYesThe 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_channelNoOptional 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.
initial_questionNoOptional 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.
custom_system_promptNoOptional guidance for AI follow-up questions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
iosYes
formYes
slackYes
successYes
form_actionYes
agent_actionsYes
requested_placementYes
completion_requirementsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool creates or reuses a normalized-title match and that retries update an existing matching form, which is consistent with the idempotentHint. It also reveals the mandatory edit/build/test actions and non-completion of remote creation, adding useful behavioral context. The destructiveHint is not contradicted, though the description could more explicitly warn about overwriting existing forms.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense, with no filler or redundant phrasing. It front-loads the trigger condition and then packs necessary behavior, output, and workflow constraints into a small number of sentences. Every clause adds operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the number of parameters and the presence of an output schema, the description covers the main decision points: when to use it, what it returns, required follow-up actions, and Slack deferral. It could be slightly more explicit about failure modes or exact output shape, but the output schema is expected to carry that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Every parameter is described with concrete semantics beyond its name, such as preserving placement text verbatim, explaining trigger enum values, defaulting initial_question, and instructing to discover app_id via setup/list_apps. The 'retry updates existing form' note for initial_question adds important idempotent behavior. This goes well beyond the schema descriptions alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the target action: adding a named feedback form at a specific placement, with create-or-reuse behavior based on normalized titles. It distinguishes this from generic form creation by anchoring it to screens, buttons, lifecycle moments, and in-app actions, and the sibling list reinforces that separate form tools exist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly starts with 'Use this when...' and describes the triggering user intent, which is strong usage guidance. It also states that remote form creation alone is not completion and that Slack is deferred until after visual verification, giving practical workflow direction. It does not explicitly name alternative sibling tools, but the trigger conditions are clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days of data to analyze (default: 30)
app_idYesThe app ID
form_idNoFilter to a specific form (optional)
questionYesYour question about the feedback (e.g., "What are users saying about pricing?" or "What features are most requested?")

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYes
answerYes
response_countYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds 'Reads actual responses and returns analysis without taking action,' which reinforces the read-only nature but does not reveal additional behavioral nuances like rate limits, authentication needs, or pagination. With annotation coverage, the bar is lower, so a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the key usage trigger, and contains no redundant or irrelevant information. Every word contributes to understanding the tool's purpose and behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return values. With full parameter documentation, the description sufficiently conveys the tool's purpose and usage context. A minor improvement could be explicit differentiation from paydirt_get_summary or paydirt_get_responses, but the current description is adequate for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all parameters. The description adds no significant new parameter semantics beyond examples like 'pricing themes or feature requests,' which mirrors the schema's example for the 'question' parameter. Since the schema fully documents each parameter, the baseline of 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool answers natural-language analytical questions about Paydirt feedback, such as pricing themes or feature requests. It distinguishes itself from sibling tools like paydirt_get_responses by emphasizing analysis rather than raw data retrieval, and explicitly notes it takes no action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit trigger condition: 'Use this when the user asks a natural-language analytical question about their Paydirt feedback.' This gives clear guidance on when to use the tool, though it does not explicitly mention alternatives or when-not-to-use scenarios, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNoExisting Paydirt app ID, including the ID in a website setup handoff. Reconnect this exact app and reuse its saved Slack/delivery settings instead of creating another app.
app_nameNoPreferred app name to reuse or create during setup
bundle_idNoPreferred iOS bundle ID to match during setup
use_casesNoConfirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist.
app_descriptionNoOptional app description to save when creating or repairing setup
uses_revenuecatNoDeprecated compatibility input. Prefer subscription_provider.
feature_placementNoDeveloper-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings.
form_plan_confirmedNoSet true when the developer explicitly requested these voice forms or confirmed the proposed plan. An explicit installation request already confirms its scope; do not ask the same question again. Ask only when the requested forms or placement are ambiguous.
subscription_providerNoSubscription source of truth discovered in the host app. Use auto only when it could not be resolved before setup.
subscription_product_idsNoNative StoreKit auto-renewable product IDs. Required for a complete storekit integration.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
messageNo
successYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clearly says that without form_plan_confirmed it will not start authorization, and that after confirmation it returns authorization_url and finish_arguments. It does not disclose side effects such as creating or updating apps, whether the operation is idempotent, or what happens if required steps are skipped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with 'Use this when' and includes only relevant workflow information. However, it is a single dense run-on paragraph with awkward phrasing like 'voice cancellation feedback' and 'concise cancellation/Suggest a Feature confirmation', making it less clear than it should be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the multi-step setup flow, the description covers the main state transition (confirmation before authorization, then receiving authorization_url) and mentions app_id reuse. It lacks specifics about how to inspect the host, what the output schema contains, or failure/error conditions, but it does provide enough for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds flow context for app_id, use_cases, form_plan_confirmed, and feature_placement, but most parameter meaning already lives in the schema and several parameters like app_name, subscription_product_ids, and uses_revenuecat are not enriched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific action—beginning setup for feedback forms and Slack connection—and gives enough detail to distinguish it from siblings like paydirt_setup and paydirt_finish_setup. However, the phrase 'voice cancellation feedback' is confusing and likely a typo, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use the tool (installing feedback forms, connecting Slack, browser authorization), how to handle website-started setups via app_id, and the confirmation gate before authorization. The instruction 'Inspect the host first' is vague and no explicit alternatives are mentioned, so it falls short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
auth_urlYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, which cover the safety profile. The description adds that the tool returns an OAuth URL and mentions the browser flow, giving extra behavioral context. It does not contradict the annotations and adds a small but useful detail about preserving channel choices and only sending completed Q&A.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is about three sentences and remains focused. It starts with the core purpose, then explains the return value, and finally adds operational caveats. No unnecessary filler, though the last sentence about preserving choices and verifying assignments feels slightly tangential but still relevant to usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, when to use, and a general return type (OAuth URL). However, it lacks details about the output structure (e.g., the exact URL format or how the agent should handle it) and does not fully clarify what 'repair Slack delivery' entails. It also doesn't explain the app_id parameter's origin or significance, leaving some gaps for an agent encountering this tool for the first time.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter app_id is described in the schema as 'The app ID', which is adequate. The description does not add extra semantic information about app_id beyond the schema, so it stays at the baseline. Since schema coverage is 100% (one parameter fully described), the description need not elaborate further, but it also doesn't offer any additional insight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the main purpose: to connect Slack or repair Slack delivery after onboarding. The verb 'connect' is specific, and the resource (Slack) is unambiguous. It distinguishes from sibling tools like paydirt_slack_status (status) and paydirt_list_slack_channels (channel listing) by focusing on the OAuth connection action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool ('when the user asks to connect Slack or repair Slack delivery after onboarding'). It also provides some operational guidance (preserve channel selections, verify form assignments, only send completed Q&A). However, it does not explicitly mention alternatives like paydirt_slack_status for checking existing connections or paydirt_list_slack_channels for listing channels, leaving some room for ambiguity in tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the app
bundle_idNoiOS bundle ID (optional)
app_descriptionNoDescription of the app (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
api_keyYes
bundle_idNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's 'Creates a new app' adds little beyond that. It introduces a useful caution about duplication but does not disclose other behavioral aspects like duplicate handling, side effects, or failure modes. With annotations covering the safety profile, this is acceptable but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, each earning its place: the first gives the usage condition, the second states the action and the important duplication warning. No redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given full parameter descriptions and an output schema, the description covers the primary use case and includes the key pre-check for duplication. However, it omits details about failure behavior or what happens if a duplicate name is provided, but the guidance to list existing apps mitigates this gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptive entries for name, bundle_id, and app_description. The tool description does not add any additional parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Creates a new app' with a specific verb and resource, and clarifies the exact scenario for use ('when the user explicitly needs a separate Paydirt app and setup cannot reuse or create it'). It distinguishes this tool from siblings like paydirt_setup and paydirt_list_apps by mentioning duplication checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool and when not to, advising to 'list existing apps first when duplication is possible.' It also references the alternative that setup may reuse or create the app, giving clear selection criteria among the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the form
typeYesType of form
app_idYesThe app ID
promptYesInitial prompt/question for the form
custom_system_promptNoCustom system prompt for AI (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
typeYes
app_idYes
promptYes
enabledNo
slack_channel_idNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, but the description adds meaningful behavioral context beyond that: it clarifies that this creates a low-level form, maps feedback types, returns an ID, and expects Slack assignment. It also implies a safety step (checking for existing forms), which is useful. No contradiction with annotations; slight deduction because it doesn't explicitly mention the output schema despite 'returned ID' implying a response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a clear role: usage trigger, prerequisite/mapping, and preference for an alternative. The description is front-loaded with the primary use case and contains no filler or redundant restatement of the schema. It crams a lot of useful guidance into a compact form without feeling overloaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity (5 params, one enum) and rich supporting context (output schema, annotations, sibling tool list), the description covers all necessary angles: when to use, what to check first, how to map enum values, what to do with the result, and which alternative to prefer. The required parameters are all implicitly addressed, and the description is complete enough for an agent to invoke the tool correctly without further clarification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds domain-specific meaning by explaining how to map real-world concepts to the 'type' enum: 'Map subscription cancellation to cancellation, trial cancellation to trial_expiration, and regular feedback to custom.' This goes beyond the raw enum labels and helps the agent select the correct type value. It also ties 'wire the returned ID into iOS and assign Slack' to the expected output, adding context for parameters like app_id and name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'creating a low-level remote form without a host-app placement request.' It clearly distinguishes this tool from paydirt_add_feedback_form by stating that the latter is preferred for named screen or action placement. This makes the purpose immediately clear and differentiated from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Use this when creating a low-level remote form without a host-app placement request') and explicitly names the alternative tool to prefer for different scenarios. It also provides actionable pre-flight steps ('First confirm a matching form does not exist') and post-creation steps (wire the returned ID into iOS and assign Slack), fully covering usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form ID to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description does not need to re-state destructiveness. It adds value by emphasizing 'permanently' and the need for inspection before deletion when identity is uncertain. This goes beyond the annotations by providing a safeguard behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with no filler. It front-loads the primary directive and then provides a necessary caveat. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete operation with one parameter and an output schema, the description covers the key aspects: when to use, the destructive nature, and a caution about identity. It could mention the irreversible effects on associated data, but the annotations and output schema likely cover return details. Overall, it is sufficiently complete for an agent to act correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with form_id described as 'The form ID to delete.' The description adds no additional parameter specifics, but with full schema coverage, the baseline is 3. The description's mention of 'specific form' aligns with form_id but does not enrich meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'permanently delete a specific Paydirt form.' The verb 'delete' plus resource 'form' distinguishes it from sibling tools like update or toggle. The title 'Delete Feedback Form' in annotations reinforces this purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit instruction on when to use: 'when the user explicitly asks to permanently delete.' It adds caution about inspecting the form when identity is uncertain, which gives practical context. Does not explicitly name alternative tools, but the condition is clear enough for an agent to differentiate from read or update operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNoExisting Paydirt app ID, including the ID in a website setup handoff. Reconnect this exact app and reuse its saved Slack/delivery settings instead of creating another app.
app_nameNoPreferred app name to reuse or create during setup
bundle_idNoPreferred iOS bundle ID to match during setup
use_casesNoConfirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist.
session_idYesThe session_id returned by paydirt_begin_setup.
app_descriptionNoOptional app description to save when creating or repairing setup
uses_revenuecatNoDeprecated compatibility input. Prefer subscription_provider.
feature_placementNoDeveloper-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings.
form_plan_confirmedNoSet true when the developer explicitly requested these voice forms or confirmed the proposed plan. An explicit installation request already confirms its scope; do not ask the same question again. Ask only when the requested forms or placement are ambiguous.
subscription_providerNoSubscription source of truth discovered in the host app. Use auto only when it could not be resolved before setup.
subscription_product_idsNoNative StoreKit auto-renewable product IDs. Required for a complete storekit integration.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
messageNo
successYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key side effects and behavior: it checks one session, returns immediately, does not block, and securely saves credentials when ready. It does not contradict the annotations, and it adds useful non-obvious context about not polling or sleeping.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well structured: the trigger condition comes first, followed by the immediate return behavior, the anti-loop instruction, and the eventual outcome. Every sentence contributes essential usage context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives enough workflow context to call the tool correctly: it references the prior begin_setup step, explains the pending state behavior, and states what will be returned once setup is ready. It does not explain every failure mode, but the output schema and annotations cover the remaining contract sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter already has a meaningful description, including enum guidance and deprecation notes. The tool description itself does not add much parameter-level meaning beyond what the schema provides, so the baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action: finish the setup flow initiated by paydirt_begin_setup. It names the exact trigger condition, the single-session check behavior, and the eventual credential-save and return contract, making it easy to distinguish from sibling setup and management tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool: after the user has opened the authorization URL from paydirt_begin_setup. It also gives direct operational guidance: check once, return immediately, and do not loop or sleep if pending, which prevents common misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
api_keyYes
bundle_idNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and destructive=false. The description adds the specific data returned (identity, bundle ID, SDK key, configuration) and reinforces non-modification, providing useful context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the use case ('Use this when...'), and contains no filler or redundant content beyond reinforcing the read-only nature.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no nested objects, output schema present), the description adequately covers the return contents and non-modifying behavior. It is complete for a single-app getter with strong annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single app_id parameter, which is already described in the schema. The description adds minimal semantic value by implying the app_id identifies the known app, but this is already clear from the schema and the phrase 'one known Paydirt app.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves current identity, bundle ID, SDK key, or configuration for one known Paydirt app, using a specific verb (get) and resource (app). It distinguishes itself from sibling tools like list_apps (which lists all apps) and create/update tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly directs use when needing details for one known app, implying the need for a specific app_id and contrasting with listing all apps. It also notes 'Does not modify the app,' which steers away from mutating tools, though it does not explicitly name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoPeriod length in hours (default: 24). The comparison uses the immediately preceding period of equal length.
app_idYesThe Paydirt app ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
app_idYes
countsYes
periodYes
truncatedYes
previous_period_totalYes
change_from_previous_periodYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the bar is lower. The description adds a useful downstream directive ('Never turn feedback into code changes or tasks automatically') and reinforces the read-only nature, but contributes little about tool-side behavior such as error cases, rate limits, or empty-result handling. The extra context is helpful but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it opens with the usage trigger, then summarizes the output, then adds a short closing constraint. There is no filler or redundancy. The final sentence is policy-oriented rather than descriptive, but it is brief and relevant, so the overall structure is solid.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two parameters (both well-described in the schema) and an output schema present, the description adequately summarizes the key deliverables (totals by type, period comparison, highlights). It does not cover error behavior or empty-result scenarios, but given the low complexity and schema support, nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — both app_id and hours have meaningful descriptions, including the period-comparison semantics and min/max bounds. The description reinforces the 'comparison with the previous equal period' concept but adds no new parameter meaning beyond what the schema already conveys, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource ('read-only daily or periodic Paydirt brief'), specifies what it returns (completed-response totals by feedback type, comparison with the previous equal period, concise highlights), and distinguishes it from siblings like paydirt_get_responses and paydirt_get_summary. It would earn a 5 if it explicitly named the sibling alternatives; it stops just short of that.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear when-to-use trigger ('when the user or a scheduled task needs a read-only daily or periodic brief') and an explicit non-action ('Never turn feedback into code changes or tasks automatically'). However, it does not explicitly contrast with sibling tools (e.g., when to prefer get_responses vs get_summary vs this digest), so the guidance is present but implicit about alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesThe form ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
formYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by specifying exactly what fields are retrieved (prompt, type, enabled state, Slack assignment) and confirming non-modification. It aligns with annotations and provides context beyond them, though it does not address error cases like invalid form_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the usage trigger, and zero wasted words. Every phrase earns its place: what to retrieve, scope, and non-modification. Excellent conciseness for a simple read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one parameter, output schema present, annotations covering safety), the description is fully sufficient. It covers when to use, what is retrieved, and the non-modifying behavior. No critical gaps remain for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with form_id documented as 'The form ID.' The description adds the context that it is for 'one known form,' which implies the ID must reference an existing form. This is marginal added value beyond the schema, earning the baseline 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the current prompt, type, enabled state, or Slack assignment for one known form. It uses the specific verb 'get' with a resource ('form') and scope ('one known form'), distinguishing it from siblings like paydirt_list_forms (which lists all) and paydirt_update_form (which modifies).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when the agent needs...' providing a clear when-to-use condition. It also includes a when-not clause with 'Does not modify the form,' implying it is not for modifications. However, it does not explicitly name an alternative tool (e.g., paydirt_update_form), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum responses to return (default: 50)
sinceNoOnly return responses created at or after this ISO-8601 timestamp
app_idYesThe app ID
statusNoConversation status filter (default: completed)
form_idNoFilter by form ID (optional)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by disclosing the default status filter (completed), the recommended incremental read pattern using 'since' and 'updated_at', and a safety warning against automatic actions. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose, and every phrase adds meaning. No redundant or filler information; concise yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers what data is returned (raw conversations, Q/A turns, etc.), the default status filter, and a key usage pattern. It is sufficient for the moderate complexity, though it could mention pagination or return format more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions, so baseline is 3. The description adds extra semantic value beyond the schema by explaining how to use 'since' with 'updated_at' for incremental reads, which is not in the schema. This elevates the score to 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as retrieving raw feedback conversations, exact Q/A turns, input type, subscription metadata, and a read-only inbox cursor. The verb 'get' and resource 'responses' are specific, and the detail about raw vs. summary data distinguishes it from siblings like paydirt_get_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool ('when the user or coding agent needs raw feedback conversations...') and provides operational guidance (incremental reads with since, never take action automatically). It does not name specific alternatives or state when not to use it, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days to include (default: 7)
app_idYesThe app ID
form_idNoFilter by form ID (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
periodYes
summaryYes
top_reasonsYes
response_countYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so bar is lower. The description adds that the summary is supplementary and not the source of truth, which is important context about reliability. This goes beyond structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences. Front-loaded with usage trigger, immediately answers when to use. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only summary tool with all parameters schema-described and an output schema present, the description sufficiently covers purpose, usage, and trust caveat. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions. The tool's description adds no parameter-specific meaning; it doesn't mention days, form_id, or app_id. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool produces an aggregate AI summary of recent Paydirt responses, using a specific verb+resource. However, it does not explicitly name sibling alternatives like paydirt_get_responses, relying on the word 'summary' to differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit trigger condition ('when the user asks for an aggregate AI summary') and clarifies that raw Q&A are the source of truth, implying to use raw response tools for detailed data. It doesn't name the alternative tool, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
authenticatedYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context beyond annotations by specifying it is a connectivity check that validates stored authentication, which gives useful behavioral context without contradicting any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the usage context, and contains no redundant information. Every word earns its place, making it concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema exists), the description is complete: it explains the purpose, usage context, and the read-only nature. No additional behavioral details are needed to select or invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no parameter semantics. Per the baseline for 0 params, a score of 4 is appropriate. The description does not need to explain parameters, but it does implicitly clarify that no input is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: diagnosing Paydirt API reachability and authentication validity. It clearly distinguishes this tool from sibling CRUD operations (e.g., paydirt_list_apps, paydirt_create_form) since none other performs a health check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use: 'Use this when diagnosing whether the Paydirt API is reachable and stored authentication is valid.' No alternative tool is needed because no sibling serves this purpose; the guidance is direct and unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already define readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context by specifying 'authenticated Paydirt account' and reinforces 'without changing them', which aligns with the annotations. It does not introduce contradictions. Slight extra context beyond annotations justifies a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loaded with the usage context in the first sentence, and straightforward action in the second. Every word earns its place, no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with no output schema, the description provides sufficient context: it names the action (list all apps), scoping (authenticated account), and non-mutating behavior. It also explains a practical use case (resolving app ID after setup). This fully covers the tool's simple purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and schema coverage is 100%. Per the rubric, the baseline is 4. The description does not need to elaborate on parameters, but it does implicitly mention resolving app IDs, which hints at the output relevance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Lists all apps for the authenticated Paydirt account', using the specific verb 'Lists' and resource 'all apps'. It distinguishes from siblings like paydirt_get_app (single app) and paydirt_create_app by focusing on the listing action and the 'without changing them' safety note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: 'when the user asks which Paydirt apps exist or when an agent must resolve an app ID after setup'. It does not explicitly mention alternatives or when not to use, but the context is clear. A score of 5 would require explicit when-not/alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the read-only nature is well covered. The description adds the 'resolve or deduplicate' use case and reiterates non-modification, but does not disclose return format, pagination, or open-world behavior beyond what annotations imply. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately states the trigger condition, tool purpose, and a key constraint. Every phrase earns its place with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter list tool with strong read-only annotations and no output schema, the description adequately conveys when to use it and that it is non-mutating. It doesn't detail the return shape, but 'which forms exist' implies a list result, which is sufficient given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter app_id is fully described in the schema as 'The app ID' (100% coverage). The description does not add additional parameter detail, so the baseline score of 3 is appropriate because the schema already carries the meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists forms ('which forms exist') for a Paydirt app, using a specific verb and resource. It also distinguishes from siblings like get_form (single form) and create_form/update_form/delete_form by noting it does not modify forms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool: when the user asks which forms exist or when the agent needs to resolve/deduplicate forms. It lacks an explicit 'when not to use' or named alternatives, but the context is clear and the negative statement 'Does not modify forms' helps guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
channelsYes
team_nameYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds domain-specific non-mutation context ('without changing assignments') and an environmental prerequisite ('when Slack is connected'), which go beyond the annotations to clarify behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with usage, no redundant phrasing. Every word adds value, making it highly efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the purpose and usage trigger, annotations cover the safety profile, and the output schema exists for return values. Nothing essential is missing for this simple, read-only list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with app_id having its own description ('The app ID'). The tool description does not add further parameter details, but the baseline of 3 applies since the schema handles parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's function: 'Lists available channels' with a specific use case ('resolve a requested channel name to its channel ID'). This clearly distinguishes it from sibling tools like paydirt_list_forms or paydirt_slack_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description opens with a clear trigger condition: 'Use this when Slack is connected and the agent must resolve a requested channel name to its channel ID.' It does not explicitly mention alternatives, but the usage context is unmistakable and sufficient for a list-only tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID
form_idYesThe form ID
channel_idYesThe Slack channel ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
formYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds value by specifying that the tool replaces the current channel assignment (the destructive effect) and should be verified afterward, giving context for the destructive nature. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the triggering condition, followed by the effect and a caution to verify. Every sentence earns its place; no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter tool with full schema coverage, annotations covering safety traits, and an output schema present, the description fully captures the purpose, effect, and post-step. It is complete for its complexity and provides the necessary context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. The description adds minimal extra meaning beyond the schema—it mentions the context of Slack channel delivery but doesn't elaborate on parameter syntax or relationships. Baseline 3 applies since the schema carries the parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's specific action: assigning a form's delivery to a specific Slack channel ID, and explicitly notes it replaces the current assignment. This distinguishes it from siblings like update_form (general updates) and toggle_form (enable/disable).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear 'when to use' condition ('when a form must deliver completed conversations to a specific Slack channel ID') and advises verification afterward. It doesn't mention alternatives or exclusions, but the condition is specific enough to guide correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNoExisting Paydirt app ID, including the ID in a website setup handoff. Reconnect this exact app and reuse its saved Slack/delivery settings instead of creating another app.
app_nameNoPreferred app name to reuse or create during setup
bundle_idNoPreferred iOS bundle ID to match during setup
use_casesNoConfirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist.
session_idNoSetup session returned by the first call. When present, this call behaves like paydirt_finish_setup.
app_descriptionNoOptional app description to save when creating or repairing setup
uses_revenuecatNoDeprecated compatibility input. Prefer subscription_provider.
feature_placementNoDeveloper-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings.
form_plan_confirmedNoSet true when the developer explicitly requested these voice forms or confirmed the proposed plan. An explicit installation request already confirms its scope; do not ask the same question again. Ask only when the requested forms or placement are ambiguous.
subscription_providerNoSubscription source of truth discovered in the host app. Use auto only when it could not be resolved before setup.
subscription_product_idsNoNative StoreKit auto-renewable product IDs. Required for a complete storekit integration.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
messageNo
successYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that it never opens a browser or blocks, and explains what happens with and without session_id. It does not explicitly state that setup may create or reconfigure an app, but the annotations and description make the mutating nature reasonably clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a bit long but each sentence serves a purpose: compatibility guidance, behavior distinction, non-blocking assurance, and sibling preference. The parameter descriptions add necessary nuance without being redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully explains the tool's role, its two modes, return behavior, and relationship to sibling tools. It gives enough context for an agent to decide when and how to call it, including the handoff scenario.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Every parameter is documented with meaningful context, including the app_id handoff reuse, use_cases recommendation, subscription_provider preference over deprecated input, and the nuanced form_plan_confirmed behavior. This goes well beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly identifies itself as a compatibility endpoint for older clients and states it either starts or finishes setup depending on session_id. It also distinguishes itself from paydirt_begin_setup and paydirt_finish_setup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use the tool ('older client expects the single setup tool') and directs new agents to prefer begin_setup/finish_setup. The session_id-dependent behavior is also clearly explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
connectedYes
team_nameYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is read-only, idempotent, and non-destructive. The description adds clarity that it reports status without side effects, so the behavior is well understood.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense, leading with the main use case and then explaining the output. Slight redundancy with 'completed authorization' could be trimmed, but overall it is well structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description states what is reported (feedback channel and assignment status) and when to use it, which is sufficient for this simple read-only status tool. It does not over-promise or omit critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter app_id has a minimal schema description, but the tool description clarifies it is tied to the developer's app. Since schema coverage is 100% and the parameter is simple, the description provides enough context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports the Paydirt feedback channel and whether every installed form is assigned, and distinguishes it from agent-only delivery. This makes the purpose specific and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this tool when the developer selected Slack or combined delivery and completed authorization, and explicitly says not to call it for agent-only delivery. This gives clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYesWhether the form should be enabled (true) or disabled (false)
form_idYesThe form ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
formYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond annotations by explaining that disabled forms are not shown by the SDK and that toggling is reversible. This complements the idempotentHint and destructiveHint annotations, adding valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the usage condition front-loaded. Every word earns its place; no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple toggle tool with full schema coverage, annotations, and an output schema, the description is complete. It explains the core behavior and reversibility, enough for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers both parameters (form_id, enabled) with clear descriptions, so the description adds no additional parameter meaning. Baseline 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'enable or disable an existing form remotely.' This is specific (toggle) and identifies the resource (form), distinguishing it from sibling tools like create/update/delete forms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'use this when' condition, linking directly to user intent. It doesn't name alternatives or exclusions, but the context is clear enough for appropriate selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the app (optional)
app_idYesThe app ID
bundle_idNoiOS bundle ID (optional)
system_promptNoCustom system prompt for AI responses (optional)
app_descriptionNoDescription of the app (optional)
app_context_promptNoContext about the app for AI (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
api_keyYes
bundle_idNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the important behavioral detail that 'Only supplied fields are updated', which is a partial-update semantics not captured by annotations. Combined with annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true), the agent knows this is a mutating operation, and the description clarifies that unspecified fields are left untouched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The first sentence leads with the usage trigger, and the second clarifies the partial-update behavior. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema, 100% parameter coverage, and annotations for destructive/idempotent behavior, the description is sufficient. It clearly states the action, scope, and partial-update semantics, making it complete enough for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains each parameter clearly. The description groups fields (identity, bundle ID, description, AI context) but does not add meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifically states 'change an existing Paydirt app’s identity, bundle ID, description, or AI context', using a clear verb and resource. It clearly differentiates from sibling tools like create_app or get_app by focusing on updates to an existing app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description opens with 'Use this when the user asks to change...', providing an explicit when-to-use condition. It does not explicitly mention when not to use it or name alternative tools, but the context is clear and distinct from creation or deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the form (optional)
promptNoNew prompt/question for the form (optional)
form_idYesThe form ID
custom_system_promptNoNew custom system prompt for AI (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
formYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint and idempotentHint. The description adds key context that only supplied fields are updated, which is beyond the annotations and prevents incorrect full-replacement assumptions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence provides the primary use case immediately, and the second sentence clarifies partial update behavior. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with a clear output schema, the description covers purpose, trigger, and partial update semantics. It could explicitly mention error behavior for missing form_id, but that is implied by 'existing form' and not essential for tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented. The description adds semantic value by mapping fields to user-facing concepts ('initial question', 'AI follow-up guidance') and explicitly stating that only supplied fields are updated, clarifying the optional and partial nature of the update.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates an existing form's name, initial question, or AI follow-up guidance, using a specific verb and resource. It distinguishes itself from siblings like paydirt_create_form and paydirt_update_app by targeting existing forms and specific fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear trigger condition ('when the user asks to change an existing form...') and clarifies partial update behavior. It does not explicitly name alternatives or exclusions, but the scoping is strong enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 5 tool updatesv2.4.0
    • Changedpaydirt_add_feedback_form1 field changed
      • changedInput schema / properties / slack_channel / description
        Previous value: -"Optional Slack channel name (with or without #) or channel ID. If omitted, the contract still requires the agent to connect Slack and assign a channel before completion."New value: +"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."
    • Changedpaydirt_begin_setup5 fields changed
      • addedInput schema / properties / app_id
        Added value: +{
        +  "description": "Existing Paydirt app ID, including the ID in a website setup handoff. Reconnect this exact app and reuse its saved Slack/delivery settings instead of creating another app.",
        +  "type": "string"
        +}
      • addedInput schema / properties / feature_placement
        Added value: +{
        +  "description": "Developer-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings.",
        +  "type": "string"
        +}
      • addedInput schema / properties / form_plan_confirmed
        Added value: +{
        +  "description": "Set true when the developer explicitly requested these voice forms or confirmed the proposed plan. An explicit installation request already confirms its scope; do not ask the same question again. Ask only when the requested forms or placement are ambiguous.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / use_cases / description
        Previous value: -"Feedback experiences to install. Defaults to regular feedback, trial cancellation, and subscription cancellation."New value: +"Confirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist."
      • changedInput schema / properties / use_cases / items / enum
        Previous value: -[
        -  "regular_feedback",
        -  "trial_cancellation",
        -  "subscription_cancellation"
        -]New value: +[
        +  "regular_feedback",
        +  "feature_request",
        +  "trial_cancellation",
        +  "subscription_cancellation"
        +]
    • Changedpaydirt_finish_setup5 fields changed
      • addedInput schema / properties / app_id
        Added value: +{
        +  "description": "Existing Paydirt app ID, including the ID in a website setup handoff. Reconnect this exact app and reuse its saved Slack/delivery settings instead of creating another app.",
        +  "type": "string"
        +}
      • addedInput schema / properties / feature_placement
        Added value: +{
        +  "description": "Developer-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings.",
        +  "type": "string"
        +}
      • addedInput schema / properties / form_plan_confirmed
        Added value: +{
        +  "description": "Set true when the developer explicitly requested these voice forms or confirmed the proposed plan. An explicit installation request already confirms its scope; do not ask the same question again. Ask only when the requested forms or placement are ambiguous.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / use_cases / description
        Previous value: -"Feedback experiences to install. Defaults to regular feedback, trial cancellation, and subscription cancellation."New value: +"Confirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist."
      • changedInput schema / properties / use_cases / items / enum
        Previous value: -[
        -  "regular_feedback",
        -  "trial_cancellation",
        -  "subscription_cancellation"
        -]New value: +[
        +  "regular_feedback",
        +  "feature_request",
        +  "trial_cancellation",
        +  "subscription_cancellation"
        +]
    • Addedpaydirt_get_feedback_digest
    • Changedpaydirt_setup5 fields changed
      • addedInput schema / properties / app_id
        Added value: +{
        +  "description": "Existing Paydirt app ID, including the ID in a website setup handoff. Reconnect this exact app and reuse its saved Slack/delivery settings instead of creating another app.",
        +  "type": "string"
        +}
      • addedInput schema / properties / feature_placement
        Added value: +{
        +  "description": "Developer-confirmed placement for Suggest a Feature, such as settings or after_successful_export. Defaults to settings.",
        +  "type": "string"
        +}
      • addedInput schema / properties / form_plan_confirmed
        Added value: +{
        +  "description": "Set true when the developer explicitly requested these voice forms or confirmed the proposed plan. An explicit installation request already confirms its scope; do not ask the same question again. Ask only when the requested forms or placement are ambiguous.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / use_cases / description
        Previous value: -"Feedback experiences to install. Defaults to regular feedback, trial cancellation, and subscription cancellation."New value: +"Confirmed feedback experiences to install. The recommended plan is Suggest a Feature plus trial and paid cancellation when subscriptions exist."
      • changedInput schema / properties / use_cases / items / enum
        Previous value: -[
        -  "regular_feedback",
        -  "trial_cancellation",
        -  "subscription_cancellation"
        -]New value: +[
        +  "regular_feedback",
        +  "feature_request",
        +  "trial_cancellation",
        +  "subscription_cancellation"
        +]
  2. 22 tool updatesv2.1.6
    • First observedpaydirt_add_feedback_form
    • First observedpaydirt_ask
    • First observedpaydirt_begin_setup
    • First observedpaydirt_connect_slack
    • First observedpaydirt_create_app
    • First observedpaydirt_create_form
    • First observedpaydirt_delete_form
    • First observedpaydirt_finish_setup
    • First observedpaydirt_get_app
    • First observedpaydirt_get_form
    • First observedpaydirt_get_responses
    • First observedpaydirt_get_summary
    • First observedpaydirt_health_check
    • First observedpaydirt_list_apps
    • First observedpaydirt_list_forms
    • First observedpaydirt_list_slack_channels
    • First observedpaydirt_set_form_channel
    • First observedpaydirt_setup
    • First observedpaydirt_slack_status
    • First observedpaydirt_toggle_form
    • First observedpaydirt_update_app
    • First observedpaydirt_update_form

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 issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
    10
    1
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables complete Slack integration through natural language in Cursor IDE, supporting message sending, channel management, direct messaging, user lookup, reactions, and message search using the Slack API.
    -
  • 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