MCP サーバー
URL 1 つと API キーで、Claude Code、Cursor、Claude Desktop などの MCP クライアントをデータツールとブラウザエージェントに接続します。
Lovely Router の MCP サーバーを使うと、エージェントが自分でタスクのプランを立て、ツールを探し、入力スキーマを読み、実行して結果を読めるようになります。ブラウザエージェントも公開しています。すべての呼び出しは REST と同じ API を通るため、課金、制限、エラーはまったく同じです。
| 設定 | 値 |
|---|---|
| URL | https://lovelyrouter.com/mcp |
| トランスポート | Streamable HTTP(POST 経由の JSON-RPC、JSON レスポンス) |
| 認証 | Authorization: Bearer lr-...(REST API と同じキー) |
クライアントを接続する#
まず API キーでキーを作成します。エージェントには利用上限付きのキーを使うことをおすすめします。費用を管理するを参照してください。
コマンド 1 つでサーバーを追加します。
claude mcp add --transport http lovely-tools https://lovelyrouter.com/mcp \
--header "Authorization: Bearer $LOVELY_API_KEY"これで現在のプロジェクトにだけ追加されます。すべてのプロジェクトで使うには --scope user を付けてください。claude mcp list を実行すると、接続できているか確認できます。
チームでサーバーを共有する場合は、代わりにプロジェクトのルートに .mcp.json をコミットします。Claude Code は ${LOVELY_API_KEY} を各メンバーの環境変数から展開するため、キーがファイルに含まれることはありません。
{
"mcpServers": {
"lovely-tools": {
"type": "http",
"url": "https://lovelyrouter.com/mcp",
"headers": { "Authorization": "Bearer ${LOVELY_API_KEY}" }
}
}
}接続をテストする#
サーバーはプレーンな JSON-RPC で通信するため、cURL で呼び出せます。次のコマンドは、サーバーが公開しているツールの一覧を取得します。
curl https://lovelyrouter.com/mcp \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'サーバーが公開するツール#
2 つのツールで Web を検索して読み取ります。サーバーはエージェントに、調べたり読んだりするときはこれらを使い、ブラウザエージェントは操作が必要なページだけに使うよう伝えます。
| ツール | 内容 | 引数 |
|---|---|---|
web_search | Web を検索します。最大 50 件の結果に、タイトル、URL、日付、モデル向けの要約が付きます。クエリで使える演算子:site:、-site:、"完全一致"、-語、lang:、after:、before:。1 回の検索につき $0.0009。結果がない検索は無料です。 | query(必須)、count、need_content、question |
web_fetch | 1 ページを、メニューや広告を除いたきれいな Markdown(タイトルと本文)で読み取ります。1 ページにつき $0.0009。読み取れないページは無料です。長いページは分割して返り、続きを読むのは無料です。 | url、または続きを読むための run_id と offset |
2 つのツールで GPT Image 2.5(使えないときは GPT Image 2)による画像を作ります。料金は Images API と同じで、1 枚 $0.04、サイズを問わず同額、失敗時は無料です。
| ツール | 内容 | 引数 |
|---|---|---|
generate_image | 説明から画像を 1 枚作ります。参考画像(URL、data: URL、以前の画像のリンク)も渡せます。キーなしで 24 時間使えるダウンロードリンクと、保存用の curl コマンドを返します。待ち時間内に終わらなかった画像はジョブ ID を返します。 | prompt(必須)、size、images |
get_image | 作成中だった画像を待ち、できあがったらリンクを返します。無料です。 | job_id(必須) |
5 つのツールでデータツールのカタログを使います。サーバーはエージェントに、suggest_tools で計画し(ツールを 1 つ探すだけなら search_tools)、get_tool でスキーマを読み、run_tool を呼ぶよう伝えます。
| ツール | 内容 | 引数 |
|---|---|---|
suggest_tools | タスクを計画します:最初に実行するツール、任意の 2 つ目のツール、代替案。それぞれに入力例と見積もり費用が付きます。無料。 | task(必須)、limit |
search_tools | カタログをキーワードで検索し、ツール ID と価格を返します。無料。 | query(必須)、limit |
get_tool | ツールの入力スキーマ、入力例、価格。フィールドの説明には、X の検索演算子のようなそのツールのクエリ構文が含まれます。無料。 | tool(必須) |
run_tool | ツールを実行して結果を返し、残高から課金します。 | tool(必須)、input(必須)、max_results、fields |
get_run | 実行の状態と結果。完了を待ちます。 | run_id(必須)、offset、fields |
4 つのツールでブラウザエージェントを操作します。ログイン、フォーム、複数ステップの流れなど、エージェントが操作する必要のあるページ向けです。ページの内容を読むだけなら web_fetch のほうが速く安価です。ブラウザはクラウドで動くため、localhost やプライベートアドレスは開けません。
| ツール | 内容 | 引数 |
|---|---|---|
browser_run | 目標と開始 URL からブラウザの実行を始め、約 45 秒後に状態を返します。 | goal(必須)、start_url(必須)、mode、max_steps、output_schema、model、secrets、profile、save_profile、files、approve、human_timeout_minutes |
browser_status | ブラウザの実行の状態。進捗を最大約 45 秒待ちます。 | run_id(必須) |
browser_reply | 人の対応を待っている実行に返答します:質問への answer、approve の true / false(任意で reason)、または引き継ぎ後の done。 | run_id(必須)、answer・approve・done のいずれか |
browser_takeover | 今すぐブラウザをユーザーに渡します。実行の状態にライブビューの URL が付きます。 | run_id(必須)、instructions |
ブラウザの各引数はブラウザエージェントのガイドで説明しています:モード、構造化出力、ログインとプロファイル、ファイル、人の介入。パスワードやワンタイムコードは MCP では送りません。エージェントは保管庫のシークレットを名前で使い、コードは人が API で送ります。
ツールが返す内容#
返答はモデルが読むために書かれ、短く保たれます。エージェントは長いツール結果を切り詰めたりファイルに退避したりするためです:
web_searchは、タイトル、サイト、日付、URL、要約付きの番号付き結果を返します。web_fetchはページを約 12,000 文字ずつ返し、続きを読むためのrun_idとoffsetを付けます。run_toolとget_runは、実行 ID・ツール・状態・結果数・料金の 1 行に続けて、空のフィールドを省き長いテキストを切り詰めた結果を 1 件 1 行で返します。1 回の返答は約 12,000 文字で、最後の行に残りの取り方(offsetを付けたget_run、または必要なキーだけを残すfields)が書かれます。完全な JSON はGET /v1/tools/runs/{run_id}で取得できます。- その他のツールは、対応する REST エンドポイントと同じ JSON をテキストで返します:
POST /v1/tools/suggest、POST /v1/tools/discover、GET /v1/tools/{id}。 - エラーは
isError: trueのツール結果とメッセージで返るため、エージェントは調整できます。run_toolが入力を受け付けなかった場合、返答にそのツールの入力フィールドと例が含まれます。 generate_imageとget_imageは、ジョブ ID・サイズ・ファイルサイズ・料金の行と、ダウンロードリンク、そのcurlコマンドを返します。ジョブはPOST /v1/images/jobsで作ったものと同じなので、ログに表示され、画像は 7 日間キーを使ってGET /v1/images/jobs/{id}/contentからも取得できます。- 長い実行。多くのクライアントは 1 分ほどでツール呼び出しをあきらめるため、
run_toolは最大 50 秒待ちます。それを過ぎても続いている実行は、Still running. Call get_run with this run id to get the results.と実行の内容で返ります。より長いツール呼び出しを許すクライアントは、サーバー URL に?wait=(10〜280 秒)を付けられます。
キーなしの場合#
suggest_tools、search_tools、get_tool はキーなしで動作するため、キーを接続する前でもエージェントはカタログを閲覧できます。run_tool、get_run、ブラウザ関連のツールは、キーを追加するまで認証エラーを返します。
エージェントセッションの例#
サーバーを接続した Claude Code に、「Austin のヴィーガンレストランを探して、レビューでどんな不満が書かれているか教えて」と頼んだとします。典型的なセッションは次のとおりです。
- プランを立てる。 エージェントがタスクを渡して
suggest_toolsを呼び出します。プランは、まずgoogle-maps-places、次にgoogle-maps-reviewsを実行するというもので、デフォルトの上限での見積もりは $0.0585 です。 - スキーマを読む。
{"tool": "google-maps-places"}を渡してget_toolを呼び出し、入力フィールドを確認します。 - 場所を探す。
run_toolを呼び出します。JSON{ "tool": "google-maps-places", "input": {"searchTerms": ["vegan restaurant"], "location": "Austin, Texas, USA"}, "max_results": 10 }10 件の場所が
placeId付きで返ります。費用:$0.00075 + 10 × $0.000238 = $0.00313。 - レビューを取得する。 場所の ID を渡し、1 か所あたり 5 件のレビューで、もう一度
run_toolを呼び出します。JSON{ "tool": "google-maps-reviews", "input": {"placeIds": ["ChIJ...", "ChIJ..."], "maxReviews": 5, "reviewsSort": "newest"}, "max_results": 50 }50 件のレビューが返ります。費用:50 × $0.000675 = $0.03375。
- 回答する。 エージェントがレビューを読み、不満点をまとめます。タスク全体の費用は約 $0.08 で、2 回の実行はどちらもダッシュボードのツールに表示されます。
上記の価格は現時点のものです。get_tool と suggest_tools は常に最新の価格を返します。
費用を管理する#
- エージェントには利用上限付きの専用キーを渡す。 キーの上限を超える可能性がある実行は、何も課金される前に
402で拒否されます。API キーを参照してください。 - すべての実行で
max_resultsを指定させる。 この上限で費用が決まります(呼び出し料金 + 結果単価 ×max_results)。指定しないとツールのデフォルトが適用されます。プロンプトやプロジェクトの指示に次のような 1 行を入れておくと効果的です:「必ず max_results を設定し、$0.50 を超える可能性がある実行の前には確認すること。」 - 先にプランを立てる。
suggest_toolsとget_toolは無料で価格を表示するため、エージェントは実行を開始する前に最大費用を確認できます。 - 利用額を確認する。 すべての実行とその課金額はツールに表示されます。何も返さずに失敗した実行は無料です。
アカウントで同時に進行できる実行は最大 10 件です。実行の課金の仕組みについてはツールを実行するを参照してください。