mxl-agent
A deterministic local MusicXML engine and Claude Code Agent Skill. See
mxl_agent-skill.md for the full product and engineering specification,
ROADMAP.md for current implementation status, CHANGELOG.md for
what's shipped, and COMPATIBILITY.md for what's actually been verified
against which Python/OS/optional-integration versions. Licensed under MIT.
Development
uv sync
uv run mxl-agent --help
uv run mxl-agent doctor --json
uv run python scripts/check.py fast
Release engineering
uv run python scripts/check.py release builds the package twice and confirms the wheel/sdist
come out byte-for-byte identical, then writes a CycloneDX SBOM and a dependency vulnerability
report to dist/ (gitignored). It does not sign or publish anything -- see CHANGELOG.md's
"Known limitations" and ROADMAP.md's Slice 10.6 note for what's intentionally out of scope.
MCP server (optional)
mxl-agent mcp-serve runs an MCP server over stdio, exposing
the session tools (open/status/checkout/revisions) and a read-only session_view tool
to any MCP client. Needs the optional mcp extra (and, for session_view's own rendering, the
optional render extra too):
uv sync --extra mcp --extra render
uv run mxl-agent doctor --json # integrations.mcp.available should be true
Point an MCP client at uv run --directory <this repo> mxl-agent mcp-serve (add
--workspace-root <path> to use a workspace directory other than the default
.mxl-agent/workspaces). This is a separate integration from the Claude Code Agent Skill
(.claude/skills/mxl-agent/) -- the skill's own wrapper never spawns mcp-serve.
Without cloning this repo: since mxl-agent is published to PyPI, uvx can run it ephemerally
(no persistent install, no local checkout) for Claude Desktop or any other MCP client:
{
"mcpServers": {
"mxl-agent": {
"command": "uvx",
"args": ["--from", "mxl-agent[mcp]", "mxl-agent", "mcp-serve", "--workspace-root", "/path/to/workspace"]
}
}
}
Verified: uvx --from "mxl-agent[mcp]" mxl-agent doctor --json reports integrations.mcp.available: true from a clean environment (the same import mcp-serve itself depends on); the server's own
tool-registration and request-handling logic is covered by this project's existing test suite, not
re-verified here. Add --from "mxl-agent[mcp,render]" for session_view's embedded-SVG rendering
too.
mcp-serve also supports --transport streamable-http [--host HOST] [--port PORT] (Slice 13.7)
for a client that needs a remote HTTP endpoint rather than a locally spawned subprocess -- e.g.
ChatGPT's custom MCP connectors, which only accept a remote HTTPS endpoint over Streamable HTTP or
SSE, never stdio (confirmed against current OpenAI documentation as of 2026-08-30). Binds to
127.0.0.1 by default and applies no authentication -- do not bind a public interface without
first putting your own auth/TLS in front of it (see ROADMAP.md's Slice 13.8, still open).
In a client that supports the MCP Apps
extension, session_view also renders a read-only, embedded Verovio SVG of the session's current
score inline. This extension is new and still evolving (spec dated 2026-01-26); its client-side
half is implemented by a vendored copy of the official library (see NOTICE) and is not verified
end-to-end by this project's own test suite, since no compatible host is available here -- server-
side registration and the tool's own output are tested, actual in-host rendering is not.
Using mxl-agent from ChatGPT
There is no ChatGPT equivalent of Claude's Agent Skill format, so this is not a guided workflow the way the Claude Skill is -- it's raw CLI access, and its reachability is not guaranteed. In a ChatGPT session with Code Interpreter enabled, you can try asking it to run:
pip install mxl-agent
mxl-agent session open <uploaded-file> --json
mxl-agent inspect summary <session_id> --json
This may not work at all, depending on your ChatGPT account/tier: Code Interpreter's sandbox
has historically had no general internet access by design, and a real user found ChatGPT reporting
PyPI unreachable when they tried this. What's actually verified is only that mxl-agent itself
installs and runs correctly once pip install succeeds -- not that every ChatGPT session can
reach PyPI at all. The longer-term path is a real MCP connector (see "MCP server (optional)"
above) hosted somewhere reachable -- ChatGPT calling out to a server, which doesn't depend on
this uncertain sandbox networking. That path isn't usable yet either: the MCP server
currently exposes only read-only session tools (open/status/checkout/revisions/view), with no
inspect, edit, validate, or export, and it only opens files by a path on the server's own disk.
See ROADMAP.md Slice 13.14.
If pip install does work in your session: because there's no skill file encoding this project's
workflow discipline (dry-run before apply, validate after apply, never paste raw XML into the
conversation -- see mxl_agent-skill.md Section 14.4/14.5), whether ChatGPT actually follows that
discipline depends entirely on the model and the prompt, not on anything this project enforces. Ask
it explicitly to run plan before apply and validate after, and to use inspect/analyze
rather than reading the file directly.
Claude Code plugin
This repository is itself a Claude Code plugin (.claude-plugin/plugin.json): opening it (or
installing it as a plugin) exposes the Agent Skill (.claude/skills/mxl-agent/), registers the
optional MCP server above (.mcp.json, still gated behind the mcp/render extras actually
being installed), and installs one guardrail hook
(hooks/hooks.json -> hooks/block-workspace-mutation.sh): a PreToolUse check on
Edit/Write/MultiEdit that blocks direct hand-edits to files under a session's workspace
directory (.mxl-agent/workspaces/), since that tree is managed exclusively by mxl-agent's own
transactional revision system (CLAUDE.md: "Mutations must be typed, dry-runnable, transactional,
reversible..."). The hook fails open (allows the edit) if it can't parse its input or can't find a
working Python interpreter -- it is a guardrail on top of the transaction system, not the only
protection. Validate the manifest with claude plugin validate . (a pre-existing "CLAUDE.md at
the plugin root isn't loaded as project context" warning is expected and intentional -- that file
is this repo's own development instructions, not plugin-shipped user context).
Metadata
Release files for mxl-agent 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mxl_agent-0.1.1.tar.gz | 898.4 kB | With provenance | Details for mxl_agent-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mxl_agent-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for mxl_agent-0.1.1-py3-none-any.whl |
Total release size: 1.5 MB
Release files / mxl_agent-0.1.1.tar.gz
| Download URL | mxl_agent-0.1.1.tar.gz |
|---|---|
| Size | 898.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
12f8ad79c68c75670cdfe826ea3599a7d8432463bd9bab376eb62aa3eb193efa
|
|
BLAKE2b-256 checksum How to use checksums |
52fcf91fce8908b5fc5c3324617398edecb57ed02091c4f32a725df46ff44efa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logRelease files / mxl_agent-0.1.1-py3-none-any.whl
| Download URL | mxl_agent-0.1.1-py3-none-any.whl |
|---|---|
| Size | 629.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fd902287c5221bd425179e89ea30de334d8168ba56050240d2b77efbd29a55c6
|
|
BLAKE2b-256 checksum How to use checksums |
74335affbbf5d7c4fe61a51d5a7415f7c4b787d2fba8c953acdf72eb5ff6ac44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logSecurity for mxl-agent 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for mxl_agent-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.