mcpField
R
Rhylthyme

Rhylthyme

リモート
rhylthyme.com生産性05 日前に更新
リポジトリ公式サイト

Rhylthyme について

Rhylthyme MCP serverは、料理、ラボ手順、イベント、ワークアウトの複数トラック計画を実行可能なタイムラインにします。AIアシスタントで手順を組み立てる人向けに、計画を検証し、時間やリソースの競合を分析して、スマートフォンで見られるタイムラインを公開します。

主な機能

  1. 01複数トラックのプログラム作成
  2. 02プログラム構造の検証
  3. 03時間とリソース競合の分析
  4. 04ライブタイムラインの公開
  5. 05料理、ラボ、イベント、ジム向けエンドポイント

活用シーン

  1. 01複数の料理を同時に仕上げる段取り
  2. 02培養時間が重なるラボ手順の計画
  3. 03イベント作業と期限の整理
  4. 04限られた器具を共有するワークアウト設計

MCP 対応

MCPサーバーはプログラム検証、スケジュール分析、可視化のツールを提供し、料理、ラボ、イベント、ジム向けのエンドポイントを備えています。クライアントはホスト型サーバーに接続でき、アカウント機能はOAuth 2.1またはログイントークンで利用します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.rhylthyme.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

19
パラメーター型必須説明
programobjectはいプログラム JSON:{programId, name, environmentType?, actors?, tracks: [{trackId, name, steps: [{stepId (unique program-wide), name, task?, duration, startTrigger, replicates?, choice?}]}], resourceConstraints: [{task, maxConcurrent}], metadata?}。duration:{type:'fixed', seconds} | {type:'variable', minSeconds, maxSeconds, defaultSeconds} | {type:'indefinite', defaultSeconds}。seconds は数値、または '5m'、'1h30m' のような文字列です。startTrigger:{type:'programStart'} | {type:'programStartOffset', offsetSeconds} | {type:'afterStep', stepId, offsetSeconds?, event?:'start', instances?:'each'|'all'} | {type:'afterStepWithBuffer', stepId, bufferSeconds} | {type:'manual'}。同じトラック内のステップは重複せず、すべての task に resourceConstraint が必要です。ルールと例:rhylthyme://guide/authoring;完全な schema:rhylthyme://schema/program。

詳細

Rhylthyme MCP サーバー

Claude Connectors Directory Listed on mcpservers.org

人が実行するスケジュールを扱うModel Context Protocolサーバーです。複数の料理を同時に仕上げるための調理、培養時間が重なるベンチプロトコルの実施、イベントの運営、ワークアウトの実行などに使えます。エージェントがプロセスを記述し、サーバーが作成されたプログラムを検証・分析したうえで、rhylthyme.comにライブタイムラインとして公開します。利用者はスマートフォンでそれに沿って進められます。

このリポジトリには、mcp.rhylthyme.comで稼働するサーバーのソースコードが含まれています。rhylthyme-serverアプリケーション内のmcp-api/と同じコードを、閲覧、テスト、セルフホストに必要な静的アセットとともにコピーしたものです。

試してみましょう:ワークアウトを頼む

