Rotageek MCP by usefulapi
Read staff, locations, shifts, gaps and leave; create leave requests in Rotageek.
Should I use this
Quality & Safety
Findings (1)
- LOWin rotageek_list_location_schedule
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"rotageek": {
"url": "https://rotageek.usefulapi.io/mcp"
}
}
}Remote endpoints
https://rotageek.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (15)
🟢rotageek_list_users(user_ids, location_id, sort, order, page, ...)
List the users (staff) in the organisation, optionally filtered by user ids or a location. Use it first to find the user ids the other tools need. Rotageek API: GET /api/v1/users.
Input Schema
{
"type": "object",
"properties": {
"user_ids": {
"description": "Only these user ids.",
"type": "array",
"items": {
"type": "string"
}
},
"location_id": {
"description": "Only users at this location id.",
"type": "string"
},
"sort": {
"description": "Sort field.",
"type": "string",
"enum": [
"Username",
"UserId",
"Email",
"Firstname",
"Surname"
]
},
"order": {
"description": "Sort order.",
"type": "string",
"enum": [
"Ascending",
"Descending"
]
},
"page": {
"description": "Page number for paging (zero-based).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Records per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_get_user(user_id)
Get one user by id: name, contact details, primary location and status. Rotageek API: GET /api/v1/users/{userId}.
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"type": "string",
"minLength": 1,
"description": "The Rotageek id."
}
},
"required": [
"user_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_locations(sort, order, page, page_size)
List the locations (sites) of the organisation. Rotageek API: GET /api/v1/locations.
Input Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort field.",
"type": "string",
"enum": [
"Name",
"Id",
"Postcode"
]
},
"order": {
"description": "Sort order.",
"type": "string",
"enum": [
"Ascending",
"Descending"
]
},
"page": {
"description": "Page number for paging (zero-based).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Records per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_get_location(location_id)
Get one location by id, with its settings. Rotageek API: GET /api/v1/locations/{locationId}.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"description": "The Rotageek id."
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_location_users(location_id, page, page_size)
List the users assigned to one location. Rotageek API: GET /api/v1/locations/{locationId}/users.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"description": "The Rotageek id."
},
"page": {
"description": "Page number for paging (zero-based).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Records per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_user_shifts(user_id, from, to, record_type, sort, ...)
List the scheduled shifts and leave records of one user between two date-times, with start, end, location and break minutes. Rotageek API: GET /api/v1/schedule/users/{userId}.
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"type": "string",
"minLength": 1,
"description": "The Rotageek id."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"record_type": {
"description": "Only shifts or only leave records (default: both).",
"type": "string",
"enum": [
"Shift",
"Leave"
]
},
"sort": {
"description": "Sort field.",
"type": "string",
"enum": [
"Name",
"UserId",
"LocationId",
"StartTime"
]
},
"order": {
"description": "Sort order.",
"type": "string",
"enum": [
"Ascending",
"Descending"
]
},
"page": {
"description": "Page number for paging (zero-based).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Records per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"required": [
"user_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_location_schedule(location_id, from, to, record_type, sort, ...)
List the scheduled shifts and leave records of one location between two date-times, for every user there. Rotageek API: GET /api/v1/schedule/locations/{locationId}.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"description": "The Rotageek id."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"record_type": {
"description": "Only shifts or only leave records (default: both).",
"type": "string",
"enum": [
"Shift",
"Leave"
]
},
"sort": {
"description": "Sort field.",
"type": "string",
"enum": [
"Name",
"UserId",
"LocationId",
"StartTime"
]
},
"order": {
"description": "Sort order.",
"type": "string",
"enum": [
"Ascending",
"Descending"
]
},
"page": {
"description": "Page number for paging (zero-based).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Records per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_gaps(location_ids, from, to, add_tasks, sort, ...)
List the open gaps (unfilled shifts) for one or more locations between two date-times. Rotageek API: GET /api/v1/gaps/locations.
Input Schema
{
"type": "object",
"properties": {
"location_ids": {
"minItems": 1,
"type": "array",
"items": {
"type": "string"
},
"description": "Location ids to read the gaps of."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"add_tasks": {
"description": "Include the tasks of each gap.",
"type": "boolean"
},
"sort": {
"description": "Sort field.",
"type": "string",
"enum": [
"LocationId",
"StartTime"
]
},
"order": {
"description": "Sort order.",
"type": "string",
"enum": [
"Ascending",
"Descending"
]
},
"page": {
"description": "Page number for paging (zero-based).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Records per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"required": [
"location_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_leave_requests(leave_year, from, to, include_overlapping, sort, ...)
List the leave requests of the organisation, optionally in a leave year or date range. Rotageek API: GET /api/v1/leave/requests.
Input Schema
{
"type": "object",
"properties": {
"leave_year": {
"description": "Leave year, e.g. 2026.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"include_overlapping": {
"description": "Include requests that only overlap the range.",
"type": "boolean"
},
"sort": {
"description": "Sort field.",
"type": "string",
"enum": [
"Id",
"Start",
"End",
"UserId",
"Duration",
"TypeId"
]
},
"order": {
"description": "Sort order.",
"type": "string",
"enum": [
"Ascending",
"Descending"
]
},
"page": {
"description": "Page number for paging (zero-based).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Records per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_leave_types
List the leave types (for example holiday or sickness) and their ids. Rotageek API: GET /api/v1/leave/types.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴rotageek_create_leave_request(user_id, leave_type_id, start, end, start_all_day, ...)
Create a leave request for one user with a leave type id and a start and end date-time. It is saved in Rotageek and can change the rota and holiday balance. Rotageek API: POST /api/v1/leave/requests/users/{userId}.
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"type": "string",
"minLength": 1,
"description": "The Rotageek id."
},
"leave_type_id": {
"type": "string",
"minLength": 1,
"description": "The leave type id (from rotageek_list_leave_types)."
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Date and time, e.g. 2026-01-05T09:00:00."
},
"start_all_day": {
"description": "The first day is a whole day.",
"type": "boolean"
},
"end_all_day": {
"description": "The last day is a whole day.",
"type": "boolean"
},
"notes": {
"description": "Notes shown on the request.",
"type": "string",
"maxLength": 2000
}
},
"required": [
"user_id",
"leave_type_id",
"start",
"end"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_get_timesheet(location_id, week_start_date, worker_type)
Get the timesheet records of one location for the week that starts on weekStartDate: hours scheduled and worked per user. Rotageek API: GET /api/v1/timesheets/locations/{locationId}/{weekStartDate}.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"description": "The Rotageek id."
},
"week_start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "The first day of the week, yyyy-mm-dd."
},
"worker_type": {
"description": "Only this worker type (default: all).",
"type": "string",
"enum": [
"All",
"Normal",
"Bank",
"Agency"
]
}
},
"required": [
"location_id",
"week_start_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_positions
List the job positions (roles) of the organisation with their ids. Rotageek API: GET /api/v1/positions.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_skills
List the skills of the organisation with their ids. Rotageek API: GET /api/v1/skills.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢rotageek_list_payroll_codes
List the payroll codes that shifts and leave map to. Rotageek API: GET /api/v1/payrollcodes.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence