Tutorial: Installation¶
In this tutorial you'll install Panel Live Server so that the pls command is available in your
terminal. By the end, pls --version will print the installed version.
What You'll Need¶
Install Panel Live Server¶
Initialize a project:
Install:
Install the browser the screenshot tool needs:
Find the pls path:
macOS / Linux:
Windows:
Install:
Install the browser the screenshot tool needs:
Find the pls path:
macOS / Linux:
Windows:
Create and activate a virtual environment.
macOS / Linux:
Windows (PowerShell):
Windows (Command Prompt):
Install:
Install the browser the screenshot tool needs:
Find the pls path:
macOS / Linux:
Windows:
The core install ships the HoloViz visualization stack — hvplot, holoviews, panel, and bokeh.
The [pydata] extra adds the wider PyData ecosystem on top:
matplotlib · plotly · seaborn · altair · polars · duckdb · datashader · geoviews · plotnine · pyarrow · scikit-learn · and more
Only need the core server?
Install without extras if you only want to serve your own code and manage packages yourself:
Verify the installation¶
You should see the installed version printed. If the command is not found, ensure your uv tools
directory is on your PATH, run uv tool update-shell and restart your terminal.
Connect to your MCP client¶
From the project you want it in:
VS Code reads MCP servers per project, so this writes .vscode/mcp.json in the
directory you run it from, filling in the absolute path to pls for you.
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 by which pls above,
e.g. "command": "/home/user/.local/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 by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Open Cursor Settings → MCP and verify the green dot. Use Agent mode in chat.
This writes the entry below into the config file for your OS, filling in the
absolute path to the pls you just installed. Other servers already configured
there are left alone, as are any flags an existing panel-live-server entry
passed after mcp (a --prompts file, say), so re-running it is safe.
To set the config up by hand instead, edit the 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 by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Restart Claude Desktop.
Enable the connector in Cowork
To use the show tool from Cowork, open Customize → Connectors →
panel-live-server and set its permission to Always Allow (runs
without prompting) or Needs approval (asks before each call). If the
connector is left disabled, the tool won't be available in Cowork.
Claude Code keeps its own MCP registry rather than a config file to edit, so this
runs claude mcp add for you with the absolute path filled in. To run it yourself:
Use your absolute path
Replace /path/to/pls with the path printed by which pls above,
e.g. claude mcp add panel-live-server -- /home/user/.local/bin/pls mcp
If the server is already registered, remove it first with
claude mcp remove panel-live-server.
That covers the Windsurf editor. If you run Cascade as a plugin inside another IDE, it reads a different file, so point the command at it:
To set it up by hand instead, add to ~/.codeium/windsurf/mcp_config.json
(editor) or ~/.codeium/mcp_config.json (plugin):
Use your absolute path
Replace "command": "/path/to/pls" with the path printed by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Open the MCP servers panel (hammer icon) in Cascade and confirm it's running.
Cline stores this separately from .vscode/mcp.json, so running pls install
vscode does not configure Cline. One file serves every editor Cline runs in,
VS Code, Insiders, Cursor, and VSCodium alike.
To set it up by hand instead, add to
~/.cline/data/settings/cline_mcp_settings.json:
Use your absolute path
Replace "command": "/path/to/pls" with the path printed by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Open Cline's MCP Servers panel and confirm panel-live-server is connected.
This sets up Junie. JetBrains AI Assistant is a separate product with no
config file to write: add the server there from Settings → Tools → AI Assistant
→ Model Context Protocol, using the same command and args shown below.
To set Junie up by hand instead, add to ~/.junie/mcp/mcp.json:
Use your absolute path
Replace "command": "/path/to/pls" with the path printed by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Restart the IDE, or reopen Junie's MCP settings, for the change to take effect.
This writes into ~/.gemini/settings.json, leaving every other setting there
(theme, auth, other servers) untouched. To set it up by hand instead, add:
Use your absolute path
Replace "command": "/path/to/pls" with the path printed by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Restart the Gemini CLI for the change to take effect.
To set it up by hand instead, add to ~/.gemini/antigravity/mcp_config.json:
Use your absolute path
Replace "command": "/path/to/pls" with the path printed by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Two possible locations
Antigravity's own docs give this path as ~/.gemini/config/mcp_config.json,
but the shipping build reads ~/.gemini/antigravity/mcp_config.json. The
command writes whichever one your install already uses, so prefer it over
editing by hand if you are unsure.
Open Manage MCP Servers in Antigravity and confirm it's connected.
To set it up by hand instead, add to ~/.kiro/settings/mcp.json:
Use your absolute path
Replace "command": "/path/to/pls" with the path printed by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Reload Kiro, or open the MCP panel, for the change to take effect.
This is the standalone copilot CLI, not VS Code's Copilot Chat (which already
reads .vscode/mcp.json, see the VS Code tab). To set it up by hand instead, add
to ~/.copilot/mcp-config.json:
{
"mcpServers": {
"panel-live-server": {
"type": "local",
"command": "/path/to/pls",
"args": ["mcp"],
"tools": ["*"]
}
}
}
Use your absolute path
Replace "command": "/path/to/pls" with the path printed by which pls above,
e.g. "command": "/home/user/.local/bin/pls"
Run /mcp show in the Copilot CLI to confirm panel-live-server is connected.
Kilo Code packs the command and its arguments into one array under a mcp key,
rather than separate command/args fields under mcpServers. To set it up by
hand instead, add to ~/.config/kilo/kilo.jsonc:
{
"mcp": {
"panel-live-server": {
"type": "local",
"command": ["/path/to/pls", "mcp"],
"enabled": true
}
}
}
Use your absolute path
Replace /path/to/pls with the path printed by which pls above,
e.g. "command": ["/home/user/.local/bin/pls", "mcp"]
Reload the window for the change to take effect.
Codex uses TOML, not JSON. To set it up by hand instead, add to ~/.codex/config.toml:
Use your absolute path
Replace /path/to/pls with the path printed by which pls above,
e.g. command = "/home/user/.local/bin/pls"
Restart the Codex CLI for the change to take effect.
Vibe also uses TOML, and lists servers as an array of tables identified by a
name field rather than keyed by their own table name. To set it up by hand
instead, add to ~/.vibe/config.toml:
[[mcp_servers]]
name = "panel-live-server"
transport = "stdio"
command = "/path/to/pls"
args = ["mcp"]
Use your absolute path
Replace /path/to/pls with the path printed by which pls above,
e.g. command = "/home/user/.local/bin/pls"
Restart Vibe for the change to take effect.
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 by which pls above,
e.g. /home/user/.local/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.
Once connected, ask your AI: "Show me a scatter plot of this data using the show tool."
Without an AI assistant: use the REST API or the browser UI directly.
Add packages to the server environment¶
Panel Live Server executes your Python snippets using the packages installed in the environment you installed it into. It inherits that environment rather than defining its own, so you are free to add or upgrade anything you need there. To add a package:
For example, to add prophet:
You can chain multiple --with flags:
Activate the environment you installed pls into, then install as usual:
For example, to add prophet:
No server restart is needed, the package is available immediately the next time the server starts.
What You've Learned¶
- Install Panel Live Server as a uv tool with the
[pydata]extras - Verify the installation with
pls --version - Add extra packages to the server environment with
--with
Next Steps¶
- Use the standalone server: create, view, and manage visualizations
- Use the MCP server: enable AI assistants to render visualizations in your IDE