Skip to main content

Frequently Asked Questions in Support (November Edition)

  • Nov 13, 2026 4:32 PM UTC
  • 0 replies
  • 5 views
shirleychan
Safer
Forum|alt.badge.img+9

Happy Friday, FME'ers! Welcome back to the TGIF FAQ Series: November edition.

Six questions for FME Flow and five for FME Form this month. On the Flow side, we're tightening up TLS and cipher settings, looking at what a fault-tolerant deployment really needs (and what to check when you can only see Jobs), running workspaces and pushing to Git through the REST API, setting up FME Flow as an MCP server, and what does and doesn't travel with a Project export. On the Form side: writing to ArcGIS Online and Portal hosted feature layers, regular expressions that behave differently between transformers, SpatialFilter results that look wrong, building a change log with ChangeDetector, and ODBC and SQL Server driver warnings. Let's get into it!

FME Flow — FAQs

1. How do I restrict which TLS versions and cipher suites FME Flow accepts?

June's edition covered replacing and renewing certificates — this is the companion question of which protocols and ciphers your server will negotiate.

On Windows, both are controlled by the <Connector> element in <FMEFlowDir>\Utilities\tomcat\conf\server.xml, using the sslEnabledProtocols and ciphers attributes. Have a look at what your version's connector currently lists, then remove anything you'd rather not support — taking TLSv1.1 out of sslEnabledProtocols is how you disable TLS 1.1. Please note that the TLS version needs to correlate with the Tomcat and FME Flow version (e.g. avoid using a newer TLS version on an older installation where this configuration may not have been tested) in order to avoid connection issues.

The cipher list works the same way: it isn't meant to be exhaustive, so add the algorithms your certificate needs and remove any you don't use. Apache Tomcat's Cipher API documentation has the full set to choose from. Restart the FME Flow Application Server service when you're done. Please note that Tomcat will default to its own set of ciphers if you choose to remove all or don't specify any.

If your browser then reports ERR_SSL_VERSION_OR_CIPHER_MISMATCH, that's a helpful clue rather than a mystery — it means your certificate's algorithm isn't in the ciphers list.

Two things worth planning for:


2. What does a highly available FME Flow actually require?

In FME Flow, high availability is called fault tolerance. The shape of it: redundant web application servers and Cores on separate hosts, engines either co-located or distributed, all sharing one System Share and one FME Flow Database that you host on your own fault-tolerant infrastructure. It's an active/active design — both Cores run and communicate at the same time — rather than a passive standby.

You'll need a third-party load balancer, configured like this:

  • Route port 80 (Windows) or 8080 (Linux) to every Flow instance.
  • Route port 7078 to exactly one WebSocket Server at a time, with failover, since only one can be active.
  • After installing, set Network & Email > Topic Monitoring > Fault Tolerant Configuration > Internal WebSocket URL to your public load balancer URL.
  • Do not use sticky sessions. FME Flow returns traffic from whichever web app server the balancer originally chose, and picks Cores and engines itself using job queues.
  • Do configure liveness health checks — every five seconds is a reasonable starting point. Without them you'll see error responses or long timeout-and-retry delays.

Also: don't place a load balancer between engines and the Core, with the exception of Azure VM Scale Sets and AWS Autoscaling Groups.

Three final things to know about fault-tolerant installs: the system services don't start automatically, all nodes need to share the same time zone, and the UDP Message and Email-SMTP triggers aren't supported — use Email-IMAP instead.


3. Why can I log in on my fault tolerant environment, but only see Jobs?

Logging in successfully but only seeing Manage > Jobs, almost always means the post-installation database configuration scripts never ran against the external database. To sort it out:

  1. Look for a warning in fmeserver.log.
  2. Verify the credentials in fmeCommonConfig.txt and fmeFlowWebApplicationConfig.txt.
  3. Rerun the configuration scripts as Administrator while the Core is running, then restart.

A related one: if only some pages report "Error communicating with FME Flow host," it's usually a firewall gap. Jobs, Projects and Resources communicate on 7071, while Schedules uses 7073.


4. Can I run workspaces and push repository changes to Git through the REST API?

