forked from molecule-ai/molecule-core
docs(canvas): update Universal MCP snippet — molecule-mcp now standalone
The canvas tab snippet for the Universal MCP path was written before this PR added the built-in register + heartbeat thread. Earlier wording described it as "outbound-only — pair with the Claude Code or Python SDK tab for heartbeat + inbound messages" — that's stale. molecule-mcp now handles register + heartbeat itself; the only thing it doesn't yet do is inbound A2A delivery. Updated: - externalUniversalMcpTemplate header comment + body — describes standalone behavior, points operators at SDK/channel only when they need INBOUND (not heartbeat). - Drops the now-redundant curl-register step from the snippet — the binary registers itself on startup. - Canvas modal label likewise updated. No runtime / behavior change; pure docs polish so a copy-pasting operator's mental model matches what the binary actually does. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
427300f3a4
commit
876c0bfcd4
@ -195,7 +195,7 @@ export function ExternalConnectModal({ info, onClose }: Props) {
|
|||||||
{tab === "mcp" && filledUniversalMcp && (
|
{tab === "mcp" && filledUniversalMcp && (
|
||||||
<SnippetBlock
|
<SnippetBlock
|
||||||
value={filledUniversalMcp}
|
value={filledUniversalMcp}
|
||||||
label="Universal MCP — outbound tools for any MCP-aware runtime (Claude Code, hermes, codex). Pair with Python or Claude Code tab for heartbeat + inbound."
|
label="Universal MCP — standalone register + heartbeat + tools for any MCP-aware runtime (Claude Code, hermes, codex). Pair with Python or Claude Code tab if you need inbound A2A delivery."
|
||||||
copyKey="mcp"
|
copyKey="mcp"
|
||||||
copied={copiedKey === "mcp"}
|
copied={copiedKey === "mcp"}
|
||||||
onCopy={() => copy(filledUniversalMcp, "mcp")}
|
onCopy={() => copy(filledUniversalMcp, "mcp")}
|
||||||
|
|||||||
@ -104,7 +104,7 @@ claude --channels plugin:molecule@Molecule-AI/molecule-mcp-claude-channel
|
|||||||
# pairing flow, push-mode upgrade, and v0.2 roadmap.
|
# pairing flow, push-mode upgrade, and v0.2 roadmap.
|
||||||
`
|
`
|
||||||
|
|
||||||
// externalUniversalMcpTemplate — runtime-agnostic outbound tool path.
|
// externalUniversalMcpTemplate — runtime-agnostic standalone path.
|
||||||
// Ships as the `molecule-mcp` console script in the
|
// Ships as the `molecule-mcp` console script in the
|
||||||
// molecule-ai-workspace-runtime PyPI wheel (workspace/mcp_cli.py).
|
// molecule-ai-workspace-runtime PyPI wheel (workspace/mcp_cli.py).
|
||||||
// Any MCP-aware runtime (Claude Code, hermes, codex, third-party)
|
// Any MCP-aware runtime (Claude Code, hermes, codex, third-party)
|
||||||
@ -112,41 +112,38 @@ claude --channels plugin:molecule@Molecule-AI/molecule-mcp-claude-channel
|
|||||||
// container-bound runtimes use today: delegate_task, list_peers,
|
// container-bound runtimes use today: delegate_task, list_peers,
|
||||||
// send_message_to_user, commit_memory, etc.
|
// send_message_to_user, commit_memory, etc.
|
||||||
//
|
//
|
||||||
// Outbound-only: the binary doesn't heartbeat or accept inbound A2A.
|
// Standalone: the binary itself handles register-on-startup +
|
||||||
// Pair with the Claude Code channel tab (poll-based inbound) or the
|
// continuous heartbeats (daemon thread, 20s cadence). No separate
|
||||||
// Python SDK tab (push-mode inbound + heartbeat) to keep the workspace
|
// SDK or channel process needed to keep the workspace online. The
|
||||||
// online and surface inbound messages. The snippet calls that out
|
// only thing it does NOT yet do is poll inbound A2A messages — for
|
||||||
// explicitly so an operator copy-pasting it doesn't end up with a
|
// runtimes that need their agent to react to canvas messages or
|
||||||
// silently-offline workspace.
|
// peer-initiated tasks, pair with the Claude Code channel tab
|
||||||
|
// (poll-based inbound delivery into a Claude Code session) or the
|
||||||
|
// Python SDK tab (push-mode inbound + heartbeat).
|
||||||
//
|
//
|
||||||
// Origin/WAF: handled automatically by platform_auth.auth_headers()
|
// Origin/WAF: handled automatically by platform_auth.auth_headers()
|
||||||
// in the wheel — operator doesn't need to configure anything.
|
// in the wheel — operator doesn't need to configure anything.
|
||||||
const externalUniversalMcpTemplate = `# Universal MCP — call platform tools from any MCP-aware runtime
|
const externalUniversalMcpTemplate = `# Universal MCP — standalone register + heartbeat + outbound platform tools
|
||||||
# (Claude Code, hermes, codex, etc.). Outbound-only — pair with the
|
# for any MCP-aware runtime (Claude Code, hermes, codex, etc.).
|
||||||
# Claude Code or Python SDK tab for heartbeat + inbound messages.
|
# Pair with the Claude Code or Python SDK tab if your runtime needs
|
||||||
|
# inbound A2A delivery (canvas messages → agent conversation turns).
|
||||||
|
|
||||||
# 1. Install the workspace runtime wheel:
|
# 1. Install the workspace runtime wheel:
|
||||||
pip install molecule-ai-workspace-runtime
|
pip install molecule-ai-workspace-runtime
|
||||||
|
|
||||||
# 2. One-shot register (pair with SDK/channel for ongoing heartbeat):
|
# 2. Wire molecule-mcp into your agent's MCP config. Claude Code:
|
||||||
export WORKSPACE_AUTH_TOKEN="<paste from create response>"
|
|
||||||
curl -fsS -X POST "{{PLATFORM_URL}}/registry/register" \
|
|
||||||
-H "Authorization: Bearer $WORKSPACE_AUTH_TOKEN" \
|
|
||||||
-H "Origin: {{PLATFORM_URL}}" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{"id":"{{WORKSPACE_ID}}","url":"","agent_card":{"name":"My Agent"},"delivery_mode":"poll"}'
|
|
||||||
|
|
||||||
# 3. Wire molecule-mcp into your agent's MCP config. Claude Code:
|
|
||||||
claude mcp add molecule -s user -- env \
|
claude mcp add molecule -s user -- env \
|
||||||
WORKSPACE_ID={{WORKSPACE_ID}} \
|
WORKSPACE_ID={{WORKSPACE_ID}} \
|
||||||
PLATFORM_URL={{PLATFORM_URL}} \
|
PLATFORM_URL={{PLATFORM_URL}} \
|
||||||
MOLECULE_WORKSPACE_TOKEN="$WORKSPACE_AUTH_TOKEN" \
|
MOLECULE_WORKSPACE_TOKEN="<paste from create response>" \
|
||||||
molecule-mcp
|
molecule-mcp
|
||||||
|
|
||||||
# Same env-var contract works with hermes-agent, codex, or any MCP
|
# molecule-mcp registers the workspace + heartbeats every 20s in a
|
||||||
# stdio runtime. Tools exposed: delegate_task, delegate_task_async,
|
# daemon thread, then runs the MCP stdio loop. Same env-var contract
|
||||||
# check_task_status, list_peers, get_workspace_info,
|
# works with hermes-agent, codex, or any MCP stdio runtime. Tools
|
||||||
# send_message_to_user, commit_memory, recall_memory.
|
# exposed: delegate_task, delegate_task_async, check_task_status,
|
||||||
|
# list_peers, get_workspace_info, send_message_to_user,
|
||||||
|
# commit_memory, recall_memory.
|
||||||
#
|
#
|
||||||
# Origin/WAF handling is built into the wheel — no manual headers
|
# Origin/WAF handling is built into the wheel — no manual headers
|
||||||
# needed when calling tools through the MCP server.
|
# needed when calling tools through the MCP server.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user