The provider-neutral Model Context Protocol (MCP) integration layer for public UTM campus intelligence and explicitly delegated Gapwise student context.
Next.js · TypeScript · MCP · OAuth · Supabase · Node · Vercel
Gapwise AI is the provider-neutral AI integration layer of Gapwise, a campus-intelligence ecosystem created and engineered by Andrew Muratov.
The main gapwise platform owns canonical student state and deterministic campus calculations. Gapwise AI exposes a narrow remote MCP interface to that truth rather than becoming a second timetable, routing, or planning engine.
Gapwise owns the facts. Connected AI clients reason over deterministic public campus data and explicitly delegated private context.
There is no server-side LLM provider required by this repository. Compatible MCP clients supply the model/reasoning layer. Gapwise AI supplies schemas, deterministic context, authorization for private tools, and bounded mutation semantics.
Canonical endpoint:
https://ai.gapwise.ca/api/mcp
The release surface contains 17 tools.
These four tools require no private Gapwise account context:
list_utm_buildingsget_utm_buildingroute_between_utm_buildingsplan_utm_gap_window
They operate on deterministic public Gapwise campus data and never read a student's timetable, friends, precise location, or private sync state.
Nine tools operate only on the connected user's explicitly delegated context:
get_ai_delegation_statusget_my_dayget_my_weekget_my_gap_planget_my_ai_preferencesget_my_decision_contextfind_my_available_windowsfind_my_weekly_opportunitiescheck_my_plan_feasibility
Four tools can queue bounded user-authorized changes:
create_personal_itemupdate_personal_itemdelete_personal_itemupdate_gap_preferences
Academic meetings remain source-backed and cannot be created, edited, or deleted by an AI client. Personal-item/preference writes are typed, permission-checked, revision-bound, idempotency-bounded, and queued for Gapwise rather than granting an assistant arbitrary access to canonical encrypted state.
For the exact behavioral contract, see docs/TOOL_CONTRACT.md.
public campus request
MCP client ------------------------------------------+
|
v
Gapwise AI
|
v
deterministic Gapwise campus API
Gapwise browser / platform
canonical timetable + deterministic campus state
|
| explicit minimized delegation
v
Gapwise AI
OAuth + MCP boundary
|
encrypted snapshot / queued action
v
Supabase Postgres
^
|
user-scoped OAuth token
|
MCP client
Private delegated data excludes raw ACORN .ics, friend data, precise/live location, account credentials, primary private-data encryption keys, and unrelated browser state. Delegated snapshots and queued actions use a separate encryption domain at rest. This is not represented as zero-knowledge encryption: authorized plaintext exists transiently during an authorized tool request.
OAuth protected-resource metadata is published at the same first-party origin. Public tools intentionally carry no private OAuth requirement; private tools require the canonical resource-bound Gapwise OAuth flow and the relevant explicit delegation permission.
The server is intentionally provider-neutral. ChatGPT, Claude, and other compatible clients consume the same tools, schemas, and Gapwise authorization semantics.
Named-client support is evidence-gated. Gapwise does not describe ChatGPT or Claude as production-supported until the exact current client surface has passed the real OAuth/read/write/revoke and negative-path matrix in docs/CLIENT_VALIDATION.md.
The directory-review package is maintained in:
docs/DIRECTORY_METADATA.mddocs/REVIEWER_GUIDE.mddocs/TEST_ACCOUNT_SPEC.mddocs/SUBMISSION_CHECKLIST.mddocs/RELEASE_RUNBOOK.md
Gapwise AI does not require an OpenAI or Anthropic API key for normal connector operation. The connected client supplies model inference. The backend is deliberately designed around deterministic first-party logic, bounded requests/results, and hard-cost-conscious infrastructure. See docs/COST_MODEL.md.
Applications that need conventional non-MCP UTM campus intelligence can use the canonical public API or first-party SDKs:
npm install @gapwise/sdk@0.1.1
# JSR: @gapwise/sdk@0.1.1
python -m pip install gapwise==0.1.0- API:
https://api.gapwise.ca/v1 - OpenAPI:
https://api.gapwise.ca/openapi.json - Docs:
https://docs.gapwise.ca
The JavaScript/TypeScript SDK is published on npm and JSR; the Python SDK is published on PyPI. The public API/SDK surface does not grant access to delegated private AI context.
| Repository | Role | Primary surface |
|---|---|---|
gapwise |
Core web/PWA, canonical student state, deterministic campus engine, public API, and SDK source | gapwise.ca |
gapwise-mobile |
Native iOS and Android client | Native mobile app |
gapwise-ai |
Remote MCP layer for public campus intelligence and explicitly delegated student context | ai.gapwise.ca |
gapwise-data |
Open campus-data, provenance, schema, validation, and reuse portal | data.gapwise.ca |
gapwise-docs |
Canonical public developer documentation | docs.gapwise.ca |
gapwise-status |
Independent service-health monitoring and incident communication | status.gapwise.ca |
All six repositories are owned by the Gapwise for UTM GitHub organization (Gapwise-for-UTM). Andrew Muratov remains the creator and primary maintainer.
Requirements: Node.js 24.x, npm, and a compatible Supabase project for authenticated/delegation flows.
git clone https://github.com/Gapwise-for-UTM/gapwise-ai.git
cd gapwise-ai
npm ci
cp .env.example .env.local
npm run check
npm run devSecurity-sensitive changes should preserve the documented authorization, encryption, grounding, schema, and mutation boundaries. See docs/THREAT_MODEL.md, docs/PRIVACY.md, and SECURITY.md.
Gapwise is an independent project created by Andrew Muratov. It is not an official University of Toronto service and is not affiliated with or endorsed by the University of Toronto.
MIT © 2026 Andrew Muratov.