ReversePort
Reverse engineer and port apps and games: Godot, Unity IL2CPP, .NET, binaries, with parity checks.
제작자가 쓴 설명(영어 원문)
Read + write MCP server for OpenEMIS — free open-source school management system. 675 resources.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
OPENEMIS_BASE_URL, OPENEMIS_API_KEY, OPENEMIS_USERNAME, OPENEMIS_PASSWORD, OPENEMIS_TIMEOUT_MS, OPENEMIS_CORE_IN_OPERATOR비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"openemis-pro": {
"command": "npx",
"args": [
"-y",
"openemis-mcp-pro"
],
"env": {
"OPENEMIS_BASE_URL": "your-value",
"OPENEMIS_API_KEY": "your-value",
"OPENEMIS_USERNAME": "your-value",
"OPENEMIS_PASSWORD": "your-value",
"OPENEMIS_TIMEOUT_MS": "your-value",
"OPENEMIS_CORE_IN_OPERATOR": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add openemis-pro --env OPENEMIS_BASE_URL=your-value --env OPENEMIS_API_KEY=your-value --env OPENEMIS_USERNAME=your-value --env OPENEMIS_PASSWORD=your-value --env OPENEMIS_TIMEOUT_MS=your-value --env OPENEMIS_CORE_IN_OPERATOR=your-value -- npx -y openemis-mcp-pro실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"openemis-pro": {
"command": "npx",
"args": [
"-y",
"openemis-mcp-pro"
],
"env": {
"OPENEMIS_BASE_URL": "your-value",
"OPENEMIS_API_KEY": "your-value",
"OPENEMIS_USERNAME": "your-value",
"OPENEMIS_PASSWORD": "your-value",
"OPENEMIS_TIMEOUT_MS": "your-value",
"OPENEMIS_CORE_IN_OPERATOR": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"openemis-pro": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"openemis-mcp-pro"
],
"env": {
"OPENEMIS_BASE_URL": "your-value",
"OPENEMIS_API_KEY": "your-value",
"OPENEMIS_USERNAME": "your-value",
"OPENEMIS_PASSWORD": "your-value",
"OPENEMIS_TIMEOUT_MS": "your-value",
"OPENEMIS_CORE_IN_OPERATOR": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
OPENEMIS_USERNAME envOPENEMIS_TIMEOUT_MS envOPENEMIS_CORE_IN_OPERATOR env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 9일 점검
레지스트리 이름이 GitHub 계정 tixuz 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: OPENEMIS_BASE_URL, OPENEMIS_API_KEY, OPENEMIS_PASSWORD
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.1.0)은 6개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.
같은 카테고리에는: ReversePort, Listenbox, Routepot
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Reverse engineer and port apps and games: Godot, Unity IL2CPP, .NET, binaries, with parity checks.
Manage Listenbox podcasts, episodes, collaborators, and RSS imports through your AI assistant.
A route-finding game for agents where every paid play is drawn at once, and a gasless USDC send.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
title: openemis-mcp-pro — Read + Write MCP Server for OpenEMIS School Management description: openemis-mcp-pro is the read and write MCP server that bridges AI assistants to the OpenEMIS school management information system — 678 resources, 3361 endpoints, 40 playbooks. keywords:
A natural-language bridge between MCP-aware agents (Claude, Codex, Cursor, etc.) and any OpenEMIS school — with full read + write access.
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-pro server adds full read + write access plus per-user authentication on top of any OpenEMIS school.
Translations: Русский · Español · हिन्दी · العربية
Built on top of the published OpenEMIS Core API (reference docs at api.openemis.org/core) and verified end-to-end against the public demo at [demo.openemis.org/core](https://demo.openemis.org/core) with real credentials, real data, real round-trips.
Ask in English:
*"How many current students are at Avory Primary?"*
The agent plans the calls, this MCP delivers the data, and you get the answer:
*"Avory Primary School (code P1002) has 553 currently enrolled students."*
You never write a line of code. You never see JSON. You just ask.
Status: v1.0.0 — full CRUD for non-workflow resources. Read queries work against every OpenEMIS v5 resource. Write tools (create/update/delete) are live for all resources that do not flow through the CakePHP Workflow plugin. Workflow-controlled resources (attendance, staff leave) are blocked at the tool level and redirect to the appropriate playbook.
openemis-mcp-pro is the read + write MCP server that connects AI assistants to the OpenEMIS school management system. It exposes 678 resources (students, attendance, risks, staff, exams, infrastructure) across 40 curated playbooks — 26 read and 14 write/auth. The pro distribution adds direct write tools (openemis_create, openemis_update, openemis_delete), HTTP server mode for ChatGPT Custom GPT, and per-user authentication on top of the free read-only distribution.
The OpenEMIS Core REST API is large — the v5 surface alone exposes 3,361 endpoints across 678 resources (Core 5.13.0). No AI agent can hold that in context, and raw Swagger-style introspection floods a conversation with noise that has nothing to do with the user's actual question.
This MCP solves that in two ways:
openemis_discover(topic) tool narrows to the ~20–30 endpoints relevant to what the user is actually asking about ("attendance", "students", "assessment") — powered by a small curated knowledge pack of Domain-*.md notes.openemis_get tool covers list + singleton + filtered search across every resource. The agent supplies resource + optional id + optional params (_fields, _conditions, orderby, page, limit) and the rest of the OpenEMIS CakePHP-style query DSL maps straight through.The net effect: agents answer natural-language questions in 2–4 tool calls, not 30.
| Tool | Since | What it does |
|---|---|---|
openemis_health | v0.1 | Pings the configured instance and reports reachability. Performs a real login round-trip — if this passes, CRUD will work. |
openemis_list_domains | v0.1 | Lists the curated OpenEMIS domains — Attendance, Assessment, Staff, Student, Institution, Schedule, Examination, Report — each with a one-line summary. The agent uses this to figure out *where* a question lives. |
openemis_discover | v0.1 | Input: a topic string. Output: up to 30 endpoints relevant to that topic, drawn from the domain knowledge pack and the per-instance manifest. Keeps conversations small regardless of how large the underlying API is. |
openemis_list_playbooks | v0.2 | Lists all 40 curated workflow playbooks with id, title, domain, and audience. The agent uses this to find the right step-by-step guide for a user-level task. |
openemis_get_playbook | v0.2 | Input: a playbook id. Output: the full playbook — resources, ordered steps, guidance notes, and example queries. |
openemis_get | v0.1 | Unified read tool. { resource, id?, params? } — if id is present, fetches the singleton; otherwise lists with any combination of _fields, _conditions, orderby, order, page, limit, plus any ad-hoc filter key. |
openemis_create | v0.3.0 | Create a new record. { resource, body } — non-workflow resources only. Workflow-controlled resources (e.g. institution-staff-leave) are blocked and will redirect to the appropriate playbook. |
openemis_update | v0.3.0 | Update an existing record by id. { resource, id, body } — non-workflow resources only. |
openemis_delete | v0.3.0 | Delete a record by id. { resource, id } — non-workflow resources only. |
A representative natural-language question like *"how many teachers at Avory Primary, how many vacant positions?"* resolves to three openemis_get calls — chained by the agent, narrowed by _conditions, delivered back as a single English answer. A write request like *"enrol a new student"* uses openemis_get_playbook to load the step-by-step guide, then openemis_create for each write step.
Tested against OpenEMIS Core 5.13.0 (master, June 2026). Earlier 5.7 – 5.12 deployments are also supported — the API surface is backwards-compatible.
openemis_get accepts params.ids = "1,2,3" for batch lookups. Core 5.10+ carries POCOR-9660 (?id=1,2,3 and _conditions= :IN(...) 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) without the native operator? Force the legacy parallel fan-out:
OPENEMIS_CORE_IN_OPERATOR=off
For composite-PK or view resources — where ids does not apply — use _conditions= :IN(1,2,3) instead; it filters any field by a value list and works regardless of this flag. Filtering on a field that does not exist on a resource now returns HTTP 400 (Core 5.10+, POCOR-9697), so use exact field names.
Every claim in this README was proven against the public demo instance before being written:
POST /api/v5/login with { username, password, api_key } → JWT cached, 331 charsGET /api/v5/institutions?limit=200&_fields=id,name,code → 24 institutions incl. "Avory Primary School" (id=6, code P1002)GET /api/v5/institution-students?institution_id=6&student_status_id=1&limit=1 → pagination reports last_page: 553 → 553 currently enrolled studentsGET /api/v5/academic-periods → 7 pages of real academic-year dataGET /api/v5/absence-types → EXCUSED, UNEXCUSED, LATE, etc.The sample scripts/smoke-login.mjs shipped with this repo performs the login test step-by-step so you can confirm reachability against your own instance before wiring it into Claude Code.
openemis-mcp speaks the Model Context Protocol over stdio — any MCP-compatible client works:
Stdio mode (local machine) — connects as a subprocess:
| Agent | How to connect |
|---|---|
Claude Code (claude CLI) | claude mcp add — primary tested client, all 9 tools available |
| Cursor | Add to .cursor/mcp.json — full tool access |
| Cline / Continue (VS Code) | Add server in MCP settings |
| Codex | Via gemmy-and-qwenny bridge |
| Any MCP client | Point at node dist/server.js with env vars set |
HTTP server mode (OPENEMIS_TRANSPORT=http, install once on Oracle/VPS) — connects by URL:
| Client | How to connect |
|---|---|
| Claude Code (remote) | claude mcp add --transport http --url http://your-server:3000/mcp --header "Authorization: Bearer " |
| Cursor / Cline | Add remote MCP URL in settings |
| ChatGPT (Custom GPT) | Import schema from http://your-server:3000/openapi.json → Actions → Bearer token |
| Any HTTP client | REST API at /api/* — see Teacher Guide |
Requires Node 22+ (for built-in fetch and AbortController) and Python 3.10+ (for the manifest builder and playbook generator scripts in mcp-openemis-gen/). The MCP server itself is Node-only; Python is only needed if you rebuild the manifest from source.
git clone https://github.com/tixuz/openemis-mcp.git
cd openemis-mcp
npm install npm run build
cp .env.example .env $EDITOR .env
.env.example documents every variable. At minimum you need the three credentials your OpenEMIS admin issues:
OPENEMIS_BASE_URL=https://demo.openemis.org/core # or your own instance
OPENEMIS_USERNAME=admin OPENEMIS_PASSWORD=your_password OPENEMIS_API_KEY=your_api_key
OPENEMIS_TIMEOUT_MS=30000 OPENEMIS_VAULT_PATH=/absolute/path/to/domain-notes OPENEMIS_MANIFEST_PATH=/absolute/path/to/manifest.jsonl
The server logs in lazily on the first authenticated tool call, POSTing to /api/v5/login, parsing the JWT out of data.token, and caching it in memory. On a 401 it re-logs in and retries once.
OPENEMIS_VAULT_PATH points at the folder containing the curated Domain-*.md notes used by openemis_discover. If missing, discovery degrades gracefully to keyword matching against the manifest alone.
OPENEMIS_MANIFEST_PATH points at the JSONL output of the companion builder in ../mcp-openemis-gen/. If absent, the discovery tools return a friendly "manifest not built yet" hint — they don't crash.
set -a && source .env && set +a
node scripts/smoke-login.mjs
Expected:
[Test] Loading config...
[OK] Config loaded: baseUrl=https://demo.openemis.org/core [Test] Creating client... [OK] Client created [Test] Attempting login... [OpenEMIS] Login successful; cached JWT (331 chars) [OK] Login successful
claude mcp add openemis \
--env OPENEMIS_BASE_URL="https://your-openemis/core" \ --env OPENEMIS_USERNAME="…" \ --env OPENEMIS_PASSWORD="…" \ --env OPENEMIS_API_KEY="…" \ --env OPENEMIS_VAULT_PATH="/absolute/path/to/vault" \ -- node "$(pwd)/dist/server.js"
claude mcp list | grep openemis
Any new Claude Code session in this project will see all nine tools automatically.
Set OPENEMIS_TRANSPORT=http to run as a persistent HTTP server instead of a local subprocess. Install once on your server; every MCP-compatible client (Claude Code, Cursor, Cline, Windsurf) connects by URL.
On your server:
git clone https://github.com/tixuz/openemis-mcp-pro.git
cd openemis-mcp-pro npm install && npm run build cp .env.example .env $EDITOR .env
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요