Desktop Management MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Desktop Management MCP Serverfind device by serial ABC123"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Desktop Management MCP Server
Standalone Model Context Protocol (MCP) servers for JAMF Pro and Microsoft Intune. AI assistants (Claude Code, Gemini CLI, OpenCode, etc.) connect over HTTP and call device-management tools.
Architecture
MCP Client ──HTTP──▶ jamf-server (port 3001) ──▶ JAMF Pro REST API
MCP Client ──HTTP──▶ intune-server (port 3002) ──▶ Microsoft Graph APIEach server is a stateless Express app using @modelcontextprotocol/sdk. Every POST to /mcp creates a fresh StreamableHTTPServerTransport. Secrets are injected at runtime by Bitwarden Secrets Manager — no credentials are stored in the repo.
Related MCP server: domotz-mcp
Prerequisites
Node.js 24+
BWS CLI (
bwsin PATH)A Bitwarden Secrets Manager project with the secrets listed in
bws-secrets.mapJAMF Pro API client credentials (OAuth2)
Azure AD app registration with Microsoft Graph permissions (for Intune)
Quick Start
# Install dependencies and build
npm install && npm run build
# Set your BWS machine account access token
export BWS_ACCESS_TOKEN="<your-token>"
# Start whichever server(s) you need
./start-jamf.sh # JAMF MCP on http://localhost:3001/mcp
./start-intune.sh # Intune MCP on http://localhost:3002/mcpSee bws-secrets.map for the secret names to create in your BWS project.
Environment Variables
Injected by bws run from your BWS project (see bws-secrets.map):
JAMF Pro:
JAMF_URL— e.g.https://yourorg.jamfcloud.comJAMF_CLIENT_ID,JAMF_CLIENT_SECRET
Microsoft Intune:
AZURE_TENANT_ID,AZURE_CLIENT_ID,AZURE_CLIENT_SECRET
Azure AD Graph Permissions
The Intune app registration needs these Application permissions (with admin consent):
Device.Read.AllDeviceManagementManagedDevices.Read.AllDeviceManagementApps.Read.AllDeviceManagementConfiguration.Read.AllGroup.Read.AllUser.Read.All
Client Configuration
Claude Code (~/.claude/claude_desktop_config.json or MCP settings)
{
"mcpServers": {
"jamf": {
"type": "http",
"url": "http://localhost:3001/mcp"
},
"intune": {
"type": "http",
"url": "http://localhost:3002/mcp"
}
}
}Gemini CLI (~/.gemini/settings.json)
{
"mcpServers": {
"jamf": { "httpUrl": "http://localhost:3001/mcp" },
"intune": { "httpUrl": "http://localhost:3002/mcp" }
}
}OpenCode (~/.config/opencode/opencode.json)
{
"mcp": {
"jamf": { "type": "remote", "url": "http://localhost:3001/mcp", "enabled": true },
"intune": { "type": "remote", "url": "http://localhost:3002/mcp", "enabled": true }
}
}MCP Tools Reference
JAMF Pro Tools
Tool | Description | Parameters |
| Computer details by name |
|
| Computer details by serial number |
|
| Macs by username / name / email |
|
| Mobile device details by name |
|
| List smart groups |
|
| Members of a smart group |
|
| All JAMF sites | — |
| Scripts (with optional filter/pagination) |
|
| Packages (with optional filter/pagination) |
|
| Inventory preload records |
|
| Computer prestage assignments | — |
| Static computer groups | — |
| Policies list | — |
| Policy details |
|
| Configuration profiles | — |
| Patch policies | — |
| Categories | — |
| Departments | — |
| FileVault encryption status |
|
| Send MDM command to a device |
|
| Update computer inventory fields |
|
| Flush pending MDM commands |
|
Microsoft Intune Tools
Tool | Description | Parameters |
| Autopilot profile & status |
|
| Managed device by name |
|
| Managed device by serial number |
|
| All devices for a user |
|
| Device group memberships |
|
| Detected & assigned apps |
|
| Configuration policies (classic + settings catalog) |
|
| Device-level policy deployment diagnostics |
|
| Assignment targets for a policy |
|
| Correlates policy assignment + device state |
|
| Intune app deployments |
|
| Assignment targets for an app |
|
| Correlates app assignment + device app status |
|
Running Tests
Tests are live integration tests against a real JAMF Pro instance:
export BWS_ACCESS_TOKEN="<your-token>"
bws run --access-token "$BWS_ACCESS_TOKEN" -- \
TEST_COMPUTER_NAME="<name>" \
TEST_COMPUTER_SERIAL="<serial>" \
TEST_USER_EMAIL="<email>" \
npm testAdd JAMF_TEST_WRITE=1 to enable destructive write tests (MDM commands, inventory updates).
Project Structure
├── src/
│ ├── mcp/
│ │ ├── jamf-server.ts # JAMF standalone MCP server (port 3001)
│ │ └── intune-server.ts # Intune standalone MCP server (port 3002)
│ ├── jamf/
│ │ └── jamf-api.ts # JAMF Pro REST + Classic API client
│ ├── intune/
│ │ └── graph-api.ts # Microsoft Graph / Intune client
│ └── utils/
│ └── logger.ts # Output formatting helpers
├── start-jamf.sh # BWS-wrapped launcher for JAMF server
├── start-intune.sh # BWS-wrapped launcher for Intune server
└── bws-secrets.map # Required BWS secret names and descriptionsAdditional Resources
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rcobb2/desktop-management-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server