Skip to main content
Glama

template-mcp

Шаблон сервера MCP (Model Context Protocol) на TypeScript с валидацией Zod и поддержкой двойного транспорта (stdio/HTTP). Совместим с любым клиентом MCP: Claude Code, Claude Desktop, Cursor, VS Code Copilot, Windsurf, Cline и другими.

Возможности

  • Двойной транспорт: stdio (локальный) и Streamable HTTP (удаленный)

  • Строгий TypeScript с модулями ESM

  • Валидация Zod для схем входных данных инструментов

  • Валидация окружения Joi (быстрый отказ при запуске)

  • Логирование Pino в stderr (безопасно для stdio)

  • Модульная архитектура: инструменты, ресурсы и промпты как отдельные модули

  • Паттерн «Фабрика»: createServer() для тестируемости

  • Полный набор тестов с использованием in-memory транспорта SDK MCP

  • Качественный инструментарий: ESLint + Prettier + Husky + lint-staged

  • Готовность к Docker: многоэтапная сборка

  • CI/CD: конвейер GitHub Actions

Related MCP server: xmcp Application

Быстрый старт

pnpm install
pnpm dev

Скрипты

Скрипт

Описание

pnpm dev

Запуск с горячей перезагрузкой (tsx watch)

pnpm build

Компиляция TypeScript + разрешение алиасов

pnpm start

Запуск скомпилированного сервера

pnpm test

Запуск тестов

pnpm lint

Линтинг исходного кода

pnpm type-check

Проверка типов без эмиссии

Конфигурация

Скопируйте .env.example в .env и настройте:

Переменная

По умолчанию

Описание

MCP_TRANSPORT

stdio

Транспорт: stdio или http

PORT

3000

HTTP-порт (только для транспорта http)

LOG_LEVEL

info

Уровень логирования Pino

NODE_ENV

development

Окружение

Структура проекта

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)

Добавление нового инструмента

  1. Создайте 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. Зарегистрируйте в src/tools/index.ts:

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

export function registerTools(server: McpServer): void {
  registerGreetTool(server);
  registerMyTool(server); // add here
}
  1. Добавьте тесты в src/tools/__tests__/my-tool.tool.spec.ts

Конфигурация клиента

Claude Code

Добавьте в .claude/settings.json:

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

Claude Desktop

Добавьте в claude_desktop_config.json:

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

Cursor

Добавьте в Cursor Settings > MCP Servers:

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

VS Code (Copilot)

Добавьте в .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

Технологический стек

  • Node.js 22 + TypeScript (строгий, ESM)

  • MCP SDK v1 (@modelcontextprotocol/sdk)

  • Zod (валидация входных данных инструментов)

  • Joi (валидация окружения)

  • Pino (логирование в stderr)

  • Vitest (тестирование)

  • ESLint + Prettier + Husky


Проверка

Все нижеперечисленное проверено и работает на 100%.

Качество кода

Проверка

Команда

Lint + форматирование

pnpm lint

Строгая типизация

pnpm type-check

Сборка (tsc + alias)

pnpm build

Модульные тесты (11/11)

pnpm test

Набор тестов

Покрытие

greet.tool.spec.ts (5)

Список, стили casual/formal/enthusiastic, отклонение пустого имени

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

Список, поля JSON (name, version, uptime, timestamp)

summarize.prompt.spec.ts (4)

Список, стили brief/bullet-points, приведение типов чисел, значения по умолчанию

Без сети и портов — используется InMemoryTransport из SDK.

Runtime — транспорт stdio (режим по умолчанию)

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

Ответ JSON-RPC в stdout, логи в stderr.

Runtime — транспорт 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

Проверенный эндпоинт

Ожидаемый результат

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

"Hey Freddy! How's it going?"

resources/read info://server

JSON с 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 Запускается при каждом push и PR в main/master.

Конвейер коммитов (локальный)

git commit → husky → lint-staged → eslint --fix + prettier --write (только для staged-файлов)

Известные пробелы

  • HTTP-транспорт без автоматических тестов (средний): модульные тесты используют InMemoryTransport; HTTP-транспорт (StreamableHTTPServerTransport) был проверен только вручную через curl. Для удаленного продакшена добавьте интеграционные тесты с реальной сессией

  • Интеграция с клиентом MCP (средний): проверьте вручную, добавив в .claude/settings.json или Cursor, и убедитесь, что инструменты/ресурсы/промпты отображаются в клиенте

  • Экстремальные входные данные инструментов (низкий): очень длинные строки, некорректный unicode — Zod их отклоняет, но ответ об ошибке не протестирован через HTTP

  • Параллельные сессии (низкий): вне области действия шаблона

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