{
  "slug": "shift-scheduler",
  "mcpServerUrl": "https://plugins-worker.demos.42a.ai/shift-scheduler/mcp",
  "interface": {
    "displayName": "Handy Shift Schedule Maker",
    "shortDescription": "Fair rosters that keep rules",
    "longDescription": "Build a week's staff schedule from your shifts and your team's availability, with every rule kept and every gap reported.\n\nDescribe the shifts (\"Open 6 to 2 needs 2 people, Close 2 to 10 needs 1, every day\") and the team (maximum and minimum hours, days or times they can't work, preferred shifts, roles like manager or RN). The scheduler fills the hardest shifts first, spreads hours fairly against each person's maximum, honours preferences when it can, and never breaks a hard rule: one shift per person per day, a minimum rest between shifts (10 hours by default, so no close-then-open), a limit on days in a row, availability and roles. Anything it cannot fill is listed with the reason (everyone left is unavailable, at their hours limit, and so on), so you know exactly whom to ask.\n\nThe card shows the roster grid and everyone's hours. Download it as an Excel roster, a printable PDF, or a calendar file with every shift. The same input always gives the same schedule. Nothing is stored.",
    "category": "Business & Operations",
    "defaultPrompt": [
      "Make a schedule for my café next week: Open 6-2 needs 2, Close 2-10 needs 1, every day. Staff: Ana 40h, Ben 40h, Cara 32h…",
      "Schedule 5 nurses on 12-hour day and night shifts this weekend, 2 per shift",
      "Build a fair weekly rota for 4 people, nobody works more than 5 days in a row"
    ],
    "capabilities": [
      "Fills shifts fairly against each person's maximum hours",
      "Respects availability, time-off windows, roles and preferences",
      "Minimum rest between shifts and a limit on days in a row",
      "Reports every unfilled shift with the reason",
      "Roster grid and hours per person",
      "Excel roster, printable PDF and calendar (.ics) downloads"
    ],
    "logo": "https://plugins-worker.demos.42a.ai/shift-scheduler/icon.svg",
    "websiteURL": "https://plugins-worker.demos.42a.ai/shift-scheduler/",
    "supportURL": "https://plugins-worker.demos.42a.ai/support",
    "privacyPolicyURL": "https://plugins-worker.demos.42a.ai/privacy",
    "termsOfServiceURL": "https://plugins-worker.demos.42a.ai/terms",
    "developerName": "42a"
  },
  "keywords": [
    "shift schedule maker",
    "employee schedule",
    "make a staff rota",
    "weekly work schedule",
    "roster generator",
    "schedule my employees",
    "shift planner",
    "nurse shift schedule"
  ],
  "tools": [
    {
      "name": "make_shift_schedule",
      "title": "Make a shift schedule",
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      }
    }
  ],
  "dataSources": [],
  "review": {
    "positiveTestCases": [
      {
        "description": "A café week, everything filled",
        "prompt": "Make a schedule for my café for the week of Oct 5: Open 6am-2pm needs 2 people, Close 2pm-10pm needs 1, every day. Staff: Ana 40h, Ben 40h, Cara 32h (not Sundays), Dev 32h (no weekends), Eli 24h (prefers closing), Fran 16h.",
        "tools_triggered": [
          "make_shift_schedule"
        ],
        "expected_behavior": "Hero \"21 of 21 shifts filled\" (168 hours); Eli gets only Close shifts as preferred; nobody over their maximum, no close followed by an open, Cara off Sunday and Dev off the weekend; Excel, PDF and calendar downloads."
      },
      {
        "description": "Short-staffed: gaps reported, not hidden",
        "prompt": "Schedule 3 people (40h max each) on Morning 7-3 and Evening 3-11, 2 people per shift, Monday to Sunday starting Oct 12.",
        "tools_triggered": [
          "make_shift_schedule"
        ],
        "expected_behavior": "15 of 28 shifts filled (each person 5 shifts, 40 h); the 13 open slots are listed with the reason (everyone is at their maximum hours or already working that day)."
      },
      {
        "description": "12-hour nursing shifts with an overnight",
        "prompt": "Schedule 5 RNs for Fri Oct 9 to Sun Oct 11: Day 7am-7pm and Night 7pm-7am, 2 RNs each. Max 36 hours each. Priya can't do nights.",
        "tools_triggered": [
          "make_shift_schedule"
        ],
        "expected_behavior": "All 12 shifts filled (144 h), nobody over 36 h, Priya only on Day shifts, and no one goes from a Night (ending 7 AM) straight into a Day shift."
      },
      {
        "description": "Preferences and a part-timer's minimum",
        "prompt": "Weekday schedule for Oct 5-9: Front 9-5 needs 1, Phones 12-8 needs 1. Tom prefers Front, Uma prefers Phones, Val is part-time and needs at least 16 hours, max 24.",
        "tools_triggered": [
          "make_shift_schedule"
        ],
        "expected_behavior": "All 10 shifts filled; Val gets at least 16 hours; Tom works only Front and Uma only Phones."
      },
      {
        "description": "Time-window availability",
        "prompt": "Make next week's schedule (from Oct 12): Open 7-3 and Close 3-11, 1 person each, every day. Sam can't work before noon on weekdays. Team: Sam, Tia, Ugo, each max 40h.",
        "tools_triggered": [
          "make_shift_schedule"
        ],
        "expected_behavior": "All 14 shifts filled; Sam never opens on a weekday; nobody exceeds 40 h."
      }
    ],
    "negativeTestCases": [
      {
        "prompt": "I worked 8:30 to 5 with a 30 minute lunch, how many hours is that?",
        "expected_behavior": "Does not call Handy Shift Schedule Maker: Adding up hours already worked is a time card, not building a schedule."
      },
      {
        "prompt": "Find a time for a meeting with my team in London and New York.",
        "expected_behavior": "Does not call Handy Shift Schedule Maker: A meeting across time zones, not a staff roster."
      },
      {
        "prompt": "Write a polite message asking my team for their availability next week.",
        "expected_behavior": "Does not call Handy Shift Schedule Maker: Writing a message needs no scheduling."
      }
    ]
  }
}