Skip to main content
Glama
dmayan-ss

mcp-opensearch

by dmayan-ss
README.md
# mcp-opensearch

Read-only MCP server for exploring and searching [OpenSearch 2](https://opensearch.org/) clusters. Ideal for log analysis, index exploration, and query execution.

## Tools

| Tool | Description |
|---|---|
| `ping` | Check connectivity — returns cluster name and version |
| `cluster_health` | Cluster health status (green/yellow/red), node and shard counts |
| `list_indices` | List indices with health, doc count, and size. Optional pattern filter |
| `get_index_mapping` | Show field types and structure for an index |
| `search` | Execute queries using OpenSearch Query DSL (JSON) |
| `count` | Count documents matching an optional query |
| `list_aliases` | List all index aliases |
| `get_document` | Retrieve a specific document by ID |

## Installation — Claude Desktop Extension

1. Build the extension package:

```bash
npx @anthropic-ai/mcpb pack .
```

2. In Claude Desktop, go to **Settings → Extensions** and upload `mcpopensearch.mcpb`.

3. Configure via the UI:
   - **OpenSearch URL** — e.g. `http://your-opensearch:9200`
   - **Username** / **Password** — optional, for basic auth

## Installation — Claude Code

Add to your `.claude/settings.json`:

```json
{
  "mcpServers": {
    "opensearch": {
      "command": "uv",
      "args": ["--directory", "/path/to/mcpopensearch", "run", "server.py"],
      "env": {
        "OPENSEARCH_URL": "http://localhost:9200",
        "OPENSEARCH_USERNAME": "",
        "OPENSEARCH_PASSWORD": ""
      }
    }
  }
}
```

## Environment Variables

| Variable | Default | Description |
|---|---|---|
| `OPENSEARCH_URL` | `http://localhost:9200` | OpenSearch cluster URL |
| `OPENSEARCH_USERNAME` | *(none)* | Basic auth username |
| `OPENSEARCH_PASSWORD` | *(none)* | Basic auth password |

## Query Examples

Search for errors in the last hour:
```json
{
  "query": {
    "bool": {
      "must": [
        {"match": {"level": "ERROR"}},
        {"range": {"@timestamp": {"gte": "now-1h"}}}
      ]
    }
  },
  "sort": [{"@timestamp": "desc"}]
}
```

Count documents by status code:
```json
{
  "query": {"match_all": {}},
  "aggs": {"status_codes": {"terms": {"field": "response_code"}}}
}
```

## License

MIT

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation4/5

Tools target distinct resources/actions: cluster health, index listing, mappings, search, count, aliases, and document retrieval. Ping and cluster_health both relate to health but are clearly differentiated, as are search and count; no tools appear to duplicate each other.

Naming Consistency3/5

Names are consistently lowercase snake_case, but conventions vary: bare verbs (ping, search, count), list_* (list_indices, list_aliases), get_* (get_document, get_index_mapping), and one noun-phrase tool (cluster_health). This is readable but not a uniform verb_noun pattern.

Tool Count5/5

Eight tools fit a focused OpenSearch query and observability server well. There is no bloat or redundancy, and each tool covers a meaningful operation.

Completeness3/5

The set covers health, index listing/mapping, search, count, aliases, and document retrieval, but lacks write operations and common admin reads like index settings or cluster/node stats. For a read-only observability tool it is workable, but as a general OpenSearch surface it has notable gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues