_ registry / mcp streamable-http · checked 2h ago

rotacloud-mcp

https://rotacloud.usefulapi.io

Registry code: cc597b6ace80c0f0

api record

Tools for RotaCloud, hosted by usefulapi.io. Read-only tools never change data; ask the user before a tool that creates, changes or deletes RotaCloud data. Free plan: 100 tool calls per month. Run rotacloud_usage_status to see the calls used this month. Pro (unlimited calls, $9/month or $90/year): when the user wants more calls or reaches the limit, run rotacloud_upgrade; it returns a Stripe Checkout link for the user to open. rotacloud_cancel_subscription cancels Pro at the end of the paid period.

endpoint
https://rotacloud.usefulapi.io/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is rotacloud-mcp live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is rotacloud-mcp free to use?
No — it asks for a key or a login before it will serve.
What tools does rotacloud-mcp have?
26 tools: rotacloud_get_user, rotacloud_list_locations, rotacloud_get_shift, rotacloud_list_attendance, rotacloud_list_leave_types, rotacloud_list_pay_periods, rotacloud_update_shift, rotacloud_publish_shifts, ….
Is rotacloud-mcp safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
491ms

last good check

priced tools
0

of 26 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 26 tools
1 auth-required 25 never probed 1 of 26 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • rotacloud_list_clocked_in auth-required 2h ago

    Who is clocked in right now: user, location, role, clock-in time, minutes late and break state. GET /users_clocked_in.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        }
      }
    }
    arguments 18 lines
  • rotacloud_get_user unknown never probed

    One employee by id. GET /users/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "user_id"
      ],
      "properties": {
        "user_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "RotaCloud user id.",
          "exclusiveMinimum": 0
        }
      }
    }
    arguments 15 lines
  • rotacloud_list_locations unknown never probed

    List locations (sites/branches) with address, time zone and managers. GET /locations.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these location ids."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted locations."
        }
      }
    }
    arguments 31 lines
  • rotacloud_get_shift unknown never probed

    One shift by id. GET /shifts/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "shift_id"
      ],
      "properties": {
        "shift_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "RotaCloud shift id.",
          "exclusiveMinimum": 0
        }
      }
    }
    arguments 15 lines
  • rotacloud_list_attendance unknown never probed

    List time & attendance records (clock-in/out times, breaks, minutes late, hours, approval state) in a time range. GET /attendance.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "start",
        "end"
      ],
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these role ids."
        },
        "start": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "users": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these user ids."
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "approved": {
          "type": "boolean",
          "description": "true = only approved records, false = only unapproved."
        },
        "locations": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these location ids."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted records."
        }
      }
    }
    arguments 83 lines
  • rotacloud_list_leave_types unknown never probed

    List leave types (Holiday, Sickness, Unpaid, ...) with id, short name and whether employees can request them. GET /leave_types.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        }
      }
    }
    arguments 18 lines
  • rotacloud_list_pay_periods unknown never probed

    List pay periods overlapping a date range (id, name, start/end date, locked). GET /pay_periods.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "start",
        "end"
      ],
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last date (yyyy-mm-dd)."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First date (yyyy-mm-dd)."
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        }
      }
    }
    arguments 32 lines
  • rotacloud_update_shift unknown never probed

    WRITE: change a shift's times, assignee, location, role, break, notes or published state. Only the fields you pass change. POST /shifts/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "shift_id"
      ],
      "properties": {
        "notes": {
          "type": "string",
          "maxLength": 2000,
          "description": "Shift notes."
        },
        "role_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "New role id.",
          "exclusiveMinimum": 0
        },
        "user_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "exclusiveMinimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "New assignee; null makes it an open shift."
        },
        "end_time": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "shift_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Shift id.",
          "exclusiveMinimum": 0
        },
        "published": {
          "type": "boolean",
          "description": "Published state."
        },
        "start_time": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "location_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "New location id.",
          "exclusiveMinimum": 0
        },
        "minutes_break": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Unpaid break in minutes."
        }
      }
    }
    arguments 81 lines
  • rotacloud_publish_shifts unknown never probed

    WRITE: publish shifts so the assigned employees see them (and get notified). POST /shifts_published.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "shift_ids"
      ],
      "properties": {
        "shift_ids": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "maxItems": 500,
          "minItems": 1,
          "description": "Ids of the shifts to publish."
        }
      }
    }
    arguments 20 lines
  • rotacloud_approve_leave_request unknown never probed

    WRITE: approve a pending leave request (it becomes booked leave and the employee is notified). POST /leave_requests/{id}/approve.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "request_id"
      ],
      "properties": {
        "request_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Leave request id.",
          "exclusiveMinimum": 0
        },
        "admin_message": {
          "type": "string",
          "maxLength": 2000,
          "description": "Message to the employee."
        }
      }
    }
    arguments 20 lines
  • rotacloud_list_day_notes unknown 2h ago

    List day notes (notices pinned to rota dates, e.g. events or deliveries), optionally for one location. GET /day_notes.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last date (yyyy-mm-dd)."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First date (yyyy-mm-dd)."
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "location": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Only notes for this location id.",
          "exclusiveMinimum": 0
        }
      }
    }
    arguments 34 lines
  • rotacloud_list_users unknown never probed

    List employees (users) with their level, roles, locations, contact details and pay settings. Use it to map user ids in shifts, leave and attendance to names. GET /users.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these user ids."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "locations": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only users in these location ids."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted (former) users."
        }
      }
    }
    arguments 40 lines
  • rotacloud_list_roles unknown never probed

    List job roles (positions) with colour, default break and pay rate. GET /roles.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these role ids."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted roles."
        }
      }
    }
    arguments 31 lines
  • rotacloud_list_shifts unknown never probed

    List rota shifts in a time range: start/end times (Unix seconds), break, assigned user (null = open shift), location, role, notes, published and acknowledged state. Filter by users, locations, roles, open or published. GET /shifts.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "start",
        "end"
      ],
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "open": {
          "type": "boolean",
          "description": "true = only open (unassigned) shifts, false = only assigned shifts."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only shifts with these role ids."
        },
        "start": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "users": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": 0
          },
          "description": "Only shifts of these user ids (add 0 to include open shifts)."
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "locations": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only shifts at these location ids."
        },
        "published": {
          "type": "boolean",
          "description": "true = only published shifts, false = only unpublished (draft) shifts."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted shifts."
        }
      }
    }
    arguments 87 lines
  • rotacloud_list_swap_requests unknown never probed

    List shift swap requests with their status, the shifts and the users involved. GET /swap_requests.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted swap requests."
        }
      }
    }
    arguments 22 lines
  • rotacloud_list_leave unknown never probed

    List booked leave (holiday, sickness, etc.) with type, user, dates, hours and status. Filter by date range or leave year, users and leave types; pending/denied/expired requests are excluded unless asked for. GET /leave.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last date (yyyy-mm-dd)."
        },
        "year": {
          "type": "integer",
          "maximum": 2100,
          "minimum": 2000,
          "description": "Leave year instead of a date range."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First date (yyyy-mm-dd)."
        },
        "types": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these leave type ids (see rotacloud_list_leave_types)."
        },
        "users": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these user ids."
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "include_denied": {
          "type": "boolean",
          "description": "Include denied leave requests."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted leave."
        },
        "include_expired": {
          "type": "boolean",
          "description": "Include expired leave requests."
        },
        "include_requested": {
          "type": "boolean",
          "description": "Include pending leave requests."
        }
      }
    }
    arguments 68 lines
  • rotacloud_list_leave_requests unknown never probed

    List leave requests awaiting a decision (and past ones): user, leave type, dates, half days, the employee's message. GET /leave_requests.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "include_deleted": {
          "type": "boolean",
          "description": "Include deleted requests."
        }
      }
    }
    arguments 22 lines
  • rotacloud_get_leave_request unknown never probed

    One leave request by id, with the per-day breakdown. GET /leave_requests/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "request_id"
      ],
      "properties": {
        "request_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Leave request id.",
          "exclusiveMinimum": 0
        }
      }
    }
    arguments 15 lines
  • rotacloud_list_holiday_allowances unknown never probed

    Every employee's holiday allowance for a leave year (default and custom allowance, unit, carried over). GET /holiday_allowances/{year}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "year"
      ],
      "properties": {
        "year": {
          "type": "integer",
          "maximum": 2100,
          "minimum": 2000,
          "description": "Leave year, e.g. 2026."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        }
      }
    }
    arguments 27 lines
  • rotacloud_get_availability unknown never probed

    Employees' availability per date in a range (available / unavailable times). GET /availability.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "start",
        "end"
      ],
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last date (yyyy-mm-dd)."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First date (yyyy-mm-dd)."
        },
        "users": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these user ids."
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        }
      }
    }
    arguments 41 lines
  • rotacloud_list_days_off unknown never probed

    Employees' scheduled days off per date in a range. GET /days_off.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "start",
        "end"
      ],
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last date (yyyy-mm-dd)."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First date (yyyy-mm-dd)."
        },
        "users": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "description": "Only these user ids."
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        }
      }
    }
    arguments 41 lines
  • rotacloud_get_payroll unknown never probed

    Payroll for one pay period, per employee: pay settings, attendance worked, paid/unpaid leave, overtime and pay totals. Contains pay data. GET /pay_periods/{id}/payroll.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "pay_period_id"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        },
        "pay_period_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Pay period id (from rotacloud_list_pay_periods).",
          "exclusiveMinimum": 0
        }
      }
    }
    arguments 27 lines
  • rotacloud_create_shift unknown never probed

    WRITE: create a shift on the rota. Leave user_id out for an open shift. Unpublished by default (employees see it once published). POST /shifts.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "start_time",
        "end_time",
        "location_id"
      ],
      "properties": {
        "notes": {
          "type": "string",
          "maxLength": 2000,
          "description": "Shift notes shown to the employee."
        },
        "role_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Role id.",
          "exclusiveMinimum": 0
        },
        "user_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Assigned user id; omit for an open shift.",
          "exclusiveMinimum": 0
        },
        "end_time": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "published": {
          "type": "boolean",
          "description": "Publish immediately (default false)."
        },
        "start_time": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string"
            }
          ],
          "description": "Unix timestamp (seconds), an ISO 8601 date (2026-10-12 = 00:00 UTC) or an ISO 8601 date-time with a time zone (2026-10-12T09:00:00+01:00 or ...Z)."
        },
        "location_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Location id.",
          "exclusiveMinimum": 0
        },
        "minutes_break": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Unpaid break in minutes."
        }
      }
    }
    arguments 70 lines
  • rotacloud_create_leave_request unknown never probed

    WRITE: submit a leave request on behalf of an employee (sent as that user, for a manager to approve). POST /leave_requests with the User header.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "user_id",
        "leave_type_id",
        "start_date",
        "end_date"
      ],
      "properties": {
        "message": {
          "type": "string",
          "maxLength": 2000,
          "description": "Message from the employee to the manager."
        },
        "user_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "The employee requesting leave (the request is made as this user).",
          "exclusiveMinimum": 0
        },
        "end_date": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last day (yyyy-mm-dd)."
        },
        "end_am_pm": {
          "enum": [
            "am",
            "pm"
          ],
          "type": "string",
          "description": "'am' ends at midday (half day); default 'pm'."
        },
        "start_date": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First day (yyyy-mm-dd)."
        },
        "start_am_pm": {
          "enum": [
            "am",
            "pm"
          ],
          "type": "string",
          "description": "'pm' starts at midday (half day); default 'am'."
        },
        "leave_type_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Leave type id (see rotacloud_list_leave_types; must be requestable).",
          "exclusiveMinimum": 0
        }
      }
    }
    arguments 55 lines
  • rotacloud_deny_leave_request unknown never probed

    WRITE: deny a pending leave request (the employee is notified). POST /leave_requests/{id}/deny.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "request_id"
      ],
      "properties": {
        "request_id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Leave request id.",
          "exclusiveMinimum": 0
        },
        "admin_message": {
          "type": "string",
          "maxLength": 2000,
          "description": "Reason shown to the employee."
        }
      }
    }
    arguments 20 lines
  • rotacloud_list_accounts unknown 2h ago

    The RotaCloud account(s) this API key belongs to: name, plan, time zone, employee count. GET /accounts.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 500,
          "description": "Results per page, 1-500 (RotaCloud may cap it lower; the reply's total and next_offset show what is left).",
          "exclusiveMinimum": 0
        },
        "offset": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Index of the first result; pass the previous reply's next_offset."
        }
      }
    }
    arguments 18 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id cc597b6ace80c0f0.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/cc597b6ace80c0f0/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/cc597b6ace80c0f0/badge.svg)](https://brick.blue/agent/cc597b6ace80c0f0?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.

_ also on usefulapi.io 66 entries

Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.

58 more sit on this domain. All of them.