fme-mcp-ultra
Universal, secure, production-grade Model Context Protocol (MCP) server for Safe Software FME (compatible with FME Form & FME Flow from version 2018.0 through 2026+), geospatial data, enterprise ETL pipelines, and AI agents.
Usable by any standard MCP client: Claude Desktop, Claude Code, Cursor, VS Code, Antigravity, Windsurf, LangChain, and OpenAI Agents SDK.
🌟 Overview
Safe Software introduced native Model Context Protocol (MCP) support in FME 2026 (safe.mcp / MCPCaller in 2026.1 and native Flow MCP Server in 2026.2). However, many teams run on FME 2018.0 through 2025, which previously lacked any way to connect LLMs and AI agents with their spatial data pipelines.
fme-mcp-ultra bridges this gap:
- Works with All FME Releases (2018.0 to 2026+): Works locally with FME Form (
fme.exeandfmeobjectsbindings) and remotely with FME Flow REST APIs (v3 & v4). - Dynamic Workspace Tools: Discovers
.fmwworkspaces, extracts published parameters, and exposes them as typed MCP tools for your AI assistant. - Desktop Interactivity: Live environment diagnostics, XML canvas topology inspection, detached GUI launching (
FME Workbench,FME Data Inspector), and dataset feature previews. - Security by Default: Directory sandboxing (
PathGuard), shell command guards (CommandGuard), network filtering (SSRF Guard), and automatic PII/credential redaction. - Outbound MCP Federation: Acts as both an MCP server and client, allowing multi-server tool chaining.
- Geospatial Utilities: Built-in coordinate reprojection, buffering, geometry validation, dataset profiling, and data contracts.
🏛️ System Architecture
flowchart TB
subgraph Clients["MCP Clients (LLMs & Agents)"]
C1["Claude Desktop / Claude Code"]
C2["Antigravity / Cursor / VS Code"]
C3["AI Agents SDK / LangChain"]
end
subgraph CoreServer["fme-mcp-ultra Server"]
subgraph Transports["Transports"]
T1["Standard I/O (stdio)"]
T2["Streamable HTTP / SSE"]
end
subgraph Security["Security & Governance Layer"]
S1["PathGuard (Directory Sandboxing)"]
S2["CommandGuard (Subprocess Guard)"]
S3["SSRF Guard (Network Allowlist)"]
S4["RedactionEngine (Secret & PII Scrubbing)"]
S5["RBAC & ABAC Policy Engine"]
S6["Tamper-Evident Audit Chain"]
end
subgraph Engine["FME Abstraction Engine"]
E1["FME Form Local Runner (fme.exe & fmeobjects)"]
E2["FME Flow REST Client (v3/v4)"]
E3["Parameter Mapper & Schema Inferer"]
E4["Log Streamer & Diagnostic Parser"]
end
subgraph Tools["Tools Registry (240+ Capabilities)"]
TL1["Workspaces & Jobs"]
TL2["Spatial & GIS (Vector, Raster, CAD/BIM)"]
TL3["Data Engineering & Profiling"]
TL4["Quality & Data Contracts"]
TL5["Catalogue & Lineage"]
TL6["MCP Federation (MCPCaller Client)"]
end
end
subgraph Targets["Target Infrastructure"]
FME_Form["Local FME Form Engine (2018.0 - 2026+)"]
FME_Flow["Enterprise FME Flow Server"]
Ext_MCP["Remote Federated MCP Servers"]
end
Clients --> Transports
Transports --> Security
Security --> Engine
Engine --> Tools
Engine --> FME_Form
Engine --> FME_Flow
Tools --> Ext_MCP
⚡ Quickstart (Under 5 Minutes)
Option 1: Run with uvx (Recommended)
uvx fme-mcp-ultra serve --transport stdio
Option 2: Standard pip Installation
pip install fme-mcp-ultra
fme-mcp-ultra doctor
fme-mcp-ultra serve --transport stdio
🔌 MCP Client Configurations
1. Claude Desktop
Add this to %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"fme-mcp-ultra": {
"command": "uvx",
"args": ["fme-mcp-ultra", "serve", "--transport", "stdio"]
}
}
}
2. Antigravity / Cursor / VS Code
Add to your client's MCP configuration settings:
{
"mcpServers": {
"fme-mcp-ultra": {
"command": "fme-mcp-ultra",
"args": ["serve", "--transport", "stdio"]
}
}
}
3. Streamable HTTP / Docker Deployment
docker run -d --name fme-mcp-ultra \
-p 8000:8000 \
-e FME_FLOW_URL="https://fme-flow.your-org.com" \
-e FME_FLOW_TOKEN="your-fme-flow-api-token" \
ghcr.io/mwjouini/fme-mcp-ultra:latest
4. FME Workbench Desktop Live Hook
To allow FME Workbench to report live translation events (status, duration, features read/written) directly to your AI agent:
- Open FME Workbench: Navigator -> Workspace Parameters -> Scripting.
- Paste
examples/fme-workbench/startup_script.pyinto Startup Python Script. - Paste
examples/fme-workbench/shutdown_script.pyinto Shutdown Python Script. - Read the full FME Desktop Integration Guide.
🧰 Highlighted Tools Catalogue
| Domain | Key Tools | Description |
|---|---|---|
| Desktop Interactivity | fme_diagnose, fme_inspect_canvas, fme_open_in_workbench, fme_open_in_inspector, fme_preview_dataset |
Live environment diagnosis, XML canvas graph parsing, detached GUI launching, and instant dataset feature preview. |
| Workspaces | fme_discover_workspaces, fme_get_workspace, fme_run_workspace, fme_compare_workspaces |
Crawls directories, extracts published parameters, and executes .fmw workspaces. |
| Spatial Analysis | gis_reproject, gis_buffer, gis_validate_geometry |
High-precision CRS conversion (EPSG:4326 to 2154 / 3857), circular buffering, and polygon validation. |
| Data Engineering | data_read_metadata, data_profile |
Column analysis, null counts, distinct value distribution, and format inspection. |
| Data Quality | quality_score_dataset, quality_generate_data_contract |
Computes completeness scores and generates standard Data Contract YAML. |
| Catalogue | catalog_register_asset, catalog_search_assets, catalog_get_lineage |
Registers datasets, performs semantic search, and maps upstream/downstream dependencies. |
| Orchestration | workflow_create, workflow_get, workflow_run |
Constructs multi-step execution DAGs combining FME, validation checks, and scripts. |
| MCP Federation | mcp_register_server, mcp_list_servers |
Connects external MCP servers to chain tools and fan-out requests. |
| Governance | gov_get_tenant_config, gov_redact_pii, gov_classify_dataset |
Enforces GDPR/UK-GDPR data classification and automated PII scrubbing. |
| Diagnostics | fme_info, fme_list_transformers, fme_list_packages, fme_execute_python |
Queries build/licensing, searches 500+ transformers, and runs in-engine Python. |
🛡️ Enterprise Security Model
fme-mcp-ultra is engineered with a strict Default-Deny security posture:
- PathGuard: Enforces canonical path resolution (
os.path.realpath) and verifies containment withinFME_ALLOWED_DIRS. Traversal escapes (..) and null bytes are rejected. - CommandGuard: Zero shell invocations (
shell=False). Executable names and arguments are validated against an authorised binary whitelist, blocking metacharacter injection (|,;,&,$). - SSRF Guard: Pre-resolves outbound DNS hostnames and prevents calls to loopback (
127.0.0.1), private networks (10.0.0.0/8,192.168.0.0/16), and cloud metadata APIs (169.254.169.254). - RedactionEngine: Real-time scrubbing of Bearer tokens, API credentials, email addresses, and payment card numbers before output delivery.
- Role-Based Access Control (RBAC): Enforces role permissions (
platform_admin,workspace_operator,spatial_analyst,auditor,read_only).
📊 FME Version Compatibility
fme-mcp-ultra is compatible with all versions of Safe Software FME from 2018.0 through 2026+:
| FME Version | Compatibility | FME Form (Desktop) | FME Flow (Server) | How it works |
|---|---|---|---|---|
| FME 2026+ | Full | ✅ Yes | ✅ Yes | Works alongside native FME 2026 MCP endpoints, adding stdio desktop transport and security controls. |
| FME 2025.x | Full | ✅ Yes | ✅ Yes | Direct fme.exe execution, in-memory fmeobjects bindings, canvas XML topology parsing, FME Flow REST v3. |
| FME 2021 – 2024 | Full | ✅ Yes | ✅ Yes | Identical .fmw XML canvas schema, CLI commands, and FME Flow REST v3 API. |
| FME 2018 – 2020 | Full | ✅ Yes | ✅ Yes | Full support for FME Server REST API v3 (introduced in 2018.0) and local workspace execution. |
| FME 2015 – 2017 | Partial | ⚠️ CLI Only | ❌ Legacy REST v2 | Command-line fme.exe workspace runner supported; REST API v2 deprecated. |
💻 CLI Usage
# Verify environment and FME installation
fme-mcp-ultra doctor
# Inspect a workspace file
fme-mcp-ultra inspect path/to/workspace.fmw
# Launch stdio server for desktop clients
fme-mcp-ultra serve --transport stdio
# Launch Streamable HTTP server
fme-mcp-ultra serve --transport streamable-http --host 0.0.0.0 --port 8000
🤝 Contributing
Contributions are welcomed under our Contributing Guide and Code of Conduct.
📄 Licence
Licensed under the Apache License 2.0. See LICENSE for details. Copyright © 2026 Mohamed Wael JOUINI and Contributors.
Metadata
Release files for fme-mcp-ultra 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fme_mcp_ultra-1.1.0.tar.gz | 66.6 kB | With provenance | Details for fme_mcp_ultra-1.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fme_mcp_ultra-1.1.0-py3-none-any.whl | Python 3 | none | any | Details for fme_mcp_ultra-1.1.0-py3-none-any.whl |
Total release size: 119.4 kB
Release files / fme_mcp_ultra-1.1.0.tar.gz
| Download URL | fme_mcp_ultra-1.1.0.tar.gz |
|---|---|
| Size | 66.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
db504ab3f8a80f10af6f5a4c5482ca4125ad3bb37d4e7f2a94047558dc025f39
|
|
BLAKE2b-256 checksum How to use checksums |
dc8f22d387b92a5265a1bb22167df03b7928364c2fc0a654411f666874174b5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logRelease files / fme_mcp_ultra-1.1.0-py3-none-any.whl
| Download URL | fme_mcp_ultra-1.1.0-py3-none-any.whl |
|---|---|
| Size | 52.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53e776435c8b69f4043d8d75ea98fa871295f54fa32dbad563eba588aacc9ba2
|
|
BLAKE2b-256 checksum How to use checksums |
e705e141901b0992b3cb580626458cff5c8a55b4805fb815f2077a088150ca1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logSecurity for fme-mcp-ultra 1.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for fme_mcp_ultra-1.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.