
CoralSwarm Connect
com.coralswarm由 coralswarm.com 发布官方发布者v1.1.2更新于 Oct 24, 2026
Search and save your coding work in a CoralSwarm ocean: sessions, decisions, meetings.
概览
CoralSwarm Connect 让 AI 助理搜索并保存编码会话、决策与会议记录到 CoralSwarm ocean。
- 可以做什么
- 列出并切换可用的 ocean 与组织工作区,选择个人或组织范围。搜索已保存的内容与活动,并读取特定 reef 的资料。新增 context 以保存会话检查点、决策与笔记。列出会话并查看近期活动。通过插件钩子在对话中自动提示保存,并在压缩前与结束时补存。
- 适用场景
- 适合希望 AI 助理在编码过程中自动把会话、决策和会议要点保存到 CoralSwarm ocean 的开发者,尤其是使用 Claude Code、Cursor 或 Codex 并希望中途定期存档的人。若只需手动搜索和保存,也可只用原始 MCP 连接。
- 运行要求
- 需要支持 MCP 的客户端,以流式 HTTP 连接到远程端点;必须完成 OAuth 登录(Clerk,含动态客户端注册),无需 API 密钥。插件形式另需 Node.js 运行钩子脚本,并需网络连接。
安装
在 SourceWeft 中
- 打开 控制台中的 CoralSwarm Connect,将其添加到工作区。
- 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
- 为需要使用其工具的对话启用该服务。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
交给智能体安装
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/com.coralswarm%2Fcoralswarm/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。其他 MCP 客户端
把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。
{
"mcpServers": {
"coralswarm-connect": {
"type": "http",
"url": "https://api.coralswarm.com/mcp"
}
}
}README
CoralSwarm Connect
[CoralSwarm]Connect the CoralSwarm MCP and turn on automatic, in-session capture of your work into your ocean — at natural checkpoints during the session, not only when it ends. Ships for Claude Code, Cursor, and Codex. Enable the plugin in one manager; leaving two copies enabled will fire SessionStart twice (the kernel no-ops the duplicate).
Install
Public directory submission materials and the separate OpenAI ZIP builder are documented in directory publication. The OpenAI directory package supports requested searches and selected saves without capture hooks; the coding plugin below retains its existing capture behavior.
There are two levels. The plugin gives you the MCP tools plus the capture hooks and the bundled skill; the raw MCP URL gives you the tools only, and works in any MCP client.
coralswarm-connect@coralswarm-connect is not a typo: the first half is the
plugin, the second is the marketplace this repo publishes (both are named
coralswarm-connect — see .claude-plugin/marketplace.json). The same two
commands work from a shell as claude plugin marketplace add … /
claude plugin install ….
After any of these, authenticate: in Claude Code run /mcp and Authenticate
on the coralswarm server; in Cursor use /mcp login or the mcp_auth prompt.
Auth is OAuth (Clerk) with dynamic client registration — there is no API key to
paste and nothing to put in a config file.
The MCP URL must be that literal string. Cursor rejects a fly.dev resource
that does not match the server's protected-resource metadata.
CoralSwarm Connect is not listed in any client's built-in plugin or connector directory yet. The paths above are the ones that work today. This repo also ships
server.jsonfor the official MCP Registry under the namecom.coralswarm/coralswarm; it is published by a release tag (see Releasing), so treat a registry listing as present only once a tag has shipped.
Do not run scripts/install.mjs when the plugin is enabled — that would
register the same events a second time in settings.json.
Public plugin repo. This repository is the marketplace source. The product backend still lives in
CoralSwarm/coralswarm. Refresh with/plugin marketplace update coralswarm-connect.One-time trust + OAuth. A plugin-provided MCP server still requires you to approve the server (trust prompt) and complete OAuth via
/mcpthe first time — the plugin declares the server, it can't pre-authorize your account.
What the plugin sets up
-
MCP connection (
.mcp.json) — declares the CoralSwarm MCP server (HTTP transport) so its tools (list_oceans,recent_activity,ask_ocean,search_atoms,get_reef,add_context,list_sessions, …) are available once you authenticate.The plugin
.mcp.jsonis the literal URLhttps://api.coralswarm.com/mcp(hosts do not expand${VAR:-default}, and Cursor requires a byte-exact match with the server's protected-resource metadata). There is no separate org address; the same URL serves your personal ocean AND every organization you belong to. Staging or a local backend is a user-level MCP override (~/.cursor/mcp.json/claude mcp add), not a plugin edit.Personal vs. organization is chosen IN-BAND, not by URL: if you belong to ≥1 organization, the connection starts restricted to the workspace tools,
list_tenantsandselect_tenant. Calllist_tenants, thenselect_tenantwith the org you want (or withoutorg_idfor your personal ocean). That unlocks the rest of the tools, scoped to whichever plane you picked. Callingselect_tenantagain, any time, switches — no new session required, unlike the old per-URL setup.Want both at once? Register this SAME URL a second time under its own server name (see Manual install below) and call
select_tenantindependently on each registration — each gets its own OAuth connection and its own remembered selection. You get both tool sets in one session, distinguished by server name. -
Capture hooks (
hooks/hooks.json), all firing during a session:SessionStart→ primes the agent to load relevant ocean context and to save each milestone as it happens, and emits sanitized session metadata (project key, git branch, credential-stripped remote, repo path, hostname, harness version) for the agent to stamp onto every save. A hybrid inventory line lists registered capture events vs those observed this session — hosts that never fire a given event stay dark (degrade in public) instead of blocking the turn.UserPromptSubmit→ a debounced reminder (about every 15 min of active work) to save recent progress, plus a one-line notice when the git branch changes mid-session. This is the recurring, mid-session capture.PreCompact→ flushes unsaved work into the ocean right before the conversation is compacted, so nothing is lost.Stop→ a final backstop (debounced ~10 min).PostToolUse(matcheradd_context) → stamps a local activity ledger every time anadd_contextsave runs (Claudemcp__…add_context, CursorMCP: …/add_context/ CallDynamicTool), powering deterministic recovery of crashed sessions (see below). Every event is dispatched throughhooks/run.mjs.
-
The
coralswarm-connectskill — say "onboard coralswarm" and the bundled skill walks through the same setup conversationally (useful if you installed the MCP some other way, or to verify the round-trip).
Plugin installs always get the
Stopbackstop. The manual installer (scripts/install.mjs) exposes a--no-stopflag to omit it, but a plugin'shooks.jsonis static — it can't take install-time flags — so theStophook is always included here. It's debounced (~10 min per session), so it stays quiet;PreCompactand the mid-session nudges do most of the work.
The hooks reference ${CLAUDE_PLUGIN_ROOT}, which Claude Code, Cursor, and
Codex expand to this plugin's install directory. Every event's command is
node "${CLAUDE_PLUGIN_ROOT}/hooks/run.mjs" (Cursor ignores a separate args
array). Hook scripts write per-session debounce/branch/primer state under
~/.coralswarm/state/ (shared with the manual-install path). The primer runs
once per session_id so a dual Claude+Cursor install does not inject twice.
Session metadata & the credential-stripping guarantee (Phase 2)
The SessionStart primer reads the hook stdin payload and collects
best-effort session metadata — unavailable fields are omitted and the hook
keeps running if git/env is missing. Saving a session checkpoint still requires a
session_id; optional provenance can be omitted. The git remote is run through
hooks/project-key.mjs, a byte-for-byte parity port of the backend v1
normalizer (backend/src/project_key.rs), which unconditionally strips
embedded credentials before the value is ever injected into the prompt — a
token-bearing remote like https://x:[email protected]/a/b.git is only ever
emitted as github.com/a/b. These values are best-effort provenance; the server
re-normalizes and re-validates everything.
Agent sessions — background runs, bots and their subagents
A bot or background worker saves an agent session by passing both a stable
session_id and session_kind="agent" to add_context, with agent_name and its
actual client platform. Keep the same session ID across topics and use a new
checkpoint ID for each milestone. session_kind alone leaves the save as a note.
In a supported harness, naming the agent is enough: set CORALSWARM_AGENT_NAME
(or run under the Claude Agent SDK, which names itself via
CLAUDE_AGENT_SDK_CLIENT_APP) before startup, and the primer emits agent_name
alongside the harness's session ID — the server infers session_kind=agent from
that name's presence. Set CORALSWARM_SESSION_KIND=agent explicitly (plus
CORALSWARM_PLATFORM, CORALSWARM_TASK) only for a harness the server can't
otherwise identify. Custom bots call MCP directly and keep session/checkpoint IDs
in their run state. See the save contract and examples
for standalone notes, coding conversations, bot checkpoints, retries, and confirming
what was saved. See agent setup
for environment variables and linking each subagent's own session to its parent.
Deterministic reconciliation — how crashed/killed sessions get recovered
The nudges above are model-driven: they only help if the agent acts on them. Three ways work still slips through:
- a hard kill — SIGKILL, a closed laptop, an OOM — fires no exit hook at all, so nothing can flush at death;
- the agent ignores a mid-session nudge;
- a long single turn does a lot of work between debounced reminders.
Because a dead session can't write a "you have unsaved work" marker at death,
the plugin writes a heartbeat continuously during normal operation and
reconciles at the start of the next session. It keeps a tiny per-session
record — paths and timestamps only, never transcript content — at
~/.coralswarm/state/sessions/{session_id}.json:
SessionStart,UserPromptSubmit, andStop/PreCompactbumplast_activity_at(and record the transcript path, cwd, and project key);- the
PostToolUsehook stampslast_save_atwheneveradd_contextruns. When a recovery save passes the original session'ssession_idin the tool input, the stamp lands on that session's record — which is what lets a save in a later session deterministically clear an earlier session's pending flag.
On the next fresh SessionStart, the primer scans the ledger for records
whose last_activity_at is after their last_save_at (i.e. work that was
never saved), scoped to the same project, within the last 7 days, excluding
the current session, capped at the 3 most recent. For each, it injects a bounded
instruction to read only the tail of that session's local transcript (these
files can be hundreds of MB — never the whole thing), curate a concise summary,
and add_context it with the original session_id. That save clears the flag.
A session is offered at most twice, then marked abandoned so the list stays
clean; records older than 30 days are pruned.
This stays entirely local: no backend changes, no long-lived tokens, no
raw-transcript upload. The model still curates exactly what gets saved — the
ledger only makes the reminder deterministic. Injection hygiene: ledger values
are data, so a candidate is only offered when its
session_id is uuid-shaped and its transcript path is a real file physically
under your home directory; ids and paths are control-char-stripped and
JSON-escaped, and no transcript content is ever read into the primer.
Tunable via env (finite-positive-clamped, like the interval vars):
CORALSWARM_RECONCILE_WINDOW_DAYS (7), CORALSWARM_RECONCILE_PRUNE_DAYS (30),
CORALSWARM_RECONCILE_MAX_OFFERS (2), CORALSWARM_RECONCILE_MAX_CANDIDATES (3).
Tests (no dependencies)
Runs the normalizer against the same case matrix as the Rust unit tests, an
end-to-end session-primer run in a temp git repo with a token-bearing remote
(asserting the secret never appears in output), graceful degradation outside a
repo, crash-reconcile, Cursor-shaped stdin through run.mjs (dual emit,
primer-once, MCP: / CallDynamicTool save stamps), the deterministic-reconcile
ledger, and node --check on every .mjs. Auto-resume ([CoralSwarm resume])
is intentionally omitted.
Capture is performed by the connected agent calling the add_context MCP tool,
so it rides your existing OAuth — no credentials are stored and no backend
changes are required.
Manual install / uninstall (fallback, no plugin system)
If you can't use the plugin route (older Claude Code, or you want the hooks in a
specific settings.json scope), the original installer still works. It copies
the hook scripts to ~/.coralswarm/hooks/ and merges the hook entries into a
Claude Code settings.json idempotently — it never clobbers existing hooks, and
only ever touches hooks whose command path points at the CoralSwarm hooks dir.
The manual path and the plugin path are functionally equivalent (same four events, same commands). Don't run both against the same scope — you'd get the hooks twice. If you install the plugin, you don't need the manual installer.
Scope of automation & the deterministic upgrade
This is model-driven: capture depends on the agent acting on the hook prompts. That's reliable for meaningful milestones but not byte-for-byte guaranteed. A fully deterministic path — a shell hook that POSTs the raw session transcript to CoralSwarm regardless of the agent — needs a long-lived CLI token issued at onboarding plus an ingest-auth endpoint. That's a documented follow-up, not built yet.
Other hosts
A new MCP host is a new manifest, not a kernel rewrite. Claude Code uses
.claude-plugin/plugin.json; Cursor uses .cursor-plugin/plugin.json; Codex
uses .codex-plugin/plugin.json. All three point at the same .mcp.json,
skills/, and hooks/hooks.json. scripts/install.mjs remains a Claude
settings.json fallback (exec form: command: "node", args: [absolute run.mjs]) for machines without a plugin manager.
Releasing
One version, four manifests: .claude-plugin/plugin.json,
.cursor-plugin/plugin.json, .codex-plugin/plugin.json, and server.json.
scripts/check-version.sh fails if they disagree, and PR CI runs it.
The tag starts .github/workflows/release.yml, which re-checks that the tag
equals the manifests' version (--expect), runs the tests, validates
server.json, authenticates to the registry by DNS proof on coralswarm.com,
and publishes. Nothing publishes from a branch or a PR.
Versions are strict SemVer 2.0.0 — no leading zeros, no
empty identifiers — because the registry rejects ranges and a non-SemVer version
does not sort predictably once published. The mcp-publisher binary that job
runs is pinned to an exact release and checksum-verified before it executes,
since it is the one step holding the signing key.
DNS proof — not GitHub OIDC — because the registry derives the namespace from
the auth method: GitHub auth only ever grants io.github.<owner>/*, while a
reverse-DNS namespace like com.coralswarm/* requires domain verification. The
apex TXT record on coralswarm.com and the MCP_REGISTRY_DNS_PRIVATE_KEY
secret are documented in the workflow header.
Support
- Bugs and feature requests: GitHub Issues
- Everything else: [email protected]
- Security: see SECURITY.md
Contributing
PRs only — main is locked. See CONTRIBUTING.md and
SECURITY.md. Run node tests/run.mjs and
bash scripts/check-version.sh before you open a PR.
来源:README.md,提交 8c0190a
工具
0版本历史
1- v1.1.2最新Sep 16, 2026
评分
已满足适用检查项的 85%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通必需25 分
- 已声明认证方式必需10 分
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分