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 utilitiesAngewandte 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:
QueryBuilderfür den flüssigen Aufbau von Abfragen
Installation
cd Tools/mcp-opensearch-logs
npm install
npm run buildKonfiguration 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 |
|
| ✅ | Zu durchsuchende Umgebung | |||
query | string | ✅ | Abfrage in Lucene-Syntax | ||||
timeRange |
|
|
|
|
| ❌ | 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 |
|
| ✅ | 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 |
|
| ✅ | Zu durchsuchende Umgebung | |||
serviceName | string | ✅ | Dienstname | ||||
level |
|
|
|
|
| ❌ | 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 |
|
| ✅ | 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 |
|
| ✅ | 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 |
|
| ✅ | 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 |
|
| ✅ | 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 |
|
| ✅ | 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 |
| Suche in jedem Feld |
|
| Suche in einem bestimmten Feld |
|
| Wildcard |
|
| Beide Begriffe |
|
| Einer der Begriffe |
|
| Begriff ausschließen |
|
| Bereich |
|
| Exakte Übereinstimmung |
|
Zeitbereiche
Wert | Beschreibung |
| Letzte 15 Minuten |
| Letzte Stunde (Standard) |
| Letzte 6 Stunden |
| Letzte 24 Stunden |
| Letzte 7 Tage |
Entwicklung
# Desarrollo con watch mode
npm run dev
# Build
npm run build
# Lint
npm run lintOpenTelemetry-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"
}
}Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/luis-dominguez-stori/MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
