Adjust MCP server
This is a read-only Adjust reporting MCP server (5 read tools, 0 write tools) that brings attribution and performance data for explicitly allowlisted apps into an MCP client.
adjust_list_apps— list allowlisted apps the API token can read, with native currency and configured operating systems.adjust_list_events— discover event base slugs, activity-count metric IDs and app-specific event tokens for one app (optional search term).adjust_get_catalog— read the documented dimensions (35), example metrics and event metrics for one app.adjust_run_report— run an attribution/performance report for one app with metrics, dimensions, filters, date range, currency, OS names, UTC offset and measurement settings; native totals preserved, missing valuesnull.adjust_compare_periods— compare two equal-length periods (or the immediately preceding one) with identical settings, using native totals rather than summed breakdowns.adjust://guideresource — tool order, app scope, measurement settings and rate-limit guidance.
Limits: every request is an HTTP GET to the Adjust Report Service, checked against ADJUST_APP_TOKENS (up to 200 apps); aggregated data only — no user/device-level data, no writes, no CSV/Parquet/pivot formats.
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.1: Zod 4 security update · October 26, 2026
Update
zodto 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=devreports 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.jsonis 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 |
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 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?
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.
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.
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.
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.
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.
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 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 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.
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.
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.
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.
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.
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 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 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.
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.
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.
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.
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.
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 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?
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.
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.
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.
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.
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.
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 reportBRead-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 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.
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.
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.
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.
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.
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.
5 tool updates
v1.0.1- Changed
adjust_compare_periods1 field changed- changed
Output schema / properties / result / anyOfPrevious 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" + } +]
- Changed
adjust_get_catalog1 field changed- changed
Output schema / properties / result / anyOfPrevious 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" + } +]
- Changed
adjust_list_apps1 field changed- changed
Output schema / properties / result / anyOfPrevious 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" + } +]
- Changed
adjust_list_events1 field changed- changed
Output schema / properties / result / anyOfPrevious 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" + } +]
- Changed
adjust_run_report1 field changed- changed
Output schema / properties / result / anyOfPrevious 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" + } +]
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
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.
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.
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.
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
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.
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.-