Connect your AI Agents to Jamf Pro in minutes

Merge lets you securely connect your agents to Jamf Pro and thousands of tools instantly

Available tools

list_advanced_computer_searches

List saved advanced computer searches as id and name. Use getadvancedcomputer_search for a search's criteria and matching computers. Returns the full list (no paging).

get_advanced_computer_search

Get one advanced computer search by ID: its criteria, display fields, and the computers it matches. Use listadvancedcomputer_searches to find IDs.

list_buildings

List buildings with paging (page/page_size), server-side sort, and an RSQL filter.

get_building

Get one building by ID. Use list_buildings to find building IDs.

create_building

Create a building. Requires a name; optionally set address fields. Returns the new building including its ID.

update_building

Update a building by ID. Only the fields you pass change; pass "" to clear an address field. Use list_buildings to find building IDs.

delete_building

Delete a building by ID permanently. Use list_buildings to find building IDs.

list_categories

List categories with paging (page/pagesize), server-side sort, and an RSQL filter. Categories organize scripts and policies; use this to find categoryId values for createscript.

get_category

Get one category by ID. Use list_categories to find category IDs.

create_category

Create a category. Requires a name; optionally set a Self Service priority. Returns the new category including its ID.

update_category

Update a category by ID. Only the fields you pass are changed. Use list_categories to find category IDs.

delete_category

Delete a category by ID permanently. Jamf allows it while scripts still use the category, and they keep pointing at the deleted ID, so move them first with updatescript (categoryId '-1' for none). Use listcategories to find category IDs.

list_computer_groups

List computer groups (both smart and static; the issmart flag distinguishes them). Use getcomputer_group for one group's detail. Returns the full list (no paging).

get_computer_group

Get one computer group by ID: issmart, site, a smart group's criteria, and the member computers (id, name, serial number). Use listcomputer_groups to find group IDs.

list_computers

List computer inventory with paging (page/pagesize), server-side sort, and an RSQL filter, e.g. hardware.serialNumber=="C02X". Defaults to GENERAL (name) and HARDWARE (serial number). section replaces the defaults, so include both with others such as OPERATINGSYSTEM, DISKENCRYPTION (FileVault), SECURITY, APPLICATIONS, or GROUPMEMBERSHIPS. Use getcomputerinventory for one computer.

get_computer_inventory

Get inventory detail for one computer by ID. Defaults to GENERAL, HARDWARE (serial number), OPERATINGSYSTEM, and USERANDLOCATION (assigned user). section replaces the defaults, so include GENERAL for the name. Others: DISKENCRYPTION (FileVault), SECURITY, APPLICATIONS (installed apps), GROUPMEMBERSHIPS, EXTENSIONATTRIBUTES, CONFIGURATIONPROFILES. Use listcomputers to find IDs.

list_departments

List departments with paging (page/page_size), server-side sort, and an RSQL filter.

get_department

Get one department by ID. Use list_departments to find department IDs.

create_department

Create a department. Requires a name. Returns the new department including its ID.

update_department

Update a department by ID. Only the fields you pass are changed. Use list_departments to find department IDs.

delete_department

Delete a department by ID permanently. Use list_departments to find department IDs.

list_computer_extension_attributes

List computer extension attributes (custom inventory fields) as id, name, and enabled. Use getcomputerextension_attribute for an attribute's data type and description. Returns the full list (no paging).

get_computer_extension_attribute

Get one computer extension attribute by ID, including its data type and description. Use listcomputerextension_attributes to find IDs.

list_mobile_device_groups

List mobile device groups (both smart and static; the issmart flag distinguishes them). Use getmobiledevicegroup for one group's detail. Returns the full list (no paging).

get_mobile_device_group

Get one mobile device group by ID: issmart, site, a smart group's criteria, and the member mobile devices. Use listmobiledevicegroups to find group IDs.

list_mobile_devices

List managed mobile devices (iOS/tvOS) with serial numbers and model details. Supports paging (page/pagesize) and server-side sort. OS version, management, and supervision state are not in the list; use getmobile_device for those.

get_mobile_device

Get one mobile device's inventory detail by ID. osVersion and managed are top-level; model, supervised, and storage are in the block for the device's OS (ios, tvos, watchos, or visionos). The assigned user is in location and group memberships in groups. Pass include for installed apps, profiles, or certificates. Use listmobiledevices to find IDs.

list_policies

List policies as {id, name} summaries. Use getpolicy for a policy's full detail and updatepolicy to change a policy.

get_policy

Get one policy by ID. Core fields (name, enabled, frequency) are under 'general'. Which triggers are on is in the general.trigger* flags and general.triggerother; general.trigger is one label Jamf derives, not the full set. Use list_policies to find policy IDs.

update_policy

Update a policy by ID: name, enabled, frequency, the trigger flags (check-in, enrollment complete, login, network state change, startup), and the custom event trigger. Only the fields you pass are changed. Returns only success and the ID; use getpolicy to confirm. Use listpolicies to find policy IDs.

list_scripts

List scripts with paging (page/pagesize), server-side sort, and an RSQL filter. Items omit the script body; use getscript for one script's contents.

get_script

Get one script by ID, including its contents. Use list_scripts to find script IDs.

create_script

Create a script. Requires a name; optionally set priority, contents, and a category. Take categoryId from listcategories: Jamf accepts an ID that doesn't exist. Returns the new script, including its ID, without the body; use getscript to read it.

update_script

Update a script by ID. Only the fields you pass change; "" clears a text field. To move it, pass categoryId from listcategories ('-1' for none): Jamf accepts an ID that doesn't exist. Returns the stored script without the body; use getscript to read it. Use list_scripts to find script IDs.

delete_script

Delete a script by ID permanently. Use list_scripts to find script IDs.

list_sites

List all sites in the Jamf Pro instance. Sites partition resources across organizational units. Returns the full list (this endpoint has no paging).

list_users

List Jamf users as id and name only. Use get_user for a user's full name, email, phone, and position. Returns the full list (no paging).

get_user

Get one user by ID, including full name, email, phone, and position. Use list_users to find user IDs.

validate_credential

Validate Jamf credentials by exchanging a token and reading the Jamf Pro version. Returns {success, message}.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Jamf Pro  MCP server

FAQs on using Merge's Jamf Pro  MCP server

Explore other MCP servers built and managed by Merge

doordash
DoorDash
dropbox
Dropbox
duffel
Duffel
dynamics365
Dynamics 365 Sales
exa
Exa
excel_gcc
Excel GCC High
expensify
Expensify
figma
Figma
firecrawl
Firecrawl
fireflies
Fireflies
firehydrant
FireHydrant
foursquare
Foursquare
frameio
Frame.io
freshbooks
FreshBooks
freshdesk
Freshdesk
freshservice
Freshservice
front
Front
gamma
Gamma
github
GitHub
gitlab
GitLab
gmail
Gmail
goldcast
Goldcast
gong
Gong
google_ads
Google Ads

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now