A monorepo providing everything you need to work with Datto RMM: type-safe API clients, an MCP server for AI assistant integration, and comprehensive documentation.

Features

  • MCP Server - Integrate Datto RMM with AI assistants like Claude using the Model Context Protocol
  • TypeScript Client - Fully typed API client with auto-generated types from OpenAPI 3.1.0
  • Rust Client - Native Rust client with async/await support
  • OAuth 2.0 - Automatic token management and refresh
  • All 6 Platforms - Supports Pinotage, Merlot, Concord, Vidal, Zinfandel, and Syrah

Packages

Package Description Status
datto-rmm-mcp-server MCP server for AI assistant integration Stable
datto-rmm-api TypeScript client with auto-generated types Stable
datto-api Rust client with OAuth support Stable

Quick Start

MCP Server (AI Integration)

Add to your Claude Desktop configuration:

{
  "mcpServers": {
    "datto-rmm": {
      "command": "node",
      "args": ["/path/to/datto-rmm/apps/mcp-server/dist/index.js"],
      "env": {
        "DATTO_API_KEY": "your-api-key",
        "DATTO_API_SECRET": "your-api-secret",
        "DATTO_PLATFORM": "merlot"
      }
    }
  }
}

Then interact with Datto RMM through natural language:

  • "Show me all offline devices"
  • "What open alerts do we have?"
  • "Get the audit information for device abc-123"

See the MCP Server documentation for the full list of 39+ available tools.

TypeScript

pnpm add datto-rmm-api
import { createDattoClient, Platform } from 'datto-rmm-api';

const client = createDattoClient({
  platform: Platform.MERLOT,
  auth: {
    apiKey: process.env.DATTO_API_KEY!,
    apiSecret: process.env.DATTO_API_SECRET!,
  },
});

// Fully typed - IDE autocomplete for paths and responses
const { data, error } = await client.GET('/v2/account/devices');

if (data) {
  for (const device of data.devices ?? []) {
    console.log(device.hostname, device.lastSeen);
  }
}

Rust

[dependencies]
datto-api = { git = "https://github.com/josh-fisher/datto-rmm" }
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
use datto_api::{DattoClient, Platform, Credentials};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = DattoClient::new(
        Platform::Merlot,
        Credentials {
            api_key: std::env::var("DATTO_API_KEY")?,
            api_secret: std::env::var("DATTO_API_SECRET")?,
        },
    ).await?;

    println!("Connected to {}", client.platform());
    Ok(())
}

Platforms

The Datto RMM API is available on multiple regional platforms:

Platform API Endpoint
Pinotage https://pinotage-api.centrastage.net/api
Merlot https://merlot-api.centrastage.net/api
Concord https://concord-api.centrastage.net/api
Vidal https://vidal-api.centrastage.net/api
Zinfandel https://zinfandel-api.centrastage.net/api
Syrah https://syrah-api.centrastage.net/api

Development

Prerequisites

  • Node.js v22+ (see .nvmrc)
  • pnpm v9.14.2+
  • Rust (latest stable) - optional, for Rust client

Setup

# Clone the repository
git clone https://github.com/josh-fisher/datto-rmm.git
cd datto-rmm

# Install dependencies
pnpm install

# Sync OpenAPI spec and generate clients
pnpm sync:openapi
pnpm generate:api

# Build all packages
pnpm build

Commands

Command Description
pnpm build Build all packages
pnpm dev Start development servers
pnpm test Run tests
pnpm lint Lint code
pnpm typecheck TypeScript type checking
pnpm sync:openapi Fetch latest OpenAPI spec
pnpm generate:api Regenerate API clients

Project Structure

datto-rmm/
├── apps/
│   ├── mcp-server/      # MCP server for AI assistants (datto-rmm-mcp-server)
│   └── docs/            # Documentation site (Starlight)
├── packages/
│   └── api/             # TypeScript client (datto-rmm-api)
├── crates/
│   └── datto-api/       # Rust client
├── specs/               # Cached OpenAPI specification
├── tooling/scripts/     # Build scripts
└── .github/workflows/   # CI/CD pipelines

Documentation

Full documentation is available at apps/docs, built with Starlight. Run locally with:

pnpm --filter @datto-rmm/docs dev

Resources

Contributing

Contributions are welcome! Please read our Contributing Guide before submitting a pull request.

This project follows:

# Example commit messages
feat(mcp-server): add device filtering tool
feat(api): add retry logic for failed requests
fix(rust): handle token expiry edge case
docs: update installation instructions

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments