Employee Leave Manager MCP
README.md
# Employee Leave Manager — MCP
An MCP server that exposes employee leave management (balances, applying for
leave, history, etc.) as tools that Claude Desktop (or any MCP client) can
call. Data is stored in a local SQLite database.
## Prerequisites
- [uv](https://docs.astral.sh/uv/getting-started/installation/) — Python dependency manager
- [Claude Desktop](https://claude.ai/download)
## Setup
Clone the repo:
```bash
git clone https://github.com/TharushiDinushika/Employee-Leave-Manager-MCP.git
cd Employee-Leave-Manager-MCP
```
Create the project and install dependencies:
```bash
uv sync
```
Activate Virtual Environment
```bash
.venv\Scripts\activate
```
## Initialize the database
Creates the SQLite schema and seeds it with sample employees, leave types,
and balances:
```bash
python init_db.py
```
Options:
```bash
python init_db.py --reset # drop all tables and reseed from scratch
python init_db.py --no-seed # create schema only, skip sample data
```
## Run the server
```bash
uv run mcp dev server.py
```
This opens the MCP Inspector, where you can list and test the available
tools directly before connecting a client.
## Connect to Claude Desktop
Open Claude Desktop and check whether the connector appears automatically.

If it doesn't show up, add it manually:
1. Go to **File → Settings → Developer → Edit Config**
2. Add the following block to the config file (update the path to match
where you cloned the project):
```json
{
"mcpServers": {
"EmployeeLeaveManager": {
"command": "uv",
"args": [
"--directory",
"C:\\path\\to\\Employee-Leave-Manager-MCP",
"run",
"server.py"
]
}
}
}
```
3. Restart Claude Desktop.
4. Open a new chat and try asking Claude about employee leave — e.g. *"What's
E001's leave balance?"*
## Functionality
The server exposes the following tools:
| Tool | Description |
|---|---|
| `get_leave_balance(employee_id, leave_type)` | Check remaining leave balance for an employee. Returns balance for a specific leave type, or all types if omitted. |
| `apply_leave(employee_id, leave_dates, leave_type="annual", reason)` | Apply for leave on one or more specific dates. Validates date format, rejects past or duplicate dates, and checks balance before deducting. |
| `cancel_leave(employee_id, leave_dates)` | Cancel previously approved leave and refund the balance. |
| `get_leave_history(employee_id, leave_type)` | View an employee's leave history, optionally filtered by leave type. |
| `get_leave_types()` | List all available leave types (annual, sick, casual, unpaid) and their default annual allotment. |
| `list_employees(department)` | List all employees, optionally filtered by department. |
| `add_employee(employee_id, name, department, email, manager_id)` | Onboard a new employee with default leave balances. |
| `get_employee_details(employee_id)` | Get an employee's profile (name, department, email, manager). |
It also exposes two resources:
- `greeting://{name}` — a personalized greeting
- `employee://{employee_id}/summary` — a quick profile + balance summary for an employee
### Data model
Data lives in a local SQLite database (`leave_manager.db`), with four tables:
`employees`, `leave_types`, `leave_balances`, and `leave_requests`. Schema
creation and seeding are handled separately by `init_db.py`, so the server
itself never modifies the schema — it just reads/writes data.
## Project structure
```
mcp-server/
├── server.py # MCP server: tools, resources, DB queries
├── init_db.py # Database schema creation + seeding (run once)
├── leave_manager.db # SQLite database (created after running init_db.py)
```
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues