{
  "markdown": "<p align=\"center\">\n  <img src=\"Documentation/Images/paraview-mcp-logo.png\" width=\"200\" alt=\"ParaView MCP\">\n</p>\n\n# ParaView MCP\n\n[![CI](https://github.com/failed33/paraview-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/failed33/paraview-mcp/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/paraview-mcp-server)](https://pypi.org/project/paraview-mcp-server/)\n[![CodeQL](https://github.com/failed33/paraview-mcp/actions/workflows/codeql.yml/badge.svg)](https://github.com/failed33/paraview-mcp/actions/workflows/codeql.yml)\n[![codecov](https://codecov.io/gh/failed33/paraview-mcp/graph/badge.svg?token=imlWhPGAgh)](https://codecov.io/gh/failed33/paraview-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nConnect [ParaView](https://www.paraview.org/) to LLM assistants through the [Model Context Protocol](https://modelcontextprotocol.io/).\n\nThe Python server is built with [FastMCP](https://gofastmcp.com/) 3.x. Support for the\n`2026-07-28` MCP specification is planned once FastMCP 4 reaches a stable release.\n\n`paraview-mcp-server` has two runtime parts:\n\n- a **ParaView plugin** (C++/Qt) that exposes a TCP bridge inside the ParaView GUI\n- a **Python MCP server** that connects to the plugin and serves tools to any MCP client\n\n## Prerequisites\n\n- [ParaView ≥ 5.13](https://www.paraview.org/download/). Pre-built plugins are\n  available for the exact versions and platforms listed below; other ParaView releases\n  require a source build against the matching SDK.\n- [uv](https://docs.astral.sh/uv/)\n\n## Quick Start\n\nFirst [set up the ParaView plugin](#set-up-the-paraview-plugin). Then add the Python\nMCP server to Claude Code in one command:\n\n```bash\nclaude mcp add paraview -- uvx paraview-mcp-server\n```\n\nOpen **Tools > ParaView MCP** in ParaView, start the bridge, and connect from Claude Code.\n\n## Set Up the ParaView Plugin\n\nDownload a pre-built plugin binary from the [latest GitHub Release](https://github.com/failed33/paraview-mcp/releases/latest). Releases provide this matrix:\n\n| Platform | Architecture          | ParaView versions    | Package   |\n| -------- | --------------------- | -------------------- | --------- |\n| Linux    | x86_64                | 5.13.3, 6.0.1, 6.1.1 | `.tar.gz` |\n| macOS    | arm64 (Apple Silicon) | 5.13.3, 6.0.1, 6.1.1 | `.dmg`    |\n| Windows  | x64                   | 5.13.3, 6.0.1, 6.1.1 | `.zip`    |\n\nChoose the package that names your exact ParaView version and platform. Download its\nadjacent `.sha256` file, verify the package, then open or extract it and follow the\nincluded `INSTALL.md`. Pull requests also produce corresponding platform binaries as\nshort-lived GitHub Actions artifacts; GitHub Releases are the permanent distribution\nchannel.\n\nmacOS release images are Developer ID-signed, notarized by Apple, and include a stapled\nnotarization ticket. Open the `.dmg`, copy the contained plugin directory to a persistent\nlocation, and load `ParaViewMCP.so` from that copied directory. Pull-request artifacts are\nunsigned test builds and remain `.tar.gz` files.\n\nAlternatively, build the plugin from source against a ParaView 5.13 or newer SDK. See\n[CONTRIBUTING.md](CONTRIBUTING.md) for full build instructions. Binary compatibility is\nrelease-series specific, so use a plugin built for your ParaView major.minor version.\n\nOnce installed:\n\n1. Open **Tools > Manage Plugins** in ParaView.\n2. Click **Load New...** and select `ParaViewMCP.so` (Linux/macOS) or `ParaViewMCP.dll` (Windows) from the plugin directory.\n3. Enable **Auto Load**.\n4. Open **Tools > ParaView MCP**.\n5. Click **Start Server**.\n\nThe ParaView MCP panel shows the connection status and execution history. Non-loopback\nbinds require an auth token.\n\n## Configure Your MCP Client\n\n### Claude Code (CLI)\n\n```bash\nclaude mcp add paraview -- uvx paraview-mcp-server\n```\n\n### Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"paraview\": {\n      \"command\": \"uvx\",\n      \"args\": [\"paraview-mcp-server\"]\n    }\n  }\n}\n```\n\n### Other MCP Clients\n\nConfigure a local stdio MCP server with `uvx` as the command and\n`paraview-mcp-server` as its only argument:\n\n```json\n{\n  \"mcpServers\": {\n    \"paraview\": {\n      \"command\": \"uvx\",\n      \"args\": [\"paraview-mcp-server\"]\n    }\n  }\n}\n```\n\nConsult your client's documentation for the location and exact format of its MCP server\nconfiguration.\n\n## Configuration\n\nThe server connects to the ParaView plugin using these environment variables:\n\n| Variable                           | Default     | Required          | Description                                                    |\n| ---------------------------------- | ----------- | ----------------- | -------------------------------------------------------------- |\n| `PARAVIEW_HOST`                    | `127.0.0.1` | No                | Host where the ParaView plugin is listening                    |\n| `PARAVIEW_PORT`                    | `9877`      | No                | TCP port for the plugin bridge                                 |\n| `PARAVIEW_AUTH_TOKEN`              | —           | Non-loopback only | Authentication token (must match the plugin setting)           |\n| `PARAVIEW_CONNECT_TIMEOUT_SECONDS` | `30`        | No                | Deadline for opening the connection and completing the hello   |\n| `PARAVIEW_COMMAND_TIMEOUT_SECONDS` | —           | No                | Optional deadline for receiving a command result               |\n\nDefaults work for a standard local setup. Override these when connecting to ParaView on a remote machine or non-standard port:\n\n```json\n{\n  \"mcpServers\": {\n    \"paraview\": {\n      \"command\": \"uvx\",\n      \"args\": [\"paraview-mcp-server\"],\n      \"env\": {\n        \"PARAVIEW_HOST\": \"192.168.1.10\",\n        \"PARAVIEW_PORT\": \"9877\",\n        \"PARAVIEW_AUTH_TOKEN\": \"your-token\"\n      }\n    }\n  }\n}\n```\n\n## Available Tools\n\n| Tool                            | Description                                            |\n| ------------------------------- | ------------------------------------------------------ |\n| `execute_paraview_code(code)`   | Execute Python code inside the active ParaView session |\n| `get_pipeline_info()`           | Return a JSON snapshot of the current pipeline         |\n| `get_screenshot(width, height)` | Capture the active render view as a PNG image          |\n\nParaView commands are serialized because the live ParaView session is not safe to\nmutate concurrently. One command runs while up to three additional commands wait in\nFIFO order. A cancelled waiting call is removed without reaching ParaView. Further\n`execute_paraview_code` calls return `request_status: \"busy\"` with\n`execution_status: \"not_started\"`; the other tools report a `PARAVIEW_BUSY` tool error.\n\n`execute_paraview_code` reports request delivery separately from Python execution. A\ncompleted request can therefore return `execution_status: \"failed\"` together with\nPython stderr, a traceback, ParaView/VTK diagnostics, and execution duration. Command\ndiagnostics are process-global events observed while the command runs, which the\n`paraview_diagnostics_scope` field states explicitly. Command results have no deadline\nby default so long computations can finish. If\n`PARAVIEW_COMMAND_TIMEOUT_SECONDS` is set and expires, the result is\n`request_status: \"outcome_unknown\"`; do not retry the command automatically because it\nmay already have modified the ParaView session. The server then rejects queued and\nfuture commands with `request_status: \"recovery_required\"` until the MCP server is\nrestarted. This prevents new work from overlapping the still-running command or using a\nsilently reset session. The original `success` field remains available for existing\nclients and is true only for `completed` and `succeeded` results.\n\n## Design and Differences from ParaView_MCP\n\nThis project follows the approach of [Blender-MCP](https://github.com/ahujasid/blender-mcp) and [Slicer-MCP](https://github.com/pieper/SlicerMCP), both of which give LLMs direct code execution inside their respective application runtimes.\n\nThe existing [ParaView_MCP](https://github.com/llnl/paraview_mcp) implementation[^1] 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:\n\n1. We provide an `execute_paraview_code` tool that runs arbitrary Python inside the\n   ParaView session. The plugin records each execution and, when ParaView can capture a\n   pipeline snapshot, lets the user restore the state from immediately before that\n   execution. This makes generated scripts easier to inspect, reuse, and adapt for tasks\n   such as batch processing.\n2. Architecturally, [ParaView_MCP's own disclaimer](https://github.com/LLNL/paraview_mcp/blob/30242a0a6768eaf4192529bb78096cfee3292c73/README.md#disclaimer)\n   states that it relies on synchronization between `pvserver` and the ParaView client.\n   That synchronization mechanism is deprecated in recent ParaView versions and can\n   cause incorrect application views and general stability issues. This project instead\n   runs a plugin inside the interactive ParaView process and exposes a TCP bridge,\n   avoiding the `pvserver`/client synchronization path entirely.\n\n[^1]: 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.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for build instructions, development setup, and pull request guidelines.\n\n## License\n\n[MIT](LICENSE) — see [THIRD-PARTY-NOTICES.txt](THIRD-PARTY-NOTICES.txt) for dependency licenses.\n",
  "bytes": 9690,
  "sha": "25476c34cb86cd13f8ccdd61c4f7581c4b5d616cd1e674bfa773ca7d77d60145",
  "repo_slug": "failed33/paraview-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_failed33_paraview_mcp_server_aacd1e44/readme"
}