Architecture
Two layers and one loop: the model judges, the server observes, acts and refuses, the browser holds your sessions.
Two layers
the language model, through its MCP client judges, decides, explains to you │ 14 tools over standard input and output mcp-server-diwall-browser observes, acts, refuses │ Chrome DevTools Protocol, on 127.0.0.1 only your browser, on its dedicated profile holds your signed-in sessions beside the server the encrypted directory credentials in; journal, captures, downloads out the confirmation window kdialog or zenity, answered by you
The model brings the judgement. The server brings what the model cannot have on its own: the image and the tree you would see, gestures in your session, and refusals that do not depend on what the model concludes.
Why the server works in your browser instead of starting one is explained in Why the server attaches to your browser.
One turn of the loop
open_tabornavigateloads a page in a tab the server opened. The server never reads or drives a tab you opened yourself.observetakes a snapshot, numbers the elements that can be acted on, draws the marks and the masks on the image, and returns the image, the tree, the elements and asnapshot_id(Perception).- The model names a mark of that snapshot in
click,fill,select_optionorpress_key. - The server counts the action against the ceilings, checks that the node behind the mark is the one observed and that the page is on a site of your profile, and decides whether the action is locked. A locked action is written to the journal and captured, then waits for your answer; the server checks the node again, makes the gesture, waits for the load it started, and captures again.
- The result leaves through one exit point, which withholds sensitive values
and keeps what the server states (
server) apart from what the page wrote (page_content). The journal gets one line.
In the code
In version 0.0.1, the package has 22 modules and one file per tool under
tools/. Each security check lives in one module only, and a module that needs
it calls that one; the tests check this, and that no tool bypasses the exit
point. The architecture document
of the repository gives the role of each of them.