Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
ยังไม่มีคำอธิบายภาษาไทย ดูข้อเท็จจริงด้านล่าง หรือเปิดคำอธิบายต้นฉบับจากผู้ทำ
Android framework and solution that prevents TransactionTooLargeException crashes by design.เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ผลตรวจผ่าน 3/3 · ทำงานบนเครื่องคุณ · ✓ ตรวจคำสั่งแล้ว 13 พ.ย. 2569
ขั้นแรก: คุณใช้ AI ตัวไหน
เลือกแอปที่คุณใช้ ขั้นตอนจะขึ้นด้านล่าง
ต่อกับ Claude ได้ แต่ต้องเตรียมก่อน
ต้องลง Docker ในเครื่องก่อน (ทำครั้งเดียว) · ใช้ได้เฉพาะแอป Claude บนคอม (Windows หรือ Mac) ไม่ใช่บนเว็บหรือมือถือ
SettingsDeveloperEdit Config
{
"mcpServers": {
"shuttle": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/grarcht/shuttle-mcp:4.0.0"
]
}
}
}ใช้ Shuttle บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude บอกว่ากำลังใช้ Shuttle หรือมีชื่อเครื่องมือของ Shuttle ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ChatGPT ยังต่อ Shuttle ไม่ได้
Shuttle ต้องติดตั้งในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะตัวที่ทำงานบนเว็บ
ก · ใช้แอปที่ต่อ Shuttle ได้
ข · ตัวอื่นในหมวด ออกแบบ ภาพ และเสียง ที่ต่อกับ ChatGPT ได้
เลือกจากตัวที่ใช้มากในหมวดเดียวกัน เฉพาะตัวที่ต่อด้วยที่อยู่ได้โดยไม่ต้องใส่คีย์
ต่อกับ Claude Code ได้ แต่ต้องเตรียมก่อน
ต้องลง Docker ในเครื่องก่อน (ทำครั้งเดียว)
Mac: กด Command+Space พิมพ์ Terminal · Windows: เปิด PowerShell
claude mcp add --scope user shuttle -- docker run -i --rm ghcr.io/grarcht/shuttle-mcp:4.0.0ต้องเห็น Shuttle ในรายการและขึ้นว่าเชื่อมต่อแล้ว
ใช้ Shuttle บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude Code บอกว่ากำลังใช้ Shuttle หรือมีชื่อเครื่องมือของ Shuttle ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ Cursor ได้ แต่ต้องเตรียมก่อน
ต้องลง Docker ในเครื่องก่อน (ทำครั้งเดียว)
ใช้ Shuttle บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Cursor บอกว่ากำลังใช้ Shuttle หรือมีชื่อเครื่องมือของ Shuttle ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Cursor เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ VS Code ได้ แต่ต้องเตรียมก่อน
ต้องลง Docker ในเครื่องก่อน (ทำครั้งเดียว)
ใช้ Shuttle บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า VS Code บอกว่ากำลังใช้ Shuttle หรือมีชื่อเครื่องมือของ Shuttle ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ VS Code เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
Claude Code
claude mcp add --scope user shuttle -- docker run -i --rm ghcr.io/grarcht/shuttle-mcp:4.0.0Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"shuttle": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/grarcht/shuttle-mcp:4.0.0"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"shuttle": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/grarcht/shuttle-mcp:4.0.0"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"shuttle": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/grarcht/shuttle-mcp:4.0.0"
]
}
}
}ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ดูจากแบบการต่อของ server ตัวนี้ และเอกสารของผู้ทำโปรแกรมแต่ละตัว ตรวจเมื่อ 10 พ.ย. 2569
ติดตั้งบนเครื่องได้ใน
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 13 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub grarcht ซึ่งเป็นเจ้าของ repo
มีการแก้โค้ดล่าสุด 3 เดือนที่ผ่านมา
ใช้ MIT
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
ถาม แชร์เคล็ดลับ หรือแจ้งว่าใช้ไม่ได้ เรียงตามที่คนกดว่ามีประโยชน์
ยังไม่มีใครโพสต์ ถามหรือแชร์เป็นคนแรกได้เลย
ข้อความในส่วนนี้เขียนโดยผู้ใช้ ไม่ใช่ทีม PopNx
ยังไม่มีรีวิว
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 3 จาก 3 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด 3 เดือนที่ผ่านมา และส่งรุ่นล่าสุด (4.0.0) เข้า registry 3 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Docker ในเครื่องด้วย
ในหมวดเดียวกันมี Figma Context MCP, AutoClip, Next AI Draw.io
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Clip long videos into short clips with covers and captions. Local CLI and MCP.
draw.io diagrams your AI agent draws on a live browser canvas that you can also edit by hand
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Prevent TransactionTooLargeException crashes. For good. A modern Android framework for safely transporting large Serializable objects between components, without the crashes.
🗞️ Featured in [Android Weekly #594](https://androidweekly.net/issues/issue-594) and [Android Weekly #455](https://androidweekly.net/issues/issue-455), validated by the Android community twice.
You've seen this before. Maybe last week:
android.os.TransactionTooLargeException: data parcel size X bytes
It didn't show up in dev. It didn't show up in QA. It showed up at 2am, in production, for real users. Your Play Store rating took the hit before anyone on the team even knew.
So you triaged it. Filed the ticket. Wrote the fix. Reviewed the PR. Ran QA again. Cut the hotfix. And then you added it to the code review checklist, hoping the next engineer would catch it before it happened again.
They won't. Not reliably. You can't review your way out of a structural problem.
Shuttle provides a modern, guarded way to pass large Serializable objects with Intent objects or save them in Bundle objects to avoid app crashes. The crash class is structurally prevented, not governed against.
Why keep spending more time and money on governance through code reviews? Why not embrace the problem by providing a solution for it?
Shuttle reduces the high level of governance needed to catch `TransactionTooLargeException` inducing code by:
Serializable and passing an identifier for the SerializableBundle for binder transactionsTransactionTooLargeExceptionsSerializable at the destinationShuttle also excels by:
When envisioning, designing, and creating the architecture, quality attributes and best practices were kept in mind. These attributes include usability, readability, recognizability, reusability, maintainability, and more.
| Without Shuttle | With Shuttle |
|---|---|
Large Serializable passed in Intent/Bundle | Object stored in a warehouse; only a small identifier is passed |
| Silent in dev, catastrophic in production | Binder transaction stays within safe size limits, everywhere |
| Time and money spent on crash investigation, fixes, QA, and hotfixes | Crash class is structurally impossible |
| Requires constant code review governance | Ship with confidence |
| Engineers manually manage object lifecycles | Automatic or on-demand cargo cleanup built in |
The Shuttle framework takes its name from cargo transportation in the freight industry. Moving and storage companies experience scenarios where large moving trucks cannot transport cargo the entire way to the destination (warehouses, houses, et cetera). These scenarios might occur from road restrictions, trucks being overweight from large cargo, and more. As a result, companies use small Shuttle vans to transport smaller cargo groups on multiple trips to deliver the entire shipment.
After the delivery is complete, employees remove the cargo remnants from the shuttle vans and trucks. This clean-up task is one of the last steps for the job.
The Shuttle framework takes its roots in these scenarios:
Shuttle applies this same logic to Android's binder transaction limit:
┌─────────────────────────────────────────────────────────────┐
│ Source Component │ │ 1. Large Serializable -> stored in Warehouse (Room/DB) │ │ 2. Small cargo ID -> passed in Intent/Bundle │ └──────────────────────────────┬──────────────────────────────┘ │ (tiny binder transaction) ┌──────────────────────────────▼──────────────────────────────┐ │ Destination Component │ │ 3. Cargo ID received -> retrieved from Warehouse │ │ 4. Large Serializable -> delivered via Kotlin Channel │ │ 5. Cleanup -> cargo removed from Warehouse automatically │ └─────────────────────────────────────────────────────────────┘
| Requirement | Minimum |
|---|---|
| Android min SDK | 26 |
| Kotlin | 2.2.10 |
| AGP (Android Gradle Plugin) | 8.0+ |
| KSP | Required only when using @ShuttleCargo |
| Java | 21 |
`settings.gradle.kts` — apply the Shuttle Gradle plugin so the @ShuttleCargo annotation processor is wired into your build:
@ShuttleCargo annotates the cargo class you want to transport between screens. At build time, the annotation processor generates the serialization code Shuttle needs to store and retrieve cargo, without any manual Serializable boilerplate.
pluginManagement {
plugins { id("com.grarcht.shuttle.cargo") version "4.0.0" } }
The Shuttle Cargo Gradle plugin configures KSP and registers the Shuttle compiler plugin automatically. Without it, @ShuttleCargo-annotated classes will not generate the required serialization glue code.
`build.gradle.kts`:
plugins {
id("com.grarcht.shuttle.cargo") }
dependencies { implementation(platform("com.grarcht.shuttle:shuttle-bom:4.0.0")) implementation("com.grarcht.shuttle:framework") implementation("com.grarcht.shuttle:framework-integrations-persistence") implementation("com.grarcht.shuttle:framework-integrations-extensions-room") implementation("com.grarcht.shuttle:framework-addons-navigation-component") // Optional
// Annotation-based API — use @ShuttleCargo to own the serialization contract implementation("com.grarcht.shuttle:framework-annotations") ksp("com.grarcht.shuttle:framework-annotations-processor") }
Version Catalog (`libs.versions.toml`):
[versions]
shuttle = "4.0.0"
[plugins] shuttle-cargo = { id = "com.grarcht.shuttle.cargo", version.ref = "shuttle" }
[libraries] shuttle-bom = { group = "com.grarcht.shuttle", name = "shuttle-bom", version.ref = "shuttle" } shuttle-framework = { group = "com.grarcht.shuttle", name = "framework" } shuttle-persistence = { group = "com.grarcht.shuttle", name = "framework-integrations-persistence" } shuttle-room = { group = "com.grarcht.shuttle", name = "framework-integrations-extensions-room" } shuttle-navigation = { group = "com.grarcht.shuttle", name = "framework-addons-navigation-component" } shuttle-annotations = { group = "com.grarcht.shuttle", name = "framework-annotations" } shuttle-annotations-processor = { group = "com.grarcht.shuttle", name = "framework-annotations-processor" }
Wire CargoShuttle once as a singleton. With Hilt:
@Provides @Singleton
fun provideShuttle(facade: ShuttleFacade, warehouse: ShuttleWarehouse): Shuttle = CargoShuttle(facade, warehouse)
@Provides @Singleton fun provideShuttleFacade( @ApplicationContext context: Context, warehouse: ShuttleWarehouse ): ShuttleFacade = ShuttleCargoFacade(context as Application, warehouse)
@Provides @Singleton fun provideShuttleWarehouse( dao: ShuttleDataAccessObject, factory: ShuttleDataModelFactory, @ApplicationContext context: Context, gateway: ShuttleFileSystemGateway ): ShuttleWarehouse = ShuttleRepository(dao, factory, context.filesDir.absolutePath, gateway)
The ShuttleDataAccessObject comes from ShuttleRoomDataDb.getInstance(ShuttleRoomDbConfig(context)).shuttleDataAccessObject. Inject Shuttle wherever you need to transport data.
// Source: transport a large Serializable via Intent
shuttle.intentCargoWith(context, DestinationActivity::class.java) .transport(cargoId, myLargeSerializable) .cleanShuttleOnReturnTo(SourceFragment::class.java, DestinationActivity::class.java, cargoId) .deliver(context)
// Destination: pick up the cargo
lifecycleScope.launch { getShuttleChannel() .consumeAsFlow() .collectLatest { result -> when (result) { is ShuttlePickupCargoResult.Success<*> -> render(result.data as MyModel) is ShuttlePickupCargoResult.Error<*