OpenSearch Logs MCP Server
Provides tools for querying OpenTelemetry logs stored in OpenSearch, supporting search by Lucene syntax, trace ID, service name, error levels, field values, and index mapping across development and production environments.
Enables querying and analysis of OpenTelemetry log data, including structured logs with attributes, resource information, and trace-based correlation for distributed tracing workflows.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenSearch Logs MCP Serversearch errors in prod from the last hour"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenSearch Logs MCP Server
MCP (Model Context Protocol) server para consultar logs de OpenTelemetry en OpenSearch. Soporta ambientes de desarrollo (dev) y producción (prod).
Arquitectura
El servidor sigue los principios SOLID y 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 utilitiesPrincipios Aplicados
Single Responsibility (SRP): Cada módulo tiene una única responsabilidad
Open/Closed (OCP): Fácil agregar nuevas herramientas sin modificar código existente
Dependency Inversion (DIP): Los servicios dependen de abstracciones (interfaces)
Builder Pattern:
QueryBuilderpara construcción fluida de queries
Instalación
cd Tools/mcp-opensearch-logs
npm install
npm run buildConfiguración en Cursor
Agrega esto a tu configuración de Cursor (~/.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"
}
}
}
}Herramientas Disponibles
search_logs
Búsqueda libre con sintaxis Lucene.
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
query | string | ✅ | Query en sintaxis Lucene |
timeRange |
| ❌ | Rango de tiempo (default: 1h) |
size | number | ❌ | Máximo de resultados (default: 50, max: 200) |
Ejemplos:
"Busca logs que contengan 'error' en dev de la última hora"
"Busca logs con status 500 en prod de las últimas 6 horas"
search_by_trace
Busca todos los logs de un trace de OpenTelemetry.
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
traceId | string | ✅ | ID del trace |
size | number | ❌ | Máximo de resultados (default: 100) |
Ejemplo:
"Dame todos los logs del trace abc123 en dev"
search_by_service
Filtra logs por nombre de servicio.
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
serviceName | string | ✅ | Nombre del servicio |
level |
| ❌ | Nivel de log |
query | string | ❌ | Query adicional |
timeRange | string | ❌ | Rango de tiempo |
size | number | ❌ | Máximo de resultados |
Ejemplos:
"Busca logs del servicio stori-ios en prod"
"Dame los errores del servicio stori-ios en dev"
search_errors
Busca logs de nivel ERROR o superior (severityNumber >= 17).
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
serviceName | string | ❌ | Filtrar por servicio |
query | string | ❌ | Query adicional |
timeRange | string | ❌ | Rango de tiempo |
size | number | ❌ | Máximo de resultados |
Ejemplos:
"Dame los errores de la última hora en prod"
"Busca errores relacionados con KYC en dev"
get_field_values
Obtiene los valores más comunes de un campo (agregación).
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
field | string | ✅ | Campo a agregar |
size | number | ❌ | Máximo de valores únicos (default: 20) |
Ejemplos:
"Qué valores tiene el campo 'event' en prod?"
"Dame los tipos de error más comunes en dev"
search_by_field
Busca por un campo y valor específico.
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
field | string | ✅ | Nombre del campo |
value | string | ✅ | Valor a buscar |
timeRange | string | ❌ | Rango de tiempo |
size | number | ❌ | Máximo de resultados |
Ejemplo:
"Busca logs con transactionId=abc123 en prod"
get_mapping
Obtiene el mapeo de campos del índice.
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
Ejemplo:
"Qué campos están disponibles en los logs de prod?"
get_sample_log
Obtiene un log de ejemplo para ver la estructura.
Parámetro | Tipo | Requerido | Descripción |
environment |
| ✅ | Ambiente a consultar |
Ejemplo:
"Dame un ejemplo de log de prod para ver la estructura"
Sintaxis de Búsqueda Lucene
El campo query soporta sintaxis Lucene completa:
Sintaxis | Descripción | Ejemplo |
| Busca en cualquier campo |
|
| Busca en campo específico |
|
| Wildcard |
|
| Ambos términos |
|
| Cualquier término |
|
| Excluye término |
|
| Rango |
|
| Match exacto |
|
Rangos de Tiempo
Valor | Descripción |
| Últimos 15 minutos |
| Última hora (default) |
| Últimas 6 horas |
| Últimas 24 horas |
| Últimos 7 días |
Desarrollo
# Desarrollo con watch mode
npm run dev
# Build
npm run build
# Lint
npm run lintEstructura de Logs OpenTelemetry
Los logs siguen el esquema OpenTelemetry:
{
"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"
}
}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