Model Context Protocol (MCP) server for interacting with the Atera RMM API. Implements a decision tree architecture for efficient tool discovery and reduced context overhead.
- Decision Tree Navigation: Tools are organized by domain (customers, agents, tickets, alerts, contacts). Navigate to a domain first, then use domain-specific tools.
- Lazy Client Loading: The Atera client is only instantiated when first needed, reducing startup time.
- Full API Coverage: Supports customer management, device/agent monitoring, ticket operations, alert handling, and contact management.
- Rate Limit Handling: Built-in rate limiting via the node-atera client (700 req/min).
npm install @wyre-technology/atera-mcpOr build from source:
git clone https://github.com/wyre-technology/atera-mcp.git
cd atera-mcp
npm install
npm run buildSet the following environment variable:
| Variable | Required | Description |
|---|---|---|
ATERA_API_KEY |
Yes | Your Atera API key from Admin > API |
- Log into Atera as an admin
- Go to Admin > API
- Generate or copy your API key
Add to your claude_desktop_config.json:
{
"mcpServers": {
"atera": {
"command": "npx",
"args": ["@wyre-technology/atera-mcp"],
"env": {
"ATERA_API_KEY": "your-api-key-here"
}
}
}
}Configure in the gateway registry:
{
"name": "atera-mcp",
"command": "node",
"args": ["/path/to/atera-mcp/dist/index.js"],
"env": {
"ATERA_API_KEY": "${ATERA_API_KEY}"
}
}docker build -t atera-mcp .
docker run -e ATERA_API_KEY=your-key atera-mcpThis server uses a navigation-based approach to tool discovery:
- Start: Only
atera_navigatetool is available - Navigate: Call
atera_navigatewith a domain (customers, agents, tickets, alerts, contacts) - Domain Tools: After navigation, domain-specific tools become available
- Back: Use
atera_backto return to domain selection
This architecture:
- Reduces tool list size for better LLM performance
- Groups related operations logically
- Minimizes context window usage
Manage customer (company) records.
atera_customers_list- List customers with paginationatera_customers_get- Get customer by IDatera_customers_create- Create new customer
Manage devices/endpoints with the Atera agent installed.
atera_agents_list- List agents with optional customer filteratera_agents_get- Get agent by IDatera_agents_get_by_machine- Get agent by machine name
Manage service tickets.
atera_tickets_list- List tickets with filtersatera_tickets_get- Get ticket by IDatera_tickets_create- Create new ticketatera_tickets_update- Update existing ticket
Monitor alerts from devices and agents.
atera_alerts_list- List alerts with filtersatera_alerts_get- Get alert by IDatera_alerts_by_agent- List alerts for an agentatera_alerts_by_device- List alerts for a device
Manage customer contacts.
atera_contacts_list- List all contactsatera_contacts_get- Get contact by IDatera_contacts_by_customer- List contacts for a customer
User: List all open tickets
Claude: I'll navigate to the tickets domain and list open tickets.
[Calls atera_navigate with domain: "tickets"]
[Calls atera_tickets_list with ticketStatus: "Open"]
Result: Found 15 open tickets...
# Install dependencies
npm install
# Build
npm run build
# Run in development
npm run dev
# Type check
npm run typecheck
# Lint
npm run lint
# Test
npm run testAtera API allows 700 requests per minute. The underlying node-atera client handles rate limiting automatically with request queuing.
Apache-2.0
Contributions welcome! Please read our contributing guidelines and submit PRs to the main branch.