template-mcp
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Скрипты
Скрипт | Описание |
| Запуск с горячей перезагрузкой (tsx watch) |
| Компиляция TypeScript + разрешение алиасов |
| Запуск скомпилированного сервера |
| Запуск тестов |
| Линтинг исходного кода |
| Проверка типов без эмиссии |
Конфигурация
Скопируйте .env.example в .env и настройте:
Переменная | По умолчанию | Описание |
|
| Транспорт: |
|
| HTTP-порт (только для транспорта |
|
| Уровень логирования Pino |
|
| Окружение |
Структура проекта
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)Добавление нового инструмента
Создайте
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}` }],
}),
);
}Зарегистрируйте в
src/tools/index.ts:
import { registerMyTool } from './my-tool.tool.js';
export function registerTools(server: McpServer): void {
registerGreetTool(server);
registerMyTool(server); // add here
}Добавьте тесты в
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 + форматирование |
|
Строгая типизация |
|
Сборка (tsc + alias) |
|
Модульные тесты (11/11)
pnpm testНабор тестов | Покрытие |
| Список, стили casual/formal/enthusiastic, отклонение пустого имени |
| Список, поля JSON (name, version, uptime, timestamp) |
| Список, стили 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Проверенный эндпоинт | Ожидаемый результат |
|
|
| 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 modeCI (GitHub Actions)
pnpm install → pnpm lint → pnpm build → pnpm 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
Параллельные сессии (низкий): вне области действия шаблона
Maintenance
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
- AlicenseNot gradedqualityDmaintenanceA TypeScript-based template for rapidly developing MCP servers with modular tool architecture, built-in validation using Zod schemas, and comprehensive error handling.9MIT
- FlicenseNot gradedqualityDmaintenanceA 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
- AlicenseNot gradedqualityBmaintenanceA feature-complete MCP server template in TypeScript demonstrating tools, resources, prompts, and both stdio and HTTP transports.8MIT
- AlicenseNot gradedqualityDmaintenanceA minimal TypeScript MCP server template with example tool, Zod validation, stdio transport, and dotenv setup.78MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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