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.
- Export the key before starting ZCode:
export REGISTRY_TOKEN="<key>". - Plugin Marketplace → Add → Add Plugin Marketplace → point to the
plugins/directory of the NDP repository. - Personal → ndp-mcp dev → plugin ndp-mcp → Install.
- 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¶
- ADNA fingerprints are computed locally with the repository CLI
(
ndp-cli/src/main.py tag|compare) — tools accept ready base64 fingerprints (adna, v2 starts withQTI). identify_trackwithout a fingerprint acceptsisrc— returns registry data.register_trackrequiresisrc,title,adna,splits(sum 100; derivative cascade:{role: "parent", wallet: "isrc:<ISRC>", share: N}).- 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¶
401from 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.