On semble 0.5.2, semble install reports the MCP server integration as skipped for every agent whose config is JSON:
Claude Code
– IntegrationType.MCP (skipped) — JSON5 grammar unavailable — add manually (see README) → C:\Users\...\.claude.json
✓ IntegrationType.INSTRUCTIONS (updated) → C:\Users\...\.claude\CLAUDE.md
✓ IntegrationType.SUBAGENT (created) → C:\Users\...\.claude\agents\semble-search.md
So the two integrations that describe the MCP tools land, but the MCP server itself is never registered — the generated CLAUDE.md tells the agent to call mcp__semble__search, and that tool does not exist. The install looks like it succeeded (Done!, exit 0).
Root cause
semble/installer/config.py::_json5_parser does:
try:
download(["json5"])
_json5_parser_cache = get_parser(cast(SupportedLanguage, "json5"))
except Exception:
_json5_parser_cache = None
with the comment "json5 ships in tree-sitter-language-pack but isn't in its typed language list". On the pinned tree-sitter-language-pack==1.6.2 that is no longer true:
>>> from tree_sitter_language_pack import get_parser
>>> get_parser("json")
<OK>
>>> get_parser("json5")
LanguageNotFoundError: Language 'json5' not found
>>> get_parser("jsonc")
LanguageNotFoundError: Download error: Language 'jsonc' not available for download. Available groups: ["all"]
json5 is not bundled and is not downloadable — the name isn't known to the pack at all (note it doesn't even produce the "not available for download" message that jsonc does).
Impact
This is not Windows-specific and not network-specific. On any OS, any install resolving tree-sitter-language-pack==1.6.2, the JSON5 parser is None, _json5_object returns "skipped", and merge_mcp never writes. That covers every agent using the JSON path — Claude Code, Cursor, VS Code, Windsurf, opencode. Codex is unaffected because it takes the TOML text path.
Worth confirming on CI: if the test suite has a pinned or cached grammar it may not surface there.
Workaround
Register the server manually. For Claude Code:
claude mcp add semble -s user -- uvx --from "semble[mcp]" semble
(I pointed it at the already-installed executable instead — claude mcp add semble -s user -- /path/to/semble — which avoids a uvx resolve on every launch, since bare semble with no subcommand starts the MCP server.)
Suggested fixes
- Don't require a JSON5 grammar for this. These config files are JSON with occasional comments/trailing commas. A
json5/pyjson5 pure-Python dependency, or json.loads with a comment-stripping fallback, would remove a tree-sitter grammar download from the install path entirely.
- If the grammar approach stays, fall back to plain
json when json5 is unavailable — .claude.json is valid strict JSON in practice, so the merge would succeed for most users.
- Don't swallow the cause:
except Exception hides LanguageNotFoundError, and the user-facing string "JSON5 grammar unavailable" reads like a transient download problem rather than a permanent dependency mismatch. Logging the exception would have made this a one-minute diagnosis.
- Exit non-zero, or at minimum print a prominent warning with the exact
claude mcp add command, when MCP is skipped but instructions/subagent were written — the current combination produces a config that references tools that don't exist.
Possibly the same underlying area as #224 (grammar download failures reported misleadingly and silently degrading behaviour), but the blast radius here is the MCP install path rather than chunking.
On semble 0.5.2,
semble installreports the MCP server integration as skipped for every agent whose config is JSON:So the two integrations that describe the MCP tools land, but the MCP server itself is never registered — the generated
CLAUDE.mdtells the agent to callmcp__semble__search, and that tool does not exist. The install looks like it succeeded (Done!, exit 0).Root cause
semble/installer/config.py::_json5_parserdoes:with the comment "json5 ships in tree-sitter-language-pack but isn't in its typed language list". On the pinned
tree-sitter-language-pack==1.6.2that is no longer true:json5is not bundled and is not downloadable — the name isn't known to the pack at all (note it doesn't even produce the "not available for download" message thatjsoncdoes).Impact
This is not Windows-specific and not network-specific. On any OS, any install resolving
tree-sitter-language-pack==1.6.2, the JSON5 parser isNone,_json5_objectreturns"skipped", andmerge_mcpnever writes. That covers every agent using the JSON path — Claude Code, Cursor, VS Code, Windsurf, opencode. Codex is unaffected because it takes the TOML text path.Worth confirming on CI: if the test suite has a pinned or cached grammar it may not surface there.
Workaround
Register the server manually. For Claude Code:
(I pointed it at the already-installed executable instead —
claude mcp add semble -s user -- /path/to/semble— which avoids auvxresolve on every launch, since baresemblewith no subcommand starts the MCP server.)Suggested fixes
json5/pyjson5pure-Python dependency, orjson.loadswith a comment-stripping fallback, would remove a tree-sitter grammar download from the install path entirely.jsonwhenjson5is unavailable —.claude.jsonis valid strict JSON in practice, so the merge would succeed for most users.except ExceptionhidesLanguageNotFoundError, and the user-facing string "JSON5 grammar unavailable" reads like a transient download problem rather than a permanent dependency mismatch. Logging the exception would have made this a one-minute diagnosis.claude mcp addcommand, when MCP is skipped but instructions/subagent were written — the current combination produces a config that references tools that don't exist.Possibly the same underlying area as #224 (grammar download failures reported misleadingly and silently degrading behaviour), but the blast radius here is the MCP install path rather than chunking.