atera-mcp
Atera MCP Server
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.
One-Click Deployment
Before you click: this server depends on @wyre-technology/node-atera,
which is hosted on the GitHub Packages npm registry. GitHub Packages has no
anonymous access — even though the package is public, every npm install needs a
token. The cloud builder runs npm install for you, so you must give it one, or
the build fails with npm error 401 Unauthorized ... npm.pkg.github.com.
Create a GitHub Personal Access Token with the
read:packagesscope (classic token). Any GitHub account works — you do not need to be a member of thewyre-technologyorg to read its public packages.Add it as a build variable when prompted by the deploy flow:
Cloudflare Workers → set a build variable named
NODE_AUTH_TOKENto your PAT (Workers → Settings → Build → Variables and Secrets).DigitalOcean App Platform → set an encrypted env var named
GITHUB_TOKENwith scope Build Time to your PAT (the.do/app.yamlalready declares it).
The DigitalOcean target builds the full Docker image and runs the complete MCP
server over HTTP — this is the recommended path for operators. The Cloudflare
Workers target is currently a thin entrypoint stub (the/mcp route returns
501 Not Implemented) and is best suited to gateway-style deployments; for a
full self-hosted server prefer DigitalOcean or the prebuilt container image
(ghcr.io/wyre-technology/atera-mcp).
Related MCP server: connectwise-automate-mcp
Features
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).
Installation
This package is published to the GitHub Packages npm registry, which requires a token even for public packages. Authenticate once, then install:
# Authenticate npm to GitHub Packages (token needs the read:packages scope)
export NODE_AUTH_TOKEN=$(gh auth token) # or a PAT with read:packages
npm install @wyre-technology/atera-mcpThe repo's .npmrc already points the @wyre-technology scope at GitHub Packages and
reads the token from NODE_AUTH_TOKEN, so no further config is needed.
Or build from source:
git clone https://github.com/wyre-technology/atera-mcp.git
cd atera-mcp
npm install
npm run buildConfiguration
Set the following environment variable:
Variable | Required | Description |
| Yes | Your Atera API key from Admin > API |
Getting Your API Key
Log into Atera as an admin
Go to Admin > API
Generate or copy your API key
Usage
With Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"atera": {
"command": "npx",
"args": ["@wyre-technology/atera-mcp"],
"env": {
"ATERA_API_KEY": "your-api-key-here"
}
}
}
}With MCP Gateway
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
docker build -t atera-mcp .
docker run -e ATERA_API_KEY=your-key atera-mcpDecision Tree Architecture
This server uses a navigation-based approach to tool discovery:
Start: Only
atera_navigatetool is availableNavigate: 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
Available Domains
Customers
Manage customer (company) records.
atera_customers_list- List customers with paginationatera_customers_get- Get customer by IDatera_customers_create- Create new customer
Agents
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
Tickets
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
Alerts
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
Contacts
Manage customer contacts.
atera_contacts_list- List all contactsatera_contacts_get- Get contact by IDatera_contacts_by_customer- List contacts for a customer
Example Conversation
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...Development
# 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 testAPI Rate Limits
Atera API allows 700 requests per minute. The underlying node-atera client handles rate limiting automatically with request queuing.
License
Apache-2.0
Contributing
Contributions welcome! Please read our contributing guidelines and submit PRs to the main branch.
This server cannot be installed
Maintenance
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/wyre-technology/atera-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server