brave-search-mcp-server について
brave-search-mcp-server は Brave Search API の MCP サーバー実装で、Web 結果、画像、動画、AI 要約を提供します。MCP 経由で Web 検索を利用したいクライアントやエージェントに向いています。
主な機能
- 01Web、画像、動画検索ツール
- 02ニュースとローカル施設の検索ツール
- 03summary キーを使ったAI要約
- 04RAG と grounding 向けの LLM コンテキストツール
- 05STDIO と HTTP のトランスポート対応
活用シーン
- 01MCP クライアントにリアルタイムのWeb検索を追加する
- 02AI エージェントに画像と動画の検索結果を提供する
- 03RAG や grounding のパイプラインにWebコンテキストを供給する
MCP 対応
本プロジェクトは MCP サーバーであり、brave_web_search、brave_image_search、brave_llm_context などのツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
8掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| count | integer | いいえ | 結果数(1~20、デフォルトは 10)。ウェブ検索結果のみに適用されます(場所、ニュース、動画などには影響しません)。 |
| query | string | はい | 検索クエリ(最大 400 文字、50 語) |
| units | any | いいえ | 測定単位。指定されていない場合は、検索対象の国に基づいて決定されます。 |
| offset | integer | いいえ | ページネーションのオフセット(最大 9、デフォルト 0) |
| country | enum | いいえ | 検索結果の取得元となる国。国名文字列には、対応する国の 2 文字の国コードのみ指定できます。ALL | AR | AU | AT | BE | BR | CA | CL | DK | FI | FR | DE | HK | IN | ID | IT | JP | KR | MY | MX | NL | NZ | NO | CN | PL | PT | PH | RU | SA | ZA | ES | SE | CH | TW | TR | GB | US |
| goggles | any | いいえ | Goggles は、Brave の検索インデックスを独自に再ランキングします。このパラメーターには、Goggle のホスト先 URL または Goggle の定義を指定できます。配列で複数の Goggle URL や定義を指定できます。詳しくは Goggles リポジトリ(https://github.com/brave/goggles-quickstart)を参照してください。 |
| summary | boolean | いいえ | このパラメーターを使うと、ウェブ検索結果で summary キーの生成が有効になります。summarizer を有効にするには、このパラメーターが必要です。 |
| ui_lang | enum | いいえ | UI の言語。検索結果の言語を指定する 2 文字以上の言語コードです。es-AR | en-AU | de-AT | nl-BE | fr-BE | pt-BR | en-CA | fr-CA | es-CL | da-DK | fi-FI | fr-FR | de-DE | zh-HK | en-IN | en-ID | it-IT | ja-JP | ko-KR | en-MY | es-MX | nl-NL | en-NZ | no-NO | zh-CN | pl-PL | en-PH | ru-RU | en-ZA | es-ES | sv-SE | fr-CH | de-CH | zh-TW | tr-TR | en-GB | en-US | es-US |
| freshness | any | いいえ | 検索結果を発見時期で絞り込みます。使用できる値:'pd' - 過去 24 時間以内、'pw' - 過去 7 日以内、'pm' - 過去 31 日以内、'py' - 過去 365 日以内に発見された結果。'YYYY-MM-DDtoYYYY-MM-DD' のように日付範囲を指定して期間を設定することもできます。 |
| safesearch | enum | いいえ | 成人向けコンテンツを検索結果から除外します。使用できる値:'off' - 除外しない。'moderate' - 露骨なコンテンツ(画像や動画など)を除外しますが、成人向けドメインは検索結果に含めます。'strict' - 成人向けコンテンツをすべて検索結果から除外します。デフォルト値は 'moderate' です。off | moderate | strict |
| spellcheck | boolean | いいえ | 指定したクエリのスペルチェックを行うかどうか。 |
| search_lang | enum | いいえ | 検索言語の設定。検索結果の言語を指定する 2 文字以上の言語コードです。ar | eu | bn | bg | ca | zh-hans | zh-hant | hr | cs | da | nl | en | en-gb | et | fi | fr | gl | de | gu | he | hi | hu | is | it | jp | kn | ko | lv | lt | ms | ml | mr | nb | pl | pt-br | pt-pt | pa | ro | ru | sr | sk | sl | es | sv | ta | te | th | tr | uk | vi |
| result_filter | array | いいえ | 結果フィルター(デフォルトは ['web', 'query']) |
| extra_snippets | boolean | いいえ | スニペットはクエリ結果のページから抜粋したもので、extra_snippets を使うと最大 5 件の追加の代替抜粋を取得できます。Free AI、Base AI、Pro AI、Base Data、Pro Data、Custom プランでのみ利用できます。 |
| text_decorations | boolean | いいえ | 表示文字列(検索結果のスニペットなど)に装飾マーカー(ハイライト文字など)を含めるかどうか。 |
詳細
Brave Search MCP サーバー
Brave Search API と統合する MCP サーバーの実装です。ウェブ検索、ローカルビジネス検索、場所検索、画像検索、動画検索、ニュース検索、LLM コンテキスト、AI による要約など、幅広い検索機能を提供します。このプロジェクトは STDIO と HTTP の両方のトランスポートに対応しており、デフォルトでは STDIO モードで動作します。
移行
1.x から 2.x へ
デフォルトのトランスポートが STDIO に変更されました
確立された MCP の慣例に従い、サーバーのデフォルトのトランスポートが STDIO になりました。引き続き HTTP を使用する場合は、BRAVE_MCP_TRANSPORT 環境変数に http を設定するか、サーバーの起動時に実行時引数 --transport http を指定してください。
brave_image_search のレスポンス構造
MCP サーバーのバージョン 1.x では、画像 URL とともに Base64 エンコードされた画像データを返していました。これによりレスポンスが大幅に遅くなり、セッションのコンテキストも不必要に消費していました。バージョン 2.x では Base64 エンコードされたデータを削除し、元の Brave Search API のレスポンスにより近いレスポンスオブジェクトを返します。更新後の出力スキーマは src/tools/images/schemas/output.ts で定義されています。
ツール
ウェブ検索(brave_web_search)
豊富な結果タイプと高度なフィルタリングオプションを使って、幅広いウェブ検索を実行します。
パラメーター:
query(string、必須):検索語(最大 400 文字、50 語)country(string、任意):国コード(デフォルト:"US")search_lang(string、任意):検索言語(デフォルト:"en")ui_lang(string、任意):UI 言語(デフォルト:"en-US")count(number、任意):ページあたりの結果数(1~20、デフォルト:10)offset(number、任意):ページネーションのオフセット(最大 9、デフォルト:0)safesearch(string、任意):コンテンツのフィルタリング("off"、"moderate"、"strict"、デフォルト:"moderate")freshness(string、任意):期間フィルター("pd"、"pw"、"pm"、"py"、または日付範囲)text_decorations(boolean、任意):ハイライトマーカーを含める(デフォルト:true)spellcheck(boolean、任意):スペルチェックを有効にする(デフォルト:true)result_filter(array、任意):結果タイプをフィルタリングする(デフォルト:["web", "query"])goggles(array、任意):カスタムの再ランキング定義units(string、任意):測定単位("metric" または "imperial")extra_snippets(boolean、任意):追加の抜粋を取得する(Pro プランのみ)summary(boolean、任意):AI による要約用のサマリーキー生成を有効にする
ローカル検索(brave_local_search)
評価、営業時間、AI が生成した説明など、詳しい情報とともにローカルビジネスや場所を検索します。
パラメーター:
- 自動的な場所フィルタリングを行う
brave_web_searchと同じ result_filterに "web" と "locations" を自動的に含める
注: ローカル検索の全機能を利用するには Pro プランが必要です。それ以外の場合はウェブ検索にフォールバックします。
動画検索(brave_video_search)
詳しいメタデータとサムネイル情報を含めて動画を検索します。
パラメーター:
query(string、必須):検索語(最大 400 文字、50 語)country(string、任意):国コード(デフォルト:"US")search_lang(string、任意):検索言語(デフォルト:"en")ui_lang(string、任意):UI 言語(デフォルト:"en-US")count(number、任意):ページあたりの結果数(1~50、デフォルト:20)offset(number、任意):ページネーションのオフセット(最大 9、デフォルト:0)spellcheck(boolean、任意):スペルチェックを有効にする(デフォルト:true)safesearch(string、任意):コンテンツのフィルタリング("off"、"moderate"、"strict"、デフォルト:"moderate")freshness(string、任意):期間フィルター("pd"、"pw"、"pm"、"py"、または日付範囲)
画像検索(brave_image_search)
URL、寸法、信頼度スコアなどのメタデータを含む画像を検索します。
パラメーター:
query(string、必須):検索語(最大400文字、50語)country(string、任意):国コード(デフォルト:"US")search_lang(string、任意):検索言語(デフォルト:"en")count(number、任意):ページあたりの検索結果数(1~200、デフォルト:50)safesearch(string、任意):コンテンツフィルタリング("off"、"strict"、デフォルト:"strict")spellcheck(boolean、任意):スペルチェックを有効にするかどうか(デフォルト:true)
ニュース検索(brave_news_search)
最新ニュース記事を、鮮度の調整や速報ニュースのインジケーターとともに検索します。
パラメーター:
query(string、必須):検索語(最大400文字、50語)country(string、任意):国コード(デフォルト:"US")search_lang(string、任意):検索言語(デフォルト:"en")ui_lang(string、任意):UI 言語(デフォルト:"en-US")count(number、任意):ページあたりの検索結果数(1~50、デフォルト:20)offset(number、任意):ページネーションのオフセット(最大9、デフォルト:0)spellcheck(boolean、任意):スペルチェックを有効にするかどうか(デフォルト:true)safesearch(string、任意):コンテンツフィルタリング("off"、"moderate"、"strict"、デフォルト:"moderate")freshness(string、任意):期間フィルター(デフォルト:"pd" は過去24時間)extra_snippets(boolean、任意):追加の抜粋を取得するかどうか(Pro プラン限定)goggles(array、任意):カスタムの再ランキング定義
要約検索(brave_summarizer)
Brave の要約 API を使用して、ウェブ検索結果から AI による要約を生成します。
パラメーター:
key(string、必須):ウェブ検索結果の要約キー(ウェブ検索でsummary: trueを使用)entity_info(boolean、任意):エンティティ情報を含めるかどうか(デフォルト:false)inline_references(boolean、任意):ソース URL の参照を追加するかどうか(デフォルト:false)
使用方法: まず summary: true を指定してウェブ検索を実行し、その後、返された要約キーをこのツールで使用します。
場所検索(brave_place_search)
Brave の Place Search API を使用して、指定した地理的エリア内のスポット(POI)を検索します。名称、住所、営業時間、連絡先情報、評価、写真、カテゴリ、タイムゾーンなど、詳細で構造化された場所データを返します。
パラメーター:
query(string、任意):POI 検索を絞り込むためのクエリ文字列です(最大 400 文字、50 語)。省略すると、指定されたエリア内の一般的なスポットが返されます。latitude(number、任意):検索中心の緯度(-90 ~ 90)です。通常はlongitudeと組み合わせて指定します。longitude(number、任意):検索中心の経度(-180 ~ 180)です。通常はlatitudeと組み合わせて指定します。location(string、任意):latitude/longitudeの代わりに使用する場所を示す文字列です。米国内の場所では<city> <state> <country name>の形式(例:san francisco ca united states)、米国外の場所では<city> <country name>の形式(例:tokyo japan)を推奨します。radius(number、任意):指定した座標を中心とする検索半径(メートル単位)です。省略すると、検索は全世界を対象に実行されます。count(number、任意):返す結果の件数です(1~50、デフォルトは 20)。country(string、任意):2 文字の国コードです(デフォルトはUS)。search_lang(string、任意):検索言語です(デフォルトはen)。ui_lang(string、任意):UI の言語です(デフォルトはen-US)。units(string、任意):距離の単位です(metricまたはimperial、デフォルトはmetric)。safesearch(string、任意):セーフサーチのレベルです(off、moderate、strict、デフォルトはstrict)。spellcheck(boolean、任意):クエリのスペルチェックを行うかどうかです(デフォルトはtrue)。geoloc(string、任意):結果を絞り込むために使用する任意のジオロケーション トークンです。
任意のリクエストヘッダー:
api-version(string、任意):Brave API のバージョンです(YYYY-MM-DD)。accept(string、任意):レスポンスのメディアタイプです(application/jsonまたは*/*)。cache-control(string、任意):最新のコンテンツを要求するにはno-cacheを指定します。user-agent(string、任意):リクエスト元のユーザーエージェントです。
LLM コンテキスト(brave_llm_context)
AI エージェント、LLM のグラウンディング、RAG パイプライン向けに最適化された、抽出済みのウェブコンテンツを取得します。
パラメーター:
query(string、必須):検索クエリ(最大400文字、50語)country(string、任意):検索対象の国コードsearch_lang(string、任意):検索言語コードcount(number、任意):対象とする検索結果の最大数(1~50)spellcheck(boolean、任意):スペルチェックを有効にしますmaximum_number_of_urls(number、任意):含めるURLの最大数(1~50)maximum_number_of_tokens(number、任意):コンテキストトークンのおおよその最大数(1024~32768)maximum_number_of_snippets(number、任意):含めるスニペットの最大数(1~256)context_threshold_mode(string、任意):しきい値モード(「disabled」、「strict」、「lenient」、「balanced」)maximum_number_of_tokens_per_url(number、任意):URLごとの最大トークン数(512~8192)maximum_number_of_snippets_per_url(number、任意):URLごとの最大スニペット数(1~100)goggles(string または array、任意):カスタムの再ランキングに使用するGoggleのURLまたは定義freshness(string、任意):期間フィルター(「pd」、「pw」、「pm」、「py」、または日付範囲)enable_local(boolean、任意):ローカルリコールを有効にしますenable_source_metadata(boolean、任意):ソースメタデータの補完を含めます
任意のリクエストヘッダー:
x-loc-lat(number、任意):クライアントの緯度(-90~90)x-loc-long(number、任意):クライアントの経度(-180~180)x-loc-city(string、任意):クライアントの市区町村名x-loc-state(string、任意):クライアントの州または地域コードx-loc-state-name(string、任意):クライアントの州または地域名x-loc-country(string、任意):クライアントの国コードx-loc-postal-code(string、任意):クライアントの郵便番号api-version(string、任意):Brave API のバージョン(YYYY-MM-DD)accept(string、任意):レスポンスのメディアタイプ(「application/json」または「/」)cache-control(string、任意):最新のコンテンツをリクエストするには、no-cacheを指定しますuser-agent(string、任意):リクエスト元のユーザーエージェント
設定
API キーの取得
- Brave Search API アカウントに登録します
- プランを選択します:
- Search:チャットボットやエージェントが回答を生成するために必要なリアルタイム検索データです。完全な検索結果(URL、テキスト、ニュース、画像など)に加え、AI 向けに最適化された LLM コンテキストが含まれます。
- Answers:あらゆる質問に対する、要約済みの回答です。単一または複数の検索結果に基づいて回答を生成することで、精度を高め、ハルシネーションを抑制します。
- 開発者ダッシュボードからAPIキーを生成します
環境変数
サーバーでは、次の環境変数をサポートしています。
BRAVE_API_KEY:Brave Search API キー(BRAVE_API_KEY_FILEが設定されていない場合は必須)BRAVE_API_KEY_FILE:Brave Search API キーを含むファイルへのパス。設定すると、BRAVE_API_KEYよりも優先されます。Docker のシークレットなど、マウントされたシークレットを使う構成で便利です。BRAVE_MCP_TRANSPORT:トランスポートモード(「http」または「stdio」、デフォルト:「stdio」)BRAVE_MCP_PORT:HTTP サーバーのポート(デフォルト:8080)BRAVE_MCP_HOST:HTTP サーバーのホスト(デフォルト:「127.0.0.1」)。デフォルトではループバックのみにバインドされます。サーバーをすべてのインターフェースで公開するには「0.0.0.0」に設定してください(コンテナ内および Amazon Bedrock AgentCore では必須です)。HTTP エンドポイントには認証がないため、信頼できるネットワークでのみ設定してください。BRAVE_MCP_ALLOWED_ORIGINS:HTTP トランスポートで許可する追加のOriginヘッダー値を、スペースまたはカンマで区切ったリスト。ループバックのオリジンは常に許可されます。DNS リバインディングを防ぐため、それ以外のOriginを含むブラウザーリクエストは HTTP 403 で拒否されます。実際のドメイン上のブラウザーベースのクライアントからアクセスする必要がある場合に設定してください。BRAVE_MCP_ALLOWED_HOSTS:HTTP トランスポートのHostヘッダーで許可するホスト名を、スペースまたはカンマで区切ったリスト。照合対象はホスト名のみで、大文字と小文字は区別されません。エントリに数値のポート(例:mcp.example.com:8080)を含めることもできますが、照合では無視されます。これは任意で有効にする多層防御の設定です。未設定(デフォルト)の場合、Hostヘッダーは検証されないため、リバースプロキシやカスタムドメインを使ったデプロイには影響しません。設定すると、ループバックホストとリストに含まれるホスト名のみが許可され、それ以外のHost(不正なポートや数値でないポートを含む)は HTTP 403 で拒否されます。BRAVE_MCP_LOG_LEVEL:希望するログレベル(「debug」、「info」、「notice」、「warning」、「error」、「critical」、「alert」、「emergency」のいずれか。デフォルト:「info」)BRAVE_MCP_ENABLED_TOOLS:指定すると、サポート対象のツールの許可リストをスペース区切りで指定しますBRAVE_MCP_DISABLED_TOOLS:指定すると、サポート対象のツールの拒否リストをスペース区切りで指定しますBRAVE_MCP_STATELESS:HTTP ステートレスモード(デフォルト:「true」)。Amazon Bedrock Agentcore で実行する場合は「true」に設定してください。
コマンドラインオプション
node dist/index.js [options]
Options:
--brave-api-key <string> Brave API key
--brave-api-key-file <string> Path to file containing Brave API key
--transport <stdio|http> Transport type (default: stdio)
--port <number> HTTP server port (default: 8080)
--host <string> HTTP server host (default: 127.0.0.1)
--allowed-origins <origins...> Allowed Origin header values for HTTP transport (DNS rebinding protection)
--allowed-hosts <hosts...> Allowed Host header values for HTTP transport (opt-in DNS rebinding protection)
--logging-level <string> Desired logging level (one of _debug_, _info_, _notice_, _warning_, _error_, _critical_, _alert_, or _emergency_)
--enabled-tools Tools whitelist (only the specified tools will be enabled)
--disabled-tools Tools blacklist (included tools will be disabled)
--stateless <boolean> HTTP Stateless flag
インストール
Claude Desktop での使用
claude_desktop_config.json に次の設定を追加してください。
Docker
{
"mcpServers": {
"brave-search": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "BRAVE_API_KEY", "docker.io/mcp/brave-search"],
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
NPX
{
"mcpServers": {
"brave-search": {
"command": "npx",
"args": ["-y", "@brave/brave-search-mcp-server", "--transport", "http"],
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
VS Code での使用
すばやくインストールするには、以下のワンクリックインストールボタンを使用してください。
手動でインストールするには、ユーザー設定(JSON)または .vscode/mcp.json に以下を追加してください。
Docker
{
"inputs": [
{
"password": true,
"id": "brave-api-key",
"type": "promptString",
"description": "Brave Search API Key",
}
],
"servers": {
"brave-search": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "BRAVE_API_KEY", "mcp/brave-search"],
"env": {
"BRAVE_API_KEY": "${input:brave-api-key}"
}
}
}
}
NPX
{
"inputs": [
{
"password": true,
"id": "brave-api-key",
"type": "promptString",
"description": "Brave Search API Key",
}
],
"servers": {
"brave-search-mcp-server": {
"command": "npx",
"args": ["-y", "@brave/brave-search-mcp-server", "--transport", "stdio"],
"env": {
"BRAVE_API_KEY": "${input:brave-api-key}"
}
}
}
}
fx での使用
ファイルが存在しない場合は作成し、~/.fx/mcp.json に以下を追加してください。
Docker
{
"mcp": {
"brave-search": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "BRAVE_API_KEY", "docker.io/mcp/brave-search"],
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
NPX
{
"mcp": {
"brave-search": {
"command": "npx",
"args": ["-y", "@brave/brave-search-mcp-server", "--transport", "stdio"],
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
fx を起動するか、すでに起動している場合は /mcp reload と入力してください。接続を確認するには、/mcp list と入力します。
ビルド
Docker
docker build -t mcp/brave-search:latest .
ローカルビルド
npm install
npm run build
開発
前提条件
- Node.js 22.x 以降
- npm
- Brave Search API キー
セットアップ
- リポジトリをクローンします:
git clone https://github.com/brave/brave-search-mcp-server.git
cd brave-search-mcp-server
- 依存関係をインストールします:
npm install
- プロジェクトをビルドします:
npm run build
Claude Desktop によるテスト
ローカルビルドへの参照を claude_desktop_config.json に追加します:
{
"mcpServers": {
"brave-search-dev": {
"command": "node",
"args": ["C:\\GitHub\\brave-search-mcp-server\\dist\\index.js"], // Verify your path
"env": {
"BRAVE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
MCP Inspector によるテスト
Inspector の実行には Node 22.19 以降が必要です。
STDIO — Inspector がサーバーを起動するため、ターミナルは 1 つで十分です:
npm run build
npx @modelcontextprotocol/inspector node dist/index.js
HTTP — Inspector は URL に接続するため、サーバーはあらかじめリッスンしている必要があります:
# terminal 1
npm run serve:http
# terminal 2
npm run inspector:http
serve:http はビルドを行い、127.0.0.1:8080 にバインドして、.env から BRAVE_API_KEY を読み込みます。
利用可能なスクリプト
-
npm run build:TypeScript プロジェクトをビルドします -
npm run watch:変更を監視して再ビルドします -
npm test:テストスイートを実行します -
npm run format:Prettier でコードをフォーマットします -
npm run format:check:コードのフォーマットをチェックします -
npm run prepare:フォーマットとビルドを実行します(npm install の実行時に自動的に実行されます) -
npm run serve:http:ビルドしてから、HTTP 経由でhttp://127.0.0.1:8080/mcpでサーバーを起動します -
npm run inspector:MCP Inspector のインスタンスを起動します -
npm run inspector:http:http://127.0.0.1:8080/mcpに対して MCP Inspector を起動します
Docker Compose
Docker を使ったローカル開発の場合:
docker-compose up --build
スタックを起動する前に、シェルまたは .env ファイルで BRAVE_API_KEY(または BRAVE_API_KEY_FILE)を設定します。デフォルトの docker-compose.yml では、コンテナ内で有効なパス(バインドマウントや Docker シークレットなど)を指定した場合、BRAVE_API_KEY_FILE も使用できます。
Docker Compose シークレット(任意)
API キーを環境変数に設定せずに使うには、Docker Compose シークレットを利用できます。サーバーは BRAVE_API_KEY_FILE に指定されたパスからキーを読み取ります。このパスはコンテナ内に存在している必要があります。
- サンプルのシークレットファイルをコピーし、キーを追加します。
cp secrets/brave_api_key.txt.example secrets/brave_api_key.txt
- 任意のシークレット設定を上書きしてスタックを起動します。
docker compose -f docker-compose.yml -f docker-compose.secrets.example.yml up --build
この設定では、シークレットを /run/secrets/brave_api_key にマウントし、それに応じて BRAVE_API_KEY_FILE を設定します。設定の全容については、docker-compose.secrets.example.yml を参照してください。
ライセンス
この MCP サーバーは MIT License の下でライセンスされています。これは、MIT License の利用規約に従うことを条件に、ソフトウェアを自由に使用、変更、配布できることを意味します。詳細については、プロジェクトリポジトリ内の LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。