Skip to main content
Glama
rushikeshmore

Shopify Partner Agent

Shopify Partner Agent

PyPI CI License: MIT Python 3.11+ MCP Tools: 25

Free, open-source MCP server that connects Claude to the Shopify Partner API. 25 tools for revenue analytics, churn analysis, retention cohorts, merchant health scoring, conversion funnels, revenue forecasting, and growth velocity.

Query your app business in natural language. No dashboards, no monthly fees.

Why This Exists

Shopify's own AI Toolkit and official MCP servers (Dev MCP, Storefront MCP, Customer Account MCP, Checkout MCP) all target the Admin API and Storefront API, which cover store operations and shopping experiences. Every third-party Shopify MCP server on GitHub does the same.

None of them connect to the Partner API. If you build Shopify apps, your revenue metrics, churn data, and merchant analytics are locked behind the Partner Dashboard with no MCP-compatible way to query them.

Shopify Partner Agent is the only MCP server that gives AI tools access to Partner API analytics: MRR, churn, retention cohorts, merchant health, and 20 more computed metrics that even the raw API doesn't provide.

Ask Claude things like:

  • "What's my MRR and how has it changed this quarter?"

  • "Who uninstalled my app this month and why?"

  • "Show me retention cohorts for the last 6 months"

  • "Which merchants are at high risk of churning?"

  • "Give me a weekly business digest"

  • "Compare all my apps side by side"

Related MCP server: saas-brain-mcp

Tools

Core Data (5)

Tool

What it does

discover_apps

Find all apps in your partner account (from config + transaction history)

get_app_details

App name, GID, and API key for a specific app

get_app_events

Install, uninstall, charge, credit events with date filtering

get_transactions

Revenue transactions filtered by app, type, and date range

get_merchants

Active, churned, or all merchants with install dates and uninstall reasons

Revenue Analytics (4)

Tool

What it does

get_revenue_summary

MRR, ARR, total revenue, growth rate, ARPU, breakdown by app and currency

get_mrr_movement

New, expansion, contraction, churn, and reactivation MRR breakdown

get_payout_report

Gross revenue, Shopify fees, net payout with per-type breakdown

get_plan_performance

Subscribers, revenue, and avg revenue per pricing tier

Customer Analytics (4)

Tool

What it does

get_churn_analysis

Revenue churn %, logo churn %, uninstall reason breakdown

get_retention_cohorts

Monthly revenue retention cohort table (values above 100% = expansion)

get_customer_ltv

LTV, ARPU, average lifespan, top and bottom 5 merchants by revenue

get_churned_merchants

Recent uninstalls with dates and reasons, sorted most recent first

Growth & Forecasting (6)

Tool

What it does

get_trial_funnel

Install-to-paid conversion rate, timing analysis, converted/unconverted lists

get_growth_velocity

Week-over-week install/uninstall/revenue trends with acceleration signals

get_install_patterns

Best day of week and time of month for installs, monthly trend

get_revenue_forecast

Project MRR for next 3-6 months based on historical growth rate

get_referral_revenue

Shopify merchant referral revenue with period comparison

get_credits_adjustments

Refunds, credits, adjustments with giveback percentage

Merchant Intelligence (4)

Tool

What it does

get_churn_risk

Score active merchants by churn risk (low/medium/high) with contributing factors

get_merchant_health

Composite health grade (A-F) based on tenure, revenue, stability, engagement

get_merchant_lookup

Full chronological timeline for a specific merchant (events + transactions)

get_business_digest

Weekly or monthly summary with highlights and period-over-period comparison

Multi-App (2)

Tool

What it does

get_revenue_anomalies

Detect unusual revenue patterns using statistical deviation

get_app_comparison

Side-by-side metrics (revenue, installs, churn, ARPU) across all apps

Install

Before you start, you need:

1. Get your Partner API credentials

You need three values. Log in to the Partners Dashboard first, then collect each one below.

SHOPIFY_ORG_ID

The number in your Dashboard URL. Once you are logged in, look at the address bar:

https://partners.shopify.com/1234567/...
                             ^^^^^^^  this is your org ID

SHOPIFY_ACCESS_TOKEN

  1. Open Settings > Partner API clients in the Dashboard.

  2. Click Create API client.

  3. Grant permissions: Manage apps and View financials.

  4. Copy the token. It is shown only once, so save it somewhere safe.

SHOPIFY_APP_IDS

One entry per app you want to query, comma-separated.

  1. Open Apps in the Dashboard and click an app.

  2. The URL ends with a numeric ID, for example /apps/9876543.

  3. Format it as a GID: gid://partners/App/9876543. Bare numeric IDs also work.

  4. Multiple apps? Join them with commas: gid://partners/App/1,gid://partners/App/2.

2. Add the server to your MCP client

Your MCP client will install and run the server automatically the first time it launches. You don't need to download, clone, or set up anything yourself.

The config you paste below tells your MCP client to run a command called uvx. On first launch, uvx fetches the server from the Python package registry (PyPI) and stores it in a local folder on your computer. After that, startup is instant.

Where the files sit:

  • macOS / Linux: ~/.cache/uv/

  • Windows: %LOCALAPPDATA%\uv\cache\

The installed package contains only the server code. It does not include your credentials, any test files, or anything else from your machine. The source is public on PyPI and GitHub, so you can audit exactly what runs.

Remove the installed copy later:

uv cache clean shopify-partner-agent

Update to the latest release: run the command above, then restart your MCP client. It fetches the newest version on the next launch.

Prefer a traditional install you can see on disk? Use the pip install option further down, or git clone the repo and run uv sync.

Claude Desktop is the most common path. Paste the block below into claude_desktop_config.json and swap in the three values from step 1:

{
  "mcpServers": {
    "shopify-partner-agent": {
      "command": "uvx",
      "args": ["shopify-partner-agent"],
      "env": {
        "SHOPIFY_ORG_ID": "your_org_id",
        "SHOPIFY_ACCESS_TOKEN": "your_token",
        "SHOPIFY_APP_IDS": "gid://partners/App/1234567"
      }
    }
  }
}

Config file location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

If the file does not exist yet, create it with the block above exactly as shown. If it already contains other MCP servers, add shopify-partner-agent inside the existing mcpServers object.

Using a different client? Open the matching section below.

One command from your terminal:

claude mcp add shopify-partner-agent uvx shopify-partner-agent \
  -e SHOPIFY_ORG_ID=your_org_id \
  -e SHOPIFY_ACCESS_TOKEN=your_token \
  -e SHOPIFY_APP_IDS=gid://partners/App/1234567

Same JSON as Claude Desktop. Open the MCP settings panel and paste the block below.

  • Cursor: Settings > MCP > Add new global MCP server, or edit ~/.cursor/mcp.json directly.

  • Windsurf: Settings > Cascade > MCP servers.

{
  "mcpServers": {
    "shopify-partner-agent": {
      "command": "uvx",
      "args": ["shopify-partner-agent"],
      "env": {
        "SHOPIFY_ORG_ID": "your_org_id",
        "SHOPIFY_ACCESS_TOKEN": "your_token",
        "SHOPIFY_APP_IDS": "gid://partners/App/1234567"
      }
    }
  }
}
pip install shopify-partner-agent

Then update your MCP config to call the installed command directly instead of uvx:

{
  "mcpServers": {
    "shopify-partner-agent": {
      "command": "shopify-partner-agent",
      "env": {
        "SHOPIFY_ORG_ID": "your_org_id",
        "SHOPIFY_ACCESS_TOKEN": "your_token",
        "SHOPIFY_APP_IDS": "gid://partners/App/1234567"
      }
    }
  }
}

Open any LLM chat and paste the prompt below. It asks which client you use and generates the exact config file path and JSON for you.

I want to install the shopify-partner-agent MCP server. It is a Python package on PyPI that connects AI assistants to the Shopify Partner API for revenue, churn, cohort, and merchant analytics.

Walk me through setup step by step:

1. Ask which MCP client I use: Claude Desktop, Claude Code, Cursor, or Windsurf.
2. Explain how to create a Shopify Partner API access token: Partners Dashboard > Settings > Partner API clients > Create API client. Required scopes: "Manage apps" and "View financials". The token is shown only once, so I need to copy it.
3. Explain how to find my app GIDs. The format is gid://partners/App/1234567 and the numeric ID is visible in the Partners Dashboard URL when I open an app.
4. Generate the MCP config for the client I picked. Use the command "uvx" with args ["shopify-partner-agent"] and these placeholder env vars: SHOPIFY_ORG_ID=<my_org_id>, SHOPIFY_ACCESS_TOKEN=<my_token>, SHOPIFY_APP_IDS=<comma_separated_app_gids>.
5. Tell me the exact config file path for my client on macOS and Windows, and where in that file the mcpServers section goes.
6. Tell me to replace the placeholders on my own machine. Do NOT ask me to paste my real token into this chat.
7. Tell me to fully quit and relaunch the MCP client, then confirm the 25 shopify-partner-agent tools appear.

Reference: https://github.com/rushikeshmore/shopify-partner-agent
Package:   https://pypi.org/project/shopify-partner-agent/

Keep your access token out of chat. Generate the config with placeholders, then fill in the real token locally.

3. Restart your MCP client and verify

Save the config, then fully quit and relaunch your MCP client. Most clients only read config at startup, so a window reload will not pick it up. After the client restarts, look for shopify-partner-agent in the tools or MCP menu. It should appear as connected with 25 tools. If something is off, see Troubleshooting.

4. Start using it

> Show me my Shopify apps
> What's my churn rate this month?
> Who uninstalled recently and why?
> Give me a full health check of my app business
> Score my merchants by churn risk

missing required env vars: SHOPIFY_ORG_ID, ... Credentials aren't reaching the server. Double-check the env block in your MCP client config above, then fully restart the client.

401 Unauthorized or token errors The access token is wrong or missing scopes. Recreate it in Partners Dashboard with Manage apps + View financials and update your config.

App ID format errors App IDs must be GIDs: gid://partners/App/1234567. Bare numeric IDs won't work. Copy the correct format from the Partners Dashboard URL when you open the app.

Tools don't show up in Claude Desktop, Cursor, or Windsurf Fully quit and relaunch the MCP client after editing config. Most clients only read config at startup.

uvx is stuck on an old version after a release Clear the cache and retry: uv cache clean shopify-partner-agent.

Analytics Formulas

All formulas match industry-standard SaaS metrics:

Metric

Formula

MRR

Event-aware: subscription + usage MRR per active merchant (annual / 12, usage trailing 30d). Two-track status model: relationship (installed/uninstalled) + subscription (frozen/canceled/expired). Falls back to charge-based when events unavailable.

Net New MRR

New + Reactivation + Expansion - Contraction - Churn

Quick Ratio

(New + Expansion + Reactivation) / (Contraction + Churn)

Reactivation MRR

Revenue from previously-churned merchants who reinstalled

Revenue Churn %

(Churned MRR + Contraction) / Starting MRR x 100

Logo Churn %

Uninstalled merchants / Starting merchants x 100

LTV

ARPU x Average lifespan

ARPU

Total net revenue / Active merchants (excludes churned when events available)

Retention

Revenue in month N / Revenue in month 0 (per cohort)

Health Score

Tenure (0-25) + Revenue (0-25) + Stability (0-25) + Engagement (0-25)

Churn Risk

5 heuristic signals: deactivations, cancellations, reinstalls, declining charges, inactivity

Growth Velocity

Week-over-week install/revenue trends, revenue grouped by currency

Requirements

  • Python 3.11+

  • Shopify Partner account with API access

  • Any MCP-compatible client (Claude Code, Claude Desktop, Cursor, Windsurf)

Data Privacy

  • Direct API access. All Partner API calls go from your machine to Shopify. No proxy, no intermediate server, no cloud component operated by this project.

  • No telemetry. This server does not send usage, analytics, or error data anywhere. If you block every network except partners.shopify.com, it still works.

  • Credentials stay local. Your access token lives in your MCP client config (or .env if running from source). It never leaves your machine except to authenticate with Shopify.

  • Query results flow to your LLM. Tool responses return to your MCP client and are passed to whichever LLM provider you've configured (Anthropic, OpenAI, etc.), so the data you query becomes visible to that provider under their terms. This is inherent to how MCP works, not specific to this server.

  • Open source, MIT-licensed. Auditable at src/shopify_partner_agent/.

License

MIT. See LICENSE.

Available Tools

25 tools
discover_appsA

Discover all Shopify apps in your partner account.

Checks configured app IDs from .env AND scans recent transactions for additional apps. Returns app GIDs and names -- use these IDs for all other tools.

Returns: JSON string with keys: apps (list of id/name dicts), count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that it reads .env and scans transactions, which goes beyond a generic 'discover' label. It also specifies the return format as a JSON string with apps and count. While it doesn't mention side effects or permissions, the behavior described is transparent for a read-only discovery operation.

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 concise and well-structured: it opens with the primary purpose, explains the method, gives guidance on usage, and then describes the return payload. Every sentence adds value, and there is no fluff or repetition.

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 has no parameters, an output schema is present, and it is a foundational discovery tool among analytics-focused siblings, the description fully covers the necessary context. It explains what it does, how it works, and why the output is needed, making it complete for an agent to select and 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, and schema coverage is 100% (trivially). The description explains what the tool does without needing to describe parameter semantics, which is appropriate. It does not add parameter-specific details, but none are needed.

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 purpose: 'Discover all Shopify apps in your partner account.' It explains the method (checks .env config and scans transactions) and distinguishes itself from siblings by noting the returned IDs should be used with all other tools. This is specific and unambiguous.

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 instructs to 'use these IDs for all other tools,' which informs when this tool should be used (as a discovery prerequisite). However, it does not explicitly mention sibling alternatives or situations where this tool should not be used, though the purpose is clear enough.

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

get_app_comparisonA

Compare metrics across all your Shopify apps side by side.

Args: period: '7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'.

Returns: JSON string with per-app comparison including revenue, installs, uninstalls, churn rate, and LTV.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return format (JSON string) and the accepted period values, which is useful. However, it does not mention permissions, rate limits, side effects, or limitations. Since the operation is clearly read-only, the omission is a minor gap.

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 concise and well-structured: the purpose is stated in the first sentence, followed by the argument and return format. Every sentence provides value with no redundancy or excess length.

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 tool is simple (one optional parameter), and the description covers its purpose and parameter format. An output schema exists, so detailed return fields are predefined. Missing details like timezone handling or default behavior are minor given the straightforward scope.

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?

The input schema only defines period as a string with a default, but the description enriches it with the exact allowed values ('7d', '30d', '90d', '1y', or a date range) and the return format. This fully compensates for the 0% schema description 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 'Compare metrics across all your Shopify apps side by side,' using a specific verb (compare) and resource (metrics across all apps). This distinguishes it from siblings like get_app_details (single app) and get_churn_analysis (churn-specific).

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?

The description implies the use case—comparing metrics across all apps—but does not explicitly mention alternatives or when not to use this tool. There is no comparison to sibling tools or prerequisites, so guidance is implicit rather than explicit.

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

get_app_detailsA

Get details for a specific Shopify app.

Args: app_id: App GID (e.g., 'gid://partners/App/1234') or numeric ID.

Returns: JSON string with app name, API key, and GID.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the return format ('JSON string with app name, API key, and GID') and the input format, but does not mention error handling (e.g., invalid ID), authentication requirements, or explicitly confirm read-only semantics, though 'Get' implies it. This is adequate for a simple read operation but leaves some gaps.

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 highly concise and well-structured: a one-line purpose summary followed by explicit Args and Returns sections. Every sentence contributes valuable information without any filler, and the front-loaded purpose ensures quick understanding.

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 low complexity (single required parameter, simple read operation) and the presence of an output schema (per context signals), the description is nearly complete. It specifies the input format, the output fields, and the scope ('specific app'). It could mention error behavior or permissions, but these are less critical for a simple get-by-id tool.

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?

The input schema only defines app_id as a string with no description, but the Args section in the description fully compensates by explaining it accepts either a GID (with a concrete example) or a numeric ID. This adds meaning far beyond the schema and makes the parameter's format and valid values clear.

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 it retrieves details for a specific Shopify app, using the verb 'Get' and a distinct resource ('details for a specific Shopify app'). The listed return fields (app name, API key, GID) differentiate this from sibling aggregate/comparison tools like get_app_comparison or get_app_events, making its purpose unmistakable.

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?

The usage context is implied by the phrase 'specific Shopify app' (use when you need details for one app), but there is no explicit guidance on when to use this tool versus alternatives, nor any mention of when not to use it. No alternative tools are named, so the guidance is only implied.

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

get_app_eventsA

Get app events (installs, uninstalls, charges, etc.) for a specific app.

Args: app_id: App GID or numeric ID (required). event_types: Comma-separated filter. Available types: RELATIONSHIP_INSTALLED, RELATIONSHIP_UNINSTALLED, RELATIONSHIP_DEACTIVATED, RELATIONSHIP_REACTIVATED, SUBSCRIPTION_CHARGE_ACCEPTED, SUBSCRIPTION_CHARGE_ACTIVATED, SUBSCRIPTION_CHARGE_CANCELED, SUBSCRIPTION_CHARGE_DECLINED, ONE_TIME_CHARGE_ACCEPTED, ONE_TIME_CHARGE_DECLINED, CREDIT_APPLIED, CREDIT_PENDING, CREDIT_FAILED date_from: Start date (YYYY-MM-DD format, optional). date_to: End date (YYYY-MM-DD format, optional). limit: Max events to return (default 100).

Returns: JSON string with keys: events (list with type, shop, date), count, app_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
app_idYes
date_toNo
date_fromNo
event_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the return format ('JSON string with keys: events (list with type, shop, date), count, app_id'), enumerates all valid event type values, and mentions the default limit. This is solid transparency, though it does not discuss error handling, authentication, or pagination details.

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 well-structured with 'Args' and 'Returns' sections, lists the event types compactly, and contains no filler. It is appropriately detailed without being bloated, making it easy to scan and parse.

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 covers all parameters and return shape, which is sufficient for a read-only event listing operation. It does not mention pagination or how this tool relates to other app-level analytics tools, but given that it has no annotations and a simple schema, this is a minor gap.

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?

The input schema has no descriptions, but the description compensates fully by explaining every parameter: app_id, event_types with the complete list of allowed values, date_from and date_to with format, and limit with default. This gives the agent everything needed to construct correct arguments.

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 'Get app events (installs, uninstalls, charges, etc.) for a specific app,' which uses a specific verb and resource and clearly distinguishes this tool from sibling analytics tools like get_transactions or get_revenue_summary. The scope is unambiguous: events for a single 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 clearly implies when to use the tool: to retrieve events for a specific app, with optional filters by event type and date range. It does not explicitly mention alternatives or when-not-to-use, but the context is clear enough for an agent to select it appropriately among siblings.

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

get_business_digestA

Get a business digest with key metrics and highlights.

Args: app_id: App GID or numeric ID (required). period: '7d' (weekly), '30d' (monthly), or custom range.

Returns: JSON string with period summary, comparison to previous period, highlights, new installs, and recent churns.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes
periodNo7d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return value: 'JSON string with period summary, comparison to previous period, highlights, new installs, and recent churns.' This is helpful, but it omits details like error handling, custom range formatting, or any rate limits. It gives enough to understand the output but not deeper behavioral traits.

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 well-structured: a one-sentence purpose, followed by Args and Returns sections. Every sentence adds value, with no fluff. The format is front-loaded and easily parseable.

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 tool is moderately simple (2 params, output schema present). The description covers purpose, all parameters, and return format. It lacks error scenarios or prerequisites, but for a read-only digest tool this is sufficient. Given the sibling tools, it could mention when to use this digest vs more focused tools, but overall it is complete enough.

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?

The schema has no parameter descriptions (0% coverage), so the description compensates fully. It explains app_id as 'App GID or numeric ID (required)' and period as '7d' (weekly), '30d' (monthly), or custom range.' This adds concrete meaning beyond the schema's minimal title and default fields.

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's purpose: 'Get a business digest with key metrics and highlights.' This is a specific verb+resource combination. However, it does not explicitly distinguish this from sibling tools like get_revenue_summary or get_churn_analysis, though the 'digest' framing implies a combined overview.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It gives parameter usage (app_id and period) but no context on scenarios where this digest is preferred over get_revenue_summary or get_churn_analysis. There are no explicit exclusions or alternative tool references.

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

get_churn_analysisA

Get churn metrics: revenue churn %, logo churn %, uninstall reasons.

Args: app_id: App GID or numeric ID (required). period: '7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'.

Returns: JSON string with logo_churn, revenue_churn, and uninstall_reasons breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes
periodNo30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It does state that the return is a JSON string and lists the returned metrics, which is useful, but it does not mention error behavior, authentication, rate limits, or whether the operation is read-only (implied by 'Get'). Since the output schema already covers the return format, this adds minimal 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?

The description is concise and well-structured: a one-line summary followed by explicit Args and Returns sections. No wasted words, and the most important information is front-loaded.

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 two-parameter read tool, the description covers the purpose, parameter formats, and return type. It is sufficiently complete for an agent to invoke the tool correctly, though it lacks contextual guidance on when to use it relative to siblings. The presence of an output schema reduces the need to detail return values.

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?

Schema description coverage is 0%, so the description's Args section is essential. It explains that app_id accepts 'App GID or numeric ID' and is required, and it enumerates valid period values ('7d', '30d', '90d', '1y', or a date range). This adds substantial meaning beyond the bare schema titles.

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 opens with 'Get churn metrics: revenue churn %, logo churn %, uninstall reasons,' which clearly states the exact purpose and specific output fields. This distinguishes it from sibling tools like get_churn_risk and get_churned_merchants by naming distinct metrics.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. Sibling tools such as get_churn_risk and get_retention_cohorts are related, but the description does not mention when to choose this over those or any exclusions.

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

get_churned_merchantsA

Get recently churned merchants with uninstall reasons.

Args: app_id: App GID or numeric ID (required). days: Look back period in days (default 30).

Returns: JSON string with churned merchant list including shop name, domain, uninstall date, and reason. Sorted most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description must be self-reliant. It discloses the return format (JSON string with specific fields) and that results are sorted most recent first, which is valuable. However, it does not explicitly state that this is a safe, read-only operation, nor does it mention any permissions or limitations. Since 'get' implies read-only, this is adequate but not fully transparent.

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, breaking naturally into action, args, and returns. Every sentence adds necessary information without redundancy. It is appropriately sized for the tool's simplicity and is front-loaded with the core purpose.

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's low complexity (2 parameters) and the presence of an output schema, the description covers the essential aspects: purpose, arguments, and return format with sorting. It lacks explicit mention of pagination, limit sizes, or error conditions, but for a straightforward 'get' operation this is sufficient. The description is nearly complete, missing only optional edge-case behavior.

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?

The input schema has zero descriptions, so the description fully compensates by explaining both parameters: app_id is a required App GID or numeric ID, and days is an optional look-back period with a default of 30. This adds clear meaning beyond the raw schema types and is especially valuable given the 0% schema description 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 begins with 'Get recently churned merchants with uninstall reasons,' which clearly states the action (get), the resource (recently churned merchants), and a distinctive detail (uninstall reasons). This differentiates it from sibling tools like get_churn_analysis or get_churn_risk, making the purpose unmistakable.

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?

The description gives a clear context for what the tool does and what arguments are needed, so an agent can infer when to use it (when a list of churned merchants with reasons is required). However, it does not explicitly mention alternatives or state when not to use this tool, which keeps it at an 'implied usage' level rather than providing explicit guidance.

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

get_churn_riskA

Score active merchants by churn risk (low/medium/high).

Args: app_id: App GID or numeric ID (required).

Heuristic signals: deactivation events, subscription cancellations, reinstall patterns, declining charges, long inactivity.

Returns: JSON string with risk summary and merchant lists grouped by risk level (high/medium/low) with contributing factors.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well by disclosing heuristic signals (deactivation events, subscription cancellations, etc.) and the exact return structure (JSON string with risk summary and grouped merchant lists). It does not mention side effects or permissions, but the read-only nature is implied.

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 well-structured with clear sections for purpose, args, heuristic signals, and returns. Every sentence adds value, and it is appropriately concise without extraneous detail.

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's simplicity (one parameter), the description covers the main aspects: purpose, input, behavior, and output. It does not explicitly differentiate from get_churn_analysis or get_churned_merchants, which slightly reduces completeness, but overall it is sufficiently self-contained.

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 description coverage is 0%, and the description compensates by explaining that app_id can be 'App GID or numeric ID', adding meaning beyond the bare schema property. It clearly labels the parameter as required and gives a brief but useful type clarification.

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 starts with a clear verb and resource: 'Score active merchants by churn risk' and specifies the output levels (low/medium/high). It is specific but does not explicitly differentiate from sibling tools like get_churn_analysis or get_churned_merchants.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. There is no mention of suitable conditions, exclusions, or references to sibling tools. The description simply states what it does without contextual usage advice.

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

get_credits_adjustmentsA

Track credits, adjustments, and refunds.

Args: app_id: Filter by app (optional). period: '7d', '30d', '90d', '1y', or custom range.

Returns: JSON string with credit/adjustment totals, giveback percentage, and individual transaction details.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
periodNo90d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return format (JSON string with totals, giveback percentage, transaction details) and parameters, but does not mention potential side effects, limitations, or behaviors like timezone handling, pagination, or custom range format. For a read-only 'get' tool, the lack of mutation disclosure is acceptable, but deeper behavioral context is missing.

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 concise and well-structured with a clear purpose line, an Args section, and a Returns section. Every sentence adds value and there is no fluff or repetition of schema content.

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 tool has a simple signature (2 optional params, output schema) and the description covers purpose, parameters, and returns. It is sufficiently complete for a basic read tool, but lacks details on custom range formatting and any behavioral caveats, which would be needed for a more complex operation.

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 description coverage is 0%, but the description compensates well by explaining both parameters: app_id as optional filter and period with allowed values ('7d', '30d', '90d', '1y', or custom range). It adds meaning beyond the bare schema; however, it does not clarify the exact format for a custom range or other edge cases.

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 tracks credits, adjustments, and refunds, which is specific and distinguishes it from sibling tools like get_transactions (general transactions) and get_revenue_summary (broader revenue). The verb 'Track' and resource scope are clear.

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?

The purpose implies usage when credit/adjustment/refund tracking is needed, but there is no explicit when-to-use or alternative comparisons. Given the many sibling tools, more explicit guidance on choosing this over get_transactions or get_revenue_summary would improve clarity.

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

get_customer_ltvA

Get customer lifetime value (LTV), ARPU, and merchant rankings.

Args: app_id: Filter by app (optional).

Returns: JSON string with LTV, ARPU, average lifespan, and top/bottom 5 merchants by total revenue.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description discloses the return format ('JSON string with LTV, ARPU, average lifespan, and top/bottom 5 merchants') and the optional app_id filter. However, it does not mention any behavioral constraints such as data requirements, error handling, or whether the metrics are computed in real-time. This is minimal coverage.

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 with an Args/Returns format. Each line serves a purpose 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?

The tool is simple: one optional parameter and a well-defined return set. The description covers the purpose, parameter, and return structure. With an output schema present, this is sufficient, though it could add a brief usage note.

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 schema only provides the parameter name 'app_id' with a default value; the description adds that it is an optional filter by app. This gives enough meaning for a single parameter, compensating for the 0% schema coverage.

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 identifies the tool's function: computing customer lifetime value, ARPU, and merchant rankings. However, it does not explicitly differentiate from sibling analytics tools like get_revenue_anomalies or get_merchant_health, so it earns a 4 rather than a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternative metrics tools. It only explains the optional app_id parameter, which is parameter semantics, not usage context. This is a clear gap.

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

get_growth_velocityA

Get week-over-week growth trends with acceleration signals.

Args: app_id: App GID or numeric ID (required). weeks: Number of weeks to analyze (default 12).

Returns: JSON string with weekly install/uninstall/revenue data and acceleration/deceleration signals.

ParametersJSON Schema
NameRequiredDescriptionDefault
weeksNo
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool returns a JSON string with weekly data and acceleration signals, but it does not explicitly state read-only behavior, authentication requirements, rate limits, or other side effects. The 'Get' prefix implies safety, but it is not definitive.

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: a one-line purpose, an Args section, and a Returns section. Every sentence earns its place, and the front-loaded purpose ensures quick understanding.

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 covers the core functionality and return value, and the existence of an output schema likely fills in the detailed return structure. For a simple analytics tool with two parameters, this is sufficiently complete.

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?

With 0% schema description coverage, the description compensates by explaining app_id as 'App GID or numeric ID' and weeks as 'Number of weeks to analyze' with a default of 12. This adds meaning beyond the raw schema and covers both parameters adequately.

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 the verb 'Get' and clearly identifies the resource: 'week-over-week growth trends with acceleration signals.' It distinguishes from siblings by highlighting acceleration signals and listing specific metrics (installs/uninstalls/revenue), making it distinct from related analytics tools.

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?

The description implies usage for analyzing growth velocity but does not explicitly state when to use this tool versus alternatives. No exclusions or preferred sibling tools are mentioned, so the context is only implied.

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

get_install_patternsA

Analyze install patterns by day of week and time of month.

Args: app_id: App GID or numeric ID (required).

Returns: JSON string with install counts by day of week, month period, monthly trend, and best day for installs.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the responsibility for behavioral disclosure. It explicitly describes the return format (JSON string with specific fields), which goes beyond the basic 'analyze' verb. While it doesn't discuss rate limits or authentication, the read-only analytical nature is implied. This level of detail is commendable for a non-mutating analytics tool.

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: a one-sentence summary followed by concise args and returns sections. It avoids verbosity and front-loads the core purpose. Every sentence contributes essential information.

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 one-parameter tool, the description covers the input semantics and explicitly lists the output fields included in the JSON string. The presence of an output schema reduces the need to explain return structures in detail, but the description still provides a useful overview. No major gaps exist for a read-only analytics tool.

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?

The schema only provides the parameter name and type, with 0% coverage. The description compensates by specifying the accepted format ('App GID or numeric ID') and marks it as required. This adds meaningful semantic value beyond the structural 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 analyzes install patterns and specifies the dimensions (day of week, time of month). It uses a specific verb and resource, and the scope of analysis is apparent. This distinguishes it from sibling analytics tools like get_app_events or get_revenue_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?

The context is clear: use this tool to fetch install pattern analytics for a specific app. It does not explicitly name alternatives or exclusions, but the detailed focus on install patterns makes the intended use apparent. No misleading guidance is present.

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

get_merchant_healthA

Score merchants with a composite health grade (A-F).

Args: app_id: App GID or numeric ID (required).

Grades based on 4 dimensions (0-25 each, total 0-100):

  • Tenure: how long installed

  • Revenue: total and recent charges

  • Stability: no deactivations/reinstalls

  • Engagement: recent activity

A (85+), B (70-84), C (55-69), D (40-54), F (<40).

Returns: JSON string with grade distribution summary and per-merchant health scores with dimensional breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It fully discloses the composite scoring methodology, dimensions, grade thresholds, and return format, which is substantial behavioral context beyond a simple one-liner. It doesn't mention potential side effects or data freshness, but for a read-only analytics tool, this is adequate.

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 well-structured with a clear opening statement, an Args section, a concise breakdown of grading dimensions, and a Returns section. Every sentence adds value, and the length is appropriate for the tool's complexity.

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 explains the purpose, parameters, grading logic, thresholds, and output structure. Despite the tool's complexity, the description provides enough context for an agent to correctly invoke and interpret results. The presence of an output schema reduces the need to explain return types further, but the description already covers the key details.

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?

The schema only shows app_id as a string without description. The description compensates fully by explaining app_id as 'App GID or numeric ID (required)', adding critical format and requirement context 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 'Score merchants with a composite health grade (A-F)' using a specific verb (score) and resource (merchants with health grade). It distinguishes from siblings by specifying the composite health grade focus, which differs from churn, retention, or revenue 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 clearly indicates it is for scoring merchant health, and the required app_id is specified. While it doesn't explicitly state when not to use it or name alternatives, the context is clear enough that an agent would understand when to invoke it.

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

get_merchant_lookupA

Get full timeline for a specific merchant.

Args: app_id: App GID or numeric ID (required). shop_domain: The merchant's myshopify.com domain (required). Example: 'my-store.myshopify.com'

Returns: JSON string with merchant status, revenue total, and full chronological timeline of events and transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes
shop_domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states the return format (JSON string) and the contents (merchant status, revenue total, full chronological timeline), and it clarifies that both app_id and shop_domain are required. It doesn't explicitly note side effects (none expected for a lookup), but the provided details suffice for a read-only operation.

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 efficiently organized with 'Args' and 'Returns' sections. It uses only two short paragraphs and includes an example, with no redundant or filler content. Every sentence adds useful information.

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 this is a simple two-parameter lookup with no annotations, the description covers the essential aspects: what it does, required inputs, and the output structure. It lacks explicit usage timing or error/rate-limit caveats, but for a read-only single-merchant lookup, it is largely complete.

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 schema provides only parameter names and types. The description enriches both parameters: app_id is explained as 'App GID or numeric ID' and shop_domain is given a concrete example ('my-store.myshopify.com'). This goes beyond the bare string types and clarifies expected input formats.

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 opens with 'Get full timeline for a specific merchant', which clearly identifies the action (get) and resource (full timeline for a merchant). It distinguishes from sibling tools by emphasizing a single merchant's chronological events, unlike tools like get_merchants or get_churn_analysis.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over get_merchant_health or get_transactions, nor does it state any exclusions. The only implied context is 'specific merchant', but there is no comparative direction.

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

get_merchantsA

List merchants (stores) using a specific app.

Args: app_id: App GID or numeric ID (required). status: 'active' (current installs), 'churned' (uninstalled), or 'all' (both). Default 'active'.

Derived from app events.

Returns: JSON string with keys: merchants (list with shop, status, dates, reasons), count, summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes
statusNoactive

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It discloses the data source ('Derived from app events'), the default status behavior, and the return structure (JSON string with keys). It does not explicitly state read-only or permissions, but it is a list operation and the description is informative enough for a safe read.

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 efficiently structured with Args and Returns sections, no filler, and each sentence adds value. It packs necessary details into a clear, scannable format.

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 two-parameter list tool with an output schema, the description covers purpose, parameter semantics, data origin, and return shape. It is complete for selection and invocation without redundancy.

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?

Schema description coverage is 0%, but the description fully compensates by explaining app_id as 'App GID or numeric ID (required)' and status with exact allowed values and default. This is exactly the needed guidance beyond the bare 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 a specific verb and resource: 'List merchants (stores) using a specific app.' This distinguishes the tool from siblings like get_merchant_lookup or get_churned_merchants by emphasizing the app-scoped, list-oriented nature.

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?

Parameter usage is well explained with status options and default, but there is no explicit when-to-use versus alternatives. The 'Derived from app events' note gives some context, but the description does not reference sibling tools like get_churned_merchants or edge cases.

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

get_mrr_movementA

Get MRR movement breakdown: new, expansion, contraction, churn, reactivation.

Args: app_id: Filter by app (optional). period: '7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'.

Shows how MRR changed between current and previous period.

Returns: JSON string with new, expansion, contraction, churn, reactivation MRR values and net new MRR.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
periodNo30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of disclosing behavior. It does mention the return format (JSON string) and that it compares current vs previous period, which is useful. However, it does not explicitly state that this is a read-only operation, nor does it disclose any edge cases or calculation caveats, leaving some gaps.

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 concise and well-structured: a one-line purpose, a short Args section, a clarifying sentence, and a Returns section. It is front-loaded with the core purpose, and every sentence contributes necessary information without 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?

Given the tool's simplicity (2 optional parameters, no nested objects), the description is complete. It covers the purpose, parameter semantics, and return format, leaving the agent with enough information to invoke it correctly. The presence of an output schema is complemented by the description's explicit listing of return fields.

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?

The input schema has 0% description coverage, but the description fully documents both parameters: app_id is described as an optional filter, and period has its allowed values ('7d', '30d', '90d', '1y', or a date range) explicitly listed. This adds significant meaning beyond the schema's plain type and default fields.

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 opens with 'Get MRR movement breakdown' and enumerates specific components (new, expansion, contraction, churn, reactivation), making the tool's purpose concrete and distinct from broader revenue metrics. It further clarifies scope by stating it shows how MRR changed between current and previous period, which distinguishes it from sibling tools that focus on summaries or churn only.

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 clearly implies when to use this tool (whenever an MRR movement breakdown is needed) and provides context for the period parameter with valid values. However, it does not explicitly mention alternatives or state when not to use this tool, so it falls short of full guidance.

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

get_payout_reportA

Get payout summary: gross revenue, Shopify fees, net payout.

Args: app_id: Filter by app (optional). period: '7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'.

Returns: JSON string with gross, fees, net totals and per-type breakdown. Note: amounts are for analytics, not accounting.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
periodNo30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the return format (JSON string with specific fields) and adds a caveat that amounts are for analytics, not accounting. This goes beyond a simple 'get' and provides useful behavioral context. However, it doesn't mention side effects (though it's a read operation) or authentication requirements.

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 well-structured: a one-sentence summary, followed by Args and Returns sections. The caveat is included. 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?

Given the tool's simplicity, an output schema exists, and the description covers the return values and note. It also explains parameters sufficiently. The description is complete for an AI agent to invoke it correctly.

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?

The input schema has 0% coverage, but the description compensates with an explicit Args section explaining app_id as an optional filter and period with valid values like '7d', '30d', and date ranges. This fully adds 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 gets a payout summary with specific components (gross revenue, Shopify fees, net payout). This distinguishes it from sibling tools like get_revenue_summary, which cover different metrics.

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 doesn't explicitly mention alternatives or when-not-to-use, but the context is clear: it's for payout reports. The parameter details (app_id, period) indicate it's for filtering payout data. No exclusions or sibling comparisons are provided, so a 4.

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

get_plan_performanceA

Get metrics per pricing plan tier.

Args: app_id: Filter by app (optional). period: '7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'.

Returns: JSON string with subscribers, total revenue, avg revenue per merchant for each inferred pricing tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
periodNo30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return format (JSON string) and the specific metric fields (subscribers, total revenue, avg revenue per merchant). However, it does not note that this is a read-only operation, potential data inference caveats, or any error/timezone behaviors. The 'inferred pricing tier' hint adds some transparency but is not elaborated.

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 well-structured docstring with Args and Returns sections, front-loading the main purpose. Every sentence is necessary, with no fluff or repetition.

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 tool is simple with two optional parameters, and the description covers the parameters, accepted values, return format, and key metrics. It lacks context on when to use it or what 'inferred pricing tier' means, but the presence of an output schema (per signal) and the low complexity make this moderately complete.

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?

Schema coverage is 0%, but the description fully explains both parameters: app_id is 'Filter by app (optional)' and period lists all accepted formats including '7d', '30d', '90d', '1y', and an explicit date range. This adds essential meaning beyond the bare 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 opens with a clear verb and resource: 'Get metrics per pricing plan tier.' This specifies exactly what the tool does and distinguishes it from sibling analytics tools by focusing on plan-tier-level metrics rather than overall revenue or churn.

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?

The description implies usage through its purpose but does not explicitly state when to use this tool over alternatives like get_revenue_summary or get_mrr_movement. No exclusions or alternative references are provided, leaving the agent to infer applicability.

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

get_referral_revenueA

Track referral revenue from merchant referrals to Shopify.

Args: period: '7d', '30d', '90d', '1y', or custom range.

Returns: JSON string with total referral revenue, count, previous period comparison, and individual referral details.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo90d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses that the output is a JSON string with specific fields (total revenue, count, comparison, details) and period options, which adds useful behavioral context. However, it does not explicitly mention read-only status, data freshness, or custom range format.

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 concise and well-structured with purpose, args, and returns sections. Every sentence provides value with no 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?

For a simple one-parameter tool with an output schema, the description is nearly complete: it states purpose, parameter options, and return composition. Minor gaps like custom range syntax or timezone handling prevent a perfect score.

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 schema has no parameter descriptions (0% coverage), but the description compensates by enumerating valid period values ('7d', '30d', '90d', '1y', or custom range) and implying the default. This adds meaning beyond the bare 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 'Track referral revenue from merchant referrals to Shopify' with a specific verb and resource, distinguishing it from sibling analytics tools focused on churn, LTV, or revenue forecasts.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. It does not reference sibling tools or provide contextual decision criteria, only describing what the tool does.

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

get_retention_cohortsA

Get monthly revenue retention cohort table.

Args: app_id: Filter by app (optional). months: How many months to track per cohort (default 12).

Returns: JSON string with monthly cohort table showing revenue retention percentages. Values above 100% indicate expansion.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
monthsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Without annotations, the description carries the full burden. It discloses the return format (JSON string with monthly cohort table) and the meaning of values above 100% (expansion), which adds useful behavioral context. However, it does not explicitly state that this is a read-only operation or describe any side effects or permissions needed, though 'Get' implies safety.

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 with separate sections for purpose, args, and returns. Every sentence adds value, with no redundant information.

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 covers purpose, parameters, and return value, making it adequate for a simple read-only tool with only two optional parameters. It also provides a useful interpretation of the output (>100% indicates expansion). However, it could be more explicit about the default behavior when app_id is empty, but the overall completeness is high.

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 input schema provides no descriptions (0% coverage), so the description is essential. It explains 'app_id' as 'Filter by app (optional)' and 'months' as 'How many months to track per cohort (default 12),' which adds meaning beyond the raw schema. Both parameters are adequately explained.

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 'Get monthly revenue retention cohort table' – a specific verb and resource. This distinguishes it from sibling tools like get_churn_analysis or get_customer_ltv by focusing on retention cohorts.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. 'Get monthly revenue retention cohort table' implies a use case but does not mention exclusions or alternative tools. There is no context such as 'for churn analysis, use X instead.'

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

get_revenue_anomaliesA

Detect unusual patterns in revenue.

Args: app_id: Filter by app (optional). lookback_days: Analysis window in days (default 90).

Returns: JSON string with anomaly list (date, amount, expected, deviation, type). Empty list if no unusual patterns found.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
lookback_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return format (JSON string with date, amount, expected, deviation, type) and the empty-list behavior, but it does not mention permissions, data freshness, or what 'unusual' means algorithmically. There is 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?

The description is well-structured with a one-sentence purpose, an Args block, and a Returns block. It is concise and front-loaded, with no wasted words.

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 tool is simple with two optional parameters and an output schema. The description covers purpose, parameters, and returns, making it self-contained. It could add more context about anomaly types, but it is not necessary for a basic understanding.

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 description coverage is 0%, so the description must compensate. It explains app_id as 'Filter by app (optional)' and lookback_days as 'Analysis window in days (default 90)', adding meaning beyond the schema's type/default. Both parameters are addressed.

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 opens with 'Detect unusual patterns in revenue', which is a specific verb and resource. It clearly distinguishes itself from siblings like get_revenue_summary and get_revenue_forecast by focusing on anomaly detection.

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?

The description implies when to use this tool (when revenue anomalies are of interest) but provides no explicit exclusion or comparison with alternatives. It does not mention, for example, 'use this to identify outliers rather than forecast trends'.

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

get_revenue_forecastA

Project future MRR for the next 3-6 months.

Args: app_id: Filter by app (optional). forecast_months: How many months to project (default 6).

Returns: JSON string with current MRR, growth rate, historical data, monthly projections, and projected ARR.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
forecast_monthsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It explains the return format ('JSON string with current MRR, growth rate, historical data, monthly projections, and projected ARR') and parameter defaults. It does not explicitly state that the operation is read-only, but the 'get' prefix and return-focused description imply safe behavior. Adding an explicit 'does not modify data' statement would make it a 5.

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 concise and well-structured: a one-sentence purpose followed by labeled Args and Returns sections. Every sentence provides useful information with 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?

The tool has only two optional parameters and an output schema (not shown but indicated as present). The description explains the return contents and parameter options, making it sufficiently complete for an agent to select and invoke the tool correctly. No additional context is necessary.

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?

The input schema has no descriptions (0% coverage), but the description fully compensates by explaining each parameter: 'app_id: Filter by app (optional)' and 'forecast_months: How many months to project (default 6).' This adds meaningful semantics beyond the schema's bare type/default information.

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 purpose: 'Project future MRR for the next 3-6 months.' This uses a specific verb ('project') and resource ('future MRR'), and the time horizon distinguishes it from siblings like get_revenue_summary or get_mrr_movement.

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 clear context for when to use the tool (when future MRR projections are needed) but does not explicitly mention alternatives or when-not scenarios. It implies usage without exclusions, earning a 4 rather than 5.

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

get_revenue_summaryA

Get revenue analytics: MRR, ARR, total revenue, growth rate, ARPU.

Args: app_id: Filter by app (optional, defaults to all apps). period: '7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'.

Returns: JSON string with MRR, ARR, total net revenue, Shopify fees, growth rate vs. previous period, ARPU, and breakdown by app and currency.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo
periodNo30d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It discloses the return format (JSON string with metrics), parameter filters, and accepted period values. It does not explicitly declare read-only behavior, but the verb 'Get' and analytics nature imply no side effects, and the description adds context beyond schema 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 compact, front-loads the purpose in the first sentence, and uses clear sections for Args and Returns. Every sentence provides necessary information without 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?

The tool has only two optional parameters, both fully explained with defaults and allowed values. The return payload is described in detail. Given the output schema exists, the description is sufficiently complete for an agent to select and invoke the tool correctly.

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?

The input schema has no descriptions (0% coverage), so the description fully compensates. It explains app_id's optionality and default behavior and enumerates all valid period values including the date range format. This is essential for correct invocation.

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 revenue analytics with specific metrics (MRR, ARR, total revenue, growth rate, ARPU). This verb+resource+scope distinguishes it from sibling analytics tools like get_churn_analysis and get_revenue_anomalies.

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?

The description provides parameter usage but does not explicitly state when to use this tool versus alternatives. No exclusions or alternative tool recommendations are given; usage context is implied by the tool's name and the fact it returns a revenue summary.

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

get_transactionsA

Get revenue transactions from your Shopify Partner account.

Args: app_id: Filter by specific app (optional). date_from: Start date YYYY-MM-DD (optional). date_to: End date YYYY-MM-DD (optional). transaction_types: Comma-separated filter. Types: APP_SUBSCRIPTION_SALE, APP_USAGE_SALE, APP_ONE_TIME_SALE, APP_SALE_ADJUSTMENT, APP_SALE_CREDIT, SERVICE_SALE, REFERRAL_TRANSACTION limit: Max transactions (default 100).

Returns: JSON string with keys: transactions (list with type, amount, app, shop, date), count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
app_idNo
date_toNo
date_fromNo
transaction_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return format and transaction types, which is helpful. But it doesn't mention behavior like whether filters are required, whether pagination is supported beyond a limit, or any error conditions. Still, for a read-only tool, the core behavior is clear.

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 structured with Args and Returns sections, front-loaded with the purpose. It includes necessary detail without fluff. The transaction type list is long but required for correct usage.

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 covers the main purpose, all parameters, and the return structure. It also includes a count in the response. Given the moderate complexity and the presence of an output schema, this is adequate, though it doesn't address potential edge cases or pagination beyond the limit parameter.

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?

Schema description coverage is 0%, so the description must compensate. It does so thoroughly: each parameter (app_id, date_from, date_to, transaction_types, limit) gets an explanation, including the accepted values for transaction_types and the default for limit. This exceeds the schema's minimal info.

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 'Get revenue transactions from your Shopify Partner account,' naming a specific verb and resource. However, it does not explicitly differentiate this tool from sibling tools like get_revenue_summary or get_payout_report, so it stops short of a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool instead of alternatives. It lists arguments but does not state the scenario this tool is best suited for, or any exclusions. There is no 'use X instead' type of instruction.

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

get_trial_funnelA

Get trial-to-paid conversion funnel.

Args: app_id: App GID or numeric ID (required). period: '7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'.

Returns: JSON string with conversion funnel metrics, timing analysis, and lists of converted/unconverted merchants.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes
periodNo90d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It discloses the return type (JSON string) and the specific contents ('conversion funnel metrics, timing analysis, and lists of converted/unconverted merchants'), which goes beyond the schema. It does not mention pagination or rate limits, but for a read-only analytics tool this is reasonably complete.

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 concise, uses a clear Args/Returns structure, and every sentence provides necessary information. There is no redundancy or filler.

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 simple read-only nature, two parameters, and no annotations, the description is complete: it covers the required parameter, optional parameter with format, and outlines the return content. It gives an agent enough information to select and invoke the tool correctly without needing additional context.

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?

The schema only defines 'app_id' and 'period' as strings with no descriptions or enums (schema coverage 0%). The description compensates fully by specifying app_id as 'App GID or numeric ID (required)' and providing exact allowed values for period ('7d', '30d', '90d', '1y', or 'YYYY-MM-DD:YYYY-MM-DD'), adding essential meaning beyond the raw 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 starts with 'Get trial-to-paid conversion funnel' which is a specific verb and resource, clearly distinguishing it from sibling analytics tools. It explicitly states what the tool does: retrieves trial-to-paid conversion data.

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?

The description implies the use case (trial conversion analysis) but does not provide explicit guidance on when to use this tool versus alternatives like get_churn_analysis or get_retention_cohorts. It gives clear context but no exclusions or alternatives.

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. Dates show when Glama detected each change.

  1. 25 tool updatesv0.4.1
    • First observeddiscover_apps
    • First observedget_app_comparison
    • First observedget_app_details
    • First observedget_app_events
    • First observedget_business_digest
    • First observedget_churn_analysis
    • First observedget_churn_risk
    • First observedget_churned_merchants
    • First observedget_credits_adjustments
    • First observedget_customer_ltv
    • First observedget_growth_velocity
    • First observedget_install_patterns
    • First observedget_merchant_health
    • First observedget_merchant_lookup
    • First observedget_merchants
    • First observedget_mrr_movement
    • First observedget_payout_report
    • First observedget_plan_performance
    • First observedget_referral_revenue
    • First observedget_retention_cohorts
    • First observedget_revenue_anomalies
    • First observedget_revenue_forecast
    • First observedget_revenue_summary
    • First observedget_transactions
    • First observedget_trial_funnel

TDQS

A3.8/5.0
Disambiguation3/5

Many tools address similar metrics (revenue, churn, merchant value) with subtle differences, e.g., get_churn_analysis vs get_churned_merchants vs get_churn_risk, and get_revenue_summary vs get_mrr_movement vs get_transactions. While descriptions help, an agent may struggle to pick the right tool without careful reading, and get_churned_merchants largely overlaps with get_merchants(status='churned').

Naming Consistency4/5

24 of 25 tools follow the get_<metric> pattern with consistent snake_case. The sole exception is discover_apps, which uses 'discover' instead of 'get_'. This minor deviation is easy to adapt to, but prevents a perfect score.

Tool Count3/5

25 tools is at the high end of the 'heavy' range (16-25). Each tool covers a distinct metric, but many revenue/churn tools could be consolidated (e.g., revenue_summary, mrr_movement, payout_report, transactions). The breadth is justified by the domain, but the count feels excessive.

Completeness4/5

The tool set covers core partner analytics comprehensively: revenue, churn, retention, LTV, forecasts, merchant health, events, and funnels. It lacks any write/management operations (e.g., updating app settings) and some minor analytics gaps (no period-over-period comparisons in many tools, no data export), but these are workarounds.

Maintenance

ActivityInactive
ResponsivenessSyncing

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
    Not graded
    quality
    B
    maintenance
    A production-grade MCP server and CLI tool that enables AI agents to manage Shopify stores through 49 built-in tools across products, orders, inventory, and analytics. It supports natural language workflows for tasks like inventory tracking, customer support, and sales reporting.
    387
    18
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Open-source MCP server for Claude AI that connects Stripe and Supabase to enable natural language SaaS analytics, including churn analysis, subscription tracking, and revenue insights.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that gives AI agents access to RevenueCat's Charts & Metrics API. Query MRR, churn, trial conversion, revenue, and 17 more subscription metrics directly from Claude, Cursor, or any MCP client.
    13
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server providing six scoped tools for Shopify's Admin API, enabling natural-language querying of chargebacks, orders, refunds, customers, and revenue.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rushikeshmore/shopify-partner-agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server