サーバーに接続します(claude.ai、Claude Desktop、モバイル版ではClaude Connectors DirectoryからRhylthymeを追加します。Claude Codeでは/plugin marketplace add rhylthyme/rhylthyme-mcpを実行してから/plugin install rhylthyme@rhylthymeを実行します。それ以外の場合は、コネクターとしてhttps://mcp.rhylthyme.com/gym/mcpを追加します)。次に、希望する内容を自然な言葉で伝えます。

ガレージジムで2人です。ケトルベル1個、懸垂バー1本、縄跳び1本があります。 30分で2ラウンド、器具待ちで誰も立ち止まらないようにしてください。 Rhylthymeのタイムラインを作ってください。

JSONを書く必要はありません。アシスタントが作成し、サーバーが内容を検証します。このプロンプトに対して、Claudeは3回のツール呼び出しを行いました。

呼び出し返された内容
validate_program✅ Program is valid — 2 tracks, 20 steps, 30m makespan.
analyze_scheduleResource conflicts: none. 各ステーションの容量は1なので、AlexとSamが同じタイミングでケトルベルを使おうとしないことが証明されます
visualize_schedule休憩タイマーとインターバル音が付いたリンク、gym.rhylthyme.com?share=4995ef1b88744e80、およびチャット用のテキストチャート:
                0                       15m                    30m
Alex           │░Warm-…░▒S…▒░Pu…░▒Ju…▒░░░▒Sw…▒░Pu…░▒Ju…▒░░░▒St…▒│
Sam            │░Warm-…░▒P…▒░Ju…░▒Sw…▒░░░▒Pu…▒░Ju…░▒Sw…▒░░░▒St…▒│

「画像を見せて」と頼むと、preview_timelineがチャットに画像を返します。ステーションごとに色分けされ、交代の順番がひと目でわかる画像を表示するには、アシスタントが作成したプログラム(今回の例はexamples/recipe/garage-circuit.json)を保存して、次を実行します。

npx -y github:rhylthyme/rhylthyme-timeline garage-circuit.json -o garage-circuit.png \
  --style web --palette tableau --color-by task

2人用ガレージサーキット、ステーションごとに色分け:ケトルベル、バー、縄跳びが同時に予約されることはありません

さらに、「3人目を追加して」「20分しかありません」「縄跳びをバーピーに替えて」と頼んでみましょう。アシスタントがプログラムを編集し、サーバーが再度チェックします。

このリポジトリとrhylthyme

関連する機能を持ち、混同しやすいリポジトリが2つあります。このリポジトリは、AI アシスタントが接続するサーバーです。rhylthyme (以前の名称はrhylthyme-cli-runner)は、人が入力するコマンドです。

rhylthyme-mcprhylthyme
概要MCP サーバー:AI アシスタントが呼び出すツールコマンドラインプログラム:rhylthymeコマンド
利用者Claude、ChatGPT、Cursor、または任意のMCPクライアント。人に代わって利用しますターミナルを使う人、スクリプト、またはCI
実行場所mcp.rhylthyme.comでホストされています。インストールは不要です自分のマシン:pip install rhylthyme
言語JavaScript(Node 20+)Python 3.12+
入力アシスタントが会話中に作成するプログラムディスク上のプログラムファイル(JSONまたはYAML)
プログラムの検証validate_programrhylthyme validate(オフラインで動作します)
タイミング、競合、期限analyze_schedulerhylthyme analyze(サーバーに問い合わせます)
ライブタイムラインの公開visualize_schedulerhylthyme publish(サーバーに問い合わせます)
タイマーを使ったスケジュールの実行いいえ。Webタイムラインへのリンクを返しますrhylthyme run。対話型のターミナルランナーです
実行記録、キャリブレーションアカウントに保存された実行記録を読み込みます実行記録をローカルに保存します。rhylthyme runs、rhylthyme calibrate
カタログ検索、インポート、アカウントライブラリはいいいえ
リポジトリに含まれるものrhylthyme-mcp PyPIパッケージ(ホスト型サーバーへのstdioブリッジ)、ClaudeプラグインマーケットプレイスClaudeスキルのソース、プロンプト評価ハーネスとその結果、rhylthyme mcp-test

両者の関係:コマンドラインツールは、このサーバーのクライアントの1つです。 rhylthyme analyze、publish、generate、mcp-testはmcp.rhylthyme.comへのMCP呼び出しです。rhylthyme validate、run、runs、calibrateはネットワークに接続しません。どちらにも同じプログラムスキーマを検証する独自のバリデーターがあるため(こちらはJavaScript、あちらはPython)、プログラムは公開時に再度チェックされます。

アシスタントを接続する場合、サーバーを読み取る、またはセルフホストする場合、あるいはツールを変更する場合は、このリポジトリを使用してください。プログラムファイルとターミナルがある場合、ターミナルでタイマーを使いたい場合、または実行記録を保持したい場合は、rhylthymeを使用してください。

混同しないよう、2つの名前を覚えておいてください。PyPIのrhylthyme-mcpは、このサーバーのstdioブリッジです(コマンドはrhylthyme-mcp、ソースはpython/)。PyPIのrhylthymeはコマンドラインツールです(コマンドはrhylthyme。0.5.0以前はrhylthyme-cli-runnerとして公開されていました)。プログラム形式そのものはrhylthyme-specで定義されており、rhylthyme-examplesに例があります。

エンドポイント

URLサーバー名追加機能
https://mcp.rhylthyme.com/mcprhylthyme-mcp汎用スケジューラー
https://mcp.rhylthyme.com/kitchen/mcprhylthyme-kitchen-mcpcook_recipe、whats_for_dinner
https://mcp.rhylthyme.com/lab/mcprhylthyme-lab-mcprun_protocol、random_protocol、Benchlingインポート
https://mcp.rhylthyme.com/events/mcprhylthyme-events-mcpplan_event、random_event_template
https://mcp.rhylthyme.com/gym/mcprhylthyme-gym-mcpstart_workout、surprise_workout

トランスポート:ステートレスなStreamable HTTPです。公開カタログや純粋なツールの利用にサインインは不要です。アカウント関連ツールでは、OAuth 2.1を通じて本人のRhylthymeアカウントを使用するか、OAuthに対応していないクライアントではloginツールから取得したトークンを貼り付けて使用します。ワークフローを説明するサーバーのinstructionsは、initialize時に送信されます。

コマンドラインからタイムラインを作成するクイックスタート

rhylthyme CLI は、このサーバーを直接操作できます。必要な内容を自然な言葉で説明すると、ライブタイムラインの URL、プログラムファイル、またはその両方が返されます。

pip install rhylthyme                        # Python 3.12+
rhylthyme login                              # opens rhylthyme.com in your browser
rhylthyme generate "roast chicken, potatoes and green beans for 6" \
    -e kitchen --by 19:00 --with "one oven, four burners, one cook"

login はブラウザー経由でサインインし、セッションを 127.0.0.1 の一度限りのリスナーに引き渡します。セッションは ~/.config/rhylthyme/credentials.json(モード 0600)に保存され、自動更新されるため、ログインは一度だけで済みます。続いて generate は、このサーバー上の 2 つのツールを呼び出します。

  1. -e で指定したエンドポイント(/kitchen/mcp、/lab/mcp など)の import_text が、リクエストを検証済みのマルチトラックプログラムに変換します。サーバー側で 4 回のモデル処理を行うため、サインインが必要です。処理には 20~60 秒かかり、1 日あたりの利用回数に上限があります。
  2. visualize_schedule がプログラムを公開し、対応するサブドメインのライブタイムライン URL を返します。

ASCII ガントチャート、旅程、URL が出力されます。その他の例:

# A lab protocol from a file; save the program and run it in the terminal
rhylthyme generate -e lab -f western_blot.txt -o blot.json --run

# Pipe a run sheet in; print only the URL
pbpaste | rhylthyme generate -e events --by "doors at 18:30" -q

# Program JSON only, no published timeline; machine-readable output
rhylthyme generate -e gym "45 minute upper-body circuit, two people, one bench" --no-publish --json
フラグ説明
-e, --envgeneric(デフォルト)、kitchen、lab、events、gym のいずれかを指定します。エンドポイントとタイムラインサイトを選択します。
--byすべてを完了させる期限を指定します:19:00、dinner at 7pm。
--with設備や人員の制約を自分の言葉で指定します。
-f, --fileリクエストまたはソーステキストをファイルから読み込みます。標準入力の場合は - を指定します。
-o, --outputプログラムの JSON を保存します。
--runその後、ターミナルランナーでプログラムを実行します。
--openブラウザーでライブタイムラインを開きます。
--no-publish、--json、-q公開をスキップします。JSON を出力します。URL のみを出力します。

サーバー(このサーバーまたは独自のデプロイ環境)をエンドツーエンドで確認するには:

rhylthyme mcp-test                                   # all five hosted endpoints, read-only
rhylthyme mcp-test --url http://localhost:3000/mcp -e generic --publish

rhylthyme whoami は保存済みのサインイン情報を表示し、rhylthyme logout はそれを削除します。ブラウザーのないマシンでは、https://www.rhylthyme.com/mcp/auth から取得したアクセストークン(有効期間は約 1 時間)を RHYLTHYME_TOKEN に設定するか、rhylthyme login --token <token> を実行します。RHYLTHYME_MCP_URL を設定すると、CLI の接続先をセルフホスト可能なサーバーに指定できます。

接続

Claude Code

claude mcp add --transport http rhylthyme https://mcp.rhylthyme.com/mcp
claude mcp add --transport http rhylthyme-kitchen https://mcp.rhylthyme.com/kitchen/mcp

Claude Desktop / claude.ai:Customize → Connectors に移動し、Rhylthyme を検索して Connect をクリックします。上記の別の URL を使う場合は、Customize → Connectors → Add → Add custom connector → URL を貼り付け → Continue の順に進みます。公開ツールはすぐに使えます。自分のアカウントに保存する場合のみ login を実行してください。

Claude Code プラグイン(ホストされたサーバーと、Claude にスケジュールの作成、検証、分析方法を教えるスキル):

コマンドは 2 つあります。まず 1 つ目を単独で送信してください。

/plugin marketplace add rhylthyme/rhylthyme-mcp

マーケットプレイスが追加されたと表示されたら、続いて 2 つ目を送信してください。

/plugin install rhylthyme@rhylthyme

ChatGPT:Settings → Apps & Connectors → Advanced settings に移動して Developer mode をオンにし、上記の URL のいずれかを MCP サーバー URL として指定してコネクターを Create します。コネクターがない場合、ChatGPT はこれらのツールを呼び出せず、代わりにウェブサイトの閲覧に切り替わります。

Cursor(.cursor/mcp.json):

{ "mcpServers": { "rhylthyme": { "url": "https://mcp.rhylthyme.com/kitchen/mcp" } } }

Claude API(MCP コネクター、1 回のリクエスト):

import anthropic
client = anthropic.Anthropic()
resp = client.beta.messages.create(
    model="claude-opus-5", max_tokens=16000,
    betas=["mcp-client-2025-11-20"],
    mcp_servers=[{"type": "url", "url": "https://mcp.rhylthyme.com/kitchen/mcp", "name": "rhylthyme"}],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "rhylthyme"}],
    messages=[{"role": "user", "content": "Plan Thanksgiving for 8 with one oven, dinner at 6pm."}],
)

インポートのレビュー。 アカウントツールの review_program は、モデルにインポート済みプログラムとそのソースを照合させ、所見を返します。所要時間の誤り、手順の抜け、順序の誤り、ソースと一致しない合計時間などを検出します。import_from_source または import_text の後に呼び出し、指摘された内容を適用してから、再度検証してください。

コマンドの起動のみ可能なクライアント:pip install rhylthyme-mcp を実行すると、ホストされたサーバーにすべてのリクエストを中継する stdio ブリッジである rhylthyme-mcp コマンドが使えるようになります(ソースは python/ にあります)。

{ "mcpServers": { "rhylthyme": { "command": "rhylthyme-mcp", "args": ["kitchen"] } } }

MCP クライアントがない場合(シェルを使えるエージェントやスクリプト):サーバーはステートレスなので、ハンドシェイクやアカウントなしで POST を 1 回実行できます。

curl -s https://mcp.rhylthyme.com/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"validate_program","arguments":{"program":{"programId":"x","name":"x","tracks":[]}}}}'

同じ方法で visualize_schedule を呼び出すと、result.structuredContent.url にライブタイムライン URL が返されます。または、上記のクイックスタートで CLI を使用してください。

ツール

ツールアノテーション内容
validate_program読み取り専用、純粋構造とスケジュールをチェックします(ID の重複・欠落、参照先のない参照、循環、トラック内の重複、リソース制約のないタスク、解析できない所要時間、選択肢の参照)。検出結果にはそれぞれ code、message、fix のヒントが含まれます。構造化出力です。
analyze_schedule読み取り専用、純粋各ステップの解決済み開始・終了時刻、所要時間、全体の所要時間を決める依存関係チェーン、リソースの競合時間帯、トラックごとの余裕時間、宣言された担当者数に対する同時実行数のピークを返します。実際の開始時刻を指定するには、finishAt または startAt(ISO 8601)を渡します。構造化出力です。
visualize_schedule公開検証を行い(無効なプログラムは allowInvalid が指定されない限り拒否)、共有レコードを作成し、Markdown プレビュー(カバー画像、機器、材料、ASCII ガントチャート、行程、スケジュールチェック)、タイムラインのインライン PNG、公開 URL を返します。構造化出力です。
preview_timeline共有レコードを公開タイムラインのみの PNG を返します。文章は含まれません。
search_public_recipes読み取り専用公開カタログをキーワード検索します。environment でキッチン(デフォルト)、実験室、イベント、ジムを選択します。構造化出力です。
load_public_recipe読み取り専用カタログ項目 1 件の概要全体と公開 URL を返します。
cook_recipe / run_protocol / plan_event / start_workout読み取り専用各分野で一度だけ実行します:カタログの最有力候補 → 公開 URL。
whats_for_dinner / random_protocol / random_event_template / surprise_workout読み取り専用各分野のカタログからランダムに選択します。
import_from_source読み取り専用Spoonacular、TheMealDB、protocols.io、Cooklang、Opentrons Protocol API スクリプト、Benchling → 検証済みプログラム JSON。search にトークンは不要です。import と random にはユーザーのトークンが必要です。
create_environment純粋機器の制限と担当者の種類から環境 JSON を作成します。
login—サインイン URL を返し、貼り付けられたトークンを検証します。
list_my_programs、load_program、save_programアカウントユーザー自身のライブラリです。save_program は保存前に検証します。
get_renderer_source読み取り専用サンドボックスで外部スクリプトがブロックされる HTML アーティファクト向けに、Apache-2.0 ライセンスのタイムラインレンダラーのソースを返します。

アノテーション(readOnlyHint、destructiveHint、idempotentHint、 openWorldHint)はすべてのツールに設定されています。さらに、4 つのツールでは outputSchema を宣言し、structuredContent を返します。失敗時には isError を設定し、次に何をすべきかを示します。

リソースとプロンプト

  • rhylthyme://schema/program:プログラム JSON Schema(0.3.0-alpha)
  • rhylthyme://guide/authoring:1 ページの作成ルール、トリガーの用語、トラックを同時に完了させる方法、反復作業(replicates、インスタンスごとの instances: "each" チェーン、"all" バリア、maxInFlight)、選択肢による分岐
  • rhylthyme://guide/tools:すべてのツール説明の詳細版。ツール一覧自体は約 3,600 トークンに抑え、接続を維持するコストを軽減しています
  • rhylthyme://examples/{breakfast_schedule, lab_experiment, stir_fry_with_choice, hiit_cardio_workout, corporate_presentation, cookies_three_trays}:完全で有効なプログラム(cookies_three_trays は 0.3.0-alpha の、インスタンスごとの処理/実行中の処理数を扱う実例です)
  • プロンプト plan_schedule(goal, finishAt?, constraints?):検索 → 作成 → 検証 → 分析 → 可視化の手順に沿ってモデルをガイドし、制約のステップで replicates / instances / maxInFlight を指定します

