MCP FET Integration
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
MCP FET Integration
Model Context Protocol (MCP) server that exposes FET — Liviu Lalescu’s free school/university timetable generator — as tools for ChatGPT, Claude, Gemini, Cursor, and other MCP clients.
This repository is the integration layer (TypeScript MCP server + docs). FET itself remains upstream software under AGPL-3.0.
Why TypeScript?
Option | Fit |
TypeScript (chosen) | Official MCP server SDK is mature; easy stdio packaging for desktop clients; natural fit for spawning |
Python | Also fine for CLI wrappers; skipped so we stay on the primary MCP TypeScript SDK used by most client examples. |
FET’s heavy solver stays in C++/Qt (fet-cl). This MCP server owns the editable .fet XML model and orchestrates generation around that binary.
Related MCP server: P6-MCP
FET upstream pin
Field | Value |
Homepage | |
Official GitHub (release archives) | |
Pinned release | FET-7.12.0 |
Pinned commit |
|
License | AGPL-3.0 |
The GitHub repo stores release archives, not an incremental source tree. Use
npm run fetch-fet(seevendor/README.md). Do not commit the multi‑GB archive history.
Configurable feature map: docs/fet-configurable-features.md. Assignment text → .fet: docs/fet-from-assignments.md. Natural language → timetable: docs/fet-nl-timetable.md. Private-sample NL coverage notes: docs/private-sample-nl-coverage.md (real .fet only outside the repo, never published). Constraint advisor: docs/fet-advise.md. ChatGPT packaging + Streamable HTTP bridge: docs/chatgpt-mcp-plugin.md. Failed generate diagnosis: docs/fet-diagnose.md.
MCP tool surface (v0.7 — intelligent constraint advisor)
Design: a small meta-tool set over a round-trip XML document model, plus fet-cl job tools. All 275 time + 82 space + 1 generation-option constraint types from FET 7.12 are addressable by name (no 357 hard-coded handlers). v0.3 adds generation from structured Italian assignment lines. v0.4 explains blocking constraints when generation fails (fet_diagnose). v0.5 adds fet_nl_build / fet_nl_patch. v0.6 adds full NL phrase coverage (358 live) + ChatGPT packaging. v0.7 adds fet_advise / fet_advise_apply: heuristics grounded in IT school practice recommend MinDays, SameStartingTime, PreferredRoom, BreakTimes, MaxHoursDaily, NotAvailable, Consecutive, … even when the user does not know the FET type name. The advisor proposes; FET still generates the timetable. The MCP is not the chat LLM — ChatGPT/Claude/Gemini/Cursor call these tools. Real institute .fet stay outside this repository (never committed, never advertised to ChatGPT).
Documents (workspace)
Tool | Purpose |
| Create Official/MA/Block/Terms document with basic compulsory constraints |
| Load |
| Round-trip save (UTF-8 BOM) |
| Workspace management |
| Mode, institution, comments, Terms counters, version attr |
Entities (CRUD by kind)
Tool | Purpose |
|
|
| Read entities as JSON fields mirroring XML children |
| Insert/update/delete |
| Replace days/hours(/real_*) name lists in one call |
students uses the FET hierarchy: Year → Group → Subgroup (nested in fields).
Constraints (schema-driven, full catalog)
Tool | Purpose |
| List/filter all 358 catalog types (mode/family/IT description) |
| XML tag hints for one type (from |
| Inspect constraints in a document |
| Mutate any catalog type via |
fields mirrors FET XML: leaf tags → strings, repeated tags → arrays, nested blocks → objects/arrays of objects. Common tags: Weight_Percentage, Active, Comments.
From teacher assignments (v0.3)
Tool | Purpose |
| Parse IT/plain-text (or JSON) workloads → structured rows + ambiguities |
| Build Official |
Sample: examples/from-assignments/. Mapping rules: docs/fet-from-assignments.md.
Natural language timetable (v0.5–v0.6)
Tool | Purpose |
| Free-form Italian (or structured intent) → assignments, class splits, constraints, |
| Build Official |
| Real |
| Constraint instances → Italian descriptions |
| 358 phrase templates live (hand-tuned overlays on common school types) + parse helper |
| Conversational add/change/remove on an existing workspace |
Sample: examples/from-nl/ (Antonio scenario). Mapping + known gaps: docs/fet-nl-timetable.md.
Constraint advisor (v0.7)
Tool | Purpose |
| Analyze document / |
| Apply accepted suggestion ids, or all high-confidence; may create missing LAB rooms |
Sample: examples/advise/. Guide: docs/fet-advise.md. Reminder: advisor proposes constraints; fet_generate still builds the timetable.
Diagnose blockers (v0.4)
Tool | Purpose |
| Static heuristics + optional |
| On failed wait=true generate, attach the same diagnosis |
Sample conflict: examples/diagnose/. Guide: docs/fet-diagnose.md.
Generation / I/O
Tool | Purpose |
| Server + FET pin + catalog counts + |
| Copy a |
| Structured XML summary (no solver) |
| Run |
| Poll / list jobs |
| List/read HTML, XML, CSV, logs under an output dir |
| Sample |
Typical flows
A. From linguaggio naturale (classi spezzate, modifiche)
fet_nl_buildwith Italian prose (orfet_nl_parsefirst)If
gaps→ ask the user usinggaps[].ask, thenfet_nl_patch/ rebuild with filledintentOptional:
fet_advise→ review suggestions →fet_advise_applyfet_document_save→fet_generate→fet_diagnoseif needed
B. From incarichi riga-per-riga
fet_from_assignmentswith Italian assignment text (ask onambiguitiesif needed)fet_document_summary/ refine withfet_entity_*/fet_constraint_*fet_document_save→fet_generateIf failed: read
diagnosisor callfet_diagnose
C. Manual edit → generate
fet_document_neworfet_document_openfet_entity_upsert(subjects, teachers, students, activities, rooms, …)fet_constraint_schema→fet_constraint_addas neededfet_document_save→data/input/….fetfet_generate→fet_job_status/fet_export/fet_diagnose
npm run smoke:nl # examples/from-nl → antonio-from-nl.fet
npm run smoke:advise # stripped Antonio sample → advise + applyQuick start (Windows)
cd "C:\path\to\MCPFETIntegration"
npm install
npm run fetch-fet # if vendor/fet-src is missing
npm run generate-catalog # regenerate constraint catalog from FET headers (already committed)
npm run buildInstall fet-cl (Windows)
Official Liviu package (no Qt toolchain required):
npm run fetch-fet-windows
# → vendor\bin\fet-7.12.0\fet-cl.exe
$env:FET_CL_PATH = "C:\path\to\MCPFETIntegration\vendor\bin\fet-7.12.0\fet-cl.exe"Alternatively build from vendor/fet-src/fet-7.12.0/ (CMake + Qt 6, C++17) per FET’s README.
Run the MCP server (stdio)
npm run start
# or during development:
npm run devThe process waits on stdin for an MCP client. Logs go to stderr only.
Run the Streamable HTTP bridge (ChatGPT / remote MCP)
ChatGPT cloud cannot speak stdio to this PC. Run the local bridge on loopback, then connect ChatGPT via Secure MCP Tunnel (tunnel_id) or an opt-in HTTPS tunnel — not by pasting http://127.0.0.1… (ChatGPT rejects it).
$env:FET_CL_PATH = "C:\path\to\MCPFETIntegration\vendor\bin\fet-7.12.0\fet-cl.exe"
$env:MCP_HTTP_TOKEN = "long-secret" # required if MCP_HTTP_ALLOWED_HOSTS is set
npm run mcp:http
# health (local only): http://127.0.0.1:3847/health
# opt-in public HTTPS URL helper: npm run mcp:http:tunnel -- -IUnderstandPublicExposureSee docs/chatgpt-mcp-plugin.md (rejected-settings error, Tunnel vs URL). Smoke: npm run smoke:http.
Connect clients
Example configs live in config/. Replace the absolute path with your machine path.
Claude Desktop / Claude MCP
{
"mcpServers": {
"fet": {
"command": "node",
"args": [
"C:\\path\\to\\MCPFETIntegration\\build\\index.js"
],
"env": {
"FET_CL_PATH": "C:\\path\\to\\fet-cl.exe"
}
}
}
}See config/mcp.claude.example.json, config/mcp.chatgpt.example.json, config/mcp.gemini.example.json.
Cursor
Ready snippet: config/mcp.cursor.json (merge fet into %USERPROFILE%\.cursor\mcp.json).
Repository layout
MCPFETIntegration/
src/ TypeScript MCP server + FetDocument model
src/fet/catalog/ Generated constraint catalog (358 types)
scripts/ fetch-fet, generate-catalog, copy-catalog
vendor/ FET pin docs (+ local extracted sources, gitignored)
examples/ Sample .fet + from-assignments + from-nl + advise + diagnose conflict
data/ Runtime input/output/jobs (gitignored contents)
docs/ Feature catalog + NL + advise + diagnose guides
config/ Example MCP client configs
LICENSE AGPL-3.0
NOTICE Attribution
CONTRIBUTING.mdLicense and attribution
This project: AGPL-3.0-only (
LICENSE)FET: AGPL-3.0 by Liviu Lalescu — see
NOTICEandTHIRD_PARTY.md
If you deploy this as a network service that users interact with, AGPL requires you to offer Corresponding Source.
GitHub
Public repository: https://github.com/marconodio-ux/MCPFETIntegration
Real institute .fet are kept outside this repo (and private/ is gitignored with no tracked exceptions). node_modules/, vendor/bin|archives|fet-src/, and secrets stay gitignored and are not published. Public main has no real institute .fet blobs.
Status
v0.7.0 — Constraint advisor: fet_advise / fet_advise_apply recommend and optionally write catalog constraints (MinDays, SameStartingTime, PreferredRoom, …) from school heuristics. Advisor proposes; FET generates. Built on v0.6 full-catalog NL, v0.5 NL build/patch, v0.4 diagnose, v0.3 from-assignments.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Timetastic MCP server for ChatGPT, Claude and any AI agent: list wallchart absences, list pending leave requests, approve leave request, decline leave request, book time off, cancel booking, get monthly leave summary and get annual allowance summary in your own Timetastic account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Timetastic yourself; Cotlet does not store your password and you need no Timetastic API key. About the official Timetastic API: Yes, Timetastic has a REST API with a bearer token, and no official MCP server (checked 20 Oct 2026). Only admin users can get a token, and the API has no endpoints for the monthly and annual summary reports. Setup and FAQ: https://cotlet.dev/integrations/timetastic-api-mcp-server
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Trainual MCP server for ChatGPT, Claude and any AI agent: list subjects, get subject, create subject, add step, update step, publish subject, assign subject and list assignments in your own Trainual account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Trainual yourself; Cotlet does not store your password and you need no Trainual API key. About the official Trainual API: Trainual has a REST API and a read-only MCP server, but neither creates or edits training content (checked 28 Oct 2026). The API covers users, groups, responsibilities, assignments, completions, activities and webhooks, and it only views and searches published content. Setup and FAQ: https://cotlet.dev/integrations/trainual-api-mcp-server
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables managing cron jobs, maintenance windows, and settings through natural language by exposing the Cronmanager REST API as MCP tools for LLM clients like Claude.GPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI clients to query, analyze, and mutate Oracle Primavera P6 schedules from XER files or live P6 EPPM, with tools for critical path, DCMA compliance, earned value, resources, baselines, and exports.37 PyPI1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants like Claude, Cursor, VS Code, and Windsurf to manage workspaces, projects, tasks, and AI agents through natural language, with a hosted OAuth server or a local stdio package. Also supports generating MCP tools from any OpenAPI spec.1,958 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients such as Claude, Cursor, VS Code, and Windsurf to list and manage workspaces, projects, tasks, AI agents, and automations through a hosted OAuth-secured endpoint or a local stdio package. Also generates MCP tools from any OpenAPI spec.1,958 npmMIT