Leave Manager MCP Server
Leave Manager MCP Server
Claude Desktop などの AI クライアントを介して従業員の休暇関連の操作を管理するための、TypeScript で構築されたカスタム Model Context Protocol (MCP) サーバーです。
このプロジェクトは現在 社内での開発およびテスト を目的としており、本番データベースの代わりに ダミー / インメモリデータベース を使用しています。
アーキテクチャは、MCP ツールのインターフェースを変更することなく、ダミーデータベースを後で実際のデータベースや社内の休暇管理 API に置き換えられるように設計されています。
目次
概要
Leave Manager MCP Server は、休暇管理機能を MCP ツールとして公開し、AI クライアントが利用できるようにします。
たとえば、ユーザーは 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 による実装
stdio ベースの MCP トランスポート
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() を提供しています。
技術スタック
Technology | 目的 |
TypeScript | アプリケーション開発 |
Node.js | ランタイム |
npm | 依存関係の管理 |
MCP TypeScript SDK | MCP サーバーの実装 |
Zod | 入力検証 |
Claude Desktop | MCP クライアント |
MCP Inspector | ローカルでの MCP テスト |
Dummy DB | 一時的なデータ保存 |
現在の MCP TypeScript SDK v2 は安定版の SDK ラインであり、@modelcontextprotocol/server を使用しています。
前提条件
開始する前に、以下がインストールされていることを確認してください。
Node.js
Node.js 20 以降 が必要です。
インストールされているバージョンを確認します:
node --version例:
v22.9.0npm を確認します:
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 サーバーパッケージを使用します:
npm install @modelcontextprotocol/serverZod はツールの入力を検証するために使用されます:
npm install zodTypeScript 開発用:
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
Claude が呼び出せる MCP ツールを登録します。
設定
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 サーバーの実行
開発中にサーバーを実行する方法は 2 つあります。
オプション 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 サーバーに接続してツールを直接呼び出すためのローカル UI を提供します。
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_leaveget_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.jsClaude Desktop の設定では 絶対パス を使用します。
Claude Desktop の設定
Leave Manager MCP サーバーを Claude Desktop の MCP 設定に追加します。
例:
{
"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 サーバーとそのツールが表示されるはずです。
Claude で Leave Manager をテストする
接続後、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"
}
];ダミー DB の重要な制限事項
現在のデータベースはアプリケーションのメモリ内に保存されます。
したがって:
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 の無視設定
推奨される .gitignore:
node_modules/
dist/
.env
.DS_Store
*.log便利なコマンド
依存関係のインストール
npm install開発
npm run devビルド
npm run buildコンパイル済みサーバーの実行
npm start型チェック
npx tsc --noEmitMCP Inspector の実行
npx @modelcontextprotocol/inspector npm run devNode バージョンの確認
node --versionnpm バージョンの確認
npm --versionMCP 開発チェックリスト
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