プログラムの例

{
  "schemaVersion": "0.1.0",
  "programId": "eggs-and-toast",
  "name": "Eggs and toast",
  "tracks": [
    { "trackId": "eggs", "name": "Eggs", "steps": [
      { "stepId": "whisk", "name": "Whisk", "task": "prep",
        "duration": { "type": "fixed", "seconds": 60 },
        "startTrigger": { "type": "programStart" } },
      { "stepId": "cook", "name": "Cook", "task": "stove",
        "duration": { "type": "variable", "minSeconds": 120, "maxSeconds": 240, "defaultSeconds": 180 },
        "startTrigger": { "type": "afterStep", "stepId": "whisk" } } ] },
    { "trackId": "toast", "name": "Toast", "steps": [
      { "stepId": "toast", "name": "Toast", "task": "toaster",
        "duration": { "type": "fixed", "seconds": 180 },
        "startTrigger": { "type": "afterStep", "stepId": "cook", "event": "start", "offsetSeconds": 60 } } ] }
  ],
  "resourceConstraints": [
    { "task": "prep", "maxConcurrent": 1 },
    { "task": "stove", "maxConcurrent": 2 },
    { "task": "toaster", "maxConcurrent": 1 }
  ]
}

1 つのトラック内のステップは順番に実行されます。並行作業は別々の トラックに分けます。すべての task にリソース制約が必要です。所要時間とオフセットは 秒数または "5m" のような文字列で指定します。トリガー:programStart、 programStartOffset、afterStep(終了時または event: "start"、符号付きオフセット)、 afterStepWithBuffer、manual、onAbort、または {logic: all|any, triggers}。 所要時間:fixed、variable(実行者が早めに終了)、indefinite (実行者が終了)。

