MCP servers imported from ~/.claude.json, ~/.codex/config.toml or .mcp.json fail to start in chats (missing launcher, ENOENT)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 68/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- typescript
- Domain
- ai-infra-agents, backend
Research direction
Start in packages/agent-app/src/runtime/domains/mcp.ts, especially syncDetected() and the thread-config builder around line 304; compare them with the add and update handlers that call writeLauncher(). Trace how detected entries are stored and how launcher scripts are generated, then check that new and changed stdio servers with arguments use launchers matching their current settings. Done when the acceptance cases work for Claude Code, Codex, and folder .mcp.json sources.
Written by the indexing model from the issue text.
Description
Problem
MCP servers that Muster detects from ~/.claude.json, ~/.codex/config.toml or a folder's .mcp.json fail to start in a chat when they are stdio servers with arguments, which covers almost every npx … or uvx … server. The agent reports them as failed with ENOENT (Claude Code, for example, shows posix_spawn '…/mcp-launchers/<id>.sh'). Settings › MCP servers still shows the same servers as healthy, because its own test starts the command directly.
Turning a server off and on in Settings makes it work, because that writes its launcher. The bug comes back for any server detected later.
Cause
In packages/agent-app/src/runtime/domains/mcp.ts:
- The thread config points every stdio server with arguments at its launcher script,
<dataDir>/mcp-launchers/<id>.sh(line 304):configOverrides[`${key}.command`] = entry.args.length ? launcher(entry.id) : entry.command; - Only the add and update handlers call
writeLauncher()(lines 332 and 340). syncDetected()(line 123) stores detected servers but never writes their launcher. A new detected server therefore has no script. A detected server whose command or arguments change keeps a stale script that still runs the old command.
Expected
- Every stdio server with arguments that is handed to an agent has a launcher matching its current command and arguments, whatever its source (Settings,
~/.claude.json,~/.codex/config.toml,.mcp.json). - For example,
syncDetected()could callwriteLauncher()for new or changed entries, or the thread-config builder could write the launcher when it is missing or out of date before it uses the path.
Acceptance
- With a fresh data folder and a stdio server with arguments in
~/.claude.json(e.g.npx -y @modelcontextprotocol/server-memory), a new Claude Code chat lists the server as connected and can call its tools, without anyone opening Settings. - The same works for a server in
~/.codex/config.tomlin a Codex chat, and for one in a folder's.mcp.json. - Changing a detected server's arguments in its source file makes the next chat start it with the new arguments.
Seen on Muster Agent 0.3.14 and 0.3.15 (Linux, Arch) and still present on main (b2c9d8836).
- Dominant language
- TypeScript
- Stars
- 3
- Forks
- 0
- Avg merge
- 17h 33m
- Merged PRs (30d)
- 163
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from musterhq/muster-code
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
musterhq/muster-code#866 ·
Maintainers usually reply within 1 day
-
p2 type:feature
Difficulty 5/5 Over a week Newbie friendliness 35/100
musterhq/muster-code#843 · 1 comment ·
Maintainers usually reply within 1 day
-
p1 type:feature
Difficulty 5/5 Over a week Newbie friendliness 25/100
musterhq/muster-code#840 ·
Maintainers usually reply within 1 day
-
p1 type:feature
Difficulty 5/5 Over a week Newbie friendliness 30/100
musterhq/muster-code#829 ·
Maintainers usually reply within 1 day
-
type:bug
Difficulty 3/5 1-2 days Newbie friendliness 70/100
musterhq/muster-code#815 ·
Maintainers usually reply within 1 day
All issues in musterhq/muster-code
Similar issues
-
[analytics-core] getQueryParams does not decode `+` as space and truncates values containing `=`Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
amplitude/Amplitude-TypeScript#2179 · 1 comment ·
Maintainers usually reply within 2 days
-
ci good first issue severity: low
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
TMHSDigital/GH-Arcade#111 ·
-
AsnIntegerConverter.toASN coerces strings with +value, rounding integers outside safe-integer rangeOpen
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PeculiarVentures/asn1-schema#189 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 4 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100