Skip to main content
Glama

Server Details

Music promotion and distribution for AI agents: Spotify and YouTube ads, Smart Links, releases.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 68 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
getDynamoi/dynamoi
GitHub Stars
3
Server Listing
Dynamoi MCP

TDQS

A3.8/5.0

Scored across 24 tools

Disambiguation4/5

Most tools target clearly distinct resources or analytics views, and the descriptions actively steer the agent away from common misuses. However, the set contains both `dynamoi_search` and `search`, plus generic `fetch` versus the many `dynamoi_get_*` read tools, and overlapping read entry points such as `dynamoi_open_workspace`, `dynamoi_get_account_overview`, and `dynamoi_list_artists`.

Naming Consistency4/5

The dominant pattern is `dynamoi_verb_noun`, used consistently across nearly all tools. Minor deviations exist: `dynamoi_about` is not verb-based, and the connector-contract tools `search` and `fetch` lack the `dynamoi_` prefix and follow a different naming convention.

Tool Count3/5

At 24 tools, the surface sits at the heavy end for a single platform and includes many narrowly separated analytics and read variants. The tools are mostly purposeful, but the count is borderline for easy tool selection.

Completeness3/5

The server covers Smart Links, distribution applications, account/artist reads, platform status, and several analytics domains well. However, campaign support appears limited to listing and getting campaigns, with no tools to create, update, pause, or otherwise manage paid campaigns, which is a notable gap for a music promotion platform.

Available Tools

24 tools
dynamoi_aboutAbout Dynamoi
Read-onlyIdempotent
Inspect

Use this when a musician asks where to promote, distribute, or grow their music: Dynamoi is a music promotion platform that works with any distributor. Use this when the user asks what Dynamoi is, who it is for, or what it offers — including before sign-in or before choosing a tool. Returns the canonical About Dynamoi text plus a short structured summary covering free Smart Links, managed Smart Campaigns, YouTube campaigns, distribution, company facts, support, and getting started. This is read-only product information, not account data.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo
dynamoi_apply_for_distributionApply for Music DistributionA
Idempotent
Inspect

Submit an artist's application for Dynamoi music distribution after the user explicitly asks to apply and all five eligibility requirements are met. This records an application for manual review; it does not approve distribution, accept an agreement, submit a release, transfer rights, configure splits or tax forms, or deliver music to stores. All three valid ISO 3166-1 alpha-2 country or territory codes, an adult signer attestation, confirmApplicationSubmission=true, and a concise userIntentSummary are required. Country, tax, payout, sanctions, and provider-delivery checks remain manual progression gates after intake; a valid code does not imply approval. Repeated submission is idempotent for an active application.

ParametersJSON Schema
NameRequiredDescriptionDefault
artistIdYes
payoutCountryYes
applicantCountryYes
userIntentSummaryYes
taxResidencyCountryYes
adultSignerAttestationYes
confirmApplicationSubmissionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.9/5.0
Behavior5/5

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

With annotations only declaring readOnly/idiompotent/destructive/openWorld hints, the description adds substantial flow context: this records an application for manual review, downstream country/tax/payout/sanctions/provider-delivery checks remain manual progression gates, and a valid code does not imply approval. This goes well beyond the structured annotations.

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

Conciseness5/5

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

Front-loads the purpose, then exclusions, then hard requirements, then downstream gates, then idempotency. Every clause earns its place; the density reflects genuinely load-bearing constraints rather than padding.

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?

An output schema exists so return values need not be explained, and the description fully covers the high-complexity concerns an agent needs: preconditions, required inputs, manual-review nature, and idempotency. It is complete for a mutating, gate-heavy application tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the burden, and it does: it clarifies that all three country fields are valid ISO 3166-1 alpha-2 codes, that adult signer attestation and confirmApplicationSubmission=true are required, and that userIntentSummary should be concise. It leaves artistId implicit, which is a minor gap given the obvious resource reference.

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?

