# OpManager MCP Server
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[]()
[](https://github.com/modelcontextprotocol/python-sdk)
A **credential-less** Model Context Protocol (MCP) server for ManageEngine OpManager REST API integration. This server enables AI assistants like Claude to interact with your OpManager infrastructure through natural language.
## โจ Key Features
- **๐ Credential-less Design**: No hardcoded API keys - users provide `host` and `apiKey` per request
- **๐ SSL Auto-Detection**: Port 8061 โ HTTPS, Port 8060 โ HTTP (with manual override)
- **๐ก 85+ API Endpoints**: Full OpManager API coverage for devices, alarms, dashboards, discovery, and more
- **๐ Dynamic Tool Generation**: Automatically generates MCP tools from OpenAPI specification
- **๐ Multiple Transports**: Supports stdio (Claude Desktop) and HTTP/SSE (n8n, web clients)
- **๐ณ Docker Ready**: Containerized deployment with Docker and Docker Compose
## ๐ Quick Start
### Installation
```bash
# Clone the repository
git clone https://github.com/sachdev27/opmanager-mcp-server.git
cd opmanager-mcp-server
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install the package
pip install -e ".[http]"
```
### Start the HTTP Server
```bash
uvicorn opmanager_mcp.http_server:app --host 0.0.0.0 --port 3000
```
### Test a Tool Call
```bash
curl -X POST http://localhost:3000/call \
-H "Content-Type: application/json" \
-d '{
"name": "opmanager_get_allDevices",
"arguments": {
"host": "opmanager.example.com",
"apiKey": "your-api-key-here",
"port": 8061
}
}'
```
## ๐ Configuration
### Environment Variables
Create a `.env` file (optional - for server defaults only):
```bash
cp .env.example .env
```
| Variable | Description | Default |
|----------|-------------|---------|
| `MCP_SERVER_LOG_LEVEL` | Logging level | `INFO` |
| `ALLOWED_HTTP_METHODS` | Allowed HTTP methods for tools | `GET,POST,PUT,DELETE,PATCH` |
| `LOCAL_OPENAPI_SPEC_PATH` | Path to OpenAPI spec | bundled `openapi.json` |
> **Note**: `OPMANAGER_HOST` and `OPMANAGER_API_KEY` are NOT configured server-side. Users provide these per-request for security.
### Getting Your OpManager API Key
1. Log in to OpManager web console
2. Navigate to **Settings** โ **REST API**
3. Generate a new API key
4. Use this key in your tool calls
## ๐ง Tool Parameters
Every tool accepts these connection parameters:
| Parameter | Required | Description |
|-----------|----------|-------------|
| `host` | โ
Yes | OpManager server hostname |
| `apiKey` | โ
Yes | API key for authentication |
| `port` | No | Server port (default: 8060) |
| `use_ssl` | No | Force SSL (auto-detected from port) |
| `verify_ssl` | No | Verify SSL certificates (default: true) |
### SSL Auto-Detection
- **Port 8061**: Automatically uses HTTPS
- **Port 8060**: Automatically uses HTTP
- Override with `use_ssl: true/false` if needed
## ๐ HTTP API Endpoints
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/health` | GET | Health check with tool count |
| `/tools` | GET | List all available tools |
| `/sse` | GET | SSE connection for MCP |
| `/messages` | POST | MCP message handler |
| `/call` | POST | Direct tool invocation |
### Health Check
```bash
curl http://localhost:3000/health
# {"status":"healthy","tool_count":60}
```
### List Tools
```bash
curl http://localhost:3000/tools | jq '.tools[].name'
```
## ๐ค n8n Integration
1. Start the HTTP server on port 3000
2. In n8n, add an **AI Agent** node with **MCP Client** tool
3. Configure the MCP Client:
- **SSE URL**: `http://localhost:3000/sse`
- **Messages URL**: `http://localhost:3000/messages`
### Example System Prompt for n8n
```
You are an IT operations assistant with access to OpManager for network monitoring.
When using OpManager tools, always include:
- host: "opmanager.company.com"
- apiKey: "your-api-key"
- port: 8061 (for HTTPS)
Available operations:
- List all devices: opmanager_get_allDevices
- Get device details: opmanager_get_device (requires deviceName)
- List alarms: opmanager_get_alarms
- Acknowledge alarm: opmanager_add_alarmNotes
```
## ๐ฅ Claude Desktop Integration
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"opmanager": {
"command": "python",
"args": ["-m", "opmanager_mcp.main"],
"cwd": "/path/to/opmanager-mcp-server",
"env": {
"LOCAL_OPENAPI_SPEC_PATH": "/path/to/opmanager-mcp-server/openapi.json"
}
}
}
}
```
> **Note**: With Claude Desktop, you'll tell Claude your OpManager host and API key in conversation, and it will include them in tool calls.
## ๐ Available Tools (60+ GET operations)
### Devices
- `opmanager_get_allDevices` - List all monitored devices
- `opmanager_get_device` - Get device details by name
- `opmanager_get_deviceAvailability` - Device availability history
### Alarms
- `opmanager_get_alarms` - List alarms with filtering
- `opmanager_get_alarmDetails` - Get alarm details
- `opmanager_add_alarmNotes` - Add notes/acknowledge alarm
### Discovery
- `opmanager_get_discoveryStatus` - Check discovery progress
- `opmanager_add_discovery` - Start network discovery
### Reports & Dashboards
- `opmanager_get_allDashboards` - List all dashboards
- `opmanager_get_scheduledReports` - List scheduled reports
### And more...
Run `curl http://localhost:3000/tools` to see all available tools.
## ๐ณ Docker
### Build and Run
```bash
docker build -t opmanager-mcp-server .
docker run -d -p 3000:3000 --name opmanager-mcp opmanager-mcp-server
```
### Docker Compose
```bash
docker-compose up -d
```
## ๐งช Development
### Run Tests
```bash
# Install dev dependencies
pip install -e ".[dev]"
# Run all tests
pytest
# Run with coverage
pytest --cov=opmanager_mcp --cov-report=term-missing
# Current: 32 tests, 50% coverage
```
### Code Quality
```bash
# Format
black opmanager_mcp tests
isort opmanager_mcp tests
# Lint
ruff check opmanager_mcp tests
# Type check
mypy opmanager_mcp
```
### Regenerate OpenAPI Spec
```bash
python generate_openapi.py
```
## ๐ Project Structure
```
opmanager-mcp-server/
โโโ opmanager_mcp/
โ โโโ __init__.py # Package exports
โ โโโ api_client.py # HTTP client for OpManager API
โ โโโ config.py # Configuration management
โ โโโ exceptions.py # Custom exceptions
โ โโโ http_server.py # HTTP/SSE server (Pure ASGI)
โ โโโ logging_config.py # Logging configuration
โ โโโ main.py # CLI entry point
โ โโโ server.py # MCP server implementation
โ โโโ tool_generator.py # OpenAPI to MCP tool converter
โโโ tests/
โ โโโ conftest.py # Test fixtures
โ โโโ test_api_client.py # API client tests
โ โโโ test_config.py # Config tests
โ โโโ test_http_server.py # HTTP server tests
โ โโโ test_server.py # MCP server tests
โ โโโ test_tool_generator.py # Tool generation tests
โโโ openapi.json # OpManager OpenAPI specification
โโโ pyproject.toml # Project configuration
โโโ Dockerfile # Container image
โโโ docker-compose.yml # Compose configuration
โโโ README.md # This file
```
## ๐ License
MIT License - see [LICENSE](LICENSE) for details.
## ๐ Acknowledgments
- Built with [Model Context Protocol SDK](https://github.com/modelcontextprotocol/python-sdk)
- OpManager REST API by [ManageEngine](https://www.manageengine.com/network-monitoring/)