GitHub
server ทางการของ GitHub ให้ AI อ่านและจัดการโค้ด issue และ pull request ในบัญชีของคุณได้ ใช้ผ่านคลาวด์ของ GitHub หรือรันในเครื่องด้วย Docker ก็ได้
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
MCP server that uses TypeScript AST to find which tests are affected by a code change
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"ast-impact-mapper": {
"command": "npx",
"args": [
"-y",
"ast-impact-mapper-mcp"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add ast-impact-mapper -- npx -y ast-impact-mapper-mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"ast-impact-mapper": {
"command": "npx",
"args": [
"-y",
"ast-impact-mapper-mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"ast-impact-mapper": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"ast-impact-mapper-mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 9 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub vola-trebla ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.3.1) เข้า registry 6 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี GitHub, Desktop Commander, Cloudflare MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
server ทางการของ GitHub ให้ AI อ่านและจัดการโค้ด issue และ pull request ในบัญชีของคุณได้ ใช้ผ่านคลาวด์ของ GitHub หรือรันในเครื่องด้วย Docker ก็ได้
MCP server for terminal commands, file operations, and process management
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
"Stop boiling the ocean. Run only the tests that actually care about your changes." 🐸
ast-impact-mapper-mcp is an advanced Model Context Protocol (MCP) server that analyzes your TypeScript/JavaScript codebase using AST parsing (ts-morph) and dependency graph tracing. It helps AI agents (like Claude or Cursor) target only the relevant tests, find dead code, identify circular import dependencies, and trace API mutations.
Guessing affected tests based on matching filenames (e.g. auth.ts -> auth.test.ts) is highly inaccurate. Running the entire test suite on every minor change is extremely slow.
Import graphs do not lie. If a test file transitively imports a modified source file, it must be run. ast-impact-mapper-mcp builds a bidirectional file dependency graph and answers "which tests should I run?" in milliseconds.
Imagine your AI agent modifies a shared helper: src/utils/auth.ts. Instead of blindly running all tests or guessing by name, the agent uses this MCP server:
The agent calls get_affected_tests with the changed file:
// Tool Call: get_affected_tests({ changed_files: ["src/utils/auth.ts"] })
{ "changed_files": ["/project/src/utils/auth.ts"], "affected_tests": ["/project/tests/checkout.spec.ts"], "total_affected": 1 }
To understand why checkout.spec.ts depends on auth.ts, the agent calls explain_impact:
// Tool Call: explain_impact({ changed_file: "src/utils/auth.ts", test_file: "tests/checkout.spec.ts" })
{ "found": true, "import_chain": [ "/project/tests/checkout.spec.ts", "/project/src/fixtures/user-fixture.ts", "/project/src/utils/auth.ts" ] }
_Aha! The checkout spec imports the user-fixture, which imports auth!_
If the change in auth.ts was only adding a TypeScript interface (type-only change), calling differentiate_type_impact tells the agent:
{
"files": [{ "file": "/project/src/utils/auth.ts", "runtime_impact": false }], "total_tests_must_run": 0, "total_tests_skippable": 1 }
_Success! Since it is a type-only change, the agent can skip running tests entirely, saving precious CPU cycles and time._
If it _does_ contain runtime changes, the agent requests the execution command:
// Tool Call: generate_test_command({ changed_files: ["src/utils/auth.ts"], runner: "vitest" })
{ "command": "npx vitest run tests/checkout.spec.ts" }
All tools are configured with consistent, type-safe schemas (arguments in snake_case).
get_affected_testsFinds all test files transitively importing changed source files.
project_root (string, required): Absolute path to the TypeScript project.changed_files (string[], optional): Modified file paths.git_diff (string, optional): Raw stdout of git diff --name-only.get_affected_tests_by_branchAutomatically diffs the current state against a base branch using git to find affected tests.
project_root (string, required)base_branch (string, default: "main"): Branch to compare against.get_rename_aware_diffHighly robust branch impact analysis that tracks file moves/renames (via git diff -M) and ignores formatting/whitespace changes.
project_root (string, required)base_branch (string, default: "main")similarity_threshold (number, default: 90): % similarity threshold to declare a move.explain_impactTraces and explains the exact chain of imports showing why a changed source file affects a specific test.
project_root (string, required)changed_file (string, required)test_file (string, required)generate_test_command Constructs CLI commands for test runners (vitest, jest, or playwright) matching the affected tests subset.project_root (string, required)changed_files (string[], required)runner (enum: jest, vitest, playwright, default: vitest)differentiate_type_impactInspects imports and types to isolate type-only changes (interfaces, types, or import type exports). Helps skip test execution entirely if the changes do not impact the runtime bundle!
project_root (string, required)changed_files (string[], required)analyze_api_surface_mutationCompares a file against its HEAD version and determines if it modifies the public API (breaking_api_change) or only contains internal implementation edits (internal_refactor).
project_root (string, required)file_path (string, required)generate_skeleton_viewGenerates a token-optimized skeleton of a file by stripping out function and method bodies, keeping only signatures, JSDocs, and line numbers.
project_root (string, required)file_path (string, required)include_jsdoc (boolean, default: true)include_private_members (boolean, default: false)get_symbol_dependency_graph Traces declaration-level dependencies (functions, classes, variables) across files, finding internal declarations usage.project_root (string, required)file_path (string, required)symbol_name (string, optional): Specific export symbol to map.direction (enum: forward, reverse, bidirectional, default: bidirectional)identify_unreachable_modulesFinds orphaned source files that have zero incoming imports (dead code safe to prune). Automatically respects standard entry points.
project_root (string, required)entry_points (string[], optional): Explicit entry-points to exclude from warning.limit (number, default: 50)detect_architectural_cyclesLocates circular dependency loops (e.g. A → B → C → A) which cause unpredictable module initialization orders.
project_root (string, required)get_dependency_graphReturns direct imports/importers of a file in JSON format or as a visual Mermaid TD flowchart.
project_root (string, required)file_path (string, required)format (enum: json, mermaid, default: json)get_coverage_gapsIdentifies files with zero import coverage — those that are never imported by any test file.
project_root (string, required)source_dirs (string[], optional)limit (number, default: 50)get_test_summaryProvides a high-level view of test coverage rate, deepest import chains, and high-risk most-imported modules.
project_root (string, required)refresh_project Invalidates AST and dependency graphs cache. Run this after checking out branches or pulling remote git updates.project_root (string, required)npm install -g ast-impact-mapper-mcp
Add the following to your .cursor/mcp.json or .vscode/mcp.json:
{
"mcpServers": { "ast-impact-mapper": { "command": "npx", "args": ["-y", "ast-impact-mapper-mcp"] } } }
claude mcp add ast-impact-mapper npx -- -y ast-impact-mapper-mcp
Imagine you modify a shared page component: src/pages/login-page.ts.
tests/auth.spec.ts imports the page object transitively.type_only_change -> it skips running the test execution completely, saving developer cycles!tests/auth.spec.ts depends on it, it renders the path: tests/auth.spec.ts → src/fixtures/app.ts → src/pages/login-page.ts.npm run build # Compile TypeScript to dist/
npm run lint # Run ESLint validation npm run format # Format files via Prettier npm test # Run unit tests via Vitest
MIT © vola-trebla 🐸