Skip to main content
Glama
OpenSearch Logs MCP Server

OpenSearch Logs MCP Server

OpenSearch Logs MCP Server

MCP (Model Context Protocol) Server zum Abfragen von OpenTelemetry-Logs in OpenSearch. Unterstützt Entwicklungs- (dev) und Produktionsumgebungen (prod).

Architektur

Der Server folgt den SOLID-Prinzipien und der Clean Architecture:

src/
├── index.ts                     # Entry point
├── server.ts                    # MCP Server setup
├── config/
│   └── environments.ts          # Environment configuration
├── types/
│   └── index.ts                 # Type definitions
├── services/
│   ├── opensearch-client.ts     # HTTP client for OpenSearch
│   └── log-search.service.ts    # Business logic
├── tools/
│   ├── tool-definitions.ts      # Tool schemas
│   └── tool-handlers.ts         # Tool execution
└── utils/
    ├── query-builder.ts         # Query construction (Builder pattern)
    └── time-range.ts            # Time utilities

Angewandte Prinzipien

  • Single Responsibility (SRP): Jedes Modul hat eine einzige Verantwortung

  • Open/Closed (OCP): Einfaches Hinzufügen neuer Tools ohne Änderung des bestehenden Codes

  • Dependency Inversion (DIP): Dienste hängen von Abstraktionen (Interfaces) ab

  • Builder Pattern: QueryBuilder für den flüssigen Aufbau von Abfragen

Related MCP server: datadog-logs-mcp

Installation

cd Tools/mcp-opensearch-logs
npm install
npm run build

Konfiguration in Cursor

Füge dies zu deiner Cursor-Konfiguration hinzu (~/.cursor/mcp.json):

{
  "mcpServers": {
    "opensearch-logs": {
      "command": "node",
      "args": ["/ruta/al/proyecto/Tools/mcp-opensearch-logs/dist/index.js"],
      "env": {
        "OPENSEARCH_DEV_USERNAME": "tu-usuario-dev",
        "OPENSEARCH_DEV_PASSWORD": "tu-password-dev",
        "OPENSEARCH_PROD_USERNAME": "tu-usuario-prod",
        "OPENSEARCH_PROD_PASSWORD": "tu-password-prod"
      }
    }
  }
}

Verfügbare Tools

search_logs

Freitextsuche mit Lucene-Syntax.

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

query

string

✅

Abfrage in Lucene-Syntax

timeRange

15m

1h

6h

24h

7d

❌

Zeitbereich (Standard: 1h)

size

number

❌

Maximale Anzahl der Ergebnisse (Standard: 50, max: 200)

Beispiele:

  • "Suche nach Logs, die 'error' enthalten, in dev aus der letzten Stunde"

  • "Suche nach Logs mit Status 500 in prod aus den letzten 6 Stunden"

search_by_trace

Sucht alle Logs eines OpenTelemetry-Traces.

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

traceId

string

✅

Trace-ID

size

number

❌

Maximale Anzahl der Ergebnisse (Standard: 100)

Beispiel:

  • "Gib mir alle Logs für den Trace abc123 in dev"

search_by_service

Filtert Logs nach Dienstname.

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

serviceName

string

✅

Dienstname

level

DEBUG

INFO

WARN

ERROR

FATAL

❌

Log-Stufe

query

string

❌

Zusätzliche Abfrage

timeRange

string

❌

Zeitbereich

size

number

❌

Maximale Anzahl der Ergebnisse

Beispiele:

  • "Suche nach Logs des Dienstes stori-ios in prod"

  • "Gib mir die Fehler des Dienstes stori-ios in dev"

search_errors

Sucht nach Logs der Stufe ERROR oder höher (severityNumber >= 17).

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

serviceName

string

❌

Nach Dienst filtern

query

string

❌

Zusätzliche Abfrage

timeRange

string

❌

Zeitbereich

size

number

❌

Maximale Anzahl der Ergebnisse

Beispiele:

  • "Gib mir die Fehler der letzten Stunde in prod"

  • "Suche nach Fehlern im Zusammenhang mit KYC in dev"

get_field_values

Ruft die häufigsten Werte eines Feldes ab (Aggregation).

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

field

string

✅

Zu aggregierendes Feld

size

number

❌

Maximale Anzahl eindeutiger Werte (Standard: 20)

Beispiele:

  • "Welche Werte hat das Feld 'event' in prod?"

  • "Gib mir die häufigsten Fehlertypen in dev"

search_by_field

Sucht nach einem spezifischen Feld und Wert.

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

field

string

✅

Feldname

value

string

✅

Zu suchender Wert

timeRange

string

❌

Zeitbereich

size

number

❌

Maximale Anzahl der Ergebnisse

Beispiel:

  • "Suche nach Logs mit transactionId=abc123 in prod"

get_mapping

Ruft das Feld-Mapping des Index ab.

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

Beispiel:

  • "Welche Felder sind in den prod-Logs verfügbar?"

get_sample_log

Ruft ein Beispiel-Log ab, um die Struktur zu sehen.

Parameter

Typ

Erforderlich

Beschreibung

environment

dev

prod

✅

Zu durchsuchende Umgebung

Beispiel:

  • "Gib mir ein Beispiel-Log aus prod, um die Struktur zu sehen"

Lucene-Suchsyntax

Das Feld query unterstützt die vollständige Lucene-Syntax:

Syntax

Beschreibung

Beispiel

Begriff

Suche in jedem Feld

error

Feld:Wert

Suche in einem bestimmten Feld

event:kyc_error

Feld:*Wert*

Wildcard

errorMessage:*timeout*

AND

Beide Begriffe

error AND authentication

OR

Einer der Begriffe

error OR warning

NOT

Begriff ausschließen

NOT debug

[a TO b]

Bereich

statusCode:[400 TO 499]

"exakte Phrase"

Exakte Übereinstimmung

"connection refused"

Zeitbereiche

Wert

Beschreibung

15m

Letzte 15 Minuten

1h

Letzte Stunde (Standard)

6h

Letzte 6 Stunden

24h

Letzte 24 Stunden

7d

Letzte 7 Tage

Entwicklung

# Desarrollo con watch mode
npm run dev

# Build
npm run build

# Lint
npm run lint

OpenTelemetry-Logstruktur

Die Logs folgen dem OpenTelemetry-Schema:

{
  "time": "2024-01-15T10:30:00.000Z",
  "severityText": "ERROR",
  "severityNumber": 17,
  "body": "Error message",
  "attributes": {
    "event": "kyc_error",
    "kycFlow": "creditL1",
    "transactionId": "abc123"
  },
  "resource": {
    "service.name": "stori-ios",
    "service.version": "1.0.0"
  }
}

Available Tools

8 tools
get_field_valuesB

Get the most common values for a specific field. Useful for discovering available services, log levels, or other field values.

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
fieldYesThe field to get values for. Examples: 'service.name', 'level', 'host.name'
sizeNoMaximum number of unique values to return (default: 20)
get_mappingA

Get the field mapping for the index. Useful for discovering available fields and their types.

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
get_sample_logB

Get a single sample log entry to see the structure and available fields.

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
search_by_fieldC

Search logs by a specific field and value.

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
fieldYesThe field name to search. Examples: 'user_id', 'request_id', 'endpoint'
valueYesThe value to search for
timeRangeNoTime range to search within
sizeNoMaximum number of results to return (default: 50)
search_by_serviceC

Search logs filtered by service name, optionally with additional filters.

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
serviceNameYesThe service name to filter by
levelNoLog level to filter by
queryNoAdditional free-text query to apply
timeRangeNoTime range to search within
sizeNoMaximum number of results to return (default: 50)
search_by_traceA

Search logs by OpenTelemetry trace ID to see all logs related to a specific request/transaction.

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
traceIdYesThe OpenTelemetry trace ID to search for
sizeNoMaximum number of results to return (default: 100)
search_errorsC

Search for error logs, optionally filtered by service or additional query.

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
serviceNameNoOptional service name to filter by
queryNoAdditional free-text query to apply
timeRangeNoTime range to search within (default: 1h)
sizeNoMaximum number of results to return (default: 50)
search_logsA

Search OpenSearch logs with a free-text query. Supports Lucene query syntax. Examples: 'error AND authentication', 'status:500', 'message:timeout'

NameRequiredDescriptionDefault
environmentYesEnvironment to search: 'dev'/'prod' (iOS) or 'android-dev'/'android-prod' (Android)
queryYesFree-text search query using Lucene syntax. Examples: 'error', 'status:500 AND service.name:auth'
timeRangeNoTime range to search within. Defaults to 1h if not specified.
sizeNoMaximum number of results to return (default: 50, max: 200)

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv1.0.0
    • First observedget_field_values
    • First observedget_mapping
    • First observedget_sample_log
    • First observedsearch_by_field
    • First observedsearch_by_service
    • First observedsearch_by_trace
    • First observedsearch_errors
    • First observedsearch_logs

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between search_by_field, search_by_service, search_errors, and search_logs, which could cause confusion about which to use for specific filtering needs. However, the descriptions clarify their specialized roles, such as search_by_service for service filtering and search_errors for error-specific queries, reducing ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, such as get_field_values, search_by_trace, and search_logs. This uniformity makes the tool set predictable and easy to understand, enhancing usability for agents.

Tool Count5/5

With 8 tools, the server is well-scoped for log analysis in OpenSearch, covering essential operations like discovery (get_field_values, get_mapping, get_sample_log) and various search methods. Each tool serves a clear purpose without feeling excessive or insufficient for the domain.

Completeness4/5

The tool set provides strong coverage for log querying and discovery, including field analysis, sample inspection, and multiple search types. A minor gap is the lack of tools for log management operations like deleting or exporting logs, but core workflows for analysis are well-supported.

Maintenance

ActivityInactive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables querying and searching logs from Kibana (ELK stack) via MCP, with support for project-based data views, trace ID correlation, and log expansion.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to search and analyze SAP Commerce Cloud (CCv2) runtime logs via OpenSearch Dashboards using a session cookie, providing read-only tools for full-text search and error aggregation.
    3
    MIT