Install
$ agentstack add mcp-kevinbtalbert-nifi-mcp-server ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
NiFi MCP Server (via Knox)
Model Context Protocol server providing selectable read and write access to Apache NiFi via Apache Knox.
Works with both NiFi 1.x and 2.x - automatic version detection and adaptation.
Features
- Automatic version detection - Detects NiFi 1.x vs 2.x and adapts behavior
- Knox authentication - Supports Bearer tokens, cookies, and passcode tokens for CDP deployments
- Read-only by default - Safe exploration of NiFi flows and configuration
- Intelligent flow building - Pattern recognition and requirements gathering for complex flows
- 24 read-only MCP tools for exploring NiFi:
get_nifi_version()- Version and build informationget_root_process_group()- Root process group detailslist_processors(process_group_id)- List processors in a process grouplist_connections(process_group_id)- List connections in a process groupget_bulletins(after_ms?)- Recent bulletins and alertslist_parameter_contexts()- Parameter contextsget_controller_services(process_group_id?)- Controller servicesget_processor_types()- Available processor types for flow buildingsearch_flow(query)- Search for components in the flowget_connection_details(connection_id)- Detailed connection informationget_processor_details(processor_id)- Detailed processor configurationlist_input_ports(process_group_id)- Input ports for a process grouplist_output_ports(process_group_id)- Output ports for a process groupget_processor_state(processor_id)- Quick processor state checkcheck_connection_queue(connection_id)- Queue size (flowfiles + bytes)get_flow_summary(process_group_id)- Flow statistics and health overviewanalyze_flow_build_request(user_request)- Intelligent pattern recognition and requirements gatheringget_parameter_context_details(context_id)- Get parameter context with all parametersget_flow_health_status(process_group_id)- Comprehensive flow health check (processors, services, connections, errors)find_controller_services_by_type(process_group_id, service_type)- Search for existing controller services by type (prevents 409 conflicts)check_configuration()- Validate current environment configurationget_setup_instructions()- Interactive setup guidance for NiFi MCP Serverget_best_practices_guide()- Best practices for building NiFi flowsget_recommended_workflow(flow_type)- Step-by-step guidance for common flow patterns- 42 write operations (when
NIFI_READONLY=false): start_processor(processor_id, version)- Start a processorstop_processor(processor_id, version)- Stop a processorcreate_processor(...)- Create a new processorupdate_processor_config(...)- Update processor configurationdelete_processor(processor_id, version)- Delete a processorcreate_connection(...)- Connect componentsdelete_connection(connection_id, version)- Delete a connectionempty_connection_queue(connection_id)- Empty flowfiles from queue (⚠️ data loss)create_controller_service(pg_id, service_type, name)- Create controller services (DBCPConnectionPool, RecordWriters, etc.)update_controller_service_properties(service_id, version, properties)- Configure service propertiesget_controller_service_details(service_id)- Get service configuration (read-only but listed here for context)delete_controller_service(service_id, version)- Remove controller servicesenable_controller_service(service_id, version)- Enable a controller servicedisable_controller_service(service_id, version)- Disable a controller servicecreate_process_group(parent_id, name, x, y)- Create process groups (folders) for organizing flowsupdate_process_group_name(pg_id, version, name)- Rename process groupsdelete_process_group(pg_id, version)- Remove empty process groupscreate_input_port(pg_id, name, x, y)- Create input ports for inter-process-group communicationcreate_output_port(pg_id, name, x, y)- Create output ports for inter-process-group communicationupdate_input_port(port_id, version, name)- Rename input portsupdate_output_port(port_id, version, name)- Rename output portsdelete_input_port(port_id, version)- Remove input portsdelete_output_port(port_id, version)- Remove output portscreate_parameter_context(name, description, parameters)- Create parameter contexts for environment-specific configupdate_parameter_context(context_id, version, ...)- Update parameter contextsdelete_parameter_context(context_id, version)- Remove parameter contextsstart_input_port(port_id, version)- Start input port to enable data flowstop_input_port(port_id, version)- Stop input portstart_output_port(port_id, version)- Start output port to enable data flowstop_output_port(port_id, version)- Stop output portapply_parameter_context_to_process_group(pg_id, pg_version, context_id)- Apply parameter context to enable #{param} usagestart_all_processors_in_group(pg_id)- Bulk start all processors at once (10-15x faster!)stop_all_processors_in_group(pg_id)- Bulk stop all processors at onceenable_all_controller_services_in_group(pg_id)- Bulk enable all services at onceterminate_processor(processor_id, version)- Force-terminate stuck processor (last resort)start_new_flow(flow_name, flow_description)- Smart flow builder that automatically creates process groups and enforces best practices
Quick Start
For CDP NiFi deployments
Your NiFi API base URL will typically be:
https:///nifi-2-dh/cdp-proxy/nifi-app/nifi-api
Get your Knox JWT token from the CDP UI and use it with the configurations below.
Setup
Option 1: Claude Desktop (Local)
- Clone and install:
``bash git clone https://github.com/kevinbtalbert/nifi-mcp-server.git cd nifi-mcp-server python3 -m venv .venv source .venv/bin/activate pip install -e . ``
- Configure Claude Desktop - Edit
~/Library/Application Support/Claude/claude_desktop_config.json:
``json { "mcpServers": { "nifi-mcp-server": { "command": "/FULL/PATH/TO/NiFi-MCP-Server/.venv/bin/python", "args": [ "-m", "nifi_mcp_server.server" ], "env": { "MCP_TRANSPORT": "stdio", "NIFI_API_BASE": "https://nifi-2-dh-management0.yourshere.cloudera.site/nifi-2-dh/cdp-proxy/nifi-app/nifi-api", "KNOX_TOKEN": "", "NIFI_READONLY": "true" } } } } ``
- Restart Claude Desktop and start asking questions about your NiFi flows!
Option 2: Direct Installation (Cloudera Agent Studio)
For use with Cloudera Agent Studio, use the uvx command:
{
"mcpServers": {
"nifi-mcp-server": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/kevinbtalbert/nifi-mcp-server@main",
"run-server"
],
"env": {
"MCP_TRANSPORT": "stdio",
"NIFI_API_BASE": "https://nifi-2-dh-management0.yourshere.cloudera.site/nifi-2-dh/cdp-proxy/nifi-app/nifi-api",
"KNOX_TOKEN": "",
"NIFI_READONLY": "true"
}
}
}
}
Configuration Options
All configuration is done via environment variables:
| Variable | Required | Description | |----------|----------|-------------| | NIFI_API_BASE | Yes | Full NiFi API URL (e.g., https://host/nifi-2-dh/cdp-proxy/nifi-app/nifi-api) | | KNOX_TOKEN | Yes | Knox JWT token for authentication | | KNOX_GATEWAY_URL | No | Knox gateway URL (alternative to NIFI_API_BASE) | | KNOX_COOKIE | No | Alternative: provide full cookie string instead of token | | KNOX_PASSCODE_TOKEN | No | Alternative: Knox passcode token (auto-exchanged for JWT) | | NIFI_READONLY | No | Read-only mode (default: true) | | KNOX_VERIFY_SSL | No | Verify SSL certificates (default: true) | | KNOX_CA_BUNDLE | No | Path to CA certificate bundle |
\* Either NIFI_API_BASE or KNOX_GATEWAY_URL is required
For the NIFIAPIBASE, form using the url from Knox (less -token), and add the postfix /nifi-app/nifi-api So, https://nifi-2-dh-management0.yourdomain.cloudera.site/nifi-2-dh/cdp-proxy-token becomes https://nifi-2-dh-management0.yourdomain.cloudera.site/nifi-2-dh/cdp-proxy/nifi-app/nifi-api
Get Knox Token from the Flow Management Datahub Knox instance:
Example Usage
Read-Only Operations (Default)
Once configured, you can ask Claude questions like:
- "What version of NiFi am I running?"
- "List all processors in the root process group"
- "Show me recent bulletins"
- "What parameter contexts are configured?"
- "Tell me about the controller services"
- "What processor types are available for building flows?"
- "Search for processors containing 'kafka'"
- "Show me the details of connection abc-123"
Write Operations (when NIFI_READONLY=false)
⚠️ WARNING: Write operations modify your NiFi flows. Use with caution!
To enable write operations, set NIFI_READONLY=false in your configuration. Then you can:
- Build flows: "Create a LogAttribute processor named 'MyLogger' in the root process group"
- Manage processors: "Start processor with ID abc-123", "Stop all processors in group xyz"
- Connect components: "Create a connection from processor A to processor B for the 'success' relationship"
- Configure: "Update the scheduling period of processor abc-123 to 30 seconds"
- Control services: "Enable the DBCPConnectionPool controller service"
Examples:
"Create a GenerateFlowFile processor in process group abc-123"
"Connect processor source-123 to processor dest-456 for success relationship"
"Start processor xyz-789"
"Check the queue status for connection conn-456"
"Empty the queue for connection conn-456 before deletion" (⚠️ deletes flowfiles permanently)
"Delete connection conn-456"
Important Notes:
- Version Tracking: NiFi uses optimistic locking. Always fetch current versions before updates:
``python processor = get_processor_details(processor_id) current_version = processor['revision']['version'] stop_processor(processor_id, current_version) ``
- Queue Management: Connections with flowfiles cannot be deleted. Use
get_connection_details()to check queue status, thenempty_connection_queue()if needed before deletion.
Using the example "List all processors in the root process group", we see the following for the example NiFi Canvas:
Using the example, "What version of NiFi am I running?", we see the following:
License
Apache License 2.0
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: kevinbtalbert
- Source: kevinbtalbert/NiFi-MCP-Server
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.