Skip to main content
Glama

template-mcp

Plantilla de servidor MCP (Model Context Protocol) con TypeScript, validación Zod y soporte de transporte dual (stdio/HTTP). Compatible con cualquier cliente MCP: Claude Code, Claude Desktop, Cursor, VS Code Copilot, Windsurf, Cline y más.

Características

  • Transporte dual: stdio (local) y HTTP transmitible (remoto)

  • TypeScript estricto con módulos ESM

  • Validación Zod para esquemas de entrada de herramientas

  • Validación de entorno Joi (fallo rápido al iniciar)

  • Registro Pino en stderr (seguro para stdio)

  • Arquitectura modular: herramientas, recursos y prompts como módulos separados

  • Patrón de fábrica: createServer() para facilitar las pruebas

  • Suite de pruebas completa con transporte en memoria del SDK de MCP

  • Herramientas de calidad: ESLint + Prettier + Husky + lint-staged

  • Listo para Docker: compilación multietapa

  • CI/CD: pipeline de GitHub Actions

Related MCP server: xmcp Application

Inicio rápido

pnpm install
pnpm dev

Scripts

Script

Descripción

pnpm dev

Iniciar con recarga en caliente (tsx watch)

pnpm build

Compilar TypeScript + resolver alias

pnpm start

Ejecutar servidor compilado

pnpm test

Ejecutar pruebas

pnpm lint

Analizar código fuente

pnpm type-check

Comprobar tipos sin emitir

Configuración

Copia .env.example a .env y ajusta:

Variable

Predeterminado

Descripción

MCP_TRANSPORT

stdio

Transporte: stdio o http

PORT

3000

Puerto HTTP (solo para transporte http)

LOG_LEVEL

info

Nivel de registro de Pino

NODE_ENV

development

Entorno

Estructura del proyecto

src/
├── main.ts              # Entrypoint: transport selection
├── server.ts            # createServer() factory
├── config/              # Env validation + constants
├── common/              # Logger, error helpers, types
├── tools/               # MCP tools (callable by LLMs)
├── resources/           # MCP resources (read-only data)
└── prompts/             # MCP prompts (reusable templates)

Añadir una nueva herramienta

  1. Crea src/tools/my-tool.tool.ts:

import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { z } from 'zod';

export function registerMyTool(server: McpServer): void {
  server.registerTool(
    'my_tool',
    {
      title: 'My Tool',
      description: 'What this tool does',
      inputSchema: {
        param: z.string().describe('Parameter description'),
      },
      annotations: {
        readOnlyHint: true,
        destructiveHint: false,
        idempotentHint: true,
        openWorldHint: false,
      },
    },
    async ({ param }) => ({
      content: [{ type: 'text', text: `Result: ${param}` }],
    }),
  );
}
  1. Regístrala en src/tools/index.ts:

import { registerMyTool } from './my-tool.tool.js';

export function registerTools(server: McpServer): void {
  registerGreetTool(server);
  registerMyTool(server); // add here
}
  1. Añade pruebas en src/tools/__tests__/my-tool.tool.spec.ts

Configuración del cliente

Claude Code

Añade a .claude/settings.json:

{
  "mcpServers": {
    "template-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/template-mcp/dist/main.js"]
    }
  }
}

Claude Desktop

Añade a claude_desktop_config.json:

{
  "mcpServers": {
    "template-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/template-mcp/dist/main.js"]
    }
  }
}

Cursor

Añade en Cursor Settings > MCP Servers:

{
  "mcpServers": {
    "template-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/template-mcp/dist/main.js"]
    }
  }
}

VS Code (Copilot)

Añade a .vscode/settings.json:

{
  "mcp": {
    "servers": {
      "template-mcp": {
        "command": "node",
        "args": ["/absolute/path/to/template-mcp/dist/main.js"]
      }
    }
  }
}

Docker

# Build
docker build -t template-mcp .

# Run (HTTP mode, used for remote access)
docker run -p 3000:3000 template-mcp

Stack tecnológico

  • Node.js 22 + TypeScript (estricto, ESM)

  • MCP SDK v1 (@modelcontextprotocol/sdk)

  • Zod (validación de entrada de herramientas)

  • Joi (validación de entorno)

  • Pino (registro en stderr)

  • Vitest (pruebas)

  • ESLint + Prettier + Husky


Verificación

Todo lo siguiente está comprobado y funcionando al 100%.

Calidad de código

Check

Comando

Lint + formato

pnpm lint

Tipado estricto

pnpm type-check

Build (tsc + alias)

pnpm build

Tests unitarios (11/11)

pnpm test

Suite

Cubre

greet.tool.spec.ts (5)

Listado, estilos casual/formal/enthusiastic, rechazo de nombre vacío

server-info.resource.spec.ts (2)

Listado, campos JSON (name, version, uptime, timestamp)

summarize.prompt.spec.ts (4)

Listado, estilos brief/bullet-points, coerción numérica, defaults

Sin red ni puertos — usa InMemoryTransport del SDK.

Runtime — transporte stdio (modo por defecto)

echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}' \
  | MCP_TRANSPORT=stdio node dist/main.js

Respuesta JSON-RPC en stdout, logs en stderr.

Runtime — transporte HTTP

MCP_TRANSPORT=http PORT=3100 node dist/main.js &
# Initialize → capturar Mcp-Session-Id del header
# tools/list, resources/list, prompts/list, tools/call greet, resources/read info://server

Endpoint verificado

Resultado esperado

tools/call greet {"name":"Freddy","style":"casual"}

"Hey Freddy! How's it going?"

resources/read info://server

JSON con name, version, uptime, nodeVersion, timestamp

Docker

docker build -t template-mcp .  # multi-stage: base → deps → build → production
docker run -p 3000:3000 template-mcp  # arranca en HTTP mode

CI (GitHub Actions)

pnpm installpnpm lintpnpm buildpnpm test
Corre en cada push y PR a main/master.

Pipeline de commits (local)

git commit → husky → lint-staged → eslint --fix + prettier --write (solo archivos staged)

Gaps conocidos

  • HTTP transport sin tests automáticos (medio): los unit tests usan InMemoryTransport; el transporte HTTP (StreamableHTTPServerTransport) solo se verificó manualmente con curl. Para producción remota añadir tests de integración con sesión real

  • Integración con cliente MCP (medio): verificar manualmente agregando a .claude/settings.json o Cursor y confirmando que tools/resources/prompts aparecen en el cliente

  • Tool inputs extremos (bajo): strings muy largos, unicode malformado — Zod los rechaza pero el error response no está testeado vía HTTP

  • Sesiones concurrentes (bajo): fuera del scope de un template

Install Server
F
license - not found
A
quality
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Tools

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A TypeScript-based template for rapidly developing MCP servers with modular tool architecture, built-in validation using Zod schemas, and comprehensive error handling.
    9
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server template designed for building structured tools, prompts, and resources with built-in support for HTTP and STDIO transports. It provides a standardized framework for developers to create and deploy AI-driven services using TypeScript and Zod schema validation.
    9
  • A
    license
    Not graded
    quality
    D
    maintenance
    A minimal TypeScript MCP server template with example tool, Zod validation, stdio transport, and dotenv setup.
    78
    MIT

View all related MCP servers

Related MCP Connectors

  • A TypeScript MCP server for Home Assistant, enabling programmatic management of entities, automati…

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Freddymhs/template-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server