Mask MCP header and env values over the API #4

Merged
jacensekai merged 2 commits from mcp-secret-masking into master 2026-10-13 15:05:58 -04:00
Owner

MCP server headers and env vars usually carry credentials (Authorization
headers, API keys), but GET /api/config returned them in full, so anyone
holding the Lumina token could copy every third-party key out rather
than only use them through the agent.

Every header and env value is now sent as the mask, like the LLM key and
the OAuth client secret. On save, a masked value keeps the one stored
under the same server name and key. A masked value with nothing to keep
(a renamed key or server) is refused with a 400 instead of being saved
as the literal mask, which would silently break the server. The form
hints explain the dots.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

MCP server headers and env vars usually carry credentials (Authorization headers, API keys), but GET /api/config returned them in full, so anyone holding the Lumina token could copy every third-party key out rather than only use them through the agent. Every header and env value is now sent as the mask, like the LLM key and the OAuth client secret. On save, a masked value keeps the one stored under the same server name and key. A masked value with nothing to keep (a renamed key or server) is refused with a 400 instead of being saved as the literal mask, which would silently break the server. The form hints explain the dots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mask MCP header and env values over the API
Some checks failed
CI / End-to-end (Playwright) (pull_request) Has been cancelled
CI / Docker images and sandbox (pull_request) Has been cancelled
CI / Compose stack smoke test (pull_request) Has been cancelled
CI / Typecheck, build and test (pull_request) Has been cancelled
1c34d2c1dd
MCP server headers and env vars usually carry credentials (Authorization
headers, API keys), but GET /api/config returned them in full, so anyone
holding the Lumina token could copy every third-party key out rather
than only use them through the agent.

Every header and env value is now sent as the mask, like the LLM key and
the OAuth client secret. On save, a masked value keeps the one stored
under the same server name and key. A masked value with nothing to keep
(a renamed key or server) is refused with a 400 instead of being saved
as the literal mask, which would silently break the server. The form
hints explain the dots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merge branch 'master' into mcp-secret-masking
Some checks failed
CI / Typecheck, build and test (pull_request) Successful in 16s
CI / End-to-end (Playwright) (pull_request) Successful in 51s
CI / Docker images and sandbox (pull_request) Failing after 11s
CI / Compose stack smoke test (pull_request) Failing after 6s
3ec2c2b667
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
jacensekai/lumina!4
No description provided.