Leave Manager MCP Server
Leave Manager MCP Server
Пользовательский сервер Model Context Protocol (MCP), созданный на TypeScript для управления операциями, связанными с отпусками сотрудников, через таких ИИ-клиентов, как Claude Desktop.
Этот проект в настоящее время предназначен для внутренней разработки и тестирования и использует фиктивную/внутрипроцессную базу данных вместо производственной базы данных.
Архитектура спроектирована таким образом, чтобы фиктивную базу данных можно было позже заменить на реальную базу данных или внутренний API управления отпусками без изменения интерфейса инструментов MCP.
Оглавление
Обзор
Сервер Leave Manager MCP предоставляет функциональность управления отпусками в виде MCP-инструментов, которые могут использоваться ИИ-клиентами.
Например, вместо ручного вызова API пользователь может спросить у Claude:
Сколько у меня отпусков за свой счёт?
Claude может определить подходящий MCP-инструмент и вызвать:
get_leave_balanceMCP-сервер обрабатывает запрос и возвращает структурированную информацию, которую Claude может использовать для формирования ответа на естественном языке.
Пример
User
│
│ "How many leaves do I have?"
▼
Claude Desktop
│
│ MCP Tool Call
▼
Leave Manager MCP Server
│
▼
Dummy Database
│
▼
Leave Balance
│
▼
Claude Desktop
│
▼
Natural Language ResponseВозможности
Текущая версия предоставляет следующие MCP-инструменты:
Получение остатка отпуска сотрудника
Получение истории отпусков сотрудника
Получение доступных типов отпусков
Подача заявки на отпуск
Отмена отпуска
Проверка входных данных с помощью Zod
Фиктивная/внутрипроцессная база данных
Реализация на TypeScript
Транспорт MCP на основе stdio
Поддержка MCP Inspector
Интеграция с Claude Desktop
Архитектура
Текущая архитектура:
┌──────────────────────┐
│ Claude Desktop │
│ │
│ User Interaction │
└──────────┬───────────┘
│
│ MCP / stdio
▼
┌──────────────────────┐
│ Leave Manager MCP │
│ Server │
│ │
│ MCP Tool Layer │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Leave Service │
│ / Repository │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Dummy DB │
│ │
│ employees[] │
│ leaveBalances[] │
│ leaveRequests[] │
└──────────────────────┘Сервер использует stdio, потому что Claude Desktop может запустить MCP-сервер как локальный процесс и общаться с ним через стандартный ввод/вывод. MCP TypeScript SDK предоставляет serveStdio() для этого случая.
Технологический стек
Технология | Назначение |
TypeScript | Разработка приложения |
Node.js | Среда выполнения |
npm | Управление зависимостями |
MCP TypeScript SDK | Реализация MCP-сервера |
Zod | Проверка входных данных |
Claude Desktop | MCP-клиент |
MCP Inspector | Локальное тестирование MCP |
Фиктивная БД | Временное хранение данных |
Текущий MCP TypeScript SDK v2 — это стабильная линия SDK, использующая @modelcontextprotocol/server.
Предварительные требования
Перед началом убедитесь, что установлено следующее.
Node.js
Требуется Node.js 20 или новее.
Проверьте установленную версию:
node --versionПример:
v22.9.0Проверьте npm:
npm --versionClaude Desktop
Установите Claude Desktop на свой компьютер.
Claude Desktop будет выступать в роли MCP-клиента и запустит сервер Leave Manager MCP локально.
Установка
1. Клонируйте репозиторий
git clone <YOUR_REPOSITORY_URL>Перейдите в проект:
cd leave-manager-mcp2. Установите зависимости
Выполните:
npm installПроект использует пакет MCP TypeScript server:
npm install @modelcontextprotocol/serverZod используется для проверки входных данных инструментов:
npm install zodДля разработки на TypeScript:
npm install -D typescript tsx @types/nodeОфициальная настройка MCP-сервера в настоящее время использует Node.js 20+, ES-модули, @modelcontextprotocol/server, Zod и tsx.
Структура проекта
Рекомендуемая структура проекта:
leave-manager-mcp/
│
├── src/
│ │
│ ├── index.ts
│ │
│ ├── data/
│ │ └── dummy-db.ts
│ │
│ ├── models/
│ │ └── leave.ts
│ │
│ ├── repositories/
│ │ └── leave-repository.ts
│ │
│ └── tools/
│ └── leave-tools.ts
│
├── dist/
│
├── package.json
├── package-lock.json
├── tsconfig.json
└── README.mdОбязанности
src/index.ts
Создаёт и запускает MCP-сервер.
src/models/leave.ts
Содержит TypeScript-модели/интерфейсы, связанные с сотрудниками и отпусками.
src/data/dummy-db.ts
Содержит временные тестовые данные в памяти.
src/repositories/leave-repository.ts
Предоставляет операции доступа к данным.
src/tools/leave-tools.ts
Регистрирует MCP-инструменты, которые может вызывать Claude.
Конфигурация
package.json
Типовая конфигурация:
{
"name": "leave-manager-mcp",
"version": "1.0.0",
"description": "Leave Manager MCP Server",
"type": "module",
"scripts": {
"dev": "tsx src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
},
"dependencies": {
"@modelcontextprotocol/server": "^2.0.0",
"zod": "^4.0.0"
},
"devDependencies": {
"@types/node": "^24.0.0",
"tsx": "^4.0.0",
"typescript": "^6.0.0"
}
}Версии зависимостей могут отличаться в зависимости от того, когда выполняется
npm install. Всегда предпочитайте версии, сгенерированные npm.
Конфигурация TypeScript
Создайте tsconfig.json:
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"types": ["node"],
"outDir": "dist"
},
"include": [
"src/**/*.ts"
]
}Запись Node types важна для текущих версий TypeScript, поскольку опубликованные определения типов MCP SDK ссылаются на Node API.
Доступные MCP-инструменты
Текущий сервер Leave Manager MCP предоставляет следующие инструменты.
1. get_leave_balance
Возвращает текущий остаток отпуска сотрудника.
Входные данные
{
"employeeId": "EMP001"
}Пример результата
{
"employeeId": "EMP001",
"casual": 8,
"sick": 5,
"earned": 12,
"unpaid": 0
}2. get_leave_history
Возвращает историю отпусков сотрудника.
Входные данные
{
"employeeId": "EMP001"
}Пример результата
[
{
"id": "LR001",
"employeeId": "EMP001",
"leaveType": "CASUAL",
"startDate": "2026-08-20",
"endDate": "2026-08-21",
"reason": "Personal work",
"status": "APPROVED"
}
]3. get_leave_types
Возвращает доступные типы отпусков.
Пример результата
[
{
"type": "CASUAL",
"description": "Casual leave"
},
{
"type": "SICK",
"description": "Sick leave"
},
{
"type": "EARNED",
"description": "Earned leave"
},
{
"type": "UNPAID",
"description": "Unpaid leave"
}
]4. apply_leave
Создаёт новый запрос на отпуск.
Входные данные
{
"employeeId": "EMP001",
"leaveType": "CASUAL",
"startDate": "2026-09-10",
"endDate": "2026-09-11",
"reason": "Family function"
}Пример результата
{
"id": "LR002",
"employeeId": "EMP001",
"leaveType": "CASUAL",
"startDate": "2026-09-10",
"endDate": "2026-09-11",
"reason": "Family function",
"status": "PENDING"
}5. cancel_leave
Отменяет существующий запрос на отпуск.
Входные данные
{
"leaveId": "LR002"
}Пример результата
{
"id": "LR002",
"status": "CANCELLED"
}Запуск MCP-сервера
Во время разработки есть два способа запустить сервер.
Вариант 1: Запуск напрямую с помощью tsx
Рекомендуется во время разработки.
npm run devВнутри это выполняет:
tsx src/index.tsВы должны увидеть:
Leave Manager MCP server running...Процесс продолжит работу, потому что stdio MCP-сервер ожидает клиента для связи.
Остановите сервер с помощью:
Ctrl + CСборка проекта
Перед использованием скомпилированной версии выполните:
npm run buildЭто выполняет:
tscСкомпилированные JavaScript-файлы будут созданы внутри:
dist/Ожидаемая структура:
dist/
├── index.js
├── data/
│ └── dummy-db.js
├── models/
│ └── leave.js
├── repositories/
│ └── leave-repository.js
└── tools/
└── leave-tools.jsЗапуск производственной сборки
После сборки:
npm startЭто выполняет:
node dist/index.jsMCP-сервер запустится с использованием скомпилированного JavaScript.
Тестирование с MCP Inspector
Перед подключением сервера к Claude Desktop рекомендуется протестировать его с помощью MCP Inspector.
MCP Inspector предоставляет локальный пользовательский интерфейс для подключения к MCP-серверу и непосредственного вызова его инструментов.
Запуск Inspector
Из корня проекта:
npx @modelcontextprotocol/inspector npm run devАльтернативно:
npx @modelcontextprotocol/inspector npx tsx src/index.tsInspector предоставит URL-адрес браузера.
Откройте этот URL-адрес в браузере.
Тестирование инструментов в MCP Inspector
После подключения сервера откройте раздел:
ToolsВы должны увидеть:
get_leave_balance
get_leave_history
get_leave_types
apply_leave
cancel_leaveТест get_leave_balance
Выберите:
get_leave_balanceУкажите:
{
"employeeId": "EMP001"
}Ожидаемый ответ:
{
"employeeId": "EMP001",
"casual": 8,
"sick": 5,
"earned": 12,
"unpaid": 0
}Тест get_leave_history
Входные данные:
{
"employeeId": "EMP001"
}Тест get_leave_types
Этот инструмент не требует ввода данных.
Тест apply_leave
Входные данные:
{
"employeeId": "EMP001",
"leaveType": "CASUAL",
"startDate": "2026-09-10",
"endDate": "2026-09-11",
"reason": "Family function"
}Тест cancel_leave
Входные данные:
{
"leaveId": "LR002"
}Подключение к Claude Desktop
После того как сервер корректно работает в MCP Inspector, подключите его к Claude Desktop.
MCP-сервер следует настроить как локальный stdio-сервер, поскольку Claude Desktop запускает процесс и общается через stdin/stdout.
1. Соберите проект
Сначала выполните:
npm run buildУбедитесь, что этот файл существует:
dist/index.js2. Получите абсолютный путь к проекту
Из корня проекта:
pwdПример:
/Users/ashish/projects/leave-manager-mcpСледовательно, путь к вашему серверу будет:
/Users/ashish/projects/leave-manager-mcp/dist/index.jsИспользуйте абсолютный путь в конфигурации Claude Desktop.
Конфигурация Claude Desktop
Добавьте MCP-сервер Leave Manager в конфигурацию MCP в Claude Desktop.
Пример:
{
"mcpServers": {
"leave-manager": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/leave-manager-mcp/dist/index.js"
]
}
}
}Например, на macOS:
{
"mcpServers": {
"leave-manager": {
"command": "node",
"args": [
"/Users/ashish/projects/leave-manager-mcp/dist/index.js"
]
}
}
}Замените путь на фактический абсолютный путь на вашем компьютере.
Важно: перезапустите Claude Desktop
После изменения конфигурации MCP:
Сохраните конфигурацию.
Полностью закройте Claude Desktop.
Снова запустите Claude Desktop.
Откройте новый чат.
Проверьте доступные MCP-инструменты.
Вы должны увидеть сервер Leave Manager и его инструменты.
Тестирование Leave Manager с Claude
После подключения вам не нужно вручную вызывать MCP-инструменты.
Вы можете просто задавать Claude вопросы на естественном языке.
Пример 1 — остаток отпуска
Спросите:
How many leaves does EMP001 have?Claude должен использовать:
get_leave_balanceс:
{
"employeeId": "EMP001"
}Пример 2 — история отпусков
Спросите:
Show me the leave history of EMP001.Claude должен использовать:
get_leave_historyПример 3 — доступные типы отпусков
Спросите:
What types of leaves are available?Claude должен использовать:
get_leave_typesПример 4 — подача заявки на отпуск
Спросите:
Apply casual leave for EMP001 from September 10 to September 11 because of a family function.Claude должен использовать:
apply_leaveс соответствующими параметрами.
Пример 5 — отмена отпуска
Спросите:
Cancel leave request LR002.Claude должен использовать:
cancel_leaveФиктивная база данных
Текущая реализация использует базу данных в памяти.
Пример:
export const employees = [
{
id: "EMP001",
name: "Ashish Kushwaha",
email: "ashish@example.com",
department: "Engineering"
}
];Остаток отпуска:
export const leaveBalances = [
{
employeeId: "EMP001",
casual: 8,
sick: 5,
earned: 12,
unpaid: 0
}
];Запросы на отпуск:
export const leaveRequests = [
{
id: "LR001",
employeeId: "EMP001",
leaveType: "CASUAL",
startDate: "2026-08-20",
endDate: "2026-08-21",
reason: "Personal work",
status: "APPROVED",
createdAt: "2026-08-10"
}
];Важное ограничение фиктивной БД
Текущая база данных хранится в памяти приложения.
Поэтому:
Server starts
↓
Dummy data loaded
↓
Apply leave
↓
New request added
↓
Server stops
↓
Data is lostЭто ожидаемо.
Фиктивная база данных предназначена только для разработки и тестирования MCP.
Рабочий процесс разработки
Рекомендуемый рабочий процесс разработки:
1. Modify TypeScript
↓
2. Run npm run build
↓
3. Run MCP Inspector
↓
4. Test MCP tools
↓
5. Fix issues
↓
6. Test with Claude Desktop
↓
7. Commit changesВо время разработки вы также можете использовать:
npm run devвместо сборки после каждого изменения.
Ведение журнала
Поскольку сервер использует stdio, не используйте console.log() для обычного ведения журнала сервера.
Избегайте:
console.log("Server started");Используйте:
console.error("Server started");Причина в том, что stdout используется MCP для протокольного общения. Запись обычных журналов в stdout может повредить поток JSON-RPC/MCP.
Устранение неполадок
Проблема: Cannot find module
Выполните:
rm -rf node_modules
rm -f package-lock.json
npm installЗатем:
npm run buildПроблема: ошибка сборки TypeScript
Выполните:
npx tsc --noEmitЭто покажет ошибки TypeScript без создания файлов.
Проблема: dist/index.js не существует
Выполните:
npm run buildЗатем проверьте:
ls distПроблема: Claude Desktop не показывает MCP-сервер
Проверьте:
Конфигурация MCP является допустимым JSON.
Путь к
dist/index.jsявляется абсолютным.npm run buildзавершился успешно.dist/index.jsсуществует.Node.js установлен.
Claude Desktop был полностью перезапущен.
MCP-сервер работает в MCP Inspector.
Проблема: MCP Inspector не может подключиться
Сначала выполните:
npm run devЕсли сервер запускается успешно, остановите его, а затем выполните:
npx @modelcontextprotocol/inspector npm run devПроверьте терминал на наличие ошибок.
Проблема: сервер запускается, но инструменты не видны
Проверьте:
src/index.tsи убедитесь, что ваши инструменты зарегистрированы:
registerLeaveTools(
server,
repository
);Также убедитесь, что вызывается serveStdio():
void serveStdio(createServer);Проблема: ошибки протокола JSON-RPC/MCP
Проверьте код на наличие:
console.log(...)Замените обычное ведение журнала на:
console.error(...)stdout должен оставаться доступным для связи по протоколу MCP.
Будущие улучшения
Текущая версия — это прототип. Рекомендуются следующие улучшения.
База данных
Замените фиктивную базу данных на:
PostgreSQL
MySQL
MongoDBили существующий внутренний API управления отпусками.
Аутентификация
Добавьте аутентификацию сотрудников, чтобы пользователю не приходилось вводить:
employeeIdвручную.
Будущая архитектура:
Claude
↓
MCP Server
↓
Authentication
↓
Employee Context
↓
Leave ServiceПроверка отпусков
Добавьте бизнес-правила:
Проверка дат отпуска
Проверка остатка отпуска
Предотвращение пересекающихся отпусков
Проверка корпоративных праздников
Проверка выходных
Проверка минимальной/максимальной продолжительности отпуска
Проверка статуса сотрудника
Проверка типа отпуска
Запрет отмены после утверждения, если применимо
Утверждение руководителем
Добавьте такие инструменты, как:
get_pending_leave_requests
approve_leave
reject_leaveКомандный календарь
Добавьте:
get_team_leave_calendarПример запроса пользователя:
Who from my team is on leave next week?Уведомления
Интегрируйтесь с:
Email
Slack
Microsoft Teamsдля уведомления сотрудников и руководителей.
Рекомендуемая производственная архитектура
Долгосрочная архитектура должна отделять MCP от бизнес-логики:
Claude Desktop
│
│ MCP
▼
┌───────────────────┐
│ MCP Server │
│ │
│ Tool Definitions │
│ Input Validation │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Leave Service │
│ │
│ Business Rules │
│ Validation │
│ Authorization │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Leave Repository │
└─────────┬─────────┘
│
┌────────┴────────┐
▼ ▼
Internal Leave API DatabaseЭто позволит заменить фиктивную базу данных без изменения инструментов, доступных Claude.
Вопросы безопасности
Текущий проект предназначен только для разработки/тестирования.
Перед использованием с реальными данными сотрудников:
Добавьте аутентификацию.
Добавьте авторизацию.
Не доверяйте
employeeId, предоставленному моделью.Проверяйте все входные данные инструментов.
Защищайте информацию о сотрудниках.
Избегайте раскрытия ненужных данных о сотрудниках.
Добавьте журналирование аудита.
Реализуйте управление доступом на основе ролей.
Защищайте операции, доступные только менеджерам.
Добавьте ограничение частоты запросов, где это применимо.
Не храните секреты в исходном коде.
Используйте переменные окружения для учётных данных.
Обеспечьте безопасность соединений с внутренними API/базами данных.
MCP-сервер должен обеспечивать соблюдение бизнес-разрешений, а не полагаться на Claude при принятии решений по безопасности.
Переменные окружения
При подключении к реальным сервисам используйте переменные окружения.
Пример .env:
LEAVE_API_URL=https://internal.example.com/api
LEAVE_API_KEY=your-api-keyНе коммитьте .env в Git.
Добавьте:
.envв .gitignore.
Git Ignore
Рекомендуемый .gitignore:
node_modules/
dist/
.env
.DS_Store
*.logПолезные команды
Установка зависимостей
npm installРазработка
npm run devСборка
npm run buildЗапуск скомпилированного сервера
npm startПроверка типов
npx tsc --noEmitЗапуск MCP Inspector
npx @modelcontextprotocol/inspector npm run devПроверка версии Node.js
node --versionПроверка версии npm
npm --versionКонтрольный список разработки MCP
Прежде чем считать MCP-сервер готовым к внутреннему тестированию:
Установлен Node.js 20+
Установлены зависимости
Сборка TypeScript проходит успешно
Настроена тестовая база данных
MCP-сервер запускается успешно
MCP Inspector подключается успешно
get_leave_balanceпротестированget_leave_historyпротестированget_leave_typesпротестированapply_leaveпротестированcancel_leaveпротестированДобавлена конфигурация Claude Desktop
Claude Desktop перезапущен
Инструменты Leave Manager видны в Claude
Протестированы запросы на естественном языке
Протестированы сценарии ошибок
Примеры пользовательских запросов
После подключения к Claude Desktop пользователи смогут задавать такие вопросы, как:
How many casual leaves do I have?Show my leave history.What leave types are available?Apply casual leave from September 10 to September 11.Cancel my leave request LR002.Будущие примеры:
Do I have enough leave for next Monday?Who from my team is on leave next week?Show all pending leave requests.Approve Rahul's leave request.Ресурсы MCP
Официальный MCP TypeScript SDK:
https://ts.sdk.modelcontextprotocol.io/v2/
Официальное руководство по первому серверу:
https://ts.sdk.modelcontextprotocol.io/v2/get-started/first-server
Официальный API сервера:
https://ts.sdk.modelcontextprotocol.io/v2/api/@modelcontextprotocol/server/
Проект в настоящее время следует архитектуре MCP TypeScript SDK v2 и современной линии протокола 2026-07-28.
Лицензия
Этот проект предназначен для внутренней разработки и тестирования.
Добавьте сюда лицензию и политику использования вашей организации.
Сопровождающий
Ashish Kushwaha
Leave Manager MCP Server TypeScript + MCP + Claude Desktop
Быстрый старт
Для опытных разработчиков полную настройку можно кратко описать так:
# Clone
git clone <YOUR_REPOSITORY_URL>
# Enter project
cd leave-manager-mcp
# Install
npm install
# Build
npm run build
# Run
npm start
# Development
npm run dev
# MCP Inspector
npx @modelcontextprotocol/inspector npm run devЗатем настройте Claude Desktop для запуска:
dist/index.jsиспользуя:
{
"mcpServers": {
"leave-manager": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/leave-manager-mcp/dist/index.js"
]
}
}
}Перезапустите Claude Desktop и начните тестировать инструменты Leave Manager MCP.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
GibsonAI MCP server: manage your databases with natural language
Hosted MCP server for business-day math, deadline planning, meeting overlap, and SLA calculations.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
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/developer-ashish31/leaveManagerMCP-JS'
If you have feedback or need assistance with the MCP directory API, please join our Discord server