Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Mosyle MDM MCP Server

MCP server for interacting with Mosyle Business MDM instances. Provides 35 tools across device management, user/group management, custom attributes, lost mode, and log streaming. Supports JWT authentication and a --read-only mode for safe operation.

Configuration

Authentication: Mosyle uses an API access token combined with email/password credentials to obtain a JWT bearer token. Create a dedicated API user in Mosyle Business rather than using a personal account.

Option 1: config.json

cp config.json.example config.json
# Edit config.json with your API credentials

Option 2: Environment Variables

export MOSYLE_HOST="businessapi.mosyle.com"
export MOSYLE_EMAIL="api-user@example.com"
export MOSYLE_PASSWORD="api-password"
export MOSYLE_ACCESS_TOKEN="your-access-token"
export MOSYLE_LOGS_HOST="businessapilogs.mosyle.com"
export MOSYLE_TIMEOUT="30"

Installation

Option 1: Using uvx (Recommended — no install needed)

uvx bibliocommons-mcp-mosyle

uvx runs the package directly from PyPI in an isolated environment. Install uv first if you don't have it:

curl -LsSf https://astral.sh/uv/install.sh | sh

Option 2: Using pip

pip install bibliocommons-mcp-mosyle

AI Client Setup

VS Code (with MCP Extension)

  1. Install an MCP-compatible extension in VS Code
  2. Open VS Code Settings (JSON): Cmd+Shift+P → "Preferences: Open User Settings (JSON)"
  3. Add the server configuration:
{
  "mcp.servers": {
    "mosyle": {
      "command": "uvx",
      "args": ["bibliocommons-mcp-mosyle"]
    }
  }
}

Alternative: Using python directly

{
  "mcp.servers": {
    "mosyle": {
      "command": "python",
      "args": ["-m", "bibliocommons_mcp_mosyle"]
    }
  }
}

Claude Desktop

  1. Open Claude Desktop configuration:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Add the server configuration:

{
  "mcpServers": {
    "mosyle": {
      "command": "uvx",
      "args": ["bibliocommons-mcp-mosyle"]
    }
  }
}

Alternative: Using python directly

{
  "mcpServers": {
    "mosyle": {
      "command": "python",
      "args": ["-m", "bibliocommons_mcp_mosyle"]
    }
  }
}

Kiro IDE

  1. Open Kiro IDE settings
  2. Navigate to MCP Servers configuration
  3. Add the server:
{
  "mcpServers": {
    "mosyle": {
      "command": "uvx",
      "args": ["bibliocommons-mcp-mosyle"]
    }
  }
}

Alternative: Using python directly

{
  "mcpServers": {
    "mosyle": {
      "command": "python",
      "args": ["-m", "bibliocommons_mcp_mosyle"]
    }
  }
}

Kiro CLI

  1. Create or edit the MCP configuration file:

    • User level: ~/.kiro/settings/mcp.json
    • Project level: <project-root>/.kiro/settings/mcp.json
  2. Add the server configuration:

{
  "mcpServers": {
    "mosyle": {
      "command": "uvx",
      "args": ["bibliocommons-mcp-mosyle"]
    }
  }
}

Alternative: Using python directly

{
  "mcpServers": {
    "mosyle": {
      "command": "python",
      "args": ["-m", "bibliocommons_mcp_mosyle"]
    }
  }
}

Configuration Notes

  • Using uvx (default): Automatically manages dependencies in isolated environments (like npx for Node.js)
  • Using python (alternative): Requires pip install bibliocommons-mcp-mosyle first
  • Add --config /path/to/config.json to the args array to use a specific config file
  • Add --read-only to the args array to disable destructive tools
  • After adding the configuration, restart your AI client for changes to take effect

For other AI clients (Amazon Q, GitHub Copilot, Cline, Zed, Cursor), see docs/ai-clients.md.

Docker

# Pull from Docker Hub (private)
docker pull bibliocommons/mcp-mosyle:latest

# Run in stdio mode
docker run -i --rm \
  -v /path/to/config.json:/config.json:ro \
  bibliocommons/mcp-mosyle:latest \
  --config /config.json

# Run in HTTP mode
docker run -d --rm \
  -v /path/to/config.json:/config.json:ro \
  -p 8000:8000 \
  bibliocommons/mcp-mosyle:latest \
  --config /config.json --transport http --port 8000

# Run in expanded mode
docker run -i --rm \
  -v /path/to/config.json:/config.json:ro \
  bibliocommons/mcp-mosyle:latest \
  --config /config.json --expanded

Web UI with Swagger

A REST API with interactive Swagger documentation is available:

python -m bibliocommons_mcp_mosyle.webui

