{
  "server": "maru",
  "version": "1.2.0",
  "endpoint": "https://maruaudio.com/mcp",
  "docs": "https://maruaudio.com/docs/mcp",
  "setup": {
    "install": "npx maruaudio mcp install",
    "local": "npx maruaudio mcp install --local",
    "skill": "npx maruaudio skill install",
    "llms": "https://maruaudio.com/llms.txt"
  },
  "tools": [
    {
      "name": "maru_generate_sample",
      "title": "Generate and save an account sample with required MIDI and analysis",
      "description": "Run the named sample workflow: generate one seeded audio variant, extract monophonic MIDI, analyze its exact PCM, then materialize the account sample. Audio readiness and enrichment readiness are separate. Inspect capabilities before starting.",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "workflow"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "requestKey": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "task": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "generate_audio"
              },
              "modelId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "prompt": {
                "type": "string",
                "minLength": 1,
                "maxLength": 4000
              },
              "audioType": {
                "type": "string",
                "enum": [
                  "one-shot",
                  "loop",
                  "sfx"
                ]
              },
              "seconds": {
                "type": "number",
                "minimum": 0.01,
                "maximum": 3600
              },
              "seeds": {
                "minItems": 1,
                "maxItems": 16,
                "type": "array",
                "items": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 4294967295
                }
              }
            },
            "required": [
              "type",
              "prompt",
              "audioType",
              "seconds"
            ],
            "additionalProperties": false
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        },
        "required": [
          "requestKey",
          "task"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferGenerateSampleRequest"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "workflow"
          },
          "schema": {
            "type": "string",
            "const": "maru-audio-job/v1"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "workflow": {
            "type": "string",
            "enum": [
              "generate_sample",
              "generate_kit",
              "generate_instrument",
              "generate_song",
              "analyze_sound"
            ]
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "running",
              "complete",
              "partial",
              "failed",
              "cancelled"
            ]
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "steps": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "completed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "failed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "total",
              "completed",
              "failed"
            ],
            "additionalProperties": false
          },
          "readiness": {
            "type": "object",
            "properties": {
              "audio": {
                "type": "boolean"
              },
              "requiredEnrichment": {
                "type": "boolean"
              }
            },
            "required": [
              "audio",
              "requiredEnrichment"
            ],
            "additionalProperties": false
          },
          "sampleId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "childJobIds": {
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            }
          }
        },
        "required": [
          "kind",
          "schema",
          "id",
          "workflow",
          "version",
          "status",
          "lastSequence",
          "steps",
          "readiness"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioWorkflowHandle"
      }
    },
    {
      "name": "maru_get_audio_workflow",
      "title": "Read an owned named audio workflow",
      "description": "Read an owned named audio workflow",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "runId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "runId"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "workflow"
          },
          "schema": {
            "type": "string",
            "const": "maru-audio-job/v1"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "workflow": {
            "type": "string",
            "enum": [
              "generate_sample",
              "generate_kit",
              "generate_instrument",
              "generate_song",
              "analyze_sound"
            ]
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "running",
              "complete",
              "partial",
              "failed",
              "cancelled"
            ]
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "steps": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "completed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "failed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "total",
              "completed",
              "failed"
            ],
            "additionalProperties": false
          },
          "readiness": {
            "type": "object",
            "properties": {
              "audio": {
                "type": "boolean"
              },
              "requiredEnrichment": {
                "type": "boolean"
              }
            },
            "required": [
              "audio",
              "requiredEnrichment"
            ],
            "additionalProperties": false
          },
          "sampleId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "childJobIds": {
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            }
          }
        },
        "required": [
          "kind",
          "schema",
          "id",
          "workflow",
          "version",
          "status",
          "lastSequence",
          "steps",
          "readiness"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioWorkflowHandle"
      }
    },
    {
      "name": "maru_list_audio_workflows",
      "title": "List owned named audio workflows",
      "description": "List owned named audio workflows",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "items": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "workflow"
                },
                "schema": {
                  "type": "string",
                  "const": "maru-audio-job/v1"
                },
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                "workflow": {
                  "type": "string",
                  "enum": [
                    "generate_sample",
                    "generate_kit",
                    "generate_instrument",
                    "generate_song",
                    "analyze_sound"
                  ]
                },
                "version": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "pending",
                    "running",
                    "complete",
                    "partial",
                    "failed",
                    "cancelled"
                  ]
                },
                "lastSequence": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "steps": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "completed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "failed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "total",
                    "completed",
                    "failed"
                  ],
                  "additionalProperties": false
                },
                "readiness": {
                  "type": "object",
                  "properties": {
                    "audio": {
                      "type": "boolean"
                    },
                    "requiredEnrichment": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "audio",
                    "requiredEnrichment"
                  ],
                  "additionalProperties": false
                },
                "sampleId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                "childJobIds": {
                  "maxItems": 32,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  }
                }
              },
              "required": [
                "kind",
                "schema",
                "id",
                "workflow",
                "version",
                "status",
                "lastSequence",
                "steps",
                "readiness"
              ],
              "additionalProperties": false
            }
          },
          "nextCursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "items",
          "nextCursor"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioWorkflowList"
      }
    },
    {
      "name": "maru_cancel_audio_workflow",
      "title": "Cancel an owned named audio workflow",
      "description": "Cancel an owned named audio workflow",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "runId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "runId"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "workflow"
          },
          "schema": {
            "type": "string",
            "const": "maru-audio-job/v1"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "workflow": {
            "type": "string",
            "enum": [
              "generate_sample",
              "generate_kit",
              "generate_instrument",
              "generate_song",
              "analyze_sound"
            ]
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "running",
              "complete",
              "partial",
              "failed",
              "cancelled"
            ]
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "steps": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "completed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "failed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "total",
              "completed",
              "failed"
            ],
            "additionalProperties": false
          },
          "readiness": {
            "type": "object",
            "properties": {
              "audio": {
                "type": "boolean"
              },
              "requiredEnrichment": {
                "type": "boolean"
              }
            },
            "required": [
              "audio",
              "requiredEnrichment"
            ],
            "additionalProperties": false
          },
          "sampleId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "childJobIds": {
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            }
          }
        },
        "required": [
          "kind",
          "schema",
          "id",
          "workflow",
          "version",
          "status",
          "lastSequence",
          "steps",
          "readiness"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioWorkflowHandle"
      }
    },
    {
      "name": "maru_retry_audio_workflow_step",
      "title": "Retry a failed step of an owned audio workflow",
      "description": "Retry a failed step of an owned audio workflow",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "workflow"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "runId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          },
          "stepId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          },
          "requestKey": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "runId",
          "stepId",
          "requestKey"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "workflow"
          },
          "schema": {
            "type": "string",
            "const": "maru-audio-job/v1"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "workflow": {
            "type": "string",
            "enum": [
              "generate_sample",
              "generate_kit",
              "generate_instrument",
              "generate_song",
              "analyze_sound"
            ]
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "running",
              "complete",
              "partial",
              "failed",
              "cancelled"
            ]
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "steps": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "completed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "failed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "total",
              "completed",
              "failed"
            ],
            "additionalProperties": false
          },
          "readiness": {
            "type": "object",
            "properties": {
              "audio": {
                "type": "boolean"
              },
              "requiredEnrichment": {
                "type": "boolean"
              }
            },
            "required": [
              "audio",
              "requiredEnrichment"
            ],
            "additionalProperties": false
          },
          "sampleId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "childJobIds": {
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            }
          }
        },
        "required": [
          "kind",
          "schema",
          "id",
          "workflow",
          "version",
          "status",
          "lastSequence",
          "steps",
          "readiness"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioWorkflowHandle"
      }
    },
    {
      "name": "maru_submit_audio_job",
      "title": "Submit a versioned audio task",
      "description": "Submit generation, stem separation, speech recognition, MIDI transcription or analysis. Inspect list_audio_capabilities first. Returns a durable job handle; use get_audio_job to poll. Raw jobs retain private artifacts and do not add an account sample.",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "job"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "submission": {
            "type": "object",
            "properties": {
              "schema": {
                "type": "string",
                "const": "maru-audio-job/v1"
              },
              "requestKey": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "task": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "generate_audio"
                      },
                      "modelId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "prompt": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 4000
                      },
                      "audioType": {
                        "type": "string",
                        "enum": [
                          "one-shot",
                          "loop",
                          "sfx"
                        ]
                      },
                      "seconds": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 3600
                      },
                      "seeds": {
                        "minItems": 1,
                        "maxItems": 16,
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 4294967295
                        }
                      }
                    },
                    "required": [
                      "type",
                      "prompt",
                      "audioType",
                      "seconds"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "separate_audio_stems"
                      },
                      "modelId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "source": {
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "creator_asset"
                              },
                              "assetId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "assetId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "job_artifact"
                              },
                              "jobId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              },
                              "artifactId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "jobId",
                              "artifactId"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "stems": {
                        "minItems": 1,
                        "maxItems": 4,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "vocals",
                            "drums",
                            "bass",
                            "other"
                          ]
                        }
                      }
                    },
                    "required": [
                      "type",
                      "source",
                      "stems"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "transcribe_speech"
                      },
                      "modelId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "source": {
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "creator_asset"
                              },
                              "assetId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "assetId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "job_artifact"
                              },
                              "jobId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              },
                              "artifactId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "jobId",
                              "artifactId"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "language": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "timestamps": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "type",
                      "source"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "transcribe_audio_to_midi"
                      },
                      "modelId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "source": {
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "creator_asset"
                              },
                              "assetId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "assetId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "job_artifact"
                              },
                              "jobId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              },
                              "artifactId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "jobId",
                              "artifactId"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "mode": {
                        "type": "string",
                        "enum": [
                          "monophonic",
                          "polyphonic"
                        ]
                      }
                    },
                    "required": [
                      "type",
                      "source",
                      "mode"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "analyze_audio"
                      },
                      "modelId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "source": {
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "creator_asset"
                              },
                              "assetId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "assetId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "contentType": {
                                "type": "string",
                                "enum": [
                                  "audio/wav",
                                  "audio/flac",
                                  "audio/mpeg",
                                  "audio/ogg"
                                ]
                              },
                              "bytes": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 536870912
                              },
                              "sha256": {
                                "type": "string",
                                "pattern": "^[a-f0-9]{64}$"
                              },
                              "pcm": {
                                "type": "object",
                                "properties": {
                                  "sha256": {
                                    "type": "string",
                                    "pattern": "^[a-f0-9]{64}$"
                                  },
                                  "encoding": {
                                    "type": "string",
                                    "const": "f32le-interleaved"
                                  },
                                  "sampleRate": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 384000
                                  },
                                  "channels": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 32
                                  },
                                  "frames": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "sha256",
                                  "encoding",
                                  "sampleRate",
                                  "channels",
                                  "frames"
                                ],
                                "additionalProperties": false
                              },
                              "kind": {
                                "type": "string",
                                "const": "job_artifact"
                              },
                              "jobId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              },
                              "artifactId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 120
                              }
                            },
                            "required": [
                              "contentType",
                              "bytes",
                              "sha256",
                              "pcm",
                              "kind",
                              "jobId",
                              "artifactId"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "analyses": {
                        "minItems": 1,
                        "maxItems": 8,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "quality",
                            "waveform",
                            "loudness",
                            "pitch",
                            "tempo",
                            "key",
                            "loop",
                            "role"
                          ]
                        }
                      }
                    },
                    "required": [
                      "type",
                      "source",
                      "analyses"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "persistence": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "artifact_only"
                  }
                },
                "required": [
                  "mode"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "schema",
              "task",
              "persistence"
            ],
            "additionalProperties": false,
            "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioJobSubmission"
          }
        },
        "required": [
          "submission"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "job"
          },
          "schema": {
            "type": "string",
            "const": "maru-audio-job/v1"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "taskType": {
            "type": "string",
            "enum": [
              "generate_audio",
              "separate_audio_stems",
              "transcribe_speech",
              "transcribe_audio_to_midi",
              "analyze_audio"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "claimed",
              "running",
              "uploading",
              "done",
              "error",
              "cancelled"
            ]
          },
          "attempt": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "artifactCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "retention": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "artifact_only"
                  },
                  "expiresAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "mode",
                  "expiresAt"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "account_sample"
                  },
                  "sampleId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  }
                },
                "required": [
                  "mode",
                  "sampleId"
                ],
                "additionalProperties": false
              }
            ]
          },
          "outcome": {
            "type": "object",
            "properties": {
              "outcome": {
                "type": "string",
                "enum": [
                  "applicable",
                  "no_notes",
                  "no_speech",
                  "not_applicable",
                  "uncertain"
                ]
              },
              "reason": {
                "type": "string",
                "maxLength": 500
              }
            },
            "required": [
              "outcome"
            ],
            "additionalProperties": false
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "message": {
                "type": "string",
                "maxLength": 500
              },
              "retryable": {
                "type": "boolean"
              }
            },
            "required": [
              "code",
              "message",
              "retryable"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "kind",
          "schema",
          "id",
          "taskType",
          "status",
          "attempt",
          "lastSequence",
          "artifactCount",
          "retention"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioJobHandle"
      }
    },
    {
      "name": "maru_get_audio_job",
      "title": "Read an owned audio job and artifact descriptors",
      "description": "Read an owned audio job and artifact descriptors",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "handle": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "const": "job"
              },
              "schema": {
                "type": "string",
                "const": "maru-audio-job/v1"
              },
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "taskType": {
                "type": "string",
                "enum": [
                  "generate_audio",
                  "separate_audio_stems",
                  "transcribe_speech",
                  "transcribe_audio_to_midi",
                  "analyze_audio"
                ]
              },
              "status": {
                "type": "string",
                "enum": [
                  "pending",
                  "claimed",
                  "running",
                  "uploading",
                  "done",
                  "error",
                  "cancelled"
                ]
              },
              "attempt": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "lastSequence": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "artifactCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "retention": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "mode": {
                        "type": "string",
                        "const": "artifact_only"
                      },
                      "expiresAt": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "mode",
                      "expiresAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "mode": {
                        "type": "string",
                        "const": "account_sample"
                      },
                      "sampleId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      }
                    },
                    "required": [
                      "mode",
                      "sampleId"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "outcome": {
                "type": "object",
                "properties": {
                  "outcome": {
                    "type": "string",
                    "enum": [
                      "applicable",
                      "no_notes",
                      "no_speech",
                      "not_applicable",
                      "uncertain"
                    ]
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 500
                  }
                },
                "required": [
                  "outcome"
                ],
                "additionalProperties": false
              },
              "error": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  },
                  "message": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "retryable": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "code",
                  "message",
                  "retryable"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "kind",
              "schema",
              "id",
              "taskType",
              "status",
              "attempt",
              "lastSequence",
              "artifactCount",
              "retention"
            ],
            "additionalProperties": false
          },
          "artifacts": {
            "maxItems": 64,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "schema": {
                  "type": "string",
                  "const": "maru-audio-artifact/v1"
                },
                "artifactId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                "jobId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "audio_variant",
                    "audio_stem",
                    "transcript",
                    "midi",
                    "midi_evidence",
                    "pitch_trajectory",
                    "analysis",
                    "receipt",
                    "embedding"
                  ]
                },
                "contentType": {
                  "type": "string"
                },
                "sha256": {
                  "type": "string",
                  "pattern": "^[a-f0-9]{64}$"
                },
                "bytes": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991
                },
                "pcm": {
                  "type": "object",
                  "properties": {
                    "sha256": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{64}$"
                    },
                    "encoding": {
                      "type": "string",
                      "const": "f32le-interleaved"
                    },
                    "sampleRate": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 384000
                    },
                    "channels": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 32
                    },
                    "frames": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "sha256",
                    "encoding",
                    "sampleRate",
                    "channels",
                    "frames"
                  ],
                  "additionalProperties": false
                },
                "provenance": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": {}
                }
              },
              "required": [
                "schema",
                "artifactId",
                "jobId",
                "role",
                "contentType",
                "sha256",
                "bytes",
                "provenance"
              ],
              "additionalProperties": {}
            }
          }
        },
        "required": [
          "handle",
          "artifacts"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioJobDetail"
      }
    },
    {
      "name": "maru_list_audio_jobs",
      "title": "List owned audio jobs",
      "description": "List owned audio jobs",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "items": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "job"
                },
                "schema": {
                  "type": "string",
                  "const": "maru-audio-job/v1"
                },
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                "taskType": {
                  "type": "string",
                  "enum": [
                    "generate_audio",
                    "separate_audio_stems",
                    "transcribe_speech",
                    "transcribe_audio_to_midi",
                    "analyze_audio"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "pending",
                    "claimed",
                    "running",
                    "uploading",
                    "done",
                    "error",
                    "cancelled"
                  ]
                },
                "attempt": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "lastSequence": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "artifactCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "retention": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "mode": {
                          "type": "string",
                          "const": "artifact_only"
                        },
                        "expiresAt": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "mode",
                        "expiresAt"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "mode": {
                          "type": "string",
                          "const": "account_sample"
                        },
                        "sampleId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 120
                        }
                      },
                      "required": [
                        "mode",
                        "sampleId"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "outcome": {
                  "type": "object",
                  "properties": {
                    "outcome": {
                      "type": "string",
                      "enum": [
                        "applicable",
                        "no_notes",
                        "no_speech",
                        "not_applicable",
                        "uncertain"
                      ]
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 500
                    }
                  },
                  "required": [
                    "outcome"
                  ],
                  "additionalProperties": false
                },
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 120
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 500
                    },
                    "retryable": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "code",
                    "message",
                    "retryable"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "kind",
                "schema",
                "id",
                "taskType",
                "status",
                "attempt",
                "lastSequence",
                "artifactCount",
                "retention"
              ],
              "additionalProperties": false
            }
          },
          "nextCursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "items",
          "nextCursor"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioJobList"
      }
    },
    {
      "name": "maru_cancel_audio_job",
      "title": "Cancel an owned audio task job",
      "description": "Cancel an owned audio task job",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "job"
          },
          "schema": {
            "type": "string",
            "const": "maru-audio-job/v1"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "taskType": {
            "type": "string",
            "enum": [
              "generate_audio",
              "separate_audio_stems",
              "transcribe_speech",
              "transcribe_audio_to_midi",
              "analyze_audio"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "claimed",
              "running",
              "uploading",
              "done",
              "error",
              "cancelled"
            ]
          },
          "attempt": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "artifactCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "retention": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "artifact_only"
                  },
                  "expiresAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "mode",
                  "expiresAt"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "account_sample"
                  },
                  "sampleId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  }
                },
                "required": [
                  "mode",
                  "sampleId"
                ],
                "additionalProperties": false
              }
            ]
          },
          "outcome": {
            "type": "object",
            "properties": {
              "outcome": {
                "type": "string",
                "enum": [
                  "applicable",
                  "no_notes",
                  "no_speech",
                  "not_applicable",
                  "uncertain"
                ]
              },
              "reason": {
                "type": "string",
                "maxLength": 500
              }
            },
            "required": [
              "outcome"
            ],
            "additionalProperties": false
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "message": {
                "type": "string",
                "maxLength": 500
              },
              "retryable": {
                "type": "boolean"
              }
            },
            "required": [
              "code",
              "message",
              "retryable"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "kind",
          "schema",
          "id",
          "taskType",
          "status",
          "attempt",
          "lastSequence",
          "artifactCount",
          "retention"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioJobHandle"
      }
    },
    {
      "name": "maru_retry_audio_job",
      "title": "Retry an owned audio task job",
      "description": "Recheck source, model and credit admission before retrying the frozen task. Reuse requestKey for an exact retry replay.",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "job"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          },
          "requestKey": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "jobId",
          "requestKey"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "job"
          },
          "schema": {
            "type": "string",
            "const": "maru-audio-job/v1"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "taskType": {
            "type": "string",
            "enum": [
              "generate_audio",
              "separate_audio_stems",
              "transcribe_speech",
              "transcribe_audio_to_midi",
              "analyze_audio"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "claimed",
              "running",
              "uploading",
              "done",
              "error",
              "cancelled"
            ]
          },
          "attempt": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "artifactCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "retention": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "artifact_only"
                  },
                  "expiresAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "mode",
                  "expiresAt"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "account_sample"
                  },
                  "sampleId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  }
                },
                "required": [
                  "mode",
                  "sampleId"
                ],
                "additionalProperties": false
              }
            ]
          },
          "outcome": {
            "type": "object",
            "properties": {
              "outcome": {
                "type": "string",
                "enum": [
                  "applicable",
                  "no_notes",
                  "no_speech",
                  "not_applicable",
                  "uncertain"
                ]
              },
              "reason": {
                "type": "string",
                "maxLength": 500
              }
            },
            "required": [
              "outcome"
            ],
            "additionalProperties": false
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "message": {
                "type": "string",
                "maxLength": 500
              },
              "retryable": {
                "type": "boolean"
              }
            },
            "required": [
              "code",
              "message",
              "retryable"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "kind",
          "schema",
          "id",
          "taskType",
          "status",
          "attempt",
          "lastSequence",
          "artifactCount",
          "retention"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioJobHandle"
      }
    },
    {
      "name": "maru_prepare_audio_source",
      "title": "Admit an owned uploaded WAV or FLAC as an immutable source",
      "description": "Normalize and verify an already finalized owned creator asset. Returns exact encoded and decoded PCM identities for task submission. Upload bytes using the authenticated upload transport first.",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "assetId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "assetId"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "contentType": {
                "type": "string",
                "enum": [
                  "audio/wav",
                  "audio/flac",
                  "audio/mpeg",
                  "audio/ogg"
                ]
              },
              "bytes": {
                "type": "integer",
                "minimum": 1,
                "maximum": 536870912
              },
              "sha256": {
                "type": "string",
                "pattern": "^[a-f0-9]{64}$"
              },
              "pcm": {
                "type": "object",
                "properties": {
                  "sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "encoding": {
                    "type": "string",
                    "const": "f32le-interleaved"
                  },
                  "sampleRate": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 384000
                  },
                  "channels": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 32
                  },
                  "frames": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "sha256",
                  "encoding",
                  "sampleRate",
                  "channels",
                  "frames"
                ],
                "additionalProperties": false
              },
              "kind": {
                "type": "string",
                "const": "creator_asset"
              },
              "assetId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              }
            },
            "required": [
              "contentType",
              "bytes",
              "sha256",
              "pcm",
              "kind",
              "assetId"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "contentType": {
                "type": "string",
                "enum": [
                  "audio/wav",
                  "audio/flac",
                  "audio/mpeg",
                  "audio/ogg"
                ]
              },
              "bytes": {
                "type": "integer",
                "minimum": 1,
                "maximum": 536870912
              },
              "sha256": {
                "type": "string",
                "pattern": "^[a-f0-9]{64}$"
              },
              "pcm": {
                "type": "object",
                "properties": {
                  "sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "encoding": {
                    "type": "string",
                    "const": "f32le-interleaved"
                  },
                  "sampleRate": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 384000
                  },
                  "channels": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 32
                  },
                  "frames": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "sha256",
                  "encoding",
                  "sampleRate",
                  "channels",
                  "frames"
                ],
                "additionalProperties": false
              },
              "kind": {
                "type": "string",
                "const": "job_artifact"
              },
              "jobId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "artifactId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              }
            },
            "required": [
              "contentType",
              "bytes",
              "sha256",
              "pcm",
              "kind",
              "jobId",
              "artifactId"
            ],
            "additionalProperties": false
          }
        ],
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioSource"
      }
    },
    {
      "name": "maru_get_audio_artifact",
      "title": "Read owned audio job artifact metadata and authenticated download path",
      "description": "Read owned audio job artifact metadata and authenticated download path",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          },
          "artifactId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "jobId",
          "artifactId"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "artifact": {
            "type": "object",
            "properties": {
              "schema": {
                "type": "string",
                "const": "maru-audio-artifact/v1"
              },
              "artifactId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "jobId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "role": {
                "type": "string",
                "enum": [
                  "audio_variant",
                  "audio_stem",
                  "transcript",
                  "midi",
                  "midi_evidence",
                  "pitch_trajectory",
                  "analysis",
                  "receipt",
                  "embedding"
                ]
              },
              "contentType": {
                "type": "string"
              },
              "sha256": {
                "type": "string",
                "pattern": "^[a-f0-9]{64}$"
              },
              "bytes": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "pcm": {
                "type": "object",
                "properties": {
                  "sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "encoding": {
                    "type": "string",
                    "const": "f32le-interleaved"
                  },
                  "sampleRate": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 384000
                  },
                  "channels": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 32
                  },
                  "frames": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "sha256",
                  "encoding",
                  "sampleRate",
                  "channels",
                  "frames"
                ],
                "additionalProperties": false
              },
              "provenance": {
                "type": "object",
                "properties": {},
                "additionalProperties": {}
              }
            },
            "required": [
              "schema",
              "artifactId",
              "jobId",
              "role",
              "contentType",
              "sha256",
              "bytes",
              "provenance"
            ],
            "additionalProperties": {}
          },
          "expiresAt": {
            "type": "string"
          },
          "downloadUrl": {
            "type": "string"
          }
        },
        "required": [
          "artifact",
          "expiresAt",
          "downloadUrl"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioArtifactDetail"
      }
    },
    {
      "name": "maru_list_audio_capabilities",
      "title": "Inspect hosted audio task and model availability",
      "description": "Inspect hosted audio task and model availability",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "tasks": {
            "maxItems": 5,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "taskType": {
                  "type": "string",
                  "enum": [
                    "generate_audio",
                    "separate_audio_stems",
                    "transcribe_speech",
                    "transcribe_audio_to_midi",
                    "analyze_audio"
                  ]
                },
                "available": {
                  "type": "boolean"
                },
                "reason": {
                  "type": "string"
                },
                "modelIds": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  }
                }
              },
              "required": [
                "taskType",
                "available",
                "modelIds"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "tasks"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioCapabilities"
      }
    },
    {
      "name": "maru_get_audio_job_by_request_key",
      "title": "Recover an owned audio job after a lost submission response",
      "description": "Recover an owned audio job after a lost submission response",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "requestKey": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          }
        },
        "required": [
          "requestKey"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_get_audio_job_events",
      "title": "Replay persisted audio job events after a sequence",
      "description": "Replay persisted audio job events after a sequence",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~/-]*$"
          },
          "after": {
            "default": 0,
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "items": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": {}
            }
          },
          "lastSequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "items",
          "lastSequence"
        ],
        "additionalProperties": false,
        "x-maru-typescript": "import(\"@maruaudio/infer-contract/audio-jobs\").InferAudioJobEvents"
      }
    },
    {
      "name": "maru_list_guides",
      "title": "List the operating guides",
      "description": "List every guide's name, one-line summary and trigger (the distributed CLI lists only public cards). Read the ones whose trigger matches the task with read_guide.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "maru_read_guide",
      "title": "Read focused Studio operating guides",
      "description": "Load the complete text of one or more guides named in the system prompt's guide catalog. Use this before acting when a guide's trigger matches the request. Reading several related guides in one call (up to 5) avoids extra turns.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "names": {
            "minItems": 1,
            "maxItems": 5,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "processor-authoring",
                "restricted-typescript",
                "dsp-leaf-catalog",
                "parameters-and-schema",
                "ui-kit-faces",
                "presets-and-state",
                "assets-and-resources",
                "midi-and-event-modules",
                "build-preview-export",
                "graph-authoring",
                "platform-overview",
                "porting-web-audio",
                "cli-and-operations",
                "sample-kits-and-banks",
                "generation-and-transcription",
                "module-authoring"
              ]
            },
            "description": "Guide names copied exactly from the system prompt catalog."
          }
        },
        "required": [
          "names"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "guides": {
            "readOnly": true,
            "type": "array",
            "items": {
              "readOnly": true,
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "summary": {
                  "type": "string"
                },
                "trigger": {
                  "type": "string"
                },
                "content": {
                  "type": "string"
                },
                "audience": {
                  "type": "string",
                  "enum": [
                    "public",
                    "workspace"
                  ],
                  "description": "`workspace` cards describe this checkout's own processes."
                }
              },
              "required": [
                "name",
                "summary",
                "trigger",
                "content",
                "audience"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "guides"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_list_studio_templates",
      "title": "List Studio project templates",
      "description": "Look up the exact templates offered by the Studio create screen. In an unscoped Studio chat the system prompt already carries this roster, so you do NOT need this call to choose a template — call create_studio_project directly with a key from the roster. Call this when the roster is not in front of you, or with present:true when the user asked to SEE or choose from the templates themselves. Do not recite the list to the user. Each entry carries its key, human name, project kind and whether it can seed working source.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "effect",
              "instrument",
              "sampler",
              "sequencer"
            ]
          },
          "present": {
            "description": "true ONLY when the user asked to see or choose from the templates themselves; the list then renders as a picker card. Omit it when you will choose the template yourself: the list is then your own lookup and is not shown.",
            "type": "boolean"
          }
        }
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "readOnly": true,
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "studio-template-choices"
          },
          "requestedKind": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "effect",
                  "instrument",
                  "sampler",
                  "sequencer"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "presented": {
            "type": "boolean",
            "description": "Whether the listing was asked for on the user's behalf (renders as a picker)."
          },
          "templates": {
            "readOnly": true,
            "type": "array",
            "items": {
              "readOnly": true,
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "projectKind": {
                  "type": "string",
                  "enum": [
                    "effect",
                    "instrument",
                    "sampler",
                    "sequencer"
                  ]
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "blank",
                    "source-pack"
                  ]
                },
                "seeds": {
                  "type": "boolean",
                  "description": "False when Studio shows the entry but cannot seed working source."
                },
                "choice": {
                  "anyOf": [
                    {
                      "readOnly": true,
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "send-message"
                        },
                        "label": {
                          "type": "string"
                        },
                        "prompt": {
                          "type": "string"
                        },
                        "templateKey": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "label",
                        "prompt",
                        "templateKey"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "key",
                "name",
                "description",
                "projectKind",
                "source",
                "seeds",
                "choice"
              ],
              "additionalProperties": false
            }
          },
          "browse": {
            "readOnly": true,
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "const": "open-url"
              },
              "label": {
                "type": "string",
                "const": "Browse modules"
              },
              "href": {
                "type": "string"
              }
            },
            "required": [
              "kind",
              "label",
              "href"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "kind",
          "requestedKind",
          "presented",
          "templates",
          "browse"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_create_studio_project",
      "title": "Create a Studio project from a template",
      "description": "Create a project owned by the current user from one exact Studio template. The result renders a visible project card with an \"Open in Studio\" button. In a Studio chat with nothing attached, creating a project also attaches it to the conversation, so its source and preset tools are available from the next turn; the result says which happened.",
      "permission": "mcp:write",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "templateKey": {
            "type": "string",
            "minLength": 1,
            "maxLength": 160
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "brief": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4000
          }
        },
        "required": [
          "templateKey"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "entityKind": {
            "type": "string",
            "const": "project"
          },
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "projectKind": {
            "type": "string",
            "enum": [
              "effect",
              "instrument",
              "sampler",
              "sequencer"
            ]
          },
          "templateKey": {
            "type": "string"
          },
          "seeded": {
            "type": "boolean"
          },
          "templateName": {
            "description": "The template's human name, when the host resolved one.",
            "type": "string"
          },
          "attachedToConversation": {
            "description": "True when creating the project also attached it to the host conversation (next turn).",
            "type": "boolean"
          },
          "editableThisTurn": {
            "description": "True when the host bound the new project's workspace into this turn.",
            "type": "boolean"
          }
        },
        "required": [
          "entityKind",
          "id",
          "slug",
          "title",
          "projectKind",
          "templateKey",
          "seeded"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_create_sound_bank",
      "title": "Create a MIDI sound bank",
      "description": "Create an empty MIDI sound bank owned by the current user. The result renders as a card that opens its Clips editor, where MIDI files can be added. In a Studio chat with nothing attached, creating a bank also attaches it to the conversation, so its clip tools are available from the next turn; the result says which happened.",
      "permission": "mcp:write",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          }
        },
        "required": [
          "title"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "entityKind": {
            "type": "string",
            "const": "sound-bank"
          },
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "attachedToConversation": {
            "type": "boolean"
          }
        },
        "required": [
          "entityKind",
          "id",
          "title",
          "description"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_list_studio_projects",
      "title": "List my Studio projects",
      "description": "List the current user's own Studio projects, most recently changed first: id, slug, title, project kind, status, visibility, last change and a link that opens it in Studio. Use it when the user asks about their projects or names one you need to find. Never state a project that is not in this result. Where the module source tools are available, pass the slug as their `module`.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "effect",
              "instrument",
              "sampler",
              "sequencer"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          }
        }
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "projects": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "projectKind": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "visibility": {
                  "type": "string"
                },
                "updatedAt": {
                  "type": "string",
                  "description": "ISO timestamp of the last change."
                },
                "studioUrl": {
                  "type": "string",
                  "description": "Absolute URL that opens the project in Studio."
                }
              },
              "required": [
                "id",
                "slug",
                "title",
                "projectKind",
                "status",
                "visibility",
                "updatedAt",
                "studioUrl"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "total",
          "projects"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_search_community_modules",
      "title": "Search published community modules",
      "description": "Search the public directory of modules other Maru creators published: title, kind, roles, price, license, remix count and a link to its page. Use it to find examples to learn from (\"a published granular instrument\", \"tape delays\") or to answer what already exists. Pass owner and slug from a row to list_community_module_files and read_community_module_source. Never state a module that is not in this result.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "query": {
            "description": "Free text over titles and descriptions.",
            "type": "string",
            "maxLength": 120
          },
          "kind": {
            "description": "Only modules of this kind.",
            "type": "string",
            "enum": [
              "instrument",
              "effect",
              "generator",
              "midi",
              "control"
            ]
          },
          "sort": {
            "description": "newest published (default), recently updated, or most remixed.",
            "type": "string",
            "enum": [
              "newest",
              "updated",
              "remixed"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25
          }
        }
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "modules": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "owner": {
                  "type": "string",
                  "description": "Owner id; with slug, how the other community verbs name the module."
                },
                "slug": {
                  "type": "string"
                },
                "moduleId": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "moduleKind": {
                  "type": "string"
                },
                "roles": {
                  "readOnly": true,
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "priceCents": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "license": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "remixCount": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "publishedAt": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "ISO timestamp, or null for a module never published as a Release."
                },
                "url": {
                  "type": "string",
                  "description": "Absolute URL of the module's community page."
                }
              },
              "required": [
                "owner",
                "slug",
                "moduleId",
                "title",
                "description",
                "moduleKind",
                "roles",
                "priceCents",
                "license",
                "remixCount",
                "publishedAt",
                "url"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "modules"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_list_community_module_files",
      "title": "List a published module's source files",
      "description": "List the source files of one published community module's current release, with sizes. Only modules whose source is open have files to list. Paths are the exact form read_community_module_source expects.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "owner": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "The module's owner, exactly as search_community_modules reports it."
          },
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "The module's slug, exactly as search_community_modules reports it."
          }
        },
        "required": [
          "owner",
          "slug"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "files": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string"
                },
                "bytes": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "binary": {
                  "type": "boolean"
                }
              },
              "required": [
                "path",
                "bytes",
                "binary"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "title",
          "files"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_read_community_module_source",
      "title": "Read a published module's source file",
      "description": "Read one source file of a published community module as a numbered window of at most 400 lines. The result states the window and the file's total; pass startLine/endLine (1-based, inclusive) to continue. The line numbers are display only. Use it to learn how another creator built something, and credit the module when you borrow an idea.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "owner": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "The module's owner, exactly as search_community_modules reports it."
          },
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "The module's slug, exactly as search_community_modules reports it."
          },
          "path": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512,
            "description": "A path from list_community_module_files."
          },
          "startLine": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "endLine": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "owner",
          "slug",
          "path"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "start": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "end": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "total": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "lines": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "path",
          "start",
          "end",
          "total",
          "lines"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_list_plugin_builds",
      "title": "List my plug-in builds and releases",
      "description": "List the current user's native plug-in build projects: each one's delivery state (building, installable, failed, buildable, web-only, unsupported), its latest released version, the state of each format and architecture, and a dashboard link where the user downloads it. Use it when the user asks whether a build finished, what they have released, or where to get the VST3/AU/CLAP. Pass a project's id to show_plugin_build for its build history and errors. Never state a build or version that is not in this result.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {}
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "projects": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "description": "web-only | buildable | building | installable | failed | unsupported"
                },
                "latestVersion": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "withdrawn": {
                  "type": "boolean"
                },
                "targets": {
                  "readOnly": true,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "format": {
                        "type": "string"
                      },
                      "architecture": {
                        "type": "string"
                      },
                      "state": {
                        "type": "string",
                        "description": "web-only | buildable | building | installable | failed | unsupported"
                      },
                      "reason": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "format",
                      "architecture",
                      "state"
                    ],
                    "additionalProperties": false
                  }
                },
                "dashboardUrl": {
                  "type": "string",
                  "description": "Absolute dashboard URL where the user downloads and manages it."
                }
              },
              "required": [
                "id",
                "name",
                "slug",
                "state",
                "latestVersion",
                "withdrawn",
                "targets",
                "dashboardUrl"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "projects"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_show_plugin_build",
      "title": "Show one plug-in build project's builds and releases",
      "description": "Show one of the current user's plug-in build projects: its recent builds (status, format/architecture, when queued and finished, and the error message of a failed build), its releases (version, withdrawn or not) and the delivery state of each format, with dashboard links to the project and each build. Take the project id from list_plugin_builds.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "project": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "The build project's id, exactly as list_plugin_builds reports it."
          },
          "limit": {
            "description": "Recent builds to include (default 10).",
            "type": "integer",
            "minimum": 1,
            "maximum": 25
          }
        },
        "required": [
          "project"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "description": "web-only | buildable | building | installable | failed | unsupported"
          },
          "latestVersion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "withdrawn": {
            "type": "boolean"
          },
          "targets": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "format": {
                  "type": "string"
                },
                "architecture": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "description": "web-only | buildable | building | installable | failed | unsupported"
                },
                "reason": {
                  "type": "string"
                }
              },
              "required": [
                "format",
                "architecture",
                "state"
              ],
              "additionalProperties": false
            }
          },
          "dashboardUrl": {
            "type": "string",
            "description": "Absolute dashboard URL where the user downloads and manages it."
          },
          "builds": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "target": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "\"vst3/arm64\" when the build is bound to one target."
                },
                "queuedAt": {
                  "type": "string"
                },
                "finishedAt": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "error": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "status",
                "target",
                "queuedAt",
                "finishedAt",
                "error",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "releases": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "version": {
                  "type": "string"
                },
                "withdrawn": {
                  "type": "boolean"
                },
                "createdAt": {
                  "type": "string"
                }
              },
              "required": [
                "version",
                "withdrawn",
                "createdAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "id",
          "name",
          "slug",
          "state",
          "latestVersion",
          "withdrawn",
          "targets",
          "dashboardUrl",
          "builds",
          "releases"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_list_dsp_nodes",
      "title": "List the compiled DSP node catalog",
      "description": "List every DSP node type the compiled engine provides — name, engine node id, channel counts and parameter names. These are the primitives a module graph can be composed from; a node that is not listed is not available.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "stereoOnly": {
            "description": "Only nodes that can process stereo.",
            "type": "boolean"
          }
        }
      }
    },
    {
      "name": "maru_list_effects",
      "title": "List the named effects available to chain",
      "description": "List the named effects the shared MultiFX chain offers, grouped by family (modulation, drive, filter, dynamics, delay, reverb). Check this before writing new DSP: the effect you want may already exist and only need to be chained, reordered or given its own controls. Names only; read a module's source through the module and community tools.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "family": {
            "description": "Only effects in this family.",
            "type": "string",
            "enum": [
              "modulation",
              "drive",
              "filter",
              "dynamics",
              "delay",
              "reverb"
            ]
          }
        }
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "families": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "family": {
                  "type": "string",
                  "enum": [
                    "modulation",
                    "drive",
                    "filter",
                    "dynamics",
                    "delay",
                    "reverb"
                  ]
                },
                "count": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "effects": {
                  "readOnly": true,
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "family",
                "count",
                "effects"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "count",
          "families"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_list_module_files",
      "title": "List the source files in a module workspace",
      "description": "List the files inside one module project, with sizes. Paths are relative to the module root and are the exact form the other workspace verbs expect. Narrow with `subdir` or with `glob` (e.g. 'src/ui/**/*.tsx'). Generated directories (build, dist, node_modules) and symlinks are not listed. To find WHERE something is written, use search_module_source rather than listing and reading files one by one.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "module": {
            "description": "Which module workspace to act on. OMIT IT in a project chat or in the Studio app: the attached project is the only module there, and this call already acts on it. On the CLI or over MCP, where many modules are reachable, pass the slug reported by list_examples. Only registered module projects are reachable.",
            "type": "string",
            "minLength": 1
          },
          "subdir": {
            "description": "Limit the listing to one subdirectory, e.g. 'src'.",
            "type": "string"
          },
          "glob": {
            "description": "Limit to paths matching this glob, e.g. 'src/ui/**' or '**/*.{ts,tsx}'. Supports *, ?, ** and {a,b}; matched against the path relative to the module root.",
            "type": "string"
          }
        }
      }
    },
    {
      "name": "maru_read_module_source",
      "title": "Read a window of one source file from a module workspace",
      "description": "Read a file from a module project as a numbered WINDOW. The result states the window and the file's true total, e.g. 'lines 1-400 of 1210'. A window is at most 400 lines and 20000 characters and always ends on a line boundary; when more remains, the result names the exact call that continues it. Use startLine/endLine (1-based, inclusive) to read a specific region — after a search, read around the line the search reported rather than the whole file. THE LINE NUMBERS AND THE TAB AFTER THEM ARE DISPLAY ONLY: never include them in oldText, newText or content.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "module": {
            "description": "Which module workspace to act on. OMIT IT in a project chat or in the Studio app: the attached project is the only module there, and this call already acts on it. On the CLI or over MCP, where many modules are reachable, pass the slug reported by list_examples. Only registered module projects are reachable.",
            "type": "string",
            "minLength": 1
          },
          "path": {
            "type": "string",
            "minLength": 1,
            "description": "Path RELATIVE to the module root, e.g. 'src/module.ts'. Absolute paths and '..' segments are rejected."
          },
          "startLine": {
            "description": "First line to return, 1-based and inclusive. Defaults to 1.",
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "endLine": {
            "description": "Last line to return, 1-based and inclusive. The window ceilings still apply, so a large range comes back in several calls.",
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "path"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "content": {
            "type": "string",
            "description": "The raw text of the window. No numbers, no header — those are display."
          },
          "startLine": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "endLine": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "totalLines": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "bytes": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Size of the whole file."
          },
          "truncated": {
            "type": "boolean",
            "description": "True when the window is not the whole file."
          }
        },
        "required": [
          "path",
          "content",
          "startLine",
          "endLine",
          "totalLines",
          "bytes",
          "truncated"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_search_module_source",
      "title": "Search a module workspace for a string or pattern",
      "description": "Find WHERE something is written, across a module project's text files, without reading them. Literal by default; pass regex: true for a JavaScript regular expression. Narrow with glob (e.g. 'src/ui/**'), widen the view with contextLines. Results are printed exactly as grep prints them — 'path:line:text' for a hit and 'path-line-text' for context — so the text, indentation included, starts right after the second separator and can be copied into edit_module_source as it is. Grouped by file, with the total. A search with many hits shows a few per file and names the files holding the rest, so narrow with glob or a more specific pattern rather than raising maxResults. Binary files are skipped. Use this before reading: a search plus a targeted read_module_source window costs a fraction of reading whole files to look for a string.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "module": {
            "description": "Which module workspace to act on. OMIT IT in a project chat or in the Studio app: the attached project is the only module there, and this call already acts on it. On the CLI or over MCP, where many modules are reachable, pass the slug reported by list_examples. Only registered module projects are reachable.",
            "type": "string",
            "minLength": 1
          },
          "pattern": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300,
            "description": "The text (or regular expression) to find."
          },
          "regex": {
            "description": "Treat the pattern as a JavaScript regular expression.",
            "type": "boolean"
          },
          "ignoreCase": {
            "description": "Match case-insensitively.",
            "type": "boolean"
          },
          "glob": {
            "description": "Limit to paths matching this glob, e.g. 'src/ui/**' or '**/*.{ts,tsx}'. Supports *, ?, ** and {a,b}; matched against the path relative to the module root.",
            "type": "string"
          },
          "contextLines": {
            "description": "Lines of context to show on each side of a match.",
            "type": "integer",
            "minimum": 0,
            "maximum": 5
          },
          "maxResults": {
            "description": "Cap on reported matches. Default 30; the total is always stated, so a capped search says how much it did not show.",
            "type": "integer",
            "minimum": 1,
            "maximum": 200
          }
        },
        "required": [
          "pattern"
        ]
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "matches": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string"
                },
                "line": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "text": {
                  "type": "string"
                },
                "before": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "after": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "path",
                "line",
                "text"
              ],
              "additionalProperties": false
            },
            "description": "The matches shown, bounded by maxResults and the text budget."
          },
          "totalMatches": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "filesSearched": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "filesMatched": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "truncated": {
            "type": "boolean"
          },
          "notShown": {
            "description": "Where the matches that were not shown are, so the next search can aim.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string"
                },
                "count": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "path",
                "count"
              ],
              "additionalProperties": false
            }
          },
          "contextDropped": {
            "description": "True when contextLines was given up so more hits fit.",
            "type": "boolean"
          }
        },
        "required": [
          "matches",
          "totalMatches",
          "filesSearched",
          "filesMatched",
          "truncated"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_generate_audio",
      "title": "Generate one-shots or loops from a prompt (hosted)",
      "description": "Render seeded audio on the hosted service and return download URLs. One item per seed; pass seeds to reproduce a result, or variations for that many random seeds. Specialised children: generate_kit for a 16-pad drum kit, generate_instrument for a playable sampler instrument. Rendering can outlast the call: a result whose job is still queued names the job, and check_audio_generation collects it.",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "job"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000,
            "description": "What to generate, in words"
          },
          "negativePrompt": {
            "description": "What to steer away from",
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          },
          "audioType": {
            "default": "one-shot",
            "type": "string",
            "enum": [
              "one-shot",
              "loop",
              "sfx"
            ]
          },
          "seconds": {
            "default": 2,
            "description": "Length of each item in seconds",
            "type": "number",
            "minimum": 0.25,
            "maximum": 60
          },
          "model": {
            "description": "Hosted model id; omit for the service default",
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "seeds": {
            "description": "Explicit seeds, one item each",
            "minItems": 1,
            "maxItems": 16,
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 4294967295
            }
          },
          "variations": {
            "default": 1,
            "description": "Random seeds to draw when seeds is absent",
            "type": "integer",
            "minimum": 1,
            "maximum": 16
          },
          "steps": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500
          },
          "cfg": {
            "type": "number",
            "minimum": 0,
            "maximum": 30
          },
          "loraId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        },
        "required": [
          "prompt"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "index": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "seed": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "wavUrl": {
                  "type": "string",
                  "description": "Download URL of the rendered WAV."
                },
                "durationSeconds": {
                  "type": "number"
                },
                "model": {
                  "type": "string"
                },
                "license": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              },
              "required": [
                "index",
                "seed",
                "wavUrl"
              ],
              "additionalProperties": false
            }
          },
          "itemErrors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "index": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "message"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "index",
                "error"
              ],
              "additionalProperties": false
            }
          },
          "job": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "queued",
                  "done",
                  "partial",
                  "failed",
                  "cancelled"
                ]
              }
            },
            "required": [
              "id",
              "status"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "items",
          "itemErrors"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_generate_kit",
      "title": "Generate a 16-pad drum kit from a prompt (hosted)",
      "description": "Generate a drum kit on the hosted service: one pad per role of the 16-pad drum kit layout, as download URLs. The pads are saved to the user's Generated Sounds library. A child of generate_audio. Rendering can outlast the call: a result whose job is still queued names the job, and check_audio_generation collects it.",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false
      },
      "_meta": {
        "maruaudio.com/execution": "job"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000,
            "description": "What to generate, in words"
          },
          "negativePrompt": {
            "description": "What to steer away from",
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          },
          "seed": {
            "description": "One seed for the whole kit; random when absent",
            "type": "integer",
            "minimum": 0,
            "maximum": 4294967295
          },
          "model": {
            "description": "Hosted model id; omit for the service default",
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "bankTitle": {
            "description": "Name for a sound bank of the pads; the hosted service does not create the bank yet and says so in the result note",
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          }
        },
        "required": [
          "prompt"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kitId": {
            "type": "string"
          },
          "contract": {
            "type": "string",
            "description": "The pad contract, e.g. drum-kit-16."
          },
          "seed": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "model": {
            "type": "string"
          },
          "pads": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "index": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "roleId": {
                  "type": "string"
                },
                "wavUrl": {
                  "type": "string"
                },
                "durationSeconds": {
                  "type": "number"
                },
                "note": {
                  "type": "string"
                }
              },
              "required": [
                "index",
                "roleId",
                "wavUrl"
              ],
              "additionalProperties": false
            }
          },
          "bankId": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "job": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "queued",
                  "done",
                  "partial",
                  "failed",
                  "cancelled"
                ]
              }
            },
            "required": [
              "id",
              "status"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "kitId",
          "contract",
          "seed",
          "pads"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "maru_check_audio_generation",
      "title": "Check a hosted audio generation that was still rendering",
      "description": "Read the state of a generate_audio or generate_kit job that returned before it finished: its status (queued, done, partial, failed) and every result rendered so far, with download URLs. Pass the job id exactly as the generation reported it. Call it again while the status is queued.",
      "permission": "mcp:read",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "job": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "The job id a generation reported"
          }
        },
        "required": [
          "job"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "index": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "seed": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "wavUrl": {
                      "type": "string",
                      "description": "Download URL of the rendered WAV."
                    },
                    "durationSeconds": {
                      "type": "number"
                    },
                    "model": {
                      "type": "string"
                    },
                    "license": {
                      "type": "string"
                    },
                    "note": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "index",
                    "seed",
                    "wavUrl"
                  ],
                  "additionalProperties": false
                }
              },
              "itemErrors": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "index": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "error": {
                      "type": "object",
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "code",
                        "message"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "index",
                    "error"
                  ],
                  "additionalProperties": false
                }
              },
              "job": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "queued",
                      "done",
                      "partial",
                      "failed",
                      "cancelled"
                    ]
                  }
                },
                "required": [
                  "id",
                  "status"
                ],
                "additionalProperties": false
              },
              "kind": {
                "type": "string",
                "const": "audio"
              }
            },
            "required": [
              "items",
              "itemErrors",
              "kind"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "kitId": {
                "type": "string"
              },
              "contract": {
                "type": "string",
                "description": "The pad contract, e.g. drum-kit-16."
              },
              "seed": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "model": {
                "type": "string"
              },
              "pads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "index": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "roleId": {
                      "type": "string"
                    },
                    "wavUrl": {
                      "type": "string"
                    },
                    "durationSeconds": {
                      "type": "number"
                    },
                    "note": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "index",
                    "roleId",
                    "wavUrl"
                  ],
                  "additionalProperties": false
                }
              },
              "bankId": {
                "type": "string"
              },
              "note": {
                "type": "string"
              },
              "job": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "queued",
                      "done",
                      "partial",
                      "failed",
                      "cancelled"
                    ]
                  }
                },
                "required": [
                  "id",
                  "status"
                ],
                "additionalProperties": false
              },
              "kind": {
                "type": "string",
                "const": "kit"
              }
            },
            "required": [
              "kitId",
              "contract",
              "seed",
              "pads",
              "kind"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    {
      "name": "maru_cancel_audio_generation",
      "title": "Cancel an owned hosted audio generation",
      "description": "Request cancellation of an existing generate_audio or generate_kit take. Requires generation permission, but submits no new model work and spends no new credits. Current queue-backed takes do not support cancellation yet and return an explicit error.",
      "permission": "mcp:generate",
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "maruaudio.com/execution": "immediate"
      },
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "job": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "The exact generation job id reported by generate_audio or generate_kit"
          }
        },
        "required": [
          "job"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "done",
              "partial",
              "failed",
              "cancelled"
            ]
          }
        },
        "required": [
          "id",
          "status"
        ],
        "additionalProperties": false
      }
    }
  ]
}