Employee Leave Management MCP Server
Connects to a Supabase PostgreSQL database to manage employee leave data, including employees, leave types, balances, and requests, enabling tools for checking balances, applying for leave, approvals, and history.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Employee Leave Management MCP ServerHow many annual leave days do I have left?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Employee Leave Management ā MCP Server
š Check out GenAI and System Design videos
An MCP (Model Context Protocol) server built with FastMCP that connects to a Supabase PostgreSQL database and lets Claude Desktop manage employee leave ā checking balances, applying for leave, approvals, history, and more.
Architecture
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Claude Desktop (MCP Host) ā
ā ā
ā "How many leaves does EMP001 have left this year?" ā
ā ā
ā Claude āāāŗ get_leave_balance("EMP001", 2025) ā
ā āāā [{Annual: 13 remaining}, {Sick: 8}, ā¦] ā
ā ā
ā Claude: "Aditya has 13 Annual, 8 Sick, and 5 Casual ā
ā leave days remaining for 2025." ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā stdio (subprocess)
ā¼
āāāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāāāā
ā server.py ā ā Supabase (Postgres) ā
ā FastMCP + tools āāāāāāāāāŗā employees ā
ā ā REST ā leave_types ā
ā ā API ā leave_balances ā
āāāāāāāāāāāāāāāāāāāāāāā ā leave_requests ā
āāāāāāāāāāāāāāāāāāāāāāāāRelated MCP server: leave-management
Exposed Tools
Tool | What it does |
| All leave categories (Annual, Sick, Casual, ā¦) with default allocation |
| Active employees, optional department filter |
| Look up one employee by code or email |
| Remaining / used / total days by employee & year |
| Submit a leave request (validates balance & date overlaps) |
| All requests for an employee, filterable by year/status |
| Full details of a single request by ID |
| Employee withdraws a pending request |
| Manager approves ā auto-deducts days from balance |
| Manager rejects with optional note |
Resources
leave://schemaā full schema overview attachable as context
Prompts
leave_assistantā structured conversation starter for the HR assistant
Quick Start
Step 1 ā Create a Supabase project
Go to https://supabase.com and create a free project.
After the project is ready, go to Project Settings ā API and copy:
Project URL ā
SUPABASE_URLProject API Keys ā
anonpublic key (orservice_rolekey for full access) āSUPABASE_KEY
Step 2 ā Set up the database
In the Supabase Dashboard, open the SQL Editor ā New Query.
Paste the full contents of
setup_database.sqland click Run.
This creates four tables (employees, leave_types, leave_balances, leave_requests) plus a convenience view (leave_balances_view) and seeds 8 employees with realistic 2025 balances.
Step 3 ā Configure environment variables
cd demo_projects/mcp
cp .env.example .env
# Edit .env with your Supabase URL and Key.env contents:
SUPABASE_URL=https://your-project-ref.supabase.co
SUPABASE_KEY=your-anon-or-service-role-keyStep 4 ā Install dependencies
uv syncStep 5 ā Test interactively (without Claude Desktop)
#uv run fastmcp dev server.py
uv run python server.py
# Opens MCP Inspector at http://localhost:6274Connect to Claude Desktop
Locate the config file
OS | Path |
macOS |
|
Windows |
|
Linux |
|
Add the server block
{
"mcpServers": {
"employee-leave": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/project_root",
"run",
"python",
"server.py"
]
}
}
}Important: Use the absolute path in
--directory. You can get it by runningpwdin the project folder.
Note: You may need to provide the full path to the
uvexecutable in thecommandfield. Runwhich uv(macOS/Linux) orwhere uv(Windows) to find it.
Restart Claude Desktop
Quit and reopen Claude Desktop. Click the + ("Add files, connectors, and more") icon in the chat input area, then hover over Connectors ā you should see employee-leave listed there.
Note: Claude for Desktop is not yet available on Linux. Linux users can use the MCP Inspector or build a custom MCP client instead.
Connect to VS Code (GitHub Copilot)
VS Code supports MCP servers natively through GitHub Copilot agent mode. The config format is different from Claude Desktop.
Locate / create the config file
Scope | File |
Workspace (team-shared) |
|
User profile (all workspaces) | Run |
Add the server block
Create or edit .vscode/mcp.json:
{
"servers": {
"employee-leave": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/project_root",
"run",
"python",
"server.py"
]
}
}
}Note: VS Code uses
"servers"(not"mcpServers") and requires the"type": "stdio"field. Use the absolute path in--directory.
Tip: You may need to provide the full path to
uvin"command". Runwhich uvto find it.
Start the server
Open the Command Palette (
Ctrl+Shift+P) and run MCP: List Servers.Select
employee-leaveand choose Start.When prompted, confirm you trust the server.
Open the Chat view (
Ctrl+Alt+I), switch to Agent mode, and theemployee-leavetools will be available.
Verify tools are loaded
In the Chat view, select Configure Tools (or the tools icon) to see all tools provided by the employee-leave server and toggle individual tools on/off.
Troubleshooting
If the server fails to start, run MCP: List Servers ā select the server ā Show Output to view logs.
Example Conversations with Claude
You: How many leaves does Aditya have left for 2025?
Claude: [calls get_employee_info("EMP001"), then get_leave_balance("EMP001", 2025)]
Aditya Sharma (EMP001) has:
⢠Annual leave : 13 days remaining (5 used of 18)
⢠Sick leave : 8 days remaining (2 used of 10)
⢠Casual leave : 5 days remaining (1 used of 6)You: Apply for annual leave for EMP002 from 10th July to 18th July 2025.
Claude: [calls apply_for_leave("EMP002", "Annual", "2025-07-10", "2025-07-18")]
Leave request submitted!
⢠Employee : Priya Nair (EMP002)
⢠Type : Annual
⢠Dates : 10 Jul ā 18 Jul 2025 (7 business days)
⢠Status : Pending
⢠Remaining after approval: 8 Annual daysYou: Approve request ID 3.
Claude: [calls approve_leave_request(3)]
Leave request #3 has been approved. 7 days deducted from Priya's Annual balance.Database Schema
employees -- employee_code, full_name, email, department, position
leave_types -- name, description, default_days
leave_balances -- one row per (employee, leave_type, year)
leave_balances_view -- denormalised view with remaining_days computed
leave_requests -- status: pending | approved | rejected | cancelledProject Files
demo_projects/mcp/
āāā server.py ā FastMCP server (all tools, resources, prompts)
āāā setup_database.sql ā Run once in Supabase SQL Editor
āāā pyproject.toml ā Dependencies (fastmcp, supabase, python-dotenv)
āāā .env.example ā Copy to .env and fill in credentials
āāā README.md ā This fileAvailable Tools
10 toolsapply_for_leaveA
Submit a leave request on behalf of an employee.
Args: identifier: Employee code (e.g. "EMP001") or email. leave_type: Type of leave ā use list_leave_types() for valid values (e.g. "Annual", "Sick", "Casual"). start_date: First day of leave in YYYY-MM-DD format. end_date: Last day of leave in YYYY-MM-DD format. reason: Optional reason for the leave request.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| end_date | Yes | ||
| identifier | Yes | ||
| leave_type | Yes | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as required authorization, side effects (e.g., triggers approval workflow), or idempotency. For a submission tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a leading sentence and concise bullet points for each parameter. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, no enums) and the existence of an output schema, the description covers parameter details but lacks behavioral context (e.g., what happens after submission). It is minimally sufficient but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description compensates for 0% schema coverage by explaining each parameter's meaning and format. It gives examples for identifier (EMP001/email), references list_leave_types() for leave_type, and specifies YYYY-MM-DD format for dates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Submit a leave request' which is a specific verb and resource. It distinguishes from sibling tools like approve_leave_request, cancel_leave_request, etc., by focusing on submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use: to submit a leave request. It also directs users to list_leave_types() for valid leave_type values. However, it does not explicitly mention when not to use it or alternatives for other actions like approval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_leave_requestA
Approve a pending leave request and deduct days from the employee's balance. Call this only when acting as an HR manager or team lead.
Args: request_id: Numeric ID of the leave request to approve. manager_note: Optional note from the manager (visible to the employee).
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| manager_note | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool deducts days from balance (mutation) and that the manager_note is visible to the employee. With no annotations provided, the description carries the full burden. It could mention reversibility or error cases, but the key side effects are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: two sentences plus bulleted parameter explanations. It front-loads the main action and role requirement, with no wasted words. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers the role, effect, and parameters adequately. It could be more complete by mentioning potential error conditions (e.g., already approved, insufficient balance), but the core functionality is well-described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It fully explains both parameters: 'request_id: Numeric ID of the leave request to approve' and 'manager_note: Optional note from the manager (visible to the employee).' This adds significant value beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Approve a pending leave request and deduct days from the employee's balance.' It specifies the action (approve), the resource (leave request), and the effect (deduct days), distinguishing it from siblings like reject_leave_request or cancel_leave_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit role context: 'Call this only when acting as an HR manager or team lead.' While it does not explicitly exclude other scenarios or name alternatives, the role guidance is clear and helpful for an AI agent to decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_leave_requestA
Cancel a pending leave request. Only the employee who applied can cancel.
Args: request_id: Numeric ID of the leave request to cancel. identifier: Employee code or email of the requester (for authorisation).
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | ||
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions authorization (only employee can cancel) but omits side effects like notification, irreversibility, or actions on invalid states (e.g., already approved). The output schema exists but is not described, leaving agents uninformed about the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one main sentence, one sentence of scope, and a two-line bullet list for parameters. No fluff or repetition, front-loading the core action. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool modifies state (cancel) and has an output schema, the description does not explain return values, error conditions (e.g., what if request not found?), or behavior on non-pending requests. It adequately differentiates from siblings but leaves gaps that an agent would need to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no property descriptions (0% coverage), so the tool description fully explains both parameters: 'request_id: Numeric ID of the leave request to cancel' and 'identifier: Employee code or email of the requester (for authorisation).' This adds meaning about types and purpose beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Cancel a pending leave request,' a clear verb+resource combination. It further specifies 'Only the employee who applied can cancel,' distinguishing this tool from sibling tools like 'approve_leave_request' or 'reject_leave_request' which involve different actors and actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides usage by stating the tool is for pending requests and only by the requester. However, it does not explicitly state when not to use it (e.g., for approved/rejected requests) or compare with siblings. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_employee_infoB
Fetch details for a single employee.
Args: identifier: Employee code (e.g. "EMP001") or email address.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description states 'fetch' implying read-only, but no further behavioral traits (e.g., permissions, data sensitivity).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two lines, front-loaded purpose, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple fetch tool given output schema exists. Could mention potential errors or when it might return empty, but not necessary for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema: specifies identifier can be employee code (with example) or email. Schema only says string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'fetch' and resource 'details for a single employee'. Clearly distinguishes from sibling list_employees and leave tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use or not use, no alternatives mentioned. Implicit from name but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leave_balanceA
Return the leave balance (total / used / remaining) for all leave types for the specified employee and year.
Args: identifier: Employee code or email. year: Calendar year (e.g. 2025). Defaults to the current year.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It describes the return values but does not state that the operation is read-only (non-destructive) or mention permissions, rate limits, or error handling. The description is adequate but not explicit about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and a brief Args list. It is front-loaded and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to detail return structure. It adequately mentions that balance is returned for all leave types. However, it could clarify identifier format or error scenarios for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning: 'identifier' is clarified as employee code or email, 'year' as calendar year with default to current year. This adds value beyond the raw schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns leave balance (total/used/remaining) for all leave types for a specified employee and year. It uses a specific verb 'Return' and resource 'leave balance', distinguishing it from siblings like get_leave_history or get_leave_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking leave balances but does not provide explicit guidance on when to use this tool versus alternatives like get_leave_history or get_leave_request. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leave_historyA
Retrieve all leave requests for an employee, optionally filtered by year or status.
Args: identifier: Employee code or email. year: Filter by calendar year. 0 = all years. status: Filter by status: "pending", "approved", "rejected", "cancelled". Leave empty to return all statuses.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| status | No | ||
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses read-only behavior (retrieve) and optional filters, but does not mention what happens if identifier is invalid, rate limits, or data freshness. It is adequate but could provide more detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear purpose sentence followed by a bullet list of parameters. No redundant information; every sentence adds value. Front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (external), the description does not need to detail return values. It covers input parameters well. Could mention ordering or default time range, but overall sufficient for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but the description's Args section explicitly explains each parameter: identifier as employee code or email, year as calendar year with 0 meaning all, and status with enumerated filter values. This adds essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves all leave requests for an employee, with optional year and status filters. The verb 'retrieve' and resource 'leave requests' are specific, and it differentiates from sibling tools that handle apply, approve, cancel, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use (to get leave history) but does not explicitly mention when not to use or compare to alternatives like get_leave_request for a single request. Usage context is implied by naming but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leave_requestA
Fetch full details of a single leave request by its ID.
Args: request_id: The numeric ID of the leave request (returned by apply_for_leave or get_leave_history).
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It only says 'Fetch', implying a read operation, but does not explicitly state that it is non-destructive, nor does it mention permissions, rate limits, or error behavior (e.g., invalid ID). This is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two lines with an Args section. Every sentence is necessary, no fluff. It front-loads the main purpose immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown but indicated by context), the description does not need to explain return values. For a simple fetch tool, it covers the core functionality, parameter source, and purpose. Minor omission: no mention of error handling or non-existent IDs, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the tool's description explains the parameter 'request_id' as 'the numeric ID of the leave request (returned by apply_for_leave or get_leave_history)', adding valuable context beyond the schema type. This compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches full details of a single leave request by ID, using a specific verb and resource. It distinguishes itself from siblings like get_leave_history which lists requests, and apply_for_leave which creates them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions where to get the request ID (from apply_for_leave or get_leave_history), implying usage context. However, it does not explicitly state when to use this tool versus alternatives (e.g., get_leave_history for multiple requests) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_employeesA
List all active employees, optionally filtered by department.
Args: department: Filter by department name (partial match, case-insensitive). Leave empty to return all employees.
| Name | Required | Description | Default |
|---|---|---|---|
| department | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but description covers key behavior: returns only active employees and optional filter. No side effects expected. Simple read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus param details. Front-loaded with core purpose. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema existed, so return value description not needed. Covers all essential aspects for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Sole parameter department is fully described with default behavior, partial matching, and case-insensitivity. Compensates for 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'list', resource 'active employees', and optional filter by department. Distinct from siblings like get_employee_info which retrieves a single employee.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes optional filter with partial matching behavior. Implicitly differentiates from get_employee_info, but could explicitly mention when to use list vs info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_leave_typesA
Return all available leave categories with their yearly default allocation. Call this to know valid leave_type values before applying for leave.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description implies a read-only operation (return all). It adds context that it returns yearly default allocation, but does not explicitly declare non-destructive behavior. Adequate but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second gives usage guidance. No filler, every sentence serves a distinct purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and presence of output schema, description is sufficient. It covers purpose, output content, and usage context. Could mention lack of filtering but not necessary for a simple list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters, so description naturally adds meaning about the output (leave categories with allocation). Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns all available leave categories with their yearly default allocation. It uses specific verb 'return' and resource 'leave categories'. Distinguishes from siblings like apply_for_leave by indicating it provides valid leave_type values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call this before applying for leave to know valid leave_type values. Provides clear context for when to use, though no explicit when-not-to-use is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_leave_requestA
Reject a pending leave request. Call this only when acting as an HR manager or team lead.
Args: request_id: Numeric ID of the leave request to reject. manager_note: Reason for rejection (recommended ā visible to employee).
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| manager_note | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the manager_note is recommended and visible to the employee, but does not detail side effects such as notifications or status changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (6 lines) with a clear structure including an Args section. Every sentence adds value, though it could be slightly tighter by removing redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers the main behavioral context (role requirement, parameter details). It could mention that the request must be pending, but this is implied by 'pending leave request' in the first sentence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds full meaning: request_id is a numeric ID, manager_note is a reason for rejection that is recommended and visible to the employee. This compensates entirely for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Reject a pending leave request,' which specifies both the action (reject) and the resource (leave request). This distinguishes it from sibling tools like approve_leave_request and cancel_leave_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Call this only when acting as an HR manager or team lead,' providing clear when-to-use guidance. It implies not to use as an employee, though it does not explicitly compare to alternatives like approve_leave_request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v0.1.0- First observed
apply_for_leave - First observed
approve_leave_request - First observed
cancel_leave_request - First observed
get_employee_info - First observed
get_leave_balance - First observed
get_leave_history - First observed
get_leave_request - First observed
list_employees - First observed
list_leave_types - First observed
reject_leave_request
TDQS
Each tool targets a distinct action (apply, approve, cancel, reject, retrieve info/balance/history/requests, list employees/types) with no overlap. Clear boundaries between approval workflow and information retrieval.
All tools follow a consistent verb_noun snake_case pattern (e.g., apply_for_leave, get_leave_balance, list_employees). No deviations or mixing of styles.
10 tools is well-scoped for an employee leave management domain. Each tool serves a necessary purpose without unnecessary duplication or bloat.
Covers the core lifecycle (apply, approve, reject, cancel) and read operations (balance, history, employee info). Minor gap: no tool to update a pending leave request (e.g., change dates or reason).
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
Holiday photo MCP server: list and fetch personal holiday photos inline in Claude chat.
AI-native Kanban board ā connect Claude to claim, work and move your tasks over MCP.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Build and manage AI-native customer support agents from Claude or any MCP client.
Related MCP Servers
- FlicenseBqualityDmaintenanceA Model Context Protocol server that enables users to manage employee leave through natural language. It provides tools to check leave balances, apply for leave, and view leave history via Claude integration.3-
- FlicenseNot gradedqualityDmaintenanceEnables employees to check leave balance, apply for leave, and view leave history through natural language using Claude Desktop.-
- FlicenseBqualityCmaintenanceEnables managing employee leave requests (apply, view, list leaves) through Claude desktop using natural language.6-
- FlicenseNot gradedqualityDmaintenanceEnables managing employee leave requests, balances, and approvals through natural language with Claude Desktop, using SQLite for persistence and fuzzy name matching.-
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/adityapatel143/GenAi_Employee_Leave_Management-MCP_Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server