Skip to main content
Glama
README.md16.3 kB
# 開發決策顧問 MCP Server 智慧開發決策顧問工具,提供程式碼現代化分析、瀏覽器相容性檢查、MDN 文件查詢等功能。透過 MCP (Model Context Protocol) 與 AI 工具深度整合。 ## ✨ 功能特色 ### 🔄 程式碼現代化分析器 - 掃描 JavaScript/TypeScript 專案,找出可被原生 API 替代的函式庫 - 檢測過時的程式碼模式(var、callback、IIFE、傳統 for 迴圈) - 提供重構建議和預估效能提升 - 生成對比程式碼範例 - 支援 ES Module 和 CommonJS ### 🔍 MDN 文件即時查詢 - 搜尋 MDN Web Docs 取得最新 API 資訊 - 顯示 API 棄用狀態和實驗性標記 - 取得語法說明和瀏覽器相容性 - 支援多語言(en-US, zh-TW, zh-CN) ### 🌐 Can I Use 瀏覽器相容性檢查 - 即時查詢 Web API 的瀏覽器支援狀態 - 顯示各瀏覽器的支援版本 - 提供 Polyfill 建議和 CDN 連結 - 支援自訂目標瀏覽器版本 ### 📚 豐富的規則資料庫 - **18 個函式庫規則**:jQuery、Moment.js、Lodash、Axios、Bluebird 等 - **16 個 API 規則**:XMLHttpRequest、eval、document.write、var 等 - 可透過設定檔自訂規則 ## 🚀 安裝 ### 從 npm 安裝 ```bash npm install -g @muki/dev-advisor-mcp ``` ### 從原始碼安裝 ```bash git clone https://github.com/mukiwu/dev-advisor-mcp.git cd dev-advisor-mcp npm install npm run build ``` ## 🔧 GitHub Actions 整合 ### 快速開始 在您的專案中創建 `.github/workflows/dev-advisor.yml`: ```yaml name: Dev Advisor Check on: pull_request: types: [opened, synchronize, reopened] jobs: analyze: runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - uses: mukiwu/dev-advisor-mcp@v1 with: project-path: '.' enable-modernization: true enable-compatibility: true comment-on-pr: true ``` ### 輸入參數 | 參數 | 說明 | 預設值 | 必填 | |------|------|--------|------| | `project-path` | 專案目錄路徑 | `.` | ❌ | | `include-patterns` | 包含的檔案模式(JSON 陣列) | `["**/*.js", "**/*.ts", "**/*.jsx", "**/*.tsx"]` | ❌ | | `exclude-patterns` | 排除的檔案模式(JSON 陣列) | `["node_modules/**", "dist/**", "build/**"]` | ❌ | | `browserslist-config` | browserslist 配置字串 | `""` | ❌ | | `enable-modernization` | 啟用現代化分析 | `true` | ❌ | | `enable-compatibility` | 啟用相容性分析 | `true` | ❌ | | `enable-browser-check` | 啟用瀏覽器支援檢查 | `true` | ❌ | | `github-token` | GitHub Token | `${{ github.token }}` | ❌ | | `comment-on-pr` | 是否在 PR 中留言 | `true` | ❌ | ### 進階使用 ```yaml - uses: mukiwu/dev-advisor-mcp@v1 with: project-path: './src' include-patterns: '["src/**/*.js", "src/**/*.ts"]' exclude-patterns: '["**/*.test.ts", "**/*.spec.ts"]' browserslist-config: 'last 2 versions, > 1%, not dead' enable-modernization: true enable-compatibility: true enable-browser-check: false comment-on-pr: true ``` ### 輸出 Action 會產生以下輸出: - `modernization-report`: 現代化分析報告(Markdown) - `compatibility-report`: 相容性分析報告(Markdown) - `summary`: 分析摘要(JSON) ### 完整範例 查看 [examples/pr-check.yml](examples/pr-check.yml) 取得完整範例。 ## ⚙️ MCP 配置 ### 方式一:使用 npm 全局安裝(推薦) 首先全局安裝: ```bash npm install -g @mukiwu/dev-advisor-mcp ``` 然後在 Claude Desktop 或 Cursor IDE 中配置: **Claude Desktop 配置** (`~/.claude/config.json`): ```json { "mcpServers": { "dev-advisor": { "command": "dev-advisor" } } } ``` **Cursor IDE 配置**: ```json { "mcpServers": { "dev-advisor": { "command": "dev-advisor" } } } ``` ### 方式二:使用 npx(無需全局安裝) **Claude Desktop 配置** (`~/.claude/config.json`): ```json { "mcpServers": { "dev-advisor": { "command": "npx", "args": ["-y", "@mukiwu/dev-advisor-mcp"] } } } ``` **Cursor IDE 配置**: ```json { "mcpServers": { "dev-advisor": { "command": "npx", "args": ["-y", "@mukiwu/dev-advisor-mcp"] } } } ``` **注意**:現在已經修復了 `npx` 的路徑問題,應該可以正常使用了。如果仍有問題,建議使用方式一(全局安裝)。 ### 方式三:使用本地安裝路徑 如果從原始碼安裝或使用本地路徑: ```json { "mcpServers": { "dev-advisor": { "command": "node", "args": ["/path/to/dev-advisor-mcp/dist/src/server.js"] } } } ``` ## 🛠️ 可用工具 (Tools) ### 1. `analyze_modernization` 分析專案程式碼的現代化機會。 **參數:** | 參數 | 類型 | 必填 | 說明 | |------|------|------|------| | `projectPath` | string | ✅ | 專案目錄路徑 | | `includePatterns` | string[] | ❌ | 掃描檔案模式,預設 `["**/*.js", "**/*.ts", "**/*.jsx", "**/*.tsx"]` | | `excludePatterns` | string[] | ❌ | 排除檔案模式,預設 `["node_modules/**", "dist/**"]` | | `reportFormat` | string | ❌ | 報告格式:`markdown`、`json`、`html`、`text` | **使用範例:** ``` 分析 ./src 目錄的程式碼,找出可以用原生 Web API 替代的函式庫 ``` **輸出內容:** - 執行摘要(檔案數、建議數、效能提升預估) - 風險評估(破壞性變更、預估工時) - 函式庫替換建議(jQuery → 原生 DOM API) - API 現代化建議(XMLHttpRequest → fetch) - 語法現代化建議(var → let/const) - 模式現代化建議(callback → Promise/async-await) --- ### 2. `search_mdn` 搜尋 MDN Web Docs 文件,取得最新的 API 資訊。 **參數:** | 參數 | 類型 | 必填 | 說明 | |------|------|------|------| | `query` | string | ✅ | 搜尋關鍵字,如 `"fetch"`、`"Array.prototype.includes"` | | `limit` | number | ❌ | 返回結果數量,預設 `5` | | `locale` | string | ❌ | 語言:`en-US`、`zh-TW`、`zh-CN`,預設 `en-US` | **使用範例:** ``` 查詢 Promise.allSettled 的 MDN 文件 幫我找 IntersectionObserver 的用法 ``` **輸出內容:** - 搜尋結果列表 - API 詳細說明和語法 - 棄用/實驗性狀態標記 - 瀏覽器相容性資訊 - MDN 文件連結 --- ### 3. `check_browser_support` 使用 Can I Use 資料庫檢查 Web API 的瀏覽器相容性。 **參數:** | 參數 | 類型 | 必填 | 說明 | |------|------|------|------| | `feature` | string | ✅ | Web API 功能名稱,如 `"fetch"`、`"css-grid"`、`"webgl"` | | `targetBrowsers` | object | ❌ | 目標瀏覽器版本,預設 `{ chrome: "90", firefox: "88", safari: "14", edge: "90" }` | **使用範例:** ``` 檢查 CSS Grid 的瀏覽器支援情況 ResizeObserver 在 Safari 12 有支援嗎? ``` **輸出內容:** - 功能概覽和全球支援率 - 目標瀏覽器相容性報告 - 各瀏覽器支援版本詳情 - Polyfill 建議和 CDN 連結 - Can I Use 和 MDN 連結 --- ### 4. `recommend_api_combination` 根據自然語言描述的需求,推薦最佳的 Web API 技術組合。 **參數:** | 參數 | 類型 | 必填 | 說明 | |------|------|------|------| | `requirement` | string | ✅ | 功能需求描述,如 `"背景擷取影片畫面並分析"` | | `targetBrowsers` | string[] | ❌ | 目標瀏覽器,如 `["chrome>=90", "firefox>=88"]`,預設現代瀏覽器 | | `performanceRequirements` | string | ❌ | 效能需求:`low`、`medium`、`high`,預設 `medium` | **使用範例:** ``` 我想實作懶加載圖片功能,推薦用什麼 API? 幫我找適合做即時通訊的 Web API ``` **輸出內容:** - 推薦 API 列表(按類別分組) - 每個 API 的說明和程式碼範例 - 瀏覽器相容性報告 - 可取代的第三方函式庫 - Polyfill 建議 - 實作建議(可直接使用 / 需要 Polyfill / 需要替代方案) **支援的 API 類別:** - HTTP 請求:Fetch API、AbortController - DOM 操作:querySelector、classList、MutationObserver - 觀察者:IntersectionObserver、ResizeObserver - 儲存:localStorage、sessionStorage、IndexedDB - 媒體:getUserMedia、MediaRecorder、Web Audio API - 圖形:Canvas API、WebGL - 非同步:Promise、async/await、Web Workers - 通訊:WebSocket、Server-Sent Events、BroadcastChannel - 動畫:requestAnimationFrame、Web Animations API - 其他:Clipboard API、Geolocation、Notification API --- ### 5. `analyze_compatibility` 分析專案中使用的 API 與目標瀏覽器的相容性,自動偵測 browserslist 配置。 **參數:** | 參數 | 類型 | 必填 | 說明 | |------|------|------|------| | `projectPath` | string | ✅ | 專案目錄路徑 | | `browserslistConfig` | string | ❌ | browserslist 查詢字串,如 `"last 2 versions"`,預設讀取專案配置 | | `reportFormat` | string | ❌ | 報告格式:`markdown`、`json`、`html`,預設 `markdown` | **使用範例:** ``` 分析這個專案的瀏覽器相容性風險 檢查專案是否支援 IE11 幫我找出需要 polyfill 的 API ``` **輸出內容:** - 執行摘要(API 數量、相容性百分比) - 目標瀏覽器列表(從 browserslist 自動偵測) - 相容性問題(按嚴重程度分類) - 🔴 嚴重:多數瀏覽器不支援 - 🟠 高風險:部分瀏覽器不支援 - 🟡 中風險:需要 polyfill - 🟢 低風險:少量瀏覽器需要 polyfill - Polyfill 建議(CDN 連結、npm 套件) - 統一 Polyfill 方案(polyfill.io 整合) **支援的 Browserslist 配置:** - 自動讀取 `package.json` 的 `browserslist` 欄位 - 自動讀取 `.browserslistrc` 檔案 - 或直接傳入查詢字串,如 `"> 1%, last 2 versions, not dead"` --- ## 📦 可用資源 (Resources) MCP Resources 讓 AI 可以直接讀取規則資料: | URI | 說明 | |-----|------| | `devadvisor://rules/libraries` | 所有函式庫現代化規則 | | `devadvisor://rules/apis` | 所有 API 現代化規則 | | `devadvisor://rules/all` | 完整規則資料庫 | | `devadvisor://stats` | 規則統計資訊 | ## 💡 可用提示模板 (Prompts) 預定義的分析提示模板: | 名稱 | 說明 | |------|------| | `analyze-project` | 分析專案的程式碼現代化機會 | | `migrate-library` | 取得特定函式庫的遷移指南 | | `modernize-pattern` | 取得程式碼模式的現代化建議 | | `quick-wins` | 取得低風險、高效益的快速改善建議 | ## 📋 支援的現代化規則 ### 函式庫替換 (18 個規則) | 函式庫 | 現代替代方案 | Bundle 減少 | |--------|-------------|-------------| | jQuery | 原生 DOM API | ~85KB | | Moment.js | Date-fns / Dayjs / Temporal | ~65KB | | Lodash | 原生 JavaScript 方法 | ~50KB | | Axios | 原生 fetch (簡單場景) | ~15KB | | Bluebird | 原生 Promise | ~45KB | | Async.js | async/await | ~20KB | | uuid | crypto.randomUUID() | ~8KB | | node-fetch | 原生 fetch (Node.js 18+) | ~15KB | | querystring | URLSearchParams | ~5KB | | object-assign | Object.assign / 展開運算子 | ~2KB | | array-flatten | Array.prototype.flat() | ~2KB | | is-number | typeof + Number.isFinite() | ~1KB | | is-array | Array.isArray() | ~1KB | | left-pad | String.prototype.padStart() | ~1KB | ### API 現代化 (16 個規則) | 舊 API | 現代替代方案 | 類型 | |--------|-------------|------| | XMLHttpRequest | fetch API | 網路請求 | | document.write | DOM API | DOM 操作 | | eval | Function / JSON.parse | 安全性 | | with | 解構賦值 | 語法 | | var | let / const | 變數宣告 | | arguments | Rest parameters | 函式參數 | | innerHTML | textContent / DOM API | 安全性 | | attachEvent | addEventListener | 事件處理 | | substr | substring / slice | 字串處理 | | for 迴圈 | map / filter / forEach | 迭代 | | for...in (陣列) | for...of / 陣列方法 | 迭代 | | new Array() | 陣列字面量 [] | 建構 | | new Object() | 物件字面量 {} | 建構 | | Date 字串解析 | 明確日期格式 / Temporal | 日期處理 | ## 🔧 設定檔 在專案根目錄建立 `.devadvisorrc.json`: ```json { "extends": "recommended", "include": ["src/**/*.{js,ts,jsx,tsx}"], "exclude": ["node_modules/**", "dist/**", "**/*.test.ts"], "rules": { "builtin": { "jquery": { "enabled": true, "severity": "high" }, "var": { "enabled": true, "severity": "low" } }, "customLibraries": { "my-old-lib": { "name": "my-old-lib", "modernAlternative": "my-new-lib", "reason": "內部函式庫升級" } } }, "report": { "format": "markdown", "maxSuggestionsPerFile": 10 }, "performance": { "useCache": true, "parallel": true } } ``` ## 🧪 開發 ```bash # 安裝依賴 npm install # 開發模式 npm run dev # 建置 npm run build # 執行測試 npm test # 測試分析功能 node test-analysis.js ``` ## 📁 專案結構 ``` dev-advisor-mcp/ ├── src/ │ ├── server.ts # MCP Server 主程式 │ ├── analyzers/ │ │ ├── modernization.ts # 程式碼現代化分析器 │ │ └── compatibility.ts # API 相容性分析器 │ ├── parsers/ │ │ └── index.ts # AST 解析器 (ES Module + CommonJS) │ ├── services/ │ │ ├── mdn-service.ts # MDN API 服務 │ │ └── caniuse-service.ts # Can I Use API 服務 │ ├── data/ │ │ ├── modernization-rules.ts # 現代化規則資料庫 │ │ └── api-recommendations.ts # API 推薦知識庫 │ ├── config/ │ │ └── index.ts # 設定檔載入 │ ├── utils/ │ │ ├── report-formatter.ts # 報告格式化器 │ │ ├── cache.ts # 快取機制 │ │ └── ast-utils.ts # AST 工具函式 │ └── __tests__/ # 單元測試 ├── test-code/ # 測試用程式碼 ├── cli/ # CLI 工具 (規劃中) └── web/ # Web 介面 (規劃中) ``` ## 🎯 使用情境 ### 情境 1:分析舊專案的現代化機會 ``` 請分析 ./legacy-project 專案,找出可以用現代 Web API 替代的函式庫, 幫我減少 bundle 大小 ``` ### 情境 2:查詢某個 API 是否安全使用 ``` document.write 還能用嗎?有什麼替代方案? ``` ### 情境 3:檢查新 API 的瀏覽器支援 ``` 我想用 IntersectionObserver,但需要支援 Safari 13,可以嗎? 需要 polyfill 嗎? ``` ### 情境 4:遷移特定函式庫 ``` 我想把專案中的 Moment.js 換掉,有什麼建議? ``` ### 情境 5:分析專案相容性 ``` 幫我分析這個專案的瀏覽器相容性,我們需要支援 Chrome 80+、Firefox 78+、Safari 13+ ``` ### 情境 6:尋找適合的 Web API ``` 我需要實作:使用者在背景時仍能接收通知,有什麼原生 API 可以用? ``` ## 📊 輸出範例 ### Markdown 報告範例 ```markdown # 程式碼現代化分析報告 ## 📊 執行摘要 - **掃描檔案數量**: 42 個檔案 - **發現建議數量**: 15 項 - **潛在效能提升**: 25% - **檔案大小減少**: 150KB ## ⚠️ 風險評估 - **整體風險等級**: 🟡 MEDIUM - **預估工時**: 16 小時 ## 🚀 主要現代化建議 ### 📚 函式庫替換 #### 升級 moment 到 Date-fns/Dayjs Moment.js 體積過大且不支援 tree-shaking... ``` ## 🔮 未來規劃 - [x] ~~智慧 API 組合查詢引擎~~ ✅ 已完成 (`recommend_api_combination`) - [x] ~~基於 browserslist 的深度相容性分析~~ ✅ 已完成 (`analyze_compatibility`) - [x] ~~GitHub Actions 整合~~ ✅ 已完成 - [ ] CLI 獨立工具 - [ ] Web 視覺化介面 - [ ] 自動重構程式碼轉換 - [ ] VS Code / Cursor 擴充套件 - [ ] 更多 API 規則覆蓋 - [ ] 自訂規則設定介面 ## 📄 License MIT ## 🤝 貢獻 歡迎提交 Issue 和 Pull Request! --- **開發決策顧問** - 讓程式碼現代化變得更智慧、更安全! 🚀

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/mukiwu/dev-advisor-mcp'

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