OpenSearch Logs MCP Server
OpenSearch内のOpenTelemetryログをクエリするためのMCP (Model Context Protocol) サーバーです。開発環境 (dev) および本番環境 (prod) をサポートしています。
アーキテクチャ
このサーバーはSOLID原則とクリーンアーキテクチャに従っています:
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適用されている原則
単一責任の原則 (SRP): 各モジュールは単一の責任を持つ
開放閉鎖の原則 (OCP): 既存のコードを変更せずに新しいツールを簡単に追加できる
依存性逆転の原則 (DIP): サービスは抽象(インターフェース)に依存する
ビルダーパターン: クエリを流れるように構築するための
QueryBuilder
インストール
cd Tools/mcp-opensearch-logs
npm install
npm run buildCursorでの設定
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"
}
}
}
}利用可能なツール
search_logs
Lucene構文を使用したフリーテキスト検索。
パラメータ | 型 | 必須 | 説明 | ||||
environment |
|
| ✅ | クエリ対象の環境 | |||
query | string | ✅ | Lucene構文のクエリ | ||||
timeRange |
|
|
|
|
| ❌ | 時間範囲 (デフォルト: 1h) |
size | number | ❌ | 最大結果数 (デフォルト: 50, 最大: 200) |
例:
"dev環境で過去1時間の'error'を含むログを検索"
"prod環境で過去6時間のステータス500のログを検索"
search_by_trace
OpenTelemetryのトレースに関連するすべてのログを検索します。
パラメータ | 型 | 必須 | 説明 | |
environment |
|
| ✅ | クエリ対象の環境 |
traceId | string | ✅ | トレースID | |
size | number | ❌ | 最大結果数 (デフォルト: 100) |
例:
"dev環境のトレースabc123のログをすべて表示"
search_by_service
サービス名でログをフィルタリングします。
パラメータ | 型 | 必須 | 説明 | ||||
environment |
|
| ✅ | クエリ対象の環境 | |||
serviceName | string | ✅ | サービス名 | ||||
level |
|
|
|
|
| ❌ | ログレベル |
query | string | ❌ | 追加のクエリ | ||||
timeRange | string | ❌ | 時間範囲 | ||||
size | number | ❌ | 最大結果数 |
例:
"prod環境のstori-iosサービスのログを検索"
"dev環境のstori-iosサービスのエラーを表示"
search_errors
ERRORレベル以上のログを検索します (severityNumber >= 17)。
パラメータ | 型 | 必須 | 説明 | |
environment |
|
| ✅ | クエリ対象の環境 |
serviceName | string | ❌ | サービスでフィルタリング | |
query | string | ❌ | 追加のクエリ | |
timeRange | string | ❌ | 時間範囲 | |
size | number | ❌ | 最大結果数 |
例:
"prod環境の過去1時間のエラーを表示"
"dev環境のKYC関連のエラーを検索"
get_field_values
フィールドの最も一般的な値を取得します(集計)。
パラメータ | 型 | 必須 | 説明 | |
environment |
|
| ✅ | クエリ対象の環境 |
field | string | ✅ | 集計対象のフィールド | |
size | number | ❌ | ユニークな値の最大数 (デフォルト: 20) |
例:
"prod環境の'event'フィールドの値は何ですか?"
"dev環境で最も一般的なエラータイプを表示"
search_by_field
特定のフィールドと値で検索します。
パラメータ | 型 | 必須 | 説明 | |
environment |
|
| ✅ | クエリ対象の環境 |
field | string | ✅ | フィールド名 | |
value | string | ✅ | 検索する値 | |
timeRange | string | ❌ | 時間範囲 | |
size | number | ❌ | 最大結果数 |
例:
"prod環境でtransactionId=abc123のログを検索"
get_mapping
インデックスのフィールドマッピングを取得します。
パラメータ | 型 | 必須 | 説明 | |
environment |
|
| ✅ | クエリ対象の環境 |
例:
"prod環境のログで利用可能なフィールドは何ですか?"
get_sample_log
構造を確認するためのサンプルログを取得します。
パラメータ | 型 | 必須 | 説明 | |
environment |
|
| ✅ | クエリ対象の環境 |
例:
"構造を確認するためにprod環境のログサンプルを表示"
Lucene検索構文
queryフィールドは完全なLucene構文をサポートしています:
構文 | 説明 | 例 |
| 任意のフィールドを検索 |
|
| 特定のフィールドを検索 |
|
| ワイルドカード |
|
| 両方の条件 |
|
| いずれかの条件 |
|
| 条件を除外 |
|
| 範囲指定 |
|
| 完全一致 |
|
時間範囲
値 | 説明 |
| 過去15分 |
| 過去1時間 (デフォルト) |
| 過去6時間 |
| 過去24時間 |
| 過去7日間 |
開発
# Desarrollo con watch mode
npm run dev
# Build
npm run build
# Lint
npm run lintOpenTelemetryログ構造
ログは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"
}
}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
