|
2 | 2 | "manifest_version": "0.3", |
3 | 3 | "name": "osc-bridge", |
4 | 4 | "display_name": "osc-bridge", |
5 | | - "version": "0.10.0", |
| 5 | + "version": "0.10.1", |
6 | 6 | "description": "OSC ↔ MIDI/SysEx bridge for 849 synths and DAWs — a MIDI MCP and OSC MCP.", |
7 | 7 | "long_description": "osc-bridge is a declarative bridge between OSC and the music world: 849 hardware synthesizers over MIDI/SysEx, plus music software over OSC (Ableton, Bitwig, Reaper, Sonic Pi, SuperCollider, Pure Data, TouchDesigner, VCV Rack). Its MCP server exposes the whole catalogue to an LLM — list devices, read a device's named OSC surface, send OSC to synths and DAWs, and check a running bridge's status. Both a MIDI MCP (hardware over MIDI/SysEx) and an OSC MCP (DAWs and live-coding environments).", |
8 | 8 | "author": { |
|
60 | 60 | { |
61 | 61 | "name": "list_devices", |
62 | 62 | "description": "Enumerate every device driver — name, vendor, slug, kind (hardware/software), and source tier. Use this first to discover the catalogue.", |
63 | | - "inputSchema": { "type": "object", "properties": {} } |
| 63 | + "inputSchema": { "type": "object", "properties": {} }, |
| 64 | + "outputSchema": { |
| 65 | + "type": "object", |
| 66 | + "properties": { |
| 67 | + "count": { "type": "integer", "description": "Number of device drivers found." }, |
| 68 | + "devices": { |
| 69 | + "type": "array", |
| 70 | + "items": { |
| 71 | + "type": "object", |
| 72 | + "properties": { |
| 73 | + "name": { "type": "string" }, |
| 74 | + "vendor": { "type": "string" }, |
| 75 | + "slug": { "type": "string", "description": "OSC prefix without the leading slash." }, |
| 76 | + "kind": { "type": "string", "description": "'hardware' or 'software'." }, |
| 77 | + "revision": { "type": "string" }, |
| 78 | + "source_tier": { "type": "string" }, |
| 79 | + "file": { "type": "string" } |
| 80 | + }, |
| 81 | + "required": ["name", "vendor", "slug", "kind"] |
| 82 | + } |
| 83 | + } |
| 84 | + }, |
| 85 | + "required": ["count", "devices"] |
| 86 | + }, |
| 87 | + "annotations": { "title": "List devices", "readOnlyHint": true, "idempotentHint": true, "openWorldHint": false } |
64 | 88 | }, |
65 | 89 | { |
66 | 90 | "name": "get_device_docs", |
|
69 | 93 | "type": "object", |
70 | 94 | "properties": { "slug": { "type": "string", "description": "Device slug, e.g. 'ableton' or 'minilab3'" } }, |
71 | 95 | "required": ["slug"] |
72 | | - } |
| 96 | + }, |
| 97 | + "outputSchema": { |
| 98 | + "type": "object", |
| 99 | + "properties": { |
| 100 | + "slug": { "type": "string" }, |
| 101 | + "has_docs": { "type": "boolean", "description": "False when no companion .md exists for the device." }, |
| 102 | + "markdown": { "type": "string", "description": "The companion documentation, or a not-found message when has_docs is false." } |
| 103 | + }, |
| 104 | + "required": ["slug", "has_docs", "markdown"] |
| 105 | + }, |
| 106 | + "annotations": { "title": "Get device docs", "readOnlyHint": true, "idempotentHint": true, "openWorldHint": false } |
73 | 107 | }, |
74 | 108 | { |
75 | 109 | "name": "list_routes", |
|
78 | 112 | "type": "object", |
79 | 113 | "properties": { "slug": { "type": "string", "description": "Device slug, e.g. 'minilab3'" } }, |
80 | 114 | "required": ["slug"] |
81 | | - } |
| 115 | + }, |
| 116 | + "outputSchema": { |
| 117 | + "type": "object", |
| 118 | + "properties": { |
| 119 | + "device": { "type": "string" }, |
| 120 | + "vendor": { "type": "string" }, |
| 121 | + "osc_prefix": { "type": "string" }, |
| 122 | + "kind": { "type": "string" }, |
| 123 | + "commands": { "type": "array", "description": "Declarative OSC paths the device accepts, with typed args and mode.", "items": { "type": "object" } }, |
| 124 | + "cc_params": { "type": "array", "description": "CC / NRPN parameters, each mapped to an OSC address.", "items": { "type": "object" } }, |
| 125 | + "params": { "type": "array", "description": "SysEx parameters, each mapped to an OSC address.", "items": { "type": "object" } }, |
| 126 | + "replies": { "type": "array", "description": "Reply patterns the device emits back onto the OSC surface.", "items": { "type": "object" } } |
| 127 | + }, |
| 128 | + "required": ["device", "osc_prefix", "commands", "cc_params", "params", "replies"] |
| 129 | + }, |
| 130 | + "annotations": { "title": "List device routes", "readOnlyHint": true, "idempotentHint": true, "openWorldHint": false } |
82 | 131 | }, |
83 | 132 | { |
84 | 133 | "name": "send", |
|
91 | 140 | "target": { "type": "string", "description": "Optional host:port override" } |
92 | 141 | }, |
93 | 142 | "required": ["addr"] |
94 | | - } |
| 143 | + }, |
| 144 | + "outputSchema": { |
| 145 | + "type": "object", |
| 146 | + "properties": { |
| 147 | + "sent": { "type": "boolean" }, |
| 148 | + "address": { "type": "string" }, |
| 149 | + "bytes": { "type": "integer", "description": "Encoded OSC packet size." }, |
| 150 | + "target": { "type": "string", "description": "host:port the packet was sent to." } |
| 151 | + }, |
| 152 | + "required": ["sent", "address", "bytes", "target"] |
| 153 | + }, |
| 154 | + "annotations": { "title": "Send OSC message", "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": true } |
95 | 155 | }, |
96 | 156 | { |
97 | 157 | "name": "get_status", |
98 | 158 | "description": "Send /bridge/status to a running osc-bridge and report the replies received within 500 ms.", |
99 | 159 | "inputSchema": { |
100 | 160 | "type": "object", |
101 | 161 | "properties": { "target": { "type": "string", "description": "host:port to query, defaults to the configured default target" } } |
102 | | - } |
| 162 | + }, |
| 163 | + "outputSchema": { |
| 164 | + "type": "object", |
| 165 | + "properties": { |
| 166 | + "target": { "type": "string" }, |
| 167 | + "replied": { "type": "boolean", "description": "False when no reply arrived within 500 ms." }, |
| 168 | + "replies": { |
| 169 | + "type": "array", |
| 170 | + "items": { |
| 171 | + "type": "object", |
| 172 | + "properties": { "addr": { "type": "string" }, "args": { "type": "array" } }, |
| 173 | + "required": ["addr", "args"] |
| 174 | + } |
| 175 | + } |
| 176 | + }, |
| 177 | + "required": ["target", "replied", "replies"] |
| 178 | + }, |
| 179 | + "annotations": { "title": "Get bridge status", "readOnlyHint": true, "idempotentHint": true, "openWorldHint": true } |
103 | 180 | } |
104 | 181 | ] |
105 | 182 | } |
0 commit comments