OpenCode + Scrapeless: リモートMCPサーバーに接続する
Senior Cybersecurity Analyst
TL;DR:
- OpenCodeは、
remoteMCPサーバーとしてScrapelessを利用します。 エントリーにはurl、x-api-tokenヘッダー、"oauth": falseが必要です。 - キーは
{env:SCRAPELESS_API_KEY}として書いてください、${SCRAPELESS_API_KEY}としてではありません。 OpenCodeは最初の形式を置き換え、2番目のものをリテラルテキストとして送信し、サーバーは接続されたままになりますが、すべてのツール呼び出しは401で失敗します。 ✓ connectedはヘッダーが存在することを証明するだけです。 Scrapelessハンドシェイクは任意のx-api-token値を受け入れ、25のツールすべてをリスト化しますので、設定を信頼する前に1つのツール結果を確認してください。oauth設定はBearer間違いの見た目を決定します。 デフォルトでAuthorization: Bearerヘッダーは⚠ needs authenticationを表示しますが、"oauth": falseで同じヘッダーは✗ failedを表示し、401が返されます。- ツールは
<server>_<tool>という名前で到着します。scrapelessというサーバーエントリーはモデscrapeless_scrape_markdownを提供し、25の定義は約30 KBのtools/listレスポンスとして返されます。 - Scrapeless無料プランでキーを取得し、数分でOpenCodeを接続します。
OpenCodeは、構成する任意のモデルプロバイダーに対してターミナルでコーディングエージェントを実行します。ファイルを読み取り、コマンドを実行しますが、ライブウェブページに関する質問には1つを取得するツールが必要で、MCPサーバーはOpenCodeが同梱していないツールを取得する方法です。
Scrapeless MCPサーバーはホストされているため、接続は構成であり、インストールではありません。このガイドでは、構成エントリー、静かに壊れる置換構文、各opencode mcp listステータスが意味すること、動作しているキーと単に接続したサーバーの違いを説明します。
OpenCodeがScrapelessから得るもの
サーバーは25のツールをリストします。3つは1回の呼び出しでページを返します:scrape_markdown、scrape_htmlおよびscrape_screenshot。16のbrowser_*ツール、browser_create、browser_goto、browser_clickおよびbrowser_typeのように、クラウドブラウザセッションを一歩ずつ進めます。crawl_start、crawl_resultおよびcrawl_cancelはクローラーを管理し、google_search、google_trendsおよびai_scraperがセットを完成させます。
ほとんどのプロンプトで便利なのはscrape_markdownです。これは、モデルが最も安価に読み取る形でレンダリングされたページをMarkdownとして返し、URLだけを必要とします。
前提条件
- モデルプロバイダーがすでに構成されたOpenCode。このガイドではOpenCode 1.17.19を使用しています。
- ScrapelessダッシュボードからのScrapeless APIキー。
- サーバーに必要なインストールはありません。
https://api.scrapeless.com/mcpで実行され、OpenCodeはHTTPを介してアクセスします。
ステップ1:opencode.jsonにサーバーを追加
OpenCodeは、その構成のmcpブロックからMCPサーバーを読み取ります。グローバルファイルは~/.config/opencode/opencode.jsonであり、プロジェクトルートにあるopencode.jsonはそのプロジェクトに適用されます:
json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"scrapeless": {
"type": "remote",
"url": "https://api.scrapeless.com/mcp",
"oauth": false,
"headers": {
"x-api-token": "{env:SCRAPELESS_API_KEY}"
}
}
}
}
"type": "remote"は、OpenCodeがローカルコマンドを起動するのではなくHTTPで接続するようにします。"oauth": falseは、Scrapelessエンドポイントが提供しないOAuthフローの開始を防ぎます; OAuthの発見パスは404を返し、ヘッダーだけで認証します。opencode mcp addもエントリーを書くことができ、--urlおよび--headerフラグを受け入れますが、ファイルを直接編集するのが{env:}参照を正確に取得する信頼できる方法です。
ステップ2:${}ではなく{env:}置換を使用
OpenCodeは構成を読み込むときに{env:VARIABLE_NAME}をその環境変数の値で置換します。環境変数は、マシンごとに変更される資格情報の一般的な場所であり、{env:}はOpenCodeがそれを読み取る方法です。OpenCodeを開始するシェルでキーをエクスポートします:
bash
export SCRAPELESS_API_KEY="your-scrapeless-api-key"
opencode mcp list
text
● ✓ scrapeless connected
│ https://api.scrapeless.com/mcp
シェルスタイルの${SCRAPELESS_API_KEY}は同等に見えますが、異なります。OpenCodeはリテラルテキストとして通過させ、Scrapelessハンドシェイクが任意の非空トークンを受け入れるため、サーバーは✓ connectedをリスト化します。問題は、モデルがツールを呼び出したときにのみ現れます:
text
Failed to fetch data. Error: [Scrapeless]: Request POST /api/v1/unlocker/request failed with status 401
変数が未エクスポートのままだと、早い段階でより目立つ失敗になります。{env:SCRAPELESS_API_KEY}が何も指していないと、ハンドシェイク自体が拒否されます:
text
● ✗ scrapeless failed
│ SSE error: Non-200 status code (401)
│ https://api.scrapeless.com/mcp
今これを設定していますか? Scrapeless無料プランは接続と最初のツール呼び出しをカバーします。
ステップ3:各opencode mcpリストステータスを読む
ステータスラインは、OpenCodeが接続を開けたかどうかを示します。しかし、それがキーが機能するかどうかは示しません。
| ステータス | 何が起こったか | 次のステップ |
|---|---|---|
✓ scrapeless connected |
サーバーがx-api-tokenヘッダーを持つリクエストを受け入れました |
キーを確認するために1つのツール呼び出しを行います |
✗ scrapeless failed と 401 |
ヘッダーが欠落または空です | ヘッダー名とエクスポートを確認してください |
⚠ scrapeless needs authentication |
OAuth がまだ有効な状態での 401、通常は Bearer ヘッダーからのもの | x-api-token を使用し、"oauth": false を設定します |
ある失敗モードは悪いキーのように見えますが、実際にはそうではありません。ステータスラインに「接続済み」と表示され、ツール呼び出しに Failed to fetch data と返答がある場合、マシン上の別の MCP サーバーが同じ Scrapeless ツールを公開しているかどうかを確認してください。たとえば、1 つの資格情報の背後に複数のプロバイダをルーティングするゲートウェイなどです。エージェントは代わりにそのサーバーを呼び出した可能性があります。OpenCode は各ツールをサーバー名でプレフィックス付けするため、トランスクリプト行には応答したサーバー名が記載されます。
ほとんどの MCP の例は Authorization: Bearer で認証しますが、スキーム OAuth 2.0 ベアラートークン仕様 で定義されています。Scrapeless は x-api-token を読み取る代わりに、Bearer ヘッダーは 401 Unauthorized response を取得します。oauth がデフォルトのままである場合、OpenCode はその 401 をサインインのプロンプトとして扱います:
text
● ⚠ scrapeless needs authentication
│ https://api.scrapeless.com/mcp
"oauth": false があると、同じヘッダーは 401 と共に ✗ failed を読み取ります。これは、不正なヘッダーの方が認証を促すものよりも正確に説明しています。
ステップ 4: プロンプトからツールを呼び出す
サーバーとツールの名前を最初に指定し、結果の唯一の可能なソースを持たせます:
text
Use the scrapeless MCP server's scrape_markdown tool on https://example.com
and reply with the first markdown heading line.
opencode run --format json は各ステップを JSON イベントとして出力します。そのプロンプトからのツールイベント:
text
type: tool_use
tool: scrapeless_scrape_markdown
status: completed
output: Response: "# Example Domain\n\nThis domain is for use in documentation ...
モデルの応答は # Example Domain でした。ツール名は OpenCode の <server>_<tool> パターンに従うため、scrapeless と呼ばれるエントリーは 25 のツールすべてに同じプレフィックスを追加します。
その出力は opencode mcp list では与えられないチェックです。ページコンテンツで始まる結果はキーが機能していることを意味します。Failed to fetch data で始まる結果は接続が正常であり、キーが機能していないことを意味します。MCP ツール仕様書 は、失敗した呼び出しのために isError フラグを提供していますが、Scrapeless は両方の結果をそれなしで普通のツールテキストとして返すため、テキストを読むべきです。
すべての接続されたサーバーは、モデルのコンテキストにそのツール定義を追加し、Scrapeless tools/list の応答はすべての 25 ツールで約 30 KB です。"enabled": false をエントリーに設定すると、それを構成されたままとし、ウェブを必要としないセッションからは外れます。
サーバーが公開するものに関しては、Scrapeless MCP サーバー発表 で立ち上げについて取り上げており、我々の MCP 統合ガイド ではエージェントがブラウザに到達する方法を比較しています。Browser MCP ドキュメンテーション は構成リファレンスを提供し、Scraping API ページはツールの背後にいるアクターを説明し、価格 は呼び出しのコストをリストします。
結論
OpenCode はエントリーから 4 つの要素を必要とします: "type": "remote"、Scrapeless の URL、x-api-token ヘッダーは {env:SCRAPELESS_API_KEY} として記述され、"oauth": false です。置換構文は最も間違いやすい詳細であり、壊れた形式でも接続が可能です。
opencode mcp list は欠落したヘッダー、エクスポートされていない変数、および Bearer の混同をキャッチします。悪いキーを捕まえることができるのはツールの結果だけですので、一度呼び出しをして、接続の上に何かを構築する前に戻ってくるものを読み取ってください。
OpenCode にウェブのライブビューを提供する準備はできましたか? Scrapeless の無料プランから始める そしてサーバーを追加してください。
FAQ
Q: API キーヘッダーを使ってリモート MCP サーバーを OpenCode に追加するにはどうすればよいですか?
mcp の下に opencode.json にエントリーを追加し、"type": "remote"、サーバー url、"oauth": false および headers オブジェクトを使用します。Scrapeless 用のヘッダーは x-api-token で、{env:SCRAPELESS_API_KEY} として書かれているため、キーはファイルから外れます。
Q: なぜ ${SCRAPELESS_API_KEY} は opencode.json で動作しないのですか?
OpenCodeの置換構文は{env:SCRAPELESS_API_KEY}です。シェルスタイルの形式はリテラルテキストとして送信されるため、サーバーは依然として接続されているとリストされ、ツールコールはfailed with status 401で戻ってきます。
Q: なぜopencode mcpリストには認証が必要と表示されるのですか?
サーバーはoauthが有効な時に401を返したため、OpenCodeはサインインを提供します。Scrapelessでは、これはほぼ常にAuthorization: Bearerヘッダーを意味します; x-api-tokenに切り替えて"oauth": falseを設定してください。
Q: "接続済み"は私のScrapelessキーが有効であることを意味しますか?
いいえ。Scrapelessハンドシェイクとツールリストは、空でない任意のx-api-token値で成功します。ツールコールのみが、不正なキーを示します。その結果はFailed to fetch dataで始まります。
Q: OpenCode内のScrapelessツール名は何ですか?
OpenCodeはMCPツールを<server>_<tool>と名付けます。scrapelessというエントリがあると、モデルはscrapeless_scrape_markdownを見て、他の24個のツールにも同じプレフィックスがあります。
Q: OpenCodeはopencode.jsonをどこから読み取りますか?
グローバル設定は~/.config/opencode/opencode.jsonであり、プロジェクトはルートに独自のopencode.jsonを追加できます。OPENCODE_CONFIG環境変数はOpenCodeを特定の設定ファイルに指し示します。
Q: Scrapeless MCPサーバーのためにパッケージをインストールする必要がありますか?
いいえ。サーバーはhttps://api.scrapeless.com/mcpでホストされており、OpenCodeはHTTPを介して接続するため、パッケージは存在せず、ローカルプロセスもなく、更新するバージョンもありません。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



