ブログに戻ります

ワープ + スクラップレス: リモート MCP サーバーに接続する

James Thompson
James Thompson

Scraping and Proxy Management Expert

21-Sep-2026

TL;DR:

  • Warpは、ストリーミング可能なHTTP経由でScrapelessにリモートMCPサーバーとして接続します。 プロジェクトのルートにある.warp/.mcp.jsonファイルには、urlおよびx-api-tokenヘッダーが必要です。これが全ての設定です。
  • ${SCRAPELESS_API_KEY}を括弧付きで書いてください。 Warpはファイルを読むときにその形式を展開します。$SCRAPELESS_API_KEY{{SCRAPELESS_API_KEY}}はリテラルテキストとしてScrapelessに到達し、サーバーは/mcpで正常に見えます。
  • 未設定の変数は全体のファイルを無効にします。 その中のすべてのサーバーはWarp config error … Missing or empty environment variable: SCRAPELESS_API_KEYに置き換えられます。
  • プロジェクトサーバーは手動で起動します。 /mcpを開き、scrapelessを選択してEnterを押します。行はofflineからrunning · 25 toolsに移動します。
  • running · 25 toolsはキーを証明しません。 作成されたキーも同じステータスに到達します。ツール呼び出し1回、またはステップ5での短いチェックが、有効なキーと無効なキーを分けます。
  • ヘッダー名はx-api-tokenです。 Authorization: Bearerエントリは「設定された資格情報を拒否しました (HTTP 401)」で失敗しますが、トークン自体は有効です。
  • Scrapelessの無料プランでキーを取得し、数分でサーバーを追加できます。

Warpエージェントは実際のターミナルでコマンドを実行し、あなたのコードを読みますが、現在のウェブページのレンダリングがどのようになるかは見えません。MCPサーバーはそのギャップを埋めます:エージェントがタスクの途中で呼び出すツールは、ページを取得しレンダリングするサービスによって応答されます。

このガイドでは、ホストされたScrapeless MCPサーバーをWarpエージェントCLI、warpバイナリに追加します。設定は数行のJSONです。機能するかどうかは、Warpが読むファイル、キーがどのように参照されているか、および/mcpステータス行が何を伝え、何を伝えないかの3つの詳細に依存します。

ScrapelessがWarpエージェントセッションに追加するもの

サーバーは、仕事ごとにグループ化された25のツールを公開します:

  • scrape_markdownscrape_html、およびscrape_screenshotは、レンダリングされたページをMarkdown、プレーンHTML、または画像として1回の呼び出しで返します。
  • browser_*ツールは、browser_createbrowser_gotoからbrowser_clickbrowser_typebrowser_snapshotまで、クラウドブラウザセッションをステップバイステップで促進します。
  • crawl_startcrawl_result、およびcrawl_cancelは、バックグラウンドでクローリングを実行し、後で収集します。
  • google_searchおよびgoogle_trendsは検索結果とトレンドデータを返し、ai_scraperはChatGPT、Gemini、PerplexityなどのAIアシスタントからの回答をキャプチャします。

これにはあなたのマシンで実行されるものはありません。MCPストリーミング可能なHTTPトランスポートは、JSON-RPCをPOST経由で受け取る単一のHTTPSエンドポイントであり、Warpはそれをネイティブに話します。そのMCPログは、ファイルにトランスポート設定がなくても、MCP: Using Streaming HTTP transportを記録します。

WarpがMCPサーバー定義を探索する場所

Warpは、設定ファイルからサーバー定義を読み取るだけでなく、その設定ページからも読み取ります。WarpのMCPドキュメントは、これらの場所をリストしています:

プロバイダー グローバル設定 プロジェクトスコープ設定
Warp ~/.warp/.mcp.json プロジェクトルートの.warp/.mcp.json
Claude Code ~/.claude.json プロジェクトルートの.mcp.json
Codex ~/.codex/config.toml プロジェクトルートの.codex/config.toml
その他のエージェント ~/.agents/.mcp.json プロジェクトルートの.agents/.mcp.json

プロジェクトスコープのサーバーは、任意のプロバイダーからでも自動的には起動しません。Warpはそれらを検出し、あなたが各サーバーを起動するのを待ちます。その選択はセッションの間だけ有効ですので、再起動後は再度起動する必要があります。

CLIは、Warpアプリから別の設定を保持します。WarpエージェントCLI設定ページは、macOSでそのファイルを~/.warp_cli/.mcp.jsonとしています。Linuxでは、Warp Agent CLI v0.2026.09.09.08.26.stable_02は、~/.warp_cli/.mcp.jsonまたは~/.warp/.mcp.jsonからサーバーを取得せず、すべての3つのプロジェクトスコープファイルを発見し、Warp.warp/.mcp.json)、Claude.mcp.json)、Other Agents.agents/.mcp.json)とラベル付けしました。このガイドは、Warpが自らを名付けるファイル、.warp/.mcp.jsonを使用しています。

Warpデスクトップアプリで作業している場合も、同じmcpServers JSONが設定 > エージェント > MCPサーバーを通じて**+追加**ボタンから入ります。

前提条件

  • WarpアカウントでサインインしたWarpエージェントCLI。このガイドでは、warp --versionを印刷するバージョンv0.2026.09.09.08.26.stable_02を使用します。
  • エージェントがツールを呼び出すステップで必要な、WarpアカウントのAIクレジット。
  • ScrapelessダッシュボードからのScrapeless APIキー。
  • 設定ファイルを保持するプロジェクトフォルダー。このテストでは、Gitリポジトリを使用しました。

ステップ1: プロジェクトに.warp/.mcp.jsonを追加する

プロジェクトルートに.warp/.mcp.jsonを作成します:

json Copy
{
  "mcpServers": {
    "scrapeless": {
      "url": "https://api.scrapeless.com/mcp",
      "headers": {
        "x-api-token": "${SCRAPELESS_API_KEY}"
      }
    }
  }
}

URLサーバーは、Warpで2つのプロパティを取ります:url(必須)と、headers(一般的にはオプションですが、ここでは必須)です。なぜなら、Scrapelessはx-api-tokenヘッダーによってすべてのリクエストを認証するためです。設定するtypeフィールドはありません。

ファイルは変数参照を保持していて、キーではないため、バージョン管理に保管できます。プロジェクトを開く各人が自分のキーをエクスポートします。これにより、資格情報がリポジトリ外に保持され、OWASPの秘密管理ガイダンスが、秘密が決して存在すべきでない場所として扱います。

ステップ2:正しいプレースホルダーでキーをエクスポートする

Warpを起動するシェルで変数をエクスポートし、プロジェクトフォルダーからCLIを起動します:

bash Copy
export SCRAPELESS_API_KEY="your-scrapeless-api-key"
cd path/to/your-project
warp

Warpは、ディスクからの設定ファイルを読み取るときに${VAR}参照を展開します。フォームは重要で、誤ったフォームは静かに失敗します。以下の各バリアントは、Scrapelessに実際に届いたものを見るためにローカルロギングプロキシを通過しました:

.warp/.mcp.jsonのヘッダー値 Scrapelessに届くもの /mcpが示すもの
${SCRAPELESS_API_KEY} シェルからのキー running · 25 tools
$SCRAPELESS_API_KEY リテラルテキスト$SCRAPELESS_API_KEY running · 25 tools
{{SCRAPELESS_API_KEY}} リテラルテキスト{{SCRAPELESS_API_KEY}} running · 25 tools
${SCRAPELESS_API_KEY}、エクスポートされていない変数 何も得られない;ファイルは拒否される 設定エラーロウ

2行目と3行目が落とし穴です。これらは動作するセットアップのように見えますが、エージェントの最初のツール呼び出しが認証失敗を返すまでです。

エクスポートされていないケースは大声で目立ちますが、1つのサーバー以上に広がります。Warpは全体のファイルを拒否し、定義されているすべてのサーバーの代わりに単一のエラーロウを表示します:

text Copy
Warp config error  /path/to/your-project/.warp/.mcp.json · Missing or empty environment variable: SCRAPELESS_API_KEY

テスト中、同じファイル内で定義された2番目の有効なサーバーもリストから消えました。シェルプロファイルまたはターミナルセッションを起動するものに変数をエクスポートして、すべてのwarpプロセスがそれを継承するようにしてください。

今すぐこれを設定していますか?Scrapelessの無料プランは、接続と最初のツール呼び出しをカバーします。

ステップ3:/mcpからサーバーを起動する

CLI入力に/mcpと入力してMCP管理ビューを開き、検索ボックスにscrapelessと入力します。その行はプロバイダーラベル、プロジェクト、トランスポートを示します:

text Copy
scrapeless  Warp · scrapeless-demo · HTTP/SSE · offline

行をEnterで押します。数秒以内にWarpはMCPハンドシェイクを実行し、ツールをリストアップして行を更新します:

text Copy
scrapeless  Warp · scrapeless-demo · HTTP/SSE · running · 25 tools

実行中の行でEnterを押すとサーバーが停止します。プロジェクトスコープのサーバーはセッションスコープのため、そのプロジェクトでCLIを開くたびにこの開始を繰り返してください。

ステップ4:プロンプトを表示する前にステータスを確認する

/mcpの各状態は異なる修正を指し示します:

