# OneUptime MCP Server A production-ready Model Context Protocol (MCP) server for OneUptime that provides dynamic tools for all OneUptime models and operations. ## Features - **Dynamic Tool Generation**: Automatically generates MCP tools for all OneUptime models (Database and Analytics) - **Full CRUD Operations**: Supports Create, Read, Update, Delete, List, and Count operations - **Production Ready**: Built with proper error handling, logging, and configuration - **Extensible**: Automatically supports new models as they are added to OneUptime - **Type Safe**: Fully typed with TypeScript ## Available Operations The MCP server automatically generates tools for each OneUptime model with the following operations: ### Database Models - `oneuptime_create{ModelName}` - Create a new record - `oneuptime_get{ModelName}` - Retrieve a record by ID - `oneuptime_list{ModelName}s` - List records with filtering - `oneuptime_update{ModelName}` - Update a record - `oneuptime_delete{ModelName}` - Delete a record - `oneuptime_count{ModelName}s` - Count records ### Analytics Models - `oneuptime_create{ModelName}` - Create analytics data - `oneuptime_list{ModelName}s` - Query analytics data - `oneuptime_count{ModelName}s` - Count analytics records ## Supported Models The server automatically generates tools for all OneUptime models including: **Database Models**: Incident, Alert, Monitor, Project, User, Team, StatusPage, and 100+ more **Analytics Models**: Log, Metric, Span, ExceptionInstance, MonitorLog ## Configuration Copy `.env.example` to `.env` and configure: ```bash # OneUptime API Key (Required) ONEUPTIME_API_KEY=your_oneuptime_api_key_here # OneUptime Instance URL (Optional - defaults to https://oneuptime.com) ONEUPTIME_URL=https://oneuptime.com ``` ## Installation 1. Install dependencies: ```bash npm install ``` 2. Configure environment variables: ```bash cp .env.example .env # Edit .env with your OneUptime configuration ``` 3. Build the server: ```bash npm run build ``` 4. (Optional) Link for global CLI usage: ```bash npm run link ``` ## Usage ### Development ```bash npm run dev ``` ### Production ```bash npm start ``` ## Example Tool Usage ### List Incidents ```json { "name": "oneuptime_listIncidents", "arguments": { "query": {"projectId": "your-project-id"}, "limit": 10 } } ``` ### Create Alert ```json { "name": "oneuptime_createAlert", "arguments": { "data": { "title": "High CPU Usage", "description": "CPU usage above 90%", "projectId": "your-project-id" } } } ``` ### Get Monitor by ID ```json { "name": "oneuptime_getMonitor", "arguments": { "id": "monitor-id-here" } } ``` ### Query Logs ```json { "name": "oneuptime_listLogs", "arguments": { "query": { "serviceId": "service-id", "severity": "error" }, "limit": 50, "sort": {"time": -1} } } ``` ## Troubleshooting ### MCP Logging Compatibility This server uses a custom `MCPLogger` class that ensures all log messages are directed to `stderr` instead of `stdout`. This is critical for MCP protocol compliance, as `stdout` is reserved for JSON-RPC messages. **Fixed Issues:** - `Failed to parse message` warnings caused by log messages going to stdout - Dotenv initialization messages interfering with MCP protocol - All informational logging now properly directed to stderr If you encounter parsing warnings, ensure no code is writing to stdout directly - use `MCPLogger` instead of console methods. ## Architecture - **DynamicToolGenerator**: Automatically discovers and generates tools for all OneUptime models - **OneUptimeApiService**: Handles API communication with OneUptime instance - **Type Definitions**: Provides type safety and IntelliSense support - **Error Handling**: Comprehensive error handling and user-friendly messages ## Development ### Adding New Models New models are automatically supported! When new models are added to OneUptime: 1. Database models added to `Common/Models/DatabaseModels/Index.ts` 2. Analytics models added to `Common/Models/AnalyticsModels/Index.ts` The MCP server will automatically generate tools for them on the next restart. ### Testing ```bash npm test ``` ### Linting ```bash npm run audit npm run dep-check ``` ## License Apache-2.0 - See LICENSE file for details.