Skip to main content
Glama
RohitKumarPattanayak

leave-manager-mcp-server

README.md
# 📅 Leave Manager MCP Server

A modern model context protocol (MCP) server built with **FastMCP** in Python for managing employee leave balances and history. It allows LLMs to query leave balances, submit leave applications, and view leave history for employees.

---

## 📂 Project Structure

To maintain clean modularity and scale features independently, tools and resources are separated:
- [server.py](file:///d:/practice/Mcp-server/first-mcp-server/server.py): Instantiates the `FastMCP` server object.
- [tools/](file:///d:/practice/Mcp-server/first-mcp-server/tools): Package directory holding all server tools.
  - [leave_tools.py](file:///d:/practice/Mcp-server/first-mcp-server/tools/leave_tools.py): Defines MCP tools (`get_leave_balance`, `apply_leave`, `get_leave_history`).
- [resources/](file:///d:/practice/Mcp-server/first-mcp-server/resources): Package directory holding all server resources.
  - [greeting_resources.py](file:///d:/practice/Mcp-server/first-mcp-server/resources/greeting_resources.py): Defines MCP resources.
- [main.py](file:///d:/practice/Mcp-server/first-mcp-server/main.py): Entrypoint file which registers the tools and resources, and launches the server.

---

## 🛠️ Features & API Surface

This MCP server exposes the following tools and resources to LLMs:

### Tools
- **`get_leave_balance(employee_id: str)`**: Checks how many leave days are remaining for the given employee (e.g., `"E001"`).
- **`apply_leave(employee_id: str, leave_dates: list[str])`**: Submits a leave request for specific dates (e.g., `["2025-04-17", "2025-05-01"]`). Validates leave balance and updates the mock database.
- **`get_leave_history(employee_id: str)`**: Fetches the log of past leave dates for the employee.

### Resources
- **`greeting://{name}`**: A personalized greeting resource that provides instructions on how to use the server.

---

## 📋 Prerequisites

Before setting up the project, make sure you have the following installed:
1. **Python** (version `3.13` or higher)
2. [**uv**](https://github.com/astral-sh/uv) - An extremely fast Python package manager and resolver.
   - **Windows (PowerShell)**:
     ```powershell
     powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
     ```
   - **macOS/Linux**:
     ```bash
     curl -LsSf https://astral.sh/uv/install.sh | sh
     ```
3. **Claude Desktop** (optional, for testing the desktop application integration)

---

## 🚀 Setup & Usage

### 1. Install Dependencies
The project uses `uv` to manage dependencies. Run the following command to add and install required dependencies:
```bash
uv add mcp[cli]
```

### 2. Run the MCP Server
You have three ways to run and test the server:

#### A. Basic Run
To run the server directly via standard Python (for testing basic initialization):
```bash
uv run python main.py
```

#### B. Development & Local Testing (MCP Inspector)
The recommended way to test and debug your tools locally is using the **MCP Inspector**:
```bash
uv run mcp dev main.py
```
This command starts the server and spins up the web-based MCP Inspector. You can use it to view, call, and debug your tools/resources in a browser UI.

#### C. Installation into Claude Desktop
To integrate this server directly with your **Claude Desktop** client:
1. Ensure Claude Desktop is installed and you've switched it to **Developer Mode**.
2. Run the following installation helper command:
```bash
uv run mcp install main.py
```
   *This automatically locates your Claude Desktop MCP configuration file and adds this server setup.*
3. Open or restart **Claude Desktop**.
4. Click the **`+`** (plus) icon/selector in the chat window. You should see **LeaveManager** listed as an active connector. Claude will now query the server automatically to answer your leave management questions!

---

## 📊 Mock Database

The project contains pre-configured mock data for employees (`E001` to `E010`) located in [employeeLeaveData.py](file:///d:/practice/Mcp-server/first-mcp-server/mock_data/employeeLeaveData.py).

Example Employee records:
- **`E001`**: 18 leave days remaining.
- **`E002`**: 20 leave days remaining.
- **`E003`**: 16 leave days remaining.

TDQS

B3.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct aspect of leave management: balance inquiry, applying for leave, and viewing history. There is no overlap in purpose or output.

Naming Consistency5/5

All tool names follow a clear verb_noun pattern: get_leave_balance, apply_leave, get_leave_history. The naming is predictable and consistently structured.

Tool Count5/5

With 3 tools, the server is well-scoped for a simple leave management use case. Each tool serves a clear need without unnecessary bloat.

Completeness3/5

The tool set covers the basic employee-facing actions (check balance, apply, view history), but it lacks an update or cancellation operation for leave requests. This is a notable gap in the lifecycle.

Maintenance

ActivityStale
ResponsivenessNo issues