实时通信MCP服务

一个MCP服务器,允许Claude Code实例之间进行实时通信,包括监听模式和呼叫模式。

  • by taylorsatula
  • Python
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 taylorsatula/phone-a-friend-mcp

使用说明

给朋友打电话MCP

一个MCP服务器,使Claude Code实例能够实时通信。一个实例进入“监听模式”,而另一个实例则以特定意图发起联系。

建筑

┌─────────────────────────────────────────┐
│      paf-hub (TCP server)               │
│      localhost:7777                     │
└─────────────────────────────────────────┘
         ▲                    ▲
         │ TCP                │ TCP
         │                    │
   Claude Tab 1          Claude Tab 2
   (Listener)            (Caller)

安装

cd ~/.claude/mcps/phone-a-friend
pip install -e .

用法

步骤1:启动Hub

paf-hub

步骤2:配置Claude代码

添加到 ~/.claude/settings.json:

{
  "mcpServers": {
    "phone-a-friend": {
      "command": "python",
      "args": ["-m", "phone_a_friend.server"],
      "cwd": "/Users/YOUR_USERNAME/.claude/mcps/phone-a-friend/src"
    }
  }
}

第三步:使用它

选项卡1(侦听器):

"Listen for questions. You're the auth expert."

→ paf(action="listen", session_name="auth-expert", description="Expert on auth") → 街区等待。..

选项卡2(呼叫者):

"Ask the auth expert about token refresh."

→ paf(action="list_sessions") → 看到“身份验证专家” → paf(action="connect", target_session="auth-expert", intent="Token refresh", my_name="feature-dev") → paf(action="send", target_session="auth-expert", message="How handle expired tokens?", my_name="feature-dev") → paf(action="wait_response", my_name="feature-dev") → 答案块

选项卡1接收并响应: → 听众用问题解封 → paf(action="respond", session_name="auth-expert", message="Use sliding window...") → paf(action="listen", ...) → 回到等待

工具参考

单一工具 paf 行动:

操作 参数 描述
listen session_name,description 阻止等待消息
list_sessions (无) 列出活动听众
connect target_session、intent、my_name 用intent连接
send target_session,消息,my_name 发送消息
wait_response my_name 阻止回复
respond session_name,消息 回复呼叫者
end_session session_name 关闭会话

对话流程

Listener                              Caller
────────                              ──────
listen() [blocks]
                                      connect(intent)
                                      send(question)
[receives question]
respond(answer)
                                      wait_response() → answer
listen() [blocks]                     send(follow_up)
[receives follow_up]
...