addrbookFor publishers
← The evidence ledger

Evidence row 221369

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 6b54853f-c179-4f2e-8eac-d7aa4e1f1e33
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
44200b94650262ee883817285550861da8ebbd689a551f4961bbec9ac5658ee2
Leaf
0xe1c1df5fead74e41770979dc50dec74c68378423066319185cdcf26cce6b2c2b

What was observed

{
  "count": 24,
  "tools": [
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "dynamoi_about"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "adultSignerAttestation": {
            "const": true,
            "type": "boolean"
          },
          "applicantCountry": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string"
          },
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "confirmApplicationSubmission": {
            "const": true,
            "type": "boolean"
          },
          "payoutCountry": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string"
          },
          "taxResidencyCountry": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string"
          },
          "userIntentSummary": {
            "maxLength": 500,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "adultSignerAttestation",
          "applicantCountry",
          "artistId",
          "confirmApplicationSubmission",
          "payoutCountry",
          "taxResidencyCountry",
          "userIntentSummary"
        ],
        "type": "object"
      },
      "name": "dynamoi_apply_for_distribution"
    },
    {
      "description": "Use this for \"make a link for my song\" or a release or link-in-bio page for a new single. Use this when the user wants to create one free Dynamoi Smart Link from a Spotify album or track URL/URI, or a single starter release from a Spotify artist URL. For full-catalog artist imports or artist hub requests, prefer dynamoi_create_smart_links_from_spotify_artist. Smart Links are free to create and manage. High-popularity or unverifiable artist links may stay unpublished in verification hold until Dynamoi can verify the client relationship. This does not create a paid ad campaign. Spotify playlist URLs are not supported today. This is also how to add a release missing from an artist's imported catalog: the user pastes that release's exact Spotify album, single, or EP URL. If the Smart Link already exists, return the existing link instead of creating a duplicate; if customDescription is provided, update that Smart Link's public description. In the final answer, lead with the public URL and do not expose internal IDs unless asked.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "clientRequestId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "customDescription": {
            "maxLength": 500,
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "spotifyUrl": {
            "maxLength": 500,
            "minLength": 1,
            "type": "string"
          },
          "userIntentSummary": {
            "maxLength": 500,
            "type": "string"
          }
        },
        "required": [
          "artistId",
          "spotifyUrl"
        ],
        "type": "object"
      },
      "name": "dynamoi_create_smart_link_from_spotify"
    },
    {
      "description": "Use this when the user gives a Spotify artist URL and wants Dynamoi to create, import, or refresh free Smart Links for the artist catalog and return the artist hub. If the signed-in user has no Dynamoi artist yet, omit artistId so Dynamoi can create the first artist from the Spotify artist profile. This starts the background catalog import so the user does not need to open the dashboard. Smart Links are free to create and manage. High-popularity or unverifiable artist catalog links may stay unpublished in verification hold until Dynamoi can verify the client relationship. This does not create a paid ad campaign. In the final answer, lead with the artist hub URL and current public Smart Link URLs; do not expose internal IDs unless asked.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "clientRequestId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "spotifyArtistUrl": {
            "maxLength": 500,
            "minLength": 1,
            "type": "string"
          },
          "userIntentSummary": {
            "maxLength": 500,
            "type": "string"
          }
        },
        "required": [
          "spotifyArtistUrl"
        ],
        "type": "object"
      },
      "name": "dynamoi_create_smart_links_from_spotify_artist"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "intent": {
            "default": "account_overview",
            "enum": [
              "account_overview",
              "artist_access_check",
              "organization_access_check",
              "platform_connection_check"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "dynamoi_get_account_overview"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "dateRange": {
            "additionalProperties": false,
            "properties": {
              "end": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              "start": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              }
            },
            "required": [
              "end",
              "start"
            ],
            "type": "object"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "granularity": {
            "enum": [
              "TOTAL",
              "DAILY"
            ],
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_artist_analytics"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "range": {
            "default": "30d",
            "enum": [
              "7d",
              "30d",
              "90d"
            ],
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_audience_analytics"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "analyticsDateRange": {
            "additionalProperties": false,
            "properties": {
              "end": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              "start": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              }
            },
            "required": [
              "end",
              "start"
            ],
            "type": "object"
          },
          "analyticsGranularity": {
            "enum": [
              "TOTAL",
              "DAILY"
            ],
            "type": "string"
          },
          "campaignId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "includeAnalytics": {
            "type": "boolean"
          },
          "includeChannelResults": {
            "type": "boolean"
          },
          "includeCountries": {
            "type": "boolean"
          },
          "includeDeploymentStatus": {
            "type": "boolean"
          }
        },
        "required": [
          "campaignId"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_campaign"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_distribution_application"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_growth_audit"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "onboardingAttemptId": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "onboardingFlow": {
            "enum": [
              "meta",
              "youtube"
            ],
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_platform_status"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_playlist_analytics"
    },
    {
      "description": "Use this when the user wants full details for one free Smart Link, including release, Spotify URL, public play.dynamoi.com URL, current status, theme source, and next actions. Set includeAnalytics=true for visit/click analytics and includeArtistSettings=true for artist-level theme/pixel settings. In the final answer, lead with the public URL and do not expose internal IDs unless asked.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "dateRange": {
            "additionalProperties": false,
            "properties": {
              "end": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              "start": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              }
            },
            "required": [
              "end",
              "start"
            ],
            "type": "object"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "granularity": {
            "enum": [
              "TOTAL",
              "DAILY"
            ],
            "type": "string"
          },
          "includeAnalytics": {
            "type": "boolean"
          },
          "includeArtistSettings": {
            "type": "boolean"
          },
          "includeBreakdowns": {
            "type": "boolean"
          },
          "playLinkId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "spotifyUrl": {
            "maxLength": 500,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "dynamoi_get_smart_link"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "cursor": {
            "maxLength": 1000,
            "minLength": 1,
            "type": "string"
          },
          "dataset": {
            "enum": [
              "channel_daily",
              "video_daily",
              "country_daily",
              "traffic_source_daily",
              "search_term_daily",
              "subscribed_status_daily",
              "device_daily",
              "operating_system_daily",
              "playback_location_daily",
              "creator_content_type_daily",
              "video_catalog"
            ],
            "type": "string"
          },
          "endDate": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "limit": {
            "maximum": 1000,
            "minimum": 1,
            "type": "integer"
          },
          "startDate": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "videoIds": {
            "items": {
              "pattern": "^[A-Za-z0-9_-]{11}$",
              "type": "string"
            },
            "maxItems": 50,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "artistId",
          "dataset",
          "endDate",
          "startDate"
        ],
        "type": "object"
      },
      "name": "dynamoi_get_youtube_channel_data"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "cursor": {
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "limit": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "dynamoi_list_artists"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "campaignType": {
            "enum": [
              "SMART_CAMPAIGN",
              "YOUTUBE"
            ],
            "type": "string"
          },
          "cursor": {
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "limit": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "status": {
            "enum": [
              "AWAITING_SMART_LINK",
              "ACTIVE",
              "ARCHIVED",
              "CONTENT_VALIDATION",
              "DEPLOYING",
              "ENDED",
              "FAILED",
              "PAUSED",
              "READY_FOR_REVIEW",
              "SUBSCRIPTION_PAUSED"
            ],
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_list_campaigns"
    },
    {
      "description": "Use this when the user wants to list free Smart Links for one artist, including release title, public URL, publish state, claim state, render state, and theme. Do not use this for paid campaign lists; use dynamoi_list_campaigns for campaigns. In the final answer, show public URLs and avoid internal IDs unless asked. If empty for an artist with connected Spotify, suggest dynamoi_create_smart_links_from_spotify_artist for catalog import or dynamoi_create_smart_link_from_spotify for one release instead of stopping at 'no Smart Links yet'.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "claimStatus": {
            "enum": [
              "auto_approved",
              "pending_ops_review",
              "verification_deferred",
              "approved_by_ops",
              "rejected"
            ],
            "type": "string"
          },
          "cursor": {
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "limit": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "publishState": {
            "enum": [
              "published",
              "unpublished"
            ],
            "type": "string"
          },
          "query": {
            "maxLength": 120,
            "type": "string"
          },
          "renderState": {
            "enum": [
              "queued",
              "rendering",
              "rendered",
              "failed"
            ],
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_list_smart_links"
    },
    {
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "dynamoi_open_workspace"
    },
    {
      "description": "Use this when the user asks what Dynamoi Smart Link pages can look like, wants to compare Smart Link themes, or asks to preview the available themes before creating or updating a free Smart Link. This is a read-only visual preview and does not create, publish, update, or promote a Smart Link.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistName": {
            "maxLength": 80,
            "minLength": 1,
            "type": "string"
          },
          "releaseTitle": {
            "maxLength": 80,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "dynamoi_preview_smart_link_themes"
    },
    {
      "description": "Use this when the user mentions an artist, release, campaign, or smart link but you do not yet know the exact record to inspect. Do not use this for analytics summaries or billing questions once you already know the target record. If the result is empty for a brand-new user (no artists yet), do not respond 'no records found' as a terminal answer — instead suggest creating their first artist hub via dynamoi_create_smart_links_from_spotify_artist.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "cursor": {
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "summary"
            ],
            "type": "string"
          },
          "includeArchived": {
            "type": "boolean"
          },
          "limit": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "query": {
            "maxLength": 120,
            "type": "string"
          },
          "type": {
            "enum": [
              "artist",
              "campaign",
              "smartlink"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "dynamoi_search"
    },
    {
      "description": "Use this when the user wants to change artist-level Smart Link theme or validated pixel settings. This tool only changes artist settings; it cannot change a link description or publish or unpublish links. Confirm the requested settings before calling. Theme-only changes switch instantly; pixel changes may queue background rendering.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "artistId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "clientRequestId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "googleAdsConversionId": {
            "anyOf": [
              {
                "maxLength": 32,
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "metaPixelId": {
            "anyOf": [
              {
                "maxLength": 32,
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "theme": {
            "enum": [
              "classic",
              "brutalist",
              "aurora",
              "cinematic"
            ],
            "type": "string"
          },
          "tiktokPixelId": {
            "anyOf": [
              {
                "maxLength": 32,
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "userIntentSummary": {
            "maxLength": 500,
            "type": "string"
          }
        },
        "required": [
          "artistId"
        ],
        "type": "object"
      },
      "name": "dynamoi_update_smart_link_artist_settings"
    },
    {
      "description": "Use this when the user wants to update one Smart Link's public description. This tool only changes that link's description; it cannot change artist-level theme or pixel settings and does not publish or unpublish links. Confirm the requested description before calling. A description change may queue background rendering.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "clientRequestId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "customDescription": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "expectedUpdatedAt": {
            "format": "date-time",
            "pattern": "^(?:(?:\\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))$",
            "type": "string"
          },
          "playLinkId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "userIntentSummary": {
            "maxLength": 500,
            "type": "string"
          }
        },
        "required": [
          "customDescription",
          "playLinkId"
        ],
        "type": "object"
      },
      "name": "dynamoi_update_smart_link_description"
    },
    {
      "description": "OpenAI ChatGPT Deep Research / Connectors fetch contract. Given an id returned by `search` (formatted as 'artist:<uuid>', 'campaign:<uuid>', or 'smartlink:<uuid>'), returns the full record for citation.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "fetch"
    },
    {
      "description": "OpenAI ChatGPT Deep Research / Connectors search contract. Returns matching Dynamoi artists, campaigns, and Smart Links so they can be cited in a deep-research session. For regular ChatGPT chat use dynamoi_search instead.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "query": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search"
    }
  ]
}

What the leaf hashes

{"body":"44200b94650262ee883817285550861da8ebbd689a551f4961bbec9ac5658ee2","id":221369,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793027311606479,"prev":null,"subject":"6b54853f-c179-4f2e-8eac-d7aa4e1f1e33","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0xe1c1cdf5244868fea7cbb3240cf67be11742ca08f5d3625ce567d1a833ea534f
  2. 0x1dd8a29203e521dc3cc9d3e327d837052b12c7f28ea63951663166d9db055e59
  3. 0x465f74b00771b366198447ec98b784727bd0395e313eccbfd472a14966669a7c
  4. 0xb79ca7806a2692b8f5eb369122a9a13ec31d4aa12328fc0ae293b408d31db4e6
  5. 0xe880655129cbeb52adf55d02f60d42a8ff849b388fb28d3d9cd4d41d61d7ceab
  6. 0x9085ed2b601d04b8c1420655f08686660e91319d86059d99c52e0d320ca230b4
  7. 0x9835efbf66fe43aef2c20178e99621a819cec3826e5cdfbcb4d495c6b5008ae7
  8. 0x1bfa6ea46864a44b1a9bfafa6b7b126a7b7ac67b333f353ca4f81589369bbb29
  9. 0x255df5c0dee1f232ec5aea7b5d871fb431b40a0503273217ce9040b10ce8c2d5
  10. 0x2cbff68076c452d653c930667b60ac0d1dd957bf168bc813dea281be86c2e39f
  11. 0xce35ce45ef8f8ea3dfabeeed3d2069f34fb82c77d0d8f31e3429b7d6deb0a351
  12. 0x714c96bd488ccf4af927c8bc83397404f7f6f1b165b622d0e8216290209825e4
  13. 0x3fcdf7fa32ccefe771eb57ae3015142065d64e3ce732fea7d11b9a3c99dde44f
  14. 0x0b7541c75cc482a7134110311d7dbd02095d969ba21177de9b21a52a55981718
  15. 0x6dc40f983a3840a0ad927a9ca17f4ff1e3b649a6c735e2a09b140db7c2caf13b
  16. 0x703f95866af09c5e5d6ead7411e9a10f964a41a2aff64d4a55ff0053c023a023
  17. 0xd0651cb9bc8155eb52b5247d506e74b8a935057dc190ba52091702ac25ed3a40
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON