Audio mastering for AI agents: LUFS analysis, Suno artifact cleanup, free daily master.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Measure integrated LUFS, sample peak, duration, sample rate and stereo correlation without processing. Free, a couple of seconds. Run this before choosing a preset. Note: true peak and loudness range are NOT part of this fast pass — they are measured on the result and come back from get_job.
Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mastering https://echoteka.ai/mcp
Measure integrated LUFS, sample peak, duration, sample rate and stereo correlation without processing. Free, a couple of seconds. Run this before choosing a preset. Note: true peak and loudness range are NOT part of this fast pass — they are measured on the result and come back from get_job.
| Argument | Type | Description |
|---|---|---|
| audio_url* | string | Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically. |
{
"type": "object",
"required": [
"audio_url"
],
"properties": {
"audio_url": {
"type": "string",
"description": "Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically."
}
},
"additionalProperties": false
}Master up to 10 tracks in one call with the same settings. Needs N CREDITS for N tracks, or N free runs - not one. album_mode (default true) levels the tracks RELATIVE to each other: the loudest hits the target exactly, the others keep their offsets, so a quiet interlude is not inflated to single level. Limits: 10 tracks, 100 MB per file and 300 MB per call (this server's own caps, for memory). A big album takes minutes - send fewer, longer tracks per call rather than all at once. Returns one job id per track - poll each with get_job. Pass dry_run=true to see what would be used and the settings before anything is spent.
| Argument | Type | Description |
|---|---|---|
| style | string | Preset key from list_presets. |
| bitrate | integer | MP3: 128/192/256/320; OPUS: 128/192. |
| dry_run | boolean | Report what would be used and the settings without mastering and without downloading anything. |
| album_mode | boolean | Keep relative loudness between tracks. Default true. Set false for unrelated singles. |
| audio_urls* | array | Public https URLs, in album order. |
| out_format | string | |
| target_lufs | number | Target for the LOUDEST track in album mode. |
| remove_watermark | boolean | Also run AI artifact cleanup first. Free. |
{
"type": "object",
"required": [
"audio_urls"
],
"properties": {
"style": {
"type": "string",
"description": "Preset key from list_presets."
},
"bitrate": {
"type": "integer",
"description": "MP3: 128/192/256/320; OPUS: 128/192."
},
"dry_run": {
"type": "boolean",
"description": "Report what would be used and the settings without mastering and without downloading anything."
},
"album_mode": {
"type": "boolean",
"description": "Keep relative loudness between tracks. Default true. Set false for unrelated singles."
},
"audio_urls": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "Public https URLs, in album order."
},
"out_format": {
"enum": [
"wav",
"wav24",
"mp3",
"flac",
"opus",
"aac"
],
"type": "string"
},
"target_lufs": {
"type": "number",
"description": "Target for the LOUDEST track in album mode."
},
"remove_watermark": {
"type": "boolean",
"description": "Also run AI artifact cleanup first. Free."
}
},
"additionalProperties": false
}What this caller may do right now: free master left today and when it resets, credit balance, upload cap, whether advanced modules are available. Call before mastering.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Remove the marks an AI generator leaves in the audio (narrow tones above 15 kHz, level jumps at block seams, fixed spectral peaks); loudness and tone stay as they are. It does not hide that a track is AI-made - disclose AI use wherever a platform asks. Free, never spends a credit. Returns a job id - poll get_job.
| Argument | Type | Description |
|---|---|---|
| audio_url* | string | Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically. |
| out_format | string | |
| sensitivity | number | 0-1, default server-side. |
{
"type": "object",
"required": [
"audio_url"
],
"properties": {
"audio_url": {
"type": "string",
"description": "Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically."
},
"out_format": {
"enum": [
"wav",
"wav24",
"mp3",
"flac",
"opus",
"aac"
],
"type": "string"
},
"sensitivity": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "0-1, default server-side."
}
},
"additionalProperties": false
}Status, progress and result metrics (after_lufs, true_peak_db, lra, platform_ready) for a mastering, cleanup or preview job. For previews it returns each style with its loudness and a listen link. When a master is done it also returns download_url - a signed link that works without credentials for about an hour. Free.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | Job id returned by master_track, clean_ai_trace or preview_styles; batch_master returns one per track in job_ids. Not a URL or a filename: 1-64 chars of A-Z a-z 0-9 _ - |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"maxLength": 64,
"minLength": 1,
"description": "Job id returned by master_track, clean_ai_trace or preview_styles; batch_master returns one per track in job_ids. Not a URL or a filename: 1-64 chars of A-Z a-z 0-9 _ -"
}
},
"additionalProperties": false
}What Echoteka does, what is free, what a credit buys, and where the rules live. Call once at the start of a session.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}All mastering presets with their target loudness in LUFS. Call this to get the exact preset keys that master_track and batch_master accept. Use preview_styles instead when you want to HEAR 2-6 of them on the actual track before choosing, and get_service_info when you need the wider service manifest rather than the preset list. Free.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Master one track. Uses 1 CREDIT when the account has a balance; otherwise it runs on the free quota (1 free master per day (UTC), without advanced modules). Returns a job id immediately - poll get_job (typical 20-60 s, up to 10 min with restoration). The source is fetched by this server, so the ceiling here is 100 MB per file. Pass dry_run=true first if you want to see what would be used and the effective settings before anything is spent.
| Argument | Type | Description |
|---|---|---|
| style | string | Preset key from list_presets, e.g. edm, hiphop, podcast, unlimiter. Default standard. |
| bitrate | integer | MP3: 128/192/256/320; OPUS: 128/192. |
| dry_run | boolean | Do not master: report what this call would use and what settings would apply. Nothing is charged, the file is not even downloaded. |
| audio_url* | string | Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically. |
| intensity | number | Multiplier on the preset's multiband compression: 1.0 as designed, 0.5 gentler, 1.5 denser. Values outside 0.5-1.5 are clamped. |
| out_format | string | |
| dither_type | string | Dither for 16-bit WAV output: tpdf (default), ns_e or ns_itu (noise-shaped). |
Master the middle 24 s of the track in 2-6 presets at once and get each one's loudness plus a listen link. FREE (6 per day). Use this instead of guessing a preset, and instead of spending a credit to 'try' one.
| Argument | Type | Description |
|---|---|---|
| styles | array | Preset keys from list_presets. Default: edm, pop, rnb, standard. |
| audio_url* | string | Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically. |
{
"type": "object",
"required": [
"audio_url"
],
"properties": {
"styles": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6,
"minItems": 2,
"description": "Preset keys from list_presets. Default: edm, pop, rnb, standard."
},
"audio_url": {
"type": "string",
"description": "Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.
| target_lufs | number | Override the preset target, e.g. -14 for Spotify. |
| webhook_url | string | Public https URL to POST the result to instead of polling. |
| denoise_strength | number | Noise reduction, 0-1. 0 disables. |
| remove_watermark | boolean | Also run AI artifact cleanup first. Free. |
| restore_dynamics | boolean | Open up a brickwalled source before mastering (pairs with style unlimiter). |
{
"type": "object",
"required": [
"audio_url"
],
"properties": {
"style": {
"type": "string",
"description": "Preset key from list_presets, e.g. edm, hiphop, podcast, unlimiter. Default standard."
},
"bitrate": {
"type": "integer",
"description": "MP3: 128/192/256/320; OPUS: 128/192."
},
"dry_run": {
"type": "boolean",
"description": "Do not master: report what this call would use and what settings would apply. Nothing is charged, the file is not even downloaded."
},
"audio_url": {
"type": "string",
"description": "Public https URL of the audio file (wav/mp3/flac/m4a). A share link to the page works too — Suno/Udio song pages, Google Drive and Dropbox links are resolved to the file automatically."
},
"intensity": {
"type": "number",
"maximum": 1.5,
"minimum": 0.5,
"description": "Multiplier on the preset's multiband compression: 1.0 as designed, 0.5 gentler, 1.5 denser. Values outside 0.5-1.5 are clamped."
},
"out_format": {
"enum": [
"wav",
"wav24",
"mp3",
"flac",
"opus",
"aac"
],
"type": "string"
},
"dither_type": {
"enum": [
"tpdf",
"ns_e",
"ns_itu"
],
"type": "string",
"description": "Dither for 16-bit WAV output: tpdf (default), ns_e or ns_itu (noise-shaped)."
},
"target_lufs": {
"type": "number",
"description": "Override the preset target, e.g. -14 for Spotify."
},
"webhook_url": {
"type": "string",
"description": "Public https URL to POST the result to instead of polling."
},
"denoise_strength": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Noise reduction, 0-1. 0 disables."
},
"remove_watermark": {
"type": "boolean",
"description": "Also run AI artifact cleanup first. Free."
},
"restore_dynamics": {
"type": "boolean",
"description": "Open up a brickwalled source before mastering (pairs with style unlimiter)."
}
},
"additionalProperties": false
}