Vacation Tracker Docs
MCP Server

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 support block in error.data pointing 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

ParamTypeDescription
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

ParamTypeDescription
querystring (optional)Partial match against name or email.
departmentstring (optional)Department name (partial match) or ID.
locationstring (optional)Location name (partial match) or ID.
status"active" | "inactive" | "all" (optional)Defaults to "active".
limitinteger 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

ParamTypeDescription
fromstring (required)ISO date (YYYY-MM-DD) or date shortcut (today, this_week, next_week, this_month, next_month, last_week, last_month).
tostring (optional)ISO date (YYYY-MM-DD). If from is a shortcut, to defaults to the end of that shortcut's range.
userstring (optional)User name (partial match) or user ID. Use find_users to resolve first when ambiguous.
departmentstring (optional)Department name (partial match) or ID.
locationstring (optional)Location name (partial match) or ID.
leaveTypestring (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

ParamTypeDescription
yearinteger (optional)Calendar year (e.g. 2026). Defaults to the current year in the workspace's default-location timezone.
locationstring (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.

On this page