Control ParaView through arbitrary Python code
Connect ParaView to LLM assistants through the Model Context Protocol.
The Python server is built with FastMCP 3.x. Support for the
2026-07-28 MCP specification is planned once FastMCP 4 reaches a stable release.
paraview-mcp-server has two runtime parts:
First set up the ParaView plugin. Then add the Python MCP server to Claude Code in one command:
claude mcp add paraview -- uvx paraview-mcp-server
Open Tools > ParaView MCP in ParaView, start the bridge, and connect from Claude Code.
Download a pre-built plugin binary from the latest GitHub Release. Releases provide this matrix:
| Platform | Architecture | ParaView versions | Package |
|---|---|---|---|
| Linux | x86_64 | 5.13.3, 6.0.1, 6.1.1 | .tar.gz |
| macOS | arm64 (Apple Silicon) | 5.13.3, 6.0.1, 6.1.1 | .dmg |
| Windows | x64 | 5.13.3, 6.0.1, 6.1.1 | .zip |
Choose the package that names your exact ParaView version and platform. Download its
adjacent .sha256 file, verify the package, then open or extract it and follow the
included INSTALL.md. Pull requests also produce corresponding platform binaries as
short-lived GitHub Actions artifacts; GitHub Releases are the permanent distribution
channel.
macOS release images are Developer ID-signed, notarized by Apple, and include a stapled
notarization ticket. Open the .dmg, copy the contained plugin directory to a persistent
location, and load ParaViewMCP.so from that copied directory. Pull-request artifacts are
unsigned test builds and remain .tar.gz files.
Alternatively, build the plugin from source against a ParaView 5.13 or newer SDK. See CONTRIBUTING.md for full build instructions. Binary compatibility is release-series specific, so use a plugin built for your ParaView major.minor version.
Once installed:
ParaViewMCP.so (Linux/macOS) or ParaViewMCP.dll (Windows) from the plugin directory.The ParaView MCP panel shows the connection status and execution history. Non-loopback binds require an auth token.
claude mcp add paraview -- uvx paraview-mcp-server
Add to your claude_desktop_config.json:
{
"mcpServers": {
"paraview": {
"command": "uvx",
"args": ["paraview-mcp-server"]
}
}
}
Configure a local stdio MCP server with uvx as the command and
paraview-mcp-server as its only argument:
{
"mcpServers": {
"paraview": {
"command": "uvx",
"args": ["paraview-mcp-server"]
}
}
}
Consult your client's documentation for the location and exact format of its MCP server configuration.
The server connects to the ParaView plugin using these environment variables:
| Variable | Default | Required | Description |
|---|---|---|---|
PARAVIEW_HOST | 127.0.0.1 | No | Host where the ParaView plugin is listening |
PARAVIEW_PORT | 9877 | No | TCP port for the plugin bridge |
PARAVIEW_AUTH_TOKEN | — | Non-loopback only | Authentication token (must match the plugin setting) |
PARAVIEW_CONNECT_TIMEOUT_SECONDS | 30 | No | Deadline for opening the connection and completing the hello |
PARAVIEW_COMMAND_TIMEOUT_SECONDS | — | No | Optional deadline for receiving a command result |
Defaults work for a standard local setup. Override these when connecting to ParaView on a remote machine or non-standard port:
{
"mcpServers": {
"paraview": {
"command": "uvx",
"args": ["paraview-mcp-server"],
"env": {
"PARAVIEW_HOST": "192.168.1.10",
"PARAVIEW_PORT": "9877",
"PARAVIEW_AUTH_TOKEN": "your-token"
}
}
}
}
| Tool | Description |
|---|---|
execute_paraview_code(code) | Execute Python code inside the active ParaView session |
get_pipeline_info() | Return a JSON snapshot of the current pipeline |
get_screenshot(width, height) | Capture the active render view as a PNG image |
One command runs at a time, up to three wait in FIFO order, and further calls report busy. This prevents concurrent mutations of ParaView's shared state.
Execution results include output, diagnostics, and separate request and Python statuses. See execution and state for cancellation, timeouts, and recovery behavior.
This project follows the approach of Blender-MCP and Slicer-MCP, both of which give LLMs direct code execution inside their respective application runtimes.
The existing ParaView_MCP implementation1 takes a different approach, exposing a fixed set of high-level tools without access to the underlying Python runtime, which limits flexibility for custom workflows. The major differences are:
execute_paraview_code tool that runs arbitrary Python inside the
ParaView session. The plugin records each execution and, when ParaView can capture a
pipeline snapshot, lets the user restore the state from immediately before that
execution. This makes generated scripts easier to inspect, reuse, and adapt for tasks
such as batch processing.pvserver and the ParaView client.
That synchronization mechanism is deprecated in recent ParaView versions and can
cause incorrect application views and general stability issues. This project instead
runs a plugin inside the interactive ParaView process and exposes a TCP bridge,
avoiding the pvserver/client synchronization path entirely.See CONTRIBUTING.md for build instructions, development setup, and pull request guidelines.
MIT — see THIRD-PARTY-NOTICES.txt for dependency licenses.
S. Liu, H. Miao, and P.-T. Bremer, "Paraview-MCP: Autonomous Visualization Agents with Direct Tool Use," in Proc. IEEE VIS 2025 Short Papers, IEEE, 2025. ↩
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx paraview-mcp-serverMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-failed33-paraview-mcp-server": {
"command": "uvx",
"args": [
"paraview-mcp-server"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceparaview-mcp-serverpypiParaView MCP Server works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.