Skip to main content
Glama
@jam-jam/convert-mcp

@jam-jam/convert-mcp

by titouannwtt

Convert pasted text or ChordPro

jj_convert_text

Converts pasted plain text or ChordPro lyrics and chords into a selected format via the Jam Jam API, returning embedded text or a file path for PDF, MIDI, and similar outputs.

Instructions

Sends plain text or ChordPro (pasted lyrics and chords, no file) to the Jam Jam API, waits for the conversion to finish, and returns the result: embedded text for small text formats, or a local file path for binary formats (PDF, MIDI...). Call jj_list_formats first to find valid "output" ids. Consumes one unit of the conversion quota.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "text": "<text>",
      "output": "<output>"
    },
    "name": "jj_convert_text"
  }
}

Input Schema

NameRequiredDescriptionDefault
textYesPlain text or ChordPro to convert (up to 262144 characters).
outputYesOutput format id from jj_list_formats (e.g. "pdf-songbook", "midi", "songbook").
deliverNo"download" (default) returns the artifact; "carnet" saves it to the caller's Jam Jam notebook instead (requires an account).
optionsNoExtra per-format options, see jj_list_formats for the target format.
maxWaitMsNoMaximum time to wait for the job to finish, in milliseconds (default 120000, hard cap 600000). If exceeded, the job keeps running server-side; poll it with jj_get_job.
inputFormatNoInput format id from jj_list_formats (e.g. "chordpro", "text-lyrics"). Omit to let the server detect it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.2

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full burden and does well: it discloses that the call is synchronous/blocking ('waits for the conversion to finish'), that it consumes quota, and that it returns embedded text for small formats versus a local file path for binary formats. The main gap is the failure/timeout path — the schema mentions the job persists after maxWaitMs and pointing at jj_get_job, but the description does not restate the polling/error behavior.

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?

Three compact sentences, front-loaded with the action and return shape, followed by the prerequisite and the quota cost — every clause carries information. The only minor inefficiency is that the return-format clause and the quota clause could be tightened, but nothing is wasted.

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

Completeness5/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 a nested `options` object and no output schema, the description supplies the missing return-value information (embedded text vs local file path) and the ordering dependency on jj_list_formats. Nested option details are explicitly delegated to jj_list_formats, which is the correct place for them, so no meaningful gap remains for an agent to call this correctly.

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%, including per-parameter notes on `text` length, `output` ids, `deliver` enum semantics, `maxWaitMs` default/cap and server-side continuation, and `inputFormat` auto-detection, so the schema does the heavy lifting. The description adds only the cross-call pointer to jj_list_formats for valid `output` ids, which is largely redundant with the schema's own reference; baseline 3 is appropriate.

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?

The description opens with a specific verb and resource ('Sends plain text or ChordPro ... to the Jam Jam API') and explicitly scopes the tool with '(pasted lyrics and chords, no file)', which separates it from the sibling jj_convert_file without naming it. It also states the return shape, so the agent knows exactly what the call produces.

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?

It gives a concrete prerequisite ('Call jj_list_formats first to find valid "output" ids') and an eligibility condition ('Consumes one unit of the conversion quota'), which tells the agent when this call is appropriate and what it costs. It stops short of naming jj_convert_file as the alternative for file-based input, leaving that routing to inference from 'no file'.

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