Skip to main content
Glama

Shift Scheduler

Server Details

Builds optimal 24/7 staff rosters with a real MILP solver: rest rules, skills, nights, fairness.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.6/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: build_shift_roster solves a roster, get_shift_example returns a single example input, get_shift_roster_result fetches an async result, and list_shift_examples enumerates available examples. No two tools overlap in function, so an agent can easily select the right one.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case: build_shift_roster, get_shift_example, get_shift_roster_result, list_shift_examples. The verbs (build, get, list) and nouns are predictable and uniformly structured.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose of generating shift rosters. It provides the essential operations (build, get example, list examples, fetch result) without unnecessary bloat or a thin surface.

Completeness5/5

The tool set covers the full workflow: discover examples (list_shift_examples), obtain a template (get_shift_example), submit a job (build_shift_roster), and retrieve the outcome (get_shift_roster_result). There are no obvious dead ends or missing lifecycle steps for the stated domain.

Available Tools

4 tools
build_shift_rosterBuild an optimized shift rosterA
Read-onlyIdempotent
Inspect

Solve a staff rostering problem to optimality with a MILP solver and return who works which shift each day, coverage, unfilled posts, hours per person and warnings. Solves take 5-60 s. Pass either example (to solve a built-in example as-is) or the roster input fields. If the result has status 'running', call get_shift_roster_result with its job_id. Roster input. Minimal example: {"days": ["2026-10-05", "2026-10-06"], "shifts": [{"shift": "Day", "start": "07:00", "end": "19:00"}, {"shift": "Night", "start": "19:00", "end": "07:00", "night": "yes"}], "demands": [{"name": "RN", "penalty": 500}], "people": [{"name": "Ana", "cost": 40, "max_hw": 48}, ...], "grids": {"RN": {"2026-10-05|Day": 2, "2026-10-05|Night": 1}}, "parameters": {"MinRestHours": 11}}. Call get_shift_example for complete, realistic inputs.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoDay labels in order: ISO dates ('2026-10-05') or weekday names ('Mon'). Dates or weekdays enable weekend rules.
gridsNoOptional per-day/shift cells, keyed by a demand name or a person name, each an object keyed 'DAY|SHIFT'. Demand grid value = headcount required (demand with no grid = 1 on every shift). Person grid value: 'a' or 1 = available, 'f' = must work, 0 or missing = UNAVAILABLE (person with no grid = available everywhere).
peopleNo
shiftsNoShift types. A shift may cross midnight (end < start).
skillsNoWho can cover which demand. Omitted = everyone can cover every demand.
demandsNoPosts to fill (roles). Headcount per day/shift goes in grids.
exampleNoSolve this built-in example instead of passing the fields below.
parametersNoOptional rules. MinRestHours (11), MaxConsecutiveDays (6), MaxConsecutiveNights (4), ForbidDayAfterNight ('yes'), NightStartsAfter ('18:00'), MinBlockDays (1), WeekendFairnessPenalty (0), EquityPenalty (0) = even out total hours, NightEquityPenalty (0) = even out total nights (try 20), NightDifferential (1.0), WeekendDifferential (1.0), TimeLimitSeconds (max 120 here), GapPercent (2).
wait_secondsNoHow long to wait for the solve inside this call (default 25).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context beyond annotations: solve duration (5-60 s), the asynchronous 'running' status, and the nature of the returned data. It does not address failure modes other than 'running', but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose, then timing, then usage modes. The inline JSON example is lengthy but earns its place given the complex nested schema. No sentence is wasted, though the example could arguably be trimmed or referenced rather than fully inlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and lack of an output schema, the description is quite complete: it states what the tool returns, how long it takes, how to handle async results, and how to get example inputs. It does not cover error scenarios beyond 'running', but the core invocation workflow is fully specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (89%), so the schema already documents most parameters. The description adds value beyond the schema by explaining the either/or input mode (`example` vs. the roster fields) and providing a minimal example that illustrates how days, shifts, demands, people, grids, and parameters combine. This helps an agent assemble correct input without reading every schema field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action ('Solve a staff rostering problem to optimality') and a clear resource ('a shift roster'), and it lists concrete outputs: who works which shift, coverage, unfilled posts, hours per person, and warnings. It also differentiates itself from siblings by telling the agent when to call get_shift_roster_result and get_shift_example.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the two input modes: pass `example` for a built-in case or pass the roster input fields. It also gives a clear conditional: if status is 'running', call get_shift_roster_result with its job_id, and points the agent to get_shift_example for realistic inputs. This is actionable and distinguishes the tool from its alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_shift_exampleGet an example roster inputA
Read-only
Inspect

Return the full input JSON of one example, in exactly the shape build_shift_roster accepts. Edit it (names, days, headcounts, rules) to match the user's situation.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoes = Spanish shift and post names.
nameYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, and the description adds useful behavioral context: the return value is a full input payload in build_shift_roster's exact shape, and it is meant to be edited before use. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The first sentence front-loads the exact behavior and output shape; the second gives actionable guidance. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is low-complexity, has read-only annotations, enum-only parameters, and no output schema. The description gives agents everything needed to call it correctly and understand what the response will be: one full example JSON shaped for build_shift_roster.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents both parameters with enums, and lang has its own description, so parameter meaning is mostly covered by structured data. The description does not add meaning to the name selector, though the enum values are self-explanatory. It adds editing guidance about fields inside the example, not about the parameters themselves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Return') and resource ('full input JSON of one example'), and it distinguishes the tool from siblings by explicitly tying the output shape to build_shift_roster. There is no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use it: when the agent needs a concrete, editable example to adapt for the user's situation. It does not explicitly mention when not to use it or contrast it with list_shift_examples, which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_shift_roster_resultGet a roster resultA
Read-only
Inspect

Fetch the result of a build_shift_roster job that returned status 'running'. Waits up to wait_seconds; call again while status is 'running'. Jobs expire 15 minutes after they finish.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
wait_secondsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds valuable behavioral details: it waits up to wait_seconds, requires repeated calls while status is 'running', and notes that jobs expire 15 minutes after finishing. These go beyond the annotations and inform the agent about timing and lifecycle, which is critical for a polling tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and scope. The polling behavior and expiration are stated succinctly. Every clause carries necessary information; there is no fluff or redundancy. It is highly efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a polling tool with two parameters and no output schema, the description covers the essential operational aspects: when to call, how long to wait, and the need to poll repeatedly. It also mentions expiration. The only missing element is error handling or failure behavior, but the tool's purpose is simple and the description provides enough context for an agent to use it correctly. Given the simplicity, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must clarify parameter meaning. It explains wait_seconds as the maximum wait duration and implies job_id is the identifier from a build_shift_roster call. This provides enough semantic grounding for both parameters. However, it does not specify the format or expected values of job_id, and the description could be more explicit about how wait_seconds interacts with the polling loop, but it is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('fetch') and a clear resource ('result of a build_shift_roster job'), and it explicitly narrows the scope to jobs that returned status 'running'. This differentiates it from siblings: build_shift_roster creates jobs, while get_shift_example and list_shift_examples deal with examples. The purpose is unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly specifies when to use the tool: when a build_shift_roster job is running, and it instructs to poll by calling again while the status remains 'running'. It does not explicitly name alternatives or when not to use it, but the condition is explicit enough. The absence of alternative references is a minor gap given the clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_shift_examplesList example rostersA
Read-only
Inspect

List the built-in example rostering problems (hospital ward, 3-shift plant, security post, fire station, 24/7 help desk). Use one as a starting point for the user's own roster.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so this is clearly a safe read-only operation. The description adds useful context about the built-in example set but does not disclose deeper behavioral details such as response shape or pagination, which are not required here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The core action and resource are front-loaded, and the example names plus intended use are packed efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool whose safety profile is fully covered by annotations, the description is complete. It tells the agent what is listed, names the examples, and explains why the agent should call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so the description carries no parameter-semantics burden. It still clarifies what content will be listed, which is helpful context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a clear resource ('built-in example rostering problems'), and enumerates the exact examples. It is easy to distinguish from siblings: get_shift_example is singular, while this lists all built-in examples.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: use one of these examples as a starting point for the user's own roster. It does not explicitly discuss when to prefer sibling tools, but the use case is well implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • First observedbuild_shift_roster
    • First observedget_shift_example
    • First observedget_shift_roster_result
    • First observedlist_shift_examples

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Generates legally-compliant weekly shift schedules for Korean workplaces through conversation, using OR-Tools CP-SAT to enforce labor laws such as the 52-hour weekly cap and minor worker protections.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables solving complex combinatorial optimization problems with logical and numerical constraints through multiple solvers (Z3, CVXPY, HiGHS, OR-Tools). Specializes in portfolio optimization, scheduling, resource allocation, and constraint satisfaction problems.
    5
    5
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Negotiation math engine for AI agents. Computes Pareto frontiers, generates iso-utility counteroffers, and infers counterpart priorities. 9 tools for any multi-issue negotiation. Zero LLM tokens — pure MILP optimization.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources