Schedule it MCP by usefulapi

Read Schedule it events, resources, groups and labels; create and update events and resources.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
97%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,874Tokens (tool definitions)
~2.6 KBTypical response size
Significant attention impact (3.81% of 128k context)

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": {
    "schedule-it": {
      "url": "https://schedule-it.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://schedule-it.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢scheduleit_list_events(fields, date_from, date_to, title, resource_ids, ...)

List scheduled events and tasks (bookings, shifts, jobs). Without date_from/date_to Schedule It uses its default date range. Schedule It returns only a short summary of each event unless you name the fields you want: pass `fields` such as id,title,date_start,date_end,owner,notes,completed,priority,custom1 (get_event returns ALL fields of one event). `owner` holds the ids of the resources (people, rooms, equipment) the event is linked to. There is no paging: the reply holds up to `limit` events (default 100), so narrow with the filters instead. Do not call this repeatedly to watch for changes (use modified_after to fetch only what changed). GET /api/events.

Input Schema

{
  "type": "object",
  "properties": {
    "fields": {
      "description": "Comma-separated fields to return, e.g. id,title,date_start,date_end,owner.",
      "type": "string",
      "maxLength": 500,
      "pattern": "^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$"
    },
    "date_from": {
      "description": "Events from this date (date_range_from).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "date_to": {
      "description": "Events up to this date (date_range_to).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "title": {
      "description": "Events whose title contains this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "resource_ids": {
      "description": "Only events linked to these resources (see resource_match).",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "resource_match": {
      "description": "With resource_ids: any = linked to at least one (default), all = linked to every one, none = linked to none of them.",
      "type": "string",
      "enum": [
        "any",
        "all",
        "none"
      ]
    },
    "event_ids": {
      "description": "Only these event ids.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "tasks_only": {
      "description": "true = only tasks, false = only events that are not tasks.",
      "type": "boolean"
    },
    "no_date_only": {
      "description": "true = only events with no date, false = only dated ones.",
      "type": "boolean"
    },
    "modified_after": {
      "description": "Only events added or changed after this date (yyyy-mm-dd) or date and time (yyyy-mm-dd hh:mm).",
      "type": "string"
    },
    "workspace_id": {
      "description": "Workspace id (Account Settings > Workspaces). Omit for the main workspace (id 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Most events to return, 1-1000 (default 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢scheduleit_get_event(event_id)

One event or task by id with ALL its fields (title, dates, linked resources, notes, completion, priority, custom fields). GET /api/events/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Schedule It event id."
    }
  },
  "required": [
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡scheduleit_create_event(title, resource_ids, date_start, date_end, notes, ...)

WRITE: create a new event (booking, shift, job or task) in the Schedule It account, optionally linked to resources. It becomes visible to everyone with access to the schedule, and Schedule It may notify the linked resources according to the account's own notification settings. Confirm the title, dates and resources with the user first. POST /api/events.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 250,
      "description": "Event title."
    },
    "resource_ids": {
      "description": "Resources (people, rooms, equipment) the event is linked to (the `owner` field). On update this REPLACES the whole list.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "date_start": {
      "description": "Start, yyyy-mm-dd hh:mm[:ss].",
      "type": "string"
    },
    "date_end": {
      "description": "End, yyyy-mm-dd hh:mm[:ss].",
      "type": "string"
    },
    "notes": {
      "description": "Notes. On update an empty string clears them.",
      "type": "string",
      "maxLength": 20000
    },
    "custom_fields": {
      "description": "Custom field values keyed custom1..custom9 (the account's custom field labels are set in Schedule It). An empty string clears a field.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "custom1",
          "custom2",
          "custom3",
          "custom4",
          "custom5",
          "custom6",
          "custom7",
          "custom8",
          "custom9"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 2000
      }
    },
    "completed": {
      "description": "Percent completed, 0-100.",
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "priority": {
      "description": "Priority number (Schedule It's priority scale).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "color_back": {
      "description": "Background colour, e.g. #FFFFFF.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "color_text": {
      "description": "Text colour, e.g. #66FF66.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    }
  },
  "required": [
    "title"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴scheduleit_update_event(event_id, title, resource_ids, date_start, date_end, ...)

WRITE: change fields of an existing event; only the fields you pass are changed, the rest stay as they are. Passing resource_ids replaces the whole list of linked resources; an empty string clears notes or a custom field. Changing dates or resources may notify people per the account's notification settings. POST /api/events/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Schedule It event id."
    },
    "title": {
      "description": "Event title.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "resource_ids": {
      "description": "Resources (people, rooms, equipment) the event is linked to (the `owner` field). On update this REPLACES the whole list.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "date_start": {
      "description": "Start, yyyy-mm-dd hh:mm[:ss].",
      "type": "string"
    },
    "date_end": {
      "description": "End, yyyy-mm-dd hh:mm[:ss].",
      "type": "string"
    },
    "notes": {
      "description": "Notes. On update an empty string clears them.",
      "type": "string",
      "maxLength": 20000
    },
    "custom_fields": {
      "description": "Custom field values keyed custom1..custom9 (the account's custom field labels are set in Schedule It). An empty string clears a field.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "custom1",
          "custom2",
          "custom3",
          "custom4",
          "custom5",
          "custom6",
          "custom7",
          "custom8",
          "custom9"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 2000
      }
    },
    "completed": {
      "description": "Percent completed, 0-100.",
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "priority": {
      "description": "Priority number (Schedule It's priority scale).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "color_back": {
      "description": "Background colour, e.g. #FFFFFF.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "color_text": {
      "description": "Text colour, e.g. #66FF66.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    }
  },
  "required": [
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴scheduleit_delete_event(event_id, confirm)

WRITE, DESTRUCTIVE: permanently delete one event or task. It cannot be undone through the API. Only call this when the user clearly asked for this event to be deleted. DELETE /api/events/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Schedule It event id to delete."
    },
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: the user confirmed this event should be permanently deleted."
    }
  },
  "required": [
    "event_id",
    "confirm"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢scheduleit_list_resources(fields, name, group_ids, resource_ids, modified_after, ...)

List resources: the people, rooms, equipment or vehicles that events are scheduled against. Schedule It returns only a short summary unless you pass `fields` (for example id,name,email,data1; get_resource returns ALL fields of one). Resources belong to groups (`owner` = group ids). There is no paging; the reply holds up to `limit` resources (default 100). GET /api/resources.

Input Schema

{
  "type": "object",
  "properties": {
    "fields": {
      "description": "Comma-separated fields to return, e.g. id,name,email.",
      "type": "string",
      "maxLength": 500,
      "pattern": "^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$"
    },
    "name": {
      "description": "Resources whose name contains this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "group_ids": {
      "description": "Only resources in these groups.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "resource_ids": {
      "description": "Only these resource ids.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "modified_after": {
      "description": "Only resources added or changed after this date (yyyy-mm-dd) or date and time (yyyy-mm-dd hh:mm).",
      "type": "string"
    },
    "workspace_id": {
      "description": "Workspace id (Account Settings > Workspaces). Omit for the main workspace (id 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Most resources to return, 1-1000 (default 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢scheduleit_get_resource(resource_id)

One resource by id with ALL its fields (name, email, groups, details 1-10, colours, skills). GET /api/resources/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "resource_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Schedule It resource id."
    }
  },
  "required": [
    "resource_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡scheduleit_create_resource(name, group_ids, email, details, color_back, ...)

WRITE: add a new resource (a person, room, piece of equipment) to the Schedule It account. It may count toward the account's licensed resources or users. Confirm the details with the user first. POST /api/resources.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 250,
      "description": "Resource name."
    },
    "group_ids": {
      "description": "Groups the resource belongs to (the `owner` field). On update this REPLACES the whole list.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "email": {
      "description": "Email address of the resource (an empty string clears it on update).",
      "type": "string",
      "maxLength": 250
    },
    "details": {
      "description": "Detail values keyed data1..data10 (for example data1 = job title; the labels are set in Schedule It). An empty string clears a field.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "data1",
          "data2",
          "data3",
          "data4",
          "data5",
          "data6",
          "data7",
          "data8",
          "data9",
          "data10"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 2000
      }
    },
    "color_back": {
      "description": "Resource background colour, e.g. #A9F5A9.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "color_text": {
      "description": "Resource text colour.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "color_event_back": {
      "description": "Background colour of this resource's events.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴scheduleit_update_resource(resource_id, name, group_ids, email, details, ...)

WRITE: change fields of an existing resource; only the fields you pass are changed. Passing group_ids replaces the whole list of groups; an empty string clears email or a detail field. POST /api/resources/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "resource_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Schedule It resource id."
    },
    "name": {
      "description": "Resource name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "group_ids": {
      "description": "Groups the resource belongs to (the `owner` field). On update this REPLACES the whole list.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "email": {
      "description": "Email address of the resource (an empty string clears it on update).",
      "type": "string",
      "maxLength": 250
    },
    "details": {
      "description": "Detail values keyed data1..data10 (for example data1 = job title; the labels are set in Schedule It). An empty string clears a field.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "data1",
          "data2",
          "data3",
          "data4",
          "data5",
          "data6",
          "data7",
          "data8",
          "data9",
          "data10"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 2000
      }
    },
    "color_back": {
      "description": "Resource background colour, e.g. #A9F5A9.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "color_text": {
      "description": "Resource text colour.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "color_event_back": {
      "description": "Background colour of this resource's events.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    }
  },
  "required": [
    "resource_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢scheduleit_list_groups(fields, name, group_ids, workspace_id, limit)

List resource groups (the categories resources are organised in, e.g. Staff, Rooms, Vehicles). Pass `fields` (e.g. id,name) for more than the short summary. GET /api/groups.

Input Schema

{
  "type": "object",
  "properties": {
    "fields": {
      "description": "Comma-separated fields to return, e.g. id,name.",
      "type": "string",
      "maxLength": 500,
      "pattern": "^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$"
    },
    "name": {
      "description": "Groups whose name contains this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "group_ids": {
      "description": "Only these group ids.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "workspace_id": {
      "description": "Workspace id (Account Settings > Workspaces). Omit for the main workspace (id 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Most groups to return, 1-1000 (default 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢scheduleit_get_group(group_id)

One resource group by id with ALL its fields. GET /api/groups/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Schedule It group id."
    }
  },
  "required": [
    "group_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡scheduleit_create_group(name, color_back, position, min_resources, max_resources, ...)

WRITE: add a new resource group to the Schedule It account. POST /api/groups.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 250,
      "description": "Group name."
    },
    "color_back": {
      "description": "Group colour, e.g. #66FF66.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "position": {
      "description": "Position of the group in the schedule (positionv).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "min_resources": {
      "description": "Fewest resources an event needs from this group (0 = no minimum).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "max_resources": {
      "description": "Most resources an event can use from this group (0 = no limit).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "hide_from_main": {
      "description": "Hide the group from the main schedule view.",
      "type": "boolean"
    },
    "hide_from_event": {
      "description": "Hide the group from the event form.",
      "type": "boolean"
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴scheduleit_update_group(group_id, name, color_back, position, min_resources, ...)

WRITE: change fields of an existing resource group; only the fields you pass are changed. POST /api/groups/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Schedule It group id."
    },
    "name": {
      "description": "Group name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 250
    },
    "color_back": {
      "description": "Group colour, e.g. #66FF66.",
      "type": "string",
      "pattern": "^#[0-9A-Fa-f]{6}$"
    },
    "position": {
      "description": "Position of the group in the schedule (positionv).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "min_resources": {
      "description": "Fewest resources an event needs from this group (0 = no minimum).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "max_resources": {
      "description": "Most resources an event can use from this group (0 = no limit).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "hide_from_main": {
      "description": "Hide the group from the main schedule view.",
      "type": "boolean"
    },
    "hide_from_event": {
      "description": "Hide the group from the event form.",
      "type": "boolean"
    }
  },
  "required": [
    "group_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢scheduleit_list_labels(fields, limit)

List the labels that can be put on events (for example Confirmed, Urgent). Pass `fields` (e.g. id,name) for more than the short summary. GET /api/labels.

Input Schema

{
  "type": "object",
  "properties": {
    "fields": {
      "description": "Comma-separated fields to return, e.g. id,name.",
      "type": "string",
      "maxLength": 500,
      "pattern": "^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$"
    },
    "limit": {
      "description": "Most labels to return, 1-1000 (default 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢scheduleit_list_label_groups(fields, limit)

List label groups (the categories that labels are organised in). Pass `fields` (e.g. id,name) for more than the short summary. GET /api/labelgroups.

Input Schema

{
  "type": "object",
  "properties": {
    "fields": {
      "description": "Comma-separated fields to return, e.g. id,name.",
      "type": "string",
      "maxLength": 500,
      "pattern": "^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$"
    },
    "limit": {
      "description": "Most label groups to return, 1-1000 (default 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools