Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Bootstrap MCP (Model Context Protocol) servers with the official TypeScript SDK. Creates complete server implementations with transport layer, tools, resources, and proper error handling.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 75% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 12% | 0% |
Bootstrap production-ready MCP servers using the official TypeScript SDK with proper transport configuration, tool/resource handlers, and security best practices.
Invoke this skill when you need to:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | serverName | string | Yes | Name of the MCP server (kebab-case) | | description | string | Yes | Server description for clients | | transport | string | No | stdio, sse, or websocket (default: stdio) | | tools | array | No | List of tools to scaffold | | resources | array | No | List of resources to provide | | capabilities | object | No | Server capability declarations |
json{ "tools": [ { "name": "read_file", "description": "Read contents of a file", "inputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "File path to read" } }, "required": ["path"] } } ] }
json{ "resources": [ { "uriTemplate": "file:///{path}", "name": "File Resource", "description": "Access file contents", "mimeType": "text/plain" } ] }
<serverName>/
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md
├── src/
│ ├── index.ts # Server entry point
│ ├── server.ts # MCP server setup
│ ├── transport/
│ │ ├── stdio.ts # Stdio transport
│ │ ├── sse.ts # SSE transport (if selected)
│ │ └── websocket.ts # WebSocket transport (if selected)
│ ├── tools/
│ │ ├── index.ts # Tool registry
│ │ └── <tool>.ts # Individual tool handlers
│ ├── resources/
│ │ ├── index.ts # Resource registry
│ │ └── <resource>.ts # Resource providers
│ ├── prompts/
│ │ └── index.ts # Prompt templates (optional)
│ └── utils/
│ ├── validation.ts # Input validation helpers
│ ├── errors.ts # MCP error handling
│ └── logging.ts # Structured logging
├── tests/
│ ├── tools/
│ └── resources/
└── mcp.json # MCP server manifesttypescriptimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { registerTools } from './tools'; import { registerResources } from './resources'; export async function createServer() { const server = new McpServer({ name: '<serverName>', version: '1.0.0', }); // Register capabilities registerTools(server); registerResources(server); return server; } export async function startServer() { const server = await createServer(); const transport = new StdioServerTransport(); await server.connect(transport); console.error('[MCP] Server started on stdio'); }
typescriptimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { z } from 'zod'; import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; const inputSchema = z.object({ path: z.string().describe('File path to read'), }); export function registerReadFileTool(server: McpServer) { server.tool( 'read_file', 'Read contents of a file', inputSchema.shape, async (args) => { const { path } = inputSchema.parse(args); try { // Implementation const content = await readFile(path, 'utf-8'); return { content: [{ type: 'text', text: content }], }; } catch (error) { throw new McpError( ErrorCode.InternalError, `Failed to read file: ${error.message}` ); } } ); }
typescriptimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; export function registerFileResource(server: McpServer) { server.resource( 'file:///{path}', 'File Resource', 'Access file contents by path', async (uri) => { const path = uri.pathname; const content = await readFile(path, 'utf-8'); return { contents: [{ uri: uri.href, mimeType: 'text/plain', text: content, }], }; } ); }
json{ "dependencies": { "@modelcontextprotocol/sdk": "^1.0.0", "zod": "^3.22.0" }, "devDependencies": { "@types/node": "^20.0.0", "typescript": "^5.0.0", "vitest": "^1.0.0" } }
typescriptimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; const transport = new StdioServerTransport();
typescriptimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'; import express from 'express'; const app = express(); app.get('/sse', (req, res) => { const transport = new SSEServerTransport('/message', res); server.connect(transport); });
typescriptimport { WebSocketServerTransport } from '@modelcontextprotocol/sdk/server/websocket.js'; import { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ port: 3000 }); wss.on('connection', (ws) => { const transport = new WebSocketServerTransport(ws); server.connect(transport); });
Other measured skills in the registry, with their headline benchmark lift.