Read-only MCP server for OpenEMIS — free open-source school management system. 675 resources.
io.github.tixuz/openemis — OpenEMIS Read-only MCP Server
This repository provides a read-only MCP server for OpenEMIS, a free open-source school management system. It exposes OpenEMIS-related data to AI assistants, supporting queries around student attendance and student risks, plus information about staff. The server is listed with 675 resources.
🛠️ Key Features
Read-only MCP server for OpenEMIS
Connects AI assistants to OpenEMIS data
Query student attendance and student risks
Query staff
Reported 675 resources
🚀 Use Cases
Retrieve student attendance data from OpenEMIS
Check or query student risks information
Access staff information via an MCP client
⚡ Developer Benefits
Consistent MCP integration point for OpenEMIS-backed queries
Read-only access model for safer data consumption
Developer-facing categorization via the stated topic fields (OpenEMIS, school management system, education management, MCP server)
⚠️ Limitations
Read-only server (no write/update capabilities implied)
title: "openemis-mcp — AI bridge for OpenEMIS school management"
description: "Free, read-only MCP server that connects AI assistants to OpenEMIS school management. Query student attendance, risks, staff, and 678 resources."
keywords:
OpenEMIS
school management system
education management
student attendance
student risks
MCP server
openemis-mcp logo — AI bridge for OpenEMIS school management
openemis-mcp — AI bridge for OpenEMIS school management
Free, read-only MCP bridge between AI agents and any OpenEMIS school.
OpenEMIS is a free, open-source school management information system developed by UNESCO and KORDIT. It runs the day-to-day administration of every kind of educational institution — kindergartens, primary schools, secondary schools, secondary vocational institutions, technical colleges, and universities — managing students, staff, attendance, assessment, infrastructure, meals, scholarships, examinations, training, and ministry-level reporting. This MCP gives AI agents read-only access to the data in any OpenEMIS school so you can ask questions in plain English and get answers in seconds.
What this is: openemis-mcp is a free MCP server that connects AI assistants (Claude, Cursor, Codex) to the OpenEMIS school management system. It exposes 678 resources — students, student attendance, student risks, staff, exams, infrastructure — across 26 curated read-only playbooks, plus 14 redirect stubs for write operations.
Ask in plain English:
"How many current students are at Avory Primary?"
The agent plans the calls, this MCP delivers the data:
"Avory Primary School has 97 currently enrolled students across 6 classes."
No code. No JSON. Just ask.
What's included (free, MIT)
Tool
What it does
openemis_health
Ping the configured instance — real login round-trip
openemis_list_domains
List the 9 curated domains (Attendance, Assessment, Staff, Student…)
openemis_discover
Topic → up to 30 scoped endpoints. Keeps conversations small
openemis_list_playbooks
List all 40 playbooks — 26 read-only here, 14 stubs that redirect to mcp-pro
openemis_get_playbook
Load a playbook by id — full steps, resources, gotcha notes
openemis_get
Unified read: list or singleton, any resource, any filter
26 read-only playbooks covering attendance, assessment, student profiles, staff profiles, infrastructure, meals, risk dashboards, class reports, timetables, audit logs, school accreditation / registration, admission and enrolment queue state, and a primer on how the OpenEMIS workflow plugin powers every multi-step approval — each verified against the v5 manifest at 100% resource coverage. 14 additional playbook stubs are discoverable here but redirect to openemis-mcp-pro for the actual write/auth steps.
Translations:Русский · Español · हिन्दी · العربية — the original 17 view playbooks also translated in all four languages; 9 newer playbooks (added in v1.1.0 for Core 5.10.0, plus the two workflow playbooks) are English-only for now.
✏️ Write operations (creating/updating records in OpenEMIS) require openemis-mcp-pro. This free server is intentionally read-only — post, put, and delete are not available.
What's in Pro
openemis-mcp-pro adds write tools, remote hosting, and ChatGPT compatibility on top of this free read-only server.
HTTP server mode (Oracle / VPS — install once, connect by URL)
—
✅
✅
✅
OpenAPI adapter (ChatGPT Custom GPT, any REST client)
—
✅
✅
✅
Direct write — single record
—
✅
✅
✅
Institution audit trail
—
—
✅
✅
Workflow route execution
—
—
✅
✅
Institution-admin approval gate
—
—
✅
✅
Batch ops within one institution
—
—
✅
✅
Multi-institution batch ops
—
—
—
✅
Ministry approval gates
—
—
—
✅
Cross-institution oversight
—
—
—
✅
HTTP server mode lets you install Pro once on an Oracle Always Free ARM instance and connect from any device — no per-machine setup. The built-in OpenAPI adapter means teachers can use ChatGPT (or any AI assistant) to mark attendance and look up student records by importing a single schema URL. See the ChatGPT Teacher Guide for step-by-step setup.
Works with any MCP-compatible client: Claude Code, Cursor, Cline, Codex (via gemmy-and-qwenny), or any stdio MCP client.
Verbose logging (optional)
Capture every tool call and its response as JSONL — useful for debugging, tuning playbooks, or sharing a bug report.
bash
# stderr (visible in your MCP client's log panel)
OPENEMIS_LOG_VERBOSE=1 node dist/server.js
# write to a file
OPENEMIS_LOG_VERBOSE=1 OPENEMIS_LOG_FILE=/tmp/openemis.jsonl node dist/server.js
Each line is a JSON object: {ts, type:"tool_call"|"tool_result"|"tool_error", tool, args?, result?, latency_ms, ...}. Credential-shaped keys (password, authorization, api_key, token, secret) are redacted automatically.
⚠️ Privacy:tool_result entries contain the actual OpenEMIS data returned to the agent — student names, staff IDs, enrollment details. Enable only on instances you own, or with explicit consent. Default is OFF.
🌐 Remote / server install:openemis-mcp-pro adds an HTTP server mode — install once on Oracle Always Free and every AI assistant (Claude Code, Cursor, ChatGPT) connects by URL with no per-machine setup. See the ChatGPT Teacher Guide for how to let teachers mark attendance via ChatGPT.
Playbooks
24 read-only workflow guides — see docs/playbooks/. Write-side playbooks (mark attendance, enrol a student, set school accreditation, etc.) are discoverable here as stubs that point at openemis-mcp-pro.
List-filtering via the native IN operator (POCOR-9660)._conditions=<field>:IN(1,2,3) filters any field by a value list — including non-PK and composite-PK resources — so a class roster is one call: query institution-class-students by institution_class_id, then security-users with _conditions=id:IN(101,102,103). params.ids="1,2,3" now collapses to a single ?id=1,2,3 round-trip by default (set OPENEMIS_CORE_IN_OPERATOR=off only for pre-5.10 cores).
Stricter filter validation (POCOR-9697). Filtering on a field that does not exist on a resource now returns HTTP 400 instead of being silently ignored — use exact field names from the Resource Reference.
Loaded via openemis_get_playbook — full English content in data/playbooks.json. Translations and per-playbook markdown docs land in a follow-up release.
#
Playbook
Domain
What it does
18
diagnose-alert-delivery
Alerts
Answer "did this alert actually go out?" — walks the POCOR-9509 dispatch pipeline.
19
view-school-accreditation
Institution
Read institution-accreditations records (POCOR-9610), derive Active/Expired/Future status.
20
view-school-registration
Institution
Read institution-registrations history with valid_from..valid_to windows.
21
view-institution-budget
Institution
List institution-budgets per academic period, resolve budget types.
22
query-student-absence-history
Attendance
Aggregate absences via institution-student-absences + absence-days.
23
query-user-activity-audit-log
Security
Query the POCOR-9697 user_activities per-field audit trail.
24
view-class-roster
Institution
Walk institution-classes → institution-class-students → student details.
25
view-admission-and-enrolment-queue-state
Workflow
Answer "where is this future student in the admission/enrolment queue?" — resolves status_id → workflow_step name, current assignee, full transition history.
26
explain-workflow-system
Workflow
Primer for "why does this approval take 4 steps?" — explains workflow_models, steps, statuses, transitions, role-based assignees, and why the plugin makes approval chains configurable per tenant.
mark-student-attendance, mark-staff-attendance, enroll-new-student, record-behavior-incident, submit-exam-marks, generate-student-report-card-pdf, generate-institution-statistics-pdf, add-institution-asset, record-infrastructure-repair, add-meal-programme, resolve-my-identity, set-school-accreditation, set-school-registration, mark-student-meal-participation — all redirect agents to openemis-mcp-pro, which ships openemis_create / openemis_update / openemis_delete and per-user authentication.
Core compatibility
Tested against OpenEMIS Core 5.13.0 (master, June 2026). 5.7 – 5.12 deployments are also supported — the public REST surface is backwards-compatible.
Capability flag — POCOR-9660 multi-id GET
openemis_get accepts params.ids = "1,2,3" for batch lookups. Core 5.10+ carries POCOR-9660 (?id=1,2,3 support in CrudApiController), so the handler collapses the batch into a single round-trip by default. Pointing at an older Core (5.7 – 5.9) that lacks the native operator? Force the legacy parallel fan-out:
bash
OPENEMIS_CORE_IN_OPERATOR=off
For composite-PK or view resources — where ids does not apply — use _conditions=<field>:IN(1,2,3) instead; it filters any field by a value list and works regardless of this flag.