Appearance
Manage Roster MCP Tool Reference
Every tool the MCP server exposes, what it answers, and the arguments it takes.
What this does
Each tool below maps to one question a support lead actually asks. The model picks a tool by matching your phrasing against the descriptions, so asking in plain language ("who's off next week?") works better than trying to name the tool yourself.
Tools you cannot use are not shown to your client at all — tools/list is filtered by your token's scopes, its read-only flag and your role. If a tool below is missing in your session, check the token's scopes in Settings → API & MCP, and your role (the "Who sees it" column). Role is checked live: a demoted user loses staff tools on the next call.
If a hidden tool is called directly anyway, it is refused with a readable isError message and nothing is changed.
Tool list
"Staff" means owner, manager and lead. "Linked agent" means a user whose account is linked to an agent in this workspace.
| Tool | Type | Scope | Who sees it | What it does | Arguments |
|---|---|---|---|---|---|
whoami | Read | none | Everyone | The user, their role, linked agent, which modules are on, plan OT support, the token's scopes and a plain list of what they can do. Call it when unsure whether the user may do something. | None |
get_workspace_info | Read | workspace:read | Everyone | Workspace name, timezone, active agent count, enabled feature modules, and your role. | None |
list_agents | Read | agents:read | Everyone | The agents on the team with holiday group, off days, active status and who their account is linked to (linked_user). can_edit / can_delete say what you may change. Use it to resolve a name to an agent_id. | active_only |
list_team | Read | team:read | Staff | Team members with role, linked agent, and whether you can change their role, link an agent or remove them (can_change_role, can_link_agent, can_remove). assignable_roles lists the roles you can give. | None |
get_schedule | Read | schedule:read | Everyone | Who is working when, over a date range. Contiguous hours are collapsed into blocks. | period, from, to, agent_id |
find_coverage_gaps | Read | schedule:read | Everyone | The hours where nobody (or too few people) is rostered. "Which slots are empty this week?" | period, from, to, min_agents |
find_available_agents | Read | schedule:read | Everyone | Who is free on a date — not rostered, not on leave. Agents on a public holiday are returned but flagged. | date, hour |
get_schedule_template | Read | schedule:read | Everyone | An agent's default weekly pattern, one entry per weekday, that their roster is generated from. | agent_id |
list_leaves | Read | leaves:read | Everyone | Leave overlapping a date range. "Who is on leave next week?" Staff see every agent; a member sees only their own leave. | period, from, to, status, agent_id |
get_leave_balances | Read | leaves:read | Staff | Each agent's total, used (approved) and remaining days per leave type for a year. | year, agent_id |
get_my_leave | Read | leaves:read | Linked agent | Your own leave for a year (all statuses) and your remaining balance per type. | year |
list_holidays | Read | holidays:read | Everyone | Public holidays in a range, with the agents each one applies to. | period, from, to, group |
list_holiday_groups | Read | holidays:read | Everyone | Holiday groups (national calendars) with how many holidays and agents each has. | None |
list_holiday_presets | Read | holidays:read | Staff | Built-in public holidays for a group's country in a year, each marked if already added. | code, year |
list_ot_events | Read | ot:read | Everyone | Overtime events with status and submission counts. Staff see every event; a member sees only events their linked agent has access to (none if no agent is linked). | status |
get_ot_event | Read | ot:read | Everyone | One OT event: dates, status and guidelines. Staff also get every agent with access and their submission status; a member gets just the event, and only if they have access. | event_id |
get_ot_coverage | Read | ot:read | Staff | Slot-by-slot OT coverage for one event: who volunteered in each of the 24 hourly slots per day, and which slots nobody claimed. Also returns max_slots_per_day_guideline. | event_id |
list_ot_submissions | Read | ot:read | Staff | Every agent's submission for an event (hours by date, status), plus agents with access who have not submitted. | event_id |
get_ot_submission | Read | ot:read | Staff | One OT submission in detail. | event_id, submission_id |
list_my_ot_events | Read | ot:read | Linked agent | OT events you can volunteer for, with your submission status for each. | None |
get_my_ot_availability | Read | ot:read | Linked agent | Your saved draft or submitted availability for an event. | event_id |
get_missed_reports | Read | reports:read | Linked agent or staff | Work reports a scheduled agent has not submitted after their shift ended, as a flat missed list with missed_count and scheduled_count. Holidays, approved leave and days before a template's start date are excluded; silenced days are left out unless include_silenced is true (the admin tracker still counts them). Staff see everyone; a member sees their own. Defaults to the last 7 days. | from, to, agent_id, template_id, include_silenced |
list_report_templates | Read | reports:read | Everyone | Work report templates. Staff see all, including inactive ones; members see the active ones assigned to them. | None |
get_report_template | Read | reports:read | Everyone | One template with its questions (answers are keyed by question id). Staff also get its agents and Slack setting. | template_id |
list_report_submissions | Read | reports:read | Everyone | Submitted work reports, newest first. Staff see everyone; members see their own. | template_id, agent_id, from, to, page, per_page |
get_report_submission | Read | reports:read | Everyone | One submitted report with its answers. | submission_id |
get_report_leaderboard | Read | reports:read | Staff | Team leaderboard for the week or month. | range, sort |
list_tickets | Read | tickets:read | Staff | Support tickets, newest first. | status |
get_ticket | Read | tickets:read | Staff | One ticket with its replies. | ticket_id |
get_my_note | Read | notes:read | Everyone | Your own notepad for this workspace. | None |
list_modules | Read | workspace:read | Everyone | Workspace modules with whether each is enabled and whether the plan locks it. | None |
assign_shift | Write | schedule:write | Staff | Assign an agent to a block of hours on one date or a from/to range. Hours already rostered are updated in place. | agent_id, date or from/to, start_hour, end_hour, is_ot, notes |
unassign_shift | Write | schedule:write | Staff | Remove an agent from a block of hours on one date or a range. | agent_id, date or from/to, start_hour, end_hour |
set_schedule_template | Write | schedule:write | Staff | Set an agent's weekly pattern (all 7 days) and rebuild their roster from it. Replaces every roster entry for that agent from today through the next 183 days (about 6 months), including manual and OT edits; a daily job then keeps extending it without touching edits. | agent_id, days, confirm_regenerate |
create_agent | Write | agents:write | Staff | Create a roster agent. Counts against the workspace owner's plan agent limit. | name, color, holiday_group, office_days, off_days, slack_member_id |
update_agent | Write | agents:write | Staff | Change an agent's details; only the fields you pass change. Changing the holiday group moves roster days. Refused for agents linked to someone ranked at or above you. | agent_id plus the create fields |
set_agent_active | Write | agents:write | Staff | Deactivate or reactivate an agent. Not allowed on your own agent or agents of people ranked at or above you. | agent_id, active |
delete_agent | Write | agents:write | Staff | Delete an agent and all its history (roster, leave, OT, work reports). Refused with counts unless confirm_delete_history is true. | agent_id, confirm_delete_history |
add_team_member | Write | team:write | Staff | Add someone by email with a role below yours. New emails get an account and an invite email. Members always get a roster agent; leads and managers only with add_to_roster. Returns added_to_roster and roster_requested. | name, email, role, add_to_roster, agent_color, schedule_days |
change_member_role | Write | team:write | Staff | Change a member's role. Only people ranked below you, to a role below yours. Nobody can change the owner's role or their own. | user_id, role |
link_member_agent | Write | team:write | Staff | Link a member's account to an unlinked roster agent, or pass agent_id: null to unlink. Works for yourself and people ranked below you. | user_id, agent_id |
remove_team_member | Write | team:write | Staff | Remove someone ranked below you. Their roster agent is deleted with all its history, so it is refused with counts unless confirm_delete_roster is true. If another member is linked to the same agent, the agent is kept and they are only unlinked. | user_id, confirm_delete_roster |
create_leave | Write | leaves:write | Staff | File leave for an agent. Pending by default; approved leave removes the agent from the roster for those days. | agent_id, type, start_date, end_date, notes, status |
update_leave_status | Write | leaves:write | Staff | Approve or reject an existing leave request. Approving removes the agent from the roster; un-approving restores them. | leave_id, status |
update_leave | Write | leaves:write | Staff | Change a leave record; only the fields you pass change. If approved, the old days go back on the roster and the new days come off. | leave_id, type, start_date, end_date, notes, status |
delete_leave | Write | leaves:write | Staff | Delete a leave record. If it was approved, the agent goes back on the roster. | leave_id |
set_leave_balance | Write | leaves:write | Staff | Set an agent's yearly leave allowance per type. | agent_id, year, casual_total, annual_total, sick_total, maternity_total |
request_leave | Write | leaves:write | Linked agent | Request leave for yourself. Always pending for a manager to approve; must start today or later; refused if you already have leave on those days. | type, start_date, end_date, notes |
cancel_leave_request | Write | leaves:write | Linked agent | Withdraw one of your own requests while it is still pending. Approved or rejected requests are refused. | leave_id |
create_holiday | Write | holidays:write | Staff | Add a holiday. Agents in that group (everyone for all) come off the roster that day. | name, date, group, is_recurring, color, notes |
update_holiday | Write | holidays:write | Staff | Change a holiday; only the fields you pass change. Moving it restores the old day on the roster and clears the new one. | holiday_id plus the create fields |
delete_holiday | Write | holidays:write | Staff | Delete a holiday; affected agents go back on the roster that day. | holiday_id |
create_holiday_group | Write | holidays:write | Staff | Create a holiday group. The code cannot be changed later. | code, name, flag_emoji, color, description |
update_holiday_group | Write | holidays:write | Staff | Change a group's name, flag, colour or description. | code plus the create fields |
delete_holiday_group | Write | holidays:write | Staff | Delete an empty holiday group. Refused while it still has holidays. | code |
import_holiday_presets | Write | holidays:write | Staff | Import built-in holidays into a group for a year, optionally only some dates. Skips ones already added. | code, year, dates |
create_ot_event | Write | ot:write | Staff | Create an OT event. It starts as a draft. | name, start_date, end_date, description, max_slots_per_day, mandatory_dates |
update_ot_event | Write | ot:write | Staff | Change an OT event; only the fields you pass change. Closed events cannot be edited. | event_id plus the create fields |
delete_ot_event | Write | ot:write | Staff | Delete a draft event. Active or closed events cannot be deleted; close them instead. | event_id |
activate_ot_event | Write | ot:write | Staff | Open a draft event so agents with access can submit. | event_id |
close_ot_event | Write | ot:write | Staff | Close an active event. No more submissions; reviews can continue. | event_id |
grant_ot_access | Write | ot:write | Staff | Let agents submit for an event. Several at once; safe to repeat. | event_id, agent_ids |
revoke_ot_access | Write | ot:write | Staff | Remove agents' access. Their existing submission is kept. | event_id, agent_ids |
approve_ot_submission | Write | ot:write | Staff | Approve a submitted (or previously rejected) submission and write its hours to the roster as OT. Returns schedule_hours_written and schedule_hours_already_rostered. | event_id, submission_id, notes |
reject_ot_submission | Write | ot:write | Staff | Reject a submission. If it was approved, its OT hours are removed from the roster (schedule_hours_removed). | event_id, submission_id, notes |
delete_ot_submission | Write | ot:write | Owner and leads | Delete a submission (and its roster hours if approved) so the agent can submit again. | event_id, submission_id |
save_ot_availability | Write | ot:write | Linked agent | Save a draft or submit your own availability for an active event. Replaces your previous selection; locked once approved. Guideline breaches come back as warnings and do not block. | event_id, slots, submit |
create_report_template | Write | reports:write | Staff | Create a work report template with questions, assigned agents and schedule options. | name, description, icon, color, is_active, allow_edit_past, effective_from, agent_ids, questions, slack_enabled, slack_channel_id, slack_channel_name |
update_report_template | Write | reports:write | Staff | Change a template; only the fields you pass change. questions replaces the list: send every question to keep, with its id. Questions you leave out are deleted, except ones that already have answers. | template_id plus the create fields |
set_report_template_active | Write | reports:write | Staff | Activate or deactivate a template. Inactive templates are hidden from agents and never count as missed. | template_id, active |
delete_report_template | Write | reports:write | Staff | Delete a template and all its submissions. Refused with the submission count unless confirm_delete_submissions is true. | template_id, confirm_delete_submissions |
submit_work_report | Write | reports:write | Linked agent | Submit or re-submit your own report for a date. Answers are keyed by question id; unanswered questions are stored as 0. Subject to the submit rules below. | template_id, work_date, notes, answers |
dismiss_report_notices | Write | reports:write | Linked agent | Dismiss one of your missed-report notices, or all of them when notification_id is omitted. | notification_id |
notify_missed_reports | Write | reports:write | Staff | Send missed-report reminders to agents for a date range. This notifies the agents. | agent_ids, from, to |
silence_missed_report | Write | reports:write | Owner and leads | Silence a missed report. A silenced miss stops reminders and the banner and is left out of get_missed_reports unless include_silenced is true; the admin tracker still counts it. Without template_id it silences every template for that agent and date. | agent_id, date, template_id |
unsilence_missed_report | Write | reports:write | Owner and leads | Undo a silence. Without template_id it restores every template for that agent and date. | agent_id, date, template_id |
set_missed_report_banner | Write | reports:write | Owner and leads | Turn the missed-report banner shown to agents on or off. | enabled |
create_ticket | Write | tickets:write | Staff | Open a support ticket. Confirm the subject and description with the user first. | subject, description, priority |
reply_to_ticket | Write | tickets:write | Staff | Add a reply to a ticket. | ticket_id, message |
set_my_note | Write | notes:write | Everyone | Replace your own notepad (max 5000 characters; null or empty clears it). It overwrites the whole note, so read it first to append. | note |
set_module | Write | workspace:write | Staff | Turn a workspace module on or off. Turning a module off makes its tools and endpoints return feature_unavailable (for everyone, including you) until it is turned back on. No data is deleted. Plan-locked modules can't be changed. | key, enabled |
Tools that are not always present
Every write tool (the ones marked Write above) is hidden entirely on read-only connections.
Tools are hidden when the token lacks the matching scope — list_leaves needs leaves:read, get_ot_coverage needs ot:read, and so on. whoami needs no scope.
The team tools (list_team and the four team:write tools) need the team:read / team:write scopes, which tokens created earlier do not have until you add them in Settings → API & MCP. Tools are also hidden by role: staff-only tools disappear for members, delete_ot_submission shows only for the owner and leads, and the "Linked agent" tools show only when the user's account is linked to an agent in this workspace. OT tools additionally fail with feature_unavailable if the OT module is off or the plan does not include it, and the leave and holiday tools do the same when the Leave management or Holiday calendar module is off. See Connection scopes.
Work report tools are not hidden from tools/list when the Work reports module is off. They stay listed and refuse with feature_unavailable when called, so check whoami or list_modules first. Ticket tools are staff-only. get_my_note and set_my_note are available to every role.
The report, ticket, note and module tools need the reports:write, tickets:read, tickets:write, notes:read, notes:write and workspace:write scopes, which tokens created earlier do not have until you add them in Settings → API & MCP.
Arguments explained
period — a relative date range resolved on the server in your workspace timezone. Accepted values are today, yesterday, tomorrow, this_week, next_week, last_week, this_month, next_month. Defaults to this_week on most tools and this_month on list_holidays.
Prefer this over computing dates yourself. Models are unreliable at working out "next week" from today's date, and a wrong range produces a confident, wrong answer rather than an error.
from / to — explicit dates in YYYY-MM-DD format. When both are given they override period. Ranges longer than 366 days are truncated to 366.
agent_id — the numeric id of an agent, from list_agents. Ids are workspace-specific; never guess one. An id from another workspace is rejected.
active_only — true or false. Defaults to true, so inactive agents are excluded unless you ask for them.
min_agents — on find_coverage_gaps, the minimum number of agents on shift for an hour to count as covered. Defaults to 1. Set it to 2 to find hours with only single cover.
status — on list_leaves, one of pending, approved, rejected. On list_ot_events, one of draft, active, closed. On create_leave and update_leave_status, one of pending, approved, rejected. Omit to get everything.
group — on list_holidays, a holiday group code such as BD or PH; on create_holiday and update_holiday, a group code or all. Holiday groups are per-agent, so one workspace can run several national calendars at once. Omit for all groups.
date — a single date in YYYY-MM-DD format.
hour — an integer 0–23. On find_available_agents, omit it to check the whole day.
start_hour / end_hour — the schedule is hour-granular. start_hour is 0–23 and end_hour is exclusive, 1–24. A 09:00–17:00 shift is start_hour: 9, end_hour: 17.
Overnight shifts
A shift crossing midnight must be written as two calls: one ending at hour 24 on the first date, and one starting at hour 0 on the next. A 22:00–06:00 shift is {date: "2026-09-08", start_hour: 22, end_hour: 24} followed by {date: "2026-09-09", start_hour: 0, end_hour: 6}.
code — a holiday group code (letters, numbers, - or _), from list_holiday_groups. year — a four-digit year on the balance and preset tools (for set_leave_balance, 2000 to the current year plus 5); defaults to this year on get_leave_balances, get_my_leave and list_holiday_presets.
type — on create_leave, update_leave and request_leave, one of annual, sick, casual, maternity. Any other value is rejected.
is_ot — true or false. Marks the assigned hours as overtime. Defaults to false.
notes — free text on a shift or leave request. Redacted in the activity log.
event_id / leave_id / holiday_id — numeric ids from list_ot_events (or list_my_ot_events for members), list_leaves (or get_my_leave for members) and list_holidays respectively. submission_id comes from list_ot_submissions.
date or from / to on assign_shift and unassign_shift — give one date, or a from/to range of at most 62 days. assign_shift skips days the agent is on approved leave or has a public holiday and lists them in skipped and warnings; if every day is blocked the call is refused.
slots — on save_ot_availability, a list of {date, hours} where hours are integers 0–23 (9 means 09:00–10:00). submit — true sends it for review, false saves a draft.
max_slots_per_day / mandatory_dates — on the OT event tools. max_slots_per_day (1–24, default 8) is an advisory per-agent cap on OT hours per day: going over produces a warning, never a refusal. mandatory_dates are dates agents are asked to cover, also advisory.
days / confirm_regenerate — on set_schedule_template, days is exactly 7 entries of {day_of_week (0 = Sunday … 6 = Saturday), start_hour (0-23), end_hour (1-30; over 24 runs into the next day), is_working}. Without confirm_regenerate: true the call is refused, because saving rebuilds the roster.
agent_ids — a list of agent ids, on grant_ot_access and revoke_ot_access.
user_id — a team member's id, from list_team. Ids from another workspace are reported as not found.
role — on add_team_member and change_member_role, one of lead, manager, member, and below your own rank (owner > lead > manager > member). list_team returns assignable_roles, the roles you can give.
confirm_delete_history / confirm_delete_roster — on delete_agent and remove_team_member. Deleting an agent removes its roster, leave, OT and work report history. Without the flag set to boolean true (strings like "true" and 1 do not count) the call is refused with counts of what would be deleted: show them to the user and only repeat the call with the flag if they agree.
add_to_roster / agent_color / schedule_days — on add_team_member. Members always get a roster agent; leads and managers get one only when add_to_roster is true. schedule_days is exactly 7 entries of {day_of_week (0-6), start_hour, end_hour, is_working}.
holiday_group / office_days / off_days / slack_member_id — on create_agent and update_agent. holiday_group is a code from list_holiday_groups, the default bd (empty also means bd), or the agent's current group.
Integer ids — template_id, submission_id, ticket_id, notification_id, agent_id and the entries of agent_ids must be real JSON integers. A string such as "7" is rejected with a validation error.
answers — on submit_work_report, an object mapping each question id (from get_report_template) to its answer as a string. The server enforces the submit rules: the template must be active and assigned to your agent; work_date (default today) cannot be in the future or before the template's effective_from; editing an existing report for a past date needs allow_edit_past; required non-number questions need an answer; number, email and date answers must be valid; unknown question ids are rejected.
questions — on create_report_template and update_report_template, a list of {id, label, type, section, required, placeholder} with type one of number, text, textarea, email, date. On update the list replaces the existing one: pass the existing id to keep a question and its answers; questions you omit are deleted unless they have answers.
confirm_delete_submissions — on delete_report_template. Without boolean true the call is refused with the number of submissions that would be deleted. Show it to the user first.
template_id on silence tools — optional. Omit it to cover every template for that agent and date (the dashboard always does this).
from / to on get_missed_reports — default to the last 7 days (6 days ago to today). include_silenced also lists silenced days.
priority — on create_ticket, one of low, normal, high, urgent. status on list_tickets is one of open, in_progress, resolved, closed.
key / enabled — on set_module, a module key from list_modules and a boolean.
active — update_agent ignores active; use set_agent_active (which requires a boolean). Over REST, PATCH /agents/{id} does accept active, rank-checked like set_agent_active.
How results come back
Every tool returns JSON in a text content block, and the identical value as structuredContent for clients that read it. The two never disagree.
structuredContent is always a JSON object, never a bare array — that is what the MCP spec requires, and clients reject the whole response otherwise. Tools that return a collection wrap it under a named key alongside the resolved query, so you can see what was actually asked:
json
{
"from": "2026-09-07",
"to": "2026-10-07",
"group": "PH",
"holidays": [ … ],
"count": 3
}| Tool | Collection key |
|---|---|
list_agents | agents |
list_team | members (plus assignable_roles) |
list_leaves | leaves |
list_holidays | holidays |
list_holiday_groups | groups |
list_holiday_presets | presets |
get_leave_balances | balances |
list_ot_events | ot_events |
list_my_ot_events | ot_events |
find_available_agents | available_agents |
get_missed_reports | missed (plus missed_count, scheduled_count) |
list_report_templates | templates |
list_report_submissions | submissions |
list_tickets | tickets |
list_modules | modules |
get_schedule | days |
find_coverage_gaps | gaps |
Each also carries a count or equivalent total, so you can check whether a result is empty without walking the array.
get_ot_coverage returns one entry per date and hour: 24 one-hour slots per event day (slot_index equals the hour), each with its volunteers and count, plus uncovered_slots and max_slots_per_day_guideline — the advisory per-agent cap (default 8), not the number of slots.
find_coverage_gaps returns contiguous ranges rather than individual hours, so a six-hour hole reads as one gap and not six, along with an overall coverage_percent.
get_schedule collapses consecutive hours for the same agent into blocks, so an agent rostered 22:00–06:00 comes back as one entry rather than eight.
When a tool refuses
Write tools validate against the roster's own rules before changing anything, and refuse with an explanation rather than a generic error:
- Agent is on approved leave or has a public holiday —
assign_shiftskips those days and lists each one, with the reason, inwarnings; it refuses only when every day in the request is blocked, and then names the leave type and dates - Overlapping leave already exists —
create_leaveandrequest_leaverefuse and name the existing request - Cancelling a decided request —
cancel_leave_requestrefuses once a request is approved or rejected, and only works on your own requests - Group still has holidays —
delete_holiday_grouprefuses until its holidays are removed - Invalid hours — refuses and explains the overnight two-call rule
- Rank — you can only manage people ranked below you (owner > lead > manager > member), give roles below your own, and edit agents not linked to someone ranked at or above you; otherwise the call is refused with the rule that applied
- Needs confirmation —
delete_agentandremove_team_memberare refused with counts of what would be deleted until the confirm flag istrue - Your role does not allow it — for example a member calling
assign_shiftorapprove_ot_submissiondirectly is told they can't, and nothing is written - Module off — OT, leave, holiday and work report tools return
feature_unavailablewhen their module is off or not on the plan - Wrong state — for example activating a closed event, or deleting an event that is not a draft
Hours the agent is already rostered for are not a refusal: assign_shift updates them in place (setting is_ot and notes to the new values).
Refusals come back as tool errors (isError: true) with a readable message, not protocol errors, so the model can read the reason and pick a different agent instead of retrying blindly.
create_leave warns rather than refuses when the agent is already rostered during the requested dates — that is a real situation a human needs to resolve, not something to block.
Behaviour changes
Approving leave now updates the roster. create_leave with status: approved and update_leave_status to approved remove the agent from the roster for those days; un-approving, update_leave on approved leave and delete_leave put them back. Previously the MCP server changed the status only. Holiday writes update the roster the same way. list_leaves also now shows a member only their own leave. list_holidays affects_agents now lists every active agent for group: "all" holidays (previously it was empty).
get_missed_reports changed shape (breaking). It now returns a flat missed list (one entry per agent, template and date, with notified, silenced and dismissed), plus missed_count and scheduled_count. It defaults to the last 7 days, no longer takes period, accepts template_id and include_silenced, and members can use it for their own reports.
Agent and team management. create_agent, update_agent, set_agent_active, delete_agent and the team tools follow the same rank rules as the dashboard: managers manage members, leads manage managers and members, the owner manages everyone, and nobody changes the owner or their own role. The dashboard now enforces those rules too, and the agent limit follows the workspace owner's plan.
Security notes
- Every tool call is written to the activity log with the token, actor, parameters, status and duration. Free-text fields (
notes, leave reasons, report bodies) are redacted. - Tools are scoped to the token's single workspace. There is no tool that crosses workspaces.
- There is no tool that deletes workspaces, historical schedules or reports on their own. The most destructive available actions are
delete_agentandremove_team_member(both delete an agent's whole history and need an explicit confirm flag), replacing an agent's roster withset_schedule_template, unassigning shifts, deleting leave, holidays and empty holiday groups, and (owner and leads only) deleting OT submissions. - The server instructs models to confirm with you before any write. Treat that as a courtesy, not a control — the scope is the control.
FAQ
Why does the model not use a tool I know exists? Usually a scope issue — check tools/list output. If it is present but unused, phrase the request closer to the tool's description ("find coverage gaps next week" rather than "check the rota").
Can I add my own tools? Not yet. The tool set is fixed.
Does get_missed_reports count days an agent was not working? No. It only counts dates where the agent was actually rostered, after the shift ended, and skips holidays, approved leave and days before the template started. Silenced days are left out unless include_silenced is true; the admin tracker still counts them, so tracker totals equal missed_count with include_silenced=true.
What timezone are dates in? Your workspace timezone, set in workspace settings. period values are resolved against it server-side.
Related
- MCP server setup — connecting a client
- Connection scopes — what each scope permits
- REST API reference — the same data over plain HTTP