io.github.js713-lab/sonicmatch-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@io.github.js713-lab/sonicmatch-mcpAnalyze clip.mp4 for mood and pace, then recommend 5 license-safe BGM tracks."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sonicmatch-mcp
Open-source MCP server that recommends license-safe background music the way Instagram Stories / Reels feel: drop footage, get a shortlist that already matches energy, then pick a 15s hook.
Source: js713-lab/sonic-match-mcp. The installable package and CLI are named sonicmatch-mcp.
This is infrastructure for editors and agents, not another music chatbot.
Video or URL in
→ scene / mood / pace / speech analysis
→ license-safe BGM shortlist
+ beat/cut hints
+ optional mix previewDo not treat this as “script in → YouTube Music search out.” That already exists (mcp-bgm-recommender). Sonicmatch watches the video.
You own | You do not own |
Local file / public URL ingest | Platform music licenses |
Mood, energy curve, speech vs silence, scene cuts | Meta/TikTok “trending audio” graph |
CC / royalty-free catalogs + optional paid adapters | Spotify / IG official libraries |
Ranked tracks, preview URLs, mix spec, ffmpeg | Auto-publish to Instagram |
North star: ingest_video → analyze_video_music → recommend_bgm → preview_mix → export_mix_spec
License warning (read this)
The code is MIT.
Every track has its own license. It is printed on every recommendation.
Nothing here is an official Instagram sticker, TikTok Commercial Music Library track, or YouTube Audio Library API result.
Do not recommend commercial pop unless the adapter is explicitly a user-owned licensed library.
CC-BY still needs attribution. CC-BY-NC is not ok for ads / shops. Content ID can still hit you if you point at the wrong source.
Related MCP server: studiosphere-pulse-mcp
Quick start
Requires Python 3.10+ and ffmpeg / ffprobe on PATH. yt-dlp is optional and off by default (SONICMATCH_ALLOW_YTDLP=0) because platform extractors break and may violate ToS. Prefer a local file.
pip install git+https://github.com/js713-lab/sonic-match-mcp.git
# or from a clone
git clone https://github.com/js713-lab/sonic-match-mcp.git
cd sonic-match-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env # optional keys
# stdio (Claude Desktop / Cursor)
sonicmatch-mcp
# streamable HTTP (web editors)
sonicmatch-mcp --http --port 8765With uv:
uv venv && uv pip install -e ".[dev]"
uv run sonicmatch-mcpv0.2 works offline-ish with the checked-in seed catalog. Gemini, Jamendo, and Freesound are optional and degrade with a note in the tool response.
# tests (generates tiny color mp4s with ffmpeg)
pytestExample agent prompt
I dropped
./clip.mp4. Analyze it for an Instagram Reel and recommend 5 instrumental BGMs. Then mix the top pick with ducking and give me the ffmpeg command.
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"sonicmatch": {
"command": "/absolute/path/to/sonicmatch-mcp/.venv/bin/sonicmatch-mcp",
"args": [],
"env": {
"GEMINI_API_KEY": "",
"JAMENDO_CLIENT_ID": "",
"FREESOUND_API_KEY": ""
}
}
}
}Cursor
.cursor/mcp.json (project) or ~/.cursor/mcp.json:
{
"mcpServers": {
"sonicmatch": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/sonicmatch-mcp", "run", "sonicmatch-mcp"]
}
}
}Copy-paste configs live in examples/claude_desktop.mcp.json and examples/cursor.mcp.json. User-owned Epidemic/Artlist JSON shape: examples/user_library.example.json. Registry metadata: server.json.
HTTP editors can point at http://127.0.0.1:8765/mcp after sonicmatch-mcp --http.
Architecture
flowchart TB
subgraph mcp [MCP Server - FastMCP / Python - stdio + HTTP]
tools[ingest_video / analyze_video_music / recommend_bgm / preview_mix / export_mix_spec / suggest_cuts]
end
tools --> ingest
tools --> brain
tools --> hub
tools --> mixer
ingest[Ingestor<br/>yt-dlp · ffmpeg · ffprobe · URL/file]
brain[Video Brain<br/>Gemini / local VL · librosa · PySceneDetect · Whisper]
hub[Music Hub<br/>seed CC · Jamendo · Freesound · user library · generate]
mixer[Mixer<br/>ffmpeg · ducking · loop/trim · EDL cuts]
hub --> index[Track index<br/>tags + license + embeddings · SQLite · optional LanceDB]Hard rule: never send raw multi-MB video through the MCP payload. Store locally, pass an asset_id. Loopback, file://, and private IPs are rejected (SSRF).
MCP tools
Tool | Input | Output |
| — | ffmpeg / keys / seed count |
| local path or HTTPS URL, |
|
|
| VideoSonic profile |
| profile or | 3–7 ranked tracks + reasons + license + hook in/out |
| free text / bpm / mood | catalog hits |
| id | metadata + license + urls |
|
| preview files + ffmpeg recipe + mix spec |
|
| mix spec + ffmpeg + attribution (no render unless asked) |
|
| beat grid, snapped scene cuts, EDL, intro/peak/outro |
| prompt / bpm / duration + |
|
| BPM / moods / no-vocals | persisted kit name for |
| list of paths/URLs (max 20) | mood cluster + shared mini-playlist |
Also ships a prompt template: “Score this video like an IG music sticker.”
Product rules (Instagram-like, not Instagram)
Prefer instrumental when
speech_coverage > 0.25Recommend a hook window, not the whole song
Show why (
cuts at 0.8s average, 112 BPM, warm gold hour)Always return license + attribution text
3–7 tracks, not 40
User can override mood / genre / no-lyrics / platform / energy
Never claim “cleared for Instagram official sticker” unless it actually is
VideoSonic profile
Analysis returns structured JSON, not a paragraph:
{
"duration_sec": 18.4,
"aspect": "9:16",
"content_type": "lifestyle",
"has_speech": true,
"speech_coverage": 0.62,
"existing_music": false,
"overall_mood": ["warm", "playful"],
"energy_mean": 0.62,
"energy_curve": [{"t": 0, "energy": 0.3}, {"t": 4, "energy": 0.8}],
"pacing": "fast-cut",
"scenes": [{"start": 0, "end": 3.2, "description": "cafe exterior", "energy": 0.4}],
"hook_window": [9.0, 15.0],
"suggested_bpm": [95, 118],
"avoid": ["dark cinematic drone", "aggressive trap", "lyrics-dense"],
"search_queries": ["warm acoustic pop instrumental cafe"],
"platform_hint": "instagram_reel",
"analyzer": "local"
}Primary: Gemini video understanding when
GEMINI_API_KEYis set.Fallback: ffmpeg scene cuts + WAV energy / silence / ZCR heuristics. Optional
faster-whisper,scenedetect,librosaif installed (pip install 'sonicmatch-mcp[local-vl]').
Music hub
Pluggable, license-first. v0 ships:
Adapter | When | License reality |
Seed catalog ( | always | CC0 / CC-BY you control |
Jamendo |
| CC, check commercial |
Freesound |
| CC, good for beds/loops not songs |
User library JSON |
| you already licensed it; we do not scrape paid sites |
Generate |
| always |
Ranking (weighted): mood/energy → instrumental if speech → duration/loop → BPM vs cut rate → license fit → tag embedding cosine → user constraints.
Tracks are indexed in SQLite (~/.cache/sonicmatch-mcp/db/tracks.sqlite) with a 24-d tag embedding. If lancedb is installed (pip install 'sonicmatch-mcp[embeddings]'), vectors are also upserted there.
Seed tracks have no remote audio files on purpose (you should host files you actually have the rights to). preview_mix synthesizes a CC0 demo bed so the mixer still runs offline. generate_bed is a catalog-miss fallback and is not cleared for ads.
Docker
docker build -t sonicmatch-mcp .
docker run --rm -p 8765:8765 -v sonic-cache:/data/cache sonicmatch-mcpRoadmap
Freesound adapter (loops / beds)
Tag embeddings in SQLite (+ optional LanceDB extra)
Epidemic Sound / Artlist as user-owned JSON plugins (no scrape)
Beat-grid vs scene-cut suggestions (EDL-ish
suggest_cuts)MCP registry listing (
server.json)Generate tool, marked
source=generated(local demo; swap a real model at your own legal risk)Real CLAP audio embeddings
Official MCP registry listing via GitHub Release MCPB (see PUBLISH.md)
PyPI release
Beat-grid auto-recut of the video itself (not just EDL hints)
Why this can be a good open-source project
Yes if you nail: (1) video-native analysis, (2) license honesty on every row, (3) editor-shaped output (hook in/out, ducking, mix spec).
No if you only wrap YouTube Music search. That is a weekend clone and a copyright magnet.
Day-1 risk gates (enforced in code, not slogans):
Risk | Gate |
Content ID | Every rec/search/get_track includes |
yt-dlp ToS / broken extractors | Platform URL ingest is off unless |
Upload size / SSRF | HTTPS-only remote ingest, no |
“Trending” is a closed Meta graph | Queries for trending/viral/IG audio/TikTok sound return empty + |
Generation-model commercial terms |
|
Use cases
IG Reel / Story · Shopee product clip · YouTube Shorts agent · CapCut/Premiere companion · campus recap · podcast clipper · travel-vlog batch · brand-kit lock (BPM + no vocals) · silent-film / accessibility · multi-agent studio.
Available Tools
12 toolsanalyze_batchA
Analyze up to 20 clips, cluster moods, return one consistent mini-playlist for the series.
| Name | Required | Description | Default |
|---|---|---|---|
| sources | Yes | ||
| extra_notes | No | ||
| max_seconds | No | ||
| platform_hint | No | generic |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must convey behavior. It discloses a hard limit (20 clips), the clustering of moods, and the return of a single playlist, but does not mention handling of failure, performance implications, or side effects. This provides some transparency but not enough detail about what happens during analysis or how the output is structured beyond a mini-playlist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the key constraint (up to 20 clips) and the primary action (analyze and cluster moods), followed by the outcome. There is no wasted words, and the most important information is presented first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While an output schema exists, the tool description does not cover parameter semantics, potential constraints, or usage conditions. For a tool with four parameters and no schema descriptions, it relies entirely on the description to explain usage, which it fails to adequately do. The description omits guidance on parameters like max_seconds and platform_hint, making the definition incomplete for correct invocation without external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no parameter descriptions (coverage 0%), and the description only indirectly addresses the 'sources' parameter by mentioning 'clips'. It does not explain 'extra_notes', 'max_seconds', or 'platform_hint', leaving their semantics to inference from titles. This is insufficient given the 0% coverage and the need for the description to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Analyze'), the resource ('up to 20 clips'), and the output ('one consistent mini-playlist'), including specifics like mood clustering for a series. This distinguishes it from sibling tools such as analyze_video_music (single-video) and recommend_bgm (music recommendation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for batch analysis of multiple clips for a series (up to 20 clips) and producing a cohesive playlist, which suggests when to prefer it over per-clip tools. However, it does not explicitly state when not to use it or mention alternatives, though the batch limit and series context provide clear situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_video_musicA
Produce a structured VideoSonic profile for BGM matching.
platform_hint: instagram_story | instagram_reel | tiktok | youtube_short | youtube_long | generic.
Uses Gemini video understanding when GEMINI_API_KEY is set; otherwise local ffmpeg/audio heuristics (and optional faster-whisper / PySceneDetect if installed). Always fills search_queries even if analysis is weak.
extra_notes: optional caption/script the user already has — used as a hint, not as a replacement for watching the video.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | Yes | ||
| extra_notes | No | ||
| platform_hint | No | generic |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains the dual backend (Gemini when key is set, else local heuristics) and guarantees search_queries are always populated even for weak analysis. However, it does not mention whether the operation is read-only, has side effects, or any rate limits. The analysis nature is implied but not explicitly flagged, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. It then lists platform_hint values, explains backend behavior in one sentence, and clarifies extra_notes. Each sentence adds distinct value with no filler, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, so that is handled. The description includes backend behavior and parameter hints, but misses explicit usage routing to siblings and any prerequisites (e.g., that the video must already be ingested). Without guidance on when to choose this over recommend_bgm or search_music, the context is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains platform_hint by listing allowed values and clarifies extra_notes as a hint, not a replacement. However, asset_id is only described by its name, leaving its origin (e.g., from ingest_video) unspecified. While two of three params are clarified, the one required param lacks semantic detail, justifying a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific, actionable purpose: 'Produce a structured VideoSonic profile for BGM matching.' This clearly identifies the resource (video) and intent (BGM matching), distinguishing it from siblings like search_music (search for tracks) or recommend_bgm (suggest music). The verb 'produce' and the structured-output nature make it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context like platform_hint and extra_notes, but does not explicitly state when this tool should be used vs alternatives. No mention of prerequisites (e.g., that asset_id must come from ingest_video) or conditions that would favor another sibling (e.g., search_music). The guidance is entirely implicit, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_mix_specB
Export the mix spec + ffmpeg recipe + attribution without requiring a render.
This is the editor companion output (CapCut / Premiere / DaVinci / agent). Set render=true to also write preview files (same as preview_mix).
| Name | Required | Description | Default |
|---|---|---|---|
| bgm_db | No | ||
| render | No | ||
| ducking | No | ||
| asset_id | Yes | ||
| track_id | Yes | ||
| voice_db | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden, and it does disclose the key side effect: render=true writes preview files, default render=false produces no files. But it doesn't clarify the shape of the returned spec/recipe/attribution, whether the export is synchronous, or what happens to existing mix data. The presence of an output schema mitigates return-value opacity somewhat, but the description itself stays thin on behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose front-loaded, no filler. The first line states the core function immediately, and the second adds the render toggle and editor context efficiently. Minor deduction for packing two distinct concepts (editor companion + render synonym) into one sentence, which slightly buries the preview_mix equivalence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with zero param descriptions and no annotations, the description leaves critical gaps: the meaning of 'attribution,' the format of the 'ffmpeg recipe,' and how the editor companion output is consumed remain undefined. The output schema likely covers return values, which is the main redeeming factor, but the agent cannot confidently craft parameters or interpret the export without more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across all 6 parameters, and the description only clarifies render (writes preview files same as preview_mix). The other five parameters (bgm_db, voice_db, ducking, asset_id, track_id) get no semantic explanation — an agent cannot infer that bgm_db/voice_db are gain levels or what ducking modifies. At 0% coverage, the description was obligated to compensate and only addressed one param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Export the mix spec + ffmpeg recipe + attribution') plus the key distinction 'without requiring a render.' It names the likely confusable sibling preview_mix, which helps an agent separate the two. Slightly short of 5 because it doesn't contrast against non-render siblings like generate_bed or analyze_video_music, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies the use case ('editor companion output') and explains the render=true relationship to preview_mix, giving the agent a decision hint. However, it never says when NOT to use export_mix_spec versus preview_mix directly (only the render=true synonym), and gives no conditions for choosing generate_bed or suggest_cuts instead. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_bedA
Generate a bed when the catalog misses. Always marked source=generated.
Refuses unless i_understand_not_commercially_cleared=true. Local fallback is a sine-tremolo demo. NOT cleared for ads. Check Suno/Stable Audio/Lyria terms before swapping in a real generator. Generated tracks are excluded from recommend_bgm auto catalogs.
| Name | Required | Description | Default |
|---|---|---|---|
| bpm | No | ||
| energy | No | ||
| prompt | Yes | ||
| asset_id | No | ||
| duration_sec | No | ||
| i_understand_not_commercially_cleared | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden, and it delivers: it reveals refusal behavior, a 'sine-tremolo demo' fallback, the source=generated tagging, and catalog-exclusion side effects. These are exactly the non-obvious behaviors an agent needs to know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first line states purpose and the primary side effect, and every subsequent sentence adds a distinct constraint or context. The structure is dense but scannable, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers invocation conditions, legal caveats, fallback behavior, and integration with recommend_bgm, which is strong given no annotations. It falls just short of full completeness because optional parameters like asset_id are left unexplained and 'bed' is assumed domain knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only the i_understand_not_commercially_cleared parameter is meaningfully tied to behavior ('Refuses unless...true'). Since schema description coverage is 0%, the description does not compensate by explaining prompt, bpm, energy, asset_id, or duration_sec beyond their names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Generate a bed') and the exact trigger condition ('when the catalog misses'), clearly distinguishing this generation tool from sibling search/recommendation tools. It also adds the key invariant 'Always marked source=generated', which pins down the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly defines the precondition ('Refuses unless i_understand_not_commercially_cleared=true'), the exclusion ('NOT cleared for ads'), and the downstream consequence ('excluded from recommend_bgm auto catalogs'). This gives an agent clear routing and when-not-to-use instructions, including mentioning external alternatives (Suno/Stable Audio/Lyria).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trackC
Return one track's metadata, license string, attribution text, and URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It states what is returned but does not mention read-only nature, authentication requirements, error handling, or side effects. The description is minimal and adds little beyond the obvious 'return' semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the action and lists the return contents efficiently. Every word earns its place, and the structure is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema, the description is minimally adequate. It specifies the kinds of returned data, so an agent knows what to expect. However, it does not mention the need for track_id (though in schema) or differentiate from siblings, leaving contextual gaps for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description does not explain track_id. It implies that a track is identified, but does not specify the format, source, or any constraints. The description adds no meaning beyond the parameter name and type, failing to compensate for the schema's lack.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'one track', listing the types of data (metadata, license string, attribution text, URLs). It is specific and not a tautology, but it does not explicitly differentiate from siblings like search_music or status, which could also involve track data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, such as having a track_id, nor any comparison with sibling tools like search_music (which likely returns multiple tracks) or status. The usage context is entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_videoA
Ingest a local video path or public http(s) URL.
Accepts a filesystem path or an HTTPS video URL. YouTube/TikTok/Instagram via yt-dlp is OFF unless SONICMATCH_ALLOW_YTDLP=1 (ToS + extractor risk). Rejects file://, http, loopback, and private IPs (SSRF). Size-capped.
Extracts duration/fps/aspect with ffprobe, a 16 kHz mono wav, up to 12 scene keyframes, and a 360p proxy. Returns an asset_id. Never returns video bytes.
Call this first. Then call analyze_video_music with the asset_id.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| max_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: it discloses the extraction pipeline (ffprobe, 16kHz wav, keyframes, 360p proxy), the output contract (asset_id, never video bytes), security hardening (SSRF, size cap), and the yt-dlp behavior. This is unusually transparent and would let an agent predict side effects accurately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense: a clear opening sentence, followed by constraints, extraction behavior, output contract, and pipeline ordering. Every sentence adds necessary operational detail that the schema and annotations do not provide, without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no annotations, this covers nearly everything needed to call it correctly: accepted inputs, rejected inputs, output format, next step, and processing behavior. The only notable gaps are the exact meaning of max_seconds and the vague 'size-capped' threshold, which prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It richly explains the source parameter (filesystem path or HTTPS URL plus security exclusions), but says nothing about max_seconds, leaving that parameter's meaning and limits entirely to the schema's name and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Ingest a local video path or public http(s) URL.' It also clarifies what the tool returns (an asset_id) and how it fits into the workflow, making it easy to distinguish from the downstream analyze_video_music sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Call this first' and then points to analyze_video_music as the next step, giving an agent clear pipeline guidance. It also provides firm input constraints and exclusions: rejects file://, loopback, and private IPs for SSRF reasons, and disables yt-dlp unless an environment variable is set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_mixA
Mix BGM under the video: hook trim, loop if needed, optional speech ducking.
Returns preview mp3 + low-res mp4 paths, the ffmpeg command, and a mix_spec JSON an editor (CapCut / Premiere / DaVinci / your agent) can re-apply.
Ducking uses ffmpeg sidechaincompress when the video has speech. Seed tracks without audio files get a synthesized CC0 demo bed so the pipeline still runs offline.
| Name | Required | Description | Default |
|---|---|---|---|
| bgm_db | No | ||
| ducking | No | ||
| asset_id | Yes | ||
| track_id | Yes | ||
| voice_db | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses meaningful behavior: ffmpeg sidechaincompress for ducking, a synthesized CC0 demo bed for seed tracks without audio, and path/command/spec returns. It does not state whether original assets are modified, but for a preview operation the named behaviors are adequately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact paragraphs front-load the action, then the output contract, then edge-case behavior. Every sentence adds a new fact; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers outputs, intentional audio-processing details, and an offline fallback, so an agent can form a good mental model. It is less complete on parameter semantics and selection criteria, and never points the agent to which sibling supplies asset_id/track_id – a notable gap at 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds almost no parameter-level meaning. It implies the ducking boolean and mentions 'BGM' and 'speech', but does not explain bgm_db/voice_db units or values, nor clarify asset_id/track_id beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Mix BGM under the video' – a specific verb and resource – and expands with hook trim, looping, ducking, and returned artifacts. This clearly distinguishes it from nearby siblings like export_mix_spec or generate_bed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use/when-not-to-use statement appears. The 'preview' nature is implied by the name and the returned preview mp3/mp4, but the description never contrasts with export_mix_spec or explains when an agent should choose it over another sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_bgmA
Rank license-safe BGM. Pass asset_id and/or a VideoSonic profile.
Defaults instrumental_only=True when speech_coverage > 0.25. catalog: auto | seed | jamendo | freesound | library auto = seed always, plus Jamendo/Freesound/user-library when configured.
Each recommendation includes score, reason, suggested song in/out (12–20s high-energy slice), ducking hint, and license_ok_for_platform. max_results is clamped to 3–7. brand_kit: name previously saved with save_brand_kit.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | ||
| genre | No | ||
| catalog | No | auto | |
| profile | No | ||
| asset_id | No | ||
| brand_kit | No | ||
| max_results | No | ||
| platform_hint | No | ||
| instrumental_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: it discloses the instrumental_only default condition, catalog resolution behavior, output item fields, max_results clamping, and the brand_kit prerequisite. This is unusually transparent about hidden behavior beyond what the schema shows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and uses an efficient bullet-like structure for defaults, catalog, output, and limits. Every line adds operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need no further explanation. The description covers defaults, catalog semantics, output fields, clamping, and brand_kit dependency. Minor gaps remain around how mood, genre, and platform_hint influence results, but overall the tool is callable with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real meaning for asset_id, profile, catalog values and behavior, max_results clamping, and brand_kit provenance. It does not explain mood, genre, or platform_hint, but these are reasonably inferable from names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Rank license-safe BGM', a specific verb-resource pair that clearly distinguishes recommendation from sibling tools like search_music or generate_bed. It further clarifies input requirements ('Pass asset_id and/or a VideoSonic profile') and output contents, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: pass asset_id and/or a profile, catalog options with explicit 'auto' semantics, and max_results clamping. It does not explicitly state when NOT to use this tool or name alternative siblings, so it falls short of fully explicit exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_brand_kitB
Save a brand kit (BPM lock + no vocals + mood whitelist). Pass brand_kit=name to recommend_bgm.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| avoid | No | ||
| moods | No | ||
| notes | No | ||
| genres | No | ||
| bpm_max | No | ||
| bpm_min | No | ||
| instrumental_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose that the tool saves a named configuration with BPM, vocal, and mood constraints, but it does not say whether saving an existing name overwrites the kit, whether the operation is idempotent, what permissions are required, or what side effects occur. For a mutation tool with zero annotation coverage, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and constraints are front-loaded, and the cross-reference to recommend_bgm is directly useful for an agent deciding how to chain calls.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description establishes the brand kit concept and its relation to recommend_bgm, which covers the main workflow context. However, with 8 parameters, no annotations, and 0% schema description coverage, the description leaves important operational details (overwrite behavior, optional-field semantics, allowed values) unspecified. An output schema exists, so return values need not be explained, but the overall guidance is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It maps 'BPM lock' to bpm_min/bpm_max, 'no vocals' to instrumental_only, and 'mood whitelist' to moods. But name, avoid, genres, and notes are left undocumented beyond their parameter titles, and the description gives no accepted values or format hints for array/string parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Save') and resource ('brand kit'), and the parenthetical clarifies what the brand kit encodes: BPM lock, no vocals, and mood whitelist. It also names the intended downstream consumer, recommend_bgm. It does not explicitly contrast itself with sibling tools such as search_music or generate_bed, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction 'Pass brand_kit=name to recommend_bgm' gives a clear workflow hint: save the kit first, then reference it by name during recommendation. However, it never explicitly says when to use this tool versus alternatives like recommend_bgm or search_music, so the usage guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_musicC
Free-text search over seed + optional Jamendo / Freesound / user library.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| bpm_max | No | ||
| bpm_min | No | ||
| catalog | No | auto | |
| duration_max | No | ||
| duration_min | No | ||
| instrumental | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must carry the burden of behavioral disclosure. It only states the search scope and does not mention return format, ordering, pagination, or that it is a read-only operation. No side effects or limitations are disclosed, which is insufficient for an 8-parameter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is superficially concise but under-specifies the tool. It omits essential information about filters and output, making it an incomplete specification rather than a well-structured concise description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, no annotations, and an output schema that is not shown, the description is severely incomplete. An agent cannot determine how to set filters, what results look like, or any constraints on usage. The tool's complexity demands a far richer description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the schema provides no explanations for any parameter. The description fails to explain the meaning or effect of limit, bpm_min, bpm_max, duration_min, duration_max, instrumental, or catalog. It only alludes to source catalogs indirectly without mapping them to the catalog parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Free-text search') and resource ('seed + optional Jamendo / Freesound / user library'), which distinguishes it from sibling tools like get_track (fetch specific track) and recommend_bgm (AI-driven recommendation). It doesn't fully define 'seed' but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention that it should be used for free-text queries, nor does it exclude cases better handled by recommend_bgm or get_track. The agent is left to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusA
Show ffmpeg/yt-dlp availability and which music adapters have keys.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. The verb 'Show' conveys a read-only operation)Skip even though it does not spell out 'non-mutating', and it names the exact reported dimensions. An output schema covers the return shape, so the description provides sufficient behavioral context for a simple status check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence communicates the complete purpose without wasted words. Every phrase adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a no-parameter status tool: it specifies what is checked and that an output schema defines the result structure. There are no hidden inputs or prerequisites an agent would need clarified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to document beyond what the empty input schema already shows. Baseline 4 is appropriate because no parameter ambiguity exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Show') and concrete resources (ffmpeg/yt-dlp availability, music adapter keys). This clearly distinguishes status from the media-processing sibling tools and leaves no ambiguity about what the tool reports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: this is an environment-readiness/diagnostic tool, in contrast to the ingest/analyze/recommend actions listed as siblings. It does not explicitly say 'use before X', but for a zero-parameter status command the intended usage is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_cutsA
Snap detected scene cuts onto a beat grid. Returns EDL-ish spans and intro/peak/outro acts.
bpm defaults to the VideoSonic suggested_bpm midpoint, or the track BPM if track_id is set.
| Name | Required | Description | Default |
|---|---|---|---|
| bpm | No | ||
| asset_id | Yes | ||
| track_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It does disclose a useful behavioral default (bpm fallback based on suggested_bpm or track_id). It does not mention whether the operation is read-only, persistent, or requires authentication, so the disclosure is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one sentence states purpose, one sentence states output, and the third covers parameter behavior. It contains no filler or redundant restating of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description and output schema cover the core result shape, but the tool appears to depend on a prior pipeline step to have 'detected scene cuts'. It does not explicitly state what asset_id should reference or what earlier analysis step, if any, needs to have run first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that bpm defaults to the VideoSonic suggested_bpm midpoint, or the track BPM when track_id is set. But it does not explain the required asset_id parameter, leaving some of the burden on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource—snap detected scene cuts to a beat grid—and names concrete outputs (EDL-ish spans, intro/peak/outro acts). It is not a tautology and is clear enough to identify the tool's role. However, it does not explicitly differentiate from any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'detected' implies the tool must be used after scene-cut detection has occurred, so there is an implicit usage context. The description does not say when to choose it over alternatives such as analyze_video_music or preview_mix, nor does it give prerequisites or exclusions.
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.
12 tool updates
v0.2.0- First observed
analyze_batch - First observed
analyze_video_music - First observed
export_mix_spec - First observed
generate_bed - First observed
get_track - First observed
ingest_video - First observed
preview_mix - First observed
recommend_bgm - First observed
save_brand_kit - First observed
search_music - First observed
status - First observed
suggest_cuts
TDQS
Scored across 12 tools
Most tools have clearly distinct roles in the pipeline (ingest, analyze, recommend, search, render, export, cuts, bed generation). However, preview_mix and export_mix_spec overlap significantly since export_mix_spec with render=true is explicitly 'same as preview_mix', and recommend_bgm vs search_music both perform music lookup with some boundary overlap.
All tools follow the snake_case verb_noun pattern (ingest_video, recommend_bgm, suggest_cuts, save_brand_kit, etc.), except for the noun-only 'status'. That minor inconsistency is the only deviation, making the set predictable.
12 tools map directly to a coherent music-video workflow: video ingest, analysis, BGM recommendation/search, track details, mixing, export, cutting, generated beds, brand kit, and batch analysis. Every tool has a clear purpose and the count fits squarely in the well-scoped range.
The toolkit covers the essential lifecycle from video input to analysis, music selection, mix preview, specification export, and batch operation. Minor gaps exist like management of saved assets (e.g., updating brand kits or deleting generated beds), but the core workflow has no dead ends and agents can complete a full pipeline.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Privacy-first audio intelligence: BPM, key, waveform. Audio never stored. Pay per second.
Create and track AI music videos and audio-reactive visuals from songs.
Free, copyright-safe AI music library for video creators and AI agents.
Video analysis AI: transcripts, summaries, visual scenes/shots, clips, answers in natural language.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceHelps YouTube content creators find perfect background music for their shorts by analyzing script content for mood, theme, and pacing, then recommending suitable tracks from YouTube Music with confidence scoring and duration filtering.1Apache 2.0
- AlicenseNot gradedqualityCmaintenancePrivacy-first audio intelligence: BPM, key, waveform. Audio never stored. Pay per second.MIT

AINSOF MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceEnables AI assistants to search a curated production-music catalogue by brief or reference link, listen to full previews, and score videos with synced music, plus retrieve stems, versions, and cue sheets for licensing.MIT- AlicenseNot gradedqualityCmaintenanceEnables local, private analysis of YouTube URLs and local audio files to extract BPM, key modulations, vocal presence, transient punch, stereo width, and CLAP vibe embeddings, returning structured sonic signatures for AI agents and CLI users.4MIT