{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_b6brret6yrh5","handle":"keyboardia","url":"https://wellknown.network/agents/keyboardia","links":{"self":"https://wellknown.network/agents/keyboardia/record.json","html":"https://wellknown.network/agents/keyboardia","markdown":"https://wellknown.network/agents/keyboardia/record.md","api":"https://wellknown.network/api/v1/agents/keyboardia","status":"https://wellknown.network/api/v1/agents/keyboardia/status","claim":"https://wellknown.network/agents/keyboardia/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/keyboardia/claim.json","badge":"https://wellknown.network/agents/keyboardia/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/keyboardia/history","tools":"https://wellknown.network/api/v1/agents/keyboardia/tools"},"ard":{"identifier":"urn:air:keyboardia.dev:server:keyboardia","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Keyboardia","summary":"Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.","description":"Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.","publisher":{"name":"adewale","url":null},"homepage":"https://keyboardia.dev/","repository":"https://github.com/adewale/keyboardia","version":"1.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://keyboardia.dev/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-31T09:46:14.622804Z","publishedAt":"2026-07-31T09:46:14.622804Z","registryName":"io.github.adewale/keyboardia"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[],"categories":[],"language":"en"},"observed":{"status":"live","statusReason":"Responded 6h ago.","lastOkAt":"2026-10-12T15:40:59.725Z","lastProbedAt":"2026-10-12T15:40:59.725Z","statusComputedAt":"2026-10-12T15:42:46.735Z","reliability30d":{"probes":112,"successRate":1,"p50Ms":199,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":109,"ok":109,"authBoundaryOk":0,"serviceOk":109,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-12T15:40:59.725Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":261,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-12T09:24:53.943Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":151,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-12T02:23:45.743Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":148,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T19:22:21.962Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":239,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T12:26:14.514Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":165,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T05:26:25.171Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":172,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T23:23:29.932Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":147,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T17:29:09.020Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":361,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T11:25:39.347Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":198,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T05:28:54.096Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":213,"error":null,"detail":{"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"toolCount":7,"toolsHash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","serverName":"keyboardia","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_session","description":"Read the current tempo and compact track patterns from an existing Keyboardia session."},{"name":"edit_session","description":"Make one narrow, retry-safe edit to an existing collaborative session. After every attempt, the next Keyboardia call must be get_session for the same session. A"},{"name":"create_session","description":"Create a new editable Keyboardia session with the normal defaults and return its shareable URL. The session starts with no tracks; use edit_session to add them."},{"name":"remix_session","description":"Copy an existing session — published or editable — into a new editable session that records the original as its source. The source is never modified, so this is"},{"name":"publish_session","description":"Freeze the current music into a new immutable session and return its URL. The source session stays editable at its own URL. Only call this when someone explicit"},{"name":"export_midi","description":"Export the session as a base64-encoded Standard MIDI File, matching what Keyboardia's own Export MIDI produces for the same music. The session is not modified. "},{"name":"analyze_session","description":"Describe what is happening musically in a session — rhythm, pitch content, inferred key, and chords — without changing anything. Use this to explain music rathe"}],"package":null,"toolSurface":{"id":"ts_jj7nv995xuwb","endpointId":"ep_z62k8u6gsd6b","hash":"5a06d8ff2a25c3dd86141ca6df6e97bd207d223fc7daa6bcfee234ab9cc29be4","toolCount":7,"serverName":"keyboardia","serverVersion":"1.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-12T13:26:35.298Z","lastSeenAt":"2026-10-12T15:41:00.006Z","observations":111,"toolNames":["get_session","edit_session","create_session","remix_session","publish_session","export_midi","analyze_session"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_z62k8u6gsd6b","url":"https://keyboardia.dev/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-11T19:22:21.972Z","auth":{"observedAt":"2026-10-11T19:22:21.992Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-11T19:22:22.012Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"keyboardia.dev","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-08-18T04:09:21.000Z","validTo":"2026-11-16T05:09:05.000Z","daysToExpiry":34,"sanCount":2,"fingerprint256":"43:8A:8C:04:9F:50:E5:26:CD:EC:63:7C:4D:5A:FE:EC:6D:4B:3F:CB:D8:4D:72:F9:49:1F:2C:30:C1:C1:5B:97"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.adewale/keyboardia","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.adewale%2Fkeyboardia","firstSeenAt":"2026-09-06T08:20:50.183Z","fetchedAt":"2026-10-10T04:21:59.517Z","normalizedAt":"2026-10-10T04:21:59.517Z"}]},"firstSeenAt":"2026-09-06T08:20:50.183Z","updatedAt":"2026-10-12T15:43:57.607Z"}