mcpField
R
Relay

Relay

ローカル
github.com/mhcoenAI・エージェント439 週間前に更新

Relay について

Relayは、Claude DesktopとClaude Codeの間でファイル、コード、指示を受け渡すMCPメッセージバスです。両者のコンテキストを分離し、メッセージは変更せずに転送します。取得は通常ユーザーが実行します。

主な機能

  1. 01クライアント間でのメッセージ送受信
  2. 02共有メッセージバッファの消去
  3. 03受信時のシステム通知
  4. 04起動時の未読メッセージ表示
  5. 05最新メッセージへの直接アクセス

活用シーン

  1. 01Desktopの草案をCodeに送り実装
  2. 02CodeのコードをDesktopにレビュー依頼
  3. 03セッション間でエラー、設定、指標を共有

MCP 対応

Claude DesktopとClaude Code向けのMCPサーバーとして動作し、メッセージの送信、取得、消去ツールを提供します。最新メッセージに直接アクセスするリソースも利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mhcoen-mcp-relay": {
"command": "uvx",
"args": [
"mcp-server-relay"
]
}
}
}
起動コマンドuvx mcp-server-relay

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimcp-server-relay1.2.4

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Relay

情報(ファイル、コード、データ、コメント、指示など)を Claude Desktop と Claude Code の間でやり取りしながら、それぞれのメインコンテキストウィンドウを分離したままにする、シンプルなツールです。

どちらの Claude も自律的にメッセージを送信できます。相手側からの入力が必要になったら、そのまま送信します。メッセージが届くとシステム通知が表示されます。準備ができたら取得してください。

なぜ必要なのでしょうか? Desktop と Code にはそれぞれ異なる強みがあります。Desktop は会話(計画立案、アイデア出し、レビュー、文章の反復改善)に優れています。Code は実行(ファイルの編集、コマンドの実行、エラーへの対処)に優れています。しかし、両者はコンテキストを共有しません。Desktop で何かを下書きして Code に実装させたい場合や、書いているコードについて Desktop の意見を聞きたい場合、アプリ間でコピー&ペーストする必要があります。

Relay を使えば、質問を手動で指定したり、ウィンドウ間でコピー&ペーストしたりすることなく、両者をつなげられます。これは Anthropic に統合されていて然るべき基本機能です。

操作はユーザーが制御できます。 通常、取得はユーザーが行う操作です。get または /get と入力します。モデルは相手側からの入力が必要だと判断したときに、送信や取得を行うこともできますが、バックグラウンドで自動同期することはありません。LLM 同士の会話が制御不能になり、トークンを消費し続けることもありません。

簡単な例

[In Desktop]
You:     Send my last error message to Code.
Desktop: [sends via relay]

[notification pops up in Code's terminal]

[In Code]
You:     /get
Code:    Got it. That's from line 47 in parser.py—the regex isn't matching.
         [fixes the bug]

詳細な例

[In Code]
You:     My classifier's stuck at 72% accuracy. Send the
         training config and last epoch's metrics to Desktop.
Code:    [sends config.yaml and metrics via relay]

[System notification appears that a message has been sent to Desktop]

[In Desktop]
You:     /get
Desktop: [fetches config and metrics]
         The loss curve suggests you're underfitting. Learning
         rate 1e-5 is conservative for a model this size...

You:     What would you try?
Desktop: Bump to 3e-5, add warmup steps, and your batch size
         of 8 is small—if memory allows, try 16. Also the
         class imbalance is brutal: 80/15/5 split. Consider
         weighted loss or oversampling the minority classes.

You:     Specify the changes.
Desktop: [sends updated config via relay]

[System notification appears that a message has been sent to Code]

[In Code]
You:     /get
Code:    Got it. Updating config.yaml and adding class weights
         to the loss function.
         [edits files, starts training run]

         Epoch 12: accuracy up to 79%, but precision on
         class 2 dropped. Want Desktop's take?

You:     Yeah, send the confusion matrix.
Code:    [sends via relay]

[In Desktop]
You:     /get
Desktop: Class 2 is getting confused with class 0—they may be
         semantically close. I need more examples.
         [automatically sends request to Code via relay]

使い方

Desktop では get、Code では /get と入力して、相手側からのメッセージを確認します。これが主な操作方法です。

コマンドのバリエーション:

  • /get — Desktop からメッセージを取得して実行します
  • /get status — メッセージ数と最終アクティビティを表示します
  • /get clear — バッファー内のすべてのメッセージを消去します
  • /get <message> — Desktop にメッセージを送信します

リソースへのアクセス: @relay:messages://latest を使ってメッセージを直接参照することもできます。/get より高速で、プランモードでも動作します。

起動時のプレビュー: Code の起動時に、Desktop から届いた未読メッセージのプレビューが表示されます。/get を使うと、メッセージの全文を確認できます。

送信は簡単で、明示的な操作も必要ありません。「これでよさそうか Desktop に聞いて」や「README を Code に送って」と伝えると、モデルが意図を認識して Relay を自動的に呼び出します。

通知

メッセージが届くとシステム通知が表示されるため、相手側を確認するタイミングがわかります。手動でポーリングする必要はありません。

README の画像
プラットフォーム方法備考
macOSosascriptネイティブの通知センター
Linuxnotify-sendlibnotify が必要です
WindowsPowerShell toastネイティブのトースト通知

サウンド: 通知音を有効にするには --sound を追加します。値を指定しない場合は、プラットフォームのデフォルトが使用されます。値を指定すると、そのサウンドが使用されます。

プラットフォームデフォルトカスタム例
macOSblow--sound tink
Linuxfreedesktop のメッセージサウンド--sound /path/to/sound.oga
Windowsシステムのデフォルト--sound ms-winsoundevent:Notification.IM

通知の表示時間と表示動作は、OS の設定で制御されます。

設計哲学

トランスポートであり、記憶ではありません。 リレーはメッセージバスです。メッセージの要約、圧縮、書き換え、解釈は行いません。共有される隠れたコンテキストや、統合されたシステムプロンプト、エージェント間のプランニングもありません。メッセージは変更されずに渡されます。これにより、関心事を明確に分離し、認識上の歪みを防ぎます。

基本的にユーザーが制御します。 メッセージの取得は通常、バックグラウンドプロセスではなく、明示的なユーザー操作(get または /get)によって行われます。これにより、コンテキストの際限ない増大やフィードバックループを防げます。ただし、モデルは相手側からの入力が必要だと判断した場合、自律的にメッセージを送信または取得できます。システムはこれを可能にしますが、推奨はしていません。

インターフェースは独立しています。 Desktop と Code は、それぞれ単独で完全に使用できます。Code を使わずに Desktop で長時間会話したり、Desktop を使わずに Code で何時間もデバッグしたりできます。リレーは必要なときに両者を接続しますが、依存関係は作りません。また、どちらのインターフェースも既存のサブスクリプションを利用するため、API コストはかかりません。

必要最小限の機能です。 リレーが行うのは、送信、取得、消去の 3 つです。オーケストレーション、調停、合意形成、自律的な動作は提供しようとしません。この制約は意図的なものです。マルチエージェント設計の多くは、明確に保つべき境界を曖昧にすることで失敗します。

自然に拡張できます。 複数の Code セッションを同じ Desktop に接続し、適切な会話にメッセージを送れます。追加の MCP 対応ピア、代替ストレージバックエンド、プロジェクトごとのバッファー、読み取り専用のオブザーバーも、この設計から自然に拡張できます。

これにより、人間が介在し、明示的に同期するマルチエージェントメッセージバスという、独自のインフラストラクチャクラスが定義されます。

設計に関する注意事項

リレーはグローバルです。 ~/.relay_buffer.db のバッファーは、すべてのプロジェクトで共有されます。Desktop は作業中のプロジェクトを認識しないため、プロジェクトごとに分離するのは現実的ではありません。これは意図的な設計です。1 人のユーザー、1 台のマシン、1 つのリレーです。

Code でプロジェクトを切り替えても、リレーはそのまま引き継がれます。前のプロジェクトの古いメッセージが残っている場合があります。新しく始めたい場合は、/get clear を使用してください。

大きなファイルは時間がかかります。 1、2 ページ程度のメッセージなら、リレーは高速です。大きなファイルの場合は、目的のインターフェースに直接ドラッグするほうが速くなります。付随するコンテキストは、引き続きリレー経由で送信できます。

セットアップ

uvx とは何ですか? uvx は、Python パッケージをグローバルにインストールせずに直接実行します。依存関係も自動的に処理します。まだインストールしていない場合は、curl -LsSf https://astral.sh/uv/install.sh | sh を実行してください(詳しくは astral.sh/uv をご覧ください)。

1. Claude Desktop を設定する

Claude Desktop の設定に追加します。

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux:~/.config/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "relay": {
      "command": "uvx",
      "args": ["mcp-server-relay", "--client", "desktop", "--sound"]
    }
  }
}

Claude Desktop を再起動し、次の指示を記憶するよう伝えます。

覚えておいてください。ユーザーが「get」または「/get」だけを入力したら、relay_fetch を使ってリレーから最近のメッセージを取得してください。

「Show me my memory edits.」と言うと、記録されたことを確認できます。

2. Claude Code を設定する

プロジェクトのルートにある .mcp.json に追加します。

{
  "mcpServers": {
    "relay": {
      "command": "uvx",
      "args": ["mcp-server-relay", "--client", "code"]
    }
  }
}

注:通知を両側に送るのは Desktop なので、--sound が必要なのは Desktop だけです。

3. /get コマンドと起動フックをインストールする
uvx mcp-server-relay --setup-code

これにより、/get スラッシュコマンドと、Code の起動時に保留中のメッセージを表示する SessionStart フックがインストールされます。

代替方法:GitHub からインストールする

uvx を使用したくない場合は、リポジトリをクローンして直接実行します。

git clone https://github.com/mhcoen/mcp-relay.git
cd mcp-relay
python -m venv .venv
.venv/bin/pip install -e .

その後、設定ではフルパスを使用します。

Claude Desktop(claude_desktop_config.json):

{
  "mcpServers": {
    "relay": {
      "command": "/path/to/mcp-relay/.venv/bin/python",
      "args": ["/path/to/mcp-relay/relay_server.py", "--client", "desktop", "--sound"]
    }
  }
}

Claude Code(.mcp.json):

{
  "mcpServers": {
    "relay": {
      "command": "/path/to/mcp-relay/.venv/bin/python",
      "args": ["/path/to/mcp-relay/relay_server.py", "--client", "code"]
    }
  }
}

/path/to/mcp-relay を実際にクローンした場所に置き換えてください。

ツール

ツール説明
relay_send(message, sender)メッセージを送信します(sender:「desktop」または「code」)
relay_fetch(limit, reader, unread_only)最近のメッセージを取得します。既読としてマークすることもできます
relay_clear()バッファー内のすべてのメッセージを削除します

技術的な詳細

  • バッファー:~/.relay_buffer.db にある SQLite
  • ローリングウィンドウ:最大 20 件のメッセージ(最も古いものから削除)
  • メッセージの上限:1 件あたり 8 KB
  • アイドルタイムアウト:1 時間(非アクティブになるとサーバーは自動的に終了します)
  • トランスポート:stdio(標準の MCP)
  • Python:3.9 以降

作者

Michael Coen — [email protected] · [email protected]

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。