Skip to main content

MCP server for Apache NiFi 2.2.0 — lets AI agents inspect and control NiFi flows

Project description

NiFiPilot Logo

NiFiPilot — AI Copilot for Apache NiFi

MCP (Model Context Protocol) server for Apache NiFi 2.2.0. Lets AI agents inspect, build, and control NiFi flows safely and auditably via 17 ready-to-use tools.

Tests Python License NiFi PyPI VS Code


What it does

NiFiPilot exposes Apache NiFi's REST API as MCP tools so any compatible AI agent can:

  • Inspect running flows, processor states, queue depths, and system health
  • Build process groups, processors, and connections from natural language
  • Control start/stop individual processors or entire process groups
  • Audit every action — every tool call is written to a structured JSON log

Pipeline-Demo-CodHector — created by AI via NiFiPilot Full pipeline created by AI: GenerateFlowFile → UpdateAttribute → EvaluateJsonPath → LogAttribute → PutFile

NiFiPilot en VS Code NiFiPilot in VS Code — Claude executing MCP tools with NiFi canvas visible in real time


Features

  • 17 tools across three categories: read (5), write (6), control (6)
  • Readonly mode — write and control tools are blocked; safe for production monitoring
  • Dry-run mode — preview write/control actions without executing them
  • Structured audit log — every tool call logged with params, result, and timestamp
  • Lazy authentication — JWT token acquired on first call, refreshed automatically on 401
  • Transports — stdio (local clients) and SSE (Docker/remote)
  • 37 unit tests — no live NiFi required

Quick start with Docker Compose

The bundled compose file starts NiFi 2.2.0 and the MCP server together.

# 1. Copy and edit the env file
cp .env.example .env
# Edit NIFI_PASSWORD (min 12 chars) and set MCP_MODE=full to allow write/control

# 2. Start both services
docker compose up --build

# 3. NiFi UI:  https://localhost:8443  (first start takes ~2 min)
#    MCP SSE:  http://localhost:8000/sse

Connect any MCP-compatible client to the SSE endpoint:

{
  "mcpServers": {
    "nifi-mcp": { "url": "http://localhost:8000/sse" }
  }
}

Manual installation

Requirements: Python 3.11+

# From source
git clone https://github.com/Giojacke/mcp-nifipilot
cd mcp-nifipilot
pip install .

Run in stdio mode (used by Claude Code, VS Code, Cursor):

NIFI_URL=https://localhost:8443 \
NIFI_USERNAME=admin \
NIFI_PASSWORD=your-password \
NIFI_VERIFY_SSL=false \
MCP_MODE=readonly \
nifi-mcp

Configuration

All settings come from environment variables (or a .env file in the working directory).

Variable Default Description
NIFI_URL https://localhost:8443 NiFi base URL
NIFI_USERNAME admin NiFi username
NIFI_PASSWORD (required) NiFi password (min 12 chars for single-user auth)
NIFI_VERIFY_SSL false Verify TLS certificate (true in production)
MCP_MODE readonly readonly — read tools only; full — all tools
MCP_AUDIT_LOG true Write JSON audit log
MCP_AUDIT_LOG_PATH ./logs/audit.log Path for the audit log file
MCP_RATE_LIMIT 60 Max tool calls per minute
MCP_DRY_RUN false Describe write/control actions without executing
MCP_TRANSPORT stdio stdio for local clients; sse for Docker
MCP_HOST 0.0.0.0 Bind host when MCP_TRANSPORT=sse
MCP_PORT 8000 Port when MCP_TRANSPORT=sse

Tool reference

Read tools (always available)

Tool Description
get_process_groups(group_id) List direct child process groups
get_processors(group_id) List processors in a group with run status
get_connections(group_id) List connections with queue depth
get_flow_status(group_id) Running/stopped/invalid counts and throughput
get_system_diagnostics() NiFi version, heap, CPU, uptime

Write tools (require MCP_MODE=full)

Tool Description
create_process_group(name, parent_group_id, x, y) Create a new process group
create_processor(name, processor_type, group_id, x, y) Add a processor (full Java class name)
update_processor(processor_id, name?, properties?, scheduling_period?) Update processor config
create_connection(source_id, destination_id, group_id, relationships?, ...) Connect two components
delete_processor(processor_id) Delete a stopped processor
delete_process_group(group_id) Delete a stopped process group

Control tools (require MCP_MODE=full)

Tool Description
start_processor(processor_id) Start a processor
stop_processor(processor_id) Stop a processor
start_process_group(group_id) Start all processors in a group
stop_process_group(group_id) Stop all processors in a group
get_queue_status(connection_id) Queue depth and throughput
purge_queue(connection_id) Drop all flowfiles from a queue

Client setup

Claude Code (stdio)

The .mcp.json at the project root is pre-configured. Fill in your password:

{
  "mcpServers": {
    "nifi-mcp": {
      "command": "nifi-mcp",
      "env": {
        "NIFI_URL": "https://localhost:8443",
        "NIFI_USERNAME": "admin",
        "NIFI_PASSWORD": "YOUR_PASSWORD",
        "NIFI_VERIFY_SSL": "false",
        "MCP_MODE": "readonly"
      }
    }
  }
}

Claude Code (SSE — Docker stack running)

{
  "mcpServers": {
    "nifi-mcp": { "url": "http://localhost:8000/sse" }
  }
}

VS Code

Install from VS Code Marketplace: NiFiPilot — AI Copilot for Apache NiFi

Copy .vscode/mcp.json (included) and fill in your password.

Cursor / Windsurf

Place the stdio config at ~/.cursor/mcp.json (global) or .cursor/mcp.json (project).


Security model

Concern Mitigation
Credential exposure All secrets via env vars — never hardcoded
Accidental writes MCP_MODE=readonly blocks all write and control tools
Runaway changes MCP_DRY_RUN=true describes actions without executing
Auditability Every tool call writes a JSON entry to the audit log
Token expiry ensure_authenticated() re-logins on 401 automatically
SSL in production Set NIFI_VERIFY_SSL=true with a valid certificate

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests (no live NiFi needed)
pytest

# Lint and format
ruff check src tests
ruff format src tests

Tests mock nipyapi at the API class level — 37 tests, no live NiFi required. Integration tests can be added in tests/integration/ (excluded from the default test run).


Architecture

See ARCHITECTURE.md for design decisions and the C4 diagrams.


Roadmap

  • Rate limiting enforcement (config exists, middleware pending)
  • NiFiClient as real façade (tools currently call nipyapi directly)
  • Integration tests against live NiFi
  • Azure DevOps MCP bridge for CI/CD of NiFi flows

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nifipilot-0.1.0.tar.gz (2.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nifipilot-0.1.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file nifipilot-0.1.0.tar.gz.

File metadata

  • Download URL: nifipilot-0.1.0.tar.gz
  • Upload date:
  • Size: 2.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for nifipilot-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5ced961b3d3737b49394af39d3998873f901abbacf50922b4a117521a02e36dc
MD5 f1dfa0426404428ff8edc14e4df7d68e
BLAKE2b-256 524fb9387db87694101996dda53012c8ab0605349169e68061d822f041f2ff79

See more details on using hashes here.

File details

Details for the file nifipilot-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: nifipilot-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for nifipilot-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4364f427989cab30eef15d59c1156fc9890382f54ee3080572c6af174813cd3f
MD5 e802f86fa37050e14a6c55369de01111
BLAKE2b-256 95080798c69b84e65434adff5bba14da1be461339e1c36db9811dc32d9879466

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page