Skip to main content
Glama
chalamalasettichamundeswari

MCP Leave Manager Server

README.md
# MCP Leave Manager Server

This project demonstrates a Model Context Protocol (MCP) server for employee leave management using SQLite database storage, featuring seamless integration with Claude Desktop for natural language interactions and comprehensive leave tracking.

## šŸš€ Features

- **Employee Management**: Add, view, and search employees with fuzzy name matching
- **Leave Request System**: Submit, approve, and track leave requests (annual, sick, personal, emergency)
- **Leave Balance Tracking**: Monitor annual and sick leave balances with automatic deduction
- **MCP Integration**: Seamless integration with Claude Desktop for natural language interactions
- **Database Persistence**: SQLite database with sample Indian employee data
- **Type Safety**: Full type hints and dataclasses for robust code
- **Fuzzy Search**: Smart employee name matching for typo tolerance

## šŸ“„ How It Works

1. **Database Initialization**: Creates SQLite tables and populates with sample data
2. **MCP Resources**: Exposes read-only data endpoints for Claude Desktop
3. **MCP Tools**: Provides action-based functions for data modification
4. **Natural Language Interface**: Claude Desktop translates user prompts to function calls
5. **Data Validation**: Ensures data integrity with employee and leave type validation
6. **Automatic Balance Updates**: Deducts leave days from employee balances upon approval

## šŸ› ļø Usage

### Install dependencies:
```bash
pip install -r requirements.txt
# If you need to manually install missing packages:
pip install fastmcp mcp typing-extensions
```

### Run the MCP server:
```bash
python server.py
# or
python -m mcp_leave_manager_server.server
```

### Configure Claude Desktop:
Add to your Claude Desktop MCP configuration:
```json
{
  "mcpServers": {
    "leave-manager": {
      "command": "python",
      "args": ["/path/to/server.py"]
    }
  }
}
```

### Sample Prompts in Claude Desktop:
```
- "Show me all employees"
- "Get leave requests for Rajesh Kumar"
- "Submit a leave request for EMP001 from 2024-10-01 to 2024-10-05 for vacation"
- "Approve leave request REQ003"
- "Check leave balance for Anita Patel"
- "Show pending leave requests"
- "Add new employee named Rohit Sharma in Engineering"
```

## šŸ› ļø Tech Stack

- **Python 3.13+** with FastMCP framework
- **SQLite** for data persistence
- **Model Context Protocol (MCP)** for AI integration
- **Type hints** with dataclasses for robust code
- **difflib** for fuzzy name matching

## šŸ“Š MCP Resources & Tools

### Resources (Read-only data):
- `employees://all` - Employee directory with leave balances
- `employee://{employee_id}` - Individual employee information
- `leave-requests://all` - All leave requests in the system
- `leave-requests://employee/{employee_id}` - Employee-specific requests
- `leave-requests://status/{status}` - Requests by status (pending, approved, denied)

### Tools (Actions):
- `submit_leave_request()` - Submit new leave request
- `approve_leave_request()` - Approve pending requests
- `check_leave_balance()` - Check employee leave balances
- `get_pending_approvals()` - Get all pending requests
- `get_database_stats()` - Get system statistics
- `add_employee()` - Add new employees with duplicate checking

## šŸ“‚ Project Structure

```
mcp_leave_manager_server/
ā”œā”€ā”€ server.py              # Main MCP server implementation
ā”œā”€ā”€ main.py                # Entry point
ā”œā”€ā”€ requirements.txt       # Python dependencies
ā”œā”€ā”€ pyproject.toml        # Project configuration
ā”œā”€ā”€ leave_manager.db      # SQLite database (auto-created)
ā”œā”€ā”€ README.md             # This file
└── __pycache__/          # Python cache files
```

## šŸ’¾ Database Schema

### Employees Table
```sql
CREATE TABLE employees (
    employee_id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    department TEXT NOT NULL,
    manager TEXT NOT NULL,
    annual_leave_balance INTEGER NOT NULL,
    sick_leave_balance INTEGER NOT NULL
);
```

### Leave Requests Table
```sql
CREATE TABLE leave_requests (
    request_id TEXT PRIMARY KEY,
    employee_id TEXT NOT NULL,
    employee_name TEXT NOT NULL,
    start_date TEXT NOT NULL,
    end_date TEXT NOT NULL,
    leave_type TEXT NOT NULL,
    status TEXT NOT NULL,
    reason TEXT NOT NULL,
    days_requested INTEGER NOT NULL,
    submitted_date TEXT NOT NULL,
    approved_by TEXT,
    FOREIGN KEY (employee_id) REFERENCES employees (employee_id)
);
```

## šŸš€ Progress

- āœ… Environment setup and dependencies configured
- āœ… SQLite database schema and sample data implemented
- āœ… MCP resources for data access created
- āœ… MCP tools for data modification implemented
- āœ… Employee and leave request management verified
- āœ… Fuzzy name matching and data validation added
- āœ… Claude Desktop integration tested

## šŸŽÆ Use Cases

Perfect for:
- **HR Teams**: Manage employee leave requests efficiently
- **Managers**: Approve/deny requests and track team availability
- **Employees**: Submit leave requests and check balances
- **AI Integration**: Natural language interface for leave management

## šŸ”® Future Enhancements

- [ ] Email notifications for leave approvals
- [ ] Calendar integration for leave scheduling
- [ ] Department-wise leave analytics
- [ ] Leave policy enforcement rules
- [ ] REST API endpoints
- [ ] Web dashboard interface

## āœļø Author

**Chamundeswari** – Software Engineer exploring GenAI, MCP servers, and AI-powered business applications.

---

*Built with ā¤ļø for seamless AI-powered leave management*