SolarWinds Logs MCP Server
by jakenuts
# SolarWinds Logs MCP Server
A Model Context Protocol (MCP) server for accessing and visualizing SolarWinds Observability logs.
## Note -
This server is currently incomplete as it does not support
structured data search (a limitation of the REST API?). I'm
uncertain if it also needs to accept a data center to use
in the api endpoint calls. Will address both when time allows
(needed it for a real work problem, have to fix that first)
### Tools
#### search_logs
Search SolarWinds Observability logs with optional filtering
- Takes search parameters including filter, time range, and pagination options
- Returns formatted log entries with timestamps, hostnames, and messages
- Supports advanced filtering by group, entity, and more
- Default search range is the last 24 hours
#### visualize_logs
Generate a histogram json response for of log events
- Formatted for Claude and canvas representations
- Configurable time intervals (minute, hour, day)
- Supports UTC or local time zones
- Customizable query filters and time ranges
- Default visualization range is the last 24 hours
### Resources
#### SolarWinds Log Search
- URI Template: `solarwinds://{query}/search`
- Returns log entries matching the specified query
- Example: `solarwinds://error/search`
## Installation
Optionally install from npm:
```bash
npm install -g mcp-solarwinds
```
Or clone and build from source:
```bash
git clone https://github.com/@jakenuts/mcp-solarwinds.git
cd mcp-solarwinds
npm install
npm run build
```
Or just use npx in your configurations
### For Cline VSCode Extension
Add to `%APPDATA%/Code - Insiders/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`:
```json
{
"mcpServers": {
"solarwinds": {
"command": "npx",
"args": ["-y", "mcp-solarwinds"],
"env": {
"SOLARWINDS_API_TOKEN": "your-api-token"
},
"autoApprove": ["search_logs", "visualize_logs"]
}
}
}
```
### For Claude Desktop
Add to the appropriate config file:
Windows: `%APPDATA%/Claude/claude_desktop_config.json`
MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"solarwinds": {
"command": "npx",
"args": ["-y", "mcp-solarwinds"],
"env": {
"SOLARWINDS_API_TOKEN": "your-api-token"
}
}
}
}
```
### Special Windows Configuration
If you encounter the ENOENT spawn npx issue on Windows, use this alternative configuration that specifies the full paths:
```json
{
"mcpServers": {
"solarwinds": {
"command": "C:\\Users\\[username]\\AppData\\Roaming\\nvm\\[node-version]\\node.exe",
"args": [
"C:\\Users\\[username]\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npx-cli.js",
"-y",
"mcp-solarwinds"
],
"env": {
"SOLARWINDS_API_TOKEN": "your-api-token"
}
}
}
}
```
## Configuration
The SolarWinds Observability MCP server requires an API token to authenticate with the SolarWinds Observability API.
### Configuration Methods
There are multiple ways to provide the API token:
1. **MCP Settings Configuration (Recommended)**: Configure the token in your MCP settings file
2. **Environment Variable**: Set the `SOLARWINDS_API_TOKEN` environment variable
3. **Local .env File (For Testing)**: Create a `.env` file in the project root with `SOLARWINDS_API_TOKEN=your-token`
For local testing, you can:
1. Copy `.env.example` to `.env` and add your token
2. Run the example script: `node examples/local-test.js`
## Tool Usage Examples
### search_logs
Basic search:
```json
{
"filter": "error"
}
```
Advanced search with time range and pagination:
```json
{
"filter": "error",
"entityId": "web-server",
"startTime": "2025-03-01T00:00:00Z",
"endTime": "2025-03-05T23:59:59Z",
"pageSize": 100,
"direction": "backward"
}
```
### visualize_logs
Basic histogram (ASCII chart):
```json
{
"filter": "error",
"interval": "hour"
}
```
Advanced visualization (ASCII chart):
```json
{
"filter": "error",
"entityId": "web-server",
"startTime": "2025-03-01T00:00:00Z",
"endTime": "2025-03-05T23:59:59Z",
"interval": "day",
"use_utc": true
}
```
Claude visualization (JSON format):
```json
{
"filter": "error",
"interval": "hour",
"format": "json"
}
```
The JSON format returns data that Claude can visualize as a chart:
```json
{
"timeRanges": ["12:02", "12:03", "12:04", "12:05", "12:06", "12:07", "12:08", "12:09"],
"counts": [261, 47, 48, 48, 31, 262, 270, 33],
"total": 1000,
"queryParams": {
"query": "error",
"startTime": "2025-03-05T00:00:00.000Z",
"endTime": "2025-03-05T23:59:59.000Z"
}
}
```
## Development
Install dependencies:
```bash
npm install
```
Build the server:
```bash
npm run build
```
### Debugging
Since MCP servers communicate over stdio, debugging can be challenging. The MCP Inspector provides helpful debugging tools:
```bash
npm run debug:inspector
```
This will provide a URL to access the inspector in your browser, where you can:
- View all MCP messages
- Inspect request/response payloads
- Test tools interactively
- Monitor server state
For local testing without the MCP framework:
```bash
# Create a .env file with your token
cp .env.example .env
# Edit .env to add your token
# Run the example script
node examples/local-test.js
```
## Technical Details
- Built with TypeScript and the MCP SDK
- Uses axios for API communication
- Supports ISO 8601 date formats for time ranges
- Generates ASCII histograms for log visualization
- Default search range: last 24 hours
- Default page size: 50 logs
- Supports multiple authentication methods