Tools
Full reference for every Vacation Tracker MCP tool. Input schemas, outputs, and LLM-facing descriptions.
The MCP server exposes four read-only tools. Every tool:
- Accepts names or IDs wherever a department, location, leave type, or user is referenced. Ambiguous name matches return a structured error with candidate IDs.
- Resolves date shortcuts (
today,this_week,next_week,this_month,next_month,last_week,last_month) in the workspace's default-location timezone. - Hides pagination from the LLM. If results exceed the upstream page limit, the response sets
truncated: true. - Returns errors as standard JSON-RPC, with a
supportblock inerror.datapointing to the developer email and feedback form. See Troubleshooting.
get_workspace_info
Scope: mcp:workspace:read
Returns the workspace's departments, locations, and leave types in one call. LLMs usually call this once at the start of a conversation to resolve names to IDs.
Input
| Param | Type | Description |
|---|---|---|
include | ("departments" | "locations" | "leaveTypes")[] (optional) | Defaults to all three when omitted or empty. |
Example output
{
"departments": [
{ "id": "team-abc", "name": "Engineering", "parentId": null }
],
"locations": [
{ "id": "location-xyz", "name": "Belgrade Office", "timezone": "Europe/Belgrade" }
],
"leaveTypes": [
{ "id": "lt-123", "name": "Vacation", "color": "#4A90E2" }
]
}find_users
Scope: mcp:users:read
Find people by partial name, email, department, or location. Department and location accept a name (partial match) or an ID.
Input
| Param | Type | Description |
|---|---|---|
query | string (optional) | Partial match against name or email. |
department | string (optional) | Department name (partial match) or ID. |
location | string (optional) | Location name (partial match) or ID. |
status | "active" | "inactive" | "all" (optional) | Defaults to "active". |
limit | integer 1–200 (optional) | Defaults to 50. |
Example output
{
"users": [
{
"id": "usr_123",
"name": "Sarah Chen",
"email": "sarah@acme.com",
"status": "active",
"employeeId": "EMP-042",
"department": { "id": "team-abc", "name": "Engineering" },
"location": { "id": "location-xyz", "name": "Belgrade Office" }
}
],
"totalMatches": 1,
"truncated": false
}get_leaves
Scope: mcp:leaves:read
Approved, pending, or denied time-off entries in a date range, optionally filtered by user, department, location, or leave type.
Input
| Param | Type | Description |
|---|---|---|
from | string (required) | ISO date (YYYY-MM-DD) or date shortcut (today, this_week, next_week, this_month, next_month, last_week, last_month). |
to | string (optional) | ISO date (YYYY-MM-DD). If from is a shortcut, to defaults to the end of that shortcut's range. |
user | string (optional) | User name (partial match) or user ID. Use find_users to resolve first when ambiguous. |
department | string (optional) | Department name (partial match) or ID. |
location | string (optional) | Location name (partial match) or ID. |
leaveType | string (optional) | Leave type name (partial match) or ID. |
status | "approved" | "pending" | "denied" | "all" (optional) | Defaults to "approved". |
Example output
{
"leaves": [
{
"id": "leave_789",
"user": { "id": "usr_123", "name": "Sarah Chen" },
"leaveType": { "id": "lt-123", "name": "Vacation" },
"startDate": "2026-05-04",
"endDate": "2026-05-08",
"status": "approved",
"workingDays": 5,
"partDay": null
}
],
"totalMatches": 1,
"truncated": false
}get_holidays
Scope: mcp:workspace:read
Public holidays for a calendar year. Workspaces can have multiple locations with different holiday calendars; omit location to get every location's holidays tagged with the location they belong to.
Input
| Param | Type | Description |
|---|---|---|
year | integer (optional) | Calendar year (e.g. 2026). Defaults to the current year in the workspace's default-location timezone. |
location | string (optional) | Location name (partial match) or location ID. Omit to include every location. |
Example output
{
"year": 2026,
"holidays": [
{
"location": { "id": "location-xyz", "name": "Belgrade Office" },
"name": "Statehood Day",
"date": "2026-02-15",
"multiDay": false
}
]
}Error shape
All errors are returned as standard JSON-RPC 2.0 errors. The error.data object always carries a support block so anyone hitting a failure in their AI client knows where to reach out:
{
"jsonrpc": "2.0",
"id": 42,
"error": {
"code": -32603,
"message": "Internal error",
"data": {
"support": {
"email": "developers@vacationtracker.io",
"feedback_url": "https://www.votito.com/public/ideabank/...",
"error_tracked": true,
"note": "This error has been automatically logged. For assistance, email developers@vacationtracker.io. To request new MCP features or tools, submit via the feedback URL."
}
}
}
}See Troubleshooting for the full list of error codes.