All checks were successful
Test / bun test (pull_request) Successful in 23s
Reno-Stars (airenostars) verified install end-to-end against v0.4.0-gitea.2
ONLY after applying a local patch. This ships the same patch upstream so
fresh self-hosters get a working install out-of-the-box, no per-host
workaround required.
P0 (CRITICAL) — declare experimental.claude/channel capability
The Server constructor previously declared `{ capabilities: { tools: {} } }`.
Without `experimental['claude/channel']` (and the companion
`claude/channel/permission` flag), Claude Code's MCP host treats the
server as tool-only and silently drops every `notifications/claude/channel`
event we emit. Symptom: poll loop runs cleanly, cursor advances, stderr
says "delivered", message never reaches the conversation. Mirrors the
shape used by the official telegram channel plugin's MCP server.
P1 — filter outbound `method=notify` rows in pollWorkspace
The activity feed under `?type=a2a_receive` ALSO returns the agent's own
outbound /notify calls (recorded with method='notify' and source_id=null
on the same workspace_id). emitNotification would classify them as
canvas_user inbound and the reply would echo back as a fake user turn one
poll later — the model would see its own answer as a new user prompt and
try to "respond" to it. Filtered at the per-row layer via a new pure
helper `shouldEmitActivity` so the cursor still advances past the
skipped rows.
P2 — README accuracy
- Drop the `claude --channels plugin:…` one-liner instruction (silently
no-ops on Claude Code 2.1.129; only the marketplace flow works).
- Document `allowedChannelPlugins` schema: it's an array of OBJECTS
`{ plugin, marketplace }`, not strings — the host's Zod validator
silently ignores string entries, which is the most common cause of
"plugin installed but no notifications" reports.
- Document `allowedChannelPlugins` LOCATION: only takes effect from the
managed-settings file (/Library/Application Support/ClaudeCode/
managed-settings.json on macOS, /etc/claude-code/managed-settings.json
on Linux), NOT from `~/.claude/settings.json`. Most self-hosters try
user settings first.
Tests
Added channel-capabilities-and-filter.test.ts (9 cases) that pin both
regressions via two small exported surfaces (`SERVER_CAPABILITIES`,
`shouldEmitActivity`). Verified the new tests fail when each fix is
reverted: removing the experimental block makes 2 tests fail; removing
the notify-method filter makes 2 tests fail. 27 pass / 0 fail (was 18).
Version bump (all four manifests + the Server() literal):
0.4.0-gitea.2 → 0.4.0-gitea.3.
Closes Reno-Stars feedback P0+P1+P2.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
870 B
JSON
29 lines
870 B
JSON
{
|
|
"name": "molecule-channel",
|
|
"owner": {
|
|
"name": "Molecule AI",
|
|
"email": "support@moleculesai.app",
|
|
"url": "https://moleculesai.app"
|
|
},
|
|
"plugins": [
|
|
{
|
|
"name": "molecule",
|
|
"source": {
|
|
"source": "url",
|
|
"url": "https://git.moleculesai.app/molecule-ai/molecule-mcp-claude-channel.git"
|
|
},
|
|
"description": "Bridges Molecule A2A traffic into a Claude Code session via MCP. Subscribe to one or more Molecule workspaces; A2A messages from peers surface as conversation turns; replies route back through Molecule's A2A endpoints.",
|
|
"version": "0.4.0-gitea.3",
|
|
"homepage": "https://git.moleculesai.app/molecule-ai/molecule-mcp-claude-channel",
|
|
"license": "Apache-2.0",
|
|
"keywords": [
|
|
"molecule",
|
|
"molecule-ai",
|
|
"a2a",
|
|
"channel",
|
|
"mcp"
|
|
]
|
|
}
|
|
]
|
|
}
|