Skip to main content
Glama

Tag-per-Track MCP Server

Smithery npm version License: MIT

This project is a local Model Context Protocol (MCP) server that allows AI agents (like Claude) to analyze audio files via the Tag-per-Track API. It authenticates either with a Studio API key (prepaid credits bought on tag-per-track.cloud, no crypto needed) or with a wallet, in which case it automatically handles the USDC micro-payment using the x402 protocol on the Base network.

🎯 Vision

Enable an AI to "pay to listen" autonomously. When an AI agent wants to analyze a track, it uses this MCP server, which signs an EIP-3009 (USDC) payment authorization and instantly retrieves the enriched track metadata.

Related MCP server: studiosphere-pulse-mcp

🚀 Features

  • analyze_audio Tool (Canonical): Extracts BPM, Genre, Mood, Key, Instruments, production metrics, optional Lyrics (1 credit or 0.15 USDC standard / 2 credits or 0.25 USDC with lyrics), AI-Generated Music Detection (ai_detection: Suno, Udio, neural vocoders with HUMAN, AI_GENERATED, or UNCERTAIN verdicts) and the server-side A&R evaluation (arEvaluation: discovery / signing / beatmaker profiles).

  • analyze_audio_with_lyrics Tool (Alias): Extracts complete musical metadata, transcribes full vocal lyrics, and returns AI origin integrity metrics (2 credits or 0.25 USDC).

  • analyze_audio_batch Tool (Parallel Processing): Analyzes multiple music tracks concurrently with AI origin detection on every track, dramatically reducing turnaround time for albums and playlists.

  • triage_demo_folder Tool (Demo Inbox Triage): Sorts a whole local folder of demos in one call: analysis, artist/title from Artist - Title file names or audio tags, Spotify traction, A&R scoring v2 re-computed with the traction, and a compact ranked report with buckets (priority, listen, pass, ai_flagged, error). Unreliable lyrics (instrumental, no voice, looping hallucination) are flagged instead of quoted.

  • lookup_artist_stats Tool (A&R Traction): Fetches public Spotify streaming traction (monthly listeners, followers, popularity score, genres) for hybrid A&R qualification.

  • Selective Audio Compression: Automatically compresses heavy uncompressed files (.wav, .aiff, .aif) or audio files larger than 15 MB to 128 kbps AAC (.m4a) before upload (using native macOS afconvert or ffmpeg), reducing upload bandwidth and latency by up to 90% while leaving lightweight files (.mp3, .m4a $\le 15$ MB) untouched.

  • Prices in the Right Unit: tool descriptions, prompts and reports state costs in studio credits when a Studio API key is configured, and in USDC only in wallet (x402) mode, so an A&R paying with credits never sees crypto amounts.

  • Dual Authentication: Studio API key (Authorization: Bearer tpt_live_…, prepaid credits) takes priority over the Web3 wallet.

  • Automated x402 Payment: Manages the x402 challenge-response cycle (HTTP 402), with the platform wallet and USDC contracts pinned client-side.

  • Integrated Web3: On-chain signing via viem (EIP-3009 TransferWithAuthorization on Base).

  • Client-Side Financial Guard (Spending Cap): Built-in spending limit (default 0.50 USDC max per call) protecting your wallet against abnormal requests.

  • Confidential by Default for x402: Wallet-paid analyses are sent with x-no-persist (not stored server-side); Studio API key analyses are saved to your dashboard history unless TAG_PER_TRACK_NO_PERSIST=1.

  • Prompts: triage_demos (sort a demo folder into a ranked shortlist and sub-folders), qualify_demo_ar (single demo A&R qualification) and batch_demo_screening (multi-track screening).

  • Strict File Format Validation: Rejects non-audio files to protect local privacy and prevent arbitrary file exfiltration.

  • Deferred Binary Loading & Timeouts: 15s handshake / 120s processing timeouts with memory-efficient streaming and automatic temp file cleanup.

  • Compatibility: Designed for use with Claude Desktop, Cursor, Windsurf, or any MCP client.

⚙️ Configuration & Environment Variables

The MCP server supports Dual Authentication:

Variable

Mode

Description

Default

TAG_PER_TRACK_API_KEY

SaaS (Priority 1)

Studio API Key (tpt_live_...) generated on tag-per-track.cloud. Consumes prepaid Stripe credits without any crypto wallet.

None

WALLET_PRIVATE_KEY / PRIVATE_KEY / TAG_PER_TRACK_PRIVATE_KEY

Web3 (Priority 2)

Private key of your Base burner wallet (66 hex chars starting with 0x) for on-chain USDC micro-payments via x402 v2.

None

MAX_SPENDING_USDC

Web3 Safety

Client-side spending cap per request in USDC (default: 0.50).

0.50

PLATFORM_WALLET

Web3 Safety

Expected payment recipient; any 402 invoice paying elsewhere is rejected.

0xD33906178569f35EFF2E1665A14b06b455fF531F

TAG_PER_TRACK_NO_PERSIST

SaaS

Set to 1 / true to keep API-key analyses out of your dashboard history.

Unset

API_URL

Global

Endpoint of the Tag-per-Track analysis API.

https://api.tag-per-track.cloud/api/analyze

API_BASE_URL

Global

Base endpoint of the Tag-per-Track API for auxiliary routes (e.g. artist stats).

https://api.tag-per-track.cloud/api


📦 Installation & Setup

Add the server to your claude_desktop_config.json (located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "tag-per-track": {
      "command": "npx",
      "args": [
        "-y",
        "tag-per-track-mcp@latest"
      ],
      "env": {
        "TAG_PER_TRACK_API_KEY": "tpt_live_YOUR_STUDIO_API_KEY_HERE"
      }
    }
  }
}

Note: Generate your Studio API key in 1 click from your Dashboard at https://tag-per-track.cloud.

⚡ Option 2: Claude Desktop (Web3 x402 USDC on Base)

{
  "mcpServers": {
    "tag-per-track": {
      "command": "npx",
      "args": [
        "-y",
        "tag-per-track-mcp@latest"
      ],
      "env": {
        "WALLET_PRIVATE_KEY": "0xYOUR_BURNER_WALLET_PRIVATE_KEY_HERE",
        "MAX_SPENDING_USDC": "0.50"
      }
    }
  }
}

🌐 Option 3: Smithery CLI

# For Claude Desktop
npx -y @smithery/cli@latest mcp add lori-ferrand/tag-per-track --client claude

# For Cursor
npx -y @smithery/cli@latest mcp add lori-ferrand/tag-per-track --client cursor

The server is also listed on the official MCP registry as io.github.Lory97/tag-per-track-mcp.

🔧 MCP Tools

1. analyze_audio

Analyzes an audio file to extract musical metadata tags (BPM, key, scale, moods, genres, instruments), optional lyrics, and AI Origin Integrity (ai_detection). Supports both local binary files and remote URLs.

  • Arguments:

    • filePath (string, optional): Path to a local audio file on disk (.mp3, .wav, .ogg, .flac, .m4a, .aac, .aiff). The server validates the format, reads the file and streams it securely.

    • fileUrl (string, optional): Direct URL of the audio file. (Note: At least one of filePath or fileUrl must be provided).

    • extractLyrics (boolean, optional): Set to true to also extract vocal lyrics (2 credits / 0.25 USDC instead of 1 credit / 0.15 USDC).

  • Output Structure: Returns comprehensive metadata including:

    • bpm, key, scale, genres, moods, instruments, duration

    • production (lufs, peakDb, clippedRatio), danceability, engagement, approachability, voice.ratio

    • ai_detection / aiDetection (computed on a 12 s core sample):

      • checked: boolean (true when analyzed)

      • isAi: boolean (true if detected as synthetic/AI)

      • confidence: confidence percentage (0-100)

      • verdict: 'HUMAN' | 'AI_GENERATED' | 'UNCERTAIN'

      • status: 'SUCCESS' | 'UNAVAILABLE' | 'SKIPPED'

      • generator / watermarkDetected (optional): identified generator, e.g. a Suno signature in the file metadata

    • arEvaluation (A&R scoring v2.2): tier, audioType, suggestedProfile, marketplaceTags, aiGate, subScores (production, listening, traction, loyalty) and profiles.{discovery,signing,beatmaker} with score, priority and a recommendation code. AI verdicts are graded: ≥ 70 % confidence (or a metadata watermark) blocks the track, 60-69 % flags it, 30-59 % is inconclusive.

    • lyricsInfo (with extractLyrics): language detected by Whisper, reliability (high, approximate, none) and avgLogprob.

2. analyze_audio_with_lyrics

Analyzes an audio file to extract musical metadata, transcribe full vocal lyrics using AI, and evaluate AI Origin Integrity. Supports local audio files and remote URLs.

  • Arguments:

    • filePath (string, optional): Path to a local audio file on disk (.mp3, .wav, .ogg, .flac, .m4a, .aac, .aiff).

    • fileUrl (string, optional): Direct URL of the audio file. (Note: At least one of filePath or fileUrl must be provided).

3. analyze_audio_batch

Analyzes multiple audio tracks in parallel (batch processing). Vastly reduces total execution time compared to sequential calls, with resilient partial reporting and AI origin detection on every track.

  • Arguments:

    • filePaths (string[], optional): Convenience array of local file paths to analyze in parallel.

    • fileUrls (string[], optional): Convenience array of public URLs to analyze in parallel.

    • tracks (object[], optional): Array of track objects with granular settings:

      • filePath (string, optional)

      • fileUrl (string, optional)

      • extractLyrics (boolean, optional): Per-track lyrics flag.

    • extractLyrics (boolean, optional): Global flag to transcribe vocal lyrics for all tracks in this batch (2 credits / 0.25 USDC per track). Default is false (1 credit / 0.15 USDC per track).

    • concurrency (number, optional): Maximum simultaneous parallel requests (1 to 5, default is 4 to respect API rate limits).

  • Output Structure: Returns a summary JSON containing:

    • totalTracks: Total number of tracks submitted.

    • successful: Count of successfully analyzed tracks.

    • failed: Count of failed tracks.

    • results: Detailed array containing status (success or error), metadata (including ai_detection), or error reason for each track.

4. triage_demo_folder

Sorts a local folder of demo submissions in one call, built for the A&R "demo inbox" workflow. Only compact results are returned, so a 20-track folder fits comfortably in the model context.

Pipeline: list the audio files → artist/title from an Artist - Title file name (preferred: tags on demos are often DAW or account defaults), else from the audio tags → paid analyses (bounded concurrency) → one free Spotify lookup per distinct main artist ("Miimii ft Dj Skycee" → "Miimii") → free server-side re-scoring (POST /api/ar-score) with the traction attached → ranking. MCP progress notifications are sent after each track when the client provides a progressToken.

  • Arguments:

    • folderPath (string, required): Local folder (absolute or ~/...).

    • profile (string, optional): discovery (default, an unknown artist is never penalized), signing (weighs streaming traction), beatmaker, or auto (beatmaker for instrumentals).

    • extractLyrics (boolean, optional): Also transcribe lyrics (2 credits / 0.25 USDC per track).

    • recursive (boolean, optional): Scan sub-folders.

    • maxTracks (number, optional): Default 25, hard limit 50.

    • lookupArtists (boolean, optional): Spotify traction lookup, default true.

    • dryRun (boolean, optional): List the files, detected artists/titles and the estimated cost without analyzing or charging.

    • concurrency (number, optional): 1 to 5, default 3.

  • Cost: 1 credit (0.15 USDC) per analyzed track, 2 credits (0.25 USDC) with lyrics. Failed analyses are not charged. The report states it in the configured unit only (see estimatedCost below).

  • Output Structure (one entry per track, best score first, errors last):

{
  "rank": 1,
  "bucket": "priority",
  "file": "Stone mc - Ma ville (makette).mp3",
  "artist": "Stone mc",
  "title": "Ma ville (makette)",
  "score": 78,
  "priority": "top",
  "recommendation": "listen_first_gem",
  "isGem": true,
  "profile": "discovery",
  "audio": { "bpm": 104, "key": "D minor", "genre": "Latin---Reggaeton", "moods": ["party", "happy"], "audioType": "vocal", "durationSec": 190 },
  "ai": { "verdict": "HUMAN", "confidence": 90, "flag": "clear" },
  "traction": { "spotifyArtist": "Stone Mc", "monthlyListeners": 6, "followers": 36, "tier": "emerging" },
  "reasons": ["+production.loudness_ready(-9)", "+listening.strong_groove(1.6)"],
  "lyrics": { "status": "ok", "excerpt": "..." }
}
  • bucket: priority (top/high priority), listen (medium), pass (low), ai_flagged (confirmed or suspected AI-generated), error (unreadable or rejected file), not_analyzed (see below).

  • Credits exhausted / invalid key: as soon as the API answers "Insufficient studio credits" (HTTP 402) or "Invalid API key" (HTTP 401), the remaining files are not sent. The report then carries halted: { reason, notAnalyzed }, the affected tracks are in the not_analyzed bucket, and only the successful analyses are counted in estimatedCost. The same stop rule applies to analyze_audio_batch (skipped count and haltReason).

  • ai.flag: blocked (confirmed AI), suspected (to verify by ear), uncertain, clear, unchecked.

  • lyrics.status: ok, approximate (low-confidence transcription reported by the API, typically a language Whisper does not support such as Creole, transcribed phonetically), instrumental, no_vocals_detected or suspect_repetition (a short phrase looping, typical of a Whisper hallucination). lyrics.language is the language detected by Whisper. Only ok lyrics should be quoted.

  • The report header gives buckets counts, estimatedCost, scoringVersion, elapsedSeconds and notes (tracks over the limit, artists not found...).

  • estimatedCost is expressed in the unit the account pays with: { "label": "8 studio credits", "studioCredits": 8 } with a Studio API key, { "label": "1.2 USDC", "usdc": 1.2 } with a wallet. Both are given only when no authentication is configured.

5. lookup_artist_stats

Retrieves streaming traction and commercial metrics for an artist (Spotify monthly listeners, followers, popularity score, genres) for A&R qualification. Free (no credit or payment). This service is strictly decoupled from the acoustic analysis pipeline; the API caches results (7 days persistent, 24 hours in memory) with graceful fallback.

  • Arguments:

    • artist_name (string, required): Stage name of the artist (e.g. "Daft Punk", "Kaytranada").

    • spotify_id (string, optional): Spotify artist ID or open.spotify.com artist URL, to target an exact artist when the name is ambiguous.

    • social_links (string[], optional): Optional social media profile links for future enrichment.

  • Output Structure (popularity is null when the provider does not return it: unknown, not zero):

{
  "name": "Daft Punk",
  "spotify": {
    "id": "4tZwfgrHOc3mvqYlEYSvVi",
    "followers": 11769126,
    "popularity": 84,
    "monthlyListeners": 29284872,
    "genres": ["electro", "filter house"],
    "url": "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
  },
  "cached": true,
  "social_links": []
}

🤖 Guide & System Prompts for A&R Agents (Hybrid Scoring)

Modern A&R evaluation combines three essential dimensions:

  1. Intrinsic Acoustic Profile (BPM, musical key & scale, mood, instrumentation, vocal lyrics).

  2. Origin Integrity & AI Verification (detecting human vs synthetic AI-generated music to mitigate copyright and chain-of-title risks).

  3. Commercial Momentum & Streaming Traction (Spotify monthly listener volume, follower fan base, popularity index).

🎯 Orchestration Workflow for Autonomous Agents

graph TD
    Submission[New Track Submission] --> DetectArtist{Artist identifiable?}
    
    Submission --> Step1[1. Call analyze_audio]
    Step1 --> AcousticData[Acoustic & Origin: BPM, Key, Mood, Genres, Lyrics, AI Detection]
    
    DetectArtist -->|Yes: Known Artist| Step2[2. Call lookup_artist_stats]
    DetectArtist -->|No: Anonymous Demo| Step2Skip[Traction: Not available / Pure Demo]
    
    Step2 --> TractionData[Spotify Traction: Followers, Monthly Listeners, Popularity]
    
    AcousticData --> Consolidate[3. A&R Consolidation]
    TractionData --> Consolidate
    Step2Skip --> Consolidate
    
    Consolidate --> Matrix[Unified A&R Evaluation Matrix]
  1. Step 1 — Acoustic & Origin Analysis: Invoke analyze_audio (or analyze_audio_with_lyrics when vocal lyrics transcription is essential) with filePath or fileUrl. This consumes Studio credits (API key mode) or triggers the x402 micro-payment (0.15 or 0.25 USDC on Base), and evaluates musical attributes alongside AI origin integrity (ai_detection) and the A&R evaluation (arEvaluation).

  2. Step 2 — Artist Traction Lookup: Whenever the artist's stage name is identifiable (from submission filename, user prompt, or ID3 tags), invoke lookup_artist_stats(artist_name: "...").

  3. Step 3 — Consolidation into the Unified A&R Evaluation Matrix: The agent consolidates findings into a standardized Markdown evaluation matrix with the required 7 columns:

Track Title

Artist

BPM / Key

Style

Origin Integrity

Streaming Traction

Strategic Recommendation

Track Name

Stage Name

E.g. 124 BPM / A minor

Top genres & mood

HUMAN (98%) or AI_GENERATED (95%)

E.g. 29.2M listeners, 11.7M followers (Pop. 84)

Direct Sign, Playlist Pitch, Artist Development, or Copyright Review


📋 Ready-to-Use A&R Agent System Prompt

Here is a turnkey system prompt template to configure an autonomous A&R scouting agent (compatible with Claude Desktop, Cursor, Windsurf, or LangChain/AgentKit):

You are an elite Artist & Repertoire (A&R) Executive specialized in musical talent scouting, demo evaluation, and record label signing decisions.

You have access to two primary tools:
1. `analyze_audio`: Comprehensive acoustic analysis of audio tracks (BPM, musical key/scale, mood tags, genre classification, instrumentation, optional lyrics transcription, and AI Origin Integrity detection).
2. `lookup_artist_stats`: Real-time public Spotify traction metrics (followers, monthly listeners, popularity score, genres).

A&R OPERATIONAL RULES:
1. SYSTEMATIC ACOUSTIC ASSESSMENT:
   - For every submitted audio track, invoke `analyze_audio` (or `analyze_audio_with_lyrics` for vocal-driven songs).
   - Evaluate rhythmic consistency (BPM), harmonic structure (key & scale), and emotional timbre (moods).

2. ORIGIN INTEGRITY VERIFICATION (AI DETECTION):
   - Inspect the `ai_detection` object in the analysis response.
   - If `verdict === 'AI_GENERATED'`, flag high copyright & legal exclusivity risk (unclear training data, copyright ineligibility in key territories). Recommend licensing review or sync consideration rather than exclusive artist recording agreements.
   - If `verdict === 'HUMAN'`, certify as organic human production suitable for priority label signing.

3. ARTIST TRACTION & AUDIENCE QUALIFICATION:
   - Whenever the artist name is identified or deductible from context, immediately invoke `lookup_artist_stats(artist_name)`.
   - If the artist has no existing Spotify footprint (bedroom producer / raw demo), label them as "Emerging / No Streaming Footprint" and focus the assessment on intrinsic production potential.

4. UNIFIED MATRIX SYNTHESIS:
   Always conclude your diagnostic with the **Unified A&R Evaluation Matrix** formatted as a Markdown table:

| Track Title | Artist | BPM / Key | Style | Origin Integrity | Streaming Traction | Strategic Recommendation |
|---|---|---|---|---|---|---|
| [Title] | [Artist] | [BPM] BPM / [Key] [Scale] | [Top Genres] ([Mood]) | [HUMAN / AI_GENERATED / UNCERTAIN] ([Confidence]%) | [Monthly Listeners] listeners, [Followers] followers | [Direct Sign / Playlist Pitch / Artist Dev / Pass / Legal Review] + Rationale |

5. STRATEGIC RECOMMENDATION TIERS:
   - 🌟 **Priority Signing (Direct Sign)**: Radio-ready production quality, certified HUMAN origin, AND strong, accelerating streaming traction.
   - 🎯 **Playlist & Sync Pitch (Licensing)**: High contextual atmosphere ideal for editorial playlists, video games, or film/TV sync.
   - 🌱 **Artist Development (Artist Dev)**: Exceptional vocal or production potential, certified HUMAN origin, but early-stage audience.
   - ⚠️ **Synthetic IP / Legal Review**: AI-generated music (Suno, Udio) requiring legal clearance or suited for non-exclusive catalog licensing.
   - ⏸️ **Needs Revision (Pass / Feedback)**: Mix/mastering flaws, inconsistent tempo, or derivative composition.

📄 License

MIT

Available Tools

5 tools
analyze_audioA

Analyzes a music track or audio file to extract musical metadata (BPM, genre, mood, key, instruments), AI music detection verdict (HUMAN vs AI_GENERATED Suno/Udio neural vocoder risk with confidence index in 'ai_detection'), explainable A&R scoring v2 in 'arEvaluation' (discovery / signing / beatmaker profiles, AI gate, vocal vs instrumental), and optionally vocal lyrics. Supports local audio files via 'filePath' (read in binary and uploaded) or remote URLs via 'fileUrl'. Cost: 0.15 USDC per track, 0.25 USDC with lyrics, paid per request with an x402 micro-payment on Base.

NameRequiredDescriptionDefault
fileUrlNoThe direct publicly accessible URL (HTTP/HTTPS or IPFS) of the audio file to analyze.
filePathNoPath to a local audio file on disk (.mp3, .wav, .ogg, .flac, .m4a, .aac, .aiff). Use this whenever analyzing a local file, recording, or email attachment saved locally.
extractLyricsNoOptional: Set to true to transcribe and extract vocal lyrics in addition to metadata. Costs 0.25 USDC instead of 0.15 USDC.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the pricing model (0.15 USDC, 0.25 with lyrics), the payment mechanism (per-request x402 micro-payment on Base), and the fact that local files are read in binary and uploaded. It omits failure modes, file-size or duration limits, and any timeout/rate-limit behavior, so not a 5.

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

Conciseness4/5

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

It is one dense paragraph rather than a bulleted structure, but it is front-loaded with the primary purpose and output payloads before moving to input modes and cost. Nearly every clause carries information an agent needs; the cost sentence is long but justified since no annotations declare pricing.

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 3-parameter, no-annotation, no-output-schema tool, the description covers purpose, both input modes, optional lyric extraction, returned payload field names (ai_detection, arEvaluation), and billing. What is missing is operational robustness detail such as supported size/duration limits and error behavior, which matters given the paid-per-request model.

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 coverage is already 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: filePath files are 'read in binary and uploaded' (a transfer behavior the schema does not state) and extractLyrics is tied to a concrete cost delta (0.25 vs 0.15 USDC). The zero-required-parameter situation is also implicitly explained by the either/or input model.

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 verb (analyzes) and resource (music track or audio file) and enumerates the exact outputs: metadata (BPM, genre, mood, key, instruments), AI-generation verdict, A&R scoring, and optional lyrics. It never names the sibling tools (analyze_audio_with_lyrics, analyze_audio_batch), so the agent must infer the boundary itself, which keeps it short of a 5.

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

Usage Guidelines3/5

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

It gives solid guidance on input selection (use filePath for local files, recordings, or saved attachments; fileUrl for remote URLs) and on the lyrics option. But it never states when to pick this tool over analyze_audio_with_lyrics or analyze_audio_batch, which are the two most likely confusions given the sibling set.

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

analyze_audio_batchA

Analyzes multiple music tracks or audio files in parallel (batch processing). Vastly reduces total execution time compared to sequential processing. Accepts a list of local file paths ('filePaths') or remote URLs ('fileUrls'), or a structured array of 'tracks'. Cost: 0.15 USDC per track, 0.25 USDC with lyrics, paid per request with an x402 micro-payment on Base.

NameRequiredDescriptionDefault
tracksNoArray of audio items to analyze in parallel. Each item can specify 'filePath' or 'fileUrl' and optional per-track 'extractLyrics'.
fileUrlsNoConvenience shortcut: list of remote audio URLs to analyze in parallel.
filePathsNoConvenience shortcut: list of local audio file paths to analyze in parallel.
concurrencyNoMaximum number of simultaneous parallel requests (1 to 5, default is 4 to respect API rate limits).
extractLyricsNoOptional global flag: set to true to transcribe and extract vocal lyrics for all tracks in this batch (0.25 USDC per track). Default is false (0.15 USDC per track).

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and does well on the financial/auth side: it states per-track pricing (0.15 / 0.25 USDC), the x402 micro-payment mechanism, and the Base network. It does not cover failure/partial-batch behavior or what a result contains, and rate-limit rationale lives only in the schema for concurrency.

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 front-loaded sentences: capability, performance benefit, accepted inputs, then cost. 'Vastly reduces total execution time' is slightly promotional but conveys a real parallelization property, and no sentence is pure filler.

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 5-parameter, annotation-free batch tool the description covers inputs, parallelism, pricing and payment adequately. The main uncovered area is output/return shape and error handling on partial batch failure, which matters somewhat since no output schema 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 description coverage is 100%, so the schema already documents tracks, fileUrls, filePaths, concurrency and extractLyrics. The description restates the three input shapes and maps extractLyrics to its cost delta, which is consistent but adds little beyond the schema. Baseline 3 is appropriate.

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 ('Analyzes multiple music tracks or audio files in parallel (batch processing)') and the parenthetical 'batch' cleanly separates it from the single-file sibling analyze_audio. An agent can select it without opening the schema.

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

Usage Guidelines3/5

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

It implies usage ('multiple' files, 'vastly reduces total execution time compared to sequential processing'), which points to batch scenarios, but it never names the alternatives analyze_audio or analyze_audio_with_lyrics or says when to prefer a single-file call. The overlap with analyze_audio_with_lyrics, which this tool partially duplicates via extractLyrics, is left unresolved.

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

analyze_audio_with_lyricsA

Analyzes an audio track to extract complete musical metadata, AI-generated music detection verdict (HUMAN vs AI_GENERATED Suno/Udio), AND transcribe full vocal lyrics using AI. Supports local audio files via 'filePath' (read in binary and uploaded) or remote URLs via 'fileUrl'. Costs 0.25 USDC per track. (Alias for analyze_audio with extractLyrics: true).

NameRequiredDescriptionDefault
fileUrlNoThe direct publicly accessible URL (HTTP/HTTPS or IPFS) of the audio file to analyze.
filePathNoPath to a local audio file on disk (.mp3, .wav, .ogg, .flac, .m4a, .aac, .aiff). Use this whenever analyzing a local file, recording, or email attachment saved locally.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: the 0.25 USDC per-track cost, that filePath inputs are read as binary and uploaded, and the nature of the returned verdict (HUMAN vs AI_GENERATED Suno/Udio). It omits permission/auth needs, failure modes (invalid URL, unsupported codec), and latency expectations.

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 core capability in the first sentence, then gives input modes, cost, and the alias relationship. No redundant restatement of the title or schema; every sentence earns its place despite being dense.

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?

There is no output schema or annotation set, but the description names the returned payload (metadata + verdict + lyrics), states the price, and explains the tool's identity relative to analyze_audio — enough for correct invocation. The unresolved case of both optional params being absent is the main gap.

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 already 100%, so the baseline is 3; the description adds genuine meaning by framing filePath/fileUrl as two mutually exclusive input modes and noting the binary-upload behavior of filePath. It does not clarify precedence when both are supplied or what happens when neither is given.

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 precise verb+resource ('Analyses an audio track') and enumerates the three outputs: musical metadata, AI-vs-human detection verdict, and full vocal lyric transcription. The parenthetical alias note ('analyze_audio with extractLyrics: true') explicitly distinguishes it from the sibling analyze_audio tool.

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?

The alias note routes the agent clearly: pick this when lyrics are needed, otherwise use analyze_audio. It also explains the filePath-vs-fileUrl input split. It stops short of explicit when-not conditions or cost/alternative tradeoffs (e.g. batch variants), so it is clear context rather than a full decision rule.

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

lookup_artist_statsA

Retrieves streaming traction and commercial metrics for an artist (Spotify monthly listeners, followers, popularity score) for A&R qualification.

NameRequiredDescriptionDefault
spotify_idNoOptional Spotify artist ID or open.spotify.com artist URL to target an exact artist when the name is ambiguous.
artist_nameYesStage name of the artist to look up.
social_linksNoOptional social media profile links for future enrichment.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 'Retrieves' and 'metrics' establish a read-only, informative operation and name the data source (Spotify metrics), but nothing is said about auth needs, rate limits, behavior on ambiguous or missing artists, or data freshness.

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?

A single efficient sentence with the core purpose front-loaded and the qualifying context trailered. No filler, though the parenthetical metric list slightly lengthens it without adding selection-relevant information.

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?

There is no output schema, so the description usefully enumerates what comes back (listeners, followers, popularity). With low tool complexity and fully documented parameters, this is nearly complete; only error/ambiguity behavior at call time is unaddressed.

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 100%, so all three parameters are already documented in the schema (including the ambiguity-handling rationale for spotify_id). The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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 (retrieves) and resource (streaming/commercial metrics for an artist) and even enumerates the concrete data points returned (monthly listeners, followers, popularity score). It is clearly distinct from the audio-analysis siblings by resource, though it never explicitly names or contrasts them.

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

Usage Guidelines3/5

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

The phrase 'for A&R qualification' gives a use context, implying the kind of decision this data feeds, but there are no explicit when-to-use/when-not conditions and no alternatives named (e.g., when to prefer this over analyze_audio). Usage is only implied.

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

triage_demo_folderA

A&R demo inbox triage in ONE call: scans a local folder of demo submissions (.mp3, .wav, .flac, .m4a, .aiff...), analyzes every track, reads the artist/title from audio tags or 'Artist - Title' file names, fetches Spotify traction per artist, applies A&R scoring v2 and returns a COMPACT ranked report (score, priority, bucket, BPM/key/genre, AI-origin flag, monthly listeners, key reason codes, guarded lyrics excerpt). Buckets: 'priority' (listen first), 'listen', 'pass', 'ai_flagged' (confirmed or suspected AI-generated), 'error' (unreadable or rejected file), 'not_analyzed' (the triage stopped early because studio credits ran out or the API key was rejected: see 'halted'). Prefer this tool over analyze_audio_batch whenever the user wants to sort, rank or screen a folder of demos. Cost: 0.15 USDC per track, 0.25 USDC with lyrics, paid per request with an x402 micro-payment on Base. Use dryRun to list files and the estimated cost (estimatedCost.label) without charging.

NameRequiredDescriptionDefault
dryRunNoList the files, detected artists/titles and the estimated cost without analyzing or charging anything.
profileNoScoring profile used for the ranking: 'discovery' (A&R scout, default: an unknown artist is never penalized), 'signing' (label head, weighs streaming traction), 'beatmaker' (instrumentals), 'auto' (beatmaker for instrumentals, discovery otherwise).
maxTracksNoMaximum number of files analyzed (default 25, hard limit 50).
recursiveNoAlso scan sub-folders. Default false.
folderPathYesAbsolute path (or ~/...) of the local folder containing the demo audio files.
concurrencyNoParallel analyses (1 to 5, default 3).
extractLyricsNoAlso transcribe lyrics (0.25 USDC per track instead of 0.15 USDC). Default false.
lookupArtistsNoFetch Spotify traction for each artist (free). Default true.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses per-track cost (0.15/0.25 USDC), the payment mechanism (x402 micro-payment on Base), the halt condition (studio credits ran out or API key rejected, surfaced via 'halted'), and the error bucket for unreadable/rejected files. These are exactly the operational traits an agent must know before invoking a paid, non-idempotent batch job.

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 one-call capability, then buckets, then the sibling preference, then cost and dryRun — a sensible priority order for an agent deciding whether to call. Slightly dense with reiteration of per-track pricing in both the body and the extractLyrics description, but almost every clause carries information.

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?

There is no output schema, so the description must cover return values, and it does: it names the compact report fields and defines all six bucket values including the failure states. Combined with cost, payment, and halt behavior, an agent has everything needed to invoke this 8-parameter tool 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?

Schema description coverage is 100%, so the 3 baseline applies, but the description adds meaning the schema does not: dryRun returns 'estimatedCost.label' and performs no charge, and the 0.25 USDC lyrics surcharge is tied to extractLyrics. It does not restate the profile or concurrency semantics, but the marginal lift over the schema is real.

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 ('triage a local folder of demo submissions in ONE call') and enumerates exactly what is returned (score, priority, bucket, BPM/key/genre, AI-origin flag, monthly listeners, reason codes, lyrics excerpt). It explicitly contrasts itself with the sibling analyze_audio_batch, so an agent can route 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 an explicit selection rule ('Prefer this tool over analyze_audio_batch whenever the user wants to sort, rank or screen a folder of demos') plus a when-not-to-spend path ('Use dryRun to list files and the estimated cost ... without charging'). Bucket semantics ('priority' = listen first, 'not_analyzed' = triage halted) tell the agent how to interpret and act on results.

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 updatesv1.4.2
    • Changedanalyze_audio_batch1 field changed
      • changedInput schema / properties / tracks / items / properties / extractLyrics / description
        Previous value: -"Whether to extract vocal lyrics for this specific track (costs 0.25 USDC instead of 0.15 USDC)."New value: +"Whether to extract vocal lyrics for this specific track (0.25 USDC instead of 0.15 USDC)."
    • Changedlookup_artist_stats1 field changed
      • addedInput schema / properties / spotify_id
        Added value: +{
        +  "description": "Optional Spotify artist ID or open.spotify.com artist URL to target an exact artist when the name is ambiguous.",
        +  "type": "string"
        +}
    • Addedtriage_demo_folder
  2. 4 tool updatesv1.4.1
    • First observedanalyze_audio
    • First observedanalyze_audio_batch
    • First observedanalyze_audio_with_lyrics
    • First observedlookup_artist_stats

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation3/5

analyze_audio, analyze_audio_with_lyrics, and analyze_audio_batch all analyze audio with overlapping metadata/AI detection; analyze_audio_with_lyrics is explicitly an alias, and the batch vs. triage_demo_folder boundary is only clarified by a preference note. Descriptions help distinguish folder-level ranking from parallel analysis, but the redundancy remains confusing.

Naming Consistency5/5

All tools use snake_case with a verb-first pattern (analyze_audio, triage_demo_folder, lookup_artist_stats), and the analyze_* family is consistently prefixed. No camelCase or mixed conventions appear.

Tool Count4/5

Five tools is well within the ideal 3-15 range for an audio analysis/A&R server. However, analyze_audio_with_lyrics is a redundant alias, so one tool does not fully earn its place, keeping it from a perfect score.

Completeness4/5

The surface covers single-track analysis, batch analysis, folder triage, lyrics extraction, and artist traction lookup, which covers the core A&R workflow. A minor gap is the lack of any write/tagging operation despite the server name 'Tag-per-Track', and no tool for aggregating or comparing results across tracks.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Cross-platform music link resolution for AI agents. Resolve any song or album across Spotify, Apple Music, Amazon, YouTube, and more. Returns affiliate-ready links with click tracking
    5
    97 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to analyze audio files, extracting tempo, key, beat drops, volume surges, high tones, loudness, brightness, and structure, and returning structured JSON and visualizations.
    2
    MIT