Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →MCP server development including tool design, resource endpoints, prompt templates, and transport configuration
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-02 | ✓→✗ | ▼ Worse | 48% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 17% | 0% |
| case-04 | ✓→✓ | = Same ✓ | -1% | 0% |
typescriptimport { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; const server = new McpServer({ name: "project-tools", version: "1.0.0", }); server.tool( "search_files", "Search for files matching a glob pattern in the project directory", { pattern: z.string().describe("Glob pattern (e.g., '**/*.ts')"), directory: z.string().optional().describe("Base directory to search from"), }, async ({ pattern, directory }) => { const files = await glob(pattern, { cwd: directory ?? process.cwd() }); return { content: [ { type: "text", text: files.length > 0 ? files.join("\n") : `No files found matching ${pattern}`, }, ], }; } ); server.tool( "run_query", "Execute a read-only SQL query against the application database", { query: z.string().describe("SQL SELECT query to execute"), limit: z.number().default(100).describe("Maximum rows to return"), }, async ({ query, limit }) => { if (!query.trim().toUpperCase().startsWith("SELECT")) { return { content: [{ type: "text", text: "Only SELECT queries are allowed" }], isError: true, }; } const rows = await db.query(`${query} LIMIT ${limit}`); return { content: [{ type: "text", text: JSON.stringify(rows, null, 2) }], }; } );
typescriptserver.resource( "schema", "db://schema", "Current database schema with all tables, columns, and relationships", async () => { const schema = await db.query(` SELECT table_name, column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema = 'public' ORDER BY table_name, ordinal_position `); return { contents: [ { uri: "db://schema", mimeType: "application/json", text: JSON.stringify(schema, null, 2), }, ], }; } ); server.resource( "config", "config://app", "Application configuration (secrets redacted)", async () => { const config = await loadConfig(); const safe = redactSecrets(config); return { contents: [ { uri: "config://app", mimeType: "application/json", text: JSON.stringify(safe, null, 2), }, ], }; } );
typescriptserver.prompt( "review-code", "Review code changes for bugs, security issues, and style", { diff: z.string().describe("Git diff or code to review"), focus: z.enum(["security", "performance", "style", "all"]).default("all"), }, async ({ diff, focus }) => ({ messages: [ { role: "user", content: { type: "text", text: `Review this code diff. Focus: ${focus}\n\n${diff}`, }, }, ], }) );
json{ "mcpServers": { "project-tools": { "command": "node", "args": ["./mcp-server/dist/index.js"], "env": { "DATABASE_URL": "postgres://localhost:5432/app" } }, "remote-server": { "url": "https://mcp.example.com/sse", "headers": { "Authorization": "Bearer ${MCP_TOKEN}" } } } }
typescriptimport { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; const transport = new StdioServerTransport(); await server.connect(transport);
For HTTP-based servers, use the SSE transport for streaming responses to clients.
isError: true flag on error responsesisError: true with user-friendly messagesOther measured skills in the registry, with their headline benchmark lift.