
Island Browser
io.github.WYRE-AI由 GitHub 帳號 WYRE-AI 發布v1.0.3更新於 Oct 30, 2026
MCP server for Island Browser's Admin Actions, Audit, Compromised Credential, and Device APIs.
概覽
針對 Island 企業瀏覽器的唯讀 MCP 伺服器,可查詢管理員操作、稽核事件、外洩憑證與裝置清單。
- 可以做什麼
- 依時間區間分頁列出 Island 管理主控台中的管理員操作,例如原則與使用者/角色變更
- 列出瀏覽器與工作階段稽核事件,包含導覽、檔案傳輸、剪貼簿、列印與原則強制事件
- 列出 Island 偵測到的已外洩憑證
- 列出執行 Island 瀏覽器的受管裝置,可依最後上線時間篩選並依欄位排序
- 適用情境
- 適合需要就 Island 瀏覽器資產回答安全與合規問題的情境:誰在主控台改了什麼、使用者在瀏覽器中做了什麼、哪些憑證被標記為外洩、哪些裝置已納管。它是唯讀連接器,適合調查與報表,而非日常管理操作。
- 執行需求
- 以本機程序透過 stdio 執行,或以 HTTP 容器映像執行。需要 Island 管理主控台產生的 API 金鑰:env 模式透過 ISLAND_API_KEY 提供,gateway 模式透過 X-Island-Api-Key 標頭提供。HTTP 模式另需 CONDUIT_S2S_SECRET 與簽章的 X-Gateway-S2S 標頭。ISLAND_BASE_URL 可覆寫預設管理主機;需能連線至 Island 的 API。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Island Browser,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Island MCP Server
MCP server for Island's Enterprise Browser Management API - administrator actions, browser/session audit events, compromised-credential detections, and device inventory - for AI assistants and the WYRE Conduit gateway.
Scope: 4 read-only tools, one per documented resource group
This connector implements exactly the four resource groups Island documents for its v1 Management API: Admin Actions, Audit (Island's own endpoint name for this is timeline), Compromised Credential, and Device. Island also documents a fifth resource, User, which is deliberately out of scope for this connector (not requested; can be added as a follow-up).
Two of the four - Compromised Credential and Device - are POST-with-body operations on Island's own API rather than plain GETs. Neither mutates anything: both are filtered/searched reads that happen to take their filter parameters in a JSON body instead of a query string, the same "POST for a filtered read, not a mutation" shape this gateway's UniFi connector already uses for its ISP-metrics query tool. No tool in this connector calls a PATCH/PUT/DELETE endpoint, and none reaches Island's broader Management Console surface (policy CRUD, user/browser-configuration-policy management) - see src/client.ts, which implements only these four read operations.
Island's authoritative API reference (documentation.island.io/apidocs) redirects to an authenticated customer portal and was not accessible for this build. Endpoint paths, the Api-Key header name, the request/response shape, and the default base URL below were all confirmed independently against a different, publicly-readable source: criblpacks/cribl-island-browser-rest-io, a published third-party log-collector integration whose repository ships real, executable REST-collector job definitions (default/jobs.yml) against Island's live API - not marketing copy or a prose guess. Response body field names are not independently confirmed from any source and are passed through exactly as Island returns them (see IslandApiResponse in src/types.ts) rather than re-modeled into a guessed shape.
Base URL
Every endpoint below is confirmed at a single fixed host: https://management.island.io/api, taken verbatim from that Cribl pack's island_browser_api_base_url variable, which its own five REST-collector jobs all reference. This connector uses that as the default and lets a customer override it via an optional baseUrl/ISLAND_BASE_URL field, in case a given tenant is provisioned on a different host - a second, lower-confidence source (a third-party SIEM-integration doc, prose only, not executable config) describes the host as https://api.<company>.island.io, which this connector could not independently confirm or rule out. State plainly: the fixed-host reading is the better-evidenced one and is what ships as the default; the override exists specifically to not silently break a tenant for which it's wrong.
Authentication
Island's Management API authenticates with a static API key, generated in the Island Management Console under Modules > Platform Settings > System Settings > Integrations > API > + Create. There is no OAuth flow - this connector only ever holds a live API key, sent as Island's own custom Api-Key header (not Authorization: Bearer). In gateway mode the key arrives per-request via the X-Island-Api-Key header; in local/stdio mode it's read once from ISLAND_API_KEY.
Credential scope: what "Read Only" actually restricts
Two separate claims here, at deliberately different confidence levels - don't collapse them into one "read-only" statement:
- Structurally verified (checked directly, stated with full confidence): this connector's own code makes zero mutating calls. Every function in
client.tscalls one of the four read operations above; noPATCH/PUT/DELETEcall exists anywhere insrc/, and no policy/user/browser-configuration-management endpoint is referenced under any name. - Vendor-documented, not independently verified (hedged deliberately): Island's API-key creation dialog offers a "Read Only" role alongside "Full Admin"/"System Admin" - so some server-side scoping evidently exists - but Island's authoritative documentation of what that role actually restricts sits behind the same customer-only login noted above, and was not accessible to confirm independently. Whether "Read Only" genuinely blocks server-side access to Island's broader Management API surface (policy CRUD, user management, browser configuration policies - none of which this connector implements or calls) versus being a UI-level label has not been tested. Do not read this connector, or this README, as having established what the underlying API key can or cannot do if a non-Read-Only role were selected - only that this connector's own code never attempts anything beyond the four reads above, regardless of which role the customer's key was issued with.
Configuration
Copy .env.example and set the variables below. Leave CONDUIT_S2S_SECRET empty in that file.
/health and /healthz stay unauthenticated and do not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.
HTTP authentication
With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S. The check is verifyS2sHeader in src/s2s-verify.ts: the header value is t=<unix seconds>,v1=<hex>, where the hex is HMAC-SHA256 of the literal string t=<unix seconds> keyed with CONDUIT_S2S_SECRET (64 lowercase hex characters). The timestamp must be within 300 seconds of the server clock. A missing or invalid header is HTTP 401, before vendor credentials are read.
In AUTH_MODE=gateway, /mcp also requires X-Island-Api-Key. That header is the only API-key source for that request. X-Island-Base-URL is optional. AUTH_MODE=env still requires the signed X-Gateway-S2S header, then uses ISLAND_API_KEY and ISLAND_BASE_URL from the environment.
Request limits
- HTTP request bodies are capped at 256 KiB (262144 bytes). After the
X-Gateway-S2Scheck (and, inAUTH_MODE=gateway, theX-Island-Api-Keypresence check) passes, aContent-Lengthabove the cap returns 413 with a JSON-RPC error; bodies withoutContent-Lengthare capped by the MCP SDK transport. Unauthenticated requests still get 401 first. Tool inputs with more than 10000 array elements and object keys return a fixed error that does not repeat the tool name. tools/callarguments are capped at 10,000 elements (every array item and object key at any depth). Larger inputs return anisErrortool result and are never dispatched.
These limits address CVE-2026-111768 / GHSA-46jr-4wx8-v453 (memory exhaustion during validation) and GHSA-f897-62hf-6gxq (no request body / batch cap).
Tools
All four tools are classified isAdmin: true in the Conduit gateway - every resource group here is security/compliance-sensitive (who administrators are and what they changed, browser audit trail, detected compromised credentials, and the managed device inventory) even though every one of them is a plain read.
Admin Actions
island_list_admin_actions- list actions taken by administrators in the Island Management Console (policy changes, user/role changes) within a time window, offset-paginated.
Audit
island_list_audit_events- list browser/session audit events (navigation, file transfer, clipboard, print, policy-enforcement events) within a time window, offset-paginated. Island's own endpoint name for this istimeline.
Compromised Credential
island_list_compromised_credentials- list credentials Island has detected as compromised within a time window.POST-with-body on Island's own API (a filtered read, not a mutation - see Scope above). At least one third-party integrator's published collector config notes this endpoint's offset pagination as unreliable in practice (returning the same page regardless of offset); treatlimit/offsetas best-effort here for the same reason.
Device
island_list_devices- list devices running Island Browser under this account, optionally filtered to devices last seen at/after a given time, sortable by field.POST-with-body on Island's own API (a filtered read, not a mutation - see Scope above).
Excluded, by design
Hard-excluded (out of this connector's requested scope, not a technical block):
- The User resource (
GET /external/v1/userson Island's API) - Island documents this alongside the four implemented here; not requested for this connector. Can be added as a follow-up, after a deliberate scope decision.
Hard-excluded (write/provisioning - Island's broader Management API, never implemented):
- Policy create/read/update/delete, policy-element management, and browser-configuration-policy management. This connector's four tools cover only the read-only data endpoints documented for Admin Actions, Audit, Compromised Credential, and Device; it does not implement any endpoint that creates, updates, or deletes a policy, user, or browser configuration.
They can be added as a follow-up if there's demand, after a deliberate scope decision - not by default.
Development
Docker
The image listens on 0.0.0.0 inside the container (MCP_HTTP_HOST) and defaults to AUTH_MODE=gateway. Publish the port on loopback and pass a real S2S secret (openssl rand -hex 32). In gateway mode, Island credentials arrive on each request as headers; they are not read from the environment. Do not pass the placeholder your-s2s-secret — startup rejects known placeholders.
Compose refuses to start when CONDUIT_S2S_SECRET is unset. The gateway service sets AUTH_MODE=gateway, does not inject ISLAND_API_KEY or ISLAND_BASE_URL, and publishes 127.0.0.1:8080:8080:
Single-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses ISLAND_API_KEY:
Local HTTP without a secret is development-only. It binds 127.0.0.1 and logs a warning. A non-loopback MCP_HTTP_HOST makes startup exit:
License
Apache-2.0
來源:README.md,提交 bed5ed5
工具
0版本歷史
3- v1.0.3最新Oct 22, 2026
- v1.0.2Oct 17, 2026
- v1.0.1Sep 21, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。