Adjust MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Adjust MCP servercompare installs and revenue for app abc123 this month vs last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Watch the film · What's new · Install · Tool reference · Try hosted getmcpads

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.0: First standalone release · October 23, 2026
First standalone release, synchronized with getmcpads gateway revision
3e1c2c8.Five native read tools:
adjust_list_apps,adjust_list_events,adjust_get_catalog,adjust_run_reportandadjust_compare_periods, plus theadjust://guideresource.Read-only by design. There is no write tool and no write setting.
Require
ADJUST_API_TOKENand an explicitADJUST_APP_TOKENSallowlist, validated at startup.ADJUST_ENVIRONMENTfixes production or sandbox data for every report.Send requests only to
automate.adjust.com, refuse redirects, apply a 25 second timeout and a 20 MB response limit, and redact the API token from provider text.Keep native totals, treat HTTP 200 error bodies as failures and mark truncated, warned or paginated reports partial.
Report configured app tokens that Adjust did not return, in
unavailableAppTokens.Require Node.js 22.23.4, 24.22.1, 26.12.1 or a newer release of those lines, warn on stderr otherwise, and check Node 22, 24 and 26 in CI.
Publish from version tags through
release.yml: npm with provenance, the GitHub release, then the MCP Registry.
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.0 --depth 1 https://github.com/get-mcp-ads/adjust-mcp-server.git
cd adjust-mcp-server
npm ci
npm run buildConfigure 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 |
| Required. The API token of your Adjust user. It is a bearer credential with that user's reporting access. |
| 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 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 | 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 catalogAll 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 |
| List the allowlisted apps the API token can read, with native currency, configured operating systems and any configured token Adjust did not return |
| Discover event slugs, activity-count metric IDs and app-specific event tokens for one app |
| Read the 35 documented dimensions, 12 example metrics and the event metrics of one app |
| Run an attribution and performance report for one app, with native totals, warnings and measurement settings |
| Compare two equal-length periods for one app with identical settings, using native totals |
There are no write tools.
Resource
Resource | Purpose |
| 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 toolsadjust_compare_periodsadjust compare periodsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Display row limit only; truncation is explicit and native totals are preserved. | |
| endDate | Yes | Last date of the reporting period, in YYYY-MM-DD format, on or after startDate. | |
| filters | No | Filters combined according to this tool's query schema. Use provider field names and the declared operators. | |
| metrics | No | Native or documented calculated metric names to request. Check compatibility with the selected dimensions. | |
| osNames | No | Operating system filter, for example ios or android. Keep os_name in dimensions to compare platforms. | |
| appToken | Yes | Exact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts. | |
| currency | No | Explicit ISO currency for money metrics. Keep the same currency across comparisons. | |
| startDate | Yes | First date of the reporting period, in YYYY-MM-DD format. | |
| utcOffset | No | Fixed UTC offset; +00:00 by default. Split local-date comparisons if the offset changes during the period. | +00:00 |
| comparison | No | Optional equal-length comparison period; otherwise use the immediately preceding period. | |
| dimensions | No | Native reporting dimensions. Validate compatibility with the selected metrics. | |
| adSpendMode | No | Native source of ad spend. Keep the same mode across comparisons and avoid counting overlapping spend twice. | network |
| reattributed | No | Include all users, reattributed users only, or users without reattribution. | all |
| cohortMaturity | No | Include current cohort values or use mature-only mode, which may zero immature cohorts. | immature |
| iapRevenueMode | No | In-app revenue percentage. Retain the same setting across comparisons. | GROSS_100 |
| attributionTypes | No | Optional engagement filter. Omit for an unfiltered report including native organic data. Empty types in output means no engagement filter. | |
| attributionSource | No | Assign activity to the first install source or the native dynamic reattribution source. | dynamic |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: changes derive from native totals rather than sums of breakdowns, unavailable or partial values produce no calculated change, and cohort maturity and reporting delays still apply to results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with the core operation and scope before the caveats about native totals and partial values. No filler sentences, though the list of invariants is dense and could be skimmed past.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter read-only analytics tool with full schema coverage and an output schema, the description covers the operation, the default comparison window, and the key caveats about totals and partial data. The only meaningful omission is an explicit pointer to adjust_run_report for non-comparison reporting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description contributes semantics the schema does not encode: periods must be equal length and both sides must share identical metrics, filters, OS and measurement settings. Those cross-parameter constraints materially help correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: comparing two equal-length periods for one Adjust application with identical metrics, filters, OS and measurement settings. It doesn't name adjust_run_report as the non-comparison alternative, so the boundary against the closest sibling is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the comparison behavior (defaults to the immediately preceding period) and the requirement that both periods use identical metrics/filters/settings, which implies when this tool is appropriate. However, it never explicitly says when to use this instead of adjust_run_report, so the routing decision is inferred rather than stated.
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 catalogARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| appToken | Yes | Exact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the bar is low, and the description still adds real context: results are permission-gated by Adjust, scoping is limited to an allowlisted application, and the metric list is partial rather than complete. That tells the agent to treat the output as an incomplete, entitlement-dependent catalog rather than a definitive one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded with the catalog scope before the permission and completeness caveats. Slightly dense phrasing ('documented standard', 'example metrics') costs a little clarity but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation, and the description covers scope, entitlement limits, and incompleteness. The remaining gap is the relationship to the report tools, which the description never states.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter at 100% schema coverage, so the schema already carries the semantics ('Exact Adjust application token from ADJUST_APP_TOKENS'). The description only restates the scoping ('one allowlisted application') without adding format, fallback, or error behavior, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Read') and resource (standard Adjust dimensions and example metrics, plus event metrics for one application), so the catalog/discovery nature is clear. It does not explicitly differentiate itself from adjust_list_events, which is adjacent in scope, leaving a small ambiguity about what 'event metrics' means here versus that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 call that precedes adjust_run_report or adjust_compare_periods, but no sentence says when to call it or when to prefer a sibling. The 'not exhaustive' caveat hints at follow-up behavior without giving direction.
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 appsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely new behavior: results are scoped to the ADJUST_APP_TOKENS allowlist and applications outside it are never returned, which tells the agent it may get a subset rather than all apps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero waste that front-loads the resource and follows with the scoping and allowlist clause. Nothing is repeated verbatim from the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description needn't explain return fields, and it still notes native currency and configured operating systems. For a zero-parameter read tool this is close to complete, with only the lack of guidance relative to the sibling list/catalog tools as a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is complete, so there is nothing for the description to compensate for. Baseline of 4 applies; the description correctly avoids inventing filtering options that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the Adjust applications') and scopes it precisely to what the token can read plus the allowlist constraint. It does not name a sibling, but 'applications' is inherently distinct from the events/catalog/report siblings, so an agent can select it without confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it's the enumeration call for apps an agent already knows about. There is no explicit when-to-use versus adjust_list_events or adjust_get_catalog, and no stated preconditions or exclusions beyond the allowlist filter.
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 eventsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter native event definitions by a short search term. | |
| appToken | Yes | Exact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered and the description only needs to add context. It does so by disclosing that results are scoped to one allowlisted app and that three distinct identifier namespaces exist (base slugs, activityMetric IDs, event tokens) whose definitions must not be mixed. It says nothing about pagination or result volume, but with an output schema present that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler, and the core capability is front-loaded before the caveats. The middle clauses are dense ('ordinary activity-count metric IDs and app-specific event tokens') but every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full schema coverage, complete annotations and an output schema, the description supplies the domain context an agent actually needs: what kinds of identifiers come back and which one feeds counts. The only real gap is ordering or result-size expectations, which is modest given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both appToken and search documented in the schema itself, so the baseline of 3 applies. The description reinforces the app scoping ('for one allowlisted Adjust app') but never mentions the search filter or how matching behaves. It adds nothing the schema does not already carry for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb plus a precise scope: 'Discover native event base slugs, ordinary activity-count metric IDs and app-specific event tokens for one allowlisted Adjust app.' That is far more specific than the name alone, which only says 'list events.' It does not explicitly name a sibling, though the line about the event base slug not being a report metric implicitly routes the agent away from adjust_run_report, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Guidance is present but is about field interpretation rather than tool selection: 'Use activityMetric for counts; the event base slug alone is not a report metric' and 'Keep SKAdNetwork and aggregate revenue definitions separate.' These are genuinely useful caveats about what identifier to carry downstream, but there is no explicit statement of when to call this instead of adjust_run_report or adjust_get_catalog, or of prerequisites such as needing a token from ADJUST_APP_TOKENS first.
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 reportARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Display row limit only; truncation is explicit and native totals are preserved. | |
| endDate | Yes | Last date of the reporting period, in YYYY-MM-DD format, on or after startDate. | |
| filters | No | Filters combined according to this tool's query schema. Use provider field names and the declared operators. | |
| metrics | No | Native or documented calculated metric names to request. Check compatibility with the selected dimensions. | |
| osNames | No | Operating system filter, for example ios or android. Keep os_name in dimensions to compare platforms. | |
| appToken | Yes | Exact Adjust application token from ADJUST_APP_TOKENS. Applications are separate from advertising accounts. | |
| currency | No | Explicit ISO currency for money metrics. Keep the same currency across comparisons. | |
| startDate | Yes | First date of the reporting period, in YYYY-MM-DD format. | |
| utcOffset | No | Fixed UTC offset; +00:00 by default. Split local-date comparisons if the offset changes during the period. | +00:00 |
| dimensions | No | Native reporting dimensions. Validate compatibility with the selected metrics. | |
| adSpendMode | No | Native source of ad spend. Keep the same mode across comparisons and avoid counting overlapping spend twice. | network |
| reattributed | No | Include all users, reattributed users only, or users without reattribution. | all |
| cohortMaturity | No | Include current cohort values or use mature-only mode, which may zero immature cohorts. | immature |
| iapRevenueMode | No | In-app revenue percentage. Retain the same setting across comparisons. | GROSS_100 |
| attributionTypes | No | Optional engagement filter. Omit for an unfiltered report including native organic data. Empty types in output means no engagement filter. | |
| attributionSource | No | Assign activity to the first install source or the native dynamic reattribution source. | dynamic |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), so the description does not need to. It goes further by disclosing result semantics that matter operationally: native totals and warnings are preserved, missing metrics are null rather than zero, ratios are native fractions, and truncation is explicit so a partial result must not be treated as a complete extraction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with the core purpose front-loaded and no filler. A couple of the sentences (null handling, native fractions) read as output-contract statements that partly duplicate what an output schema would express, but they are not wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full schema, rich annotations and an output schema present, the description covers the genuinely risky behaviors an agent needs: truncation, nulls, ratio units, and consistent settings across comparisons. The remaining gap is routing guidance against adjust_compare_periods, which no structured field supplies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already carries a description, including limit-vs-truncation, filter operators, and dimension/metric compatibility, so the schema does the heavy lifting. The description only reinforces the currency/UTC-offset and attribution-option defaults; it adds little parameter-specific meaning beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Read an attribution/performance report" names a specific verb and resource, and "for one allowlisted Adjust app" fixes the scope to a single app token. It never distinguishes itself from the closest sibling, adjust_compare_periods, which is the tool an agent most plausibly confuses it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage cue is the implicit scope (one allowlisted app), with no statement of when to choose this over adjust_compare_periods or the catalog/listing siblings. No exclusions, no preconditions such as app-token allowlisting or dimension/metric compatibility are stated in the description.
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.
5 tool updates
v1.0.0- First observed
adjust_compare_periods - First observed
adjust_get_catalog - First observed
adjust_list_apps - First observed
adjust_list_events - First observed
adjust_run_report
TDQS
Scored across 5 tools
Most tools target clearly different operations: listing apps, discovering events, reading a catalog, running a report, and comparing periods. The main overlap is between adjust_list_events and adjust_get_catalog, since both expose event metric information for one app, though their descriptions distinguish discovery tokens from catalog definitions.
All tool names consistently use the adjust_ prefix followed by a clear verb_noun pattern: list_apps, list_events, get_catalog, run_report, compare_periods. The convention is predictable throughout.
Five tools is well-scoped for a focused Adjust reporting server. Each tool supports a distinct stage of the analytics workflow without obvious redundancy.
The surface covers the core read-only analytics lifecycle: discovering apps, events, metrics/dimensions, running reports, and comparing periods. Minor gaps may exist around other Adjust resources or specialized report modes, but agents can accomplish the main workflows.
Maintenance
Related MCP Connectors
Read-only access to your Consequential eCommerce marketing analytics and attribution data.
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
- KlarOAuthcom.getklar
Read-only access to your Klar marketing attribution and profit data.
Read-only Search Console analytics, URL inspection, indexing diagnostics, and sitemaps.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRead-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
- FlicenseNot gradedqualityCmaintenanceEnables 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.-
- FlicenseAqualityCmaintenanceEnables 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-
- FlicenseNot gradedqualityCmaintenanceEnables read-only access to Addepar portfolio and ownership data for financial reporting, with transparent provenance caveats and compliance-oriented audit logging.-