mcpField
A
Agent Relay

Agent Relay

ローカル
arelay.appAI・エージェント108 週間前に更新

Agent Relay について

Agent Relayは、AIエージェントからのファイルや承認依頼を受け取る暗号化インボックスです。HTTP連携やCLIに対応し、セルフホストもできます。

主な機能

  1. 01エンドツーエンド暗号化によるファイル配信
  2. 02メール下書きの人間による承認
  3. 03成果物のプレビューとダウンロード
  4. 04パスキー認証と名前付きトークン
  5. 05ホスト型またはセルフホスト型の運用

活用シーン

  1. 01エージェントが作成したレポートの確認
  2. 02エージェントのメール下書きの承認または拒否
  3. 03スクリプトやWebhookからのファイル受信

MCP 対応

CLIをMCPサーバーとして起動でき、ファイル配信、インボックスセッションの一覧表示、メール下書きの送信ツールを提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"mmmikael-arelay": {
"command": "npx",
"args": [
"-y",
"@arelay/cli"
],
"env": {
"ARELAY_TOKEN": "<ARELAY_TOKEN>",
"ARELAY_URL": "<ARELAY_URL>"
}
}
}
}
起動コマンドnpx -y @arelay/cli
設定が必要な環境変数
ARELAY_TOKENシークレットAgent token created in the Agent Relay portal under Account → Agent tokens.
ARELAY_URLBase URL of the Agent Relay deployment. Defaults to https://arelay.app.

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

パッケージ
npm@arelay/cli0.2.0

ツール

4

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
filesarrayはい送信するファイル。
titlestringはい送信セッションの短く分かりやすいタイトル。
summarystringいいえ送信した内容とその理由を 1~2 文で説明します。
session_idstringいいえ新しいセッションを作成せずにファイルを追加する既存のセッション ID。

詳細

Agent Relay

CI CodeQL License: MIT Node.js TypeScript Svelte Website

Agent Relay は、AI エージェントが許可を求める場所です。エージェントはメールの下書きを作成し、支出の承認を申請し、完成した成果物をエンドツーエンドで暗号化されたプライベートな受信トレイに送信します。あなたが承認するまで、何も外部に送信されたり、メールが送られたり、課金されたりすることはありません。HTTP リクエストを送信できるものであれば、Cursor、Codex、Claude Code、cron ジョブ、Webhook、独自のバックエンドなど、何でも利用できます。また、MIT ライセンスのオープンソースなので、自分で運用できます。

暗号化された配信が Agent Relay の受信トレイに届き、プレビューウィンドウでレポートを開いている様子

オプションの Email Review Relay プラグインを使うと、送信メールに人間が介在するフローが追加されます。エージェントが暗号化された下書きを送信し、同じ受信トレイでプレビューした後、実際に送信する前に承認または却下できます。arelay.app では有効になっています。セルフホストする場合は、EMAIL_REVIEW_RELAY_ENABLED=true を設定して有効にできます(セットアップ)。

利用方法は2つあります。

  • arelay.app — ホステッドサービス。登録してエージェントを接続するだけです (デプロイは不要です)。
  • セルフホスト — このリポジトリを自分のインフラストラクチャで、MIT ライセンスの下で実行します。

目次

arelay.app を利用する
セルフホスト
リファレンス

arelay.app を利用する

arelay.app のホステッドサービスが、デプロイ、データベース、ストレージ、バックアップ、TLS、更新を管理します。セキュリティモデルはセルフホストの場合と同じです。暗号化された配信はサーバー上ではなく、ブラウザーで復号されます。例外はメールの下書きを承認する場合です。メールを配信できるよう、そのリクエスト内で復号済みのメールがサーバーに送信されますが、平文として保存されることはありません。メール自体はエンドツーエンドで暗号化されないため、受信者のメールプロバイダーには同じ内容が恒久的に表示されます。

はじめに
  1. arelay.app を開き、パスキーを使ってアカウントを作成します。
  2. 登録時に利用規約と プライバシーポリシーに同意します(ホスト型サービスでは必須です)。
  3. 初めてポータルにアクセスしたときに、暗号化を設定します(パスキー+復旧キー)。
  4. ポータルで アカウント → エージェントトークン を開き、エージェントまたは連携ごとに名前付きトークンを作成します。
  5. トークンをコピーします。トークンが表示されるのは作成時の一度だけです。
  6. エージェントが配信を送信すると、受信トレイが自動的に更新されます(数秒ごとに更新)。

サインインにはパスキー(WebAuthn)を使用し、パスワードやソーシャルログインは使用しません。Google、Apple、Microsoft のアカウントは不要です。規約またはプライバシーポリシーが後日更新された場合、既存のアカウントには、続行する前に新しいバージョンへの同意が求められます。

AI エージェントを接続する

Agent Relay はエージェントに依存しません。HTTP に対応し、 E2EE エンベロープ形式に従うクライアントであれば、どれでも配信できます。ご利用の環境に合った方法を選んでください。

連携方法最適な用途
CLI と MCP サーバー最も手早く始められます。任意のシェルからコマンドを 1 つ実行するか、Claude Code、Cursor、Claude Desktop でネイティブの MCP ツールを使用できます
エージェントスキルCursor、Codex、Claude Code、Hermes Agent、その他のエージェントスキル対応ホスト
HTTP API を直接利用カスタムスクリプト、バックエンド、Webhook、スケジュールされたジョブ
プラットフォームプラグインプラットフォーム固有のフック。例:Hermes の cron 配信

どの方法を選んでも、エージェントの実行環境に以下を設定してください。トークンは絶対にコミットしないでください。

変数arelay.app の値
ARELAY_URLhttps://arelay.app
ARELAY_TOKENアカウント → エージェントトークンから取得したトークン

すべてのリクエストで Authorization: Bearer <ARELAY_TOKEN> を使用します。

CLI と MCP サーバー

@arelay/cli npm パッケージは、API とすべてのエンベロープ暗号化をラップします。任意のシェルから配信できます。

export ARELAY_TOKEN=ar_...   # from Account → Agent tokens
npx -y @arelay/cli send report.md --title "Q2 revenue report"

または、MCP サーバーとして登録すると、エージェントからネイティブに作業を配信できます (deliver_to_inbox、list_inbox_sessions、submit_email_draft ツール)。

# Claude Code
claude mcp add arelay --env ARELAY_TOKEN=ar_... -- npx -y @arelay/cli mcp

npx -y @arelay/cli check を実行すると、トークンと暗号化の設定を確認できます。このパッケージは型定義付き SDK(import { ArelayClient } from '@arelay/cli')もエクスポートします。詳しくは、パッケージの READMEを参照してください。セルフホストする場合は、ARELAY_URL にデプロイ先を指定します。

エージェントスキル

agent-relay スキルをインストールします(ポータルの E2EE 設定が必要です)。

npx skills add mmmikael/arelay-skills --skill agent-relay -g -y

Hermes Agent:

hermes skills tap add mmmikael/arelay-skills
hermes skills install mmmikael/arelay-skills/agent-relay
HTTP API を直接利用

JSON を POST できるものなら何でも配信できます。GET /api/agent/e2ee/config で公開鍵を取得し、ローカルで暗号化して、セッションを作成し、アーティファクトをアップロードします。実用的な暗号化コードについては、 API リファレンス と、スキルに同梱されている Node のリファレンススクリプトを参照してください。

プラットフォームプラグイン

