MCP server for Mosyle Business MDM
Project description
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 uv (Recommended)
uv is a fast Python package manager. Install it first:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
No additional installation needed - uvx will handle dependencies automatically.
Option 2: Using pip
pip install bibliocommons-mcp-mosyle
# or for development
pip install -e ".[dev]"
AI Client Setup
Quick Links: Amazon Q | Claude Desktop | VS Code | GitHub Copilot | Cline | Zed | Cursor | Kiro IDE | Kiro CLI
Amazon Q Developer (VS Code)
- Install the Amazon Q extension in VS Code
- Open VS Code Settings (JSON) and add:
{
"amazonQ.mcp.servers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"amazonQ.mcp.servers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
Claude Desktop
-
Open Claude Desktop configuration:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
Add the server configuration:
{
"mcpServers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"mcpServers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
VS Code (with MCP Extension)
- Install an MCP-compatible extension in VS Code
- Open VS Code Settings (JSON):
Cmd+Shift+P→ "Preferences: Open User Settings (JSON)" - Add the server configuration:
{
"mcp.servers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"mcp.servers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
GitHub Copilot (VS Code)
- Install GitHub Copilot extension in VS Code
- Open VS Code Settings (JSON) and add:
{
"github.copilot.chat.mcp.servers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"github.copilot.chat.mcp.servers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
Cline (VS Code Extension)
- Install the Cline extension in VS Code
- Open VS Code Settings (JSON) and add:
{
"cline.mcpServers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"cline.mcpServers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
Zed Editor
- Open Zed settings:
Cmd+,(macOS) orCtrl+,(Linux/Windows) - Navigate to "Language Models" → "Configure MCP Servers"
- Add the server configuration:
{
"mcpServers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"mcpServers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
Cursor IDE
- Open Cursor Settings (JSON):
Cmd+Shift+P→ "Preferences: Open User Settings (JSON)" - Add the MCP server configuration:
{
"mcp.servers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"mcp.servers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
Kiro IDE
- Open Kiro IDE settings
- Navigate to MCP Servers configuration
- Add the server:
{
"mcpServers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"mcpServers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
Kiro CLI
-
Create or edit the MCP configuration file:
- User level:
~/.kiro/settings/mcp.json - Project level:
<project-root>/.kiro/settings/mcp.json
- User level:
-
Add the server configuration:
{
"mcpServers": {
"mosyle": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/mosyle", "bibliocommons-mcp-mosyle"]
}
}
}
Alternative: Using python directly
{
"mcpServers": {
"mosyle": {
"command": "python",
"args": ["-m", "bibliocommons_mcp_mosyle"]
}
}
}
Configuration Notes
- Replace
/absolute/path/to/mosyle/with the actual path to your server directory - Using
uvx(default): Automatically manages dependencies in isolated environments (likenpxfor Node.js) - Using
python(alternative): Requirespip install bibliocommons-mcp-mosylefirst - Add
--config /path/to/config.jsonto the args array to use a specific config file - Add
--read-onlyto the args array to disable destructive tools - After adding the configuration, restart your AI client for changes to take effect
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
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.jsonwith real credentials (it is excluded by.gitignore) - Use
config.json.exampleas a template - Prefer environment variables for production and CI environments
- Use
--read-onlymode when write access is not needed
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bibliocommons_mcp_mosyle-1.0.0.tar.gz.
File metadata
- Download URL: bibliocommons_mcp_mosyle-1.0.0.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b2954b71fe5c76b9de8f675e8a95c5ae95363f7493bcb52523c6a82393f6e6d
|
|
| MD5 |
f56652fd8d16056a15942e54318ac842
|
|
| BLAKE2b-256 |
baec5ff235eaa4bc4db7f6d729bc5c424761f7b89c24d4750dc12de8a3e1aa73
|
File details
Details for the file bibliocommons_mcp_mosyle-1.0.0-py3-none-any.whl.
File metadata
- Download URL: bibliocommons_mcp_mosyle-1.0.0-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4954cada6543dc90f72b404df7be65868280a5572178291da168ae612901f349
|
|
| MD5 |
bbe443ddd48911fe932f132afad00f96
|
|
| BLAKE2b-256 |
d47f57a7502914ce60cf0bc8fdaca44e498191e8bab3851f1bb060e272bb2def
|