Skip to content

MCP and plugins

The NormalDance Protocol MCP server exposes the music-rights protocol to AI agents: track identification by perceptual ADNA fingerprint (survives re-encoding, remixes and third-party mixes), NDT rights manifests, artist verification, royalties and subject passports — 21 tools.

Public endpoint: https://mcp.normaldance.ru. Transports: remote (SSE / Streamable HTTP) and stdio via the npm package @aendykachess/ndp-mcp.

Access key

Keys are issued free via Telegram @NORMALDANCE. The key is read from environment variables only (REGISTRY_TOKEN) — do not paste it into project files. Without a key initialize and tools/list work; registry calls return an authorization error.

Installation

Claude Code

claude mcp add --transport sse ndp https://mcp.normaldance.ru/http \
  --header "Authorization: Bearer <key>"

ZCode (ndp-mcp plugin)

The plugin runs the published npm package in stdio mode; Node ≥ 18 required.

  1. Export the key before starting ZCode: export REGISTRY_TOKEN="<key>".
  2. Plugin Marketplace → Add → Add Plugin Marketplace → point to the plugins/ directory of the NDP repository.
  3. Personal → ndp-mcp dev → plugin ndp-mcp → Install.
  4. Restart the session — the server appears as ndp.

Other MCP clients

{
  "mcpServers": {
    "ndp": {
      "type": "sse",
      "url": "https://mcp.normaldance.ru/http",
      "headers": { "Authorization": "Bearer <key>" }
    }
  }
}

stdio variant (local package run):

npx -y @aendykachess/ndp-mcp
# env: REGISTRY_URL=https://mcp.normaldance.ru, REGISTRY_TOKEN=<key>

Tools (21)

Verification and passports

Tool What it does
verify_artist artist by name (Stage 0 registry) or wallet
get_artist_passport artist passport
check_artist_tracks artist track count
get_label_info label card

Identification and track registry

Tool What it does
identify_track ADNA v1/v2 or ISRC; verdict ≥0.90 same track, 0.75–0.90 derivative, <0.75 unrelated
register_track ISRC + ADNA + splits Σ=100; parent_isrc for derivatives
get_track_manifest NDT manifest: rights, splits, sonic-dna
check_track_ownership ownership by ISRC
get_royalty_balance track royalty balance
start_ucp_checkout track purchase (UCP-compatible checkout)

Subjects (Proof of Humanity, §1)

Tool What it does
subject_mint passport mint; 3 verification paths: label / indie_kyc / community
subject_status public passport status
subject_keys subject device keys
snapshot_epoch epoch snapshot of subject statuses

Receipts and audience (§7.1/§7.7)

Tool What it does
receipt_batch batch of signed play receipts
stats_journal daily event journal and chart
audience_summary artist audience (agent token with scope read_audience)
audience_superfans superfans derived from receipts
opt_in listener segmentation visibility toggle

Service: get_system_stats, trigger_n8n_workflow.

Resources: ndp://registry/tracks, ndp://registry/artists, ndp://subjects, ndp://epochs/latest. Prompt: audit_scene (§7.18, scene audit).

Usage notes

  1. ADNA fingerprints are computed locally with the repository CLI (ndp-cli/src/main.py tag|compare) — tools accept ready base64 fingerprints (adna, v2 starts with QTI).
  2. identify_track without a fingerprint accepts isrc — returns registry data.
  3. register_track requires isrc, title, adna, splits (sum 100; derivative cascade: {role: "parent", wallet: "isrc:<ISRC>", share: N}).
  4. Audience tools require the passport owner's Bearer token or an agent token from POST /subjects/{ndp_id}/scopes/issue — an agent cannot obtain these itself; the owner issues them.

Troubleshooting

  • 401 from tools — the key was not picked up: exported after the client started?
  • stdio server logs go to stderr — check your MCP client's server panel.