/mcpが示す 意味 修正
offline ファイルが読み取られた;サーバーは開始されていない 行を選択してEnterを押します
running · 25 tools ハンドシェイクとツールリストの取得に成功した;誤ったキー値は同じ結果を示す 1つのツール呼び出しでキーを確認(ステップ5)
failed · Failed to establish connection: … rejected the configured credentials (HTTP 401) Scrapelessはx-api-tokenヘッダーを見つけられなかった ヘッダーをx-api-tokenに名前変更
Warp config error … Missing or empty environment variable 変数がwarpを起動したシェルに設定されていない エクスポートしてwarpを再度開始
No matching MCP servers CLIは編集したファイルを読み取っていない プロジェクトルート内の.warp/.mcp.jsonに置きます

failed行は、原因から遠ざかるアドバイスがあるため、注意深く見ておく価値があります。Authorization: Bearer ${SCRAPELESS_API_KEY}をヘッダーとしてWarpはログを記録します:

text Copy
[error] MCP: Failed to connect to server: Transport creation error: MCP server 'scrapeless' rejected the configured credentials (HTTP 401). The request included the credential header(s) you configured, so the server did not accept that value — check the token itself, its expiry, and its scope. The server did not ask for OAuth.

そのリクエスト内のトークンは有効でした。Scrapelessはヘッダー名が間違っているためリクエストを拒否し、その応答本文にはUnauthorized: Missing x-api-token headerと記載されています。ヘッダー名を変更し、キーはそのままにします。

Warpは、Linux上で${XDG_STATE_HOME:-$HOME/.local/state}/warp-terminal/mcpの下にサーバー起動ごとに1つのログファイルを書き込みます。各ファイルは、APIキーなどの機密情報を含む可能性があることを思い出させるメッセージとともに開きますので、ローカルで読み取り、共有する前に赤字処理を行ってください。

ステップ5:キーを確認し、エージェントをプロンプトする

25のツールを持つ実行中のサーバーは、ヘッダーが到着したことのみを示します。Scrapelessは、どんなキー値に対してもinitializeおよびtools/listで応答し、架空のものを含んでいます。違いはtools/callに現れます:不正なキーの場合、呼び出しは依然としてHTTP 200を返し、結果のテキストはFailed to fetch dataで始まります。

このチェックは、Warpが実行するのと同じハンドシェイクを実行し、次にscrape_markdownを1回呼び出します。Python標準ライブラリ以外は何も使いません:

python Copy
import json
import os
import urllib.request

URL = "https://api.scrapeless.com/mcp"
HEADERS = {
    "Content-Type": "application/json",
    "Accept": "application/json, text/event-stream",
    "x-api-token": os.environ["SCRAPELESS_API_KEY"],
}


def post(payload, session_id=None):
    headers = dict(HEADERS)
    if session_id:
        headers["Mcp-Session-Id"] = session_id
    request = urllib.request.Request(URL, data=json.dumps(payload).encode(), headers=headers)
    with urllib.request.urlopen(request, timeout=120) as response:
        body = response.read().decode()
        session_id = response.headers.get("Mcp-Session-Id") or session_id
    events = [line[5:].strip() for line in body.splitlines() if line.startswith("data:")]
    return session_id, json.loads(events[-1]) if events else None


session, init = post({
    "jsonrpc": "2.0", "id": 1, "method": "initialize",
    "params": {"protocolVersion": "2025-06-18", "capabilities": {},
               "clientInfo": {"name": "key-check", "version": "1.0"}},
})
post({"jsonrpc": "2.0", "method": "notifications/initialized"}, session)
_, result = post({
    "jsonrpc": "2.0", "id": 2, "method": "tools/call",
    "params": {"name": "scrape_markdown", "arguments": {"url": "https://example.com"}},
}, session)

server = init["result"]["serverInfo"]
text = "".join(part.get("text", "") for part in result["result"]["content"])
print(server["name"], server["version"])
if text.startswith("Failed to fetch data"):
    print("key rejected:", text[:60])
else:
    print(f"key accepted: {len(text)} characters of Markdown")

有効なキーがエクスポートされると、次のように表示されます:

text Copy
scrapeless-mcp-server 0.2.0
key accepted: 184 characters of Markdown

キーが確認できると、サーバーとツールに名前を付け、ジョブが単一の取得の場合は以下のようにします:
注意: エージェントターンにはあなたのWarpアカウントのAIクレジットが必要であり、この記事ではテストアカウントに残っていなかったため実行されませんでした。Warpは「AIクレジットが不足しています。」と答えました。サーバーの起動、ハンドシェイク、および上記のキー確認は、同じ設定で同じエンドポイントに対して実行されました。

text Copy
Use the scrapeless MCP server's scrape_markdown tool to fetch
https://books.toscrape.com/catalogue/category/books/mystery_3/index.html
and list the first three book titles with their prices.

そのカテゴリページでは、scrape_markdownが8,940文字を返し、scrape_htmlが53,800文字を返すため、Markdownは同じコンテンツに対してエージェントに約6分の1のコンテキストコストをかけます。結果を解析する独自のコードを使う場合はscrape_htmlを、エージェントがそれを読む場合はscrape_markdownを使用してください。

MCPツールの呼び出しは、あなたのアクティブな実行プロファイルに従います。mcp_permissionsagent_decidesがデフォルトとなり、プロファイルのmcp_allowlistmcp_denylistは、承認なしで実行できるMCPサーバーIDまたは常に承認を求める必要があります。

Scrapeless MCPサーバー発表はサーバーが公開する内容について説明し、Browser MCPドキュメントは設定のリファレンスを提供し、Scraping APIページはツールの背後にいるアクターをカバーし、価格設定は呼び出しのコストを示します。

結論

コネクタは.warp/.mcp.jsonにおける1つのエントリで、3つの条件があります: ヘッダーの名前はx-api-tokenで、その値は${SCRAPELESS_API_KEY}でその波括弧を持ち、変数はwarpを起動するシェルでエクスポートされます。その後、セッションごとに/mcpからサーバーを起動します。

2つの結果は注意が必要です。間違ったプレースホルダ形式と間違ったキーは両方ともrunning · 25 toolsを表示し、ツールの呼び出しだけがそれらを露にします。実際に表示される失敗は異なります: Bearerヘッダーはfailed … rejected the configured credentialsを生成し、エクスポートされない変数はファイル内のすべてのサーバーを隠す構成エラーを生成します。

Warpエージェントにウェブのライブビューを提供する準備はできましたか?Scrapelessの無料プランで開始し、サーバーを追加します。

FAQ

Q: APIキーヘッダーを持つリモートMCPサーバーをWarpに追加するにはどうすればよいですか?

プロジェクトのルートに.warp/.mcp.jsonを作成し、mcpServersエントリにurlheadersオブジェクトを含めます。例えば、"x-api-token": "${SCRAPELESS_API_KEY}"のようになります。変数をエクスポートし、そのフォルダーでwarpを起動し、次に/mcpからサーバーを起動します。Warpデスクトップアプリで、設定 > エージェント > MCPサーバー > + 追加の下に同じJSONを貼り付けます。

Q: WarpはMCPヘッダー内の環境変数を展開しますか?

はい、${VAR}形式で。${SCRAPELESS_API_KEY}のヘッダー値はエクスポートされたキーとしてサーバーに到達しました。$SCRAPELESS_API_KEYは波括弧なしで、{{SCRAPELESS_API_KEY}}はリテラルテキストとして送信されました。

Q: なぜ私のWarp MCPサーバーが間違ったAPIキーで実行中と表示されるのですか?

running · 25 toolsはハンドシェイクとツールのリスト作成が成功したことを意味し、Scrapelessは任意のキー値に対しても応答します。間違ったキーはツールが実行されるときだけ表示されます: 呼び出しはFailed to fetch dataで始まるテキストを返します。

Q: なぜWarpはMCPサーバーが構成された資格情報を拒否したと言うのですか?

Scrapelessの場合、一般的な原因はヘッダー名であり、トークンではありません。Authorization: Bearerヘッダーはrejected the configured credentials (HTTP 401)を生成します。なぜなら、サーバーはx-api-tokenを探し、Missing x-api-token headerに応答するからです。

Q: "Warp config error … Missing or empty environment variable"とはどういう意味ですか?

ファイルはwarpを起動したシェルで設定されていない変数を参照しています。Warpはファイル全体を拒否するため、その中で定義されたすべてのサーバーは/mcpから消えます。変数をエクスポートしてCLIを再起動するまでその状態が続きます。

Q: プロジェクトスコープのMCPサーバーはWarpで自動的に起動しますか?

いいえ。Warpはプロジェクト内の.warp/.mcp.json.mcp.jsonおよび.agents/.mcp.jsonを検出しますが、各サーバーをofflineから起動するまでリストとして表示され、選択は現在のセッションの間のみ持続します。

Q: なぜWarpエージェントCLIは私のサーバーを~/.warp_cli/.mcp.jsonからリストしないのですか?

CLIのドキュメントはmacOSのためにそのパスを提供します。Linuxでは、WarpエージェントCLI v0.2026.09.09.08.26.stable_02は~/.warp_cli/.mcp.jsonまたは~/.warp/.mcp.jsonを読み取りせず、/mcpNo matching MCP serversと応答しました。プロジェクトファイル.warp/.mcp.jsonが発見されました。

Q: Scrapeless MCPサーバーはWarpにいくつのツールを追加しますか?
25: 三つの scrape_* ツール、十六の browser_* ツール、三つの crawl_* ツール、さらに google_searchgoogle_trendsai_scraper

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