Metadata-Version: 2.5
Name: vmaf-mcp
Version: 1.0.0-rc.3
Summary: MCP server exposing VMAF scoring, model listing, and benchmark runs via JSON-RPC.
Project-URL: Homepage, https://github.com/VMAFx/vmafx
Project-URL: Repository, https://github.com/VMAFx/vmafx
Project-URL: Documentation, https://vmafx.github.io/vmafx/mcp/
Project-URL: Issues, https://github.com/VMAFx/vmafx/issues
Project-URL: Changelog, https://github.com/VMAFx/vmafx/blob/master/CHANGELOG.md
Author-email: Lusoris <lusoris@pm.me>
License-Expression: EUPL-1.2 AND BSD-2-Clause-Patent
License-File: LICENSES/BSD-2-Clause-Patent.txt
License-File: LICENSES/EUPL-1.2.txt
Requires-Python: >=3.10
Requires-Dist: anyio>=4.15.1
Requires-Dist: mcp>=2.3.0
Requires-Dist: pydantic>=2.13.5
Provides-Extra: dev
Requires-Dist: mypy>=2.4.0; extra == 'dev'
Requires-Dist: numpy>=2.5.3; extra == 'dev'
Requires-Dist: onnx<1.23.0,>=1.22.0; extra == 'dev'
Requires-Dist: onnxruntime>=1.30.0; extra == 'dev'
Requires-Dist: pandas>=3.0.6; extra == 'dev'
Requires-Dist: prometheus-client>=0.26.0; extra == 'dev'
Requires-Dist: pyarrow>=25.0.1; extra == 'dev'
Requires-Dist: pytest-aiohttp>=1.1.1; extra == 'dev'
Requires-Dist: pytest-asyncio>=1.4.0; extra == 'dev'
Requires-Dist: pytest>=9.1.1; extra == 'dev'
Requires-Dist: ruff>=0.16.10; extra == 'dev'
Requires-Dist: scipy>=1.18.1; extra == 'dev'
Provides-Extra: eval
Requires-Dist: numpy>=2.5.3; extra == 'eval'
Requires-Dist: onnxruntime>=1.30.0; extra == 'eval'
Requires-Dist: pandas>=3.0.6; extra == 'eval'
Requires-Dist: pyarrow>=25.0.1; extra == 'eval'
Requires-Dist: scipy>=1.18.1; extra == 'eval'
Provides-Extra: http
Requires-Dist: aiohttp>=3.14.4; extra == 'http'
Requires-Dist: prometheus-client>=0.26.0; extra == 'http'
Provides-Extra: vlm
Requires-Dist: onnxruntime-genai>=0.17.1; extra == 'vlm'
Description-Content-Type: text/markdown

<!-- markdownlint-disable MD060 -->
# vmaf-mcp

> **DEPRECATED (ADR-1229).** The MCP server is now the Go binary `vmafx-mcp`
> (`cmd/vmafx-mcp/`), installed at `/usr/local/bin/vmafx-mcp` in every container
> image. Attach with `docker exec -i vmaf-dev-mcp vmafx-mcp`. This Python
> package serves 19 tools (the Go server adds 5 control-plane tools) and is
> retained for one release as a reference implementation; it is no longer
> installed by `dev/Containerfile` and a follow-up removes it. Do not add
> tools here — add them to `cmd/vmafx-mcp/`.
>
> **Console script names.** This wheel installs `vmaf-mcp`. It also installs a
> deprecated `vmafx-mcp` alias for one release: that name belongs to the Go
> server, so the alias prints a deprecation notice on stderr and hands over to
> the Go binary when one is on `PATH` (otherwise it runs this server). Switch
> scripts and client configs to `vmaf-mcp` (this server) or the Go `vmafx-mcp`.

MCP (Model Context Protocol) server that exposes the VMAFx fork's
scoring CLI to LLM tooling via JSON-RPC over stdio.

## Tools

The full tool list, with schemas and examples, is
[docs/mcp/tools.md](../../docs/mcp/tools.md); the Python-versus-Go comparison is
in [docs/mcp/index.md](../../docs/mcp/index.md).

## Install

```bash
cd mcp-server/vmaf-mcp
pip install -e .
```

Requires a built `libvmaf` binary at `build/tools/vmaf` (override via
`VMAF_BIN=/abs/path/to/vmaf`).

## Run

```bash
# Stdio transport (default for Claude Desktop, Cursor, etc.)
vmaf-mcp
```

## Path allowlisting

For safety, the server only reads files under `testdata/`,
`python/test/resource/`, and `model/`. Extend via colon-separated
`VMAF_MCP_ALLOW`:

```bash
VMAF_MCP_ALLOW=/data/my-corpus:/mnt/yuv vmaf-mcp
```

## Claude Desktop config

```json
{
  "mcpServers": {
    "vmaf": {
      "command": "vmaf-mcp",
      "env": {
        "VMAF_BIN": "/home/you/dev/vmaf/build/tools/vmaf",
        "VMAF_MCP_ALLOW": "/data/yuv-corpus"
      }
    }
  }
}
```
