Diwall MCP

English
Download v0.0.1

Install and check

Install the server from a package for Debian, Ubuntu, Fedora, openSUSE Leap or Arch Linux, or from a clone of the repository, then run the tests that need no browser and the smoke test.

Before anything else

The server does not work without an encrypted directory. The browser it attaches to keeps your signed-in sessions in its profile, and they must not sit on the disk in clear. After the installation, the first command is mcp-server-diwall-browser-setup (from a clone, .venv/bin/python -m mcp_server_diwall_browser.setup), which you run yourself in a terminal: it reads your machine and ends on the next command to type.

Two ways to go on. A trial, mcp-server-diwall-browser-setup create --temporary, makes a volume in memory: closing it, stopping the machine or ending your session destroys it, and with it the sessions of the sites you opened, the audit journal and the captures. A durable volume, mcp-server-diwall-browser-setup create, keeps them. In both, you type the password yourself at the prompt of gocryptfs, and you sign in to your sites yourself in the browser the assistant starts. After adding the server to your MCP client, restart the client: a session already open does not see the new server. The steps are in the encrypted directory.

What you need

  • Linux. The operator guide is written for Debian 13, where the project’s tests ran.
  • Python 3.12 or later.
  • Google Chrome, Chromium or Brave.
  • fuse3 and gocryptfs for the encrypted directory, kdialog or zenity for the confirmation window, git, and ss (package iproute2).

On Debian 13 and Ubuntu 24.04, the system packages (command replayed in a clean container of each system):

sudo apt install python3-venv fuse3 gocryptfs kdialog iproute2 git

With the package, python3-venv, fuse3, gocryptfs and kdialog come with it: this line is mostly for the clone route.

Outside KDE, zenity can stand for kdialog.

The browser is installed separately. On Debian 13, it is the package chromium (155.0.8059.79):

sudo apt install chromium

On Ubuntu 24.04 there is no chromium package (chromium-browser only installs a Snap launcher): install Google Chrome from its .deb file.

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb

Install

A 64-bit ARM machine takes the same .deb. On a Raspberry Pi 4 Model B under Raspberry Pi OS (Debian 13, aarch64) with Chromium 155, the installation, the first launch, the smoke test and the complete suite (2694 tests passed, 1 skipped) were run; the operator guide, section 1 and section 12, says what differs from a PC.

From a package

Download the package of your system and install it from the folder that holds it. The sum of each file is in SHA256SUMS: sha256sum -c --ignore-missing SHA256SUMS.

The package pulls in Python, fuse3, gocryptfs and kdialog or zenity by itself, and installs the dependencies of the server in a virtual environment of its own, which needs a network connection. You install the browser. Installation, the start of the server by an ordinary account and removal are validated in containers on these systems. A container shows neither the confirmation window, nor the mounting of the encrypted directory, nor a browser. Debian 12 and Ubuntu 22.04 are not supported: their Python is older than 3.12. The package adds the commands mcp-server-diwall-browser, mcp-server-diwall-browser-credential-import and mcp-server-diwall-browser-setup, and the manual page man mcp-server-diwall-browser. It ends by printing the first command to type, mcp-server-diwall-browser-setup.

From a clone of the repository

A clone of the repository installs the server with its test tools. ~ is your home directory.

git clone https://github.com/RonanDavalan/mcp-server-diwall-browser.git \
  ~/mcp-server-diwall-browser
cd ~/mcp-server-diwall-browser
python3 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"

python3 --version must print 3.12 or later; otherwise name the interpreter, python3.12 or python3.13, in the third command. The versions the project tested are pinned in requirements.lock.

Check

Two commands, from the clone. The package ships neither the tests nor scripts/smoke_test.py; with the package, the check is mcp-server-diwall-browser-setup, with no argument, which reads the machine and changes nothing. Neither command below touches your browser, your encrypted directory or your operator profile.

.venv/bin/python -m pytest -q -m "not browser"
.venv/bin/python scripts/smoke_test.py

The first runs every test that needs no browser. On the code of version 0.0.1, with Python 3.12.11:

2100 passed, 1 skipped, 589 deselected, 1 warning in 105.36s (0:01:45)

The skipped test changes the owner of a file, which needs root. The second starts the server against a browser of its own, on a blank temporary profile, and observes the demo page of the repository. The same day, with Google Chrome:

browser executable: google-chrome (Chrome/155.0.8059.84)
server                        0.0.1, configured: True
browser                       Chrome/155.0.8059.84, attached: True
encrypted directory           closed_or_absent (encrypted_dir_undetermined), action expected: operator_opens_directory
tab origin                    http://127.0.0.1:38565
marks                         4
image                         yes
tree lines                    10
redacted_fields               1
password value in the result  absent
elements                      1 textbox "User name", 2 textbox "Password", 3 button "Sign in", 4 link "Help"
result: conforming

The port of tab origin changes at every run. The encrypted directory reads closed_or_absent on purpose: the smoke test gives the server a directory that is not mounted. The command returns 0 when the result is as expected, 1 when a line differs (it ends with <- not as expected), and 3 when it finds no browser on your PATH. --save-image ~/observe.png writes the image the model received.

With a browser on your PATH, .venv/bin/python -m pytest -q also runs the 589 browser tests, each on a blank temporary profile.

Next: start the browser on its own profile, step 2. Every option of this step is in section 2 of the operator guide.