Skip to main content
Glama
greyaperez

SumoLogic MCP Server

by greyaperez
README.md
# SumoLogic MCP Server

> **Transform SumoLogic interactions with natural language** - A Model Context Protocol (MCP) server that makes SumoLogic operations as simple as asking questions in plain English.

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
[![MCP](https://img.shields.io/badge/MCP-Compatible-blue.svg)](https://modelcontextprotocol.io/)

## 🚀 What Makes This Special

This isn't just another API wrapper. With **contextual awareness** powered by `sumologic-context.json`, you can interact with SumoLogic using natural language that understands your specific environment, resources, and common queries.

### Before vs After

**Before (Traditional API):**
```bash
# Complex API calls with exact syntax
curl -X POST "https://api.sumologic.com/api/v1/search/jobs" \
  -H "Authorization: Basic <encoded>" \
  -d '{"query":"_sourceCategory=webapp | count by _sourceHost", "from":"2024-01-01T00:00:00", "to":"2024-01-01T23:59:59"}'
```

**After (Natural Language with Context):**
```
"Show me error counts from our production web servers yesterday"
"Which collectors are having ingestion issues?"
"Create a dashboard for our new microservice deployment"
```

## 🎯 Key Features

### 🧠 **Contextual Intelligence**
The `sumologic-context.json` configuration transforms basic API access into an intelligent assistant that knows:
- Your specific collectors and their purposes
- Common queries and their business meaning
- Resource relationships and dependencies
- Team-specific terminology and workflows

### 🔧 **Complete SumoLogic Operations**
- **Connection Management**: Verify connectivity and health
- **Collectors & Sources**: Create, manage, and monitor data ingestion
- **Search & Analytics**: Execute complex queries with natural language
- **Monitors & Alerts**: Manage monitoring configurations
- **Dashboards**: Create and update visualizations

### 💬 **Natural Language Interface**
Ask questions like:
- *"What's the error rate for our payment service this week?"*
- *"Show me slow database queries from the last hour"*
- *"Create a collector for our new Kubernetes cluster"*
- *"Are there any critical alerts I should know about?"*

## 🌟 The Power of sumologic-context.json

### What is Contextual Awareness?

The `sumologic-context.json` file is your secret weapon. It teaches the MCP server about **your specific SumoLogic environment**, enabling incredibly intuitive interactions.

### Real-World Context Configuration

```json
{
  "version": "1.0",
  "organization": "acme-corp",
  "environments": {
    "production": {
      "applications": {
        "web-frontend": {
          "sourceCategory": "prod/web/frontend",
          "sourceName": "nginx-*",
          "description": "Production web frontend servers (Nginx)",
          "commonFilters": ["_sourceHost=web-prod-*"],
          "sampleQueries": [
            "_sourceCategory=\"prod/web/frontend\" | where status_code >= 400",
            "_sourceCategory=\"prod/web/frontend\" | timeslice 1m | count by status_code",
            "_sourceCategory=\"prod/web/frontend\" | json field=response_time | avg(response_time)"
          ]
        },
        "api-backend": {
          "sourceCategory": "prod/api/backend", 
          "sourceName": "api-server-*",
          "description": "Production API backend services",
          "commonFilters": ["_sourceHost=api-prod-*"],
          "sampleQueries": [
            "_sourceCategory=\"prod/api/backend\" error OR exception",
            "_sourceCategory=\"prod/api/backend\" | json field=response_time | avg(response_time) by endpoint",
            "_sourceCategory=\"prod/api/backend\" | where status_code = 500"
          ]
        },
        "mobile-app": {
          "sourceCategory": "prod/mobile/app",
          "sourceName": "mobile-api-*",
          "description": "Production mobile application backend",
          "commonFilters": ["_sourceHost=mobile-prod-*"],
          "sampleQueries": [
            "_sourceCategory=\"prod/mobile/app\" crash OR exception",
            "_sourceCategory=\"prod/mobile/app\" | json field=user_id | count by user_id"
          ]
        }
      },
      "infrastructure": {
        "database": {
          "sourceCategory": "prod/database/postgresql",
          "sourceName": "postgres-*",
          "description": "Production PostgreSQL database logs",
          "commonFilters": ["_sourceHost=db-prod-*"],
          "sampleQueries": [
            "_sourceCategory=\"prod/database/postgresql\" slow query",
            "_sourceCategory=\"prod/database/postgresql\" | where duration > 1000"
          ]
        },
        "kubernetes": {
          "sourceCategory": "prod/k8s/containers",
          "sourceName": "k8s-*",
          "description": "Production Kubernetes cluster logs",
          "commonFilters": ["_sourceHost=k8s-*"],
          "namespaces": ["default", "production", "monitoring", "ingress-nginx"]
        }
      }
    },
    "staging": {
      "applications": {
        "web-frontend": {
          "sourceCategory": "staging/web/frontend",
          "sourceName": "nginx-staging-*",
          "description": "Staging web frontend servers"
        },
        "api-backend": {
          "sourceCategory": "staging/api/backend", 
          "sourceName": "api-staging-*",
          "description": "Staging API backend services"
        }
      }
    }
  },
  "shortcuts": {
    "errors": {
      "description": "Find error messages and exceptions",
      "queryTemplate": "error OR exception OR fatal OR \"stack trace\" OR \"internal server error\"",
      "timeRange": "-15m"
    },
    "performance": {
      "description": "Performance monitoring with configurable threshold",
      "queryTemplate": "response_time OR duration OR latency | where ${metric} > ${threshold}",
      "defaultParams": {
        "metric": "response_time", 
        "threshold": "1000"
      },
      "timeRange": "-1h"
    },
    "security": {
      "description": "Security-related events and authentication failures",
      "queryTemplate": "authentication OR authorization OR \"access denied\" OR \"unauthorized\"",
      "timeRange": "-1h"
    },
    "database-slow": {
      "description": "Slow database queries",
      "queryTemplate": "\"slow query\" OR (duration > ${threshold}) OR \"query timeout\"",
      "defaultParams": {
        "threshold": "5000"
      },
      "timeRange": "-30m"
    }
  },
  "commonFields": {
    "timestamp_field": "@timestamp",
    "host_field": "_sourceHost",
    "service_field": "service_name",
    "environment_field": "environment",
    "log_level_field": "level"
  }
}
```

### Contextual Examples in Action

With this sophisticated context configuration, see how natural and powerful these interactions become:

#### Example 1: Multi-Environment Error Analysis
**You ask:** *"Compare error rates between production and staging web frontend"*

**AI intelligently:**
1. Identifies `web-frontend` in both `production` and `staging` environments
2. Uses context-aware queries:
   - Production: `_sourceCategory="prod/web/frontend" | where status_code >= 400`
   - Staging: `_sourceCategory="staging/web/frontend" | where status_code >= 400`  
3. Applies appropriate time ranges and provides comparative analysis
4. Reports: *"Production web frontend: 0.2% error rate (normal), Staging: 1.1% error rate (elevated - likely from recent deployment testing)"*

#### Example 2: Infrastructure Health Check
**You ask:** *"How is our Kubernetes cluster performing?"*

**AI automatically:**
1. Maps "Kubernetes cluster" to `prod/k8s/containers` source category
2. Checks across configured namespaces: `default`, `production`, `monitoring`, `ingress-nginx`
3. Applies infrastructure-specific filters: `_sourceHost=k8s-*`
4. Uses sample queries for container health and resource usage
5. Responds: *"K8s cluster healthy: 247 running pods across 4 namespaces. No resource constraints detected in production namespace."*

#### Example 3: Smart Shortcut Usage  
**You ask:** *"Show me slow database queries from the last hour"*

**AI leverages shortcuts:**
1. Recognizes "slow database queries" maps to `database-slow` shortcut
2. Applies the template: `"slow query" OR (duration > 5000) OR "query timeout"`
3. Targets PostgreSQL logs: `_sourceCategory="prod/database/postgresql"`
4. Uses default threshold (5000ms) and custom time range (-1h)
5. Results: *"Found 12 slow queries in the last hour. Average duration: 7.2s. Most frequent: user authentication queries."*

#### Example 4: Cross-Service Performance Analysis
**You ask:** *"What's causing the mobile app performance issues?"*

**AI performs comprehensive analysis:**
1. Identifies `mobile-app` application context
2. Runs mobile-specific queries: `_sourceCategory="prod/mobile/app" crash OR exception`  
3. Cross-references with `api-backend` performance: `avg(response_time) by endpoint`
4. Checks `database` logs for related slow queries
5. Synthesizes findings: *"Mobile app shows 15% increase in crash rate. Root cause: API endpoint /user/profile averaging 3.2s response time due to database connection pool exhaustion."*

#### Example 5: Security Incident Response
**You ask:** *"Check for any security issues in the last hour"*

**AI uses security shortcut:**
1. Applies `security` shortcut template across all production applications
2. Searches: `authentication OR authorization OR "access denied" OR "unauthorized"`
3. Scans web-frontend, api-backend, and mobile-app simultaneously
4. Correlates findings across services
5. Reports: *"Security alert: 47 unauthorized access attempts detected on API backend from IP 192.168.1.100. Web frontend shows corresponding 403 responses."*

## 📋 Prerequisites

- **Node.js 20+** (LTS recommended)
- **SumoLogic account** with API access
- **API credentials** (Access ID and Key)
- **Docker** (optional, for containerized deployment)

## ⚡ Quick Start

### 1. Installation

```bash
git clone https://github.com/greyaperez/mcp-sumologic.git
cd mcp-sumologic
npm install
```

### 2. Configuration

```bash
# Copy environment template
cp .env.example .env
```

Edit `.env` with your SumoLogic credentials:

```env
SUMOLOGIC_ACCESS_ID=your_access_id
SUMOLOGIC_ACCESS_KEY=your_access_key
SUMOLOGIC_API_ENDPOINT=https://api.us2.sumologic.com/api
SUMOLOGIC_CONTEXT_CONFIG=./sumologic-context.json
SUMOLOGIC_DEFAULT_TIMEZONE=UTC
```

### 3. Create Your Context File

Create `sumologic-context.json` with your environment details:

```json
{
  "version": "1.0",
  "organization": "your-org",
  "environments": {
    "production": {
      "applications": {
        "web-frontend": {
          "sourceCategory": "prod/web/frontend",
          "sourceName": "nginx-*",
          "description": "Production web frontend servers",
          "commonFilters": ["_sourceHost=web-prod-*"],
          "sampleQueries": [
            "_sourceCategory=\"prod/web/frontend\" | where status_code >= 400"
          ]
        }
      },
      "infrastructure": {
        "database": {
          "sourceCategory": "prod/database/postgresql",
          "sourceName": "postgres-*", 
          "description": "Production PostgreSQL database logs",
          "commonFilters": ["_sourceHost=db-prod-*"]
        }
      }
    }
  },
  "shortcuts": {
    "errors": {
      "description": "Find error messages and exceptions",
      "queryTemplate": "error OR exception OR fatal",
      "timeRange": "-15m"
    }
  },
  "commonFields": {
    "timestamp_field": "@timestamp",
    "host_field": "_sourceHost",
    "service_field": "service_name"
  }
}
```

### 4. Run the Server

```bash
# Development mode
npm run dev

# Production mode
npm run build && npm start
```

## 🐳 Docker Deployment

### Build and Run

```bash
# Build image
docker build -t mcp/sumologic .

# Run with environment variables
docker run -i --rm \
  -e SUMOLOGIC_ACCESS_ID="your_access_id" \
  -e SUMOLOGIC_ACCESS_KEY="your_access_key" \
  -e SUMOLOGIC_API_ENDPOINT="https://api.us2.sumologic.com/api" \
  -e SUMOLOGIC_CONTEXT_CONFIG="./sumologic-context.json" \
  -e SUMOLOGIC_DEFAULT_TIMEZONE="UTC" \
  mcp/sumologic
```

## 🔧 Claude Desktop Integration

Add to your Claude Desktop configuration:

### Option 1: Direct Node.js

```json
{
  "mcpServers": {
    "sumologic": {
      "command": "node",
      "args": ["/path/to/mcp-sumologic/dist/index.js"],
      "env": {
        "SUMOLOGIC_ACCESS_ID": "your_access_id",
        "SUMOLOGIC_ACCESS_KEY": "your_access_key",
        "SUMOLOGIC_API_ENDPOINT": "https://api.us2.sumologic.com/api",
        "SUMOLOGIC_CONTEXT_CONFIG": "./sumologic-context.json",
        "SUMOLOGIC_DEFAULT_TIMEZONE": "UTC"
      }
    }
  }
}
```

### Option 2: Docker

```json
{
  "mcpServers": {
    "sumologic": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "SUMOLOGIC_ACCESS_ID",
        "-e", "SUMOLOGIC_ACCESS_KEY",
        "-e", "SUMOLOGIC_API_ENDPOINT",
        "-e", "SUMOLOGIC_CONTEXT_CONFIG",
        "-e", "SUMOLOGIC_DEFAULT_TIMEZONE",
        "mcp/sumologic"
      ],
      "env": {
        "SUMOLOGIC_ACCESS_ID": "your_access_id",
        "SUMOLOGIC_ACCESS_KEY": "your_access_key",
        "SUMOLOGIC_API_ENDPOINT": "https://api.us2.sumologic.com/api",
        "SUMOLOGIC_CONTEXT_CONFIG": "./sumologic-context.json",
        "SUMOLOGIC_DEFAULT_TIMEZONE": "UTC"
      }
    }
  }
}
```

## 🛠️ Available Tools

| Tool | Description | Context-Aware |
|------|-------------|---------------|
| `check_connection` | Verify API connectivity | ✅ |
| `list_collectors` | List all collectors with business context | ✅ |
| `get_collector` | Get collector details with relationship info | ✅ |
| `create_hosted_collector` | Create collector with smart defaults | ✅ |
| `update_collector` | Update collector properties | ✅ |
| `delete_collector` | Delete collector with impact analysis | ✅ |
| `list_sources` | List sources with purpose descriptions | ✅ |
| `get_source` | Get source details with context | ✅ |
| `create_http_source` | Create HTTP source with templates | ✅ |
| `start_search_job` | Execute searches with query suggestions | ✅ |
| `check_search_job_status` | Check search status | ✅ |
| `get_search_job_results` | Get results with business interpretation | ✅ |
| `list_monitors` | List monitors with business impact | ✅ |
| `get_monitor` | Get monitor details with context | ✅ |

## 💡 Best Practices for Context Configuration

### 1. **Organize by Environment and Service Type**
```json
{
  "environments": {
    "production": {
      "applications": {
        "web-frontend": {
          "sourceCategory": "prod/web/frontend",
          "description": "Production web frontend servers (Nginx)",
          "commonFilters": ["_sourceHost=web-prod-*"]
        }
      },
      "infrastructure": {
        "database": {
          "sourceCategory": "prod/database/postgresql", 
          "description": "Production PostgreSQL database logs"
        }
      }
    }
  }
}
```

### 2. **Include Real SumoLogic Queries**
```json
{
  "sampleQueries": [
    "_sourceCategory=\"prod/web/frontend\" | where status_code >= 400",
    "_sourceCategory=\"prod/api/backend\" | json field=response_time | avg(response_time) by endpoint"
  ]
}
```

### 3. **Create Reusable Query Shortcuts**
```json
{
  "shortcuts": {
    "performance": {
      "description": "Performance monitoring with configurable threshold",
      "queryTemplate": "response_time OR duration OR latency | where ${metric} > ${threshold}",
      "defaultParams": {
        "metric": "response_time", 
        "threshold": "1000"
      },
      "timeRange": "-1h"
    }
  }
}
```

### 4. **Standardize Field Mappings**
```json
{
  "commonFields": {
    "timestamp_field": "@timestamp",
    "host_field": "_sourceHost", 
    "service_field": "service_name",
    "environment_field": "environment",
    "log_level_field": "level"
  }
}
```

### 5. **Use Consistent Naming Patterns**
- **Source Categories**: `{env}/{service-type}/{service-name}`
- **Source Names**: `{service}-{env}-*` (e.g., `nginx-prod-*`)
- **Host Filters**: `_sourceHost={service}-{env}-*`

## 🔍 Usage Examples

### Environment-Aware Queries
```
"Show me errors in production web frontend"
"Compare API performance between staging and production"  
"Check database health in all environments"
```

### Shortcut-Powered Analysis
```
"Run security check for the last hour"
"Find slow database queries with default threshold"
"Show performance issues with response time over 2000ms"
```

### Infrastructure Intelligence
```
"How is our Kubernetes cluster doing?"
"Check Redis cache hit rates in production"
"Show load balancer health across all environments"
```

### Cross-Service Correlation  
```
"Is the mobile app backend causing the database slowdown?"
"Compare error rates between web frontend and API backend"
"Show the full request flow from load balancer to database"
```

### Proactive Management
```
"Create a monitor for API response times over 1 second"
"Set up alerting for Kubernetes pod crashes"
"Monitor database connection pool exhaustion"
```

## 🤝 Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

---

**Ready to transform your SumoLogic experience?** Start with a simple context file and watch as complex operations become as easy as asking questions! 🚀