{"_id":"@alexbuzo/graylog-mcp","_rev":"6-dcc38e9c32237b7a5f99498ebd3a6fcd","name":"@alexbuzo/graylog-mcp","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@alexbuzo/graylog-mcp","version":"0.1.0","keywords":["graylog","mcp","model-context-protocol","cli","logs"],"author":{"name":"Aliaksei Buzo aliakseibuzo@gmail.com"},"license":"MIT","_id":"@alexbuzo/graylog-mcp@0.1.0","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/graylog-mcp#readme","bugs":{"url":"https://github.com/abuzo/graylog-mcp/issues"},"bin":{"graylog-mcp":"dist/cli.js"},"dist":{"shasum":"a8c61bd8547f84536c9e9e53711472700d4e1a72","tarball":"https://registry.npmjs.org/@alexbuzo/graylog-mcp/-/graylog-mcp-0.1.0.tgz","fileCount":17,"integrity":"sha512-SzKRsN3QFXkWWM2cPgEHkZAwiryYp7YOyTXI8bFt+cLA1b5ad2eGg+3R8pY19C0gLRvQwNkOPUZ1jeZFytgpcQ==","signatures":[{"sig":"MEYCIQCGr45gn+eLhz17zQlE9fcKTZpwqgfg5NIire5T0IDXLwIhAIni8Sl8o5ICVzhjNhnJdvN04Ai7WCh8HuWIyKhQj96r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21244},"main":"dist/cli.js","type":"module","types":"dist/cli.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/cli.d.ts","default":"./dist/cli.js"}},"gitHead":"8d7b2550b5085511e12149f048a0ba573ea93d1d","scripts":{"dev":"tsx src/cli.ts","test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/graylog-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Graylog MCP server exposing search tools over stdio","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^3.25.76","yargs":"^18.0.0","dotenv":"^17.2.3","undici":"^7.16.0","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","typescript":"^5.9.3","@types/node":"^24.6.2","@types/yargs":"^17.0.33"},"_npmOperationalInternal":{"tmp":"tmp/graylog-mcp_0.1.0_1759403188805_0.7429644486555131","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alexbuzo/graylog-mcp","version":"0.1.1","keywords":["graylog","mcp","model-context-protocol","cli","logs"],"author":{"name":"Aliaksei Buzo aliakseibuzo@gmail.com"},"license":"MIT","_id":"@alexbuzo/graylog-mcp@0.1.1","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/graylog-mcp#readme","bugs":{"url":"https://github.com/abuzo/graylog-mcp/issues"},"bin":{"graylog-mcp":"dist/cli.js"},"dist":{"shasum":"bc391c0445c3fee00bca1244b25908cd611cd0d1","tarball":"https://registry.npmjs.org/@alexbuzo/graylog-mcp/-/graylog-mcp-0.1.1.tgz","fileCount":18,"integrity":"sha512-hrmetC53N1nvtmK7b44y0aGRL7ZPFji7qChSwzkJeLGUHzj5AAvelCQz1SuYycZf6yIAQjyFNxM72MjNggkSOg==","signatures":[{"sig":"MEUCIQCVD8N+couU6oSqb+eO0451UxZt0+sV/upZNwcAI5SxwwIgJPSz+deQwa2lLehr+DPe5AKDyHUIkEXjjsbRX7Mp5ao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23704},"main":"dist/cli.js","type":"module","types":"dist/cli.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/cli.d.ts","default":"./dist/cli.js"}},"gitHead":"1fd9f27041937128d66a5ac23b1f127a69e451f1","scripts":{"dev":"tsx src/cli.ts","test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/graylog-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Graylog MCP server exposing search tools over stdio","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^3.25.76","yargs":"^18.0.0","dotenv":"^17.2.3","undici":"^7.16.0","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","typescript":"^5.9.3","@types/node":"^24.6.2","@types/yargs":"^17.0.33"},"_npmOperationalInternal":{"tmp":"tmp/graylog-mcp_0.1.1_1759404622721_0.4327455875977204","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alexbuzo/graylog-mcp","version":"0.1.2","keywords":["graylog","mcp","model-context-protocol","cli","logs"],"author":{"name":"Aliaksei Buzo aliakseibuzo@gmail.com"},"license":"MIT","_id":"@alexbuzo/graylog-mcp@0.1.2","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/graylog-mcp#readme","bugs":{"url":"https://github.com/abuzo/graylog-mcp/issues"},"bin":{"graylog-mcp":"dist/cli.js"},"dist":{"shasum":"58fef601a03240cc040a7f180c19f825b661f925","tarball":"https://registry.npmjs.org/@alexbuzo/graylog-mcp/-/graylog-mcp-0.1.2.tgz","fileCount":14,"integrity":"sha512-iv/WpgWWQ0jB9N6sQmJLLkoHK2v0iDtaC29JUbgwJQeKAGvGORTRn/kFtb/KZhBxMZhNxZEG7n5k4qQOCizWKw==","signatures":[{"sig":"MEUCIQDyJvhJVu9QdVR0eA7y4NutrqqJtUZKKiEGJ54dG5BFiwIgLAmGDXxU9k8SAR4coQzDfthzeiSfLLp69FploDy9bfM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17337},"main":"dist/cli.js","type":"module","types":"dist/cli.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/cli.d.ts","default":"./dist/cli.js"}},"gitHead":"83be8caea9bf27382de399bef73fc4285218c4f2","scripts":{"dev":"tsx src/cli.ts","test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/graylog-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Graylog MCP server exposing search tools over stdio","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^3.25.76","yargs":"^18.0.0","dotenv":"^17.2.3","undici":"^7.16.0","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","typescript":"^5.9.3","@types/node":"^24.6.2","@types/yargs":"^17.0.33"},"_npmOperationalInternal":{"tmp":"tmp/graylog-mcp_0.1.2_1759405600063_0.7535895726370456","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@alexbuzo/graylog-mcp","version":"0.1.3","keywords":["graylog","mcp","model-context-protocol","cli","logs"],"author":{"name":"Aliaksei Buzo aliakseibuzo@gmail.com"},"license":"MIT","_id":"@alexbuzo/graylog-mcp@0.1.3","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/graylog-mcp#readme","bugs":{"url":"https://github.com/abuzo/graylog-mcp/issues"},"bin":{"graylog-mcp":"dist/cli.js"},"dist":{"shasum":"fab24b8cea89b630e9a273da102c04fb5ee4e5fb","tarball":"https://registry.npmjs.org/@alexbuzo/graylog-mcp/-/graylog-mcp-0.1.3.tgz","fileCount":14,"integrity":"sha512-p4U8py4jFzC2XJfgAAnnwe1zjb7DudWr9ROcgnWJtT1C7a8QScYt+34bFWx8aOzsxyaLzQY29NGi7iKhrfFEhA==","signatures":[{"sig":"MEYCIQDjKqDqr2Nzwr61NlOz4UgSU6u0oY5h/PyphrN36/7PWQIhAJmlEwGOKpkCmqFH987aaDrmbq9w9BB80qfPm2qaev+D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17337},"main":"dist/cli.js","type":"module","types":"dist/cli.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/cli.d.ts","default":"./dist/cli.js"}},"gitHead":"fe5e4c78da0311aa5fe33f4a556a6f254ee3d7aa","scripts":{"dev":"tsx src/cli.ts","test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/graylog-mcp.git","type":"git"},"_npmVersion":"11.3.0","description":"Graylog MCP server exposing search tools over stdio","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.25.76","yargs":"^18.0.0","dotenv":"^17.2.3","undici":"^7.16.0","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","typescript":"^5.9.3","@types/node":"^24.6.2","@types/yargs":"^17.0.33"},"_npmOperationalInternal":{"tmp":"tmp/graylog-mcp_0.1.3_1759731667313_0.6350898424274072","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alexbuzo/graylog-mcp","version":"0.1.4","keywords":["graylog","mcp","model-context-protocol","cli","logs"],"author":{"name":"Aliaksei Buzo aliakseibuzo@gmail.com"},"license":"MIT","_id":"@alexbuzo/graylog-mcp@0.1.4","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/graylog-mcp#readme","bugs":{"url":"https://github.com/abuzo/graylog-mcp/issues"},"bin":{"graylog-mcp":"dist/cli.js"},"dist":{"shasum":"557d7a4c2baca73d875738465514e27b0afd9808","tarball":"https://registry.npmjs.org/@alexbuzo/graylog-mcp/-/graylog-mcp-0.1.4.tgz","fileCount":14,"integrity":"sha512-EVrRU7N4aAotTRMoIx/PuldV5Bls35PMCZscixoEypxZa6MJmN514jdczxwgpfeBTbD1fqgd5PXF9PnnyR85oA==","signatures":[{"sig":"MEUCIQCZE2qFxcQFL3BqsVSdADh2LxvvI2N0hAfXdVQh4YhSYAIgc4xDWwnM7FhzxYXTNK5sA3R9+fU3Lz45YFza3lhjMb4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23381},"main":"dist/cli.js","type":"module","types":"dist/cli.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/cli.d.ts","default":"./dist/cli.js"}},"gitHead":"1b90cfaf927987125190e8ed5761b54c583c7a98","scripts":{"dev":"tsx src/cli.ts","test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/graylog-mcp.git","type":"git"},"_npmVersion":"11.3.0","description":"Graylog MCP server exposing search tools over stdio","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.25.76","yargs":"^18.0.0","dotenv":"^17.2.3","undici":"^7.16.0","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","typescript":"^5.9.3","@types/node":"^24.6.2","@types/yargs":"^17.0.33"},"_npmOperationalInternal":{"tmp":"tmp/graylog-mcp_0.1.4_1759736645730_0.1691811902110334","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@alexbuzo/graylog-mcp","version":"0.1.5","main":"dist/cli.js","types":"dist/cli.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"tsx src/cli.ts"},"repository":{"type":"git","url":"git+https://github.com/abuzo/graylog-mcp.git"},"keywords":["graylog","mcp","model-context-protocol","cli","logs"],"author":{"name":"Aliaksei Buzo aliakseibuzo@gmail.com"},"license":"MIT","description":"Graylog MCP server exposing search tools over stdio","type":"module","bin":{"graylog-mcp":"dist/cli.js"},"exports":{".":{"types":"./dist/cli.d.ts","default":"./dist/cli.js"}},"engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.18.2","dotenv":"^17.2.3","undici":"^7.16.0","yargs":"^18.0.0","zod":"^3.25.76"},"devDependencies":{"@types/node":"^24.6.2","@types/yargs":"^17.0.33","tsx":"^4.20.6","typescript":"^5.9.3"},"_id":"@alexbuzo/graylog-mcp@0.1.5","gitHead":"4aaf2fcf4db204dcc8bc62acc93ef583e1d29adc","bugs":{"url":"https://github.com/abuzo/graylog-mcp/issues"},"homepage":"https://github.com/abuzo/graylog-mcp#readme","_nodeVersion":"24.2.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-KCwjbJYwnZfZOe7oJka6mSRcYCvsjhzhKHg0A5eX6bZEluTenDkachL3pPs66ajO97Jit3VQ4v1hJCGuTd9zbQ==","shasum":"da4aeaf775c653d94fbb2bafea85c30d66af1710","tarball":"https://registry.npmjs.org/@alexbuzo/graylog-mcp/-/graylog-mcp-0.1.5.tgz","fileCount":14,"unpackedSize":39387,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDWVkqhpzf2OZa+zjbkDPVM5qlimAPamFT9GSX7dMImzgIhAOJDLlmFWfuoop0csd6Mm8LvPBxyWIgCpw0GQqg4WzIt"}]},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"directories":{},"maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/graylog-mcp_0.1.5_1761823080596_0.5382702978854974"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-02T11:06:28.659Z","modified":"2025-10-30T11:18:00.946Z","0.1.0":"2025-10-02T11:06:29.002Z","0.1.1":"2025-10-02T11:30:22.933Z","0.1.2":"2025-10-02T11:46:40.260Z","0.1.3":"2025-10-06T06:21:07.565Z","0.1.4":"2025-10-06T07:44:05.970Z","0.1.5":"2025-10-30T11:18:00.781Z"},"bugs":{"url":"https://github.com/abuzo/graylog-mcp/issues"},"author":{"name":"Aliaksei Buzo aliakseibuzo@gmail.com"},"license":"MIT","homepage":"https://github.com/abuzo/graylog-mcp#readme","keywords":["graylog","mcp","model-context-protocol","cli","logs"],"repository":{"type":"git","url":"git+https://github.com/abuzo/graylog-mcp.git"},"description":"Graylog MCP server exposing search tools over stdio","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"readme":"# graylog-mcp\n\n> 🔍 Model Context Protocol (MCP) сервер для интеграции Graylog с AI-ассистентами\n\nМинималистичный MCP сервер, предоставляющий инструменты для поиска логов в Graylog через stdio протокол. Работает с Cursor, Claude Desktop и другими MCP-клиентами.\n\n## ✨ Особенности\n\n- 🚀 Три мощных инструмента для поиска логов\n- 🔒 Поддержка Personal Access Token (PAT) аутентификации\n- 🌐 Работа с self-signed TLS сертификатами\n- 📦 Простая установка через npm/npx\n- 🎯 Автоматическая нормализация полей логов\n- 🔍 Умный поиск по UUID/trace ID/request ID\n\n## 📋 Требования\n\n- Node.js >= 18\n- Graylog сервер с настроенным Personal Access Token\n\n## 📦 Установка\n\n### Глобальная установка\n```bash\nnpm i -g @alexbuzo/graylog-mcp\n```\n\n### Использование через npx (рекомендуется)\nНе требует установки - см. раздел \"Настройка в Cursor\"\n\n## 🚀 Быстрый старт\n\n### Запуск вручную\n\n```bash\ngraylog-mcp \\\n  --graylog-url https://graylog.example.com \\\n  --token YOUR_GRAYLOG_PAT \\\n  --ssl-verify=false\n```\n\n### Параметры командной строки\n\n| Параметр | Обязательный | Описание | По умолчанию |\n|----------|--------------|----------|--------------|\n| `--graylog-url` | ✅ | URL вашего Graylog сервера | - |\n| `--token` | ✅ | Personal Access Token | - |\n| `--ssl-verify` | ❌ | Проверка SSL сертификата | `true` |\n| `--debug` | ❌ | Режим отладки | `false` |\n\n## 🔌 Настройка в Cursor\n\n**Настройки → MCP Servers → Add custom server**\n\n### Вариант 1: Через npx (рекомендуется)\n\n```json\n{\n  \"mcpServers\": {\n    \"graylog\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@alexbuzo/graylog-mcp@latest\",\n        \"--graylog-url\", \"https://graylog.example.com\",\n        \"--token\", \"YOUR_GRAYLOG_PAT\",\n        \"--ssl-verify\", \"false\"\n      ],\n      \"name\": \"Graylog Search\"\n    }\n  }\n}\n```\n\n### Вариант 2: С переменными окружения (безопаснее)\n\n```json\n{\n  \"mcpServers\": {\n    \"graylog\": {\n      \"command\": \"bash\",\n      \"args\": [\n        \"-lc\",\n        \"npx -y @alexbuzo/graylog-mcp@latest --graylog-url \\\"$GRAYLOG_URL\\\" --token \\\"$GRAYLOG_TOKEN\\\" --ssl-verify=false\"\n      ],\n      \"env\": {\n        \"GRAYLOG_URL\": \"https://graylog.example.com\",\n        \"GRAYLOG_TOKEN\": \"YOUR_GRAYLOG_PAT\"\n      },\n      \"name\": \"Graylog (secure)\"\n    }\n  }\n}\n```\n\n### Вариант 3: Глобальная установка\n\n```json\n{\n  \"mcpServers\": {\n    \"graylog\": {\n      \"command\": \"graylog-mcp\",\n      \"args\": [\n        \"--graylog-url\", \"https://graylog.example.com\",\n        \"--token\", \"YOUR_GRAYLOG_PAT\",\n        \"--ssl-verify\", \"false\"\n      ],\n      \"name\": \"Graylog\"\n    }\n  }\n}\n```\n\n## 🛠 Доступные инструменты\n\n### 1. `graylog.search_logs`\nПоиск логов с использованием Lucene/GELF запросов.\n\n**Параметры:**\n- `query` (string, обязательный): Lucene/GELF запрос\n- `rangeSec` (number, по умолчанию 3600): Временной диапазон в секундах\n- `limit` (number, опционально): Максимальное количество результатов (макс. 500)\n- `offset` (number, опционально): Смещение для пагинации\n- `filter` (string, опционально): Дополнительный фильтр (например, `stream:<STREAM_ID>`)\n\n**Пример запроса:**\n```typescript\n{\n  query: \"level:ERROR AND service:api\",\n  rangeSec: 3600,\n  limit: 100,\n  filter: \"stream:507f1f77bcf86cd799439011\"\n}\n```\n\n### 2. `graylog.search_uuid`\nУмный поиск по UUID, request ID, trace ID и другим идентификаторам. Автоматически проверяет множество распространенных полей.\n\n**Параметры:**\n- `uuid` (string, обязательный): UUID или идентификатор для поиска\n- `rangeSec` (number, по умолчанию 86400): Временной диапазон в секундах (24 часа)\n- `limit` (number, опционально): Максимальное количество результатов (макс. 500)\n\n**Автоматически ищет в полях:**\n- `request_id`, `requestId`, `req_id`\n- `trace_id`, `traceId`, `trace.id`\n- `span_id`, `spanId`, `span.id`\n- `transaction_id`, `transactionId`\n- `correlation_id`, `correlationId`\n- `_id`\n\n**Пример запроса:**\n```typescript\n{\n  uuid: \"550e8400-e29b-41d4-a716-446655440000\",\n  rangeSec: 86400,\n  limit: 200\n}\n```\n\n### 3. `graylog.search_stream`\nПолучение сообщений из конкретного потока (stream).\n\n**Параметры:**\n- `streamId` (string, обязательный): ID потока в Graylog\n- `rangeSec` (number, по умолчанию 3600): Временной диапазон в секундах\n- `limit` (number, опционально): Максимальное количество результатов (макс. 500)\n\n**Пример запроса:**\n```typescript\n{\n  streamId: \"507f1f77bcf86cd799439011\",\n  rangeSec: 7200,\n  limit: 150\n}\n```\n\n## 📊 Формат ответа\n\nВсе инструменты возвращают нормализованный JSON со следующей структурой:\n\n```json\n{\n  \"total\": 42,\n  \"messages\": [\n    {\n      \"id\": \"message_id\",\n      \"ts\": \"2024-01-15T10:30:00.000Z\",\n      \"level\": \"ERROR\",\n      \"source\": \"api-server-01\",\n      \"container\": \"api-service\",\n      \"message\": \"Database connection failed\",\n      \"short_message\": \"DB error\",\n      \"http_method\": \"POST\",\n      \"url\": \"/api/users\",\n      \"status\": 500,\n      \"latency_ms\": 1234,\n      \"trace_id\": \"abc123\",\n      \"span_id\": \"def456\",\n      \"request_id\": \"req-789\",\n      \"tenant_id\": \"tenant-001\",\n      \"client_ip\": \"192.168.1.1\",\n      \"user_agent\": \"Mozilla/5.0...\",\n      \"service\": \"user-api\",\n      \"request\": {...},\n      \"response\": {...}\n    }\n  ]\n}\n```\n\n### Автоматическая нормализация полей\n\nСервер автоматически извлекает и нормализует следующие поля из различных форматов:\n\n| Поле | Альтернативные имена |\n|------|---------------------|\n| `container` | `container_name`, `kubernetes.container_name` |\n| `http_method` | `method`, `http_method`, `request_method` |\n| `url` | `path`, `request_path` |\n| `status` | `http_status`, `response_status` |\n| `latency_ms` | `duration_ms`, `response_time_ms` |\n| `trace_id` | `traceId`, `trace.id` |\n| `span_id` | `spanId`, `span.id` |\n| `request_id` | `req_id`, `requestId` |\n| `client_ip` | `remote_addr`, `ip` |\n| `service` | `service_name`, `app` |\n\n## 💻 Локальная разработка\n\n### Установка зависимостей\n```bash\nnpm install\n```\n\n### Сборка проекта\n```bash\nnpm run build\n```\n\n### Запуск в режиме разработки\n```bash\nnpm run dev -- --graylog-url https://graylog.example.com --token YOUR_PAT --ssl-verify=false\n```\n\n### Тестирование собранной версии\n```bash\nnode dist/cli.js --graylog-url https://graylog.example.com --token YOUR_PAT --ssl-verify=false --debug\n```\n\n## 🔧 Структура проекта\n\n```\ngraylog-mcp/\n├── src/\n│   ├── cli.ts        # CLI интерфейс и точка входа\n│   ├── server.ts     # MCP сервер и регистрация инструментов\n│   └── graylog.ts    # API клиент для Graylog\n├── dist/             # Скомпилированный код\n├── package.json      # Метаданные и зависимости\n└── tsconfig.json     # Конфигурация TypeScript\n```\n\n## 🔒 Безопасность\n\n### Personal Access Token (PAT)\n\n1. Создайте PAT в Graylog: **System → Users → [Your User] → Edit → Create Token**\n2. Токен должен иметь права на чтение целевых потоков\n3. Сервер автоматически пробует два формата авторизации:\n   - `token:YOUR_PAT`\n   - `YOUR_PAT:token`\n\n### SSL/TLS\n\n- **Production:** Используйте валидный CA сертификат и `--ssl-verify=true`\n- **Development/Self-signed:** Используйте `--ssl-verify=false`\n- **Альтернатива:** Установите `NODE_EXTRA_CA_CERTS` на путь к доверенному CA\n\n### Рекомендации\n\n- ✅ Используйте переменные окружения для токенов\n- ✅ Не коммитьте токены в git\n- ✅ Используйте минимально необходимые права для PAT\n- ✅ Регулярно ротируйте токены\n\n## 🐛 Устранение неполадок\n\n### 401/403 ошибки\n- Проверьте валидность PAT\n- Убедитесь, что у токена есть права на чтение потоков\n- Проверьте формат URL (должен включать протокол: `https://`)\n\n### TLS/SSL ошибки\n```bash\n# Опция 1: Отключить проверку (не для production!)\n--ssl-verify=false\n\n# Опция 2: Указать CA сертификат\nexport NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem\n```\n\n### Нет результатов\n- Попробуйте простой запрос: `query: \"*\"`\n- Проверьте временной диапазон (увеличьте `rangeSec`)\n- Убедитесь, что в выбранных потоках есть данные\n- Проверьте синтаксис Lucene запроса\n\n### Debug режим\nЗапустите с флагом `--debug` для диагностики:\n```bash\ngraylog-mcp --graylog-url ... --token ... --debug\n```\n\n## 🤝 Примеры использования\n\n### Пример 1: Поиск ошибок за последний час\n```typescript\n// Инструмент: graylog.search_logs\n{\n  query: \"level:ERROR\",\n  rangeSec: 3600\n}\n```\n\n### Пример 2: Поиск по trace ID\n```typescript\n// Инструмент: graylog.search_uuid\n{\n  uuid: \"abc-123-def-456\",\n  rangeSec: 86400\n}\n```\n\n### Пример 3: Получение логов конкретного сервиса\n```typescript\n// Инструмент: graylog.search_logs\n{\n  query: \"service:auth-api AND level:WARN\",\n  rangeSec: 7200,\n  limit: 50\n}\n```\n\n### Пример 4: Поиск HTTP 5xx ошибок\n```typescript\n// Инструмент: graylog.search_logs\n{\n  query: \"status:[500 TO 599]\",\n  rangeSec: 3600\n}\n```\n\n## 📝 Примечания\n\n- Сервер использует Graylog REST API через `/api/search/universal/relative` и `/api/streams/{id}/messages`\n- Максимальное количество результатов на запрос: 500\n- По умолчанию возвращается 150 записей\n- Поддерживается пагинация через параметры `limit` и `offset`\n- Все временные метки в UTC\n\n## 🔗 Полезные ссылки\n\n- [Model Context Protocol](https://modelcontextprotocol.io/)\n- [Graylog API Documentation](https://go2docs.graylog.org/current/downloading_and_installing_graylog/rest_api.htm)\n- [Lucene Query Syntax](https://lucene.apache.org/core/9_0_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html)\n\n## 📄 Лицензия\n\nMIT © Aliaksei Buzo\n\n## 🙏 Вклад\n\nContributions приветствуются! Пожалуйста, создайте issue или pull request в [GitHub репозитории](https://github.com/abuzo/graylog-mcp).\n\n\n","readmeFilename":"README.md"}