URnetwork
公式高品質なVPNおよびプロキシ接続
URnetwork MCPで何ができますか?
- 利用可能な出口ロケーションを見つける —
providerLocationsを使用して、ネットワーク上の国、地域、都市を問い合わせます。一致するものがない場合は、フォールバック候補を提示します。 - 選択したロケーションからWebコンテンツを取得する —
fetchを使用して、選択した国、地域、都市からブラウジングしているかのようにURLを読み込みます。ページのリソース収集もオプションで可能です。 - 呼び出し間でブラウジングセッションを維持する — 返された
signed_proxy_idとcookiesを再利用して、同じ出口ロケーションを維持し、ログインや同意バナーを保持します。 - ページネーションされたページリソースを収集する —
fetch結果のcontinuation値を渡して、残りの参照画像、スタイルシート、スクリプト、メディアを取得します。 - ネットワーク支払い要件に対応する — 結果に
payment_requiredが表示された場合は、説明された支払いに署名し、署名済みの支払いを添付して同じfetch呼び出しを再試行します。
ドキュメント
URnetwork for Agents へようこそ
URnetwork は分散型プライバシーネットワークです。ユーザーをデフォルトで匿名に保ち、世界中のすべてのコンテンツへのアクセスを提供するように設計されています。
人間はアプリ(Android、iOS、Chrome)を使用します。エージェントはAPIとMCPスキルを使用します:
- API仕様は次の場所にあります:https://github.com/urnetwork/connect/blob/main/api/bringyour.yml
- APIは次の場所でホストされています:https://api.bringyour.com
- MCPサーバーは次の場所でホストされています:https://mcp.bringyour.com
エージェントは、APIおよびMCPサーバーを使用する際に以下のガイダンスを考慮する必要があります。
認証
APIとMCPサーバーは異なる方法で認証します。呼び出しているサーフェスに適した方法を使用してください。
MCPサーバー:OAuth
MCPサーバーはOAuth 2.1で保護されたリソースです。ネットワークJWTまたはAPIキーはそこでは受け付けられません — URnetwork自身の認可サーバーによって発行されたアクセストークンのみが受け付けられます。
ほとんどのMCPクライアントはこれを自動的に行います:https://mcp.bringyour.com に接続すると、クライアントが認可サーバーを発見し、ユーザーをサインインに導きます。自分でフローを実装する場合は:
- トークンなしでMCPサーバーを呼び出します。サーバーは
401で応答し、保護されたリソースのメタデータを指定するWWW-Authenticateヘッダーを含みます。 - そのメタデータを
https://mcp.bringyour.com/.well-known/oauth-protected-resourceで取得して、認可サーバーhttps://auth.bringyour.comを見つけます。 https://auth.bringyour.com/.well-known/oauth-authorization-server(または/.well-known/openid-configuration)を取得して、そのエンドポイントを確認します。- PKCEを使用して認可コードフローを実行します。
resourceパラメータをhttps://mcp.bringyour.comに設定してください。これがトークンをこのサーバーにバインドします。 - 結果のアクセストークンを、すべてのMCPリクエストで
Authorization: Bearer <ACCESS TOKEN>として送信します。
スコープ:
| スコープ | 付与内容 |
|---|---|
mcp:read | providerLocations |
mcp:fetch | fetch — ネットワークに請求されるエグレスクライアントを開きます |
openid | ユーザーを識別するIDトークン |
offline_access | 再プロンプトなしで接続を維持できるリフレッシュトークン |
アクセストークンの有効期限は1時間です。offline_access をリクエストし、ユーザーをブラウザに戻す代わりにリフレッシュトークンを使用してください。ツールが保持していないスコープを必要とすると報告した場合は、そのスコープを既存のスコープに加えてリクエストして再認可してください。そうしないと、他のスコープを失います。
API:JWT
API(https://api.bringyour.com)を使用する場合、ユーザーJWTは Authorization: Bearer <JWT> ヘッダーで渡されます。
JWTを取得するには、人間に認証コードを要求し、その認証コードをAPIの /auth/code-login ルートを使用してJWTに変換します。curlの例は以下にあり、jqにパイプして結果からby_jwtプロパティを抽出します:
curl -X POST https://api.bringyour.com/auth/code-login -d '{"auth_code": "<AUTH CODE>"}' | jq ".by_jwt"
JWTは保存して再利用できます。人間がJWTの更新を要求した場合は、認証コードの要求からプロセスを繰り返します。
プロキシ技術を選択する際は、次のユースケースを考慮してください:
| ユースケース | 推奨プロトコル | 要件 |
|---|---|---|
| スクレイピング / Webブラウジング | HTTPS | TCP/Webに最適です。特別な理由がない限り、常にHTTPSプロキシを使用してください。HTTPは通常、HTTPSをサポートしない特定のテスト環境でのみ必要です。/network/auth-clientレスポンスのproxy_config_resultオブジェクト内のhttps_proxy_urlを使用してください。追加のユーザー名やパスワードは不要です。 |
| 低レベルソケット / UDP | SOCKS | SOCKS5でTCP+UDPソケットをサポートします。/network/auth-clientレスポンスのproxy_config_resultオブジェクト内のsocks_proxy_urlまたはproxy_hostとproxy_portを、ユーザー名access_token(パスワードは空)で使用してください。サーバーはリモートDNS解決(SOCKS5H)をサポートしています。 |
| システム全体 / OSレベル | WireGuard | すべてのIPパケットをルーティングします。/network/auth-clientリクエストで、proxy_config.enable_wgを明示的にtrueに設定する必要があります。レスポンスのproxy_config_resultオブジェクト内のwg_config.configを完全なWireGuard設定ファイルとして使用してください。 |
/network/find-locationsルートを使用してロケーションをクエリする場合、常に返されたlocations配列を目的のlocation_type(city、region、country)でフィルタリングして、location_idがユーザーの意図と一致することを確認してください。
| ロケーションタイプ | 要件 |
|---|---|
| country | 国の場合。 |
| region | 州、県、行政地域、大都市圏の場合。 |
| city | 都市の場合。 |
MCPサーバーの使用
MCPサーバーは2つのツールを公開しています。
providerLocations
利用可能なロケーションを検索します。ネットワーク上の任意の国、地域、都市をクエリ文字列で検索できます。空のクエリは利用可能な国を返します。mcp:read が必要です。
人間に希望する国、地域、都市を尋ねてください。一致するものがない場合は、地域、次に国に範囲を広げるよう依頼してください。それでも一致するものがない場合は、利用可能な国をリストアップし、上位10件のいずれかを提案してください。
fetch
選択したロケーションからブラウジングしているかのようにURLを読み込み、オプションでページが参照する画像、スタイルシート、スクリプト、メディアを返します。mcp:fetch が必要です。新しいロケーションごとにネットワークに請求されるエグレスクライアントが開かれるためです。
状態はあなたを通じてスレッド化されます。すべての結果には、何を引き継ぐべきかを正確に示す next_step が含まれています:
signed_proxy_id— リクエストを処理したエグレス。後続の読み込みでこれを渡して、毎回新しいクライアントを開く代わりに同じロケーションを再利用します。locationも渡し続けて、エグレスが期限切れになった場合に再確立できるようにしてください。再利用は同じロケーションを保証しますが、同じ出口IPは保証しません。cookies— サイトセッション。ログインや同意バナーが呼び出し間で維持されます。不透明です。変更せずにそのまま渡し、編集しないでください。continuation— ページが1回の呼び出しで収まらない数のリソースを参照した場合に存在します。残りを収集するためにこれを渡して再度呼び出してください。その場合urlは不要です。payment_required— ネットワークがプランの同時クライアント制限に達しており、支払いで解決できる場合に存在します。説明されている支払いに署名し、paymentに署名済みの支払いを設定して同じ呼び出しを繰り返してください。別の購入フローを開始しないでください。
リソース検出は静的です:HTMLが参照のために解析されます。JavaScriptでページが読み込むコンテンツは表示されません。
直接使用するためのプロキシの作成
MCPサーバーを介してフェッチするのではなく、自分で駆動するHTTPS/SOCKS/WireGuardプロキシを取得するには、以下のAPIフローを使用してください。
APIを使用して国のHTTPS/SOCKS/WireGuardプロキシを作成する
APIを直接使用して、国のHTTPS/SOCKS/WireGuardプロキシを作成できます。
ステップ1、/network/find-locationsルートを使用してロケーションのリストを検索します。curlの例は以下にあり、jqにパイプしてlocationsリストを抽出します。
curl -X POST -H 'Authorization: Bearer <JWT>' https://api.bringyour.com/network/find-locations -d '{"query": "<LOCATION NAME>"}' | jq '.locations'
ステップ2、目的のロケーションを選択し、country_codeプロパティを保存します。
ステップ3、保存した国コードを使用して、/network/auth-clientルートでproxy_config.initial_device_stateにcountry_codeを設定してプロキシを作成します。
curl -X POST -H 'Authorization: Bearer <JWT>' https://api.bringyour.com/network/auth-client -d '{"proxy_config": {"initial_device_state": {"country_code": "<COUNTRY CODE>"}}}'
APIを使用して検索ロケーションのHTTPS/SOCKS/WireGuardプロキシを作成する
APIを直接使用して、ロケーションを検索し、HTTPS/SOCKS/WireGuardプロキシを作成できます。最も望ましいロケーション結果を選択する決定を行う必要があります。各ロケーションには固定されたlocation_idがあり、コードに保存できます。
ステップ1、/network/find-locationsルートを使用してロケーションのリストを検索します。curlの例は以下にあり、jqにパイプしてlocationsリストを抽出します。
curl -X POST -H 'Authorization: Bearer <JWT>' https://api.bringyour.com/network/find-locations -d '{"query": "<LOCATION NAME>"}' | jq '.locations'
ステップ2、目的のロケーションを選択し、location_idプロパティを保存します。
ステップ3、保存したlocation_idを使用して、/network/auth-clientルートでproxy_config.initial_device_state.locationにconnect_location_id.location_idを設定してプロキシを作成します。
curl -X POST -H 'Authorization: Bearer <JWT>' https://api.bringyour.com/network/auth-client -d '{"proxy_config": {"initial_device_state": {"location": {"connect_location_id":{"location_id": "<LOCATION ID>"}}}}}'
APIを使用して検索ロケーションのHTTPS/SOCKS/WireGuardプロキシを作成し、そのロケーションのすべてのエグレスIPを列挙する
APIを直接使用して、ロケーションを検索し、そのロケーションのプロバイダー(エグレスIP)を列挙し、各エグレスIPのHTTPS/SOCKS/WireGuardプロキシを作成できます。最も望ましいロケーション結果を選択する決定を行う必要があります。各ロケーションには固定されたlocation_idがあり、コードに保存できます。さらに、各プロバイダーには固定されたclient_idがあり、コードに保存できます。
ステップ1、/network/find-locationsルートを使用してロケーションのリストを検索します。curlの例は以下にあり、jqにパイプしてlocationsリストを抽出します。
curl -X POST -H 'Authorization: Bearer <JWT>' https://api.bringyour.com/network/find-locations -d '{"query": "<LOCATION NAME>"}' | jq '.locations'
ステップ2、目的のロケーションを選択し、location_idを保存します。
ステップ3、/network/find-providers2ルートを使用して、location_idのランク付けされたプロバイダー(エグレスIP)のリストを取得します。サンプルサイズは、必要なユニークなプロバイダーの数に設定できます。curlの例は以下にあり、jqにパイプしてprovidersリストを抽出します。
curl -X POST -H 'Authorization: Bearer <JWT>' https://api.bringyour.com/network/find-providers2 -d '{"specs": [{"client_id": "<CLIENT ID>"}], "count": <COUNT>}' | jq '.providers'
ステップ4、リスト内の各client_idをループして、/network/auth-clientルートでproxy_config.initial_device_state.locationにconnect_location_id.client_idを設定して、client_idを使用してプロキシを作成します。
curl -X POST -H 'Authorization: Bearer <JWT>' https://api.bringyour.com/network/auth-client -d '{"proxy_config": {"initial_device_state": {"location": {"connect_location_id":{"client_id": "<CLIENT ID>"}}}}}'