Cut audio from YouTube, TikTok or Instagram links to MP3/WAV, and fetch video transcripts.
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.
Cut audio from a YouTube, TikTok, Instagram, or SoundCloud URL and return a short-lived download link. Lead with download_url for cut/download requests; offer editor_url when the user wants to tweak the selection. Links expire after about an hour — ask again in chat for a fresh cut if expired. Omit start_sec and end_sec for the full track. format defaults to mp3 (wav allowed). clip_id and peaks drive the interactive clip card some chat apps show; do not show them to the user. If the user adjusted the clip in the card, read the widget context for the current range and download link before answering follow-ups.
YouTube, TikTok, Instagram, or SoundCloud URL to cut
One short sentence on what the user is trying to do with this audio (for example 'ringtone from the chorus'). No links, names or personal details.
The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
Download format; default mp3
Range end in seconds
Range start in seconds
Clip length in seconds from start_sec (default 0) when end_sec is omitted
Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Cut audio from a YouTube, TikTok, Instagram, or SoundCloud URL and return a short-lived download link. Lead with download_url for cut/download requests; offer editor_url when the user wants to tweak the selection. Links expire after about an hour — ask again in chat for a fresh cut if expired. Omit start_sec and end_sec for the full track. format defaults to mp3 (wav allowed). clip_id and peaks drive the interactive clip card some chat apps show; do not show them to the user. If the user adjusted the clip in the card, read the widget context for the current range and download link before answering follow-ups.
| Argument | Type | Description |
|---|---|---|
| url* | string | YouTube, TikTok, Instagram, or SoundCloud URL to cut |
| format | string | Download format; default mp3 |
| context* | string | One short sentence on what the user is trying to do with this audio (for example 'ringtone from the chorus'). No links, names or personal details. |
| end_sec | number | Range end in seconds |
| llm_model* | string | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. |
| start_sec | number | Range start in seconds |
| duration_sec | number | Clip length in seconds from start_sec (default 0) when end_sec is omitted |
| conversation_id | string | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url",
"context",
"llm_model"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "YouTube, TikTok, Instagram, or SoundCloud URL to cut"
},
"format": {
"enum": [
"wav",
"mp3"
],
"type": "string",
"description": "Download format; default mp3"
},
"context": {
"type": "string",
"description": "One short sentence on what the user is trying to do with this audio (for example 'ringtone from the chorus'). No links, names or personal details."
},
"end_sec": {
"type": "number",
"description": "Range end in seconds",
"exclusiveMinimum": 0
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"start_sec": {
"type": "number",
"minimum": 0,
"description": "Range start in seconds"
},
"duration_sec": {
"type": "number",
"description": "Clip length in seconds from start_sec (default 0) when end_sec is omitted",
"exclusiveMinimum": 0
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
}
}Fetch timestamped captions for a YouTube, TikTok, Instagram, or SoundCloud URL when the platform provides them. Use segment start_sec/end_sec (or the flat text) to choose a cut range, then call cut_audio with the same URL and those times. When available is false there are no captions — do not invent lyrics or timestamps; tell the user to pick times another way. Optional lang is a BCP-47 code (default en). No job_id is returned.
| Argument | Type | Description |
|---|---|---|
| url* | string | YouTube, TikTok, Instagram, or SoundCloud URL to fetch captions for |
| lang | string | Optional BCP-47 caption language (default en) |
| context* | string | One short sentence on what the user is trying to do with this audio (for example 'ringtone from the chorus'). No links, names or personal details. |
| llm_model* | string | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. |
| conversation_id | string | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
Re-cut a clip from Samplecut's clip card to a new start/end, reusing the audio already extracted for it. Called by the interactive card; to cut something new, use cut_audio.
| Argument | Type | Description |
|---|---|---|
| format | string | Download format; default the clip's current format |
| clip_id* | string | clip_id from a cut_audio result |
| context | string | Optional: why the clip is being re-cut |
| end_sec* | number | New range end in seconds |
| llm_model | string | Optional: the model making this call |
| start_sec* | number | New range start in seconds |
| conversation_id | string | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"clip_id",
"start_sec",
"end_sec"
],
"properties": {
"format": {
"enum": [
"wav",
"mp3"
],
"type": "string",
"description": "Download format; default the clip's current format"
},
"clip_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "clip_id from a cut_audio result"
},
"context": {
"type": "string",
"description": "Optional: why the clip is being re-cut"
},
"end_sec": {
"type": "number",
"description": "New range end in seconds",
"exclusiveMinimum": 0
},
"llm_model": {
"type": "string",
"description": "Optional: the model making this call"
},
"start_sec": {
"type": "number",
"minimum": 0,
"description": "New range start in seconds"
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
}
}Tell Samplecut's developers how the user's task went. Call it once after you finish or give up on a task where you used these tools, with task_completed set to whether the user got what they wanted. Use feedback_type "missing_capability" when the goal needed something these tools do not do (for example naming a song or separating vocals), even if you finished it another way; "issue" when a tool failed, or its result was wrong or confusing; "praise" when it went well. This only records feedback. No links, names or personal details.
| Argument | Type | Description |
|---|---|---|
| details | string | Optional longer context: what you tried, exact parameter values, the error text you saw, and any workaround you used. Omit when the summary says it all. |
| summary* | string | One self-contained sentence. For 'missing_capability': the capability you needed, e.g. 'No tool to delete multiple cohorts in one call.' For 'issue': the tool and the problem, e.g. 'query-trends rejects relative date ranges with an unclear error.' |
| llm_model* | string | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. |
| sentiment | string | Optional: how the experience felt overall. |
| tool_name | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url",
"context",
"llm_model"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "YouTube, TikTok, Instagram, or SoundCloud URL to fetch captions for"
},
"lang": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Optional BCP-47 caption language (default en)"
},
"context": {
"type": "string",
"description": "One short sentence on what the user is trying to do with this audio (for example 'ringtone from the chorus'). No links, names or personal details."
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
}
}| Optional: the existing tool this feedback is about (for 'issue' or 'praise'). Leave empty for 'missing_capability' - the point is that no tool fits. |
| feedback_type* | string | What kind of feedback this is. Use 'missing_capability' when the tool you needed does not exist in the tool list - nothing failed, the capability is absent (this is the most valuable report; send it even if you found a workaround). Use 'issue' when an existing tool behaved badly: it failed, returned a confusing error, or its description or schema misled you. Use 'praise' when something worked notably well. Use 'other' for anything else. |
| task_completed | boolean | Optional: whether you still completed the user's task despite the problem. |
| conversation_id | string | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
| friction_points | string | Optional: the specific moments that slowed you down, as short bullet-like sentences, quoting exact tool names, parameters, or error text. |
| suggested_improvement | string | Optional: the concrete change that would have helped, e.g. the tool to add, the description to reword, or the error message to improve. |
{
"type": "object",
"required": [
"feedback_type",
"summary",
"llm_model"
],
"properties": {
"details": {
"type": "string",
"description": "Optional longer context: what you tried, exact parameter values, the error text you saw, and any workaround you used. Omit when the summary says it all."
},
"summary": {
"type": "string",
"description": "One self-contained sentence. For 'missing_capability': the capability you needed, e.g. 'No tool to delete multiple cohorts in one call.' For 'issue': the tool and the problem, e.g. 'query-trends rejects relative date ranges with an unclear error.'"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"sentiment": {
"enum": [
"positive",
"neutral",
"negative",
"mixed"
],
"type": "string",
"description": "Optional: how the experience felt overall."
},
"tool_name": {
"type": "string",
"description": "Optional: the existing tool this feedback is about (for 'issue' or 'praise'). Leave empty for 'missing_capability' - the point is that no tool fits."
},
"feedback_type": {
"enum": [
"missing_capability",
"issue",
"praise",
"other"
],
"type": "string",
"description": "What kind of feedback this is. Use 'missing_capability' when the tool you needed does not exist in the tool list - nothing failed, the capability is absent (this is the most valuable report; send it even if you found a workaround). Use 'issue' when an existing tool behaved badly: it failed, returned a confusing error, or its description or schema misled you. Use 'praise' when something worked notably well. Use 'other' for anything else."
},
"task_completed": {
"type": "boolean",
"description": "Optional: whether you still completed the user's task despite the problem."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
},
"friction_points": {
"type": "string",
"description": "Optional: the specific moments that slowed you down, as short bullet-like sentences, quoting exact tool names, parameters, or error text."
},
"suggested_improvement": {
"type": "string",
"description": "Optional: the concrete change that would have helped, e.g. the tool to add, the description to reword, or the error message to improve."
}
}
}