fast MCP server: debug & config namespaces, external-source playback, OpenClaw/Hermes presets (v0.7.1)#4019
Open
trudenboy wants to merge 10 commits into
Open
fast MCP server: debug & config namespaces, external-source playback, OpenClaw/Hermes presets (v0.7.1)#4019trudenboy wants to merge 10 commits into
trudenboy wants to merge 10 commits into
Conversation
3 tasks
trudenboy
added a commit
to trudenboy/ma-provider-mcp
that referenced
this pull request
May 29, 2026
….5.1) (#101) Upstream CI for the inlined provider (music-assistant/server#4019) went red on two artefacts of the `provider.` -> `music_assistant.providers.fastmcp_server.` sed rewrite, not on real defects (all 510 tests pass here): - test_models.py used `import provider.models` + bare `getattr(provider.models, name)`. The rewrite cannot safely touch bare `provider.` attribute access (it collides with the legitimate `provider` fixture variable in test_update_config.py), so the usage stayed unrewritten -> NameError upstream. Switch to `from provider import models` + `getattr(models, name)`, which is covered by the `from provider import` rule and needs no bare-attr rewrite. - conftest.py used per-line `# noqa: PLC0415` on lazy `from provider.X import Y` imports. The rewrite lengthens those lines; ruff format then reflows them and detaches the trailing noqa -> PLC0415 fired upstream. Move to a file-level PLC0415 suppression (with rationale) that survives the rewrite. Bumps VERSION to 0.5.1 and adds a CHANGELOG entry. Co-authored-by: Administrator <admin@example.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merged
3 tasks
trudenboy
added a commit
to trudenboy/ma-provider-mcp
that referenced
this pull request
May 29, 2026
PR #101 (0.5.1) only converted conftest.py and test_models.py to a file-level PLC0415 suppression. The new ma-provider-tools rewrite-safe guard surfaced two more files whose `from provider.X import Y # noqa: PLC0415` lines rewrite past the upstream 100-col limit (104-106 cols), so ruff reflows them and the trailing noqa detaches: - tests/test_config_secret.py (build_config_server import) - tests/test_debug_security.py (middleware / tools.debug imports) Both were confirmed failing in music-assistant/server#4019's lint job below the lines #101 fixed. Move them to the same file-level suppression so the inlined upstream PR lints clean. Bumps VERSION to 0.5.2. Co-authored-by: Administrator <admin@example.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
MarvinSchenkel
left a comment
There was a problem hiding this comment.
Two problem-level findings inline. Suggestions from my console review (event_buffer docstring, health_summary reading logs when DEBUG_LOGS off, module-vs-instance lock scope, json.dumps in _State.charge) are not posted here.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this implement/fix?
FastMCP Server provider → v0.7.1
Updates the existing
fastmcp_serverplugin provider from v0.3.35 (currentdev) to v0.7.1, landing two off-by-default capability namespaces, anonboarding convenience for the Connect Wizard, and richer now-playing state for
external "Connect"-style sources. A default installation sees no new tool
surface — every new tool is gated behind a permission
ConfigEntrythatships disabled, so operators opt in per capability.
Source: trudenboy/ma-provider-mcp · tag v0.7.1
debugnamespace — introspection & troubleshooting (was v0.4.0)Twelve read-mostly tools for diagnosing a running Music Assistant instance over
MCP, behind five off-by-default flags (
Debug: providers,Debug: inspect,Debug: events,Debug: logs,Debug: reload):debug_list_providers,debug_health_summary,debug_list_package_versions,debug_list_webserver_routes.debug_inspect_player,debug_inspect_queue,debug_inspect_provider,debug_inspect_provider_config.debug_recent_events,debug_event_buffer_stats, backed by abounded in-memory ring buffer (capacity configurable, default off).
debug_tail_log, reading only files under MA's ownstorage_path(no arbitrary filesystem access).debug_reload_provider(the one mutating tool in thisnamespace, gated by its own flag).
Supporting internals live under
debug/: a ring event buffer, a depth- andcycle-protected object inspector (back-reference skip-list to avoid serialising
the whole object graph), and a storage-scoped log reader.
Robustness refinements (v0.7.1): the log-scan tools (
debug_tail_logand theerror count inside
debug_health_summary) now run their synchronous file I/Ooff the event loop;
debug_health_summaryhonours theDebug: logsgatebefore reading any log file; reload serialisation is per-runtime rather than
process-global; and the object inspector's byte-budget accounting no longer
round-trips every value through
json.dumps.confignamespace — view & edit settings (v0.5.0)Fourteen tools to read and write MA core, provider, and player configuration
over MCP, behind five off-by-default flags — four capability flags
(
Config: read settings,Config: edit provider settings,Config: edit core settings,Config: edit player settings) plus anorthogonal
Config: allow writing secret valuesgate:config_list_targets,config_get_core,config_get_provider,config_get_player,config_get_entries,config_get_dsp.SECURE_STRINGvalues are masked by MA's own serialiser before they leave the process.
config_set_core_value,config_set_provider_value,config_set_player_value(validate + diff,no persistence).
config_save_core,config_save_provider,config_save_player,config_save_dsp. Writes delegate to MA's atomic saveprimitives (validate → encrypt via
to_raw→ persist → reload, withrollback) — the provider never hand-rolls encryption or persistence.
config_trigger_provider_action.Writes are validated against each
ConfigEntry(type coercion, explicit range,per-member options) before they reach MA, and an optional elicitation
confirmation gate (
require_confirmation, default on) prompts before anymutation. Secret-valued keys are rejected atomically unless the dedicated
secret flag is enabled — that flag is re-evaluated per request, so toggling it
takes effect without a provider reload.
External / Connect-source now-playing in briefs (v0.7.0 / v0.7.1)
When a player streams from an external "Connect"-style source (Spotify Connect,
AirPlay, Yandex Ynison), MA streams the audio out-of-band, so the player's own
playback_statestaysidlewhile audio is actually playing. The player andqueue query tools now treat the active queue as the source of truth for
playback state — matching what MA's own interface shows:
players_list_players/players_get_player(and theplayer://resource)report
playing/pausedfrom the active queue instead of a misleadingidle.external_sourcefield carries the controlling provider's instance id,so a client can tell which provider is driving playback (and distinguish
several instances of the same provider). It is
nullfor normal,self-driven playback.
wrapper name, in both player and queue views.
This is an enhancement to existing query tools — no new tools and no new
permission flags; it is gated by the same player/queue query permissions
that already exist.
Connect Wizard — OpenClaw & Hermes presets (v0.6.0)
The Connect Wizard's client catalogue gains two entries — OpenClaw and
Hermes (Nous Research) — alongside the existing clients (Claude Code /
Desktop, Cursor, Windsurf, VS Code, ChatGPT, Codex, Gemini, Cline, Zed). For
each, the wizard mints a per-client long-lived token and renders a
ready-to-paste config snippet pointing at the server's streamable-HTTP endpoint
with an
Authorization: Bearerheader — an OpenClawopenclaw mcp set …command and a Hermes
~/.hermes/config.yamlblock respectively. This is apure onboarding convenience: no new tools, no new permission flags, no
runtime/transport changes — the snippets target the same endpoint and auth
the wizard already wires for every other client.
Related issue (if applicable):
Types of changes
bugfixnew-featureenhancementnew-providerbreaking-changerefactordocumentationmaintenancecidependenciesChecklist
pre-commit run --all-filespasses.pytestpasses, and tests have been added/updated undertests/where applicable.music-assistant/modelsis linked.music-assistant/frontendis linked.