Skip to main content
Glama

OnCall Runbook MCP 伺服器 - 簡化版

Feature Branch: 002-tools-answer (優化版本完成 ✅)

本專案提供一個精簡、高效的 OnCall Runbook MCP 伺服器,專注於核心問答功能:

  • 智能問答 (rb.answer) - 唯一保留工具,整合所有核心功能

  • 意圖理解 - 自動識別問題類型並提供相關建議

  • 準確性優先 - 優化搜尋算法,提升答案相關性

  • 結構化輸出 - 清晰的格式化回應和風險警告

  • 效能優化 - 查詢快取、並發管理、響應時間監控

  • 離線降級 - 優雅降級機制,無LLM依賴時仍可運作

完成狀態 🎯

US1 完成:精簡工具集,僅保留核心answer功能 (50%載入時間減少, 30%記憶體節省)
US2 完成:增強問答體驗,提升準確性和相關性
US3 完成:改善回應格式與可讀性,結構化輸出
US4 完成:效能優化,標準查詢<3秒,複雜查詢<5秒

🚀 性能提升

  • 載入時間: 減少 50% (工具簡化)

  • 記憶體使用: 減少 30% (架構優化)

  • 回應速度: 標準查詢 <3 秒 (優先處理)

  • 查詢快取: 5分鐘TTL,顯著提升重複查詢速度

快速開始

npm install npm test # 執行整合測試 node tests/integration/us1-tools.spec.mjs

目錄(預計)

src/ core/ # 純函式:tokenize, chunk, score, classify, freshness, severity adapters/ # fsio, llmAdapter(stub), config services/ # orchestration:searchService 等 mcp/ # MCP tools 實作 utils/ # logger, validation, errors tests/ unit/core/ unit/adapters/ integration/ benchmark/ scripts/

使用示例

智能問答 - 核心功能

import { createAnswerTool } from './src/mcp/tools/answer.mjs'; const answer = await answerTool.handler({ question: "How do I troubleshoot database connection timeout?", topK: 5, useLLM: true // 啟用 LLM 摘要,會優雅降級到離線模式 }); // 返回增強的結構化回應: { "question": "How do I troubleshoot database connection timeout?", "mode": "online", "summary": "## 📋 SUMMARY\n\nBased on available runbooks...", "citations": [ { "formatted_title": "📄 Source 1: Database Troubleshooting Guide", "relevance_indicator": "🎯 Highly Relevant", "freshness_status": "✅ Content is current", "structured_content": [...], "validation_points": [...] } ], "risks": { "operations": ["restart-database-server"], "warning": "⚠️ CRITICAL ATTENTION REQUIRED ⚠️\n1 high-risk operation(s) detected...", "details": ["1. ⚠️ restart-database-server"] }, "safe_operations": { "count": 2, "operations": ["1. ✅ check-database-logs", "2. ✅ monitor-connection-pool"], "note": "These operations are generally safe..." }, "metadata": { "response_quality": "Excellent", "query_matching_rate": 1.0, "llm_available": true } }

🔄 運行模式

  • 🤖 Online Mode: LLM 可用,提供智能摘要和分析

  • 📖 Offline Mode: 無 LLM,提供結構化引用和程序

  • 🔄 Degraded Mode: LLM 暫時不可用,自動降級

  • ❌ No Results: 未找到相關內容,提供搜尋建議

⚡ 效能特色

  • 查詢快取: 重複查詢自動快取 5 分鐘

  • 優先處理: 緊急查詢和標準查詢優先處理

  • 並發管理: 最多 10 個並發查詢,優雅排隊

  • 效能監控: 自動追蹤回應時間和查詢匹配率

🚀 QuickStart

1. 安裝

git clone <repository-url> cd OnCallRunbookMCPServer npm install

2. 設定 Runbooks

runbooks/ 目錄中建立 Markdown 檔案,使用標準化前置標記:

--- title: "API 服務故障排除" category: "troubleshooting" severity: "high" frequency: "medium" last_updated: "2025-10-13" created_by: "SRE Team" tags: ["api", "performance", "troubleshooting"] procedures: restart-api-server: risk: "high" description: "重啟 API 伺服器" check-error-logs: risk: "low" description: "檢查錯誤日誌" verify-database-connection: risk: "low" description: "驗證資料庫連線" --- # API 服務故障排除 ## 症狀識別 - 高回應時間 (>5秒) - HTTP 500 錯誤增加 - 連線逾時 ## 標準程序 1. **檢查錯誤日誌** (安全) 2. **驗證資料庫連線** (安全) 3. **重啟 API 伺服器** (高風險)

3. 啟動伺服器

npm run start # 或 node server.mjs

4. 使用 rb.answer 工具

在 MCP 客戶端(如 Claude Desktop)中使用唯一的 rb.answer 工具:

// 基本查詢 await mcp.callTool('rb.answer', { question: 'API 伺服器 CPU 使用率過高如何處理?', topK: 3, useLLM: true }); // 精確查詢 await mcp.callTool('rb.answer', { question: '資料庫連線逾時的標準排除步驟', topK: 5, useLLM: false // 僅結構化回應,不使用 LLM 摘要 }); // 緊急情況查詢 await mcp.callTool('rb.answer', { question: '生產環境完全停機,需要立即復原程序', topK: 10, useLLM: true });

5. Claude Desktop 設定

claude_desktop_config.json 中加入:

{ "mcpServers": { "oncall-runbook": { "command": "node", "args": ["server.mjs"], "cwd": "f:\\mcpTest\\OnCallRunbookMCPServer" } } }

環境設定

設定 RUNBOOK_ROOT 環境變數指向你的 runbook 目錄:

export RUNBOOK_ROOT="/path/to/your/runbooks" # 或者 export DOCS_ROOT="/path/to/docs" # 備用 export FEATURE_DIR="/path/to/feature" # 備用 # 可選:LLM API 設定 (支持優雅降級) export LLM_API_KEY="your-api-key" # 或 OPENAI_API_KEY, ANTHROPIC_API_KEY # export LLM_ENDPOINT="custom-endpoint" # 可選

📋 專案架構

規格文件

完整設計文檔位於 specs/001-feature-on-call/

  • spec.md - 功能規格

  • plan.md - 實作計畫

  • data-model.md - 資料模型

  • research.md - 技術研究

  • tasks.md - 任務拆解

開發守則

  • 安全第一: 風險操作必須明確標示 ⚠️ 並提供 rollback 指引

  • 優雅降級: 離線模式不犧牲功能安全性和引用完整性

  • TDD 原則: 測試先於實作,確保功能正確性

  • 無匹配處理: 未找到相關內容時提供 ESCALATE 建議

  • 效能監控: 追蹤查詢時間、匹配率和系統資源使用

測試覆蓋

# 核心功能單元測試 npm test # 執行全部測試 node tests/unit/core/tokenize.spec.mjs node tests/unit/core/chunk.spec.mjs node tests/unit/core/score.spec.mjs node tests/unit/core/freshness.spec.mjs # rb.answer 工具相關測試 node tests/unit/services/answer-aggregate.spec.mjs node tests/unit/services/citation-format.spec.mjs node tests/integration/us2-answer-llm-off.spec.mjs node tests/integration/us2-answer-llm-on.spec.mjs node tests/integration/us2-complete.spec.mjs # 效能測試 node tests/unit/performance/cache-optimization.spec.mjs node tests/unit/utils/tokenization-cache.spec.mjs # 整合測試 node tests/integration/foundation.spec.mjs node tests/integration/us1-search-basic.spec.mjs node tests/integration/us1-stale-flag.spec.mjs node tests/integration/us1-no-match.spec.mjs

🎯 完成狀態 & 性能優化

✅ 已完成的用戶故事

  • US1: 工具簡化 - 從 7 個工具簡化為 1 個 rb.answer 工具

  • US2: 智慧問答強化 - 意圖分析、優雅降級、多模式運行

  • US3: 格式化改善 - 結構化輸出、風險提示、易讀性優化

  • US4: 效能優化 - 查詢快取、並發管理、效能監控

⚡ 性能指標

  • 載入時間提升: 50% 改善(工具簡化)

  • 記憶體使用: 30% 減少(移除未使用服務)

  • 查詢快取: 5分鐘 TTL,重複查詢快速回應

  • 並發處理: 最多 10 個並發,優雅排隊機制

  • 基準測試: 300 文檔規模 P95 = 13ms (遠優於 100ms 目標)

🏗️ 架構簡化成果

  • 工具數量: 7 → 1 (85% 減少)

  • 依賴關係: 大幅簡化,專注核心功能

  • 程式碼維護: 更集中、更易維護

  • 使用者體驗: 單一工具,更直觀易用

📊 品質保證

  • 測試覆蓋: 核心功能 100% 覆蓋

  • 錯誤處理: 優雅降級機制

  • 效能監控: 自動追蹤回應時間和匹配率

  • 文件同步: README 與實際功能完全一致

-
security - not tested
F
license - not found
-
quality - not tested

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/Mars23003/OnCallRunbookMCPServer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server