Open-source staff scheduling: skills matching, shifts, certifications. Self-hostable, MCP-native.
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally
This server runs on your machine over stdio, but its source registry didn't list a distribution package. Check the source repository for setup instructions.
Staff scheduling your AI agent can operate directly. Senzii is an open-source (Apache-2.0) scheduling platform: tag-based skills matching, shift assignment with conflict detection, certification tracking, proximity ranking, and client staffing requests — exposed as MCP tools for Claude, ChatGPT, or any MCP-compatible client.
The MCP server ships inside this repo and shares the app's PostgreSQL schema — it is the scheduling engine's agent interface, not a generic database connector.
28 tools covering the full scheduling workflow:
| Area | Tools |
|---|---|
| Staff | list_staff get_staff create_staff delete_staff set_staff_availability add_staff_certification |
| Matching | find_candidates — rank staff for a shift by tags/certifications, proximity, availability |
| Shifts & assignments | list_shifts create_assignment unassign_assignment list_assignments delete_shift |
| Clients | list_clients create_client send_client_magic_link send_staff_magic_link |
| Staffing requests | list_staffing_requests create_staffing_request convert_staffing_request cancel_staffing_request |
| Certifications | list_certifications create_certification update_certification delete_certification |
| Work sites | list_work_sites create_work_site |
| Admin | get_org_metrics run_sql (platform-operator / super-only, SELECT-only) |
Every tool is scoped to the authenticated organization — the org ID is injected server-side into every query, so cross-org data access is impossible. Assignments are created pending by design: the agent proposes, a human confirms before the schedule goes live. That is a deliberate safety choice for regulated industries, not a limitation.
| Component | Required? | Notes |
|---|---|---|
| PostgreSQL | Yes | Any instance works — Neon free tier is fine |
| Geocoding | Free by default | Public OpenStreetMap/Nominatim, no key (set a User-Agent per their usage policy) |
| Email (Resend) | Optional | API key only if you want email notifications |
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # set DATABASE_URL and SESSION_SECRET (generate: python -c "import secrets; print(secrets.token_urlsafe(48))"); add RESEND_API_KEY only for email features
uvicorn app.main:app --host 0.0.0.0 --port 3000 --reload
MCP server:
python -m mcp_server.main
Tool definitions live in mcp_server/tools/tools.toml — add or modify
tools by editing the TOML and their handlers under mcp_server/tools/.
app/
main.py — FastAPI app, all routers wired
config.py — Environment configuration
db/ — Database layer (asyncpg pool, migrations, queries)
models/ — Pydantic schemas
middleware/ — Auth session extraction, rate limiting
routes/ — FastAPI routers (1:1 with Rust routes)
services/ — Email (Resend), Geocoding (Nominatim)
mcp_server/ — MCP server (Python MCP SDK), tools defined in tools.toml
static/ — App HTML/CSS/JS (login, dashboards, portals, SEO pages)
The marketing/landing site is a separate repo (Senzii-App/site) served from
Vercel at senzii.com. app.senzii.com serves only the app: GET / is the
sign-in page.
Two targets, one CLI (see infra/README.md for full docs):
./infra/deploy.sh azure <flags...> # deploy to Azure (VMSS / staging VM)
./infra/deploy.sh linode <flags...> # deploy to Linode backends
./infra/deploy.sh help # list providers & flags
Open-source. See LICENSE.