neighbors
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@neighborssend jade-owl check the auth module"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
intercom
让同一 intercom 作用域内的多个 Claude Code 会话互相发消息(广播 + 点对点),并在会话进行中自主投递。
特性:广播 + 点对点 · 事件驱动自主投递(钩子注入,无需用户转述)· 可读别名与任务简述(含新鲜度)· reply_to 线程化 · 目录 GC · 可配作用域/续跑上限/广播限频 · idle 唤醒(钩子武装 asyncRewake,默认开,可关)· channel 实时推送(插件内置第二 server,需启动标志)· 自包含插件(marketplace 整拷即用,运行时依赖按需自动装入 ${CLAUDE_PLUGIN_DATA},钩子零第三方依赖)。
当前架构见 docs/ARCHITECTURE.md;演进史见 CHANGELOG.md;文档索引 docs/。
安装
/plugin marketplace add <本仓库 URL 或本地路径>
/plugin install intercom@intercom-marketplace安装即用:marketplace cache 整拷 plugins/intercom/ 即自包含。运行时依赖(@modelcontextprotocol/sdk、zod、redis)以 npm ci --omit=dev 装进 ${CLAUDE_PLUGIN_DATA}/node_modules(带 pid+TTL 自愈锁 + lockfile 哨兵,只装一次)。安装由两处共用同一核心:首位 SessionStart 钩子 scripts/ensure-deps.mjs 负责预热(常态会话秒启),MCP server 入口的 bootstrap 则主动确保——缺依赖时自己装,不赌钩子先赢「CC 与 SessionStart 并发起 MCP」的竞态,就绪后才加载真实现。故首装 / lockfile 变更也不会卡死:冷装超 CC 连接预算时本次让位、由钩子后台装完,下次连接确定性自愈。钩子脚本本身零第三方依赖(ulid 已 vendor、redis 懒加载),拷贝即跑。
运行时:默认 bun、兼容 node。MCP server 与钩子脚本默认用 bun 执行(启动更快);代码两 runtime 通用,把 userConfig RUNTIME 设为 node 即整体切回 node(适合无 bun 的环境)。依赖安装始终走 npm,运行时只决定 JS 怎么执行。
贡献者:见 CONTRIBUTING.md(构建、测试、依赖范式、发布)。
Related MCP server: Agent Junction
版本与更新
本插件不固定 version 字段(plugin.json / marketplace.json 均不写 version)。源仓库是 git 仓库,Claude Code 按解析规则回退到 commit SHA 当版本——每次提交即一个新版本,无需手动 bump(这正是官方对"内部/快速迭代插件"的推荐做法)。发布 = 提交即可。
使用方拉取最新:
/plugin marketplace update intercom-marketplace
/plugin update intercom # 然后新开会话让新 hooks/MCP 生效注:
package.json仍带 version,仅为 npm/开发元数据,与插件版本解析无关。若哪天/plugin update显示版本为unknown(而非 SHA),说明该 marketplace 未被当 git 源——届时改回在plugin.json写显式 semver 并每次 bump。
用法
每会话启动自动获别名(如
amber-fox),并被告知可用工具。收到的消息会在工作过程中自动注入;有未读时会话不会停下,直至对话平静。
工具 | 作用 |
| 看在线同伴及其当前任务(含状态时间,如 |
| 发消息: |
| 更新你正在做什么(任务转向/完成时诚实更新) |
| 查广播/私信历史: |
| 认领/释放/订阅资源区段(advisory 协作锁): |
| (只读)列出当前所有活动区段锁、持有者与订阅者 |
上表为
chat服务器(intercom-server)的完整工具面。intercom插件还内置第二个channel服务器——纯推送泵,不提供任何工具(回复同伴直接用chat的send),详见「channel实时推送」。
channel 实时推送(需启动标志)
channel 是 intercom 插件内置的第二个 MCP 服务器(mcp/channel-server.mjs,与 chat 同插件、独立进程,故障隔离),声明 Claude Code 的 claude/channel 能力,把同项目同伴发来的新消息实时 PUSH 进本会话上下文(<channel source="channel"> 事件)。它从 CLAUDE_CODE_SESSION_ID 解析自身别名,用一套独立游标(.cursors/<sid>.chan.json)追踪已推 _order 令牌(FS 下 _order===id,Redis 下 =seq 抗跨机时钟偏移)。纯推送泵:不注册任何工具——回复同伴走 chat 的 send(早期的 reply 工具是 send 的严格子集,已折叠进 send、删除)。
纯推送、完整工具面在
chat:send/list/status/query/lock等全部工具都在chat;channel只负责推送,不重复任何工具。从不 commit:
channel只读 + 推送 + 推进自己的.chan.json游标,绝不移动消息或推进投递游标——消息的正式投递与 commit 仍由生命周期钩子(SessionStart/PostToolUse/Stop)独占。intercom插件默认DELIVERY_MODE=channel→ 内容去重:channel 已推送的消息不再经钩子重复注入(消除"同一同伴消息既以<channel>事件、又以 📨 钩子注入显示两次"),但仍 commit 推进读状态、不丢。设auto退回不去重(保守,会重复显示);hooks忽略 channel。自动检测推送落地不可行(fire-and-forget、接收侧无 hook),故由DELIVERY_MODE旋钮(默认channel)决定;若推送实际未生效(缺启动标志/补丁)应设hooks,以免去重抑制实际未送达的消息。广播防惊群(
wake):channel 推送=唤醒 idle 不可分。私信经 channel 定向唤醒;wake:true广播 = 专门的"惊群广播"(发送方有意唤醒全体接收方)经 channel 推送/唤醒;wake:false普通广播不经 channel(不打断 idle、由钩子在会话活动时投递、不丢)。要唤醒就发私信,或显式send(..., wake: true)发惊群广播。门控:CC channels 仅 Anthropic 鉴权可用(不支持 Bedrock/Vertex);自定义插件默认不在 channels 白名单,故只有当 Claude Code 以
--dangerously-load-development-channels plugin:intercom@intercom-marketplace(或server:channel,或等效补丁)启动时推送才生效。不带该标志时服务器仍会连接(纯推送泵、无工具),但推送被静默丢弃(这是预期行为)。要求带asyncRewake/channels 的 Claude Code 版本。
idle 唤醒(守望,默认开)
默认会话被引导在空闲(等待用户输入)时也能收到同伴消息。默认走 hook 模式(钩子武装 asyncRewake):Stop 与 SessionStart 钩子以 asyncRewake 后台运行 scripts/idle-rewake.mjs,它阻塞监听本会话未读(fs.watch 盯 inbox/new+broadcast),结束时真有未读 → exit 2 触发 Claude Code 的 asyncRewake 唤醒该 idle 会话 → 现有钩子投递消息内容;超时/孤儿/无未读/重复 → exit 0(不唤醒)。
职责分离 / peek-only:
idle-rewake.mjs只"叫醒"、绝不搬运或 commit 内容;正式投递+commit 仍由生命周期钩子(SessionStart/PostToolUse/Stop)唯一负责——下一个动作的 PostToolUse 注入真正的消息内容。自动武装:武装由 Stop+SessionStart 钩子(
asyncRewake:true)自动完成,无需 agent 介入。.watch/<sid>.pid单例认领防重复武装。相比旧版,消除了"开了会话却从没 prompt"的冷启动缺口,以及"agent 忘记 re-arm / 重启时被杀"的脆弱性。模式切换
IDLE_WAKE_MODE:hook(默认,asyncRewake 自动武装)|agent(旧版回退:注入"请武装 watcher"的 agent 提醒,靠会话自己后台跑scripts/watcher-run.mjs)。诚实告知:asyncRewake 能否真正唤醒一个确已 idle 的会话是按设计验证的,但尚未实地联测;若该路径在你的环境不奏效,可设
IDLE_WAKE_MODE=agent回退。hook模式要求带 asyncRewake 的 Claude Code 版本(约 2.1.80+)。关闭:设
IDLE_WATCH=0完全停用 idle 唤醒(两种模式都不生效)。
资源区段锁与同步请求(协作避让,advisory)
并发会话改同一代码库时,可认领路径前缀避让冲突,并可发出"期待回应"的同步请求。
区段锁:
lock(action="acquire", path="src/auth/")认领路径前缀(含子区段级联冲突;或用op="<名>"认领扁平不级联的操作锁,两命名空间互不冲突;持有者别名由服务器从会话 sid 解析,无需自填from)。被占且wait: true时:登记订阅 +hook模式(默认)自动武装等待——返回「结束本回合即可,区段释放/交接或超时会自动唤醒你」;agent回退模式才返回run_in_background+--lock-free武装指令。被唤醒后必须再lock(action="acquire", …)确认 ✅ 才可进入(唤醒只表示"可再试"、你尚未持有)——除非是被交接(release(notify="one")):那时你醒来已持有,直接进。完成即lock(action="release", …),可选notify="one"把锁原子交接给某订阅者。advisory:靠协作自律,非强制隔离。租约(免手动续期):持有者活动期心跳自动续约;持有者崩溃(DEAD)或长时间无活动(超
LOCK_HOLD_TTL)→ 锁视同遗弃可被回收。同步请求:
send(..., expects_reply: true);hook模式(默认)自动武装等应答(结束本回合即可),agent回退返回--reply-to武装指令。应答到达 / 超时 / 对端下线时被唤醒(超时也唤醒、提示自行决定)。心跳三态:会话存活分 ENGAGED(近期活动)/ AMBIGUOUS(在但空闲)/ DEAD(进程没了),驱动锁回收与请求早退。天花板:心跳证进程存活,非"循环在推进"(空闲≡卡死,进程层同态)。
承重原语经实测:锁获取(
wx)与偷锁(捕获-rename)经并发 POC 验证(exp/lock-poc/);仅本地 POSIX FS(非 NFS/WSL DrvFs)保证原子性。
手动命令与协作 skill(P1)
/intercom:intercom <自然语言>—— 手动查看/发消息/更新状态/读历史(如/intercom:intercom send jade-owl 帮我看下 auth)。intercom-coordinationskill —— 多会话协作时自动加载,引导主动报状态、查重、协调;独立任务不触发。
作用域与发现
作用域:默认在 git 仓库内,从 git 根向当前目录找到的第一个
.claude即锚点(同一工作树的子目录共享);非 git 仓库用项目目录。两个会话"互为同伴"当且仅当解析出的 intercom 目录相同。同一仓库的不同 worktree 默认彼此隔离——要让它们互通,把SCOPE设为repo(见「配置(可选)」)。在线发现:读取
~/.claude/sessions/<pid>.json进程注册表(pid 验活)。该文件为 Claude Code 内部、未文档化、随版本可能变化;本插件不追求强跨版本兼容。就地格式变更会被探测:若注册表里有会话文件却无一可识别,list会给出"在线发现可能已失效,请更新插件"的降级提示(整目录被移走/改名则无法探测,按"无人"处理)。无论如何,消息收发只依赖.claude/intercom/文件,不受发现失效影响。
存储模型
领域逻辑 over 存储抽象层(5 端口 KV/Message/Lock/Liveness/Watch)。默认 Redis 后端(主路径,解除单机约束、支持跨机、原生 pub/sub 实时推送):键前缀 intercom:{<repoKey>}:,排序/投递游标按服务端 INCR seq(抗跨机时钟偏移)。配为 redis 但连不上时 MCP server 启动即 fail-fast 终止、钩子快速退出(不带病运行、不在 watch 轮询里挂起)——请启动 redis 或显式回退 fs。二等 FS 后端(设 STORAGE_BACKEND=fs,零依赖单机、无需 redis 服务):<锚>/.claude/intercom/——广播 broadcast/<id>.json;私信 maildir inbox/<别名>/{new,cur};另有 status/、.self/(别名,存活心跳另存)、.cursors/、locks/(区段锁)、.waits/(hook 等待),建议加入 .gitignore,游标 _order===id。详见 ARCHITECTURE §5 存储抽象层。
会话启动时惰性 GC(best-effort):广播按"所有活跃会话都已读"的水位线清理(绝不删未读);已读私信 cur/ 按 7 天保留期清理。私信未读(new/)永不被清。
惰性创建:会话只在实际写入时创建文件/目录;只启动不收发、不设状态的会话仅登记 .self/<sid>.json(如有历史广播再加一个游标),不留占位文件。
死会话清理:会话进程死亡且逾 30 天无任何启动时,其残留元数据(.self/游标/状态/信箱)在他人 SessionStart 时被清;活会话、当前会话、近期会话与被复用的别名均受保护。
配置(可选)
约定:项目默认信任 AI Agent,所有数值型限制默认 0 = 不限/关闭,均为 opt-in。 统一经 userConfig 设置:安装时按提示填写,或在 settings.json 的 pluginConfigs.<plugin>.options.<KEY>。
键 | 类型 | 默认 | 作用 |
| 字符串 |
| 运行 MCP server 与钩子脚本的 JS 运行时可执行名: |
| 数字 |
| 无用户介入时 Stop 连续自动续跑上限。N>0 则每 N 跳停下交还用户,防 ping-pong 烧 token;未读留待下次活动投递(不丢)。 |
| 字符串 |
|
|
| 数字秒 |
| 同一会话两次广播的最小间隔。N>0 时过频广播被拒(提示等待),防刷屏;点对点不受此限。协作自律(发方别名由服务器按会话解析、非对抗防御)。 |
| 数字 |
| 单条消息 body 字符上限。N>0 时超长被拒,防巨型消息注入每个收件人上下文。 |
| 数字 |
| 状态 text 字符上限(状态注入每个同伴的 list)。N>0 时超长被拒。 |
| 开关 | 开 | idle 唤醒能力开关(见上「idle 唤醒」)。设 |
| 字符串 |
| idle 唤醒方式: |
| 数字秒 |
| watcher 自退出超时。 |
| 数字秒 |
| 心跳新鲜窗口(liveness 类,强制非 0):beat 在此窗口内 = ENGAGED。默认容长工具调用。 |
| 数字秒 |
| beat 陈旧判 DEAD 的宽窗(跨机 / 无本机 PID 快路径时兜底,liveness 类)。 |
| 数字秒 |
| 锁租约窗口:持有者超此秒数无活动(beat 未刷)→ 锁视同遗弃可回收。 |
| 数字秒 |
| 等锁的兜底唤醒超时(liveness 类,强制非 0),独立于锁租约。 |
| 数字秒 |
| 等应答的兜底唤醒超时(liveness 类,强制非 0)。 |
| 数字 |
| 每会话并存的临时 watcher(等锁/等应答)上限。 |
| 字符串 |
| channel 投递去重: |
| 字符串 |
| 持久化后端,单旋钮吃 scheme: |
存储/路径环境变量:
STORAGE_BACKEND(单旋钮吃 scheme:redis默认 /redis://host:port/rediss://.../fs回退;redis 地址内联进取值,不再有独立REDIS_URL)现为 userConfig 旋钮(见上表;CC 自动注入到 MCP server 与钩子,.mcp.json亦显式转发给 server)。STORAGE_BACKEND_<PORT>(逐端口覆盖)、INTERCOM_NAMESPACE(Redis 跨机键前缀,默认取 git 根提交哈希)仍为 env-only 高级旋钮(靠进程环境继承)。
重要约束
.claude/intercom/与~/.claude/sessions/须位于 Linux 原生文件系统(WSL 勿放/mnt/c)。自主续跑默认无人为上限:两个被指令驱使的会话可能持续互回(ping-pong)。可设
CONTINUATION_CAP限制,或随时按 Esc 中断。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/puxu-msft/my-claude-plugins'
If you have feedback or need assistance with the MCP directory API, please join our Discord server