rotacloud-mcp
https://rotacloud.usefulapi.io
Registry code: cc597b6ace80c0f0
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 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.
90 days 100%· all time 100%
last good check
of 26 tools
- unknown → live
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.
through this hub
successful
what callers paid
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.
{ "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 linesrotacloud_get_user unknown never probed
One employee by id. GET /users/{id}.
{ "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 linesrotacloud_list_locations unknown never probed
List locations (sites/branches) with address, time zone and managers. GET /locations.
{ "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 linesrotacloud_get_shift unknown never probed
One shift by id. GET /shifts/{id}.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_list_pay_periods unknown never probed
List pay periods overlapping a date range (id, name, start/end date, locked). GET /pay_periods.
{ "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 linesrotacloud_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}.
{ "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 linesrotacloud_publish_shifts unknown never probed
WRITE: publish shifts so the assigned employees see them (and get notified). POST /shifts_published.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_list_roles unknown never probed
List job roles (positions) with colour, default break and pay rate. GET /roles.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_list_swap_requests unknown never probed
List shift swap requests with their status, the shifts and the users involved. GET /swap_requests.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_get_leave_request unknown never probed
One leave request by id, with the per-day breakdown. GET /leave_requests/{id}.
{ "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 linesrotacloud_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}.
{ "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 linesrotacloud_get_availability unknown never probed
Employees' availability per date in a range (available / unavailable times). GET /availability.
{ "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 linesrotacloud_list_days_off unknown never probed
Employees' scheduled days off per date in a range. GET /days_off.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_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.
{ "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 linesrotacloud_deny_leave_request unknown never probed
WRITE: deny a pending leave request (the employee is notified). POST /leave_requests/{id}/deny.
{ "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 linesrotacloud_list_accounts unknown 2h ago
The RotaCloud account(s) this API key belongs to: name, plan, time zone, employee count. GET /accounts.
{ "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
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.
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.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - 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. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's idcc597b6ace80c0f0.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/cc597b6ace80c0f0/claim.
Over MCP: the claim_endpoint tool.
[](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.
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.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- 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.
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.
- churchsuite.usefulapi.io churchsuite-mcp
- gingr.usefulapi.io gingr-mcp
- textline.usefulapi.io textline-mcp
- checkly.usefulapi.io checkly-mcp
- veeqo.usefulapi.io veeqo-mcp
- freeagent.usefulapi.io freeagent-mcp
- goteamup.usefulapi.io goteamup-mcp
- ordoro.usefulapi.io ordoro-mcp
58 more sit on this domain. All of them.