mcp-scaffold
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-scaffoldAdd a tool that converts Celsius to Fahrenheit and test it with curl"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-scaffold
A generic, plug-and-play MCP (Model Context Protocol) server. Clone it, add your own
tools to tools.js, run it, and connect it to Claude, Cursor, or Windsurf. No MCP SDK,
no framework, no build step — just Node's built-in http module.
Quick start
git clone https://github.com/abduznik/mcp-scaffold.git
cd mcp-scaffold
npm install # no dependencies, but keeps npm happy
npm startmcp-scaffold running on http://localhost:3939/mcp
Registered tools: (none yet — add some in tools.js)That's expected — tools.js ships with its example tool commented out. See below to
turn it on.
Related MCP server: MCP Tools
Try the example tool
Open tools.js. Near the top of the tools array there's a roll_dice example, fully
commented out:
export const tools = [
// ── EXAMPLE TOOL — commented out by default ─────────────────────────────────
// Uncomment the block below to try a working example (rolls dice). Comment it
// back out (or delete it) once you're ready to add your own tools instead.
//
// {
// name: "roll_dice",
// ...
// },
];Uncomment that block (just the { ... } object — remove the leading // from each
line), restart the server, and roll_dice is live:
Registered tools: roll_diceComment it back out any time to disable it again — nothing else in the project needs to change either way.
Add your own tool
mcp-server.js is generic plumbing — you shouldn't need to edit it. Everything you touch
lives in tools.js:
export const tools = [
// ...existing tools...
{
name: "my_tool",
description: "One clear sentence describing what it does and when to use it.",
inputSchema: {
type: "object",
properties: {
arg_one: { type: "string", description: "What this argument is for" },
},
required: ["arg_one"],
},
handler({ arg_one }) {
return `You said: ${arg_one}`;
},
},
];Restart the server (npm start) and your tool is live.
The description field matters more than it looks. The model reads it to decide
when to call your tool, not just what it does. Be specific about the trigger ("use this
when the user asks to...") rather than just naming the function.
Test it before connecting any AI client
Always verify with curl first — if something's broken, this tells you whether the bug
is in your server or in the client config.
# initialize
curl -s -X POST localhost:3939/mcp \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize"}'
# tools/list — confirm your tool shows up
curl -s -X POST localhost:3939/mcp \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# tools/call — confirm it actually runs (after uncommenting roll_dice)
curl -s -X POST localhost:3939/mcp \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"roll_dice","arguments":{"sides":20,"count":2}}}'Connect it to Claude Desktop
Add this to claude_desktop_config.json
(macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"mcp-scaffold": {
"type": "url",
"url": "http://localhost:3939/mcp"
}
}
}Restart Claude Desktop. Ask it to do whatever your tool does, in plain language — the model calls your tool on its own when it decides it's relevant.
Deploying it for free (optional)
This server has zero dependencies, so it also runs unmodified on Cloudflare Workers —
just wrap the same logic in a fetch(request) export instead of http.createServer.
Free tier, no credit card, public URL anyone can connect to.
How it works
mcp-server.js— generic MCP protocol handler. Answers the three methods every MCP client needs:initialize,tools/list,tools/call. Reads whatever tools are exported fromtools.jsand wires them up automatically.tools.js— where your tools live. Each tool is{ name, description, inputSchema, handler }.handlercan be sync or async and can return anything that stringifies sensibly — that string is what the model sees back.
License
MIT — do whatever you want with it.
This server cannot be deployed
Maintenance
Related MCP Connectors
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Related MCP Servers
- AlicenseDqualityDmaintenanceA foundation for building custom local Model Context Protocol (MCP) servers that provide tools accessible to AI assistants like Cursor or Claude Desktop.137MIT
- AlicenseNot gradedqualityDmaintenanceA local Model Context Protocol (MCP) server that exposes custom tools to Claude Desktop, enabling direct interaction with your local environment. It provides a framework for building and integrating custom TypeScript tools into the Claude interface.4 npmMIT
- AlicenseNot gradedqualityAmaintenanceAutomatically generates MCP tools, CLI, and web UI from TypeScript methods, enabling AI agents and chat clients to interact with custom capabilities defined once.29 npm100MIT
- AlicenseNot gradedqualityCmaintenanceA local, no-code builder for MCP servers that lets you create AI tools by describing them in plain language, without writing code. Connect your tools to any MCP-compatible assistant like Claude, Cursor, or VS Code Copilot.1MIT