NativeBIM by NativeCAD

NativeBIM by NativeCAD

Privacy: what the NativeBIM IFC server sends, and what it keeps

This covers nativebim-mcp, the NativeBIM MCP server for IFC models. It describes what the server software sends and stores. How featureboard.ai stores what it receives is covered by the featureboard.ai terms. Where this statement and the software disagree, the software's behavior is what happens, and this statement is corrected.

In short

The four messages

MessageWhenSent toTurn it off
Usage countsonce per UTC day, after the day endshttps://featureboard.ai/api/telemetryNATIVEBIM_TELEMETRY=off, DO_NOT_TRACK=1, or the telemetry setting
Failure reportswhen NativeBIM itself fails (an internal error, not a refused request)https://featureboard.ai/api/bugsthe same switches, or setFailureReports(false). Free licenses cannot turn these off.
Bug reportsonly when bim_report_bug is calledhttps://featureboard.ai/api/bugsdo not call it, or set NATIVEBIM_BUGS_URL=local
Update checkon a session's opening tool call, then at most once every 6 hours while the server is in usehttps://featureboard.ai/nativebim/releases/latest.jsonNATIVEBIM_AUTO_UPDATE=off

These three addresses can be changed with NATIVEBIM_TELEMETRY_ENDPOINT, NATIVEBIM_BUGS_URL and NATIVEBIM_UPDATE_URL. Setting the telemetry or bug address to a value that is not a URL, such as local, keeps everything on the machine. Plain http:// is accepted only for addresses on the same machine.

1. Usage counts

There is one message per install, per server process, per UTC day. These are all its fields; the code drops any other field (telemetry/schema.js):

FieldWhat it is
schemaVersion, schema, product, surface, kindfixed labels: 1, nativebim.usage/1, nativebim, mcp, usage
ida random identifier for this message, so a retried upload can be recognized
installthe pseudonymous install id (see Identifiers)
daythe UTC date the counts cover
app.version, app.edition, app.kernelthe NativeBIM version, how it was installed (mcpb, plugin, npm, dev, unknown), and the bundled NativeCAD kernel version if there is one
os.platform, os.arch, os.nodefor example win32, x64, v22.11.0
sessionshow many times the server started that day
tools[]for each bim_* tool: how many calls, and how many of those failed
codes[]for each NB_* error code: how many times it occurred
licence.kid, licence.tieronly for keys whose terms make usage reporting a condition (the non-commercial free key). These are the key id and the tier.

Tool names come from NativeBIM's own list. A name outside that list is counted as _other, and an unknown code as _OTHER. Each field must be a fixed value, one of a closed list of words, a whole number, a date, or match a tight pattern, so the message has no field that could hold free text. A test checks this (tests/mcp/telemetry/schema.test.js).

A day's counts are sent after that day ends, when the server is next running. They stay on disk until then, and are written there every 10 minutes and at shutdown. If an upload fails, the message stays on disk and is retried later, with the wait growing from 1 minute up to 6 hours. If the server refuses a message outright, it is deleted. The queue holds at most 120 messages or 1 MB; past that, the oldest are deleted.

2. Failure reports

These are sent when NativeBIM itself breaks: a tool throws an error it did not expect, or returns an *_INTERNAL code. A refused request is not a failure. That covers a bad argument, a missing license or a selector that matches nothing. Fields:

The error message itself is never sent, because messages can quote values and file names. Before sending, each report is checked field by field. Any field without a rule is dropped. The final bytes are checked once more for anything that looks like a path, file name, URL, e-mail, GlobalId, GUID or IFC record, or that matches a name from the open models. If anything matches, the report is not sent.

Limits:

Who sends them (the same rule as NativeCAD):

LicenseFailure reports
Free (self-serve or non-commercial), including a free NativeCAD key used for evaluationalways sent. The off switches do not stop them; they still stop usage counts.
Paid, owner, or an evaluation on a paid keysent unless you turn them off
No keysent unless you turn them off

3. Bug reports you write (bim_report_bug)

These are sent only when bim_report_bug is called. Fields:

Before anything is sent, these are replaced in the typed text with [redacted:<kind>]:

Names are replaced before the pattern rules run, longer names before shorter ones, so a known path or file name goes as a whole. These are pattern-based rules. They can miss a value, for example a name that is not in the open models and does not look like a path, file name, identifier or key, or the leading words of a file name with spaces that is typed in a sentence rather than as part of a path. The rest of the text is sent as typed. Do not paste model content or prompts into a bug report.

A report may carry a small repro, such as a few lines of IFC, only with your consent. When your AI app supports MCP elicitation, NativeBIM asks you directly (showing what would be attached) and your answer decides; otherwise the assistant must pass reproConsent: true with it. That is the one way model content can reach us, and it is your choice. Paths, file names, URLs, e-mail addresses, license keys and this machine's names are still replaced in it; IFC records, GlobalIds and model names are kept, because they are the repro.

Limits:

A copy of every report, after redaction, is kept in ~/.nativebim/bugs/bugreports.jsonl. The receipt shows that location with your home folder written as ~ (%USERPROFILE% on Windows), so the assistant does not see your account name; the file itself sits at the full path on your disk. The receipt gives the report id. Quote it to support@featureboard.ai.

4. Update check

This is a request for the public file latest.json, at most once every 6 hours while the server is in use. The request has no body and no identifiers. Other requests happen only when something changed:

Whether this install is in a staged rollout is decided on the machine, from a random id in ~/.nativebim/update/state.json. That id is never sent. A release installs only if:

NativeBIM keeps the previous version and goes back to it if the new one fails to start three times.

License checks

Keys (CSLV1-...) are checked on the machine. No network call is made to check one.

NativeBIM looks for a key in three places:

  1. NATIVEBIM_LICENSE_KEY;
  2. ~/.nativecad/license.json, NativeCAD's file, which NativeBIM reads but never changes;
  3. ~/.nativebim/license.json, written by bim_license activate and readable only by you (mode 0600).

The key itself is never sent anywhere and never written to a log. The key id is the last 16 characters of the key. It is shown in bim_license status and is sent only where this page says so. featureboard.ai issued the key, so it can match a key id to the license it issued.

The list of revoked key ids is signed. NativeBIM reads it from disk. If the list is missing or out of date, no key is blocked because of that.

What is never sent

Identifiers

IdWhat it isWhere it is sent
Usage install id20 characters, derived on the machine from a salted one-way hash of the Linux machine id (/etc/machine-id or /var/lib/dbus/machine-id) or, elsewhere, of host name plus user name. The hash is one-way, but the salt is public, so someone who already has a guess at your host name and user name can check it against the id. The id is pseudonymous, not anonymous. It does not match NativeCAD's id for the same machine. To pin or reset it, write any 20 lowercase letters or digits to ~/.nativebim/telemetry/install-id.usage counts
Failure-report install ida random UUID, kept in ~/.nativebim/bugs/install-idfailure reports
Update install idrandom, kept in ~/.nativebim/update/state.jsonnever sent
Key idthe last 16 characters of the license keyusage counts and failure reports, only for the free keys described above

What stays on your machine

Everything is under ~/.nativebim/, or under the folder named by NATIVEBIM_STATE_DIR (or its alias NATIVEBIM_HOME) if either is set; NATIVEBIM_STATE_DIR wins when both are. You can delete any of it.

PathContents
license.jsonthe key you activated
revoked.jsonthe signed list of revoked key ids
telemetry/install-id; counts-<pid>.json (today's counts); spool.jsonl (messages waiting to be sent); state.json (retry timing); settings.json (your choice to turn things off)
bugs/bugreports.jsonl (your reports after redaction, up to 2 MB plus one older file); spool.jsonl (reports waiting to be sent); state.json (limits and grouping); install-id
update/state.json, cache.json (the last latest.json), release-keys.json
install-backups/the previous version, kept so an update can be undone
audit/audit.jsonl, the edit audit log (see below)

The audit log is a local record of every committed edit, undo, redo and IFC save, so a professional can show what was changed and when. Each line holds the time, the tool name, a hash of the edit instructions (not the instructions), a label for who made the change (NATIVEBIM_AUDIT_ACTOR, or local; your account name is not read), the server process id, the hash of the model file before and after, counts of records added, changed and deleted, the validation result, tool versions, and the message you gave the edit with paths, file names, e-mail addresses and IFC ids removed. It holds no file contents, element names, file names or paths. Lines are chained by hash so an edited or removed line can be detected. Nothing in it is ever sent: the update check, usage counts and bug reports do not read it. The design-log export writes it to a file you choose. Keep it as long as you need to; NativeBIM never deletes it, and turning telemetry off does not touch it.

Turning usage counts off with the telemetry setting also deletes the waiting messages, the counts and the install id.

Turning things off

SettingEffect
NATIVEBIM_TELEMETRY=off (also 0, false, no, none)no usage counts. No failure reports, except on a free license.
DO_NOT_TRACK=1the same
CI set to any true valuethe same. Automated test runs are never counted.
NATIVEBIM_TELEMETRY_ENDPOINT=localcounts are kept on the machine and never uploaded
NATIVEBIM_BUGS_URL=localbug and failure reports are only saved on the machine
NATIVEBIM_AUTO_UPDATE=offno update check
NATIVEBIM_SANDBOX=1nothing leaves the machine. Reports wait on disk until a later run without the sandbox.

When NativeBIM is started by its own test suite (node --test), nothing is reported unless NATIVEBIM_TELEMETRY=on is set, and then only to an address on the same machine.

A server started with usage counts turned off writes no telemetry files at all.

Notices

NativeBIM is licensed software. It does not provide design, engineering or other professional services. Outputs are drafts for review by the licensed professional of record.

Sheets are marked NOT FOR CONSTRUCTION by default. Areas are computed by NativeBIM, not a certified BOMA measurement.

Revit is a trademark of Autodesk, Inc. NativeBIM is not affiliated with, endorsed by or sponsored by the companies and organizations named here. Product names and marks belong to their owners.

Telemetry (usage counts and failure reports) never includes models, drawings, file names, paths or prompts. Bug-report text goes through a pattern-based redactor that can miss a value, and a short repro goes with it only if you choose to attach one. NativeBIM sends daily usage counts, automatic failure reports, bug reports and an update check every 6 hours to featureboard.ai; the privacy statement lists every field. Security and privacy · privacy statement.

NativeBIM is provided as is, without warranty of any kind. To the extent the law allows, FeatureBoard Labs Incorporated is not liable for indirect, incidental or consequential damages, lost profits or lost data, and its total liability is limited to the license fees paid in the 12 months before the claim. Read the license.