Running workspaces through the API is well supported — just make sure you're on V4. REST API V3 was deprecated in FME Flow 2025.1 and removed in 2026.1. The nice thing about V4 is that its interactive documentation is served from your own instance at <host:port>/fmeapiv4/docs/index.html, so it always matches the version you're running. Authentication is via an API token.

Version control is a separate feature rather than an API endpoint. You'll find it under System Configuration > Version Control (you'll need fmesuperuser to enable it). A few things to know about how it behaves:

  • It versions files in Repositories only, and commits are explicit — nothing is captured automatically.
  • You can download prior versions; to make one current again, republish it.
  • Remote backup supports GitHub.com and GitHub Enterprise. You'll need a repo URL ending in .git and a PAT with repo scope, SAML-SSO-authorized if that applies to your organization.
  • Always Fetch before you Push.
  • FME Flow pushes to a branch named master.

One thing worth setting up early: version history isn't preserved through backup and restore or through an upgrade, so pushing to a remote repo is the way to keep it long-term.

If a push fails, the usual causes are permissions (the Core service account needs read/write on the System Share, which holds the local .git), an expired token, or an untrusted certificate.


5. Can FME Flow act as an MCP server for an AI agent?

Yes — and FME works in both MCP directions. The MCPCaller transformer lets a workspace act as a client of external MCP servers, and FME Flow itself can act as an MCP server that exposes your workspaces as callable tools.

To set up the server side:

  1. Create an MCP Server in the Web UI: give it a title and unique name, and set the job queue, job expiry, and authentication (either Unauthenticated or OAuth 2.0 — OAuth needs SAML Configuration enabled plus an authorization URL). The URL is generated for you.
  2. Create Tools. Each Tool runs one already-published workspace, and you can expose the workspace's user parameters as tool parameters.
  3. Publish each Tool and Start the server — both are explicit steps.

A couple of things that are useful to know up front. The name and description you give a Tool are what MCP clients use to decide when to call it, so it's worth writing them thoughtfully. Republishing a workspace automatically unpublishes its Tool, so you'll need to republish the Tool too. And on the server side FME Flow supports Tools only — not Resources or Prompts.

What comes back to the client depends on your writer: the MCP Writer returns text, image or audio content, the JSON Writer returns JSON, and a workspace with no writer returns job status only.


6. When exporting a Project, what carries over?

On Project export, here's what does and doesn't travel:

  • Resources are only included if the folder is migratable (SHAREDRESOURCE_ISMIGRATABLE_*=true — DATA, ENGINE and DASHBOARD are by default).
  • Passwords, connection credentials and encrypted parameter values are only included if you check "Include sensitive information," and you'll need the encryption key at import.
  • Session tokens are never exported.
  • Flow Apps imported without their API tokens arrive disabled, so you'll want to re-enable them.
  • MCP Servers can be included in Projects in 2026.3 and newer

FME Form — FAQs

1. Why do my attributes, data types or coordinate system change when I write to an ArcGIS Online or Portal hosted feature layer?

This is a different situation from June's ArcSDE geodatabase reader/writer question. Here, the issue likely stems from the data types that FME's shipped formats support. Especially if you're working with the older shipped version of the ArcGIS Feature Service reader/writer, as opposed to the newer version available on the FME Hub.

The formats that ship with FME support Date, Double, GlobalID, GUID, Integer, Single, SmallInteger and String. ArcGIS Pro 3.2 introduced Date only, Time only, Timestamp offset and Big Integer, which aren't in that list, so they're either dropped from the User Attributes list, or coerced to a different format if you create a new service (the date-style types become String, Big Integer becomes Integer).

The first thing to try is to install or update to the latest Esri ArcGIS Connector package (safe.esri-agol) compatible with your FME version. Version 3.10.0 and newer include the single Esri ArcGIS Feature Service reader/writer, which supports those types on ArcGIS Online and ArcGIS Enterprise 11.3+ (not every Enterprise instance supports Timestamp offset). If you haven't installed a package before, Introduction to FME Packages walks through it.

The package is installable in FME 2024.0 (build 24187) and newer. It doesn't migrate existing workspaces for you: switching means swapping in the new reader/writer and creating new (safe.esri-agol) web connections. The older shipped formats are scheduled to be hidden from FME 2026.3, so they can't be added to new workspaces. Existing workspaces keep running but log deprecation warnings.

