Skip to content
SZ-MCP
Get Support

Configuration bundle

The configuration bundle is your organisation’s own setup as one YAML document: alert rules, boards, notes, locations, registered devices, placements, tags, lint waivers, MOPs, synthetic checks, escalation levels and integration settings. Keep it in git, review changes to it, or copy a setup into another organisation. It holds no secrets.

Every member can export it and check a file against the organisation. Applying a file needs the engineer role or above. An import is always a dry run unless you apply it.

You can use it two ways:

WhereExportImport
Dashboard: Configure › Team, the Configuration bundle cardDownload YAMLCheck a file…, then Apply
Claudeorg.export_bundle({ sections? })org.import_bundle({ yaml, sections?, prune?, apply? })

Twelve sections, written in this order. A section holds only what people set up in SZ-MCP; items that came from NetBox are left out.

SectionDashboard labelItems are matched by
rulesAlert rulesRule name
boardsBoardsBoard name
notesNotesNote target and text
locationsLocationsLocation id (location:<slug>/…)
devicesRegistered devicesMAC address
placementsPlacementsInventory id
tagsTagsInventory id
lintWaiversLint waiversrule@key
mopsMOPsMOP title
probesSynthetic checksCheck name
escalationsEscalationsEscalation name
integrationsIntegrationsExported for reference only (see below)

The document starts with kind: sz-mcp-bundle and version: 1, the export time and the organisation’s name, then sections:.

Not in a bundle: the controller login, members and roles, the email contacts, the webhook and Jira settings, the write guard policy, the privacy settings, the scrape token, and every secret.

  1. Open Configure › Team in the organisation you want to change, and click Check a file… in the Configuration bundle card. It accepts .yaml, .yml or .json, up to 3 MB.

  2. Read the plan. For each section it shows how many items would be Created, Updated and Deleted, and how many are the Same. Hover over a count to see the item names. Invalid items and skipped items are listed below the table with their reasons.

  3. To also delete what the file doesn’t name, turn on Prune (delete what the file doesn’t name). The plan is checked again.

  4. Click Apply N changes and confirm. Without prune, the dialog says “Items are created and updated; nothing is deleted.” With prune, it says “Prune is on: what the file’s sections don’t name is deleted here.”

If the organisation already matches the file, the card says “Nothing to change: this organisation already matches the file.” Viewers and operators see the plan, with “An engineer or admin can apply it.” instead of the button.

Through Claude, org.import_bundle returns the same plan. Claude shows you the plan and asks before calling it again with apply: true. In a new organisation, run inventory.sync() first, so the placements and tags that name inventory ids can be resolved.

Per section: create, update (with the fields that change), delete (only with prune), unchanged, and skipped. Skipped items are ones that can’t be applied here, each with a reason. Examples are an entity this organisation’s inventory doesn’t have yet, a missing location, an item that exists here from NetBox, or an integration.

  • Prune deletes items the file’s sections don’t name. It is off by default and never touches integrations. Use sections to limit an import, and pruning, to the sections you name.
  • A board that is updated keeps its id and its share links. A board deleted by prune loses its share links.
  • Escalation addresses that are not organisation members get a confirmation email, and are mailed only once they confirm.

A bundle carries no secrets, so SZ-MCP never writes an integration from one. Integrations are exported without their secrets, for reference. On import, each one is listed under skipped when it is:

  • missing: “not set up here: an admin adds it on the dashboard (Settings › Integrations) with its secret”;
  • different: “differs from the bundle: an admin changes it on the dashboard (a new target needs the secret again)”.
ActionRole
Export, and check a file (dry run)Every role
ApplyEngineer, admin or owner
Apply a file that changes escalation levelsAdmin or owner

An engineer applying a file that would change escalation levels gets an error on the escalations section, “changing escalation levels needs an admin (your role: engineer); leave the section out with sections: […]”, and nothing is changed. Leave that section out, or ask an admin.

Validation is all or nothing; applying is not. Every item in every section is validated first. If any is invalid, nothing changes, and the result says “Some items are invalid (see errors in plans); nothing was changed.”

Once everything is valid, items are applied one by one. An item that fails while being applied is reported under failures, with its section, key and message, and the rest is still applied. The dashboard says “Applied. N item(s) failed; see below.” and lists them. Nothing is rolled back. Check the failed items, fix them, and import again: items already applied show as unchanged.

LimitValueAt the limit
Bundle size3 MBThe card refuses the file: “The file is over 3 MB.” Through Claude, a larger yaml is refused by the call’s argument check
Dashboard exports and imports10 a minute per organisationrate_limited: “Up to 10 a minute.”
Escalation levels10 per organisationAn error on escalations: “at most 10 escalation levels; this would leave N”
Synthetic checksintervalMinutes 5, 10, 15, 30 or 60; maxAps 1 to 5An error on the item
ErrorMessage
invalid_yamlThe YAML parser’s message
invalid_bundlekind must be sz-mcp-bundle (got …)., sections must be a mapping of section name to its items., or “Some items are invalid (see errors in plans); nothing was changed.”
unsupported_versionThis server reads bundle version 1; the document is version …
write_blockedYour role in this organisation (…) can't import a bundle; an engineer or admin can. A dry run (no apply) works for every role.

Sections in the file that SZ-MCP doesn’t know are ignored and listed under ignoredSections. A name in the sections argument that isn’t one of the twelve is refused by the call’s argument check.

The write_blocked message comes back through Claude; on the card, viewers and operators get no Apply button.