This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+11 more
Affected surfaces
Summary
AI summaryUpdates PRs in this release, https://github.com/logly/mureo/issues/149, and configure across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds "Plugin credentials" section to `mureo configure` UI for per-account credential input. Adds "Plugin credentials" section to `mureo configure` UI for per-account credential input. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Feature | Medium |
Introduces HTTP route `GET /api/credentials/plugins` returning plugin credential metadata. Introduces HTTP route `GET /api/credentials/plugins` returning plugin credential metadata. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Feature | Medium |
Introduces HTTP route `POST /api/credentials/plugins/save` for persisting plugin credential values. Introduces HTTP route `POST /api/credentials/plugins/save` for persisting plugin credential values. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Feature | Medium |
Adds Python module `mureo.web.plugin_credentials` exposing credential operations programmatically. Adds Python module `mureo.web.plugin_credentials` exposing credential operations programmatically. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Bugfix | Low |
Removes need for operators to manually edit `claude_desktop_config.json` env vars for plugin API keys. Removes need for operators to manually edit `claude_desktop_config.json` env vars for plugin API keys. Source: llm_adapter@2026-05-27 Confidence: high |
— |
Full changelog
mureo configure registers installed-plugin per-account credentials
Closes #149 Part 2 (Part 1 — the secret: bool flag on AccountCredentialField — shipped in v0.9.12).
Added — Plugin credentials in the configure UI
mureo configure gains a "Plugin credentials" section under the Setup tab. For every installed provider (built-in or third-party) that declares non-empty account_credential_fields, the section renders one collapsible form. Each declared field becomes an input:
secret=True→<input type="password" autocomplete="new-password">with a "leave blank to keep current value" placeholder. Secret inputs are cleared on successful save so the next view never holds the plaintext.secret=False→ plain text input with the declared placeholder.required=Trueshown with*after the label.
Submitting persists the values to ~/.mureo/credentials.json at {<provider_name>: {<field_key>: <value>}} — the same JSON shape built-in Google Ads / Meta Ads adapters already read via FilesystemSecretStore.load(), so plugins pick up the values without additional wiring. Operators no longer need to hand-edit env vars in claude_desktop_config.json to deliver an API key to a plugin.
New HTTP routes
Two new endpoints under the existing CSRF + Host-header gate:
GET /api/credentials/plugins— returns{plugins: [{provider_name, display_name, fields: [...]}]}, sorted byprovider_name, filtered to providers with non-emptyaccount_credential_fields.POST /api/credentials/plugins/save— writes one provider's values. Response envelope is{status: "ok", provider_name, accepted_keys}whereaccepted_keysis the subset this call actually changed (blank-secret-skipped entries are absent).
Save policy:
| Condition | Result |
|---|---|
| Unknown provider | 400 unknown_provider |
| Non-string value | 400 invalid_field_value |
| required=True field with no value to persist | 400 required_field_missing |
| Unknown field key in body | Silently dropped (stale-UI defence) |
| Blank secret=True value with existing stored value | Keep existing |
| Blank secret=True value with no existing stored value, required=True | 400 required_field_missing |
| Blank secret=False value, required=True | 400 required_field_missing |
New module mureo.web.plugin_credentials
The same two operations are exposed as a Python API for programmatic callers — useful for plugin test harnesses and alternate configure UIs. Secret values never appear in mureo's log output; only the list of accepted keys is logged for auditability.
PRs in this release
- #150 — feat(configure): register installed-plugin per-account credentials via the UI
Upgrade
pip install --upgrade mureo
No code changes required for callers or existing plugins. Plugin authors whose authentication model includes a per-account API key (or any other per-account secret) can now declare AccountCredentialField(secret=True, required=True, ...) on their provider and operators will register the value through the configure UI, no env-var hand-editing required.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About logly/mureo
Framework for AI agents (Claude Code, Cursor, Codex, Gemini) to operate Google Ads, Meta Ads, and Search Console. Grounded in a local STRATEGY.md — not metric-chasing. Defense-in-depth security, local-first. Apache 2.0.
Related context
Related tools
Beta — feedback welcome: [email protected]