Skip to content

yishengjiang99/gbk-composer

v1.0.0

Compose and edit structured MIDI music in five styles, shape dynamics with CC automation, preview it in a piano-roll player, render and play WAV in your browser right in the chat, and download MIDI. No account needed.

GBK Composer — plugin package

Compose, edit, orchestrate, visualize, and render MIDI music with a deterministic SoundFont synthesizer. Generate structured arrangements, modify individual passages, control expression, and export WAV and MIDI.

This package connects ChatGPT and Codex to the GBK Composer remote MCP server at https://compose.grepawk.com/mcp. Compositions are created and stored server-side. WAV/MIDI renders run on the GBK server when the client has no browser (Codex, account-free projects), in the ChatGPT in-chat player, or in a signed-in GBK Studio tab at https://compose.grepawk.com. Results come back as signed download links, never as audio bytes.

Package contents

PathPurpose
plugin.jsonPortable Agent Plugins manifest (name, description, OpenAI interface metadata, example prompts).
mcp.jsonRemote MCP server declaration: gbk_composer, Streamable HTTP, no sign-in required (OAuth optional).
skills/compose-music/SKILL.mdHow to compose a new piece end to end.
skills/edit-music/SKILL.mdHow to make targeted, revision-safe edits.
skills/render-music/SKILL.mdHow to render, verify, and deliver WAV/MIDI.
assets/Brand assets. None are bundled yet — see assets/README.md.

Install

From this repository's marketplace

This repository ships a local marketplace at .agents/plugins/marketplace.json (gbk-local) that lists this plugin:

.agents/plugins/marketplace.json
  └─ gbk-composer → ./plugins/gbk-composer

In a client that supports portable Agent Plugins marketplaces, add this repository as a marketplace source and install GBK Composer from GBK Plugins. Installation policy is AVAILABLE; no GBK sign-in or account linking is needed (see Auth below).

As a custom MCP server in ChatGPT

  1. Deploy (or use the deployed) GBK server so https://compose.grepawk.com/mcp answers MCP requests.
  2. In ChatGPT, open Plugins and add a custom MCP server.
  3. Enter the server URL: https://compose.grepawk.com/mcp
  4. Choose No authentication. Compositions are created without a GBK account (OAuth sign-in remains available for existing GBK accounts).
  5. Invoke it, for example: "@GBK Compose a 16-bar Baroque fugue in D minor for organ, then show me the piano roll."

The same MCP endpoint can be configured in Codex and other MCP-compatible clients using the declaration in mcp.json.

Tools

ToolWhat it does
gbk_get_capabilitiesDiscover styles, instruments, render formats, and limits.
gbk_create_compositionCreate a durable composition project; returns its ID and revision.
gbk_get_compositionInspect a composition's sections, tracks, notes, and revision.
gbk_list_compositionsList a signed-in user's compositions, or the one project an accessToken authorizes.
gbk_edit_compositionRevision-safe typed edits (parts, notes, orchestration, CC curves, mix, tempo, sections).
gbk_render_compositionRender a validated WAV plus a Standard MIDI file: on GBK's server when no Studio tab is connected (Codex, account-free projects), or in a connected Studio tab. Optional soundFont.
gbk_list_soundfontsList the SoundFonts this deployment can render with (pass an id as soundFont).
gbk_get_render_statusPoll a render job; returns validation data and artifact references.
gbk_cancel_renderCancel a queued or running render job; no partial artifact is published.
gbk_get_artifactsAuthorized, expiring download URLs for WAV/MIDI artifacts.
gbk_open_workstationPrivate deep link that opens the exact project in GBK Studio (read-only capability in the URL fragment for account-free projects).
gbk_publish_compositionPublish a composition publicly — only on the user's explicit request.
gbk_delete_compositionPermanently delete your own account-free project (edit key required).
gbk_claim_compositionMove an account-free project into your signed-in GBK account.
gbk_show_composition_uiShow the interactive player and piano-roll component in ChatGPT; its Render button renders the WAV in the user's browser.

App-only (called by the in-chat player, hidden from the model): gbk_widget_render_start, gbk_widget_render_finish.

Auth summary

Account-free (default)

  • mcp.json declares extensions["com.openai"].auth = { "type": "none" }.
  • gbk_create_composition returns compositionId, a private accessToken (edit) and a readAccessToken. Every follow-up call passes accessToken; it works across sessions and server restarts. The id alone grants nothing; the read capability cannot edit, render or publish.
  • Studio links carry only the read capability, in the URL fragment. Public publish links carry none.
  • A lost access key cannot be recovered. While you have it, sign in and call gbk_claim_composition to move the project into your account. Delete with gbk_delete_composition (edit key), or ask through https://compose.grepawk.com/support.
  • Limits: global daily create/edit budgets, per-project revision and render request limits, length/size caps, global guest storage cap, per-IP call throttle, 30-day artifact expiry. MCP_GUEST=0 turns account-free access off.
  • Rendering: with no Studio tab, the server renders WAV + MIDI headlessly with GBK's own SF2 engine in a worker thread (guests 180 s, accounts 300 s max, per-hour and per-network caps, one render at a time per project, queue of 8, 3 min timeout). SERVER_RENDER=0 turns server rendering off.

Optional account sign-in (OAuth)

  • Access uses OAuth 2.0 authorization code with PKCE, discovered through the standard protected resource / authorization server metadata endpoints.
  • No static client block is included: the server supports dynamic client registration and Client ID Metadata Documents (CIMD), so ChatGPT/Codex register or identify themselves at connect time.
  • The OAuth flow links the client to the user's existing GBK account (the website's invite-code / session account). Tokens are validated for issuer, audience, scopes, and expiry on every call.
  • Scopes are narrow: compositions read/write, renders create, artifacts read, and shares publish are separate permissions.
  • Private compositions and artifacts are only accessible to their owner; artifact downloads are authorized, expiring URLs checked again at download time. Compositions are private by default and are published only through an explicit publish action.

Notes

  • Useful for classical composition, algorithmic counterpoint and fugues, game soundtracks, film cues, ambient music, MIDI orchestration, and music programming experiments.
  • The WAV render is the authoritative audio. MIDI export preserves notes, tempo/meter maps, program changes, and CC automation; SoundFont-specific voice overrides and effects render into the WAV only.
  • Submission and privacy details for a public listing live in docs/chatgpt-plugin-submission.md in this repository.