Files
oneuptime/MCP/README.md

184 lines
4.2 KiB
Markdown

# 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.