Token导航 LogoToken导航

MCP Server · 开发工具

Phone A Friend

一个MCP服务器,允许GitHub Copilot Chat通过GitHub Copilot CLI将任务分派给不同的AI模型,从而实现多样化的模型使用和编辑器差异标记。

未说明官方级别未说明来源级核验工具 1
TypeScriptClaude开发工具VS Code

快速开始

公开资料没有提供安装命令,按仓库或官方文档接入。
作者 / 组织
bexelbie
提供方
bexelbie

工具数量

1

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

Phone A Friend 属于开发工具类 MCP Server,公开资料标注 1 个工具,通过传输方式未标注接入,适配 Claude、VS Code,没有现成的安装命令;接入前要先准备 会话凭据。

分类

开发工具

传输方式

未说明

认证方式

会话凭据

部署方式

公开资料未说明

安装与配置

公开目录没有给出安装命令,需要按仓库 README安装;下面按同类条目的通用流程说明。

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    先确认运行方式

    公开资料没有标注传输方式,先看仓库 README,确认是本地进程还是远程地址。

  2. 2

    获取服务

    公开目录没有给出安装命令,按仓库 README里的步骤安装或获取服务。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 1 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

公开资料仍需确认:安装命令

详细介绍

Phone a Friend

An MCP server that lets in Visual Studio Code dispatch work to a different AI model via . This not only allows diverse model usage but it also provides a path to getting gutter indicators for those changes.

The Problem

When you use GitHub Copilot Chat in VS Code, every subagent it spawns runs on the same model as the parent conversation. If you're on Claude Opus 4.6, all subagents are Claude Opus 4.6. Sometimes you want a different model for a subtask — a faster one for simple work, or a different vendor for a second opinion.

GitHub Copilot CLI supports --model to pick any available model, but using it directly doesn't help — changes made by the CLI don't produce VS Code's gutter indicators (the green/blue/red diff decorations in the editor margin).

Phone a Friend solves this by returning a unified diff that the calling agent applies through VS Code's edit tools, giving you the same inline diff experience as if the changes were made natively.

How It Works

  1. GitHub Copilot Chat calls the phone_a_friend MCP tool with a prompt and model name
  2. The MCP server creates an isolated git worktree from the current repo's HEAD
  3. It launches GitHub Copilot CLI in non-interactive mode in that worktree with the requested model
  4. The subagent does its work and writes its response to a message-in-a-bottle file (.paf-response.md)
  5. The MCP server reads the response, captures a git diff of all changes, and cleans up the worktree
  6. Returns the response text and unified diff to the calling agent
  7. The calling agent applies the diff using VS Code's edit tools, producing gutter indicators

Context cost warning: The unified diff is returned as part of the tool result, which means it lands in the calling agent's context window. For large diffs this can be significant. Keep subtasks focused to keep diffs small.

Why "message in a bottle"?

GitHub Copilot CLI does not provide a way to retrieve just the agent's final response text. Its stdout mixes the response with progress output and is unreliable to parse. Rather than trying to extract a clean response from noisy output — and inflating the calling agent's context with the subagent's full thinking and execution log — we skip stdout entirely. The subagent writes its response to a file. We read the file.

Prerequisites

  • Node.js >= 22.0.0
  • GitHub Copilot CLI — installed, configured, and authenticated. See for setup instructions.
  • Git — for worktree management
  • A git repository to work in (the tool operates on git repos)

Verify Copilot CLI is working:

copilot --help

Setup

In VS Code, open the Command Palette and run MCP: Add Server..., select npm Package, and enter @bexelbie/phone-a-friend.

Or add it manually to .vscode/mcp.json (workspace) or via MCP: Open User Configuration (global):

{
  "servers": {
    "phone-a-friend": {
      "type": "stdio",
      "command": "npx",
      "args": ["@bexelbie/phone-a-friend"]
    }
  }
}

Usage

Once configured, the phone_a_friend tool is available in GitHub Copilot Chat. You tell the agent what you want, and the agent decides how to use the tool — constructing the prompt, choosing the model, including context, and applying the returned diff.

Example prompts you might give Copilot Chat

Ask a different model for a code review:

Use phone_a_friend with gpt-5 to review the changes in src/parser.ts and suggest improvements.

Get a second opinion on architecture:

Phone a friend using claude-sonnet-4.5 to evaluate whether our current database schema will scale to 100k users.

Have a faster model do grunt work:

Use phone_a_friend with gpt-5-mini to write unit tests for all public functions in src/utils.ts.

How agents discover the tool

The MCP server exposes the tool name, description, and parameter schemas to the calling agent via the MCP protocol. The tool description includes "when to use" and "when not to use" guidance so agents can decide whether phone_a_friend is appropriate for a given task.

Interaction patterns that work:

  • Explicit tool name: "Use phone_a_friend with gpt-5 to..." — always works
  • Natural name: "Phone a friend using claude-sonnet-4.5 to..." — agents match the tool name
  • Model-oriented: "Ask gpt-5 to review this code" or "Get a second opinion from claude-sonnet-4" — agents recognize the request for a different model and match it to the tool
  • Keyword triggers: Mentioning "subagent", "different model", or "second opinion" in a coding context — the tool description tells agents to look for these signals

Patterns that probably won't trigger the tool automatically:

  • Vague delegation like "use subagents where appropriate" — the agent may not proactively reach for this tool without a specific model or second-opinion request
  • Tasks that the current model can handle directly — agents generally prefer their own capabilities over adding a tool-call round trip

If you want the agent to consistently use this tool, be specific: name the tool, name the model, or clearly ask for a different model's perspective.

What the calling agent is responsible for

The tool description tells the calling agent what it needs to know, but in short:

  • Prompt construction: The subagent only sees committed files. If the user's request involves uncommitted work, the calling agent must include the relevant file contents in the prompt.
  • Working directory: The calling agent must always pass working_directory explicitly, using the workspace path from the conversation context. The MCP server's own working directory is not the user's workspace.
  • Diff application: The tool returns a unified diff. The calling agent applies it using its own edit tools to produce gutter indicators.
  • Context management: The diff lands in the calling agent's context window. The calling agent should keep subtasks focused to avoid large diffs.

Available models

The models available to you depend on your GitHub Copilot subscription. To see your personal model list, start an interactive Copilot CLI session and type /model. When using Phone a Friend, tell your agent which model to use — or provide a list of models in your prompt so it can choose appropriately.

You can pass any model name — GitHub Copilot CLI validates it at runtime.

Tool Parameters

ParameterRequiredDescription
promptYesThe task or question for the other model. Include relevant context.
modelYesWhich AI model to use (see list above).
working_directoryYesGit repo directory to work in. Must be inside a git repository. Always pass this explicitly — the server's own working directory is not the user's workspace.
modeNo"default" returns the response and a unified diff of file changes. "query" discards all file changes and returns only the response — use for reviews, analysis, or questions. Default: "default".

Safety

  • Push protection: The CLI is invoked with --deny-tool 'shell(git push*)' which blocks all push attempts at the tool level. The prompt also instructs the agent not to push.
  • Worktree isolation: All work happens in a temporary git worktree. Your working tree is never modified directly.
  • Query mode: When mode is "query", all file changes in the worktree are discarded. The subagent is instructed that the repo is read-only. No git diff is returned.
  • Automatic cleanup: Worktrees are removed after each invocation, even on errors.
  • No secrets exposure: The subagent has the same access as copilot CLI running locally — no additional permissions are granted.