Access the Swagger UI at: [http://localhost:8000/docs]

The Web UI provides:

  • Interactive API documentation
  • Try-it-out functionality for all endpoints
  • OpenAPI/Swagger specification
  • REST API access to all MCP tools

Standalone MCP Server

python -m bibliocommons_mcp_mosyle

CLI Flags

Flag Env Var Description
--config PATH MOSYLE_CONFIG Path to config.json
--read-only MOSYLE_READ_ONLY Exclude destructive tools
--expanded MOSYLE_EXPANDED Register all tools individually instead of gateway mode
--transport stdio|http MOSYLE_TRANSPORT Transport mode (default: stdio)
--port PORT MOSYLE_PORT HTTP port (default: 8000)
--version Show version and exit

Gateway Mode (Default)

By default, the server exposes 2 tools instead of 35 individual tools:

Tool Purpose
mosyle_api Execute any Mosyle MDM action by name with a params dict
mosyle_help Search available actions, parameters, and descriptions

The AI assistant calls mosyle_help to discover available actions, then calls mosyle_api(action="list_devices", params={}) to execute them.

To register all individual tools (previous behavior), use --expanded:

python -m bibliocommons_mcp_mosyle --expanded

Available Tools

Domain Tools Description
Devices 9 list_devices, update_device, shutdown_devices, restart_devices, wipe_devices, assign_device_user, unassign_device, enable_activation_lock, disable_activation_lock
Custom Attributes 6 list_custom_device_attributes, create_custom_device_attribute, assign_custom_device_attribute, update_custom_device_attribute, remove_custom_device_attribute, delete_custom_device_attribute
Variables 3 save_variable, delete_variable, lock_device
Users 3 list_users, create_user, update_user
User Groups 5 list_user_groups, create_user_group, update_user_group, add_users_to_group, remove_users_from_group
Device Groups 3 list_device_groups, get_device_group_info, update_device_group
Lost Mode 4 enable_lost_mode, disable_lost_mode, play_lost_mode_sound, request_device_location
Logs 2 list_action_logs, get_logs_stream

See docs/API-REFERENCE.md for full parameter details.

Read-Only Mode

Disable all destructive tools for safe, audit-only operation:

# CLI flag
python -m bibliocommons_mcp_mosyle --read-only

# Environment variable
export MOSYLE_READ_ONLY=true

In read-only mode, the following 26 tools are excluded:

  • Devices: update_device, shutdown_devices, restart_devices, wipe_devices, assign_device_user, unassign_device, enable_activation_lock, disable_activation_lock
  • Custom Attributes: create_custom_device_attribute, assign_custom_device_attribute, update_custom_device_attribute, remove_custom_device_attribute, delete_custom_device_attribute
  • Variables: save_variable, delete_variable, lock_device
  • Users: create_user, update_user
  • User Groups: create_user_group, update_user_group, add_users_to_group, remove_users_from_group
  • Device Groups: update_device_group
  • Lost Mode: enable_lost_mode, disable_lost_mode, play_lost_mode_sound

The remaining 9 read-only tools are: list_devices, list_custom_device_attributes, list_users, list_user_groups, list_device_groups, get_device_group_info, request_device_location, list_action_logs, get_logs_stream.

Security Notes

  • Create a dedicated API user in Mosyle Business for MCP access rather than using a personal account
  • The access token is a long-lived credential; store it securely and rotate periodically
  • Never commit config.json with real credentials (it is excluded by .gitignore)
  • Use config.json.example as a template
  • Prefer environment variables for production and CI environments
  • Use --read-only mode when write access is not needed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bibliocommons_mcp_mosyle-2.0.0b1.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bibliocommons_mcp_mosyle-2.0.0b1-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file bibliocommons_mcp_mosyle-2.0.0b1.tar.gz.

File metadata

File hashes

Hashes for bibliocommons_mcp_mosyle-2.0.0b1.tar.gz
Algorithm Hash digest
SHA256 4d8d5c3537ba3302a54905cc531707e08f521bf4e1afc8f05899dbef1b6f6ad4
MD5 e8fa9ead705e03f73e2b652001aaece6
BLAKE2b-256 65dc4fb4f02fc070545f3419ce293dcb7675fdd1b1ed831e83b39568ae1d4278

See more details on using hashes here.

File details

Details for the file bibliocommons_mcp_mosyle-2.0.0b1-py3-none-any.whl.

File metadata

File hashes

Hashes for bibliocommons_mcp_mosyle-2.0.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 9beff5bbf8e9493c5a953b01e467859a50f02962bb31749ec7a4d0f3beae8595
MD5 ce257c9a775f46ebab4d644cb1dffaa9
BLAKE2b-256 ef2afb64dcfa8b569ef56188204b7403fb7b7d5dda54b8ad46edf1bdb24e39a4

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.0.0b1 This release

2 files

1.3.6

2 files

1.3.5

2 files

1.3.4

2 files

1.3.1

2 files

1.2.2

2 files

1.2.0

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page