Dev Advisor MCP Server
Analyzes JavaScript/TypeScript projects for code modernization opportunities, checks browser compatibility via Can I Use, searches MDN documentation, and recommends modern Web API alternatives to reduce bundle size and improve performance.
README
開發決策顧問 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 安裝
npm install -g @muki/dev-advisor-mcp
從原始碼安裝
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:
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 |
❌ |
進階使用
- 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 取得完整範例。
⚙️ MCP 配置
方式一:使用 npm 全局安裝(推薦)
首先全局安裝:
npm install -g @mukiwu/dev-advisor-mcp
然後在 Claude Desktop 或 Cursor IDE 中配置:
Claude Desktop 配置 (~/.claude/config.json):
{
"mcpServers": {
"dev-advisor": {
"command": "dev-advisor"
}
}
}
Cursor IDE 配置:
{
"mcpServers": {
"dev-advisor": {
"command": "dev-advisor"
}
}
}
方式二:使用 npx(無需全局安裝)
Claude Desktop 配置 (~/.claude/config.json):
{
"mcpServers": {
"dev-advisor": {
"command": "npx",
"args": ["-y", "@mukiwu/dev-advisor-mcp"]
}
}
}
Cursor IDE 配置:
{
"mcpServers": {
"dev-advisor": {
"command": "npx",
"args": ["-y", "@mukiwu/dev-advisor-mcp"]
}
}
}
注意:現在已經修復了 npx 的路徑問題,應該可以正常使用了。如果仍有問題,建議使用方式一(全局安裝)。
方式三:使用本地安裝路徑
如果從原始碼安裝或使用本地路徑:
{
"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:
{
"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
}
}
🧪 開發
# 安裝依賴
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 報告範例
# 程式碼現代化分析報告
## 📊 執行摘要
- **掃描檔案數量**: 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!
開發決策顧問 - 讓程式碼現代化變得更智慧、更安全! 🚀
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
E2B
Using MCP to run code via e2b.