Known Limitations

  • Blocks the calling agent: MCP tool calls are synchronous — this is a property of the MCP protocol, not this tool. The calling agent waits for the subagent to finish before it can do anything else. Keep subtasks focused. This is identical to how subtasks work natively.
  • Uncommitted changes: The worktree is created from HEAD. Uncommitted changes in your working tree are not visible to the subagent. The calling agent's tool description instructs it to include relevant file contents in the prompt when needed. This is the way git worktrees are designed to function.
  • Message-in-a-bottle compliance: The subagent must follow instructions to write .paf-response.md. Most models do, but some may occasionally ignore the instruction.
  • No streaming: There is nothing to stream — the response is a file and a diff, both captured after the subagent finishes.

Development

git clone https://github.com/bexelbie/phone-a-friend.git
cd phone-a-friend
npm install
npm run build     # Compile TypeScript
npm test          # Run tests
npm run dev       # Watch mode for development

Testing a local build in VS Code

If you have phone-a-friend installed globally (via npx @bexelbie/phone-a-friend), you need to point VS Code at your local build instead. Update your MCP configuration (.vscode/mcp.json or user-level mcp.json) to use node with the local dist path:

{
  "servers": {
    "phone-a-friend": {
      "type": "stdio",
      "command": "node",
      "args": [
        "/absolute/path/to/phone-a-friend/dist/index.js"
      ],
      "env": {}
    }
  }
}

Replace /absolute/path/to/phone-a-friend with the actual path to your clone.

After changing the config:

  1. Build your changes: npm run build
  2. In VS Code, open the Command Palette and run MCP: List Servers
  3. Select phone-a-friend and choose Restart Server to pick up the new code
  4. Test in Copilot Chat — the tool will now use your local build

When you're done testing, revert the MCP config back to npx:

{
  "servers": {
    "phone-a-friend": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "@bexelbie/phone-a-friend"
      ],
      "env": {}
    }
  }
}

License

MIT

工具与能力

工具数量

1

资源数量

0

提示词数量

0

能力标签

AI模型调度TypeScript本地部署GitHubCopilot扩展代码编辑辅助多模型协作开发工具

支持客户端

ClaudeVS Code

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

让助手直接读代码

把仓库、提交记录和 issue 交给模型检索,补全和重构时不用来回复制文件。

在对话里跑命令

触发构建、测试和脚本,执行结果直接回到上下文,省去切终端。

接进开发流程

把 PR、CI 状态和代码审查接进助手,减少在几个工具之间跳。

选择建议

值得选的地方

  • 只提供 1 个工具,职责集中,接入后不容易误操作。
  • 已经适配 Claude、VS Code,换客户端不用重新研究配置。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • 公开资料没有可直接复制的安装命令,第一次接入要自己找入口。
  • 需要自备会话凭据,没有凭据没法直接试。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在开发工具场景里让模型直接调用外部能力的人。
  • 已经在用 Claude 的用户,接入路径最短。
  • 愿意照着官方文档一步步配环境的人。

不太适合

  • 暂时拿不到会话凭据的人。
  • 希望一条命令就装好、不想看文档的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Phone A Friend

MCP World · 本页

1未说明未标注1 个2026-05-17
Git 838e2ec1

MCP World

12stdio有2 个2026-05-17
Markitdown MCP 2c653a5f

MCP World

1stdio有1 个2026-05-17
Context7 MCP C671e75a

MCP World

0stdio有1 个2026-05-17
Context7 831acf40

MCP World

0stdio有1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Phone A Friend 怎么安装?

公开目录没有给出可以直接复制的安装命令,需要按仓库 README里的步骤安装;装好后写进客户端的 MCP 配置再重启。

Phone A Friend 怎么在 Claude Desktop、Cursor 里配置?

它是传输方式未标注,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

Phone A Friend 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Phone A Friend 需要 API Key 吗?

公开资料标注的认证方式是会话凭据,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

Phone A Friend 支持哪些客户端?

公开资料标注支持 Claude、VS Code;其他客户端只要能配置 MCP Server,也能用同样的命令或地址接入。

来源信息

继续浏览同类 MCP