Homebase MCP by usefulapi
Read Homebase locations, employees, shifts, timecards, labor costs and time clock status.
Should I use this
Quality & Safety
Findings (1)
- LOWin homebase_list_deleted_timecards
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"homebase": {
"url": "https://homebase.usefulapi.io/mcp"
}
}
}Remote endpoints
https://homebase.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (16)
🟢homebase_get_company
The Homebase company this API key belongs to: name, owner (id, name, email, phone) and created/updated times. GET /company.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_list_locations
List the locations (stores or sites) of the account with uuid, name, address, phone, website and time zone. The uuid is the id every other Homebase tool needs. GET /locations.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_location(location_uuid)
One location by uuid: name, address, phone, website, time zone and POS merchant id. GET /locations/{location_uuid}.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
}
},
"required": [
"location_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_location_plan(location_uuid)
The Homebase subscription plan of a location: plan number, price, last update and trial state. GET /locations/{location_uuid}/plan.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
}
},
"required": [
"location_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_list_employees(location_uuid, with_archived, page, per_page)
List the employees of a location with contact details and their job: level, default role, additional roles, wage type and rate, payroll id and archive date. The time-clock PIN is never returned. GET /locations/{location_uuid}/employees.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"with_archived": {
"description": "Include archived employees (default false).",
"type": "boolean"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"location_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_employee(location_uuid, employee_id, with_archived)
One employee of a location by user id, with contact details and job (role, wage type and rate, payroll id). The id is the job's user id from homebase_list_employees. GET /locations/{location_uuid}/employees/{id}.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"employee_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Homebase user id of the employee."
},
"with_archived": {
"description": "Also find an archived employee (default false).",
"type": "boolean"
}
},
"required": [
"location_uuid",
"employee_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_list_shifts(location_uuid, start_date, end_date, open, with_note, ...)
List the scheduled shifts of a location in a date range: employee, role, department, start and end, published/open state, wage rate and scheduled labor hours (regular, overtime). Filter open shifts only. GET /locations/{location_uuid}/shifts.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"start_date": {
"type": "string",
"description": "Start of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"end_date": {
"type": "string",
"description": "End of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"open": {
"description": "Only open shifts that any employee can claim.",
"type": "boolean"
},
"with_note": {
"description": "Include the shift note.",
"type": "boolean"
},
"date_filter": {
"description": "Which shift time the range applies to (default start_at).",
"type": "string",
"enum": [
"start_at",
"end_at",
"created_at",
"updated_at"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"location_uuid",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_shift(location_uuid, shift_id, with_note)
One shift of a location by id, with its labor data and optional note. GET /locations/{location_uuid}/shifts/{id}.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"shift_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Homebase shift id."
},
"with_note": {
"description": "Include the shift note.",
"type": "boolean"
}
},
"required": [
"location_uuid",
"shift_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_list_deleted_shifts(location_uuid, start_date, end_date, page, per_page)
The ids of shifts deleted in a date range at a location, with their start, end and deletion time. Use it to keep a copy of the schedule in sync. GET /locations/{location_uuid}/shifts/deleted.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"start_date": {
"type": "string",
"description": "Start of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"end_date": {
"type": "string",
"description": "End of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"location_uuid",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_list_timecards(location_uuid, start_date, end_date, date_filter, page, ...)
List the timecards (worked time) of a location in a date range: employee, role, clock in and out, breaks, hours, labor cost, tips and approval state. Time-off hours are always 0 on timecards; use homebase_get_labor_by_employee for totals with time off. GET /locations/{location_uuid}/timecards.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"start_date": {
"type": "string",
"description": "Start of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"end_date": {
"type": "string",
"description": "End of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"date_filter": {
"description": "Which timecard time the range applies to (default clock_in).",
"type": "string",
"enum": [
"clock_in",
"clock_out",
"created_at",
"updated_at"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"location_uuid",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_timecard(location_uuid, timecard_id)
One timecard of a location by id: clock in and out, breaks, labor hours and cost, tips, approval state. GET /locations/{location_uuid}/timecards/{id}.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"timecard_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Homebase timecard id."
}
},
"required": [
"location_uuid",
"timecard_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_list_deleted_timecards(location_uuid, start_date, end_date, page, per_page)
The ids of timecards deleted in a date range at a location, with clock in, clock out and deletion time. Use it to keep a copy of the timecards in sync. GET /locations/{location_uuid}/timecards/deleted.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"start_date": {
"type": "string",
"description": "Start of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"end_date": {
"type": "string",
"description": "End of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"location_uuid",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_labor(location_uuid, start_date, end_date, group_by)
Aggregate labor for a location in a date range, grouped by day or by hour: regular, overtime and paid hours, labor cost, tips, breaks and time off. GET /locations/{location_uuid}/labor.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"start_date": {
"type": "string",
"description": "Start of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"end_date": {
"type": "string",
"description": "End of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"group_by": {
"description": "Group the totals by day (default) or by hour.",
"type": "string",
"enum": [
"day",
"hour"
]
}
},
"required": [
"location_uuid",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_labor_by_role(location_uuid, start_date, end_date)
Aggregate labor (hours, cost, tips, overtime) for a location in a date range, grouped by role. GET /locations/{location_uuid}/labor/by_role.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"start_date": {
"type": "string",
"description": "Start of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"end_date": {
"type": "string",
"description": "End of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
}
},
"required": [
"location_uuid",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_labor_by_employee(location_uuid, start_date, end_date)
Aggregate labor (hours, cost, wage rate, tips, overtime, time off) for a location in a date range, grouped by employee. Use it for payroll totals. GET /locations/{location_uuid}/labor/by_employee.
Input Schema
{
"type": "object",
"properties": {
"location_uuid": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{1,64}$",
"description": "Homebase location uuid (from homebase_list_locations)."
},
"start_date": {
"type": "string",
"description": "Start of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
},
"end_date": {
"type": "string",
"description": "End of the range. ISO 8601: a date (2026-10-01) or a date-time with timezone (2026-10-01T09:00:00-05:00)."
}
},
"required": [
"location_uuid",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢homebase_get_timeclock_status(job_id)
The current time-clock state of one job (employee at a location): clocked_in, on_break or clocked_out, the current shift, the shifts that can be clocked into and the breaks that can be started. The job id is the `job.id` of an employee from homebase_list_employees. GET /timeclock/status.
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Homebase job id (`job.id` on an employee)."
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence