Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Create trips, compare variants side by side, and add accommodation, transport and event options.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
https://mcp.mynextadventure.cloud/mcpพิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http trip-planner https://mcp.mynextadventure.cloud/mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"trip-planner": {
"url": "https://mcp.mynextadventure.cloud/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"trip-planner": {
"type": "http",
"url": "https://mcp.mynextadventure.cloud/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://mcp.mynextadventure.cloud/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ยังไม่ได้อ่านรายการเครื่องมือของตัวนี้ เราตรวจ endpoint ทีละชุดวนไป
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันโดเมน mynextadventure.cloud แล้ว (registry ตรวจความเป็นเจ้าของโดเมน)
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.1) เข้า registry 33 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, MCP Server Autocad Lisp Helper
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.
High-precision static analysis and debug server for AutoCAD AutoLISP (.lsp) files.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A remote Model Context Protocol server that lets an AI assistant plan trips in MyNextAdventure — create a trip, lay out the itinerary, propose flights and hotels, add things to do, and share the result.
It runs as a stateless Cloudflare Worker and is a thin, authenticated proxy in front of the MyNextAdventure public API: it holds no trip data of its own, and forwards every call to the API under the caller's own API key.
https://mcp.mynextadventure.cloud/mcp (Streamable HTTP)https://api.mynextadventure.cloud (v1 public API)Every request needs a MyNextAdventure API key. Create one in the app under Settings → API keys, then send it as either:
Authorization: Bearer — what most MCP clients send, and what mcp-remote does, orX-API-Key: — for clients that only let you set custom headers.The worker forwards it to the API as X-API-Key. Requests without a key get a 401. Whatever the key can do, the assistant can do: keys are per-user, so the assistant only ever sees that user's trips.
Where your key lives. The server is stateless: your key is read from the headers of each request, used to make that one call to the MyNextAdventure API, and never stored — there is no session storage and no Durable Object holding it between requests. It is never logged and is not shared between requests or users. Revoke a key any time in the app under Settings → API keys.
24 tools, covering the operations conversational planning actually needs. Each one is a curated view over a MyNextAdventure API operation — see Regenerating the tools.
| Tool | What it does |
|---|---|
whoami | Which account the API key belongs to (handy for checking the connection). |
list_trips | List the user's trips; filter by status (planning, ready, finished, cancelled). |
get_trip | One trip in full — variants, destinations, options, events. Needed before any edit. |
create_trip | Create a new, empty trip. |
update_trip | Rename, set a cover photo, or move the trip through its lifecycle. |
create_trip_share_link | Create/refresh a public read-only share link. |
create_variant | Add an alternative plan (dates live here: exact or flexible). |
duplicate_variant | Copy a variant with everything in it. |
update_variant | Rename a variant, change its dates or notes. |
select_variant | Mark a variant as the chosen plan. |
add_destination | Add a stop to a variant, in itinerary order. |
update_destination | Change a stop's place name, dates or notes. |
reorder_destinations | Reorder the stops in a variant. |
add_accommodation_option | Propose a place to stay at a destination. |
add_transport_option | Propose a way of getting to a destination. |
add_getting_around_option | Propose local mobility (public transport, rental car, …). |
update_destination_option | Edit an existing option of any of the three kinds. |
select_destination_option | Select — or, with no optionId, deselect — an option. |
add_event | Add an activity (museum, concert, restaurant, tour) to a variant. |
update_event | Edit an activity. |
toggle_event | Flip an activity between committed and "just an idea". |
delete_trip_item | Permanently delete a variant, destination, option or event. Deleting a whole variant additionally requires confirm: true. |
list_goals | List the user's travel goals / bucket list. |
add_goal | Add a goal from a name or a URL. |
The server also ships MCP instructions describing the data model (trip → variants → destinations → options, with events on the variant) and the usual order of operations, so a client does not have to guess the workflow.
Not exposed yet, though the API supports them: collaborator access management and invites, voting, collections, invite tokens, goal↔trip linking, API key management, and trip deletion.
Every tool publishes a human-readable title (also as annotations.title; set in scripts/tool-manifest.ts, required by the Claude connectors directory) and all four MCP ToolAnnotations hints on tools/list, so clients can tell at a glance what is safe to run unattended:
| Hint | True for |
|---|---|
readOnlyHint | The 4 lookups: whoami, list_trips, get_trip, list_goals. The other 20 write. |
destructiveHint | delete_trip_item only. Everything else adds records or edits fields in place. |
idempotentHint | The update_* / select_* tools, reorder_destinations, create_trip_share_link (the API returns the existing token) and delete_trip_item. False for every add_*/create_* — a second call adds a second record — and for toggle_event, which flips a flag. |
openWorldHint | The 8 tools whose request can reach a third-party API: the three read tools (Kinde profiles, Google Places, currency conversion) plus add_accommodation_option, add_transport_option, add_event, update_destination_option and update_event, which resolve a googlePlaceId through Google Places when one is supplied. The rest only touch MyNextAdventure storage. |
The spec's defaults are the pessimistic ones (destructiveHint and openWorldHint both default to true), so the manifest requires all four to be stated per tool rather than inherited. test/annotations.test.ts holds the expected classification tool by tool and cross-checks readOnlyHint against the HTTP verb each tool actually issues.
Settings → Developer → Edit Config, then add:
{
"mcpServers": { "mynextadventure": { "command": "npx", "args": [ "mcp-remote", "https://mcp.mynextadventure.cloud/mcp", "--header", "Authorization: Bearer ${MNA_API_KEY}" ], "env": { "MNA_API_KEY": "your-api-key" } } } }
Restart Claude Desktop; the tools appear under the connector.
Add a custom connector pointing at https://mcp.mynextadventure.cloud/mcp and set the Authorization: Bearer header. From Claude Code:
claude mcp add --transport http mynextadventure https://mcp.mynextadventure.cloud/mcp \
--header "Authorization: Bearer "
Settings → Connectors → Add custom connector, MCP server URL https://mcp.mynextadventure.cloud/mcp, authentication "custom header" with X-API-Key: (or Authorization: Bearer ).
Streamable HTTP at /mcp. GET / returns a small JSON health document with the endpoint and tool count.
The same tools over stdio, for clients that launch a subprocess, with the key in MNA_API_KEY. Glama's build check runs this behind mcp-proxy.
npm ci
MNA_API_KEY= npm run start:stdio
npm install
npm run dev # wrangler dev on http://localhost:8787 npm test # vitest: request building, schemas, generator freshness npm run type-check # tsc --noEmit npm run generate:tools # regenerate src/generated/tools.ts from the OpenAPI spec npx tsx scripts/smoke.ts # drive the MCP protocol against localhost:8787
scripts/smoke.ts performs a real handshake (initialize → tools/list → one tools/call), reading the API key from $MNA_API_KEY or ~/.config/mna/credentials. It refuses to call mutating tools unless --force is passed. To exercise write tools without touching real data, point the worker at a local mock:
npx wrangler dev --var MNA_API_BASE_URL:http://localhost:8899
Tool schemas are generated, not hand-written:
spec/openapi-v1.json (the API's OpenAPI snapshot)
+ scripts/tool-manifest.ts (which operations become tools; names, descriptions, annotations) ↓ scripts/generator.ts src/generated/tools.ts (committed; zod input schemas, annotations + request builders)
To add or change a tool, edit scripts/tool-manifest.ts and run npm run generate:tools. Never edit src/generated/tools.ts by hand — a test fails if it drifts from the spec.
A manifest entry names one API operation, or groups several body-less operations behind a discriminator argument (delete_trip_item's target, select_destination_option's action) to keep the tool count down. Path params can be renamed (id → tripId), query params can be narrowed to enums, and descriptions can be overridden — everything else, including the request-body schemas, comes from the spec.
Each entry must also carry annotations (all four MCP hints; see Tool annotations). TypeScript enforces this, so a new tool cannot be added without classifying it, and test/annotations.test.ts checks the result against an expected table.
npm run deploy (wrangler) — production only, so it is gated on a maintainer; CI never deploys this worker.
npm ci
npm run type-check npm test # includes a drift test: src/generated/tools.ts must match the generator output npm run dev # wrangler dev
Tools are generated from the vendored OpenAPI snapshot in spec/openapi-v1.json (canonical live spec: https://api.mynextadventure.cloud/api/v1/openapi.json) via scripts/generate-tools.ts. Regenerate after refreshing the snapshot.
This repo is the deployable source for mcp.mynextadventure.cloud. Development also happens in the My Next Adventure monorepo and is synced here on release. Issues and PRs welcome.
MIT