mcp-server-skills
Pattern for building MCP servers in Next.js with mcp-handler, shared Zod schemas, and reusable server actions.
By gocallum · 362 installs
npx skills add gocallum/nextjs16-agent-skills --skill mcp-server-skills
Source repository · Upstream listing
Links
Model Context Protocol: https://modelcontextprotocol.io/
mcp handler (HTTP): https://www.npmjs.com/package/mcp handler
Reference implementation (Roll Dice): https://github.com/gocallum/rolldice mcpserver
Claude Desktop + mcp remote bridge: https://www.npmjs.com/package/mcp remote
Folder Structure (Next.js App Router)
Goal: Keep route.ts minimal. Put logic + Zod schemas in lib/ so both the MCP handler and server actions share a single source of truth.
Shared Zod Schema + Tool Definition
Reusable Server Actions (Web UI + Tests)
Server actions call the same logic as the MCP handler and power the web UI, keeping responses aligned.
Lightweight MCP Route
Pattern highlights
Route only wires createMcpHandler ; no business logic inline.
server.tool consumes the shared tool schema/description and calls shared logic.
basePath should align with the folder (e.g., /api/[transport] ).
Works for SSE/HTTP transports; stdio can be added separately if needed.
Claude Desktop Config (mcp remote)
Best Practices
1) Single source of truth — schemas + logic in lib/ ; both MCP tools and server actions import them.
2) Validation first — use Zod for inputs and reuse the same schema for UI + MCP.
3) Keep route.ts light — only handler wiring, logging, and transport config.
4) Shared responses — standardize { success, result error } shapes for tools and UI.
5) Vercel friendly — avoid stateful globals; configure maxDuration and runtime if needed.
6) Multiple transports — expose /api/[transport] for HTTP/SSE; add stdio entrypoint when required.
7) Local testing — hit server actions from the web UI to ensure MCP responses stay in sync.