As long as the FME engine supports it, package updates are maintained and released separately from Form or Flow, so Esri support updates can be released as they become available, rather than waiting for an official FME core product release.

However, if you need to work with what you have today, here are a few suggestions to try:

  • If you're reading an unsupported attribute type into FME, connect an AttributeManager directly without opening Feature Type Parameters, or set Attributes to Read as All Attributes and use an AttributeExposer.
  • Use a DateTimeConverter to write ISO values into existing services.
  • To create a service with the correct types, write a File Geodatabase with the Esri-based File Geodatabase writer (the Open API writer doesn't support these types), zip it, then upload and publish it with two ArcGISOnlineConnectors.

Seeing addResults 10500 or a 500 error on an existing layer? A schema mismatch is the most common cause, so check the full error response before working through these steps:

  1. Refresh with Writer > Update Feature Type.
  2. Right-click the writer > Show Summary Annotation to check the schema.
  3. Run an AttributeValidator to catch string lengths and integer ranges before they reach Esri.

And on coordinate systems: this one surprises a lot of people, and it's not your EPSG code being ignored. The writer's Target WKID only applies when the writer creates the service (or overwrites it, in the packaged Esri ArcGIS Feature Service writer), and it defaults to 102100 (Web Mercator).

Related reading:


2. Why does the same regular expression behave differently in different transformers?

Two general things first, which explain a good share of the head-scratching:

  • FME's regex engine uses Qt, which is based on PCRE2, so a pattern copied from another flavor, like Python or Java, may not behave identically.
  • In most cases matching is case-insensitive by default, so check the transformer's Case Sensitive setting, or the caseSensitive argument if you're using a string function.

So, if it's available, the Regular Expression Editor is the best place to work. Invalid syntax highlights red, matches highlight yellow, and since FME Form 2023.1 there's AI Assist to help build the pattern.

Then there are the transformer-specific differences:

  • StringReplacer only treats your pattern as a regex when Mode = Replace Regular Expression, otherwise it's a literal match. Multiple replacements run in sequence, so later rules see the results of earlier ones. Match groups are back-referenced as \1, \2.
  • StringSearcher doesn't replace anything. It routes features to Matched/NotMatched, stores the first hit in Matched Result, and can optionally fill All Matches List Name and Subexpression Matches List Name.
  • Inline in AttributeManager or AttributeCreator, you have @FindRegularExpression(), @ReplaceRegularExpression() and @SubstringRegularExpression().

Escaping is the one place the two contexts genuinely differ. Inside a regex, a literal backslash is \\. Inside FME string functions, wrap a parameter in double quotes if it contains commas (the @ReplaceRegularExpression docs also say to do this for parentheses). If the string itself starts or ends with a double quote, wrap it in double quotes and escape the inner quotes with a backslash (\").

Related reading:


3. Why is my SpatialFilter giving results that look wrong?

The first thing to try is a GeometryValidator upstream, because spatial relations are undefined for geometries that aren't OGC valid. Multi and aggregate geometries are only supported for a subset of predicates, depending on Support Mode.

If the geometry is clean and results still look off, check the Support Mode parameter on SpatialFilter or SpatialRelator. FME doesn't implement OGC's Multi* predicate semantics; it uses its own simpler extensions, and Support Mode is how you pick which trade-off you want:

  • Support Aggregates handles multi-part and aggregate geometry, but limits you to Contains, Equals, Intersects, Touches and Within (plus Disjoint in SpatialFilter). Crosses, Overlaps and 9-character masks need Support All Predicates.
  • Support All Predicates gives you the full set including Crosses and Overlaps, but won't accept aggregates or multis. Add a Deaggregator (Flatten One Level, Flatten All Levels, or Preserve Hierarchy) and a GeometryFilter upstream.

It's also worth picking the transformer that matches your intent. SpatialRelator tags features with every relationship it finds, which is great for investigation. SpatialFilter tests a chosen list and routes Passed/Failed. Its two most impactful parameters are Filter Type (Single Filter, Multiple Filters or Filters First) and Pass Criteria (pass against one filter vs all of them), so those are the first ones to check.

One repair behaviour to know about: with GeometryValidator's Attempt Repair = Yes, FME splits a self-intersecting polygon at the intersection, so a single-part polygon can come out multi-part. Also, make sure all features are in the same coordinate system before testing spatial relationships (a Reprojector can help).

Related reading:


4. How do I produce a change log of what was inserted, updated and deleted between two datasets?

ChangeDetector is the transformer for this. Give it Original and Revised inputs, and it routes changed features according to Changed Output > Mode. With Insert & Update, new features go to Inserted and modified ones to Updated. With Upsert, both go to Upserted. Originals with no match go to Deleted, and matches go to Unchanged. Each changed feature is stamped with fme_db_operation (UPDATE, INSERT, UPSERT or DELETE); Unchanged features get no attribute.

fme_db_operation labels each change but isn't a saved log on its own. For a detailed record of what changed, use Changed Output > Mode = Insert & Update and set Detailed Change List Name. Updated features then get ADDED, REMOVED and UPDATED lists showing each changed attribute's original and revised values, plus flags if the geometry or coordinate system changed. These are list attributes, so expose them with an AttributeExposer (or flatten them with a ListExploder) before writing them out.

If you've used the FME Hub UpdateDetector before, it still works in existing workspaces, but ChangeDetector has exceeded it in both function and performance since 2019. Matcher is the more general alternative, producing Unchanged (SingleMatched) and Changed (NotMatched). Pairing it with a CRCCalculator lets you compare CRC values instead of geometry-heavy features, which is much faster on large data.

The parameter that matters most is Update Detection Key Attributes, a persistent key such as an ID or GlobalID. Without one, you'll learn what changed but not whether it was an update or an insert. From there:

  • Under Check Attributes, set Attribute Matching Strategy = Match Selected Attributes and list them in Selected Attributes.
  • Decide on Check Geometry / Match Geometry 2D.
  • Consider Lenient Geometry Matching for oriented points, where precision loss can otherwise report Updates that aren't real.

To apply the results to a database, connect Updated, Inserted and Deleted to the writer. Leave Unchanged out, or you'll write duplicate rows. Then set the feature type's Feature Operation to fme_db_operation, Table Handling to Use Existing, and specify a Match Column. For formats without harmonized handling, use fme_where instead, with the database field named first.

Related reading:


5. Should I use ODBC, and what do those SQL Server driver warnings mean?

Where a native format exists, that's the one to reach for: Oracle (with the Oracle client), Snowflake and SAP HANA (with JDBC), and many more. If a database isn't natively supported, an ODBC client connection using the ODBC 3.x reader and writer is a great fallback. For native Microsoft SQL Server connections, for all platforms, including Linux and macOS, JDBC is a supported route. The non-JDBC Microsoft SQL Server format uses OLEDB, which is Windows only.

About that warning ([NOTSUPPORTED] The specified ODBC Data Source uses an ODBC driver which conforms to an ODBC specification prior to the 3.0 specification): it means the DSN's driver predates ODBC 3.0 and needs upgrading. FME's third-party database libraries only work with 3.0 and later.

A few more things worth having on a checklist:

  • From FME 2025.1, Spatial and Non-Spatial are combined into one Microsoft SQL Server reader/writer (the JDBC format was combined in 2025.0). On earlier versions, read spatial tables with the Spatial reader, because the Non-Spatial reader won't read the geometry.
  • Choose Geography (lat/long) or Geometry (planar) deliberately.
  • If you see 'SSL Provider: The target principal name is incorrect', try the fully qualified domain name rather than the bare hostname.
  • Bulk Insert is INSERT-only. If the writer is set to update or delete, FME switches it off automatically and logs a warning.
  • FME doesn't check writer connection parameters when you add the writer, so use Test Connection to catch mistakes early.

Related reading:


And that's the November edition — eleven more questions answered. If you missed October, it covered distributed engines, forgotten admin passwords, email and proxy setup, Data Download, daylight saving and schedules, Java errors, zip files, CSVs and character encoding. Before that, the June and August editions covered stuck jobs, upgrades, SSO, SSL certificates, ArcGIS licensing, OAuth, Automations, dynamic workflows, floating licences and CVE enquiries.

Got a question you'd like to see answered? Leave a comment and it might feature in a future edition. Happy FMEing, and enjoy the weekend!