URnetwork

官方

高品質的VPN和代理連線

你可以用 URnetwork MCP 做什麼?

  • 尋找可用的出口位置 — 透過 providerLocations 查詢網路上的國家、地區或城市,若無相符結果則提供替代建議。
  • 從選定位置擷取網頁內容 — 使用 fetch 載入 URL,如同從所選國家、地區或城市瀏覽,並可選擇收集頁面資源。
  • 跨呼叫維持瀏覽工作階段 — 重複使用回傳的 signed_proxy_id 與 cookies,以保持相同的出口位置,並保留登入狀態或同意橫幅。
  • 收集分頁的頁面資源 — 將 fetch 結果中的 continuation 值傳回,以擷取其餘引用的圖片、樣式表、腳本或媒體。
  • 處理網路付款需求 — 當結果中出現 payment_required 時,簽署所述付款,並以附加已簽署付款的方式重試相同的 fetch 呼叫。

文件

歡迎使用 URnetwork for Agents

URnetwork 是一個去中心化的隱私網路。它的設計宗旨是讓使用者預設保持匿名,並能存取世界上所有的內容。

人類使用應用程式(Android、iOS、Chrome)。Agent 則使用 API 和 MCP 技能:

Agent 在使用 API 和 MCP 伺服器時,應參考以下指引。

驗證

API 和 MCP 伺服器的驗證方式不同。請針對您呼叫的介面使用正確的驗證方式。

MCP 伺服器:OAuth

MCP 伺服器是受 OAuth 2.1 保護的資源。網路 JWT 或 API 金鑰不被接受——只有 URnetwork 自家授權伺服器簽發的存取權杖才有效。

大多數 MCP 用戶端會自動為您處理:連線到 https://mcp.bringyour.com,用戶端會自動探索授權伺服器,並引導使用者完成登入。如果您要自行實作此流程:

  1. 在不帶權杖的情況下呼叫 MCP 伺服器。它會回應 401,並附上 WWW-Authenticate 標頭,指名受保護資源的中繼資料。
  2. 在 https://mcp.bringyour.com/.well-known/oauth-protected-resource 取得該中繼資料,以找到授權伺服器 https://auth.bringyour.com。
  3. 取得 https://auth.bringyour.com/.well-known/oauth-authorization-server(或 /.well-known/openid-configuration)以取得其端點。
  4. 執行帶有 PKCE 的授權碼流程。請包含 resource 參數,並設為 https://mcp.bringyour.com,這會將權杖綁定到此伺服器。
  5. 在每個 MCP 請求中,將取得的存取權杖放在 Authorization: Bearer <ACCESS TOKEN> 標頭中傳送。

權限範圍:

範圍授予權限
mcp:readproviderLocations
mcp:fetchfetch — 開啟一個計費到網路的出口用戶端
openid用於識別使用者的 ID 權杖
offline_access重新整理權杖,讓連線在無需重新提示的情況下持續有效

存取權杖的有效期為一小時。請請求 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,請重複整個流程,從索取授權碼開始。

在選擇代理技術時,請考量以下使用情境:

使用情境建議協定需求
爬蟲 / 網頁瀏覽HTTPS最適合 TCP/Web。除非有特定需求需要使用 HTTP,否則一律使用 HTTPS 代理。HTTP 通常僅用於不支援 HTTPS 的特定測試環境。從 /network/auth-client 回應中的 proxy_config_result 物件內,使用 https_proxy_url。不需要額外的使用者名稱或密碼。
底層 Socket / UDPSOCKS支援使用 SOCKS5 的 TCP+UDP socket。從 /network/auth-client 回應中的 proxy_config_result 物件內,使用 socks_proxy_url 或 proxy_host 和 proxy_port,使用者名稱為 access_token(密碼留空)。伺服器支援遠端 DNS 解析(SOCKS5H)。
系統層級 / 作業系統層級WireGuard路由所有 IP 封包。在 /network/auth-client 請求中,proxy_config.enable_wg 必須明確設為 true。在回應中的 proxy_config_result 物件內,使用 wg_config.config 作為完整的 WireGuard 設定檔。

使用 /network/find-locations 路由查詢位置時,務必根據所需的 location_type(city、region 或 country)過濾回傳的 locations 陣列,以確保 location_id 符合使用者的意圖。

位置類型需求
country用於國家。
region用於州、省、行政區和都會區。
city用於城市。

使用 MCP 伺服器

MCP 伺服器提供兩個工具。

providerLocations

尋找可用的位置。網路上的任何國家、地區或城市都可以用查詢字串搜尋;空查詢會回傳可用的國家。需要 mcp:read。

詢問使用者想要哪個國家、地區或城市。如果沒有相符的結果,請請他們擴大範圍到地區,再到國家。如果仍然沒有相符的結果,請列出可用的國家,並建議前 10 名之一。

fetch

從所選位置載入 URL,如同在該位置瀏覽一般,並可選擇回傳頁面引用的圖片、樣式表、腳本和媒體。需要 mcp:fetch,因為每個新位置都會開啟一個計費到網路的出口用戶端。

狀態會透過您串接。每個結果都包含 next_step,明確指出要攜帶什麼:

  • signed_proxy_id — 提供請求服務的出口。在後續載入時將它傳回,以重複使用相同的位置,而不是每次都開啟新的用戶端。同時繼續傳遞 location,以便在出口過期時可以重新建立。重複使用保證相同的位置,而非相同的出口 IP。
  • cookies — 網站工作階段,讓登入狀態和同意橫幅在多次呼叫之間保持有效。不透明;請原封不動地傳回,切勿編輯。
  • continuation — 當頁面引用的資源超過單次呼叫可傳回的數量時出現。再次呼叫並傳入它以收集其餘資源;屆時不需要 url。
  • payment_required — 當網路達到方案並行用戶端上限,且可透過付款解決時出現。簽署它所描述的付款,並以 payment 設為已簽署付款來重複相同的呼叫。不要啟動獨立的購買流程。

資源探索是靜態的:會解析 HTML 以尋找引用。頁面透過 JavaScript 載入的內容不會被看到。

建立代理以供直接使用

若要取得您自行驅動的 HTTPS/SOCKS/WireGuard 代理,而不是透過 MCP 伺服器擷取,請使用下方的 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,使用該 client_id 透過 /network/auth-client 路由建立代理,並將 proxy_config.initial_device_state.location 設為包含 connect_location_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>"}}}}}'