Hermes cron(--deliver arelay)にはarelay-hermes-pluginが必要です。 cron は対話型 CLI ではなくゲートウェイで実行されます。認証情報を ~/.hermes/.env に設定し(AGENT_RELAY_HOME_CHANNEL=https://arelay.app も含めます)、プラグインをインストールしてから、ゲートウェイを再起動してください。

hermes plugins install mmmikael/arelay-hermes-plugin --enable
# ~/.hermes/.env: AGENT_API_TOKEN, AGENT_RELAY_URL, AGENT_RELAY_HOME_CHANNEL
#   (the Hermes plugin reads its own variables, not the CLI's ARELAY_* ones)
hermes gateway start
/cron add "0 9 * * *" "Your prompt. Never use [SILENT]." --deliver arelay
暗号化(必須)

すべてのエージェントからの配信は、エンドツーエンドで暗号化する必要があります。 はじめにの「暗号化を設定」を完了し、受信トレイを表示するときにブラウザーでロックを解除してください。エージェントはGET /api/agent/e2ee/configから公開鍵を取得し、暗号化されたセッションとアーティファクトをアップロードします。プレーンテキストのエージェントペイロードは400(plaintext_not_allowed)を返し、設定されていないアカウントは428(e2ee_required)になります。

メール確認リレー

arelay.appでは、エージェントが暗号化されたメールの下書きをPOSTすると、それぞれが受信トレイのセッションとして表示されます。承認するとCloudflareの認証情報を使って送信され、拒否すると送信されません。

  1. アカウント → メール送信(Cloudflare API) — CloudflareのアカウントIDとAPIトークンを保存します(サーバー側で暗号化され、承認したときにのみ使用されます)。
  2. agent-relayスキルを使用します — 下書きには、ファイル配信と同じE2EEエンベロープを使用します。

APIの詳細とセルフホストの設定については、プラグインをご覧ください。

機能
  • モバイル対応のメール形式の受信トレイ
  • メール確認リレー:エージェントが送信メールの下書きを作成し、送信前に承認できます
  • アーティファクトのプレビューとダウンロード(テキスト、Markdown、HTML、PDF、画像)
  • サンドボックス化されたHTML/Markdownプレビュー(外部リンクとメディアは除去されます)
  • エンドツーエンド暗号化された配信のみ
  • パスキーでのサインイン(アカウントごとにパスキー1つ)
  • 名前付きエージェントAPIトークン(トークンごとに失効可能)
  • ストレージ制限:アーティファクトあたり25 MB、アカウントあたり500 MB

セルフホスト

Agent Relayを独自のPostgreSQLとS3互換ストレージで実行します。データレジデンシーを完全に管理する必要がある場合や、プライベート環境にデプロイする場合に便利です。

開発環境のセットアップ
npm install
cp .env.example .env
npm run db:migrate:local
npm run dev

http://127.0.0.1:5173を開き、パスキーを使ってアカウントを作成します。CloudflareまたはSMTPが設定されていない場合、確認コードはサーバーコンソールに出力されます。

データベーススキーマの変更はDrizzleのマイグレーションで管理します。Drizzleスキーマを編集し、npm run db:generateでマイグレーションを生成して、生成されたSQLを確認したうえで、npm run db:migrate:localを実行して適用します。

単体テストを実行します。

npm test

使い捨ての空のデータベースでマイグレーションをテストするには、TEST_DATABASE_URLを設定して次を実行します。

npm run db:smoke
環境変数
変数説明
SESSION_SECRET人間用セッション Cookie の署名に使用するシークレットです。openssl rand -hex 32 で生成します。
SESSION_VERSION既存の人間用セッションを無効化するには、この値を増やします。
ORIGINCSRF チェックおよび絶対リンクに使用する公開サイト URL です。本番環境では、正規 URL(例:https://arelay.app)を設定します。
WEBAUTHN_RP_NAMEパスキーのリライングパーティー表示名です。デフォルトは Agent Relay です。
WEBAUTHN_RP_IDパスキーのリライングパーティー ID です。arelay.app の本番環境では、arelay.app を使用します。
WEBAUTHN_ORIGIN想定されるパスキーのオリジンです(例:https://arelay.app)。
DATABASE_URLPostgreSQL 接続文字列です。
CLOUDFLARE_ACCOUNT_IDEmail Sending 用の Cloudflare アカウント ID です。送信ドメインが Cloudflare DNS 上にある場合に使用します。
CLOUDFLARE_API_TOKENEmail Sending 権限を持つ Cloudflare API トークンです。
EMAIL_FROMCloudflare または SMTP を設定している場合に必須です。確認メールの送信者アドレスです(例:Agent Relay <[email protected]>)。
SMTP_HOSTアカウントのメール確認に使用する SMTP ホストです。Cloudflare Email Sending が設定されていない場合に使用します。
SMTP_PORTSMTP ポートです。デフォルトは 587、SMTP_SECURE=true の場合は 465 です。
SMTP_SECURE暗黙的 TLS の SMTP を使用する場合は true に設定します。
SMTP_USERプロバイダーで認証が必要な場合の SMTP ユーザー名です。
SMTP_PASSWORDプロバイダーで認証が必要な場合の SMTP パスワードです。
S3_ENDPOINTS3 互換エンドポイント URL です。
S3_BUCKETS3 バケット名です。
S3_PREFIXオブジェクトキーのプレフィックスです。デフォルトは agent-relay です。
S3_ACCESS_KEYS3 アクセスキーです。
S3_SECRET_KEYS3 シークレットキーです。
S3_REGIONS3 リージョンです。デフォルトは us-east-1 です。
PORTnpm start 用の HTTP ポートです。デフォルトは 3000 です。Railway により自動設定されます。
BODY_SIZE_LIMITadapter-node の HTTP リクエストボディの最大サイズです。暗号化されたアーティファクトのアップロードに必要です(25 MB のファイルには約 37 MB の JSON が必要です。Pro プランの 100 MB には約 140 MB が必要です)。npm start の使用時はデフォルトで 140M です。
NODE_ENV本番環境では production に設定し、セッション Cookie と WebAuthn Cookie で Secure を使用します。
EMAIL_REVIEW_RELAY_ENABLED任意のプラグインです。Email Review Relay を有効にするには true に設定します(デフォルトではオフです)。
Cloudflare Email Sending と SMTP の両方が設定されている場合は、Cloudflare が使用されます。
本番環境へのデプロイ

要件:

  • PostgreSQL
  • S3 互換のオブジェクトストレージ(agent-relay/ プレフィックスにスコープを限定した最小限の AWS IAM ポリシーについては、scripts/iam-agent-relay-s3-policy.json を参照してください)
  • アカウント認証用のメール配信(Cloudflare Email Sending または SMTP)
  • WebAuthn RP 設定が正しい、安定した HTTPS オリジン

ビルドと実行:

npm run db:migrate:local
npm run build
npm start

本番用の新しいデータベースでは、アプリを起動する前にマイグレーションを実行してください。古いデータベースから初期のアカウント/認証レコードを移行する場合は、users、webauthn_credentials、e2ee_config、agent_api_tokens のみをコピーし、受信トレイ/コンテンツ/プラグインのテーブルは空のままにしてください。

Railway:

  1. github.com/mmmikael/arelay から新しいサービスを作成します。
  2. PostgreSQL を追加し、DATABASE_URL をリンクします。
  3. S3 互換ストレージの認証情報を追加します。
  4. SESSION_SECRET を設定します。
  5. ドメインに合わせて WEBAUTHN_RP_ID と WEBAUTHN_ORIGIN を設定します。
  6. メール配信を設定します。Cloudflare Email Sending の場合は CLOUDFLARE_ACCOUNT_ID、CLOUDFLARE_API_TOKEN、EMAIL_FROM を設定し、SMTP の場合は SMTP を設定します。
  7. NODE_ENV=production を設定します。
  8. BODY_SIZE_LIMIT=140M を設定します(または、未設定時にデフォルトで 140M を使用する npm start に任せます)。古い 40M に固定された値では、Pro プランで許可されている 100 MB のアーティファクトが拒否されます。
  9. railway.toml(preDeployCommand: npm run db:migrate)により、デプロイのたびにマイグレーションが自動実行されます。
  10. ビルドコマンドに npm run build、起動コマンドに npm start を使用します。

既存の本番データベース(従来の ensureSchema から Drizzle への移行): 初回の Drizzle デプロイ時に、npm run db:migrate は既存の users テーブルを検出し、CREATE TABLE を再実行せずに、ベースラインとなるマイグレーションを drizzle.__drizzle_migrations に記録してから、新しいマイグレーションを適用します。現在のスキーマとすでに一致している arelay.app 形式のデータベースでは、手動での切り替えは必要ありません。完全に新しいホストでは、代わりに空のデータベースに対してマイグレーションを実行してください。ゼロから再構築する場合は、古いデータベースから users、webauthn_credentials、e2ee_config、agent_api_tokens のみをコピーしてください。

エージェントの接続先に、デプロイ先の URL を指定します:ARELAY_URL=https://your-domain.example。

バックアップと復元(セルフホスティング)

Agent Relay はバックアップやアーカイブのサービスではありません。重要なコンテンツは別途コピーを保管してください。セルフホストの運用者はバックアップに責任を負います(SECURITY.md を参照)。

両方のストアをバックアップしてください。片方だけを復元すると、デプロイが機能しなくなります。

ストア内容
PostgreSQLアカウント、パスキー、E2EE 設定、API トークン、受信トレイのセッションメタデータ、メールの下書き
S3(S3_BUCKET / S3_PREFIX)inbox_artifacts.storage_key が参照する暗号化済みアーティファクトの BLOB

バックアップ

# PostgreSQL (custom format; adjust connection string)
pg_dump "$DATABASE_URL" -Fc -f agent-relay-$(date +%Y%m%d).dump

# S3 prefix (AWS CLI example; use your provider's equivalent)
aws s3 sync "s3://${S3_BUCKET}/${S3_PREFIX}/" "./agent-relay-s3-$(date +%Y%m%d)/"

利用可能な場合は、ホストのマネージドスナップショット(Railway Postgres、S3 のバージョニングなど)を使用してください。

復元

  1. PostgreSQL を復元し、続いて同じ S3_BUCKET と S3_PREFIX の下にオブジェクトストレージを復元します。
  2. 同じ SESSION_SECRET を維持してください。この値を変更すると、復元後にデータベース内の暗号化された Cloudflare 認証情報を復号できません。
  3. アプリを起動する前に npm run db:migrate を実行します(ダンプより新しいマイグレーションを適用します)。
  4. 動作を確認します。パスキーでサインインし、セッションを開いて、アーティファクトをダウンロードします。

配信されたコンテンツは、バックアップ内でも E2EE で暗号化されたままです。復旧には、引き続きアカウントのパスキーとポータルのロック解除が必要です。バックアップによってサーバー側で平文にアクセスできるようになることはありません。

プラグイン

任意機能はプラグインとして提供されるため、最小構成のセルフホスト環境を軽量に保てます。プラグインのテーブルは Drizzle のマイグレーションに含まれています。各プラグインは環境変数で有効にすると、その API と UI が使用可能になります。

Email Review Relay

エージェントは送信前に、人間によるレビュー用のメール下書きを提出します。arelay.app ではプラグインがデフォルトで有効になっています。セルフホストする場合は EMAIL_REVIEW_RELAY_ENABLED=true を設定してください。無効にすると、プラグイン API は 404 を返し、ポータル UI は非表示になります。

アカウントの設定(ポータル): Account(/portal/account)を開き、Email sending (Cloudflare API) に Cloudflare Account ID と API トークンを貼り付けます。 ユーザーごとのこれらの認証情報はサーバー側で暗号化され、下書きの承認時にのみ使用されます。 システムの CLOUDFLARE_* 環境変数は、引き続きサインアップの確認にのみ使用されます。

エージェント API: 認証済みのエージェントは、暗号化された下書きを /api/agent/email-drafts に POST します(encrypted: true とエンベロープフィールドを指定)。平文の下書きは拒否されます。

{
	"encrypted": true,
	"encrypted_to": { "v": 1, "alg": "P-256-ECDH-A256GCM", "...": "..." },
	"encrypted_from_email": { "...": "..." },
	"encrypted_subject": { "...": "..." },
	"encrypted_html": { "...": "..." },
	"idempotency_key": "optional-stable-key"
}

レスポンスには受信トレイのセッションと下書き(status: pending)が含まれます。下書きのステータスは GET /api/agent/email-drafts/{id} または GET /api/agent/sessions/{id} でポーリングします(該当する場合は email_draft が含まれます)。

人間によるレビュー(ポータル): セッションを開き、HTML を復号してプレビューし、Approve (Cloudflare の認証情報を使って送信)または Reject(送信しない)を選択します。Approve では、サーバー側に平文を保存せずにメールを送信できるよう、復号済みのフィールドをリクエストボディに含めて送信します。 Approve を使用するには、アカウントで Cloudflare Email Sending が設定されている必要があります。

承認された HTML 内の Base64 data:image/... ソースは、サニタイズと送信の前にブラウザーで CID インライン添付ファイルに変換されます。これにより、暗号化されたポータルのプレビューは自己完結したまま、埋め込み画像を Gmail などのメールクライアントで表示できるようになります。

技術スタック
  • SvelteKit 2、Svelte 5、TypeScript、Tailwind CSS
  • PostgreSQL、S3 互換オブジェクトストレージ
  • WebAuthn/パスキー

コントリビューションと協力者募集

Agent Relay はオープンソース(MIT)で開発状況を公開しており、規模を問わずコントリビューションを歓迎します。プロジェクトがまだ初期段階の今、貢献が大きな影響をもたらす余地があります。

手早く始めるには、インテグレーションを構築するのがおすすめです。多くのインテグレーションは @arelay/cli SDK を通じて HTTP API を利用し、コアアプリには触れないため、コードベース全体や暗号化の内部実装を学ばなくても、役立つものを公開できます。 インテグレーション構築ガイドでは、十数行の配信スクリプトからサーバーサイドの完全な機能プラグインまで、4 つのレベルを実例とともに紹介しています。

特に歓迎する貢献の例をいくつか挙げます。

  • 配信ブリッジと通知機能(Slack、Discord、Telegram)
  • CI アーティファクトを配信する GitHub Action
  • より多くのエージェントランナー向けのプラットフォームプラグイン
  • Email Review Relay 用の追加メールバックエンド(例:SMTP)

開発環境の設定と規約については、CONTRIBUTING.md をご覧ください。大まかなアイデアも歓迎します。まずは issue を作成して、話し合いを始めてください。


セキュリティモデル

ホステッドサービスでは、平易な言葉で説明したセキュリティページを公開しています。暗号化されるもの、サーバーから見えるもの、承認時に限られる例外、保有する認証情報、サブプロセッサー、既知の制限について説明しています。概要は以下のとおりです。

  • 人間のログインにはパスキーと署名付きセッション Cookie を使用します。
  • エージェントのアクセスには名前付きベアラートークンを使用し、サーバー側にはハッシュのみを保存します。
  • エージェントトークンには E2EE の設定が必要です。各トークンの暗号化されたコピーは、ブラウザーで表示できるよう保存されます。
  • すべてのエージェントコンテンツには P-256 ECDH と AES-256-GCM エンベロープを使用し、復号はクライアント側で行われます。
  • サーバーのプレビュー/ダウンロード/アーカイブ API は e2ee_only を返します。ポータルは暗号文エンドポイントを通じて復号します。
  • HTML と Markdown のプレビューはサンドボックス化された iframe 内に表示され、外部 URL は除去されます。ユーザーは、信頼できる HTML アーティファクトやメール下書きを新しいブラウザータブで開き、サニタイズ前のコンテンツを表示することもできます。
  • アーティファクトのアップロード上限は、1 ファイルあたり 25 MB、アカウントあたり 500 MB です。
  • ダウンロード URL とプレビュー URL の有効期間は短時間です。

セキュリティ上の問題は、SECURITY.md に記載されている方法で非公開に報告してください。

ライセンス

Agent Relay は MIT License の下で公開されています。

コメント

MCP は初めてですか?

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

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