Contributing¶
Contributions are welcome! This guide walks you through forking the repository, setting up a local development environment, and connecting your local build to an MCP client.
Step 1: Fork and clone¶
- Fork the repository on GitHub.
- Clone your fork:
- Create a feature branch:
Step 2: Install¶
Install the environment:
Run the post-install step (editable install plus Chromium setup):
Find the pls path:
macOS / Linux:
Windows:
Note
Prefix commands with pixi run (e.g. pixi run pytest) to use the pixi env without
activating it. pixi run postinstall already installs Chromium automatically.
Create and activate a virtual environment.
macOS / Linux:
Windows (PowerShell):
Windows (Command Prompt):
Install the package in editable mode:
Install the browser binary needed by the screenshot MCP tool:
Find the pls path:
macOS / Linux:
Windows:
Note
Re-activate the venv in every new terminal (see above).
playwright install chromium is a one-time step that downloads the browser binary
(~150 MB) required by the screenshot MCP tool.
Step 3: Install pre-commit hooks¶
Step 4: Connect to your MCP client¶
Testing your local checkout vs the released PyPI package¶
pls install <client> registers whichever pls ran the command, so how you invoke it
decides which build your client ends up using.
To test your local changes (the normal case while contributing), run the command
through pixi so it always resolves to the editable copy of the checkout you are editing,
not any other pls that might also be on your machine:
Check it picked the right one:
pixi run pls --version
# 0.1.0a5.post1.dev52+gda3756c94 -- has a dev/git-hash suffix: editable, tracks your checkout
To test the released PyPI package instead (comparing behaviour, or confirming a bug
only shows up in a release, not your branch), install it separately and run its own
pls install:
Registering one replaces the other
Both point the same client at whichever pls you last ran install with, so
running the PyPI one after the pixi one switches Claude Desktop (or Cursor, etc.)
over to the released build, and vice versa. To register a specific build without
relying on which pls happens to run the command, pass it explicitly:
pls install claude --command /path/to/pls.
Once you've picked the build to register, add it to your client:
Run it from the project root: VS Code reads .vscode/mcp.json per project, so this
writes it relative to your current directory.
To set it up by hand instead, add to .vscode/mcp.json (create if it doesn't exist):
{
"servers": {
"panel-live-server": {
"type": "stdio",
"command": "/path/to/pls",
"args": ["mcp"]
}
}
}
Use your absolute path
Replace "command": "/path/to/pls" with the path printed above,
e.g. "command": "/path/to/panel-live-server/.venv/bin/pls"
To set it up by hand instead, add to ~/.cursor/mcp.json:
Use your absolute path
Replace "command": "/path/to/pls" with the path printed above,
e.g. "command": "/path/to/panel-live-server/.venv/bin/pls"
Open Cursor Settings → MCP and verify the green dot. Use Agent mode in chat.
To set it up by hand instead, edit the config file for your OS:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Use your absolute path
Replace "command": "/path/to/pls" with the path printed above,
e.g. "command": "/path/to/panel-live-server/.venv/bin/pls"
Restart Claude Desktop.
Or run the underlying command yourself:
Use your absolute path
Replace /path/to/pls with the path printed above,
e.g. claude mcp add panel-live-server -- /path/to/panel-live-server/.venv/bin/pls mcp
If the server is already registered, remove it first with
claude mcp remove panel-live-server.
claude.ai requires HTTP transport and a public URL. You can use any tunneling service (ngrok, Cloudflare, localhost.run, etc.); this example uses Cloudflare.
Terminal 1: start the MCP server:
Use your absolute path
Replace /path/to/pls with the path printed above,
e.g. /path/to/panel-live-server/.venv/bin/pls mcp --transport http --port 8001
Terminal 2: tunnel for the MCP server:
Terminal 3: tunnel for the Panel server:
Stop Terminal 1, then set the Panel tunnel URL.
macOS / Linux:
Windows (PowerShell):
And restart:
Then go to claude.ai → Settings → Connectors → Add custom connector and enter
<url-from-terminal-2>/mcp as the URL.
Step 5: Make changes and run tests¶
Step 6: Submit a pull request¶
- Commit your changes:
- Push to your fork:
- Open a pull request against the
mainbranch on GitHub.
Please ensure your code passes all tests and linting before submitting.