Rotageek MCP by usefulapi

Read staff, locations, shifts, gaps and leave; create leave requests in Rotageek.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
79%
Naming quality
79%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'rotageek_list_location_schedule' name length outside 3-30 rangein rotageek_list_location_schedule

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,194Tokens (tool definitions)
~1.5 KBTypical response size
Significant attention impact (2.50% of 128k context)

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-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools