Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
MCP server for Android emulator automation via ADB.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ADB_PATH, ADB_SERIAL, ADB_TIMEOUT_MS, ADB_MAX_BUFFER_MB, ADB_DEBUG, MCP_TRANSPORT, PORTต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"expo-android": {
"command": "npx",
"args": [
"-y",
"@fndchagas/expo-android"
],
"env": {
"ADB_PATH": "ใส่ค่าของคุณ",
"ADB_SERIAL": "ใส่ค่าของคุณ",
"ADB_TIMEOUT_MS": "ใส่ค่าของคุณ",
"ADB_MAX_BUFFER_MB": "ใส่ค่าของคุณ",
"ADB_DEBUG": "ใส่ค่าของคุณ",
"MCP_TRANSPORT": "ใส่ค่าของคุณ",
"PORT": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add expo-android --env ADB_PATH='ใส่ค่าของคุณ' --env ADB_SERIAL='ใส่ค่าของคุณ' --env ADB_TIMEOUT_MS='ใส่ค่าของคุณ' --env ADB_MAX_BUFFER_MB='ใส่ค่าของคุณ' --env ADB_DEBUG='ใส่ค่าของคุณ' --env MCP_TRANSPORT='ใส่ค่าของคุณ' --env PORT='ใส่ค่าของคุณ' -- npx -y @fndchagas/expo-androidเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"expo-android": {
"command": "npx",
"args": [
"-y",
"@fndchagas/expo-android"
],
"env": {
"ADB_PATH": "ใส่ค่าของคุณ",
"ADB_SERIAL": "ใส่ค่าของคุณ",
"ADB_TIMEOUT_MS": "ใส่ค่าของคุณ",
"ADB_MAX_BUFFER_MB": "ใส่ค่าของคุณ",
"ADB_DEBUG": "ใส่ค่าของคุณ",
"MCP_TRANSPORT": "ใส่ค่าของคุณ",
"PORT": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"expo-android": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@fndchagas/expo-android"
],
"env": {
"ADB_PATH": "ใส่ค่าของคุณ",
"ADB_SERIAL": "ใส่ค่าของคุณ",
"ADB_TIMEOUT_MS": "ใส่ค่าของคุณ",
"ADB_MAX_BUFFER_MB": "ใส่ค่าของคุณ",
"ADB_DEBUG": "ใส่ค่าของคุณ",
"MCP_TRANSPORT": "ใส่ค่าของคุณ",
"PORT": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ADB_PATH envADB_SERIAL envADB_TIMEOUT_MS envADB_MAX_BUFFER_MB envADB_DEBUG envMCP_TRANSPORT envPORT envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub frndchagas ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.5.2) เข้า registry 2 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Draugr
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Security scanning for AI agents: SAST, SCA, secrets, IaC, DAST, ranked by real risk.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
MCP server for Android emulator automation via ADB.
Verify adb:
adb devices
Claude Desktop, one-click: download expo-android.mcpb from the latest release and drag it into Settings → Extensions. You can leave both fields empty — adb is auto-detected and the only connected device is used by default.
Via npm:
npm install -g @fndchagas/expo-android
npx -y @fndchagas/expo-android
doctor to validate adb + device selection.inspect, tapElement, inputText, etc.Example:
await client.callTool({ name: 'expo-android.doctor', arguments: {} });
await client.callTool({ name: 'expo-android.inspect', arguments: { onlyInteractive: true, maxElements: 200 }, });
claude mcp add expo-android \
--env ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" \ --env ADB_SERIAL="auto" \ -- npx -y @fndchagas/expo-android
codex mcp add expo-android \
--env ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" \ --env ADB_SERIAL="auto" \ -- npx -y @fndchagas/expo-android
Or edit ~/.codex/config.toml:
[mcp_servers.expo-android]
command = "npx" args = ["-y", "@fndchagas/expo-android"] env = { ADB_PATH = "/Users/you/Library/Android/sdk/platform-tools/adb", ADB_SERIAL = "emulator-5554" }
Serial selection priority: serial param (per tool call) → setDevice override → ADB_SERIAL env → auto (if only one device).
| Variable | Default | Description |
|---|---|---|
ADB_PATH | adb | Path to adb executable |
ADB_SERIAL | optional | Device serial to target (auto to clear and auto-detect) |
ADB_TIMEOUT_MS | 15000 | Timeout for adb commands |
ADB_MAX_BUFFER_MB | 10 | Max output buffer size |
ADB_DEBUG | 0 | Log adb diagnostics to stderr |
MCP_TRANSPORT | stdio | Transport: stdio, http, or both |
PORT | 7332 | HTTP port when using http/both |
The server starts even when adb is missing — tools return the ADB executable not found error until adb becomes reachable (run doctor to diagnose). To fix it, set ADB_PATH or export an SDK path:
export ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb"
export ANDROID_HOME="$HOME/Library/Android/sdk"
If multiple devices are connected, set ADB_SERIAL to the target device. You can also run setDevice at runtime:
await client.callTool({
name: 'expo-android.setDevice', arguments: { serial: 'emulator-5554' }, });
If you update PATH or SDK variables, restart the MCP process so it can pick up the new environment.
npm run build
npm test
Tool names are plain identifiers (e.g. tap); your MCP client prefixes them with the server name you registered.
devices — list connected devices and emulators.doctor — validate adb availability and show connected devices.setDevice — override the active device serial for this MCP process.inspect — UI dump parsed into elements with a summary (screenshot optional).screenshot — capture a screenshot only (base64 or file path).findElement — return elements that match search criteria.tapElement — find an element and tap its center.waitForElement — wait until an element appears (optionally with state checks).assertElement — verify element existence and state.tap — tap at x/y coordinates.swipe — swipe between coordinates.longPress — press and hold at coordinates.inputText — type text in the focused field.keyEvent — send Android key events (e.g., BACK, HOME).openApp — launch an app by package name.listPackages — list installed package names.installExpoGo — download the pinned Expo Go APK and install it via adb install -r (the url override only accepts official github.com/expo/expo-go-releases URLs).Every tool declares MCP annotations (readOnlyHint/destructiveHint), so clients can auto-approve inspection tools and gate the ones that drive the device.
These tools accept flexible search inputs: findElement, tapElement, waitForElement, assertElement.
Common fields:
text, textContainscontentDesc, contentDescContainsresourceId, resourceIdContainsclassnormalizeWhitespace, caseInsensitiveconst result = await client.callTool({
name: 'expo-android.inspect', arguments: { onlyInteractive: true, includeScreenshot: false, maxElements: 200 }, });
Inspect options:
includeScreenshot (default: false)screenshotMode: base64 or pathscreenshotPath: optional file path when using pathmaxElements: limit elements returnedincludeElements: return elements or summary onlyawait client.callTool({
name: 'expo-android.doctor', arguments: {}, });
await client.callTool({
name: 'expo-android.tapElement', arguments: { text: 'Search', serial: 'emulator-5554' }, });
await client.callTool({
name: 'expo-android.tapElement', arguments: { text: 'Private account' }, });
await client.callTool({
name: 'expo-android.waitForElement', arguments: { text: 'Save', timeout: 10000, shouldBeClickable: true }, });
await client.callTool({ name: 'expo-android.assertElement', arguments: { text: 'Private account', shouldBeChecked: true }, });