get_team_utilization
What it answers
Get named hours, capacity and utilization per person and role category. Optional unit is months (default) or weeks. Full availableRange is returned even when no rows match. Required real YYYY-MM-DD range.from/range.to dates select inclusive containing months (default) or Monday-start weeks. Sort by Employee Name (default) or Role Category. At most 500 served rows with explicit truncation. No compensation. availableRange spans all served period starts even when the selected range has no rows, or is null when none exist. Read definitions, caveats and truncation before interpreting figures. Decimal strings preserve served numeric figures; they do not recover precision previously lost by a report. Read parakeeto://methodology for shared response conventions and INVALID_ARGUMENT guidance.
Read-only.
Arguments
| Argument | Type | Required | Default | Allowed values |
|---|---|---|---|---|
account |
string (uuid) | no | — | — |
includeDefinitions |
boolean | no | true |
— |
range |
object | yes | — | — |
range.from |
string | yes | — | pattern ^\d{4}-\d{2}-\d{2}$ |
range.to |
string | yes | — | pattern ^\d{4}-\d{2}-\d{2}$ |
unit |
string | no | "months" |
"months", "weeks" |
sortBy |
string | no | "Employee Name" |
"Employee Name", "Role Category" |
Returned fields
The result is an envelope: ok: true with data, or ok: false with error. Error codes: MODEL_CALCULATOR_ACCESS_REQUIRED, PAYROLL_GRID_MISSING, PAYROLL_GRID_REQUIRED, PROJECT_GRID_REQUIRED, EXPENSE_GRID_REQUIRED, PAYROLL_ENTRY_REFERENCE_STALE, ACCOUNT_NOT_FOUND, ACCOUNT_CONFIGURATION_MISSING, NO_IMPORTED_TIME, NOTHING_IMPORTED, ACCOUNT_REQUIRED, NO_REACHABLE_ACCOUNTS, FEATURE_NOT_ENTITLED, PERMISSION_DENIED, CALCULATION_FAILED, INTERNAL_ERROR, INVALID_ARGUMENT.
data: objectdata.account: string (uuid)data.unit: string ("months","weeks")data.definitions: object, optionaldata.definitions.grossCapacity: stringdata.definitions.deliveryCapacity: stringdata.definitions.deliveryHours: stringdata.definitions.targetUtilization: stringdata.definitions.utilization: stringdata.definitions.annualDaysBasis: stringdata.definitions.range: stringdata.definitions.qualifications: stringdata.definitions.presentation: string
data.annualDays: string (pattern^-?\d+(?:\.\d+)?$)data.freshness: array of objectdata.freshness[].source: string ("time-entries","role-task-mappings","annual-days","dashboard-inputs")data.freshness[].everCompleted: booleandata.freshness[].completedAt: string (date-time) or null
data.gridFreshness: array of objectdata.gridFreshness[].kind: string ("payroll","expense","project")data.gridFreshness[].gridId: string (uuid)data.gridFreshness[].name: stringdata.gridFreshness[].storage: string ("sheet","database")data.gridFreshness[].sheetRefreshedAt: string (date-time) or null
data.caveats: array of object- One of:
- Variant 1 (
codeis"omission"):data.caveats[].code: string ("omission")data.caveats[].source: string ("payroll","time")data.caveats[].employeeName: string, optionaldata.caveats[].rowPosition: integer (exclusiveMinimum: 0)data.caveats[].message: string
- Variant 2 (
codeis"allocation-mismatch"):data.caveats[].code: string ("allocation-mismatch")data.caveats[].employeeName: stringdata.caveats[].startDate: string or null (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].weeklyHours: string (pattern^-?\d+(?:\.\d+)?$)data.caveats[].targetHoursSum: string (pattern^-?\d+(?:\.\d+)?$)data.caveats[].message: string
- Variant 3 (
codeis"data-condition",idis"payroll-duplicate-start-date-double-count"):data.caveats[].code: string ("data-condition")data.caveats[].id: string ("payroll-duplicate-start-date-double-count")data.caveats[].rowCount: integer (exclusiveMinimum: 0)data.caveats[].employeeName: stringdata.caveats[].startDate: string (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].roleCategories: array of stringdata.caveats[].latestPeriod: string, optional (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].periods: array of object, optionaldata.caveats[].periods[].date: string (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].periods[].roles: array of stringdata.caveats[].periods[].rollingRoles: array of stringdata.caveats[].periods[].overall: booleandata.caveats[].periods[].rollingOverall: boolean
data.caveats[].teamRoles: array of string, optionaldata.caveats[].message: string
- Variant 1 (
- One of:
data.availableRange: object or nulldata.availableRange.from: string (pattern^\d{4}-\d{2}-\d{2}$)data.availableRange.to: string (pattern^\d{4}-\d{2}-\d{2}$)
data.from: string (pattern^\d{4}-\d{2}-\d{2}$)data.to: string (pattern^\d{4}-\d{2}-\d{2}$)data.sortBy: string ("Employee Name","Role Category")data.rows: array of objectdata.rows[].grossCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.rows[].deliveryCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.rows[].deliveryHours: string (pattern^-?\d+(?:\.\d+)?$)data.rows[].targetUtilization: string (pattern^-?\d+(?:\.\d+)?$)data.rows[].utilization: string (pattern^-?\d+(?:\.\d+)?$)data.rows[].employeeName: stringdata.rows[].roleCategory: string
data.truncation: objectdata.truncation.limit: number (500)data.truncation.totalRows: integer (minimum: 0)data.truncation.returnedRows: integer (minimum: 0)data.truncation.omittedRows: integer (minimum: 0)data.truncation.message: string or null
On failure:
error: objecterror.code: string ("MODEL_CALCULATOR_ACCESS_REQUIRED","PAYROLL_GRID_MISSING","PAYROLL_GRID_REQUIRED","PROJECT_GRID_REQUIRED","EXPENSE_GRID_REQUIRED","PAYROLL_ENTRY_REFERENCE_STALE","ACCOUNT_NOT_FOUND","ACCOUNT_CONFIGURATION_MISSING","NO_IMPORTED_TIME","NOTHING_IMPORTED","ACCOUNT_REQUIRED","NO_REACHABLE_ACCOUNTS","FEATURE_NOT_ENTITLED","PERMISSION_DENIED","CALCULATION_FAILED","INTERNAL_ERROR","INVALID_ARGUMENT")error.argument: string, optional (minLength: 1)error.message: stringerror.accounts: array of object, optionalerror.accounts[].id: string (uuid)error.accounts[].name: string
error.payrollGrids: array of object, optionalerror.payrollGrids[]: same shape aserror.accounts[]
error.projectGrids: array of object, optionalerror.projectGrids[]: same shape aserror.accounts[]
error.expenseGrids: array of object, optionalerror.expenseGrids[]: same shape aserror.accounts[]
error.context: object, optionalerror.context.account: object- Further fields: see the response.
error.context.imports: array of object- Further fields: see the response.
error.context.hasTimeEntries: booleanerror.context.reports: array of object- Further fields: see the response.
Definitions
Returned in definitions when includeDefinitions is true (the default). Each value is the definition text for that field.
grossCapacitydeliveryCapacitydeliveryHourstargetUtilizationutilizationannualDaysBasisrangequalificationspresentation
Caveats
omission. Also carriessource,employeeName,rowPosition.allocation-mismatch. Also carriesemployeeName,startDate,weeklyHours,targetHoursSum.data-condition. Also carriesid,rowCount,employeeName,startDate,roleCategories,latestPeriod,periods,teamRoles.
Read every caveat before interpreting a figure. See methodology on how to communicate caveats and data-quality conditions.
Example call
{
"name": "get_team_utilization",
"arguments": {
"range": {
"from": "2026-01-01",
"to": "2026-12-31"
}
}
}
Add account with an identifier from list_accounts; omit it only when the connection reaches exactly one account.
Questions and answers
What does get_team_utilization answer?
Get named hours, capacity and utilization per person and role category. Optional unit is months (default) or weeks. Full availableRange is returned even when no rows match. Required real YYYY-MM-DD range.from/range.to dates select inclusive containing months (default) or Monday-start weeks. Sort by Employee Name (default) or Role Category. At most 500 served rows with explicit truncation. No compensation. availableRange spans all served period starts even when the selected range has no rows, or is null when none exist. Read definitions, caveats and truncation before interpreting figures. Decimal strings preserve served numeric figures; they do not recover precision previously lost by a report. Read parakeeto://methodology for shared response conventions and INVALID_ARGUMENT guidance.
Which arguments does get_team_utilization accept?
Argument Type Required Default Allowed values account string (uuid) no — — includeDefinitions boolean no true — range object yes — — range.from string yes — pattern ^\d{4}-\d{2}-\d{2}$ range.to string yes — pattern ^\d{4}-\d{2}-\d{2}$ unit string no "months" "months", "weeks" sortBy string no "Employee Name" "Employee Name", "Role Category"
What does get_team_utilization return?
The result is an envelope: ok: true with data, or ok: false with error.