Transcribe audio and video to text, SRT or VTT. Summaries, translation. Optional OAuth sign-in.
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.
A public web page with the results of a completed job, for your user to open or send to others. Anyone with the link can see it until the job expires.
job_id returned by transcribe_url or create_upload.
The robot_key you received with your first job. Required to read or start your jobs.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
A public web page with the results of a completed job, for your user to open or send to others. Anyone with the link can see it until the job expires.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | job_id returned by transcribe_url or create_upload. |
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"robot_key"
],
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "job_id returned by transcribe_url or create_upload."
},
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
}
}
}For a file on your machine: returns an upload_url. PUT the file to it, then call start_transcription. If your user attached or named a file, tell them it goes to convert.express for transcription, then try the PUT. If your sandbox has no network, ask your user to allow the upload host and try again. Only if the PUT still fails (no HTTP access, or it is blocked), show the returned upload_page_url to your user instead: they upload the file in a browser and it starts by itself.
| Argument | Type | Description |
|---|---|---|
| model | string | Default "mai-transcribe". See get_service_info. |
| summary | boolean | Also write an AI summary when the transcript is ready. |
| filename* | string | File name including extension, e.g. "meeting.mp3". |
| language | string | ISO 639-1 code such as "en". Omit to auto-detect. |
| robot_key | string | Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned. |
| size_bytes* | integer | Exact file size in bytes (max 2 GB). |
| action_items | boolean | Also extract action items when the transcript is ready. |
| content_type* | string | MIME type, e.g. "audio/mpeg" or "video/mp4". |
| speaker_labels | boolean | Label who speaks when. |
| translate_to_english | boolean | Translate the speech to English while transcribing. Only with model "whisper". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"filename",
"content_type",
"size_bytes"
],
"properties": {
"model": {
"enum": [
"whisper",
"mai-transcribe",
"gemini-transcribe"
],
"type": "string",
"description": "Default \"mai-transcribe\". See get_service_info."
},
"summary": {
"type": "boolean",
"description": "Also write an AI summary when the transcript is ready."
},
"filename": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "File name including extension, e.g. \"meeting.mp3\"."
},
"language": {
"type": "string",
"maxLength": 16,
"description": "ISO 639-1 code such as \"en\". Omit to auto-detect."
},
"robot_key": {
"type": "string",
"description": "Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned."
},
"size_bytes": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Exact file size in bytes (max 2 GB).",
"exclusiveMinimum": 0
},
"action_items": {
"type": "boolean",
"description": "Also extract action items when the transcript is ready."
},
"content_type": {
"type": "string",
"maxLength": 100,
"description": "MIME type, e.g. \"audio/mpeg\" or \"video/mp4\"."
},
"speaker_labels": {
"type": "boolean",
"description": "Label who speaks when."
},
"translate_to_english": {
"type": "boolean",
"description": "Translate the speech to English while transcribing. Only with model \"whisper\"."
}
}
}Delete the uploaded file, the transcript and all other results of a job right away, instead of 24 hours after the last activity. Cannot be undone.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | job_id returned by transcribe_url or create_upload. |
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"robot_key"
],
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "job_id returned by transcribe_url or create_upload."
},
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
}
}
}Price for transcribing a recording of a given length, and how many free minutes are left today — for your IP, or for your user's account once your robot_key is linked.
| Argument | Type | Description |
|---|---|---|
| robot_key | string | Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned. |
| duration_minutes* | number | Length of the recording in minutes. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"duration_minutes"
],
"properties": {
"robot_key": {
"type": "string",
"description": "Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned."
},
"duration_minutes": {
"type": "number",
"maximum": 1440,
"description": "Length of the recording in minutes.",
"exclusiveMinimum": 0
}
}
}Status of a job. When status is "completed", returns the transcript text in the chosen format plus download links. When status is "payment_required", returns a preview and a payment_url to show your user. Also returns summary, action_items and translations when requested.
| Argument | Type | Description |
|---|---|---|
| format | string | Default "txt". "timed" = timestamps + speakers (needs speaker_labels). |
| job_id* | string | job_id returned by transcribe_url or create_upload. |
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"robot_key"
],
"properties": {
"format": {
"enum": [
"txt",
"srt",
"vtt",
"timed"
],
"type": "string",
"description": "Default \"txt\". \"timed\" = timestamps + speakers (needs speaker_labels)."
},
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "job_id returned by transcribe_url or create_upload."
},
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
}
}
}What convert.express does, how to use these tools, free minutes, prices, models, languages and limits.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Your jobs that still exist (jobs are deleted 24 hours after the last activity), newest first, with their status.
| Argument | Type | Description |
|---|---|---|
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"robot_key"
],
"properties": {
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
}
}
}Pay for the full transcript of a job whose get_job status is "payment_required", with a card your user shared through a Stripe Shared Payment Token (MPP). Call without payment: you get a payment challenge with the exact price in EUR. Your MPP client pays it and calls again. Without an MPP wallet, show payment_url from get_job to your user instead.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | job_id returned by transcribe_url or create_upload. |
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"robot_key"
],
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "job_id returned by transcribe_url or create_upload."
},
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
}
}
}Ask for an AI summary or action items of a completed job. Returns at once; the result appears in get_job ("summary" / "action_items").
| Argument | Type | Description |
|---|---|---|
| type* | string | "summary" or "action_items". |
| job_id* | string | job_id returned by transcribe_url or create_upload. |
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"robot_key",
"type"
],
"properties": {
"type": {
"enum": [
"summary",
"action_items"
],
"type": "string",
"description": "\"summary\" or \"action_items\"."
},
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "job_id returned by transcribe_url or create_upload."
},
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
}
}
}Tell the convert.express team about a bug, a missing feature, or a question — from you or your user. A human reads every message; there is no automatic reply. Include reply_email only if your user wants an answer.
| Argument | Type | Description |
|---|---|---|
| type* | string | What kind of message this is. |
| message* | string | The message in plain text. Up to 2000 characters are kept. |
| robot_key | string | Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned. |
| reply_email | string | Email address for a human reply, only with your user's consent. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"type",
"message"
],
"properties": {
"type": {
"enum": [
"feature_request",
"bug",
"question",
"other"
],
"type": "string",
"description": "What kind of message this is."
},
"message": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The message in plain text. Up to 2000 characters are kept."
},
"robot_key": {
"type": "string",
"description": "Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned."
},
"reply_email": {
"type": "string",
"maxLength": 254,
"description": "Email address for a human reply, only with your user's consent."
}
}
}Call after the PUT to upload_url has finished. Checks the file arrived and queues it.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | job_id returned by transcribe_url or create_upload. |
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"robot_key"
],
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "job_id returned by transcribe_url or create_upload."
},
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
}
}
}Start transcribing a media file from a public link (direct file link or YouTube). Returns job_id and robot_key; then poll get_job.
| Argument | Type | Description |
|---|---|---|
| url* | string | https:// link to the audio/video file or a YouTube video. |
| model | string | Default "mai-transcribe". See get_service_info. |
| summary | boolean | Also write an AI summary when the transcript is ready. |
| language | string | ISO 639-1 code such as "en". Omit to auto-detect. |
| robot_key | string | Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned. |
| action_items | boolean | Also extract action items when the transcript is ready. |
| speaker_labels | boolean | Label who speaks when. |
| translate_to_english | boolean | Translate the speech to English while transcribing. Only with model "whisper". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "https:// link to the audio/video file or a YouTube video."
},
"model": {
"enum": [
"whisper",
"mai-transcribe",
"gemini-transcribe"
],
"type": "string",
"description": "Default \"mai-transcribe\". See get_service_info."
},
"summary": {
"type": "boolean",
"description": "Also write an AI summary when the transcript is ready."
},
"language": {
"type": "string",
"maxLength": 16,
"description": "ISO 639-1 code such as \"en\". Omit to auto-detect."
},
"robot_key": {
"type": "string",
"description": "Pass the robot_key from your earlier jobs so all your jobs stay together. Omit on your very first call — a new one is returned."
},
"action_items": {
"type": "boolean",
"description": "Also extract action items when the transcript is ready."
},
"speaker_labels": {
"type": "boolean",
"description": "Label who speaks when."
},
"translate_to_english": {
"type": "boolean",
"description": "Translate the speech to English while transcribing. Only with model \"whisper\"."
}
}
}Translate the transcript, subtitles (timecodes kept), summary or action items of a completed job into another language. Returns at once; the result appears in get_job under "translations".
| Argument | Type | Description |
|---|---|---|
| job_id* | string | job_id returned by transcribe_url or create_upload. |
| source | string | What to translate. Default "txt". summary / action_items must exist first. |
| robot_key* | string | The robot_key you received with your first job. Required to read or start your jobs. |
| target_language* | string | Language name in English, e.g. "German", "Brazilian Portuguese", "Japanese". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"robot_key",
"target_language"
],
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "job_id returned by transcribe_url or create_upload."
},
"source": {
"enum": [
"txt",
"srt",
"vtt",
"timed",
"summary",
"action_items"
],
"type": "string",
"description": "What to translate. Default \"txt\". summary / action_items must exist first."
},
"robot_key": {
"type": "string",
"description": "The robot_key you received with your first job. Required to read or start your jobs."
},
"target_language": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "Language name in English, e.g. \"German\", \"Brazilian Portuguese\", \"Japanese\"."
}
}
}