Skip to main content
Glama
developer-ashish31

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_balance

MCP サーバーはリクエストを処理し、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.0

npm を確認します:

npm --version

Claude Desktop

お使いのマシンに Claude Desktop をインストールします。

Claude Desktop は MCP クライアントとして機能し、Leave Manager MCP サーバーをローカルで起動します。


インストール

1. リポジトリのクローン

git clone <YOUR_REPOSITORY_URL>

プロジェクトに移動します:

cd leave-manager-mcp

2. 依存関係のインストール

次のコマンドを実行します:

npm install

このプロジェクトでは、MCP TypeScript サーバーパッケージを使用します:

npm install @modelcontextprotocol/server

Zod はツールの入力を検証するために使用されます:

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

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.js

MCP サーバーはコンパイル済みの 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.ts

Inspector はブラウザの 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.js

2. プロジェクトの絶対パスを取得する

プロジェクトのルートから:

pwd

例:

/Users/ashish/projects/leave-manager-mcp

したがって、サーバーのパスは次のようになります:

/Users/ashish/projects/leave-manager-mcp/dist/index.js

Claude 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 設定を変更した後:

  1. 設定を保存します。

  2. Claude Desktop を完全に終了します。

  3. Claude Desktop を再度起動します。

  4. 新しい会話を開きます。

  5. 利用可能な 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 サーバーが表示されない

確認事項:

  1. MCP 設定が有効な JSON であること。

  2. dist/index.js へのパスが絶対パスであること。

  3. npm run build が正常に完了していること。

  4. dist/index.js が存在すること。

  5. Node.js がインストールされていること。

  6. Claude Desktop が完全に再起動されていること。

  7. 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 --noEmit

MCP Inspector の実行

npx @modelcontextprotocol/inspector npm run dev

Node バージョンの確認

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 ツールのテストを開始してください。

-
license - not tested
-
quality - not tested
C
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.

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

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/developer-ashish31/leaveManagerMCP-JS'

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