Postal Developers
MCP server

Compact mode

How responses are trimmed by default, and how to get the full payload.

Assistants pay for every token a tool returns. The Postal MCP server therefore returns compact objects by default and lets you opt into the raw API payload per call.

The detail parameter

Eight read tools accept detail: "compact" | "full":

list_tracks, get_track, search_tracks, list_playlists, get_playlist, get_tag_taxonomy, list_composers, get_composer.

There is no server-wide switch. Pass detail: "full" on the call that needs it.

What every response looks like

Each tool returns a one-line human summary followed by pretty-printed JSON. The summary is computed from the original payload, so counts and paging cursors stay accurate even when the body is trimmed.

Found 42 tracks (showing 20, next cursor: ck_…)
[
  { "id": "…", "title": "Night Drive", "artist": "…", "bpm": 92, … }
]

What compact keeps

ObjectKeptDropped
Trackid, title, artist, durationSec, bpm, key, createdAt, link, cid, tag names per categoryaudio file URLs, shareholders, share-link internals, per-tag confidence
Playlistmetadata, publicLink, per-track { id, title, artist, durationSec, order }download links, full audio profiles
Composercomposer fields, linked tracks as { id, name } (max 25, tracksTruncated: true beyond that)full track objects
Taxonomyplain name arrays per categoryids, codes, ordering
Search hitid, title, artist, bpm, key, durationSec, genres, moods, score, first two reasons, plus the interpretation blockremaining reasons, raw feature vectors
Dashboardeverything except entityImage on activity items (always trimmed)

list_tracks also asks the API for a sparse field set, so trimming happens server-side as well as in the MCP layer.

Mutations

Write tools do not echo the object back. They return a confirmation such as:

{ "ok": true, "playlistId": "…", "added": 3 }

Exceptions that return the full created object: upload_track_by_url, create_playlist, and the tagging read and poll tools.

Soft failures

When the API answers with { ok: false, … } the server converts it into a tool error so the assistant sees Error: <message> (missing: …) rather than a successful-looking payload.

On this page