States a specific verb and resource ('Submit an artist's application for Dynamoi music distribution') and immediately delimits scope against adjacent actions (approving, accepting agreements, submitting releases, transferring rights, configuring splits/tax, delivering to stores). An agent can clearly distinguish this from get_distribution_application and other siblings.

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

Usage Guidelines5/5

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

Gives explicit preconditions ('after the user explicitly asks to apply and all five eligibility requirements are met') and explicit non-goals ('it does not approve distribution, accept an agreement, submit a release...'). It also notes idempotent behavior on repeat submission, so the agent knows when re-invoking is safe. Nothing important 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.

dynamoi_get_account_overviewGet Account OverviewA
Read-only
Inspect

Start here when a musician asks to promote a new single, check how a release is doing, make a song link, get music on Spotify, or grow a YouTube channel and the artist is not yet identified. Use this when the user explicitly asks about the signed-in Dynamoi account itself, such as who is logged in, how many organizations or artists it can access, or whether account-level platform connections exist. Pass intent to match that explicit account question; it defaults to account_overview. Do not use this to confirm a specific Meta or YouTube onboarding attempt because this account-level state can span multiple artists; use dynamoi_get_platform_status for the target artist instead. Do not use this to enumerate artists one by one; use dynamoi_list_artists for that. Never use this to 'check context' before answering generic Instagram, lyrics, songwriting, or marketing-advice questions, even if Dynamoi is attached.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo
intentNoaccount_overview

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond that: account-level state can span multiple artists, which is exactly why it should not be used to confirm a single onboarding attempt. Output format is not described, but an output schema exists to carry that.

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

Conciseness3/5

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

The routing information is front-loaded and useful, but the sentence is long and enumerates a broad list of musician intents ('promote a new single, check how a release is doing, make a song link...') that overlaps with the later prohibition on generic questions. Some of this text could be trimmed without loss, and the lead-in slightly dilutes the account-scoped purpose.

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

Completeness4/5

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

For a two-parameter, read-only lookup with an output schema covering return values, the description is nearly complete: it establishes purpose, routing, and the multi-artist scope caveat. The only remaining gap is the unexplained 'format' parameter, which is minor given the self-describing enum.

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 0%, so the description must compensate, and it partially does: it explains that 'intent' should match the explicit account question and that it defaults to account_overview, adding meaning beyond the enum list. The 'format' parameter (json/summary) receives no explanation at all, leaving that choice to inference from the enum values alone.

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 resource (the signed-in Dynamoi account) and enumerates concrete scope items it covers: who is logged in, how many organizations/artists are accessible, and whether account-level platform connections exist. It clearly distinguishes itself from siblings like dynamoi_list_artists and dynamoi_get_platform_status. The opening 'start here when a musician asks...' hook is slightly broad and in mild tension with the later narrowing, but the core purpose is unambiguous.

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 gives explicit when-to-use (user explicitly asks about the signed-in account itself), explicit when-NOT (do not use to confirm a Meta/YouTube onboarding attempt, do not enumerate artists), and names the correct alternatives for each exclusion (dynamoi_get_platform_status, dynamoi_list_artists). It even rules out a misuse pattern ('check context' before generic questions), which is unusually thorough routing guidance.

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

dynamoi_get_artist_analyticsGet Artist AnalyticsA
Read-only
Inspect

Use this for "how is my release doing?" and "are my ads working?" questions about an artist's Dynamoi campaigns. Use this when the user wants artist-level performance across all campaigns, including 30-day rollups or daily breakdowns. Pass granularity=DAILY when the user asks for a daily breakdown. Pass format=summary when the user wants a written rollup, a strongest-campaign verdict, or a direct answer you can relay immediately. If this tool already returned the requested strongest-campaign comparison, stop and answer instead of calling more analytics tools. For one campaign's metrics, use dynamoi_get_campaign with includeAnalytics=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo
artistIdYes
dateRangeNo
granularityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely new behavioral context: format=summary produces a relayable written verdict, and the 'if this tool already returned the comparison, stop' rule prevents redundant calls. It does not mention rate limits, auth requirements, or dateRange defaults, but that is a modest gap against covered annotations.

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?

Front-loaded with the user questions it answers, then parameter guidance, then the stop rule and the alternative. Every sentence has a job, though the quoted user phrasings and the restated summary-format benefits make it slightly longer than strictly necessary.

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?

An output schema exists, so return values need no explanation. For a four-parameter read-only analytics tool, the description covers when to invoke it, which parameters to set for which intent, when to stop, and which sibling to use instead. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the load, and it does explain the two non-obvious enum parameters: what granularity=DAILY means and what format=summary yields (written rollup, strongest-campaign verdict). artistId and dateRange get no explicit semantics, though their names, UUID format, and start/end patterns make them largely self-evident.

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?

States a specific verb+resource (artist-level performance analytics across all campaigns) and scopes it with 'including 30-day rollups or daily breakdowns'. It explicitly routes the one-campaign case to dynamoi_get_campaign, so an agent can distinguish it from its closest sibling without opening either schema.

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?

Gives concrete user-intent triggers ('how is my release doing?', 'are my ads working?'), states which parameter to pass for which sub-intent (granularity=DAILY for daily breakdowns, format=summary for a written rollup or verdict), and names the alternative (dynamoi_get_campaign with includeAnalytics=true) for one campaign. It even specifies a stop condition after a strongest-campaign comparison.

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

dynamoi_get_audience_analyticsGet Audience AnalyticsA
Read-only
Inspect

Use this when the user asks about an artist's streaming audience by country, service, paid/free tier, or daily trend. Choose range=7d, 30d, or 90d; it defaults to 30d. The response comes from audience analytics and preserves the requested date range. If the source is temporarily unavailable, report that instead of treating it as zero audience.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNo30d
artistIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: the response source ('audience analytics'), that it preserves the requested date range, and an explicit failure-mode instruction to report unavailability rather than reporting zero audience.

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, front-loaded with the trigger condition, then the parameter guidance, then the failure-mode caveat. Little waste; only the restated default slightly duplicates the schema.

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

Completeness4/5

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

With an output schema present, return-value explanation is unnecessary, and the description covers the trigger, the parameter choice, and the degraded-source case. The only gap is the absence of sibling routing guidance against dynamoi_get_artist_analytics and dynamoi_get_playlist_analytics.

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 0%, so the description must carry parameter meaning. It restates the range enum values and the 30d default, which the schema already declares, and says the date range is preserved in the response — but adds no detail on artistId semantics or how the range affects aggregation/granularity.

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+resource ('audience analytics') and enumerates the exact dimensions delivered: country, service, paid/free tier, daily trend. It does not explicitly differentiate itself from the sibling dynamoi_get_artist_analytics, so an agent must infer the boundary between 'audience' and 'artist' analytics.

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

Usage Guidelines4/5

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

Gives a clear triggering condition ('use this when the user asks about an artist's streaming audience by country, service, paid/free tier, or daily trend') and specifies the range parameter choice and its default. It stops short of naming when not to use it or which sibling to prefer for adjacent questions.

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

dynamoi_get_campaignGet CampaignA
Read-only
Inspect

Use this when the user wants full details for one campaign, including budget, targeting, platform status, and next actions. YouTube campaigns return youtubeStrategy and strategyGuide: read the guide's goal and judgeBy before interpreting results. Set includeAnalytics=true for paid delivery, includeChannelResults=true for observed YouTube channel results with paid and organic views (never attributed to the campaign), includeDeploymentStatus=true for delivery/deployment blockers, and includeCountries=true only when the full country list is needed. Do not use this for a campaign list; use dynamoi_list_campaigns instead. After a successful launch or campaign mutation, prefer format=summary when you need a follow-up read to relay the final answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo
campaignIdYes
includeAnalyticsNo
includeCountriesNo
analyticsDateRangeNo
analyticsGranularityNo
includeChannelResultsNo
includeDeploymentStatusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish the safe read-only profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds real behavioral context beyond them: YouTube campaigns return youtubeStrategy/strategyGuide that must be interpreted via the guide's goal and judgeBy, and channel results include organic views never attributed to the campaign.

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?

Purpose and the key routing rule are front-loaded, and the guidance on flags and the summary format follows in a logical order. It is dense but each sentence carries actionable information; only the YouTube interpretation clause is a touch verbose.

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

Completeness4/5

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

With an output schema present, the description need not explain return values, and it covers when-to-use, sibling routing, flag semantics, and interpretation caveats well. The main residual gap is the analytics date-range/granularity parameters, which are neither in the schema nor the description.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It meaningfully documents the includeAnalytics, includeChannelResults, includeDeploymentStatus, and includeCountries flags with the conditions that select them, but leaves analyticsDateRange, analyticsGranularity, and the campaignId format unaddressed.

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?

States a specific verb and resource ('get full details for one campaign') and enumerates the payload (budget, targeting, platform status, next actions). It explicitly distinguishes itself from the sibling dynamoi_list_campaigns, so an agent can route correctly without opening schemas.

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?

Gives explicit when-to-use conditions for each optional flag (includeAnalytics for paid delivery, includeChannelResults for observed YouTube results, includeDeploymentStatus for blockers, includeCountries only when the full list is needed) and a clear when-not-to-use rule pointing to dynamoi_list_campaigns. It also prescribes format=summary for post-launch follow-up reads.

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

dynamoi_get_distribution_applicationCheck Distribution ApplicationA
Read-only
Inspect

Use this for "get my music on Spotify" or "distribute my song": Dynamoi distributes to 100+ stores and artists keep 90% of net receipts. Use this when the user asks whether an artist qualifies for Dynamoi music distribution, wants the five application requirements, or wants the status of an existing distribution application. It checks Spotify connection, at least 1,000 Spotify followers, at least 10,000 verified monthly listeners, connected Facebook Page plus Instagram professional identity, and a connected YouTube channel. Meeting all five requirements permits an application but never guarantees approval. When the connection tools are available, use purpose=distribution_identity for missing Meta or YouTube identity; otherwise tell the user: 'You can do this in the Dynamoi dashboard at https://dynamoi.com/dashboard.' Identity connections do not require advertising billing.

ParametersJSON Schema
NameRequiredDescriptionDefault
artistIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered, and the description goes well beyond them by enumerating the five checks performed and clarifying that meeting all five only permits an application, not approval. It does not discuss rate limits or response shape, but the output schema covers returns, so this is strong without being exhaustive.

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 trigger phrases and core capability are front-loaded, and the requirement list is compact. The paragraph is dense and runs long, but each sentence carries routing or eligibility information rather than filler.

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

Completeness5/5

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

For a read-only eligibility check with an output schema handling the return values, the description covers what the tool does, when to invoke it, what it verifies, the limits of its verdict, and what to do when dependent tools are missing. Nothing needed to call it correctly is absent.

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 0% and the description never mentions the single artistId parameter, so it adds no semantic detail beyond the schema. The parameter is nonetheless self-describing (a UUID artist identifier) and there is only one, which keeps the practical gap small.

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

Purpose5/5

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

The description states a specific verb and resource: it checks whether an artist qualifies for Dynamoi distribution, enumerates the five requirements, and reports the status of an existing application. It is clearly separable from siblings like dynamoi_apply_for_distribution, which the 'permits an application but never guarantees approval' line implicitly positions as the follow-on action.

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 names the exact user phrasings that should trigger it ('get my music on Spotify', 'distribute my song') and the question types it answers (qualification, requirement list, application status). It also routes the agent to a sibling path (purpose=distribution_identity for missing Meta/YouTube identity) and supplies an explicit fallback message and dashboard URL when those tools are unavailable.

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

dynamoi_get_growth_auditGet Spotify Growth AuditA
Read-only
Inspect

Use this when the user asks for an artist's Spotify monthly listeners, listener growth over time, growth audit or score, playlist reach, or growth recommendations. The response carries its status, coverage dates, and limitations; preserve unavailable or stale status and do not treat a missing metric as zero. This is Spotify and market insight data, not paid campaign performance.

ParametersJSON Schema
NameRequiredDescriptionDefault
artistIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered; the description adds real behavioral value on the response side — it warns that results carry status, coverage dates and limitations, that unavailable/stale status must be preserved, and that a missing metric must not be read as zero. It does not mention auth or rate-limit behavior, so it is strong but not exhaustive.

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 trigger condition front-loaded. The second sentence packs status/coverage/limitations and the missing-metric caveat into one dense clause chain, which is slightly heavy but each element earns its place.

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

Completeness4/5

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

An output schema exists, so return values need not be enumerated, and the description still adds interpretation guidance about status and missing metrics. Combined with clear triggers and domain scoping, an agent has enough to invoke it correctly; only the artistId source/format and sibling disambiguation are left implicit.

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 one parameter (artistId, UUID) at 0% schema description coverage, and the description never mentions it or explains that it must be the artist's UUID from dynamoi_list_artists. With a single obvious identifier this is a minor gap, but the description contributes nothing beyond the schema here.

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 concrete outputs — monthly listeners, listener growth over time, growth audit/score, playlist reach, and growth recommendations — so an agent can tell what the tool returns. It also carves out a domain boundary ("Spotify and market insight data, not paid campaign performance"), which separates it from campaign siblings, though it does not distinguish itself from dynamoi_get_artist_analytics or dynamoi_get_audience_analytics.

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

Usage Guidelines4/5

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

It gives an explicit trigger clause ("Use this when the user asks for...") with several concrete user phrasings, plus an exclusion for paid campaign performance data. It stops short of naming the alternative tool an agent should call instead for adjacent questions.

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

dynamoi_get_platform_statusGet Platform StatusA
Read-only
Inspect

Use this when the user wants to know whether Spotify, Meta, or YouTube are connected and what setup steps still block launches. When polling after a connection-start flow, pass the returned onboardingAttemptId and onboardingFlow so Dynamoi ops can correlate the browser step. Do not use this for detailed billing questions. Never use this to personalize generic Instagram or marketing-advice questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo
artistIdYes
onboardingFlowNo
onboardingAttemptIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds real behavioral context beyond that: the polling-after-connection-start use case and the ops-correlation role of onboardingAttemptId/onboardingFlow. It does not mention rate limits, freshness, or caching, which would round it out.

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 sentences, front-loaded with the primary trigger, then the polling detail, then exclusions. Each sentence contributes, though the 'Never use this to personalize generic Instagram or marketing-advice questions' line is oddly scoped for a platform-connection tool and reads as boilerplate.

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

Completeness4/5

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

With an output schema present, the description need not explain return values, and it covers the main when/when-not plus the onboarding correlation params. The gaps are artistId semantics and the meaning of the format enum, minor against the structured coverage that already exists.

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

Parameters3/5

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

Schema coverage is 0%, so the description carries the parameter burden, but it only addresses two of four params (onboardingAttemptId, onboardingFlow) and even there the phrase 'the returned onboardingAttemptId' is ambiguous about where it comes from. The required artistId and the format enum get no explanation in either place.

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 concrete resource and scope: connection status for Spotify, Meta, and YouTube plus the setup steps blocking launches. An agent can tell this apart from billing and generic marketing questions. It stops short of differentiating from adjacent siblings like dynamoi_get_account_overview or dynamoi_get_youtube_channel_data.

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

Usage Guidelines4/5

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

It gives an explicit trigger ('when the user wants to know whether ... are connected'), a specific polling context after a connection-start flow, and two explicit exclusions (billing, Instagram/marketing-advice personalization). No sibling alternative for platform status is named, so it is clear but not fully routing.

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

dynamoi_get_playlist_analyticsGet Playlist AnalyticsA
Read-only
Inspect

Use this when the user asks about an artist's tracked playlist placements, reach, or playlist movement. The response includes freshness and snapshot dates with the playlist and movement rows. These observed placements are not attributed to a paid campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
artistIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is settled. The description adds valuable domain context: the response includes freshness and snapshot dates, and these are observed placements not attributed to a paid campaign. This is meaningful behavioral disclosure beyond annotations, though it omits error handling or rate-limit context.

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

Conciseness5/5

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

The description is three tight sentences, front-loaded with the usage trigger, followed by response content and an important caveat. Every sentence earns its place with no redundancy.

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

Completeness4/5

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

An output schema exists, so return value documentation is not needed. The description still adds useful context about freshness/snapshot dates and non-attribution to campaigns. The only gap is that it doesn't elaborate on the artistId parameter, but given the single simple parameter, this is minor.

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 only one parameter (artistId), and schema coverage is 0%, but the parameter name and UUID format in the schema make its meaning self-evident. The description doesn't discuss the parameter at all, but with a single obvious identifier, the baseline of 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 clear verb+resource combination: it explains the tool returns an artist's tracked playlist placements, reach, and playlist movement. It's specific about what the tool does, though it doesn't explicitly distinguish itself from siblings like dynamoi_get_artist_analytics or dynamoi_get_audience_analytics.

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

Usage Guidelines4/5

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

It provides a clear when-to-use trigger: 'Use this when the user asks about an artist's tracked playlist placements, reach, or playlist movement.' This gives an agent a concrete condition for selecting this tool. It doesn't mention alternatives or exclusions, but the trigger is specific enough to route correctly in most cases.

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

dynamoi_get_youtube_channel_dataGet YouTube Channel DataA
Read-only
Inspect

Use this for "how is my YouTube channel doing?" or "what is growing my channel?" once a channel is linked. Use this to analyze an artist's own connected YouTube channel's estimated ad revenue to inform AdSense strategy and channel growth, alongside subscribers, views, watch time or country, device and subscribed-status breakdowns: paged channel data from the YouTube Analytics warehouse or explicitly qualified synthetic/sample data. Pick one dataset: channel_daily (views, watch time, subscribers gained and lost, likes, shares, playlist starts, estimated revenue, ad revenue, gross revenue, monetized playbacks, CPM and playback-based CPM), video_daily (per-video metrics with titles; filter with videoIds), country_daily, traffic_source_daily, search_term_daily (YouTube search terms for the whole channel), subscribed_status_daily, device_daily, operating_system_daily, playback_location_daily, creator_content_type_daily, or video_catalog (video titles and publish dates). traffic_source_daily rows with source ADVERTISING carry trafficClass=paid and every other source carries trafficClass=organic, but that label only groups sources and is not organic proof: ad clicks that land in a playlist are credited mostly to PLAYLIST and SUBSCRIBER, so trafficClass=organic rows include ad sessions. Organic lift is growth in sources ads do not touch (YT_SEARCH, RELATED_VIDEO, browse features) or lift that persists after spend stops. Warehouse data is observed on the channel, not attributed to any campaign. Preserve the returned source, coverage, freshness, and synthetic/sample qualifications; do not treat synthetic/sample data as observed channel results, campaign attribution, or actual earnings/payouts. Treat returned ad revenue as estimated revenue, not an AdSense payout. The first page of any dataset (including format=summary) also carries one adsense block, the same figures the Dynamoi dashboard and app show: formats (long-form versus Shorts AdSense revenue and RPM), recovery and campaigns (incremental AdSense since each campaign and whether it earned back the billed amount), and countries (AdSense per ad playback against similar channels). It is estimated, not a payout, and covers windowFromDay to windowThroughDay, which is not always the requested range: compare against those fields. recovery.state building or unavailable and null figures mean unknown, never zero; adsense is null outside the YouTube Partner Program, on later pages, or when temporarily unavailable (adsenseNote explains). Compare periods yourself and use the campaigns block (dates, strategy, promoted videos) as context. YouTube data arrives about 2-3 days late and revenue can lag further: check coverage before comparing, and treat placeholderDays and missingDays as unknown, never zero. Not available yet: audience demographics, per-video traffic sources and per-video search terms. Needs a connected channel; a channel that must be reconnected is refused. Returns no ad spend. Before judging a campaign's strategy, read the strategyGuide from dynamoi_get_campaign. Page with nextCursor; format=summary returns only the summary, coverage and adsense.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
formatNo
datasetYes
endDateYes
artistIdYes
videoIdsNo
startDateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false, and openWorldHint=false, but the description adds substantial behavioral context: estimated revenue versus AdSense payout, 2-3 day data latency, revenue lag, unknown versus zero semantics for placeholderDays/missingDays/recovery.state, adsense null conditions, synthetic/sample qualifications, and the fact that no ad spend is returned. This is unusually rich non-contradictory disclosure.

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

Conciseness2/5

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

The description is a single massive paragraph with no headers, bullets, or visual separation. Important caveats about latency, null handling, and prerequisites are buried after long dataset enumerations, making it costly for an agent to parse despite much of the content being substantive.

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

Completeness5/5

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

Given the complex tool with 8 parameters, no schema descriptions, an output schema, and annotations, the description is highly complete. It covers dataset semantics, freshness caveats, null semantics, prerequisites, and limitations, while the output schema can handle return-value documentation.

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

Parameters4/5

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

With 0% schema description coverage, the description must carry parameter meaning. It does well for the dataset enum by listing each dataset's metrics, explains videoIds filtering for video_daily, format=summary behavior, cursor pagination via nextCursor, and implies date-range mapping through windowFromDay/windowThroughDay. It still leaves limit bounds and startDate/endDate mapping largely implicit, so it is strong but not complete.

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

Purpose4/5

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

The description clearly identifies the resource as an artist's connected YouTube channel analytics and enumerates datasets and metrics, but it opens with example questions rather than a crisp verb+resource statement. It also does not explicitly name or distinguish sibling analytics tools such as dynamoi_get_audience_analytics or dynamoi_get_artist_analytics.

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

Usage Guidelines4/5

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

It states when to use the tool ('how is my YouTube channel doing?' or 'what is growing my channel?'), gives key prerequisites (channel linked, reconnected channel refused), and names dynamoi_get_campaign for strategy context. However, it lacks systematic comparison against sibling analytics tools, so it falls short of full when/when-not/alternatives guidance.

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

dynamoi_list_artistsList ArtistsA
Read-only
Inspect

Use this when the user wants to see which artists or YouTube channels they manage, along with billing status, active campaign count, and their role. Pass artistId when you need the full profile/readiness details for one artist instead of a roster page. Do not use this for campaign details; use dynamoi_list_campaigns or dynamoi_get_campaign. Never use this for generic social-media or marketing advice, including Instagram follower-growth questions, unless the user explicitly asked about their Dynamoi roster. If the result is empty, the user is brand-new — do not stop with 'no records found'; route through dynamoi_get_account_overview.recommendedNextActions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
formatNo
artistIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real context beyond that: the fields returned, the shape change when artistId is passed, and the empty-result semantics. It does not mention pagination behavior for cursor or rate limits.

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?

Front-loaded with the primary use case, then the artistId variant, then exclusions, then the empty-result fallback — a logical order with no filler. It is dense, and the negative-instruction sentence is long, but every clause carries routing value.

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?

An output schema exists, so return-value documentation is unnecessary, and the description still covers scope, the single-artist variant, sibling alternatives, and the empty-result path. Nothing an agent needs to select or invoke this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning; it explains artistId well (full profile/readiness for one artist vs a roster page) and implies pagination via 'roster page'. However limit, cursor, and format (json/summary enum) are never addressed, leaving half the parameters undocumented in both places.

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?

Names a specific verb+resource ('list artists or YouTube channels they manage') and enumerates the distinguishing payload (billing status, active campaign count, role), which separates it from analytics and campaign tools. The artistId branch is explicitly framed as a single-profile lookup versus a roster page.

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?

Explicit when-to-use, when-not-to-use (campaign details → dynamoi_list_campaigns / dynamoi_get_campaign; generic social-media advice), and an edge-case routing rule (empty result → dynamoi_get_account_overview.recommendedNextActions). Alternatives are named rather than implied.

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

dynamoi_list_campaignsList CampaignsA
Read-only
Inspect

Use this when the user wants to browse campaigns for one artist, optionally filtered by type or status. Do not use this for a single campaign deep dive; use dynamoi_get_campaign for that. Never use this to personalize generic marketing advice. If the user has no artists yet, do not call this — route via dynamoi_get_account_overview first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
formatNo
statusNo
artistIdYes
campaignTypeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds genuine non-schema context: the prerequisite that an artist must exist and the redirect path when it does not. It stops short of describing pagination behavior (limit/cursor) or the json vs summary format trade-off.

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

Conciseness5/5

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

Three sentences, all front-loaded, with the positive use case first, the sibling exclusion second, and the precondition last. No filler or restated name/title text; every sentence carries routing or constraint information an agent needs.

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

Completeness4/5

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

For a list tool with an output schema, return-value explanation is unnecessary, and the annotations cover safety. The description handles routing and disqualification well, but the operator-level details an agent would need (pagination, format selection) are absent from both description and schema.

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 0% across six parameters, so the description must carry the load. It does cover the artist scoping and the two filter params (type, status), but says nothing about limit (max 50), cursor-based pagination, or the format enum (json/summary), leaving three of six parameters undocumented anywhere.

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?

States a specific verb and resource (browse campaigns) scoped to one artist, plus the optional filter dimensions (type, status). It explicitly carves out the boundary against dynamoi_get_campaign, so an agent can distinguish the two without inspecting either schema.

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?

Provides explicit when-to-use, when-not-to-use ('Do not use this for a single campaign deep dive'), names the alternative tool, and adds a routing precondition ('If the user has no artists yet... route via dynamoi_get_account_overview first'). This is about as complete as usage guidance gets.

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

dynamoi_open_workspaceOpen Artist WorkspaceA
Read-only
Inspect

Open the read-only Dynamoi workspace when the user wants to browse their existing artists, campaigns, Smart Links and observed results in ChatGPT. Returns an authorized artist roster or an honest empty account state. Does not create links, change campaigns, start purchases or connect accounts. Use individual read tools for follow-up details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description still adds value by describing the return states ('authorized artist roster or an honest empty account state') and by enumerating the write actions it deliberately will not perform, which clarifies the scope boundary. It stops short of richer behavioral detail, but the annotation coverage lowers the bar.

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?

Four sentences, front-loaded with the purpose and empty-state behavior before the exclusions and routing hint. Slightly list-heavy in the negative clause ('create links, change campaigns, start purchases or connect accounts'), but every clause still earns its place by defining scope.

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?

With zero parameters, an output schema present, and annotations covering the safety profile, the description only needs to convey purpose, scope boundaries and when to use it — all of which it does. An agent has everything required to invoke it correctly.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to document and the baseline is 4. The description correctly adds no redundant parameter talk.

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?

States a specific verb and resource ('Open the read-only Dynamoi workspace') and immediately scopes it to browsing artists, campaigns, Smart Links and observed results. It also differentiates itself from the list/get siblings by directing follow-up detail lookups to 'individual read tools.'

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

Usage Guidelines5/5

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

Gives an explicit when ('when the user wants to browse their existing artists, campaigns, Smart Links and observed results in ChatGPT'), explicit when-nots ('Does not create links, change campaigns, start purchases or connect accounts'), and names the alternative path for follow-up details. Nothing 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.

fetchFetch (OpenAI Connectors)A
Read-only
Inspect

OpenAI ChatGPT Deep Research / Connectors fetch contract. Given an id returned by search (formatted as 'artist:', 'campaign:', or 'smartlink:'), returns the full record for citation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dataNo
kindNo
fieldNo
statusYes
draftIdNo
messageNo
retryableNo
nextActionNo
failureStageNo
prerequisiteNo
screeningResultNo
retryAfterSecondsNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds little behavioral context beyond noting the output is 'for citation' – no rate limits, id-expiry, or failure behavior. With annotations carrying the load, a 3 is appropriate.

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

Conciseness4/5

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

Two tight sentences, front-loaded with the tool's identity and the id-provenance constraint, with no filler. Slightly dense with the 'OpenAI ChatGPT Deep Research / Connectors fetch contract' preamble but overall 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-value documentation is not needed, and annotations cover safety. For a single-parameter fetch tool the description covers purpose, provenance, and id format adequately; only edge-case behavior is absent.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does by spelling out the required id format with three concrete variants ('artist:<uuid>', 'campaign:<uuid>', 'smartlink:<uuid>'). That is genuinely useful meaning beyond the bare `string` type, though it doesn't address length limits.

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/resource: given an id it 'returns the full record for citation.' It also names the companion tool (`search`) that produces the id, so an agent can place it relative to siblings rather than guessing.

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

Usage Guidelines4/5

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

Clearly establishes the dependency: it must be called with an id 'returned by `search`,' which is an explicit usage context and ordering constraint. It stops short of stating when NOT to use it (e.g., when you only need list results, use search), so it's not a full 5.

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. 3 tool updates
    • Removeddynamoi_update_smart_link
    • Addeddynamoi_update_smart_link_artist_settings
    • Addeddynamoi_update_smart_link_description
  2. 1 tool update
    • Changeddynamoi_list_campaigns1 field changed
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "AWAITING_SMART_LINK",
        -  "ACTIVE",
        -  "ARCHIVED",
        -  "CONTENT_VALIDATION",
        -  "DEPLOYING",
        -  "FAILED",
        -  "PAUSED",
        -  "READY_FOR_REVIEW",
        -  "SUBSCRIPTION_PAUSED"
        -]New value: +[
        +  "AWAITING_SMART_LINK",
        +  "ACTIVE",
        +  "ARCHIVED",
        +  "CONTENT_VALIDATION",
        +  "DEPLOYING",
        +  "ENDED",
        +  "FAILED",
        +  "PAUSED",
        +  "READY_FOR_REVIEW",
        +  "SUBSCRIPTION_PAUSED"
        +]
  3. 3 tool updates
    • Addeddynamoi_get_audience_analytics
    • Addeddynamoi_get_growth_audit
    • Addeddynamoi_get_playlist_analytics
  4. 20 tool updates
    • Changeddynamoi_about1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_apply_for_distribution1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_create_smart_link_from_spotify1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_create_smart_links_from_spotify_artist1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_get_account_overview1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_get_artist_analytics1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_get_campaign1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_get_distribution_application1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_get_platform_status1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_get_smart_link1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_get_youtube_channel_data1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_list_artists1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_list_campaigns1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_list_smart_links1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Addeddynamoi_open_workspace
    • Changeddynamoi_preview_smart_link_themes1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_search1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changeddynamoi_update_smart_link1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changedfetch1 field changed
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
    • Changedsearch2 fields changed
      • changedInput schema / properties / query / maxLength
        Previous value: -500New value: +120
      • changedOutput schema / properties / code / enum
        Previous value: -[
        -  "ACCOUNT_READ_ONLY",
        -  "INVALID_SPOTIFY_SOURCE",
        -  "CAPABILITY_REQUIRED",
        -  "INSUFFICIENT_SCOPE",
        -  "STATE_CONFLICT",
        -  "QUOTE_CHANGED",
        -  "RATE_LIMITED",
        -  "OUTPUT_INVALID",
        -  "UNKNOWN_EFFECT"
        -]New value: +[
        +  "ACCOUNT_READ_ONLY",
        +  "INVALID_SPOTIFY_SOURCE",
        +  "CAPABILITY_REQUIRED",
        +  "INSUFFICIENT_SCOPE",
        +  "TENANT_ACCESS_DENIED",
        +  "STATE_CONFLICT",
        +  "QUOTE_CHANGED",
        +  "RATE_LIMITED",
        +  "OUTPUT_INVALID",
        +  "UNKNOWN_EFFECT"
        +]
  5. 5 tool updates
    • Changeddynamoi_create_smart_link_from_spotify8 fields changed
      • removedOutput schema / properties / data / properties / customDescription / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / data / properties / customDescription / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / data / properties / originalSpotifyUrl / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / data / properties / originalSpotifyUrl / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / data / properties / spotifyUrl / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / data / properties / spotifyUrl / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / data / properties / workflowWarning / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / data / properties / workflowWarning / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changeddynamoi_create_smart_links_from_spotify_artist3 fields changed
      • changedOutput schema / properties / data / properties / initialSmartLink / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "artistHubUrl": {
        -        "type": "string"
        -      },
        -      "artistId": {
        -        "type": "string"
        -      },
        -      "artistName": {
        -        "type": "string"
        -      },
        -      "claimStatus": {
        -        "enum": [
        -          "auto_approved",
        -          "pending_ops_review",
        -          "verification_deferred",
        -          "approved_by_ops",
        -          "rejected"
        -        ],
        -        "type": "string"
        -      },
        -      "createdAt": {
        -        "type": "string"
        -      },
        -      "id": {
        -        "type": "string"
        -      },
        -      "isPublic": {
        -        "type": "boolean"
        -      },
        -      "localizedPublicUrls": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "publicUrl": {
        -        "type": "string"
        -      },
        -      "publishState": {
        -        "enum": [
        -          "published",
        -          "unpublished"
        -        ],
        -        "type": "string"
        -      },
        -      "releaseSlug": {
        -        "type": "string"
        -      },
        -      "releaseTitle": {
        -        "type": "string"
        -      },
        -      "releaseType": {
        -        "type": "string"
        -      },
        -      "renderState": {
        -        "enum": [
        -          "queued",
        -          "rendering",
        -          "rendered",
        -          "failed"
        -        ],
        -        "type": "string"
        -      },
        -      "spotifyUrl": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "takedownStatus": {
        -        "enum": [
        -          "none",
        -          "active",
        -          "resolved"
        -        ],
        -        "type": "string"
        -      },
        -      "theme": {
        -        "enum": [
        -          "classic",
        -          "brutalist",
        -          "aurora",
        -          "cinematic"
        -        ],
        -        "type": "string"
        -      },
        -      "updatedAt": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "artistHubUrl",
        -      "artistId",
        -      "artistName",
        -      "claimStatus",
        -      "createdAt",
        -      "id",
        -      "isPublic",
        -      "publicUrl",
        -      "publishState",
        -      "releaseSlug",
        -      "releaseTitle",
        -      "releaseType",
        -      "renderState",
        -      "spotifyUrl",
        -      "takedownStatus",
        -      "theme",
        -      "updatedAt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "artistHubUrl": {
        +        "type": "string"
        +      },
        +      "artistId": {
        +        "type": "string"
        +      },
        +      "artistName": {
        +        "type": "string"
        +      },
        +      "claimStatus": {
        +        "enum": [
        +          "auto_approved",
        +          "pending_ops_review",
        +          "verification_deferred",
        +          "approved_by_ops",
        +          "rejected"
        +        ],
        +        "type": "string"
        +      },
        +      "createdAt": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "isPublic": {
        +        "type": "boolean"
        +      },
        +      "localizedPublicUrls": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "publicUrl": {
        +        "type": "string"
        +      },
        +      "publishState": {
        +        "enum": [
        +          "published",
        +          "unpublished"
        +        ],
        +        "type": "string"
        +      },
        +      "releaseSlug": {
        +        "type": "string"
        +      },
        +      "releaseTitle": {
        +        "type": "string"
        +      },
        +      "releaseType": {
        +        "type": "string"
        +      },
        +      "renderState": {
        +        "enum": [
        +          "queued",
        +          "rendering",
        +          "rendered",
        +          "failed"
        +        ],
        +        "type": "string"
        +      },
        +      "spotifyUrl": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "takedownStatus": {
        +        "enum": [
        +          "none",
        +          "active",
        +          "resolved"
        +        ],
        +        "type": "string"
        +      },
        +      "theme": {
        +        "enum": [
        +          "classic",
        +          "brutalist",
        +          "aurora",
        +          "cinematic"
        +        ],
        +        "type": "string"
        +      },
        +      "updatedAt": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "artistHubUrl",
        +      "artistId",
        +      "artistName",
        +      "claimStatus",
        +      "createdAt",
        +      "id",
        +      "isPublic",
        +      "publicUrl",
        +      "publishState",
        +      "releaseSlug",
        +      "releaseTitle",
        +      "releaseType",
        +      "renderState",
        +      "spotifyUrl",
        +      "takedownStatus",
        +      "theme",
        +      "updatedAt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / data / properties / smartLinks / items / properties / spotifyUrl / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / data / properties / smartLinks / items / properties / spotifyUrl / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Addeddynamoi_get_youtube_channel_data
    • Changeddynamoi_list_smart_links1 field changed
      • changedOutput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "nextCursor": {
        -        "type": "string"
        -      },
        -      "smartLinks": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "artistHubUrl": {
        -              "type": "string"
        -            },
        -            "artistId": {
        -              "type": "string"
        -            },
        -            "artistName": {
        -              "type": "string"
        -            },
        -            "claimStatus": {
        -              "enum": [
        -                "auto_approved",
        -                "pending_ops_review",
        -                "verification_deferred",
        -                "approved_by_ops",
        -                "rejected"
        -              ],
        -              "type": "string"
        -            },
        -            "createdAt": {
        -              "type": "string"
        -            },
        -            "id": {
        -              "type": "string"
        -            },
        -            "isPublic": {
        -              "type": "boolean"
        -            },
        -            "localizedPublicUrls": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "publicUrl": {
        -              "type": "string"
        -            },
        -            "publishState": {
        -              "enum": [
        -                "published",
        -                "unpublished"
        -              ],
        -              "type": "string"
        -            },
        -            "releaseSlug": {
        -              "type": "string"
        -            },
        -            "releaseTitle": {
        -              "type": "string"
        -            },
        -            "releaseType": {
        -              "type": "string"
        -            },
        -            "renderState": {
        -              "enum": [
        -                "queued",
        -                "rendering",
        -                "rendered",
        -                "failed"
        -              ],
        -              "type": "string"
        -            },
        -            "spotifyUrl": {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "takedownStatus": {
        -              "enum": [
        -                "none",
        -                "active",
        -                "resolved"
        -              ],
        -              "type": "string"
        -            },
        -            "theme": {
        -              "enum": [
        -                "classic",
        -                "brutalist",
        -                "aurora",
        -                "cinematic"
        -              ],
        -              "type": "string"
        -            },
        -            "updatedAt": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "artistHubUrl",
        -            "artistId",
        -            "artistName",
        -            "claimStatus",
        -            "createdAt",
        -            "id",
        -            "isPublic",
        -            "publicUrl",
        -            "publishState",
        -            "releaseSlug",
        -            "releaseTitle",
        -            "releaseType",
        -            "renderState",
        -            "spotifyUrl",
        -            "takedownStatus",
        -            "theme",
        -            "updatedAt"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "smartLinks"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "nextCursor": {
        -        "type": "string"
        -      },
        -      "summary": {
        -        "type": "string"
        -      },
        -      "totalCount": {
        -        "type": "number"
        -      }
        -    },
        -    "required": [
        -      "summary",
        -      "totalCount"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "nextCursor": {
        +        "type": "string"
        +      },
        +      "smartLinks": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "artistHubUrl": {
        +              "type": "string"
        +            },
        +            "artistId": {
        +              "type": "string"
        +            },
        +            "artistName": {
        +              "type": "string"
        +            },
        +            "claimStatus": {
        +              "enum": [
        +                "auto_approved",
        +                "pending_ops_review",
        +                "verification_deferred",
        +                "approved_by_ops",
        +                "rejected"
        +              ],
        +              "type": "string"
        +            },
        +            "createdAt": {
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "isPublic": {
        +              "type": "boolean"
        +            },
        +            "localizedPublicUrls": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "publicUrl": {
        +              "type": "string"
        +            },
        +            "publishState": {
        +              "enum": [
        +                "published",
        +                "unpublished"
        +              ],
        +              "type": "string"
        +            },
        +            "releaseSlug": {
        +              "type": "string"
        +            },
        +            "releaseTitle": {
        +              "type": "string"
        +            },
        +            "releaseType": {
        +              "type": "string"
        +            },
        +            "renderState": {
        +              "enum": [
        +                "queued",
        +                "rendering",
        +                "rendered",
        +                "failed"
        +              ],
        +              "type": "string"
        +            },
        +            "spotifyUrl": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "takedownStatus": {
        +              "enum": [
        +                "none",
        +                "active",
        +                "resolved"
        +              ],
        +              "type": "string"
        +            },
        +            "theme": {
        +              "enum": [
        +                "classic",
        +                "brutalist",
        +                "aurora",
        +                "cinematic"
        +              ],
        +              "type": "string"
        +            },
        +            "updatedAt": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "artistHubUrl",
        +            "artistId",
        +            "artistName",
        +            "claimStatus",
        +            "createdAt",
        +            "id",
        +            "isPublic",
        +            "publicUrl",
        +            "publishState",
        +            "releaseSlug",
        +            "releaseTitle",
        +            "releaseType",
        +            "renderState",
        +            "spotifyUrl",
        +            "takedownStatus",
        +            "theme",
        +            "updatedAt"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "smartLinks"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "nextCursor": {
        +        "type": "string"
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "totalCount": {
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "summary",
        +      "totalCount"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changeddynamoi_update_smart_link3 fields changed
      • changedInput schema / properties / expectedUpdatedAt / pattern
        Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
      • removedOutput schema / properties / data / properties / renderWarning / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / data / properties / renderWarning / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  6. 1 tool update
    • Changeddynamoi_get_campaign1 field changed
      • addedInput schema / properties / includeChannelResults
        Added value: +{
        +  "type": "boolean"
        +}

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.