Doseedo DAW Sessions: read, edit and convert Logic, Ableton, FL Studio and Pro Tools projects
Server Details
Read and edit DAW projects as an agent, save native Logic projects, convert projects between DAWs
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Score is being calculated.
Available Tools
20 toolsdoseedo_accountAccount and creditsRead-onlyIdempotentInspect
Check the connected doseedo account: plan tier, the monthly credit pool (DAW conversions draw it), purchased extra-usage credits, and storage. Read-only — consumes nothing. Use it before a batch of conversions to confirm there is budget.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
doseedo_add_audio_to_sessionAdd audio to a sessionIdempotentInspect
Add an audio file to a session from a public https URL (any audio file online; a bounce's pre-signed stem link works as is). Ingested server-side and returned as a sha256 you then use: place it on a track with attach_audio {track_id, blob_sha256}, or load it into a Quick Sampler with load_quick_sampler_sample {track_id, sample_path: ""} — it bakes into the downloaded .logicx, no desktop needed (the drum-pack / sample-swap path). A file on the user's machine needs no upload: attach_audio local_path / load_quick_sampler_sample sample_path keep it local (doseedo_edit_ops_reference).
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Optional name for the asset. | |
| audio_key | No | Instead of audio_url: the key of audio already uploaded to this doseedo account (starts with "ingest/"). | |
| audio_url | No | https URL of the audio — any public URL, or a doseedo result URL from a job (pre-signed links work as-is; no key needed). | |
| session_id | Yes |
doseedo_bounce_sessionBounce a sessionAInspect
Bounce a session (or specific tracks) to audio through their REAL plugin chains, offline — Dø Desktop renders them in the background WITHOUT the user opening the DAW (live via Logic if it's open, headless if it isn't; this is the thing stock DAWs can't do). Headless renders AUDIO tracks only — an instrument/MIDI track needs the project open in Logic. A track that could not render is named in the error with its reason. Async: returns a job_id — poll with doseedo_wait_task. The result is downloadable stem URLs. Needs Dø Desktop to run at some point to pick up the job; until then it stays queued. No credits (rendered on the user's machine). Cancel: a bounce still queued never renders (its budget is refunded); one mid-render has its result dropped on arrival.
| Name | Required | Description | Default |
|---|---|---|---|
| stems | No | true (default) = one file per track; false = a single mixdown. | |
| format | No | Output format (default wav). | |
| track_ids | No | Tracks to bounce (t_… ids from doseedo_get_session). Omit to bounce the whole session. | |
| session_id | Yes | ||
| tail_seconds | No | Extra seconds for reverb/delay to ring out (default 2). | |
| idempotency_key | No | Optional. Any unique string for THIS request (e.g. a UUID). Re-sending the same call with the same key after a timeout returns the same job instead of starting a second one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: async job_id return, queued-until-desktop-picked-up state, no credits because rendering is local, named failing tracks with reasons, and detailed cancel semantics including refunds and dropped mid-render results. These are exactly the operational details an agent needs before invoking a long-running mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: the main action and offline/real-plugin distinction come first, followed by constraints and async behavior. The long parentheticals and cancellation detail make it slightly heavier than necessary, though nearly every sentence carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex async render tool with no output schema, the description covers the missing pieces: return shape (job_id, later stem URLs), polling tool, queueing dependency on Dø Desktop, track-render limitations, billing, and cancellation behavior. An agent has enough information to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already high at 83%, so most parameter meaning is provided structurally. The description reinforces that track_ids can target specific tracks and that results are downloadable stem URLs, but it does not explain format, tail_seconds, or idempotency_key beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Bounce a session (or specific tracks) to audio') and distinguishes it from generic DAW rendering by explaining that it uses real plugin chains offline. It also differentiates from siblings implicitly by noting that headless renders are audio-only and that instrument/MIDI tracks require Logic open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: offline background rendering via Dø Desktop, headless audio-only limitation, need for Dø Desktop to pick up the job, and polling with doseedo_wait_task. It does not explicitly name alternative sibling tools such as doseedo_mix or doseedo_render_midi, so it stops short of full when-to-use alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_cancel_jobCancel a jobDestructiveIdempotentInspect
Cancel a queued or running job. bounce_session: a bounce still queued never renders (its budget is refunded); one mid-render has its result dropped on arrival. convert_project: a running conversion has no stop — it completes, the job ends as canceled and its output is discarded; the credit is refunded only when the conversion itself fails. A job that already finished answers 409 already_terminal.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job_id from doseedo_convert_project, doseedo_bounce_session or doseedo_list_jobs. |
doseedo_check_taskCheck a jobRead-onlyIdempotentInspect
Check an async doseedo job once — a DAW conversion (doseedo_convert_project) or a bounce (doseedo_bounce_session). Returns its status and, when finished, the result: pre-signed file links and, for a conversion, its transfer report (report, lossy, summary, warnings). The job_id alone is enough.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which job kind created the task — convert_project or bounce_session, the name the submit reply carried (convert / bounce are accepted aliases). | |
| parts | No | Optional, on a finished job: the result rows to return in full, by name (as the result names them) or index. | |
| job_id | No | Alternatively the job_id (job_…) from doseedo_convert_project, doseedo_bounce_session or doseedo_list_jobs — replaces task_id + kind. | |
| task_id | No | The task_id returned by a submit tool. |
doseedo_complete_project_uploadComplete a project uploadAIdempotentInspect
Finish a MULTIPART project upload started by doseedo_get_project_upload_url: pass every uploaded part's number and ETag (from the PUT response header; quotes optional). Returns the project_key to pass to doseedo_convert_project / doseedo_import_project. All parts except the last must be the same size (what split -b produces). abort:true discards the upload instead.
| Name | Required | Description | Default |
|---|---|---|---|
| abort | No | true = abandon the upload and free its parts (no project_key results). | |
| parts | No | [{part_number, etag}] for EVERY part, in order. | |
| upload_id | Yes | ||
| project_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the ETag provenance ('from the PUT response header; quotes optional'), the part-size rule ('all parts except the last must be the same size'), and the abort semantics. Minor gap: it doesn't say whether retrying with the same upload_id is safe, even though idempotentHint=true is declared, and abort's relationship to destructiveHint=false could be clearer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the identity of the operation, then parameter guidance, then the abort alternative. No filler and no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the workflow position, the required part metadata, the size constraint, the abort path, and the return value ('the project_key'), which matters since no output schema exists. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema description coverage, the description compensates by explaining what the parts array must contain ('every uploaded part's number and ETag'), where the ETag comes from, and what abort does. upload_id and project_key remain undocumented in both places, so it isn't fully complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Finish a MULTIPART project upload'), ties it to the initiating sibling doseedo_get_project_upload_url, and names the downstream consumers (doseedo_convert_project / doseedo_import_project). An agent can place it precisely in the upload workflow without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says this is the step after doseedo_get_project_upload_url and before convert/import, and names the escape hatch ('abort:true discards the upload instead'). When-to-use and the alternative path are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_convert_projectConvert a DAW project (DAW converter)AInspect
DAW CONVERTER: a project rebuilt natively in the target: tracks, MIDI, audio clips, tempo and markers arrive editable (Logic/Ableton/Pro Tools/REAPER pairs also automation, buses/sends, plugin state; into FL 3rd-party plugins only). Sources: Logic .logicx, Ableton .als, FL Studio .flp, Pro Tools .ptx, REAPER .rpp, Cubase .cpr, Dorico .dorico/.musicxml, Studio One .song, GarageBand .band (SOURCE only — zip the .band package like a .logicx; a GarageBand 6 project must be re-saved in GarageBand 10), Bitwig = any .dawproject (Bitwig/Studio One/Cubase export it; a native .bwproject is refused — File > Export… > DAWproject in Bitwig). The enum lists the exact pairs. ★ ASYMMETRIC TARGETS (an undocumented native file is never written): TO Cubase, Studio One or Bitwig = ONE .dawproject the app imports, not a .cpr/.song/.bwproject; TO Dorico = MusicXML (.mxl, Dorico's own notation import), not a .dorico. FROM Cubase the .cpr carries tracks, tempo and MIDI parts but not the audio pool (audio tracks arrive empty). FROM Dorico a .dorico carries players and flows but NOT its notes: convert its MusicXML export instead (.musicxml/.mxl accepted under dorico2*). Every result carries a transfer REPORT: report, lossy, summary[] (what changed), warnings[] (read before opening) — relay them; silence is never "lossless". Upload first: doseedo_get_project_upload_url + PUT (zip a project FOLDER so its audio travels; a bare project file works too; multipart past ~4 GB). Directions: "2"; "auto2" detects the source; "2" rebuilds Logic/Ableton/FL/REAPER/Pro Tools in place (e.g. options.third_party_plugins:"disable"). To EDIT a project use doseedo_import_project; to convert a session the tools built: doseedo_download_session → upload that zip → logic2 (not a session_id). Async: job_id → doseedo_wait_task (15 s–2 min; stage); file is a direct storage link. Cancel: no stop — it completes, the job ends canceled, output discarded; the credit is refunded only when the conversion itself fails.
| Name | Required | Description | Default |
|---|---|---|---|
| options | No | Conversion options (all optional). third_party_plugins:"disable" drops third-party AU/VST devices so the export opens clean on a machine without them; stock_plugins:"disable" leaves stock devices unmapped instead of mapping to the nearest target-DAW device; carry_plugin_presets:false strips plugin patches; lossless:true (→Logic) pins the project to the MAX clip sample rate so no clip is downsampled; project_rate (→Logic) pins an exact rate in Hz; silence_empty_sampler:false (→Logic) keeps Logic's audible default Quick Sampler on tracks whose sampler had no sample; source_name = the project's display name for the output file. | |
| direction | Yes | Source and target as "<source>2<target>" (logic | ableton | fl | protools | reaper | cubase | dorico | studioone | bitwig | garageband | aaf), "auto2<target>" to let the server detect the source, or "<daw>2<daw>" to rebuild in the same format (Logic/Ableton/FL/REAPER/Pro Tools only). cubase2* reads a .cpr and *2cubase writes a .dawproject (Cubase 14+/Nuendo open it natively). dorico2* reads a .dorico, .musicxml or .mxl and *2dorico writes MusicXML (.mxl). studioone2* reads a .song and *2studioone writes a .dawproject (Studio One 6.5+ imports it). bitwig2* reads any .dawproject and *2bitwig writes a .dawproject (Bitwig 5+ imports it). garageband2* reads a zipped .band package (source only — no *2garageband). aaf2* reads an AAF (Pro Tools / Logic / Resolve / Premiere export) — zip the .aaf with its audio files so clips relink by name; audio only, every clip unwarped at its exact time, no *2aaf or aaf2dorico. | |
| project_key | Yes | R2 key of the uploaded project (from doseedo_get_project_upload_url / POST /api/upload/r2/signed-url; starts with "uploads/"). | |
| idempotency_key | No | Optional. Any unique string for THIS request (e.g. a UUID). Re-sending the same call with the same key after a timeout returns the same job instead of starting a second one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only saying non-readonly, non-destructive, open-world, the description adds substantial behavioral context beyond them: asynchronous job lifecycle, the transfer REPORT fields (`report`, `lossy`, `summary[]`, `warnings[]`), asymmetric target formats (Cubase/Studio One/Bitwig → .dawproject, Dorico → MusicXML), known lossiness (Cubase .cpr lacks audio pool, Dorico .dorico lacks notes), and the credit-refund rule. None of this contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the remainder is a single dense paragraph of parenthetical clauses where critical operational steps (upload flow, async waiting, cancel/refund) are buried mid-text rather than surfaced. Every sentence carries information, but the lack of structure makes it harder to scan than its length warrants.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, high-variance conversion tool with no output schema, the description covers input prep, direction semantics, target-format asymmetries, expected report fields, async handling, and failure/refund behavior. An agent has everything needed to invoke it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds operational meaning beyond the schema for project_key — zip a project folder so audio travels, a bare file also works, multipart past ~4 GB — and names the exact direction string pattern and per-family asymmetry. It does not, however, add much to the options object that the schema doesn't already spell out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with 'DAW CONVERTER: a project rebuilt natively in the target' — a specific verb and resource — and enumerates exactly what travels (tracks, MIDI, audio clips, tempo, markers, plus automation/buses/plugin state for certain pairs). It explicitly distinguishes itself from doseedo_import_project (editing) and from session-based conversion, so an agent can tell it apart from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'To EDIT a project use doseedo_import_project; to convert a session the tools built: doseedo_download_session → upload that zip → logic2<target> (not a session_id).' It also states the prerequisite ('Upload first: doseedo_get_project_upload_url + PUT'), the async follow-up (job_id → doseedo_wait_task), and the no-stop cancel semantics, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_create_sessionCreate a DAW sessionInspect
Create a new, empty DAW session in the account (a blank project you can then populate with doseedo_edit_session). Returns its session_id.
| Name | Required | Description | Default |
|---|---|---|---|
| daw | No | Bound DAW (default logic). | |
| name | Yes | Session name. |
doseedo_delete_sessionsDelete DAW sessionsADestructiveIdempotentInspect
Delete DAW sessions in bulk — a SOFT delete (the sessions disappear from the account and every listing; nothing on the user's disk is touched). Select by ids, or by filters (daw_kind, created_before / created_after, name_contains); filters combine with AND. SAFE BY DEFAULT: without confirm:true this is a DRY RUN that deletes nothing and returns {matched, ids}. Always run the dry run first, show the user the count (and names if few), and call again with confirm:true only after they agree. Never delete sessions the user did not ask to remove.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Session ids to delete (up to 500), from doseedo_list_sessions. | |
| limit | No | Cap on how many sessions one call may match (default and max 1000). | |
| confirm | No | false/omitted = dry run (nothing deleted). true = actually delete — only after the user saw the dry-run count and agreed. | |
| daw_kind | No | Only sessions bound to this DAW, e.g. "logic", "ableton". | |
| created_after | No | ISO-8601 date/time: only sessions created after this. | |
| name_contains | No | Only sessions whose name contains this text (case-insensitive). | |
| created_before | No | ISO-8601 date/time: only sessions created before this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by explaining the soft-delete behavior, dry-run default, return value for dry runs, and that confirm:true is required for actual deletion. The destructiveHint is consistent because the operation removes sessions from the account, even though user disk files are untouched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately front-loaded with the action and safety model. It is longer than typical but every sentence supports correct, safe invocation for a destructive bulk operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the critical context for a destructive tool: dry-run behavior, return shape for dry runs, filter composition, and confirmation workflow. It does not describe the success response after actual deletion, but annotations and the 100%-covered schema reduce that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter descriptions already do most of the work. The tool description adds useful semantics: ids come from doseedo_list_sessions, filters combine with AND, and confirm:true triggers actual deletion only after a dry run.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete DAW sessions in bulk') and immediately clarifies the soft-delete scope and that disk files are untouched. This clearly distinguishes it from sibling tools like get_session or list_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes selection modes (ids or filters) and mandates the dry-run-first workflow. It tells the agent exactly when to proceed with confirm:true and includes a clear safety rule: 'Never delete sessions the user did not ask to remove.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_desktop_statusDø Desktop statusARead-onlyIdempotentInspect
Is Dø Desktop running on the user's Mac, and can it put edits into their Logic project? Reports which sessions it holds, how it applies edits (apply_mode "reopen" = save, back up, close, apply, reopen), whether macOS lets it (logic_control), each session's last apply (reopen_results) and its applied cursor. Use it to know whether an edit will reach the project now or wait for the next session open. When it is NOT connected the result says how the user gets and pairs the app, and what still works without it. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, and the description adds genuinely new behavior: the apply_mode "reopen" sequence (save, back up, close, apply, reopen), the logic_control macOS gate, and the not-connected path (how the user gets and pairs the app, what still works without it). These are traits not inferable from annotations. It omits cost/latency details, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core question, then the field inventory, then the failure case – well-ordered and dense. The parenthetical apply_mode expansion is worth its length, but the trailing 'Read-only.' duplicates the readOnlyHint annotation and is mild waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it names each reported field and explains the disconnected branch. An agent has enough to call it and interpret the result without further docs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to disambiguate and baseline is 4. The description instead spends its words documenting return fields, which is appropriate for a paramless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It opens with a specific, answerable question (is Dø Desktop running, can it push edits into Logic) and states exactly what the tool reports: sessions held, apply_mode, logic_control, reopen_results, applied cursor. No sibling covers this diagnostic role, and the description makes that distinctive 'is my edit going to land now' framing explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear selection condition: 'Use it to know whether an edit will reach the project now or wait for the next session open,' which implicitly routes agents here before edit_session. It does not name when-not to call it or explicitly name the alternative tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_download_sessionDownload a DAW sessionARead-onlyIdempotentInspect
Save a session as a native Logic project (.logicx.zip), rebuilt server-side from the session state — no desktop needed. Returns a short-lived NO-AUTH download_url (plain curl -o ~/Downloads/…, no header) plus replay = what the build put in the file (per track: kind, Quick Sampler sample + sampler {mode, sample_seconds, start/end, plays_beats}, MIDI note count, audio region count; bundled media; deferred ops the offline build could not synthesize) and warnings (e.g. a classic-mode sampler whose notes end before its sample; an unknown sample length). Verify from replay/warnings, never by unzipping ProjectData. place_local_files (when present) is ACTION-REQUIRED after unzipping — for Quick Sampler samples AND audio regions from local paths: a replay track with audio_source:"place_local_files" or a "NOT bundled" warning means that file is not in the zip until you run those cp commands; then tell the user the project is complete.
| Name | Required | Description | Default |
|---|---|---|---|
| daw | No | Target DAW (default logic; only logic is a one-shot native download — for others use doseedo_convert_project). | |
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the short-lived no-auth download_url, the replay manifest contents, warning examples, and the ACTION-REQUIRED post-unzip place_local_files step. These are concrete behavioral traits an agent needs and are not available from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then covers return shape and required follow-up without obvious filler. It is dense and long, but most detail earns its place because there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex download/build tool with no output schema, the description explains the returned download_url, replay manifest, warnings, and place_local_files follow-up well. The main remaining gap is input semantics, especially the required session_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: the daw parameter has a helpful enum description, but the required session_id has no description in either the schema or the tool description. The description focuses on outputs and post-processing rather than clarifying the inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: save a session as a native Logic project rebuilt server-side, with no desktop needed. It clearly distinguishes this from desktop-dependent flows, though it does not name the sibling alternative (convert_project) directly in the description; that routing detail appears only in the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: native Logic download, server-side rebuild, no desktop. It does not spell out explicit when-not-use exclusions, but the schema's daw parameter routes non-Logic targets to doseedo_convert_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_edit_ops_referenceSession edit ops referenceARead-onlyIdempotentInspect
The catalog of session edit ops doseedo_edit_session accepts, served in views that each fit one answer (never cut mid-JSON). DEFAULT (no args): units, ids, applies, groups, batching/policy, the recipe NAMES and every op as {op, group, applies, summary} — read it ONCE before a build. Then fetch what you need: op:"load_quick_sampler_sample" (or ops:[…]) → those ops in full (args, units, doc; an unknown name gets did_you_mean); section:"recipes" → the full recipes (drum kit from local samples, fix note lengths, one-shots on an audio track, remote sample, submix bus, verify) — copy one instead of discovering op order; section:"ops" → every op in full; "units" / "ids" / "summary" (the get_session field map + workflow + policy + batching) / "all" (fitted, may shorten). Each op says where it lands (applies: live in the open project | next_open | state). Read-only, no key needed.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | One op name, e.g. "set_midi_notes" — returns that op in full. | |
| ops | No | Several op names — returns each in full. | |
| section | No | Which part of the catalog. Omit for the default overview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations in useful ways: 'never cut mid-JSON' and 'all' (fitted, may shorten) disclose truncation/fitting behavior, 'an unknown name gets did_you_mean' discloses the error path, and 'no key needed' discloses auth. It also explains where operations land (live | next_open | state), which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The default behavior is front-loaded in the first sentence and every clause carries information. The heavy parenthetical, em-dash-dense packing makes it harder to scan than necessary, but nothing is filler or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still describes return shapes for every mode (default overview, op details, section views) and the truncation caveat. Combined with annotations covering safety and idempotency, an agent has everything needed to call it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description still explains each parameter's effect: op/ops return entries in full, and every enum value of section is spelled out (recipes contents, ops in full, summary = field map + workflow + policy, all = fitted). It adds genuine semantics over the schema, including multi-value behavior via ops:[…].
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (the catalog of session edit ops that doseedo_edit_session accepts) and its serving model ('views that each fit one answer'). It explicitly names the tool it supports, so an agent can distinguish it from doseedo_edit_session itself without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong sequencing guidance: 'read it ONCE before a build', then fetch by op/section, and 'copy one instead of discovering op order' for recipes. It does not, however, state when NOT to use it or contrast it with the sibling doseedo_recipes tool, which plausibly overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_edit_sessionEdit a DAW sessionADestructiveInspect
Edit a DAW session with a list of ops (regions, MIDI notes, sampler samples, tracks, mixer faders/pans/mutes, plugins, tempo, markers, key, …): ids and current values from doseedo_get_session, op arguments from doseedo_edit_ops_reference. When sync.live_edits is true Dø Desktop puts it into the user's Logic project (it saves, backs up, closes and reopens the project, ~10–20 s — tell the user); otherwise stored and applied at next open. CONTRACT: every op is validated before anything is stored; a rejection carries a code — unknown_op / unknown_plugin (with did_you_mean), unknown_id (with the valid ids), duplicate_id, forbidden_group, read_only_key — and a reason. atomic (default true): one rejection → NOTHING stored, all rejections listed; atomic:false stores the good ops. RETRY: re-send a timed-out call with the SAME batch_key and it dedups (deduped:true); without batch_key a retry duplicates. Ops apply on the desktop one at a time in order, no per-batch undo — verify with doseedo_download_session (replay).
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | The edits, e.g. [{"op":"set_track_crop","args":{"track_id":"t_…","start_beats":4,"end_beats":124,"prev_start_beats":24}}, {"op":"set_channel_volume","args":{"channel_id":"ch_…","value":0.6}}]. See doseedo_edit_ops_reference. | |
| atomic | No | Default true: any rejected op means nothing is stored. Set false to store the valid ops and receive the rest as `rejected`. | |
| batch_key | No | A stable id for THIS batch (e.g. "drumkit-build-1"). Same batch_key + same ops on a retry = the same client_op_ids = no duplicates. Always pass one for a build you might have to retry. | |
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, yet the description adds substantial context: the save/backup/close/reopen side effect with a ~10-20 s duration and an instruction to warn the user, the all-or-nothing atomic contract, the enumerated rejection codes with extra payload (did_you_mean, valid ids), and the absence of per-batch undo. The retry/dedup explanation is also consistent with idempotentHint=false (dedup only with an explicit batch_key) rather than contradicting it. Slightly short of 5 only because return shape and what a successful response looks like is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well front-loaded: capability, then input sources, then live-edit side effect, then CONTRACT/RETRY/ordering sections in labeled blocks. The op-type parenthetical list is long, and the trailing '…' is a minor untidiness, but nearly every sentence carries operational information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world batch-mutation tool with no output schema, the description covers the failure contract, error codes, atomicity, retry/dedup, ordering, absence of undo, and a verification path. Combined with a partially described schema, an agent has everything it needs to call this safely or route the agent to the right reference tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents ops, atomic and batch_key; the description still adds real meaning by spelling out the dedup-on-retry semantics of batch_key and the 'stores the good ops, rest rejected' behavior of atomic:false. It does not document session_id, but that is self-evident from the naming and the pointer to doseedo_get_session.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Edit a DAW session') and immediately enumerates the edit surface (regions, MIDI notes, sampler samples, tracks, mixer, plugins, tempo, markers, key). It is clearly distinguishable from the read-side siblings doseedo_get_session and the documentation-only doseedo_edit_ops_reference, which it names explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States precisely where inputs come from ('ids and current values from doseedo_get_session, op arguments from doseedo_edit_ops_reference') and where to verify results ('verify with doseedo_download_session'). It also gives the conditional branch for sync.live_edits true vs false, so the agent knows when the call mutates the live Logic project versus a stored copy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_get_project_upload_urlGet a project upload URLAIdempotentInspect
Get a presigned upload for a DAW PROJECT file (for doseedo_convert_project / doseedo_import_project). Zip a project FOLDER so its audio travels with it — and a .logicx or GarageBand .band, which are folders (macOS packages). SIZE LIMITS: a single PUT takes up to 5 GB; guest and free accounts convert projects up to 2 GB, paid plans up to 12 GB (a larger one is refused as project_too_large with the cap and an upgrade link). Pass size_bytes: past 4 GB (or with multipart:true) you get a MULTIPART upload instead — a part_size, one presigned part_url per part, and the complete step (doseedo_complete_project_upload); each part is retried on its own, so a dropped connection costs one part, not the upload. Single PUT: curl -sS -X PUT -H "Content-Type: application/zip" --data-binary @project.zip "<upload_url>", then pass project_key on. Multipart: split -b <part_size_bytes> project.zip part. then for each piece in order curl -sS -X PUT --data-binary @part.aa "<part_url>" -D - -o /dev/null | grep -i etag (keep each ETag), then doseedo_complete_project_upload {project_key, upload_id, parts}. Need more part URLs than one answer holds? Call this again with project_key + upload_id + part_numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | File name including extension, e.g. "Song Project.zip", "My Song.band.zip", "beat.flp", "song.cpr", "Mix.song", "set.dawproject" or "score.mxl". | |
| multipart | No | Force a multipart upload regardless of size (resumable per part). | |
| upload_id | No | CONTINUATION: the upload_id the first call returned. | |
| size_bytes | No | The file's size in bytes (stat it). Decides single PUT vs multipart and sizes the parts. | |
| project_key | No | CONTINUATION of a multipart upload: the key the first call returned. | |
| content_type | No | MIME type: application/zip for zips (default), application/octet-stream for bare project files. | |
| part_numbers | No | CONTINUATION: which part numbers (1-based) to sign now, ≤ 24 per call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, idempotent=true, openWorld=true, destructive=false, so the description carries the operational burden and does so well: hard size caps per plan tier, the exact refusal error (project_too_large with the cap and an upgrade link), the 4 GB multipart threshold, per-part retry semantics, and the required follow-up step doseedo_complete_project_upload. The one blemish is mild internal tension between 'a single PUT takes up to 5 GB' and 'past 4 GB you get a MULTIPART upload', which leaves the real single-PUT ceiling slightly ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense paragraph, but it is front-loaded with purpose and size limits and every later sentence carries executable detail (curl lines, split, ETag capture, retry rationale). The 5 GB vs 4 GB statement is the one place where wording could be tightened rather than expanded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a seven-parameter tool spanning a multi-step, resumable workflow, the description covers the entire lifecycle: initiating the presign, choosing the transport, executing the upload, and completing it via doseedo_complete_project_upload, plus the re-call path for additional part URLs. An agent can act correctly without consulting other documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds genuine meaning beyond the schema: size_bytes is what selects single-PUT vs multipart and sizes the parts, and project_key/upload_id/part_numbers are only meaningful as a continuation of an earlier call. The curl/split recipes attach concrete operational behavior to each parameter rather than restating its type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get a presigned upload for a DAW PROJECT file') and immediately ties it to the consuming siblings doseedo_convert_project / doseedo_import_project. The one gap is that it never explicitly contrasts itself with the sibling doseedo_get_upload_url, which an agent must choose between; the distinction ('DAW project file' vs. a general upload) is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says exactly when to use it (before convert_project/import_project), how to package the input (zip a project FOLDER so audio travels with it, including .logicx/.band packages), and which mode to pick (single PUT vs multipart driven by size_bytes or the multipart flag). It also handles the non-obvious continuation case: re-call with project_key + upload_id + part_numbers when more part URLs are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_get_sessionRead a DAW sessionRead-onlyIdempotentInspect
Read a DAW session as the arrangement an agent edits against: every track with its wire ids (track_id t_…, mixer strip channel_id ch_…), regions in BOTH beats and seconds with their MIDI notes (i, pitch, velocity, start_beats, duration_beats — i is what edit_midi_notes selects by), mixer (volume with dB, pan, mute), plugins with params[{param_id, name, value}] (set_device_param needs param_id) and sampler {mode, sample_seconds, plays_beats, …}, sends/output as ch_b_… ids, buses, tempo_bpm + tempo_map, time_signature + meter_map, key_signature when known, markers (marker_id, beat ABSOLUTE from bar 1), automation lanes, instrument, counts, length — and sync with live_edits:true|false + live_edits_reason (will an edit reach Logic now?). Field-by-field map: doseedo_edit_ops_reference {section:"summary"}. BUDGET (never cut mid-JSON): notes come inline when the selected tracks hold ≤200 notes, else regions carry note_count + notes_omitted:true — pass include_notes:true with tracks:[ids] for a track's notes; include_params:false / include_automation:false drop params / points; a result still too big is paginated by track with truncated + next (the exact args for the rest). Read-only. Pass the ids straight to doseedo_edit_session.
| Name | Required | Description | Default |
|---|---|---|---|
| tracks | No | Only these tracks (track_id t_… or channel_id ch_…; a track name matches too). The rest of the session (tempo, markers, buses, sync) is always included. | |
| session_id | Yes | From doseedo_list_sessions. | |
| include_notes | No | Include MIDI notes. Default: true when the selected tracks hold ≤200 notes in all, else false (regions then carry note_count + notes_omitted:true). | |
| include_params | No | Include plugin params (default true). false keeps param_count only. | |
| include_automation | No | Include automation lanes with points (default true). false keeps a lane count per track. |
doseedo_import_projectImport a DAW projectAInspect
Open an uploaded DAW project (Logic .logicx.zip, Ableton .als or project zip, FL .flp, REAPER .rpp, Pro Tools .ptx — zip the folder) as an EDITABLE doseedo session: returns a session_id the session tools then work on (doseedo_get_session → doseedo_edit_session → doseedo_download_session as a native Logic project, or convert that download to another DAW with doseedo_convert_project). The session gets the project's tempo (+ tempo map), meter, markers, and every track with its name, mixer level/pan, color and MIDI notes. AUDIO IS NOT CARRIED: the import reads the project, not its media — audio tracks arrive named and positioned (audio.placements lists each clip's file and beats) and audio.next says how to supply the files. Plugins and summing buses are reported, not recreated. Upload first with doseedo_get_project_upload_url; this call parses the project (seconds to minutes for a big one) — if it answers status:"running", call it again with the returned task_id until it hands back session_id.
| Name | Required | Description | Default |
|---|---|---|---|
| daw | No | The source DAW, when the filename does not say (optional; detected otherwise). | |
| name | No | Session name (default: the project's own name). | |
| task_id | No | CONTINUATION: the task_id a previous call returned while the parse was still running. | |
| project_key | No | R2 key of the uploaded project (from doseedo_get_project_upload_url; starts with "uploads/"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: reveals what is carried (tempo map, meter, markers, track mixer state, MIDI notes), what is NOT carried (audio media), how audio is surfaced (audio.placements, audio.next), that plugins/buses are reported not recreated, and that parsing takes seconds to minutes with a status:'running' continuation. This is unusually rich behavioral disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with the core action and return value first, then caveats about audio and plugins, then the upload/polling prerequisites. Long sentences with stacked parentheticals make it slightly harder to scan, but every clause carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains return values (session_id, status:'running', task_id, audio.placements/audio.next), prerequisites (prior upload), and processing latency. For a four-parameter tool with a multi-step async flow, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns extra by explaining that project_key originates from doseedo_get_project_upload_url and by describing the task_id continuation loop in operational terms (re-call until session_id is returned). It does not add much about daw/name beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open an uploaded DAW project ... as an EDITABLE doseedo session'), enumerates supported formats, and names what it produces (session_id). It is clearly distinguishable from siblings like doseedo_convert_project or doseedo_create_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to upload first with doseedo_get_project_upload_url, and names the downstream flow (get_session → edit_session → download_session) plus the alternative for other DAWs (doseedo_convert_project). It also gives the continuation rule for task_id polling, so when/when-again is fully prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_list_jobsList jobsRead-onlyIdempotentInspect
List the jobs this account submitted, newest first — DAW conversions (convert_project) and bounces (bounce_session) — to find an earlier result, check what is still running, or resume after a lost connection. Each row names its artifacts; doseedo_check_task {job_id} returns the full result with fresh links. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only this job kind: convert_project or bounce_session (convert / bounce are accepted aliases). | |
| limit | No | How many (1–100, default 20). | |
| before | No | Page cursor: the next_cursor of a previous call. | |
| status | No | ||
| session_id | No | Only jobs whose input names this session (its bounces), filtered within the fetched page. |
doseedo_list_pluginsList pluginsARead-onlyIdempotentInspect
List the plugins you can insert on a strip with doseedo_edit_session's add_device op. Returns the stock Logic catalog (instruments + effects, always available) and — when Dø Desktop is connected — the actual plugins installed on the user's Mac (stock + third-party). Insert any of them BY NAME: add_device {channel_id, device: {name: "…"}}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered; the description adds genuine context beyond that by disclosing the conditional result set depending on whether Dø Desktop is connected. It stops short of describing ordering, size, or whether names are unique across stock and third-party plugins.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences: purpose, result composition, then the actionable follow-up with an example payload. It is dense but every sentence carries information; the parenthetical 'stock + third-party' partly repeats the preceding clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description correctly shouldered the job of explaining what comes back — and it does, at the level of catalog vs. installed set. It could say more about the shape of each entry (name, type, vendor), which matters since the agent must match names exactly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema carries no semantic burden and the baseline is 4. The description does add useful adjacent semantics by naming the exact add_device argument the returned names feed into, tying output to downstream input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list available insertable plugins) and immediately names the consuming operation, doseedo_edit_session's add_device. It also distinguishes the two sources returned (stock Logic catalog vs. plugins actually installed when Dø Desktop is connected), which is far more than a restatement of the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent forward: after listing, insert with add_device {channel_id, device: {name: "…"}}, including the exact payload shape. What is missing is differentiation from the sibling doseedo_instruments, which plausibly overlaps, and any statement of when this list is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_list_sessionsList DAW sessionsARead-onlyIdempotentInspect
List the connected account's DAW sessions (most recently updated first) — their ids, names, DAW, and update time. Pages with limit + offset (the response carries total and next_offset); name_contains filters by name. Use a session id with doseedo_get_session and doseedo_edit_session; clean up old ones with doseedo_delete_sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return (default 25, max 200). | |
| offset | No | How many to skip (default 0) — pass the previous response's next_offset to get the next page. | |
| name_contains | No | Only sessions whose name contains this text (case-insensitive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond that: result ordering, that the response carries total and next_offset, and that name_contains is a case-insensitive substring filter — useful since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and scope, then paging and sibling routing. Every clause earns its place — no restating of the title or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the returned fields and the pagination envelope (total, next_offset). All three optional parameters are covered by the schema, and the sibling handoffs are named, so an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents defaults, max, and the next_offset chaining pattern. The description restates the same paging and filtering concepts without adding syntax or edge-case guidance, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource ('List the connected account's DAW sessions') with a stated sort order and the exact fields returned (ids, names, DAW, update time). An agent can distinguish it from doseedo_get_session and doseedo_edit_session 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes onward: session ids feed doseedo_get_session and doseedo_edit_session, and doseedo_delete_sessions handles cleanup. It does not state when *not* to list (e.g. use name_contains rather than paging everything), so there is clear context but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doseedo_wait_taskWait for a jobRead-onlyIdempotentInspect
Wait for an async doseedo job — a DAW conversion or a bounce — to finish: polls server-side for up to timeout_seconds (5–50; one call can never hold longer than 50 s), then returns the result or the latest status. If it returns still_running:true, call it again — a conversion usually takes 15 s–2 min, a bounce waits until Dø Desktop renders it. A finished job answers with its output, artifacts (pre-signed links) and note.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which job kind created the task — convert_project or bounce_session, the name the submit reply carried (convert / bounce are accepted aliases). | |
| job_id | No | Alternatively the job_id (job_…) from doseedo_convert_project, doseedo_bounce_session or doseedo_list_jobs — replaces task_id + kind. | |
| task_id | No | The task_id returned by a submit tool. | |
| timeout_seconds | No | Max seconds to wait in this call (5–50, default 45). Start with the submit reply's suggested_next_wait. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
- First observed
doseedo_account - First observed
doseedo_add_audio_to_session - First observed
doseedo_bounce_session - First observed
doseedo_cancel_job - First observed
doseedo_check_task - First observed
doseedo_complete_project_upload - First observed
doseedo_convert_project - First observed
doseedo_create_session - First observed
doseedo_delete_sessions - First observed
doseedo_desktop_status - First observed
doseedo_download_session - First observed
doseedo_edit_ops_reference - First observed
doseedo_edit_session - First observed
doseedo_get_project_upload_url - First observed
doseedo_get_session - First observed
doseedo_import_project - First observed
doseedo_list_jobs - First observed
doseedo_list_plugins - First observed
doseedo_list_sessions - First observed
doseedo_wait_task
Related MCP Connectors
Compose, mix, master and export in Logic Pro, REAPER or Ableton Live by talking to an AI engineer.
Score video, make music as an agent: 100+ AI instruments play your MIDI, audio, stems, Logic/Ableton
Score video as an agent: cue sheet from the cut, 100+ AI instruments play your MIDI, mix to picture
Autonomous music production for AI agents with MIDI generation, QC and provenance.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents like Claude and Cursor to control Logic Pro for music production, including creating tracks, writing MIDI, operating transport and mixer, and inspecting live project data.186MIT
- AlicenseBqualityBmaintenanceismail is a DAW your agent drives through MCP, CLI or Python. The agent writes notes, instruments, effects and automation as data. ismail's own engine renders the audio, and every render comes back as text the agent can read. No AI model generates the audio. It runs on your own machine. It is free and open source. https://github.com/newsbubbles/ismail37374 PyPI18MIT
- FlicenseNot gradedqualityBmaintenanceEnables agents to read, patch, and render DAW projects (REAPER, FL Studio, .rpp/.dawproject) and to measure WAV audio metrics such as peak, RMS, LUFS, and stereo width. It closes the loop by applying patches, rendering before/after audio, and scoring the results against an intent so music-production models can be trained and verified.-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to control Reaper DAW by parsing .rpp project files and generating Lua ReaScripts for project-level tasks.-
Glama MCP Gateway
Add one secure layer between your agents and this server.