Edge Flow Manager MCP Server
Provides read-only access to Cloudera Edge Flow Manager (EFM) state, enabling AI agents to inspect agent classes, agents, manifests, designer flows, and resources for MiNiFi fleets at the edge.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Edge Flow Manager MCP Server Which MiNiFi agents are offline right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Edge Flow Manager MCP Server
A thin, read-only Model Context Protocol server that gives LLMs and AI agents (Claude Code, Claude Desktop, LangChain, Agent Studio) live state from a Cloudera Edge Flow Manager (EFM / CEM) instance — the control plane for MiNiFi agents at the edge.
Surface | What it exposes | API |
Agent classes | the groupings of MiNiFi agents that share a flow |
|
Agents | enrolled agents + last-heartbeat (online/offline) |
|
Manifests | the processor / controller-service types a class can run |
|
Designer flows | the live edge flow document, read + validate |
|
Resources | assets & extension bundles EFM syncs to agents |
|
Practitioner-grade MCP servers already ship for NiFi, Cloudera Manager, Iceberg, Trino, and Grafana — but nothing shipped for the edge. This is that server. It is the companion to the Cloudera Manager MCP Server: CM covers the datacenter, this covers everything MiNiFi runs at the edge.
MiNiFi has no REST API of its own. Its command-and-control state — which agents are alive, what flow each is running, what it's allowed to run — all lives in EFM. So an MCP server over EFM is an MCP server over the MiNiFi fleet.
Every tool is GET-only. There are no write, publish, or config-mutation paths in v1 (see Roadmap).
Tools
Agent classes & agents (5)
Tool | Purpose |
| All agent classes (name, description, bound manifest ids) |
| Detail for one class — resolves it to its manifest |
| Enrolled agents + |
| Full record for one agent (class, host, manifest hash, status) |
| Per-class health: flow version, online/missing counts, metrics |
Manifests (2)
Tool | Purpose |
| The component types a class can run — is a flow deployable there? |
| One manifest by id, with full property descriptors |
Designer flows (3)
Tool | Purpose |
| One summary per class: |
| The full live edge flow document (PGs, processors, connections) |
| Validation results — the check EFM runs before a publish |
Resources (2)
Tool | Purpose |
| All assets / extension bundles in the resource manager |
| Resources assigned to one class |
Related MCP server: Cloudera Hive MCP Server
Prerequisites
Git —
brew install gitNode.js — for
npx/ MCP Inspector:brew install nodeuv —
curl -LsSf https://astral.sh/uv/install.sh | shA reachable EFM / CEM instance. EFM's default HTTP port is 10090; the REST base is
http://<efm-host>:10090/efm/api.
On Kubernetes (the CSO / CFM operator), reach EFM with
kubectl port-forward service/efm 10090:10090 -n <namespace>and pointEFM_BASE_URLathttp://127.0.0.1:10090/efm/api.
Step 1 — Clone
git clone https://github.com/cldr-steven-matison/edge-flow-manager-mcp-server.git
cd edge-flow-manager-mcp-serverStep 2 — Configure
cp .env.example .env
$EDITOR .env
set -a; source .env; set +aMinimal .env (unauthenticated EFM — the default):
EFM_BASE_URL=http://efm-host:10090/efm/apiWith HTTP Basic and a self-signed TLS cert:
EFM_BASE_URL=https://efm-host:10090/efm/api
EFM_USER=admin
EFM_PASSWORD=yourpassword
EFM_VERIFY_SSL=falseStep 3 — Run with MCP Inspector
npx @modelcontextprotocol/inspector@0.14.0 uv run --directory . run-serverPin the Inspector to the v1 line (
@0.14.0). This server pinsmcp<2(the v1 FastMCP idiom, matching the sibling Cloudera MCP servers). The current@latestInspector (2.x) completestools/listbut its Tools pane renders empty against a v1 server — the tool list simply doesn't show.@0.14.0(classic Connect → List Tools UI) lists all tools correctly. For an ad-hoc launch you may also needDANGEROUSLY_OMIT_AUTH=trueto skip the proxy token locally.
The server prints (to stderr) whether EFM was wired up:
Starting Edge Flow Manager MCP Server via transport: stdio (EFM configured)In the Inspector: Connect → List Tools → you should see all 12 tools.
Step 4 — Smoke tests
Call | Expect |
| your agent-class names |
| enrolled agents + last-heartbeat |
| one summary per class, each with a flowId |
| assets / extension bundles (may be empty on a fresh EFM) |
A typical investigation chains them: efm_list_agent_classes → efm_get_agent_class →
efm_get_manifest → efm_list_flows → efm_get_flow → efm_validate_flow.
Step 5 — Claude Desktop / Claude Code
Local clone:
{
"mcpServers": {
"edge-flow-manager": {
"command": "uv",
"args": ["run", "--directory", "/abs/path/to/edge-flow-manager-mcp-server", "run-server"],
"env": {
"EFM_BASE_URL": "http://efm-host:10090/efm/api"
}
}
}
}Straight from GitHub (no clone), via uvx:
{
"mcpServers": {
"edge-flow-manager": {
"command": "uvx",
"args": ["--from", "git+https://github.com/cldr-steven-matison/edge-flow-manager-mcp-server@main", "run-server"],
"env": { "EFM_BASE_URL": "http://efm-host:10090/efm/api" }
}
}
}Agent-loop mapping
Loop | Tool sequence |
Fleet health |
|
Flow inspection |
|
Deployability check |
|
Knowing which agents are alive is a different question than what flow they run, which is different again from what a class can run — exposing all three lets an agent join them in one investigation without leaving the conversation.
Configuration reference
All settings are environment variables (see .env.example for the annotated set):
EFM_BASE_URL (the only required one), EFM_USER / EFM_PASSWORD (only if EFM enforces Basic),
EFM_VERIFY_SSL (true | false | path to a CA bundle), plus globals EFM_MCP_TIMEOUT /
EFM_MCP_RETRIES / EFM_MCP_RETRY_WAIT, MCP_TRANSPORT (stdio | sse), and EFM_READONLY
(defaults true; v1 has no write paths — the flag is plumbed for the future write tools).
Roadmap
v1 is read-only and REST-only. Two extensions are deliberately deferred:
Write tools, off by default.
efm_add_processor,efm_add_connection, andefm_publish_flow, gated behindEFM_READONLY=false. A publish pushes the flow to every agent in the class on its next heartbeat, so these land only once the read tools are in real use. The EFM Flow Designer write API is onePOSTper processor and one per connection (no bulk create, no whole-flowPUT), with aGET .../validateclean beforePOST .../publish.Postgres-backed
efm_get_operations(). EFM'soperation/bulk_operationtables in Postgres are the durable truth for command history and reliable online/offline status; the REST view can lag or, under a crash-looping agent that floods theoperationtable, hang entirely. A read-only Postgres query is the robust source — added when operational history is needed.
Related Cloudera MCP Servers
Cloudera Manager MCP Server — CM / YARN / Ranger / Atlas
License
Apache-2.0.
Available Tools
12 toolsefm_get_agentA
Full record for one agent: its class, device/host, manifest hash, and heartbeat/status detail. Use to confirm which manifest an agent actually reports.
Inputs: agent_id (required). Returns: result
efm_get_agent_classA
Detail for one agent class: its manifest ids, monitoring config, and any Designer flow association. Start here to resolve a class to its manifest.
Inputs: agent_class (required). Returns: result
efm_get_class_monitorB
Per-class health view: current flow version, agent counts (online / missing), health status, and connection metrics. The fastest answer to "is this class healthy and how many agents are up?".
Inputs: agent_class (required). Returns: result
efm_get_flowA
The full live Designer flow document for a flowId: process groups, processors, connections, controller services, and parameters. Ground truth for what an agent class is running — read this before reasoning about a flow.
Inputs: flow_id (required). Returns: result
efm_get_manifestA
The agent manifest(s) for a class: the processor, controller-service, and reporting-task types that class can run. This is what tells you whether a flow you want to build is even deployable to that class's agents.
Inputs: agent_class (required). Returns: result
efm_get_manifest_by_idA
One agent manifest by its id (as listed on an agent class or agent record). Returns the full component-type catalog with property descriptors.
Inputs: manifest_id (required). Returns: result
efm_list_agent_classesA
List every agent class EFM manages (name, description, and the agent manifest(s) each class is bound to). An agent class groups MiNiFi agents that share one flow — the top of the edge hierarchy.
Inputs: no named parameters. Returns: result
efm_list_agentsA
List enrolled MiNiFi agents with their last-heartbeat timestamp (status/firstSeen/lastSeen) — the primary online/offline signal. Pass agent_class to filter to one class; omit it for every agent.
Inputs: agent_class. Returns: result
efm_list_class_resourcesA
Resources currently assigned to one agent class — the assets/extensions EFM syncs to every agent in that class on its next heartbeat.
Inputs: agent_class (required). Returns: result
efm_list_flowsA
One summary per agent class: identifier (the flowId), agentClass, and
rootProcessGroupIdentifier. This is how you map a class to the flowId that
efm_get_flow / efm_validate_flow take.
Inputs: no named parameters. Returns: result
efm_list_resourcesA
All resources in EFM's resource manager (assets and extension bundles), with names, types, and SHA-512 digests — the files EFM can push to agents.
Inputs: no named parameters. Returns: result
efm_validate_flowA
Validation results for a flow — the same check EFM runs before a publish. Surfaces invalid/misconfigured components without changing anything.
Inputs: flow_id (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Each tool targets a distinct resource or action: classes, agents, manifests, monitors, flows, resources. Even similar pairs (e.g. efm_get_manifest vs efm_get_manifest_by_id) are separated by query key, and efm_list_resources vs efm_list_class_resources differ by scope.
All tools follow a consistent efm_<verb>_<noun> snake_case pattern. List/get are used predictably, and compound nouns like class_monitor and class_resources are clear. Minor suffix variations (by_id) are still systematic.
12 tools is a well-scoped set for an edge flow manager: enough to cover the main entities (agent classes, agents, flows, manifests, resources) without bloat.
The read/query surface is thorough: classes, agents, manifests, flows, resources, health. Validation is included enough to test flows. However, there are no publish/update/delete operations, and resource assignment is only readable, so management actions are missing.
Maintenance
Related MCP Connectors
Discover Frontier inference capabilities and read sanitized usage through read-only tools.
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
A read-only verified record of agent-operable GTM tools: search, fetch, compare, track changes.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables Claude to inspect and operate Apache Airflow over its REST API, providing read tools and safe write operations (gated by read-only mode) for managing DAGs, runs, tasks, and pools.14MIT
- FlicenseAqualityDmaintenanceEnables LLM agents to query and explore Cloudera Hive virtual warehouses through tools like list_databases, list_tables, describe_table, get_table_sample, and execute_query with read-only safety.5-
- FlicenseBqualityCmaintenanceEnables AI agents to manage and interact with Apache NiFi through its REST API, covering process groups, processors, connections, queues, provenance, and version control via natural language tool calls.28-
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server exposing Flowsery analytics and AI-detected issues via 17 GET tools, enabling natural language queries in compatible clients.MIT