Skip to main content
Glama
Convert-Online

convert-online-mcp

Official

Convert.Online MCP Server

Convert files between 400+ formats — images, video, audio, documents, spreadsheets, ebooks, fonts, CAD and 3D — from inside a conversation with an AI assistant. 37,500 conversion pairs, OCR, and no account needed to try it.

There are two ways in, and they expose the same five tools.

Hosted — nothing to install, nothing to run:

https://mcp.convert.online

Local — for clients that launch a command rather than speak OAuth to a URL:

npx -y convert-online-mcp

What this repository is. Two things: the stdio server in src/, MIT-licensed and published to npm as convert-online-mcp, and the documentation for the hosted endpoint. The local server is a thin client — it calls the public REST API and converts nothing itself, so no file ever passes through it. The conversion pipeline behind both is convert.online and is not open source. Issues and questions are welcome here.


Connect

Clients with connector support — Claude, ChatGPT and others — need only the URL. The server supports dynamic client registration, so nothing has to be provisioned in advance: add https://mcp.convert.online as a custom connector and approve the sign-in when it appears.

The flow is authorization code with PKCE (S256 required). Access tokens last one hour, refresh tokens ninety days, and every connected application can be revoked from the account dashboard — revocation takes effect immediately for both tokens.

Discovery metadata:

Document

URL

Protected resource

https://mcp.convert.online/.well-known/oauth-protected-resource

Authorization server

https://convert.online/.well-known/oauth-authorization-server

API key

Clients configured from a file can send a key instead. Create one at Dashboard → API Keys.

examples/claude-desktop.json:

{
  "mcpServers": {
    "convert-online": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://mcp.convert.online",
        "--header", "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Any MCP client works the same way: point it at https://mcp.convert.online and send Authorization: Bearer YOUR_API_KEY.

Local stdio server

Clients that launch a command — Cursor, Zed, Continue, and anything reading a config file — can run this package instead, with no mcp-remote shim in between:

{
  "mcpServers": {
    "convert-online": {
      "command": "npx",
      "args": ["-y", "convert-online-mcp"],
      "env": { "CONVERT_ONLINE_API_KEY": "YOUR_API_KEY" }
    }
  }
}

It needs Node 18 or newer, and nothing else. Files are never read by this process: a source given as source_url is fetched by our server, and a local file is uploaded straight to storage from wherever you run the PUT.

Variable

Default

What it is for

CONVERT_ONLINE_API_KEY

—

Required.

CONVERT_ONLINE_API_BASE

https://api.convert.online

Point it elsewhere for testing.

CONVERT_ONLINE_JOB_WAIT_MS

120000

How long convert waits before handing back a job id to poll.

CONVERT_ONLINE_UPLOAD_WAIT_MS

60000

How long convert waits for bytes that have not arrived yet.

Building from source: npm install && npm run build, then node dist/index.js.


Related MCP server: ChangeThisFile MCP Server

Tools

Five, and the annotations are set so a client can reason about them before calling.

list_formats — read-only

Lists supported formats. With no argument, every input format; with input_format, the formats that one converts to.

Argument

Type

Required

input_format

string

no

list_options — read-only

Lists the settings a given conversion accepts — resize, quality, codecs, bitrate, trim, crop — with their exact names, so convert can be called with settings that exist rather than guessed.

Argument

Type

Required

input_format

string

yes

output_format

string

yes

create_upload

Returns somewhere to put a local file. The right choice for any file that is not already at a URL, whatever its size: it hands back an upload URL and an import_id. PUT the bytes to that URL, then pass the import_id to convert.

Argument

Type

Required

output_format

string

yes

filename

string

no

input_format

string

no

convert — not read-only, open-world

Converts a file and returns a download link. Takes one of source_url (any URL the server can fetch) or import_id (from create_upload).

Argument

Type

Required

output_format

string

yes

source_url

string

one of

import_id

string

one of

input_format

string

no

filename

string

no

options

object

no

options is keyed by the names list_options returns for that pair.

get_job — read-only

Status of a conversion job, and its download link once finished.

Argument

Type

Required

job_id

string

yes


A worked exchange

You: Convert these HEIC photos to JPG.

The assistant calls convert with input_format: "heic", output_format: "jpg", and gets back:

Conversion finished.
Download: https://convert.online/download/…
Job id: 7f3c9a2e…

For a file already on the web, one call is enough:

{
  "source_url": "https://example.com/report.docx",
  "output_format": "pdf"
}

For a local file it is three: create_upload → PUT the bytes → convert with the import_id.


The same engine over REST

Everything the MCP server does is also a plain HTTP API, and the server builds exactly the same job envelope internally — a job is a named chain of tasks:

{
  "tasks": {
    "import-1": { "operation": "import/upload" },
    "convert-1": {
      "operation": "convert",
      "input": "import-1",
      "input_format": "heic",
      "output_format": "jpg"
    },
    "export-1": { "operation": "export/url", "input": ["convert-1"] }
  }
}

Note that tasks is an object of named steps, not an array — each step refers to the one before it by name, which is what lets a job branch.

See examples/rest-quickstart.md for the five calls end to end.


Limits and cost

A free tier exists and needs no credit card. Anonymous conversion through the website needs no account at all. Quotas and paid plans are at convert.online/plans.

License

The documentation and examples in this repository are MIT licensed — see LICENSE. The hosted service has its own terms and privacy policy.

Available Tools

5 tools
convertConvert a fileA

Convert a file to another format and return a download link. Give it one of: source_url (any URL the server can fetch — the best option when the file is already somewhere reachable) or import_id (from create_upload — the way in for a file on someone's device, whatever its size). Settings such as resizing, quality or codecs go in options — call list_options first to get the exact names for the conversion. Runs against your account and counts toward your quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsNoConversion settings, keyed by the option names from list_options. Names differ per conversion, so do not guess them.
filenameNoFile name of the source, e.g. "photo.jpg".
import_idNoId returned by create_upload, after the bytes have been PUT to its upload URL.
source_urlNoURL of the file to convert, fetched by our server. Any link reachable from the internet works.
input_formatNoSource format (optional; inferred from the file name or URL).
output_formatYesTarget format, e.g. "jpg", "pdf", "mp3".

TDQS

A4.7/5.0
Behavior4/5

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

Annotations cover the safety profile (not read-only, open-world, non-idempotent, non-destructive), and the description adds account/quota context ('Runs against your account and counts toward your quota'), which is real value beyond structured fields. It does not say whether conversion is synchronous or must be polled via the sibling get_job, which is a notable omission for this kind of tool.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what it does and what it returns, followed by input selection and the list_options prerequisite. No filler sentences and no repetition of the name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with no output schema, it covers the return value (download link), auth/quota impact, and the key input decision. The remaining gap is the processing model — nothing says whether the result is immediate or requires polling get_job, which matters given that sibling exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the trade-off between source_url and import_id and their origin (create_upload), and by warning that option names differ per conversion and must come from list_options rather than being guessed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Convert a file to another format') plus the outcome ('return a download link'). It also distinguishes its inputs from the sibling create_upload and points to list_options, so an agent can place it among siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use source_url when the file is already reachable, use import_id for a file on a device, and call list_options first to get exact option names. Both branches and the prerequisite call are stated, not implied.

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

create_uploadCreate an uploadA

Get somewhere to put a local file — the right choice for ANY file that is not already at a URL, whatever its size. Say what the file should become in output_format: the conversion then starts on its own the instant the file arrives, and collecting the result is all that is left. Returns an import_id plus a URL to PUT the bytes to. Then call convert with the import_id to collect the result; it waits for the file to arrive.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoName of the file being uploaded, e.g. "photo.jpg" — the source format is taken from it.
input_formatNoSource format, if the file name does not carry a usable extension.
output_formatYesWhat the file should become, e.g. "png". With it the conversion starts by itself when the file arrives.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare a non-idempotent, non-destructive write, and the description adds genuinely useful behavior beyond that: it returns an import_id plus a PUT URL, the conversion starts automatically the moment bytes arrive, and the result is collected via a separate convert call that blocks until the file lands. That is meaningful workflow context not available in the annotations.

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

Conciseness4/5

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

Front-loads the core decision rule before the mechanics, and the return/completion workflow is packed efficiently into two sentences. The opening 'Get somewhere to put a local file' is slightly informal but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly discloses the return shape (import_id + PUT URL) and the required follow-up call, which is the key information an agent needs. A brief note on upload lifetime or size limits would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each of the three parameters is already documented in the schema. The description restates output_format's role ('what the file should become') and reinforces the auto-start behavior, but adds no syntax, format list, or constraint detail beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource (create an upload destination for a local file) and immediately delineates scope: 'the right choice for ANY file that is not already at a URL.' An agent can distinguish this from the URL-based path without opening the schema.

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

Usage Guidelines4/5

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

Gives a decisive when-to-use rule ('any file not already at a URL, whatever its size') and a follow-up workflow step ('call convert with the import_id to collect the result'). It does not name the specific sibling tool used for the already-at-a-URL case, so routing to that alternative is left implicit.

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

get_jobGet job statusB
Read-only

Get the status of a conversion job and its download link if finished.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesThe job id returned by convert.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds one behavioral detail, that the download link is only present 'if finished', which signals a conditional response, but it says nothing about rate limits, polling expectations, or how long job state is retained.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; the conditional payoff (download link if finished) is packed into the same clause rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the return-value burden, and it only partially does: it mentions status and the finished-state download link but not the possible status values, the failure case, or whether the job_id expires. Adequate for a simple lookup but leaves meaningful gaps for a polling workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter at 100% schema description coverage, the schema already explains that job_id comes from convert, and the description adds no further semantics such as format, expiration, or invalid-id behavior. Baseline 3 is appropriate when the schema carries the meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('get the status of a conversion job') that clearly distinguishes it from siblings like convert and create_upload, and it adds what the caller actually receives (the download link). It stops short of naming a sibling or stating the lifecycle relationship to convert, so it stays at 4 rather than 5.

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

Usage Guidelines2/5

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

No when-to-use guidance appears in the description; the only hint that this follows convert lives in the schema's job_id description ('returned by convert'). There is no mention of polling, retry, or terminal-state conditions under which an agent should or should not call it.

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

list_formatsList formatsA
Read-only

List supported conversion formats. With no argument returns all input formats; with input_format returns the formats that input can be converted to.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_formatNoOptional source format, e.g. "pdf". Omit to list all input formats.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that the result set varies by argument, but says nothing about ordering, pagination, or result size, so it adds only modest behavioral value beyond the structured fields.

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

Conciseness5/5

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

Two tight sentences with no filler; the primary action is front-loaded and the argument-dependent behavior follows immediately. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, single-optional-parameter, read-only enumeration tool with no output schema, the description covers both invocation modes adequately. It does not describe the shape or ordering of the returned format list, a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional parameter is fully documented there, including an example ('pdf') and the omit-to-list-all semantics. The description essentially restates that same guidance, so it earns the baseline 3 without adding syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List supported conversion formats') and clarifies its dual-mode behavior based on whether an argument is supplied. It does not, however, differentiate itself from the sibling 'list_options', whose scope could plausibly overlap with 'formats', leaving some ambiguity an agent must resolve.

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

Usage Guidelines4/5

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

Gives clear conditional guidance: call with no argument to enumerate all input formats, or with input_format to discover valid conversion targets. There is no explicit when-not-to-use or pointer to the sibling 'convert', but the context is unambiguous for this read-only lookup.

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

list_optionsList conversion optionsA
Read-only

List the settings a given conversion accepts — resize, quality, codecs, bitrate, trim, crop and so on, with their exact names, types and allowed values. Call this before convert whenever the user asks for anything beyond a plain format change, and pass what it returns in the convert tool's options object.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_formatYesSource format, e.g. "jpg".
output_formatYesTarget format, e.g. "png".

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the otherwise-undocumented return contract — exact names, types, and allowed values — which is genuinely useful behavioral context. It stops short of any richness about ordering or error behavior, so not a 5.

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

Conciseness5/5

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

Two sentences, zero filler, and front-loaded with what is returned before the routing instruction. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by stating what the return contains (setting names, types, allowed values), which is the key payload detail for this read tool. Combined with the convert-integration instruction, an agent has enough to call and use it correctly; only edge cases like unknown formats are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both params (input_format, output_format) are documented in the schema, so the baseline of 3 applies. The description only alludes to 'a given conversion' and does not add format-syntax or pairing guidance beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (settings a given conversion accepts) and enumerates what those settings cover: resize, quality, codecs, bitrate, trim, crop. It is clearly distinguishable from the sibling list_formats, which the description implies by scoping to conversion *options* rather than formats.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('whenever the user asks for anything beyond a plain format change') and an explicit downstream action ('pass what it returns in the convert tool's options object'). It also names the alternative condition — a plain format change does not require this call — so the agent knows both when and when not to use it.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedconvert
    • First observedcreate_upload
    • First observedget_job
    • First observedlist_formats
    • First observedlist_options

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

Tools cover distinct functions: format discovery, option discovery, conversion, job status, and uploading local files. The only overlap is that convert can accept an import_id from create_upload, and get_job also provides download links, which could cause slight confusion, but descriptions guide the workflow.

Naming Consistency4/5

Four of five tools follow a clear verb_noun pattern (list_formats, list_options, get_job, create_upload), with convert as a bare verb. This minor inconsistency is easily understood.

Tool Count5/5

Five tools is well-scoped for a file conversion service; each tool maps to a necessary step (discover formats, discover settings, provide input, run conversion, check status).

Completeness4/5

Core conversion lifecycle is covered, but there is no tool to cancel or list jobs, check quota, or delete uploads, which are minor gaps an agent can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers