Herald - The Self Hosted Mcp Bridge Between Claude Chat And Claude Code について
Herald は、Claude Chat と Claude Code を接続するセルフホスト型の MCP サーバーです。スマートフォンやブラウザからタスクを指示すると、ワークステーション上の Claude Code がバックグラウンドで実行します。離れた場所からコーディング作業を進めたい開発者に向いています。
主な機能
- 01Anthropic 公式の Custom Connectors プロトコル対応
- 02非同期タスク実行と進捗確認
- 03タスクごとに独立した Git ブランチを使用
- 04複数ターンの会話を再開するセッション再開機能
- 05Claude Code のセッションを Herald へ送信
- 06プロジェクトごとの Claude Code ツール制限
活用シーン
- 01スマートフォンからのリファクタリングやテストのタスク投入
- 02外出先でのタスク状況確認と結果取得
- 03別のデバイスでの Claude Code セッションの継続
MCP 対応
Herald は MCP サーバーとして、start_task、check_task、get_result、get_diff など 10 個のツールを Claude Chat に公開し、MCP 通知でタスクの更新を送信します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://your-herald-instance.example.com/mcpclaude mcp add --transport http herald https://your-herald-instance.example.com/mcp{"mcpServers":{"herald":{"type":"http","url":"https://your-herald-instance.example.com/mcp"}}}Cursor で開く{"servers":{"herald":{"type":"http","url":"https://your-herald-instance.example.com/mcp"}}}VS Code で開く{"mcpServers":{"herald":{"type":"http","url":"https://your-herald-instance.example.com/mcp"}}}{"mcpServers":{"herald":{"serverUrl":"https://your-herald-instance.example.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Herald
スマートフォンからコードを書きましょう。本当です。
Claude Chat と Claude Code をつなぐ、セルフホスト可能な MCP ブリッジ。
ドキュメント ·
クイックスタート ·
仕組み ·
機能 ·
セキュリティ ·
ロードマップ
🇫🇷 フランス語版
ソファでくつろぎながら、スマートフォンを使っています。Claude Chat を開いて、次のように入力します。
「my-api の認証ミドルウェアをリファクタリングして、セッション Cookie の代わりに JWT を使うようにしてください。テストも実行してください。」
4 分後、作業は完了です。ブランチが作成され、コードがリファクタリングされ、テストが成功し、変更がコミットされています。すべての作業はワークステーションが行いました。ノートパソコンを開く必要はありませんでした。
それが Herald です。
問題
Claude Chat と Claude Code は、完全に別々の世界で動作する、どちらも優れたツールです。
| Claude Chat | Claude Code | |
|---|---|---|
| 場所 | ブラウザー、スマートフォン、どこでも | ターミナル |
| できること | 会話、分析、思考 | 実際のコードを読み、書き、リリースする |
| 隔たり | コードベースに触れられない | デスクを離れられない |
これまでは両者の間でコピー&ペーストを繰り返していました。あるいはもっと悪いことに、デスクに戻るまで待っていました。もうその必要はありません。
解決策
Herald は、Anthropic 公式のカスタムコネクタープロトコルを使って、Claude Chat と Claude Code をつなぐセルフホスト可能な MCP サーバーです。Go のバイナリ 1 つ。ハックは一切ありません。
You (phone/tablet/browser)
│
│ "Add rate limiting to the API"
▼
Claude Chat ──── MCP over HTTPS ────► Herald (your workstation)
│
▼
Claude Code
├── reads your codebase
├── writes the code
├── runs the tests
└── commits to a branch
You (terminal)
│
│ Claude Code calls herald_push
▼
Claude Code ──── MCP ────► Herald ────► Claude Chat picks it up
└── session context, summary,
files modified, git branch
このブリッジは双方向です。Claude Chat は Claude Code にタスクを割り当て、Claude Code はセッションのコンテキストを Herald にプッシュして、リモートでの監視や別のデバイスからの続行に利用できます。
コードがマシンから外に出ることはありません。Herald は処理を調整するだけです。
仕組み
You (Claude Chat) Herald Claude Code
───────────────── ────── ───────────
"Refactor auth..." ──► start_task
→ creates branch
→ spawns Claude Code ──► reads codebase
refactors code
runs tests
commits changes
◄── task_id: herald-a1b2c3d4
"How's it going?" ──► check_task
◄── ✅ Completed (4m 12s)
4 files changed (+127/-23)
"Show me the diff" ──► get_diff
◄── auth/middleware.go
+func ValidateJWT(...)
-func CheckSession(...)
ツールは 3 つ。それが基本の流れです。どこにいても、タスクを開始し、状況を確認し、結果を受け取れます。
逆方向のフロー:Claude Code → Herald
ターミナルで作業中に、スマートフォンから続きを進めたい場合は、Claude Code から Herald にセッションをプッシュします。
You (terminal) Claude Code Herald
────────────── ─────────── ──────
"Push this to Herald" ──► herald_push
→ session_id, summary,
files, branch ──► linked task created
🔗 visible in list_tasks
You (phone, later) Claude Chat Herald
────────────────── ─────────── ──────
"What sessions are list_tasks
waiting for me?" ──► (status: linked) ──► 🔗 herald-a1b2c3d4
my-api / feat/auth
"Resume that session" ──► start_task
(session_id) ──► picks up where you left off
機能
コア機能
- ネイティブ MCP ブリッジ — Anthropic 公式のカスタムコネクタープロトコルを使用します。ハックでも、ラッパーでも、プロキシでもありません。
- 非同期タスク実行 — タスクを開始し、進捗を確認して、結果を受け取れます。ほかの作業をしている間、Claude Code はバックグラウンドで実行されます。
- Git ブランチの分離 — 各タスクは独自のブランチで実行されます。メインブランチには影響しません。
- セッションの再開 — Claude Code との複数ターンの会話に対応します。前回の続きから作業できます。
- 双方向ブリッジ — Claude Code は
herald_push経由でセッションのコンテキストを Herald にプッシュし、リモートでの監視や別のデバイスからの続行に利用できます。
複数プロジェクト
- 複数プロジェクト — 必要な数のプロジェクトを、それぞれ独自の設定で構成できます。
- プロジェクトごとのツール制限 — Claude Code が使用できるツールを厳密に制御できます。プロジェクトごとに完全なサンドボックス化を実現します。
運用
- MCP プッシュ通知 — Herald は MCP サーバーの通知を通じて、タスクの更新を Claude Chat に直接プッシュします。ポーリングは不要です。
- SQLite による永続化 — サーバーを再起動してもタスクは保持されます。すべての履歴を保存し、検索できます。
エンジニアリング
- 単一バイナリ — Go の実行ファイルは 1 つだけで、サイズは約 15MB です。Docker、ランタイム、node_modules は不要です。
- CGO ゼロ — 純粋な Go です。Linux、macOS、Windows、ARM 向けにクロスコンパイルできます。
- 依存関係は 6 つ — chi、mcp-go、modernc/sqlite、uuid、yaml、testify です。依存関係ツリーはこれだけです。
クイックスタート
前提条件:Claude Code CLI がインストールされていること。HTTPS 接続には ngrok(組み込み)またはリバースプロキシ付きのドメインを使用します。
1. インストール
curl -fsSL https://raw.githubusercontent.com/btouchard/herald/main/install.sh | sh
またはソースからビルド(Go 1.26+ が必要です)
git clone https://github.com/btouchard/herald.git
cd herald && make build
# Binary is in ./bin/herald
2. 設定
mkdir -p ~/.config/herald
cp configs/herald.example.yaml ~/.config/herald/herald.yaml
# Edit with your domain and projects (see below)
3. 実行
herald serve
# Client secret is auto-generated on first start and displayed in the console
~/.config/herald/herald.yaml を編集して、ドメインとプロジェクトを設定します。
server:
host: "127.0.0.1"
port: 8420
public_url: "https://herald.yourdomain.com"
auth:
client_id: "herald-claude-chat"
projects:
my-api:
path: "/home/you/projects/my-api"
description: "Main backend API"
default: true
allowed_tools:
- "Read"
- "Write"
- "Edit"
- "Bash(git *)"
- "Bash(go *)"
- "Bash(make *)"
git:
auto_branch: true
branch_prefix: "herald/"
次に、Claude Chat から接続します。
- Claude Chat → 設定 → カスタムコネクタ
- コネクタを追加:
https://herald.yourdomain.com/mcp - OAuth で認証します
- 完了 — Claude Chat からワークステーションを操作する 10 個の新しいツールを利用できるようになります
ngrok を使ったクイックスタート(リバースプロキシ不要)
ドメインやリバースプロキシがありませんか?ngrok を使えば、Herald を HTTPS 経由ですぐに公開できます。
1. ngrok 認証トークンを取得
ngrok.com で登録し(無料プランで利用できます)、ダッシュボードから認証トークンを取得します。
2. 設定でトンネルを有効化
~/.config/herald/herald.yaml を編集します。
tunnel:
enabled: true
provider: "ngrok"
authtoken: "2abc..." # or set HERALD_NGROK_AUTHTOKEN env var
# domain: "my-herald.ngrok-free.app" # optional: fixed domain (paid plans)
3. Herald を実行
herald serve
# Tunnel URL appears in the banner:
# Tunnel: https://abc123.ngrok-free.app (ngrok)
バナーに表示される ngrok URL を使って、Claude Chat から接続します。これだけで完了です — Traefik、Caddy、DNS の設定は不要です。
注:ngrok トンネルは任意です。すでにリバースプロキシ(Traefik/Caddy)がある場合は、
tunnel.enabled: falseのままにして、通常どおりドメインを使用してください。
設定の完全なリファレンス
server:
host: "127.0.0.1" # Always localhost — reverse proxy handles external
port: 8420
public_url: "https://herald.yourdomain.com"
log_level: "info" # debug, info, warn, error
log_file: "" # Optional file path for log output
auth:
client_id: "herald-claude-chat"
# client_secret is auto-generated — override with HERALD_CLIENT_SECRET env var if needed
access_token_ttl: 1h
refresh_token_ttl: 720h # 30 days
redirect_uris:
- "https://claude.ai/oauth/callback"
- "https://claude.ai/api/oauth/callback"
- "https://claude.ai/api/mcp/auth_callback"
database:
path: "~/.config/herald/herald.db"
retention_days: 90
execution:
claude_path: "claude"
model: "claude-sonnet-4-5-20250929" # Default model for tasks
default_timeout: 30m
max_timeout: 2h
work_dir: "~/.config/herald/work"
max_concurrent: 3
max_prompt_size: 102400 # 100KB
max_output_size: 1048576 # 1MB
env:
CLAUDE_CODE_ENTRYPOINT: "herald"
CLAUDE_CODE_DISABLE_AUTO_UPDATE: "1"
projects:
my-api:
path: "/home/you/projects/my-api"
description: "Main backend API"
default: true
allowed_tools:
- "Read"
- "Write"
- "Edit"
- "Bash(git *)"
- "Bash(go *)"
- "Bash(make *)"
max_concurrent_tasks: 1
git:
auto_branch: true
auto_stash: true
auto_commit: true
branch_prefix: "herald/"
tunnel:
enabled: false # Set to true to enable ngrok tunnel
provider: "ngrok"
authtoken: "" # or set HERALD_NGROK_AUTHTOKEN env var
# domain: "" # optional: fixed domain (paid ngrok plans)
rate_limit:
requests_per_minute: 200
burst: 100
MCP ツール
Herald は 10 個のツールを公開しており、Claude Chat は MCP プロトコルを介してこれらを自動的に検出します。
| ツール | 機能 |
|---|---|
start_task | Claude Code のタスクを開始します。すぐに ID を返します。優先度、タイムアウト、セッションの再開、Git ブランチのオプションをサポートしています。 |
check_task | ステータスと進捗を確認します。必要に応じて最近の出力も含められます。 |
get_result | 完了したタスクの結果全体(summary、full、json)を取得します。 |
list_tasks | ステータス、プロジェクト、期間で絞り込んでタスクを一覧表示します。 |
cancel_task | 実行中またはキューに入っているタスクをキャンセルします。必要に応じて Git の変更を元に戻せます。 |
get_diff | タスクのブランチまたは未コミットの変更の Git 差分を取得します。 |
list_projects | Git のステータスとともに、設定済みのプロジェクトを一覧表示します。 |
read_file | プロジェクトのファイルを読み込みます(パスは安全に処理され、プロジェクトのルート外にはアクセスできません)。 |
herald_push | Claude Code のセッションを Herald に送信し、別のデバイスからリモートで監視して続行できるようにします。 |
get_logs | ログとアクティビティ履歴を表示します。 |
セキュリティ
Herald は Claude Code をネットワークに公開します。私たちはこの点を真剣に受け止めています。
| 層 | 保護 |
|---|---|
| ネットワーク | 127.0.0.1 のみでバインドします。組み込み ngrok トンネルまたはリバースプロキシ(Traefik/Caddy)経由で HTTPS を使用します。 |
| 認証 | PKCE を使用した OAuth 2.1。すべてのリクエストに有効な Bearer トークンが必要です。 |
| トークン | アクセストークン:1 時間。リフレッシュトークン:30 日。使用するたびにローテーションされます。 |
| ファイルシステム | すべてのファイル操作でパストラバーサルを防止します。シンボリックリンクによるルート外へのアクセスもブロックします。 |
| 実行 | プロジェクトごとにツールを制限します。包括的な --dangerously-skip-permissions は使用しません。 |
| レート制限 | トークンごとに 200 リクエスト/分(設定可能)。 |
| タイムアウト | すべてのタスクに期限があります(デフォルト:30 分)。プロセスが暴走することはありません。 |
| プロンプト | 加工せずに Claude Code に渡します。インジェクション、拡張、書き換えは行いません。 |
| 監査 | すべての操作をタイムスタンプと実行者情報とともに記録します。 |
アーキテクチャ
Claude Chat (mobile/web)
→ HTTPS (MCP Streamable HTTP + OAuth 2.1)
→ Traefik / Caddy (TLS termination)
→ Herald (Go binary, port 8420)
├── MCP Handler (/mcp)
├── OAuth 2.1 Server (PKCE, token rotation)
├── Task Manager (goroutine pool, priority queue)
├── Executor Registry (pluggable backends, default: Claude Code)
├── SQLite (persistence)
└── MCP Notifications (server push via SSE)
設計原則:単一バイナリ(すべてを1つのGo実行ファイルにコンパイル)、非同期優先(各タスクはゴルーチンで実行)、ステートレスなMCPとステートフルなバックエンド、安全側に倒す(Heraldがクラッシュしても実行中のClaude Codeプロセスは終了しません)。
技術スタック
| コンポーネント | 選択 | 理由 |
|---|---|---|
| 言語 | Go 1.26 | 単一バイナリ、クロスコンパイル、ゴルーチン |
| MCP | mcp-go | ストリーミング可能なHTTP、公式プロトコルのサポート |
| ルーター | chi | 軽量、標準ライブラリ互換 |
| データベース | modernc.org/sqlite | 純粋なGo、CGO不要 |
| ロギング | log/slog | Go標準ライブラリ、構造化ログ |
| 設定 | gopkg.in/yaml.v3 | 標準YAML |
直接依存関係は6つです。ORMはありません。ロギングフレームワークはありません。ビルドツールチェーンは不要です。
デプロイ
Heraldはネイティブバイナリとして実行するのが最適です(Claude Codeとファイルに直接アクセスできます)。オプションとしてDockerも利用できます。
Traefikを使ったDocker Compose
services:
traefik:
image: traefik:v3
command:
- "--entrypoints.websecure.address=:443"
- "[email protected]"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
ports:
- "443:443"
volumes:
- "./letsencrypt:/letsencrypt"
herald:
build: .
network_mode: host
volumes:
- "~/.config/herald:/root/.config/herald"
- "~/projects:/root/projects:ro"
labels:
- "traefik.http.routers.herald.rule=Host(`herald.yourdomain.com`)"
- "traefik.http.routers.herald.tls.certresolver=le"
- "traefik.http.services.herald.loadbalancer.server.port=8420"
ロードマップ
| バージョン | ステータス | 重点項目 |
|---|---|---|
| v0.1 | ✅ 完了 | コアMCP サーバー、非同期タスク、Git統合、OAuth 2.1、SQLite |
| v0.2 | 🚧 開発中 | 共有メモリ — Claude ChatとClaude Code間の双方向コンテキスト |
| v0.3 | 🚀 将来 | 安定したAPI、プラグインシステム |
アイデアがありますか?Issueを作成してください。ユーザーが必要とするものを作ります。
コントリビューション
Heraldはまだ初期アルファ版です。プロジェクトの方向性を形作るには最適な時期です。
# Get started
git clone https://github.com/btouchard/herald.git
cd herald
make build && make test
# Create your branch
git checkout -b feat/your-feature
# Code, test, lint
make lint && make test
# Open a PR
コミットメッセージはConventional Commits(feat:、fix:、refactor:、docs:)に従ってください。
バグ修正、新しい通知バックエンド、ドキュメントの改善など、あらゆるコントリビューションを歓迎します。
Heraldを選ぶ理由
| Herald | コピー&ペーストのワークフロー | その他のツール | |
|---|---|---|---|
| 公式プロトコル | MCP Custom Connectors | 該当なし | カスタムAPI、壊れやすい |
| コードをローカルに保持 | 常に | はい | 場合による |
| スマートフォンから利用可能 | ネイティブ | いいえ | まれ |
| セルフホスト可能 | 100% | 該当なし | SaaSが多い |
| 依存関係 | 6 | 該当なし | 50〜200以上 |
| セットアップ時間 | 約5分 | 該当なし | 30分以上 |
| CGOが必要 | いいえ | 該当なし | 多くの場合 |
Heraldは、Anthropicが自社の連携機能のために構築したものと同じプロトコルを使用しています。リバースエンジニアリングも、非公式APIも、次のアップデートで動かなくなるハックもありません。
AGPL-3.0ライセンス — Benjamin Touchardが開発
Heraldが時間の節約に役立ったら、スターを付けてください
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。