Skip to content

Local mode (stdio)

In local mode, the host (VS Code, Claude…) starts security-review-mcp local itself on the developer workstation and talks to it through stdin / stdout: no network, no token, no controller.

flowchart LR
    dev(["Developer"]) --> agent
    subgraph ws["Developer workstation"]
        agent["AI assistant<br/>VS Code, Claude"] -- "stdio" --> mcp["MCP server<br/>security-review-mcp<br/>(process started by the assistant)"]
        mcp --> sqlite[("Local SQLite<br/>database")]
    end

For specific cases only

The reports are saved in a local SQLite database that nobody else sees, there is no web interface to triage them, and every workstation keeps its own rules. For a team, use the shared mode (HTTP) instead. Local mode is useful to try the prompts alone, on an offline workstation, or for a personal use.

Installation

The server is published on PyPI as the security-review package (Python 3.14). It installs the security-review-mcp command started by the host, and security-review-controller, which local mode does not need. Install it in a dedicated virtual environment:

uv venv --python 3.14 /opt/security-review-mcp/venv
uv pip install --python /opt/security-review-mcp/venv security-review

Formerly security-review-mcp

Up to version 2.0.0, the package was published on PyPI as security-review-mcp. Both packages install the same commands and the same Python module: uninstall the old one first (uv pip uninstall --python /opt/security-review-mcp/venv security-review-mcp), then install security-review. The commands, the settings and the database stay the same.

Without Internet access, or from the sources: see Installation: other cases.

Running

security-review-mcp local   # started by the host, not by hand

A SQLite database is created locally (~/.local/share/security-review-mcp/security_reports.db, or under $XDG_DATA_HOME when it is set). This is the only file written by the server; delete it to remove all traces. local ignores remote databases, hence SECREVIEW_DATABASE_URL: a development container that points it to PostgreSQL does not change the database of the local mode.

serve --transport stdio

security-review-mcp serve --transport stdio also runs the server in stdio, but it reads SECREVIEW_DATABASE_URL and accepts SQLite only: it refuses to start (code 2) when the variable points to another database (PostgreSQL...). Local mode has no token, and a shared database would let it write to every project and migrate the schema of the team. To work with that database, use the shared mode (HTTP).

Host configuration

With the stdio transport, the host (VS Code, Claude…) starts the server process itself. Give the path of the executable, the local command and, if needed, the SECREVIEW_* variables (see Configuration).

VS Code, GitHub Copilot and Claude read the same .mcp.json file at the root of the repository:

{
  "mcpServers": {
    "security-review": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from","security-review==4.0.0","security-review-mcp","local"]
    }
  }
}

To run the server from a container, see Docker.