Skip to main content
Glama
get-mcp-ads

Adjust MCP server

Adjust MCP server

Bring your Adjust reporting into your MCP client.

Read attribution and performance reports, event catalogs and period comparisons for explicitly selected apps.

Release CI License: Apache 2.0 Node

Watch the film · What's new · Install · Tool reference · Try hosted getmcpads

Watch the getmcpads film: every ad account in one conversation with your AI assistant

Play the 45-second film

The film shows hosted getmcpads with sample data. Its MCP Apps, from creative galleries and alerts to Google Sheets exports and bulk launches, belong to the hosted product. This repository provides the standalone native API tools.

5 read tools · 0 write tools. Read-only by design: no setting adds a write tool.

Run locally with your own Adjust API token and a client that supports stdio MCP, such as Claude Desktop, Claude Code or Cursor. Your requests go directly to the Adjust Report Service API. For managed connections, including supported ChatGPT setups, use the hosted option.

What's new

v1.0.1: Zod 4 security update · October 26, 2026

  • Update zod to 4.6.7. Every Zod release before 4.6.6 is covered by the high-severity advisory GHSA-mrhx-c7xc-m3w5: validating an oversized constrained collection can exhaust memory, and no Zod 3 release carries the fix. npm audit --omit=dev reports no vulnerability again.

  • Keep the Zod 3 validation behaviour. A parameter default is still validated and completed before use, so an omitted object must still supply its required fields.

  • Keep each parameter's own description when the parameter is optional or has a default. Zod 4 stores a description on the wrapped schema only, so the shared fallback description could otherwise replace it.

  • Tool names, parameters and descriptions published over MCP are unchanged. server-card.json is regenerated with Zod 4's JSON Schema output, which spells some constraints differently.

Earlier releases

Version

Date

Highlights

1.0.0

October 23, 2026

First standalone release

Full changelog · All releases

Source synchronization: SOURCE_SYNC.md.

Upgrade notes

This is the first release. It requires Node.js 22.23.4, 24.22.1, 26.12.1 or a newer release of those lines, and prints a warning on stderr when started on an older one. Hosted MCP Apps, exports and business reviews are outside this release.

Related MCP server: ga-gsc-analytics

Install this release

This is a GitHub source release. npm and MCP Registry versions are published separately. The commands below select this exact version; unpinned npx examples later in this document select the version currently available on npm.

git clone --branch v1.0.1 --depth 1 https://github.com/get-mcp-ads/adjust-mcp-server.git
cd adjust-mcp-server
npm ci
npm run build

Configure your MCP client to run node with the absolute path to dist/cli.js and the variables documented below.

{
  "mcpServers": {
    "adjust": {
      "command": "node",
      "args": ["/absolute/path/to/adjust-mcp-server/dist/cli.js"],
      "env": {
        "ADJUST_API_TOKEN": "your-adjust-api-token",
        "ADJUST_APP_TOKENS": "abc123def456,ghi789jkl012"
      }
    }
  }
}

Once the package is on npm, the same entry can use "command": "npx" with "args": ["-y", "@getmcpads/adjust-mcp-server"]. Run npm run doctor in the repository to check the configuration locally. It prints no secret and makes no network request.

Prefer a managed connection? Use Adjust with hosted getmcpads. Connect your account, select the data your assistant may access and use the hosted MCP connection. See the site for current features and plans.

Configuration

Provide these environment variables through the client's secret configuration:

Variable

Purpose

ADJUST_API_TOKEN

Required. The API token of your Adjust user. It is a bearer credential with that user's reporting access.

ADJUST_APP_TOKENS

Required. Comma-separated app tokens this server may read, up to 200. Every request is checked against this list, and app discovery returns only these apps.

ADJUST_ENVIRONMENT

production (default) or sandbox. Fixed for every report; a tool call cannot change it.

Adjust shows the API token in your profile's account settings. See Adjust's authentication guide. The server checks the configuration at startup and exits with a message that names the variable to fix. That message never contains a token value. After setup, call adjust_list_apps. Its unavailableAppTokens field lists configured app tokens that Adjust did not return for this API token. This package accepts a token from the environment. It runs no OAuth flow and writes nothing to disk. When you rotate the token, update the client configuration and restart the server.

Safety and coverage

Read-only by design. Every request is an HTTP GET to the Report Service. There is no write tool and no environment variable that adds one. The app allowlist is checked before any request is sent. App discovery is filtered to the allowlist, and a report that contains a row from another app is withheld. Requests go only to automate.adjust.com, the host Adjust documents for the Report Service. Redirects are refused and never followed. Each request has a 25 second timeout and a 20 MB response limit. An HTTP 200 response that carries an error body is treated as a failed request and returns no data. A read makes at most three attempts on HTTP 429, 502, 503 and 504, honoring a short Retry-After. A longer delay is returned as retryAfterSeconds instead of waiting. Adjust documents a limit of 50 requests per second per source IP address, with a burst allowance of 100.

Reports keep Adjust's native totals. They are never rebuilt from breakdown rows. A missing value is null, not zero, and ratios such as ROAS stay native fractions. Truncated rows, provider warnings, duplicate breakdown rows and unexpected pagination metadata mark a report partial. The API token is never returned or logged, and it is removed from provider text before that text reaches the model. Event definitions keep only the requested app: other apps' identifiers and SDK event tokens are removed. The Report Service returns aggregated data. This server has no tool for user-level or device-level data.

Coverage is the Report Service JSON report, the app inventory from filters data and the event catalog. CSV, Parquet and pivot report formats are not exposed. Use tools/list or server-card.json for exact schemas and the Report Service API reference for provider details.

Official Adjust MCP server

Adjust offers its own MCP server. The facts below come from Adjust's help center article, read on October 23, 2026.

Adjust MCP

This server

Availability

Early Access, added to your Adjust package on request

Open source under Apache 2.0

Connection

Remote endpoint https://mcp.adjust.com/mcpo

Local process over stdio

Authentication

OAuth in supported clients

Adjust API token in an environment variable

Data

Aggregated data only

Aggregated Report Service data only

This server reads only the apps listed in ADJUST_APP_TOKENS, within the access of the Adjust user who owns the API token.

Hosted option

getmcpads for Adjust manages the hosted connection and app selection. Hosted and source releases can differ. Contact: hello@getmcpads.com.

Development

npm run typecheck
npm run lint
npm run build
npm test
npm run catalog

All tests run offline with synthetic responses. No live Adjust account is contacted.

Tools

Every tool is listed below. See server-card.json for complete parameter and output schemas.

Tool

Purpose

adjust_list_apps

List the allowlisted apps the API token can read, with native currency, configured operating systems and any configured token Adjust did not return

adjust_list_events

Discover event slugs, activity-count metric IDs and app-specific event tokens for one app

adjust_get_catalog

Read the 35 documented dimensions, 12 example metrics and the event metrics of one app

adjust_run_report

Run an attribution and performance report for one app, with native totals, warnings and measurement settings

adjust_compare_periods

Compare two equal-length periods for one app with identical settings, using native totals

There are no write tools.

Resource

Resource

Purpose

adjust://guide

Tool order, app scope, measurement settings, rate limits and documentation link

License

Apache License 2.0. See NOTICE.

More from getmcpads

Meta Ads · Google Ads · Google Analytics 4 · Google Search Console · TikTok Ads · Pinterest Ads · X Ads

Maintained by Emmanuel at getmcpads. Questions: hello@getmcpads.com.

Available Tools

5 tools
adjust_compare_periodsadjust compare periodsA
Read-onlyIdempotent

Compare two equal-length periods for one allowlisted Adjust application with identical metrics, filters, OS and measurement settings. Defaults to the immediately preceding period. Changes use native totals, never sums of breakdowns. Unavailable or partial values have no calculated change; cohort maturity and reporting delays still apply.

NameRequiredDescriptionDefault
limitNoDisplay row limit only; truncation is explicit and native totals are preserved.
endDateYesLast date of the reporting period, in YYYY-MM-DD format, on or after startDate.
filtersNoFilters combined according to this tool's query schema. Use provider field names and the declared operators.
metricsNoNative or documented calculated metric names to request. Check compatibility with the selected dimensions.
osNamesNoOperating system filter, for example ios or android. Keep os_name in dimensions to compare platforms.
appTokenYesExact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts.
currencyNoExplicit ISO currency for money metrics. Keep the same currency across comparisons.
startDateYesFirst date of the reporting period, in YYYY-MM-DD format.
utcOffsetNoFixed UTC offset; +00:00 by default. Split local-date comparisons if the offset changes during the period.+00:00
comparisonNoOptional equal-length comparison period; otherwise use the immediately preceding period.
dimensionsNoNative reporting dimensions. Validate compatibility with the selected metrics.
adSpendModeNoNative source of ad spend. Keep the same mode across comparisons and avoid counting overlapping spend twice.network
reattributedNoInclude all users, reattributed users only, or users without reattribution.all
cohortMaturityNoInclude current cohort values or use mature-only mode, which may zero immature cohorts.immature
iapRevenueModeNoIn-app revenue percentage. Retain the same setting across comparisons.GROSS_100
attributionTypesNoOptional engagement filter. Omit for an unfiltered report including native organic data. Empty types in output means no engagement filter.
attributionSourceNoAssign activity to the first install source or the native dynamic reattribution source.dynamic

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A5/5.0
Behavior5/5

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

The description adds vital operational context beyond the annotations and schema. It specifies that 'Changes use native totals, never sums of breakdowns' and details limitations regarding partial values and cohort maturity, which are critical behavioral constraints for an AI agent.

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 definition is highly concise. It uses two sentences to articulate the complex requirements, technical constraints (native totals), default behaviors, and limitations without any superfluous language.

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 complex, constraint-heavy comparison tool, the description is complete. It covers the required data consistency (metrics, filters, OS), technical calculation methods, and operational limitations, providing everything needed for safe and correct invocation.

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?

Given the 100% schema coverage, the description focuses on the semantic *constraints* of the parameters (e.g., all settings must be identical) and the operational logic of the tool (e.g., comparison defaults), which is highly valuable to a developer/agent.

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 tool's purpose is clear: to compare two time periods. It specifically frames the comparison around 'equal-length' periods and requires an 'allowlisted Adjust application,' making it distinct from general reporting tools like adjust_run_report.

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

Usage Guidelines5/5

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

It provides extremely explicit usage guidance by requiring that the comparison use 'identical metrics, filters, OS and measurement settings.' It also clearly defines the default behavior (immediately preceding period), guiding the user when to omit the `comparison` field.

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

adjust_get_catalogadjust get catalogA
Read-onlyIdempotent

Read documented standard Adjust dimensions and example metrics, plus event metrics scoped to one allowlisted application. Metrics and spend/revenue access remain subject to Adjust permissions; the standard metric list is not exhaustive.

NameRequiredDescriptionDefault
appTokenYesExact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely useful context beyond that: access is gated by Adjust permissions, spend/revenue visibility may be restricted, and the returned metric list is explicitly non-exhaustive, which prevents an agent from treating it as a complete enumeration.

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

Conciseness4/5

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

Two sentences, no filler, with the core action front-loaded and the caveats about permissions and non-exhaustiveness placed after it. Dense but efficient.

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?

An output schema exists, so return values need not be described here. Combined with annotations, the description covers what an agent needs to call this safely: it is a read, it is scoped to one app, and results may be filtered by permissions and are not guaranteed complete.

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

Parameters3/5

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

There is a single parameter and the schema coverage is 100%, with the schema already explaining the app token and the distinction from ad accounts. The description reinforces scoping to an allowlisted application, but adds no format or sourcing detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource: reads the Adjust catalog of dimensions and metrics, scoped to one application. It is distinguishable from siblings such as adjust_run_report and adjust_list_events by being a discovery/catalog read rather than a data fetch. The phrase 'example metrics' is a little soft, but the intent is 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?

Usage is only implied: an agent can infer this is a discovery step before running a report, but the description never says when to call it versus adjust_list_events or adjust_run_report, nor states prerequisites beyond the app token.

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

adjust_list_appsadjust list appsA
Read-onlyIdempotent

List the Adjust applications in ADJUST_APP_TOKENS that this API token can read, with native currency and configured operating systems. Applications outside the allowlist are never returned.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this as read-only, idempotent, non-destructive, and open-world. The description adds meaningful context by disclosing that only allowlisted applications are returned and that native currency and configured operating systems are included.

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

Conciseness5/5

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

The description is a single well-formed sentence that front-loads the action and resource. Every clause adds relevant information: token scope, allowlist behavior, and returned attributes.

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

Completeness5/5

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

For a zero-parameter read-only listing tool with rich annotations and an output schema, the description covers the essential behavioral constraints. It discloses the allowlist boundary and useful return fields without redundantly explaining schema-covered output details.

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

Parameters4/5

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

There are zero parameters, so the schema has no parameter semantics for the description to explain. The baseline for a parameterless tool applies; nothing in the description suggests hidden parameter behavior.

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 uses a specific verb and resource: 'List the Adjust applications.' It also specifies the token-scoped allowlist and the returned attributes, but it does not explicitly differentiate this tool from siblings such as adjust_list_events or adjust_get_catalog.

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?

It states the scope is applications in ADJUST_APP_TOKENS readable by the token, which implies when the tool is useful. However, it gives no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as adjust_get_catalog or adjust_list_events.

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

adjust_list_eventsadjust list eventsA
Read-onlyIdempotent

Discover native event base slugs, ordinary activity-count metric IDs and app-specific event tokens for one allowlisted Adjust app. Use activityMetric for counts; the event base slug alone is not a report metric. Keep SKAdNetwork and aggregate revenue definitions separate.

NameRequiredDescriptionDefault
searchNoFilter native event definitions by a short search term.
appTokenYesExact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuine domain context beyond that: the app must be allowlisted, the returned identifiers have different downstream semantics, and certain definition families must not be conflated. It omits pagination/result-cap behavior, which is why it is not 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.

Conciseness4/5

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

Three tight sentences with the purpose front-loaded and no filler. The phrasing is jargon-dense (base slug vs activity-count metric ID vs event token) but each clause carries a distinct constraint.

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?

An output schema exists, so return values need not be spelled out, and the description still characterizes the three identifier kinds an agent will get back. For a two-parameter read-only lookup this is nearly sufficient; only result-size/pagination expectations are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so both appToken and search are documented in the schema; a baseline of 3 applies. The description reinforces the app-token scoping ('one allowlisted Adjust app') but adds nothing about the search filter or the identifier format, so it does not exceed the schema.

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

Purpose4/5

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

The description names a specific verb ('Discover') and concrete resources ('native event base slugs, ordinary activity-count metric IDs and app-specific event tokens') scoped to 'one allowlisted Adjust app'. An agent can tell this is a discovery/enumeration tool rather than a reporting one. It does not explicitly name a sibling (e.g. adjust_get_catalog) to differentiate against, which keeps this from 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 Guidelines3/5

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

It gives concrete downstream guidance ('Use activityMetric for counts; the event base slug alone is not a report metric') and a segmentation warning about SKAdNetwork vs aggregate revenue, which helps the agent choose the right identifier. However, it never states when to call this versus adjust_get_catalog, adjust_list_apps, or adjust_run_report, so sibling routing is left to inference.

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

adjust_run_reportadjust run reportB
Read-onlyIdempotent

Read an attribution/performance report for one allowlisted Adjust app. Preserves native totals, warnings, attribution options, currency and UTC offset. Missing metrics are null; ratios are native fractions. A truncated or partial result is not a complete extraction.

NameRequiredDescriptionDefault
limitNoDisplay row limit only; truncation is explicit and native totals are preserved.
endDateYesLast date of the reporting period, in YYYY-MM-DD format, on or after startDate.
filtersNoFilters combined according to this tool's query schema. Use provider field names and the declared operators.
metricsNoNative or documented calculated metric names to request. Check compatibility with the selected dimensions.
osNamesNoOperating system filter, for example ios or android. Keep os_name in dimensions to compare platforms.
appTokenYesExact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts.
currencyNoExplicit ISO currency for money metrics. Keep the same currency across comparisons.
startDateYesFirst date of the reporting period, in YYYY-MM-DD format.
utcOffsetNoFixed UTC offset; +00:00 by default. Split local-date comparisons if the offset changes during the period.+00:00
dimensionsNoNative reporting dimensions. Validate compatibility with the selected metrics.
adSpendModeNoNative source of ad spend. Keep the same mode across comparisons and avoid counting overlapping spend twice.network
reattributedNoInclude all users, reattributed users only, or users without reattribution.all
cohortMaturityNoInclude current cohort values or use mature-only mode, which may zero immature cohorts.immature
iapRevenueModeNoIn-app revenue percentage. Retain the same setting across comparisons.GROSS_100
attributionTypesNoOptional engagement filter. Omit for an unfiltered report including native organic data. Empty types in output means no engagement filter.
attributionSourceNoAssign activity to the first install source or the native dynamic reattribution source.dynamic

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare this as a safe, read-only, idempotent, non-destructive operation. The description adds useful behavioral context beyond annotations, including preservation of native totals/warnings/options and the warning that truncated or partial results are not complete extractions.

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

Conciseness4/5

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

The description is short, front-loaded with the core purpose, and each sentence contributes useful semantics. The final truncation warning is slightly redundant in wording but still earns its place as a usage caveat.

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

Completeness3/5

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

A full input schema, annotations, and an output schema carry most of the operational detail, so the description does not need to explain return values or parameters. However, for a complex report tool with a compare-periods sibling, it should do more to explain when this tool is preferable to alternatives.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 16 parameters in detail. The description adds only high-level semantics such as preserved currency and UTC offset, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: reading an attribution/performance report for one allowlisted Adjust app. It is clear enough to distinguish from list/catalog sibling tools, but it does not explicitly contrast with adjust_compare_periods.

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 when-to-use guidance, no exclusions, and no named alternatives. An agent must infer selection from the tool name and purpose alone.

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

Tool Schema Changelog

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

  1. 5 tool updatesv1.0.1
    • Changedadjust_compare_periods1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedadjust_get_catalog1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedadjust_list_apps1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedadjust_list_events1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedadjust_run_report1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  2. 5 tool updatesv1.0.0
    • First observedadjust_compare_periods
    • First observedadjust_get_catalog
    • First observedadjust_list_apps
    • First observedadjust_list_events
    • First observedadjust_run_report

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

adjust_list_events and adjust_get_catalog both expose metric/event metadata, so there is slight overlap, but each has a clear scope: per-app events versus standard dimensions/metrics. adjust_run_report and adjust_compare_periods are clearly separated by single-period reporting versus two-period comparison.

Naming Consistency5/5

All five tools use the same adjust_ prefix and a consistent verb_noun pattern: list_apps, list_events, get_catalog, run_report, compare_periods. There is no mixing of casing or verb styles.

Tool Count5/5

Five tools is lean but appropriate for a read-only reporting integration: app discovery, event discovery, catalog lookup, report execution, and period comparison. Each tool has a distinct role and none feels redundant.

Completeness4/5

The set covers the core read-only workflows: discovering apps, discovering events and metrics, reading catalog metadata, running reports, and comparing periods. Minor gaps may exist around saved reports or broader filter/dimension enumeration, but the surface is largely complete for reporting.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only access to Google Analytics 4 reporting data, including traffic overview, top pages, traffic sources, and conversion events, supporting custom report queries via MCP.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only access to Google Analytics 4 and Google Search Console data, allowing users to run reports, query search analytics, and generate combined snapshots for reporting.
    -
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI clients to read Google Ads account data through reporting tools for campaigns, ad groups, keywords, and raw GAQL queries, with no write or mutate capabilities.
    7
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only access to Addepar portfolio and ownership data for financial reporting, with transparent provenance caveats and compliance-oriented audit logging.
    -