セルフホスティング

git clone https://github.com/rhylthyme/rhylthyme-mcp
cd rhylthyme-mcp
npm install            # Node 20 or newer
npm test                 # SDK in-memory + HTTP entry-point tests, no network
PORT=3000 npm start      # http://localhost:3000/mcp and the four vertical paths
npm run stdio            # the same server over stdio (add kitchen, lab, events or gym)

stdio クライアントは、たとえば Claude Desktop ではローカルプロセスとして実行します。 {"command": "node", "args": ["/path/to/rhylthyme-mcp/src/stdio.js"]}。

Docker:docker build -t rhylthyme-mcp . && docker run -p 3000:3000 rhylthyme-mcp。 Vercel:リポジトリのルートで vercel を実行します。vercel.json により、エンドポイントのパスが関数に書き換えられます。

セルフホスティングで利用できる機能と、利用できない機能:検証、タイミング分析、レンダラー、リソース、プロンプトは、ご自身のプロセス内で実行されます。カタログ検索、共有(visualize_schedule)、インポート、アカウントツールは https://www.rhylthyme.com の公開 API(mcp-api/index.js 内の API_BASE)を呼び出すため、引き続きホスト型サービスに依存します。PNG プレビューのルート /api/og/timeline.png では、共有プログラムの読み取りアクセスに SUPABASE_URL と SUPABASE_ANON_KEY も必要です。それ以外の機能では必要ありません。

ディレクトリ構成

  • mcp-api/index.js:ツール、リソース、プロンプトの登録、垂直方向の検出、OG 画像ルート、Vercel ハンドラー
  • mcp-api/schedule.js:バリデーターとアナライザー(純粋関数)
  • static/js/timeline-render.js:タイミングエンジンと SVG ガントチャート(@rhylthyme/timeline としても公開)
  • static/schema/、static/examples/:リソース
  • src/index.js:スタンドアロン HTTP ランナー
  • src/stdio.js:スタンドアロン stdio ランナー(同じツール、リソース、プロンプト)
  • mcp-api/server.json:MCP レジストリマニフェスト
  • .claude-plugin/marketplace.json、plugins/rhylthyme/:Claude プラグインマーケットプレイスとプラグイン(claude plugin validate .)。プラグイン内のスキルは、rhylthyme の skills/rhylthyme のチェック済みコピーです。
  • python/:ホスト型サーバーへの stdio ブリッジである rhylthyme-mcp PyPI パッケージ(cd python && PYTHONPATH=src pytest tests)

既知の制限事項

  • login はユーザーに URL を提示し、貼り付けられた有効期限の短いアクセストークンを期待します。そのトークンはツール引数として渡されます。この方式は MCP の OAuth 2.1 フローの対象外です。認証済みサーバーに OAuth を必須とするホストでも、すべての公開ツールを引き続き利用できます。
  • search_public_recipes は一度に 1 つの環境を検索します。汎用エンドポイントはデフォルトでキッチンを使用します。
  • ツールのアノテーションは自己申告のヒントであり、ホストによっては無視される場合があります。

ライセンス

Rhylthyme の他の部分と同様に Apache-2.0 です。(このリポジトリは 2026 年 9 月まで MIT ライセンスでした。)

コメント

MCP は初めてですか?

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

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