Skip to content

History / MCP Server

Revisions

  • docs: update the wiki for v1.35.0 --dry-run for Protect, School and Pro uploads; writes no longer re-sent; pro backup 0600/0700 and credential warning; terminal-safe output and CSV formula guard; --select columns in select order and --page projection; --from-file line checks; packages upload declares Content-Length, goes straight to JCDS on a Jamf Cloud distribution point and reports an unhashed large package as unverified; MCP refuses api-roles, api-integrations writes and supervision-identities download. Wire-checked against v1.35.0 on a platform sandbox profile. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Oct 29, 2026
  • docs: update the wiki for v1.33.0 pro setup --scope standard withholds the privileges that grant privileges or logins. import-profile keeps the profile as installed and takes over where it can; --convert replaces --legacy. pro bulk moves to classic-policies enable/disable and group add-members/remove-members; send-command refuses ten of twelve commands. Device actions exit 7 on a partial failure and --from-file lists take UDIDs, management IDs and names. MCP run_command refuses the writes that change who can log in. Gateway refusals drop from 59 to 53 (restart, shutdown, remote desktop now routed). Generated Pro writes take --from-file; Classic profile writes edit the element the server reads; gateway uploads go out chunked; -vv traces wire headers and -v works for Protect, School and Security Cloud. make sync-specs is retired; the skill and hook name real spec files. Wire-checked against v1.33.0 on platform-nmjspp. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Oct 9, 2026
  • docs: update the wiki for v1.32.0 and add Blueprint Conversion Utility Device secrets move to --new-password-file, --pin-file and --unlock-token-file, and set-recovery-lock clears only with --clear. --set refuses credential fields on Pro, Platform and Security Cloud. scope --computer/--mobile-device resolve to an ID and need a Read privilege. --all honours a smaller --page-size and halves a timed-out page; a sent write or a timeout is no longer retried. MCP list_commands takes prefix/query and returns NDJSON; run_command refuses local paths outside --input-dir. Smaller notes on Classic --name, --group, School and Protect identifier matching, the Radar host and the redactor. Wire-checked against v1.32.0 on pro-nmartin, platform-nmjspp and school-nmartin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Oct 3, 2026
  • docs: update the wiki for v1.31.0 v1.31.0 adds two leaves (1,764 -> 1,766) and one flag, all serving the new cross-product HTML fleet report: - New page Fleet Dashboard, covering `dashboard`: the two collection tiers and their costs, `--include-profile`'s different-product rule, why the destination is `--out-file` rather than a redirect, the four global flags it does not honour, and the exit-code table. - MCP Server: `generate_report` is a third tool, so "two generic tools" and the leaf count were both stale. Also corrects the security model, which claimed `run_command` rejects "five" flags matched exactly. It now matches seven by prefix and blocks eight command paths outright, `dashboard` among them. - Configuration & Profiles: `config set-report-dir` and the global `report-dir` key, including the world-writable refusal. - Setup Guide, Error Handling, Claude Code Skills, Home and the sidebar pick up `--report-dir`, dashboard's exit 7, and the new page. Verified against a v1.31.0 build: every command and flag exists in `commands -o json`, and `dashboard` was run live against an environment-scoped platform profile to confirm a product the credential cannot reach is omitted with exit 0 rather than failed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Sep 18, 2026
  • docs: update the wiki for v1.30.0 The breaking change is the Classic `scope` subcommands. They took the resource name as a bare positional through v1.29.0 and now take `[<id>]` with `--name` as the alternative, refused together, so every scope example on Jamf Pro Commands and Pro Workflows was an exit 2. The single flag/section table went with it: each command registers only its own resource's categories now, so a cross-family flag no longer exists on it and one table for nine resources was wrong on seven. Replaced with a per-resource matrix read off the catalog, plus the section validity each category carries. `--ibeacon`, `--class` and restricted-software `--user` are documented as newly writable, and `--class` gets the two-request mechanism, since an operator counting requests needs it. `classic-user-groups` is gone from the scopeable list. It has never carried `scope` in any release; checked against both the v1.29.0 and v1.30.0 catalogs. `open` is new in all four product namespaces and is documented on each product page, with the cross-product pattern on CLI Patterns: the print- instead-of-launch triggers, `--field url`, and the per-product URL ladders, which differ. `pro open` takes one of 139 named sections and is the only one that can send a request. The section list is not pasted anywhere; `pro open --list` is the source. Also: the published Classic API caught up to 11.32.0, so the "which trails the Pro API's version" caveat is gone from the binary and from the four pages quoting it, and `pro classic-computer-configs` is now recorded as dead rather than unpublished. `preview` is a new catalog key on the thirteen AI Governance commands. `pro sso-settings oidc-broker-config` and `pro jamf-pro-notifications delete --all` are documented, the latter with the v1.29.0 defect where `-n` sent a live tenant-wide DELETE. The platform SDK's move to the jamf org is on Architecture & Development, with jamfprotect-go-sdk called out as staying put. Every invocation on every page was resolved against `commands -o json` from the v1.30.0 binary and every long flag checked against that command's own flag set; two pre-existing `security ztna-gateways create --file` examples were stale since v1.29.0 and are now `--from-file`. Quoted CLI output was captured from the binary against a live instance and a gateway profile. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Sep 16, 2026
  • docs: rewrite the wiki as instructions, and run stop-slop over it Every page read as an essay. Each section now answers what you type, what happens, and what to watch out for when that changes what you type. Deleted throughout: the meta sections about the pages themselves ("Do I need this page?", "What this page is not", "The five ways this can break you", "Why the names changed"), the design rationale, the history of what the CLI used to send, and the postmortem narration that belongs in the repo's docs/solutions. Prose drops from 59,853 words to 47,515, and no page grew. Stop-slop pass over all 27 pages: | marker | before | after | |---|---|---| | em dashes in prose | 180 | 0 | | banned adverbs | 332 | 0 | | binary contrasts ("not X, it's Y") | 30 | 0 | | sentences opening on a Wh- word | 25 | 0 | | throat-clearing phrases | 1 | 0 | The 139 remaining adverb matches are `also`, `still`, `already` and `exactly`, none of them on the skill's list, and `still` is load-bearing here: an endpoint that still answers is the case the refusal wording exists for. The 165 remaining universal claims are counted or precise ("prepended to every call", "never in a flag value"), which the rule permits. Six fabricated transcripts corrected against the binary: - Ten blocks showed a `message:` label the CLI never prints. On a terminal it prints the message unlabelled then `hint: `; under `-o json` it prints the error envelope. Both forms now appear where each applies. - `jamf-cli pro icons list` was the example for "the retired name warns, then runs". `pro icon` ships no `list`, so it warned and then exited 2, which is the opposite of the point. Replaced with `pro icons get 1`. - The 401, 404 and 429 hints quoted three strings that are not in `internal/client/client.go`. Replaced with what it emits. - The payload-verification warning showed one comma-joined line with a parenthetical. `formatStoredPayloadWarning` emits a header plus one indented `- path: reason` line per finding, capped at three. Verbatim CLI output inside code blocks keeps its em dashes and its wording. Five remain on that basis, two of them in the `pro setup` credential-source menu, which the CLI itself prints with an em dash. Structural checks: code fences balanced, no table column mismatches, every in-page and cross-page anchor resolves after 24 heading renames, and no command, flag, table row or endpoint lost. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Sep 11, 2026
  • docs: update wiki for v1.29.0 — the pro command rename v1.29.0 derives every `jamf-cli pro` resource name from the Jamf Pro API's own OpenAPI tags and URL paths instead of from the filename each resource's paths were split into. 163 resources became 135, and 100 former names resolve with a warning until 2027-03-09. New page, `Pro Command Renames`, is the migration reference: the full 96-name table, the four aliases that redirect two tokens deep, the three withdrawn names, the 48 invocations an alias cannot cover, the three former leaves that now print help at exit 0 where they returned data, the nine sub-path command groups, the 19 write operations that were being deleted at generate time, and a script-tree migration recipe. Linked from Home and the sidebar. Every page naming a `pro` command is updated to the new names — 100 occurrences across seven pages — and the retired spellings now appear only where the page is explaining them. Corrections found while verifying against the v1.29.0 binary and two live tenants: - The gateway refused-command list was 75 and is 59. The Classic patch family and `pro policy-properties` are served again; `pro static-computer-groups` no longer exists as a name, so the successor transcript it illustrated is dead and the curated successor table is empty. - An organization-scoped credential on `platform audit` answers `REQUEST_CONTEXT_NOT_PROVIDED`, not `INVALID_REQUEST_CONTEXT_TYPE`; the `'tenant'` in that second message means a tenant header really was sent. - AI Governance is environment-scoped, not organization-scoped. Its spec declares `environment` alone and the wire agrees. - Security Cloud device groups: `update` is the v2 PUT and answers 204 with no body; only the implicit "Default Group" comes back without an `id`, not the whole collection. - `platform setup` checks the scope ID and reports declared scope levels; it no longer returns a Security Cloud entitlement verdict. - `config add-profile` verifies credentials before writing and gained `--no-verify`; `pro setup` gained `--credentials existing|create`. - Classic `--scaffold`/`--set` coverage is 114 of 117, not 111. - `pro backup --resources` does not reject an unknown token alongside a recognised one — documented as it behaves. - The MCP catalog carries `scopes`, and `run_command` returns combined stdout+stderr, so a retired-name warning breaks JSON parsing downstream. - `pro policies` in the MCP page's examples does not exist; it is `pro classic-policies`. Adds the v1.29.0 behaviour changes throughout: every command prints through one output formatter, `--select`/`--compact` narrow rows for every column format, a cobra usage error exits 2, a stray positional is refused on every leaf that documents none, `--scaffold` reaches the commands that take positionals, name lookups accumulate matches across pages and report an unaddressable match, `apply` on the six gateway resources, and a destructive `x-action` sending its own HTTP method. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Sep 11, 2026
  • docs: rewrite the wiki prose for voice and first-party register Two passes over all 26 pages, prose only. No command, flag, path, exit code, privilege slug, count or version string changed; code blocks are byte-identical to the previous revision apart from one hand-written shell comment. Voice pass: - Removed every prose em dash (1050 of them). Fenced output and the one not-applicable table placeholder keep theirs. - Cut the marketing register: the "See It in Action" heading, "instant snapshot", "unlocks", "and more", "comprehensive", and the "no scripting, no Postman, no guesswork" negative triple on the front page. - Cut filler adverbs where they carried no technical load, and kept the ones that do: "silently" means no error is raised, "legitimately" marks a valid tenant state, "deliberately" marks a design choice rather than an oversight. - Named the actor where the passive voice hid it: the CLI appends the hint, root.go picks the provider, backup writes the documents, you create the integration. - Renamed nine version-suffixed headings to the parenthetical style already used elsewhere, updating every inbound wiki link in the same pass. First-party pass, since this wiki is published by Jamf and read as though an outside integrator wrote it: - Jamf-as-external-actor now names the system that acts: "before the gateway sees them", "Jamf Protect publishes analytics centrally", "the recommended level for new integrations", "Public-beta credentials stopped working at GA". - "report it to Jamf" is now "report it to Jamf Support". - Product names, Jamf PI-827, the repository URLs, and Jamf-managed / Jamf-published as object classes are untouched; the Protect API returns jamf: true, so that vocabulary is the product's own. - No first-person plural introduced. Two blocks still quote the CLI's edgeBlockedNote verbatim, which says "not Jamf and not your API privileges" and "report it to Jamf". Those stay until the string changes in internal/client/client.go. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Sep 4, 2026
  • docs: update wiki for v1.28.0 — the Platform API GA migration Two new pages: - Platform API GA Migration: the base URL moves to {region}.api.jamfcloud.com with no /api segment, the pre-GA {region}.apigw.jamf.com is retired and refused by name, public-beta credentials were revoked, and the scope travels in a header rather than a /tenant/{id} URL segment. Carries the refused-command table, exit code 8 and JAMF_CLI_ALLOW_UNPUBLISHED. The table is generated from `commands -o json`, not transcribed: it is 75 entries, not the 48 the repo's own guide claims, and the 24 MDM device actions the guide omits get their own section — losing lock, restart, shutdown and lost mode is the sharpest consequence of a gateway profile. - Jamf Platform Commands: the new `platform` namespace — AI Governance, Jamf Account (organization scope, US-only) and the platform audit event log, which is not `pro audit`. Both were wire-verified against organization-, environment- and tenant-scoped gateway credentials, so the quoted output is real: the exit-8 refusals and their successor sentence, the method-specific "declares GET on this path but not POST" detail behind the device actions, the 403 that names Jamf Account's own picker name, and the retired-host refusal. Per-product updates: - Security Cloud: 68 new commands. The product now has two halves that take different credentials — the Radar API pairs from `security setup` and the platform gateway from `platform setup` — so both pages lead with which half a command belongs to and how to ask the binary. An environment-scoped credential reaches the whole gateway-served half, which corrects the tenant-ID-required framing. - Protect: `backup`, `restore` and `analytics overrides`, none of which the changelog mentions. Includes the prune refusals, the two 0600 files that capture bearer tokens verbatim, and that git drops the mode. - Pro: App Installers are published and no longer refused; Classic writes gained --from-file, --set and --scaffold, with the three refusal messages verbatim and why Classic hides a mistake the server answers 201 for; computers-inventory moved to v4. - Platform API: ddm-reports declaration/device `get` are removed, and the successors require --filter. - Setup, Configuration, Secrets: the three scope levels, the GA host, and that JAMF_AUTH_METHOD is not a variable — the gateway host alone selects platform auth. - Reference pages: exit 8 and the two 403 vocabularies, the three --set dialects, [] instead of null, labelled retries, Go 1.27, the SDK spec source and the committed gateway-coverage manifest. Every one of the 1,295 jamf-cli invocations across the wiki was checked against `commands -o json`; wiki links, heading anchors and code fences all resolve. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Sep 3, 2026
  • docs: update wiki for v1.24.0 (+ fix #297, #295) v1.24.0 features: - Platform: blueprints import-profile denylist model (wider payload support, System Policy – Kernel Extensions), smart Custom Settings (MCX) unwrapping, --computer-group/--mobile-device-group scope override + empty-scope guard - Platform: benchmark-reports --name (resolve by benchmark title) - Pro: classic-computer-history / classic-mobile-history --subset (server-side section narrowing) and --serial alias for --serialnumber (also on classic-mobile-devices get) - Correct classic read-only resource note (history is get-only; classic-accounts is list-only) Fix #297: ddm-reports `device declarations` and `declaration devices` require --filter — added it to every example across Platform API/ Workflows, School, Setup Guide, and CI/CD pages, with the allowed RSQL fields documented. Fix #295: MCP Server page now documents OpenAI Codex CLI setup (~/.codex/config.toml + `codex mcp add`), explains ChatGPT is not a direct fit (stdio-only server vs ChatGPT's remote HTTPS MCP requirement) with the bridge caveats, and answers the read-only question (no CLI flag; enforce via a read-only Jamf API role). All commands/flags verified against the v1.24.0 binary catalog. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Jul 17, 2026
  • docs: update wiki for v1.21.0, v1.21.1, and v1.22.0 - Jamf Pro Commands: classic-ldap-servers full CRUD (v1.21.0); backup prestages resource with embedded device scope (v1.21.0); new Jamf Protect Deployment Tasks section covering retry-failed (v1.22.0) - Jamf Protect Commands: network-content-filter-profile download + --unsigned on signed profile downloads (v1.21.0) - MCP Server: run_command hardened to reject model-supplied instance/credential/output flags and pinned to the launch profile (v1.21.0); list_commands destructive marker (v1.22.0) - CLI Patterns: commands catalog privileges/destructive fields, agent-context command, determinate --all pagination progress (v1.22.0) - Error Handling: 403 hint enrichment with required privilege names (v1.22.0) - Output Formats: ndjson format (v1.22.0) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Jul 3, 2026
  • docs: add MCP Server page for v1.20.0 (mcp serve) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    @neilmartin83 neilmartin83 committed Jun 19, 2026