Give an LM Studio model two ways to reach the web.
WebBrain Web Tools adds public URL reading to any tool-capable LM Studio chat. Attach the WebBrain extension and the same plugin can also delegate a goal to the Chromium profile where you are already signed in.
Install webbrain/web-tools from LM Studio Hub. Do not register @webbrain/mcp-server or use MCP port 17374 for this path; browser delegation from the LM Studio plugin uses port 17375.
What the model can reach
| Route | Best for | What it cannot do |
|---|---|---|
fetch_url / research_url | Public articles, documentation, APIs, JSON, text, and static HTML. | No browser cookies, JavaScript rendering, clicks, typing, or authenticated session. |
browser_task | Signed-in dashboards, webmail, client-rendered apps, and work requiring visible browser interaction. | Requires WebBrain on Chromium and the plugin bridge connection. |
Before you install
| Requirement | What to check |
|---|---|
| LM Studio | Open the current desktop app. Its bundled runtime runs installed plugins; a separate Node.js installation is not required for ordinary use. |
| Tool-capable model | Use a model and chat configuration that can call tools. A text-only model without tool use will not invoke the plugin. |
| Network access | The two HTTP tools contact the URL you request from the local plugin process. |
| Optional browser connection | For browser_task, install WebBrain in Chrome, Edge, Brave, Opera, or Vivaldi and keep port 17375 free. |
| Active WebBrain provider | Browser tasks still run through the provider configured inside the WebBrain extension. |
Install and enable WebBrain Web Tools
- Keep LM Studio open. Open the webbrain/web-tools Hub listing and choose Run in LM Studio. You can also open the deep link below on the same machine.
- Enable the plugin in the chat. Open the integrations or tools control beside the chat input and toggle webbrain/web-tools on.
- Select a tool-capable model. The plugin offers its tools to that chat; the model decides when to call them from your request.
- Try the public-web route first. Ask, “Read https://news.ycombinator.com and summarize the main themes in the current headlines.” The model should use
research_url.
lmstudio://plugin?owner=webbrain&name=web-toolsCLI installation
lms clone copies a Hub artifact into the current directory; it does not install that copy by itself. Enter the cloned directory and run the install form of lms dev:
lms clone webbrain/web-tools
cd web-tools
lms dev --installSee LM Studio’s current lms clone reference and lms dev --install reference for CLI behavior.
What the plugin gives the model
| Tool | Use it for | Browser extension? |
|---|---|---|
fetch_url | Fetch a known HTTP(S) URL. It handles JSON, HTML, plain text, request headers and bodies, and summarizes binary responses instead of inlining them. | No |
research_url | Extract readable article or documentation text while dropping common navigation chrome. | No |
browser_task | Delegate a natural-language Ask or Act goal to WebBrain in the signed-in browser. | Yes |
browser_status | Check the extension connection, or poll an existing run by runId. | Yes |
browser_respond | Forward the human’s answer to a run paused at needs_user_input. | Yes |
browser_abort | Stop a continuing run. Actions already completed are not undone. | Yes |
The HTTP tools keep the beginning, selected high-signal middle passages, and the ending when a result exceeds its return budget. A compacted result reports compacted: true and includes compaction metadata. Ask for a narrower page or raise maxChars when the omitted material matters.
Use public HTTP tools without a browser
Read a known article
Use research_url to read https://example.com/article and give me the author’s main claim, supporting evidence, and stated limitations.
Inspect an API response
Use fetch_url to read https://api.example.com/status. Return the HTTP status and the fields that indicate service health.
research_url is usually the better choice for prose. Use fetch_url when the exact response type, JSON structure, headers, method, or body matters.
These requests are anonymous and do not execute page JavaScript. If a result reports spaSuspected: true, or the page requires login, stop retrying the HTTP route and use browser_task after connecting the extension.
Connect the browser you already use
- Install WebBrain in a Chromium browser. The bridge works in Chrome, Edge, Brave, Opera, and Vivaldi. Firefox cannot host this connection.
- Enable webbrain/web-tools in LM Studio. The plugin opens its loopback listener when it initializes.
- Open WebBrain Settings. Go to General → Advanced → Cloud bridge.
- Set the plugin URL. Enter
ws://127.0.0.1:17375/extension, then enable Cloud bridge. - Verify the complete path. Ask the LM Studio model to call
browser_status. A connected result proves the plugin listener and extension handshake are present.
The extension has one outbound bridge socket. Port 17375 connects it to this plugin, port 17374 connects it to the MCP server, and port 17373 connects it to WebBrain Cloud. Changing the URL switches the destination; it does not combine them.
The LM Studio chat model decides to call browser_task and receives the result. The WebBrain extension performs the delegated browser run with the active provider configured in WebBrain. If page content must stay on-device, configure that WebBrain provider to use a local model too.
Read without changing the page
Use browser_task in Ask mode to read the account dashboard already open in my browser and list the five most recent alerts. Do not change anything.
Interact through the permission gate
Use browser_task in Act mode to open the draft already visible in my browser and change its title to Quarterly review. Stop before publishing.
Let continuing browser runs continue
browser_task waits for a result, but its timeout does not cancel work already running in the extension. Keep the returned runId and use the recovery tool that matches the state.
runningPoll with browser_statusneeds_user_inputAsk, then browser_respondcompletedResult is readyfailedRead the error and evidenceabortedStopped; earlier actions remain- Do not start a duplicate
browser_taskafter a timeout; poll the existing run. - Never invent an answer to a WebBrain clarification. Ask the human and forward their response verbatim.
browser_abortstops future steps. It cannot undo a submitted form, sent message, or other completed action.
Keep the two trust surfaces clear
- Public HTTP runs in the local plugin process.
fetch_urlcan send methods, headers, and bodies, so only request a mutation when you intend one. - Private network targets are blocked by default. Loopback, RFC1918, link-local, cloud-metadata, and common intranet hostnames are refused. Use
allowPrivate: trueonly for an explicit local-network task you understand. - Redirects are rechecked. The plugin validates each destination and strips credential-like headers when a redirect crosses origins.
- The browser listener stays on loopback. Never forward or proxy port
17375. The extension handshake identifies the client but is not shared-secret authentication; treat local software as trusted. - Ask mode is the default. Use Act only when the requested outcome requires visible browser interaction, and keep the browser where you can stop unexpected behavior.
- The LM Studio model sees tool results. A browser run also sends task context through the active provider configured inside WebBrain. Choose both model boundaries deliberately.
For the implementation-level details and residual DNS-rebinding limitation, read the plugin’s safety notes.
Troubleshooting by symptom
| Symptom | What it usually means | Fix |
|---|---|---|
| The tools do not appear | The plugin is not enabled for this chat, or the selected model cannot call tools. | Enable webbrain/web-tools beside the chat input and select a tool-capable model. |
browser_status reports disconnected | The plugin is available, but the WebBrain extension has not attached. | Use Chromium, enable Cloud bridge, and enter exactly ws://127.0.0.1:17375/extension. |
| The listener cannot start or reports an address conflict | Another plugin instance or process already owns port 17375. | Close the duplicate instance, then reload the plugin. Inspect first with lsof -nP -iTCP:17375 -sTCP:LISTEN. |
| A public page is empty | The page renders with JavaScript or hides content behind login. | If spaSuspected is true, connect the extension and use browser_task. |
| The task timed out but the browser is still moving | The wait budget ended without cancelling the WebBrain run. | Call browser_status with the returned runId, or browser_abort if you want it stopped. |
| Firefox never connects | Firefox has no offscreen-document bridge runtime. | Use a Chromium browser for browser tools. The two public HTTP tools remain usable without any extension. |
| MCP or WebBrain Cloud disconnected | The LM Studio URL replaced the extension’s one bridge destination. | Switch Settings back to port 17374 for MCP or 17373 for WebBrain Cloud when finished. |
Bridge environment configuration
| Variable | Default | Meaning |
|---|---|---|
WEBBRAIN_BRIDGE_PORT | 17375 | Loopback port the extension connects to. |
WEBBRAIN_BRIDGE_PATH | /extension | WebSocket path; it must match the URL in WebBrain Settings. |
WEBBRAIN_COMMAND_TIMEOUT_MS | 30000 | Budget for one bridge command and reply. |
If you change the port or path for a locally developed plugin, update the Cloud bridge URL in WebBrain Settings to match. Most users should keep the defaults.
