Minghsin University of Science and Technology
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Teacher Console
Course Setup
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

7

Local AI

--

Uedu Code

--

CISOSE26 Local AI Uedu Code UG26
明新科大 AQI 64 26°C PM2.5 17
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Uedu Public API v1

Use RESTful API to access public Courses and school data on the Uedu platform. All requests require API key authentication.

Public API v1 · Request example HTTPS
GET /api/v1/courses?university=NCU&page_size=2 Authorization: Bearer uedu_3fa9c2e8••••
RESPONSE
{ "success": true, "items": [ { "id": 1024, "class_name": "Programming and Computational Thinking", "school": "National Central University", "semester": "114-2" }, { "id": 987, "class_name": "Introduction to Learning Analytics", "school": "National Central University", "semester": "114-1" } ], "page": 1, "page_size": 2 }
200 OK
HTTP status
60/min
Rate limit
10,000/day
Daily limit
Sample response · illustrative data

Sample exchange · fields follow the v1 documentation

Want an AI Agent to operate Uedu on your behalf?

Public API v1 only provides public data. If you want Claude Code, Codex, Cursor, or OpenClaw to help you change course settings, upload a knowledge base, duplicate a course to a new semester, or send assignment reminders for students, please use the personally authorized Agent API and MCP.

Go to Agent API and MCP

Quick start

  1. Go to "My API Keys" Create an API key
  2. Add the key to the HTTP header:Authorization: Bearer <your_api_key>
  3. Call the API endpoint, for example:
curl -H "Authorization: Bearer uedu_xxxxxxxx" \
  https://uedu.tw/api/v1/universities

Certification

All /api/v1/* endpoints (except the root path) require an API key. Please use the HTTP header:

Authorization: Bearer <your_api_key>

Once the key is created, it will be shown in full only once; please copy and store it immediately. The database stores only the SHA-256 hash; if it is lost, it must be re-created.

Rate limit

  • Up to 60 requests per minute per key
  • Up to 10,000 requests per day per key
  • When the limit is exceeded, return HTTP 429 Too Many Requests

If you need a higher quota, please contact the platform administrator.

Endpoints

GET /api/v1/universities

Retrieve the university list.

Query parameter:

  • region — (optional) filter region
GET /api/v1/courses

Retrieve the public course list (only courses with is_public=1).

Query parameter:

  • university — (optional) school code or Chinese name
  • semester — (optional) semester, e.g. 114-2
  • q — (optional) course title keywords
  • page — Default 1
  • page_size — Default 20, maximum 100
GET /api/v1/courses/<course_id>

Retrieve single public course details, including course objectives and teaching content.

GET /api/v1/course_stats

Statistics for publicly offered courses over the years, which can be grouped by semester, year or school (excluding personal data).

Query parameter:

  • university — (optional) school code or Chinese name
  • group_bysemester | year | school(Default semester)
GET /api/v1/papers

List of academic papers published by the Uedu team (findings from teaching practice research).

Query parameter:

  • category — (optional) paper type
  • year — (Optional) Year
GET /api/v1/conferences

List of international conferences for academic exchange at Uedu. The relationship field distinguishes between: participated, conferences where the team has already published papers, delivered invited talks or won competition awards; watching, conferences the team continues to monitor and plans to submit to in future, with no participation record yet.

GET /api/v1/environment/schools/<school_ref>

A snapshot of the latest environmental data for a single school, integrating government open data (Taiwan: CWA weather + MoEnv air quality; the United States: NWS/NOAA weather + US EPA AirNow air quality), aggregated to the school location using IDW top-3 weighting. Returns live air quality + daily aggregates (PM2.5/PM10/AQI/temperature/humidity/rainfall). Actual sources are shown in data_sources in the response.

The daily boundary for the daily summary is based on the 'local time zone of the institution' (for example, a school in Boston = Eastern Time 00:00–24:00), field date_local; date_taipei is a historical alias with the same value, retained only for compatibility. The AQI for schools in the United States follows the US EPA standard; it uses the same colour banding as Taiwan's Environmental Protection Administration AQI grading, but the calculation differs and they must not be compared directly.

Path parameter:

  • school_ref — School ID (number) or school code (e.g. NCU, NTU; case-insensitive)
GET /api/v1/environment/schools/<school_ref>/history

Historical daily aggregated environmental data for a single school, for trend analysis and learning inquiry.

Query parameter:

  • days — Lookback days, 1–90, default 30
GET /api/v1/environment/snapshot

The latest environment snapshot from multiple schools, for cross-school comparison and region-based querying.

Query parameter:

  • region — (optional) filter region, e.g. "Taoyuan City" "Taipei City"
  • limit — Maximum number of returned items, 1–100, default 30
GET /api/v1/hub/packs

Browse UeduHub's publicly available teaching design Packs (skills, channel templates, question banks, surveys, AI tasks), including Teaching Card metadata and community statistics.

Query parameter:

  • q — (optional) name / summary / subject keywords
  • asset_typeskill | channel_template | quiz_bank | survey_bank | ai_task
  • education_leveluniversity | high_school | junior_high | elementary | general
  • sortrecent | stars | installs(Default recent)
  • limit — Maximum number of returned items, 1–100, default 30
GET /api/v1/hub/packs/<pack_id>

Single public Pack details: README, Teaching Card, and a summary of versions that have passed safety checks. Does not include the content itself (please install via the platform website).

Open data list

The following are all data fields exposed externally by Public API v1 and MCP. All fields are low-sensitivity information at the "public timetable level"; sensitive data will never be exposed through this API.

1. University list /universities
  • idcodename_zhname_enshort_nameregion
2. Public course list /courses

Includes only courses that the Instructor has explicitly set as "public" (is_public=1)

  • Course basic information:idclass_namecourse_numbercourse_class
  • Chinese and English Course titles:course_name_chinesecourse_name_english
  • Instructor:instructorinstructor_english
  • Offering Department:departmentdepartment_englishschool
  • Time:semesterstart_dateend_date
3. Public Course Details /courses/<id>

Includes all the above fields, plus:

  • Learning Objectives:teaching_goalteaching_goal_english
  • Teaching content outline:teaching_contentteaching_content_english
  • Course notes:class_memo
4. Course opening statistics /course_stats
  • key(Term / year / school)、course_countinstructor_count
  • Aggregated data only, with no personal data
5. Academic papers /papers
  • slugtitletitle_zhauthorsconferenceyeardoicategoryuedu_featureaward
6. Academic symposium /conferences
  • slugnamename_shortyeardateslocationwebsiteorganizerindexingrelationshippaper_count
7. School environment data /environment/schools/<ref>/environment/schools/<ref>/history/environment/snapshot

Source: government open data — Taiwan CWA Central Weather Administration (1,215 weather stations) + MoEnv Ministry of Environment (84 real-time air-quality stations); US NWS/NOAA + US EPA AirNow. Aggregated to school level using IDW top-3 weighting. The data are public government observations and contain no student or personal information.

  • School identifier:idcodename_zhshort_nameregiontimezone
  • Real-time air quality:aqiaqi_statuspm25_ugm3observed_at_utc
  • Daily summary:date_localdate_taipei Historical alias for same value)、temp_c_avg/min/maxrh_avgprecip_total_mmpm25_avgpm10_avgaqi_avg
  • Day boundary:day_boundary = "school local timezone"—— Daily aggregation (especially cumulative rainfall) uses 00:00 in the school's local time zone to roll over the day, and does not change according to the querier's time zone
8. Public Pack for UeduHub /hub/packs/hub/packs/<id>

Includes only teaching design Packs that the publisher has explicitly set as "public" and that have passed safety checks.

  • Pack data:idnamesummaryreadme_mdasset_typelatest_version
  • Teaching Card:subjecteducation_levelbloom_levelsdifficulty
  • Community statistics:star_countinstall_countowner_name(Publisher display name)
  • Does not include the Pack payload itself; private and link-visible Packs will not appear
Data that will absolutely not be exposed through this API:
  • Student list, student number, email, contact details
  • Grades, assignments, submission records, attendance
  • Forum posts, comments, likes
  • AI conversation history (ClassroomGPT conversation records)
  • Physiological data (HRV, sleep, stress, EEG, fNIRS)
  • Course join code, private Course (is_public=0)
  • Teacher internal settings (system prompt, API key, RAG documents)

Response format

All responses are JSON, standard structure:

// Success
{ "success": true, "data": {...} }
{ "success": true, "items": [...], "page": 1, "page_size": 20, "total": 150 }

// Failed
{ "success": false, "error": "..." }

Program example

Python (requests)
# pip install requests
import requests

API_KEY = "uedu_xxxxxxxx"
BASE = "https://uedu.tw/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}

# 1. List universities
r = requests.get(f"{BASE}/universities", headers=headers)
print(r.json())

# 2. Search Courses
r = requests.get(f"{BASE}/courses", headers=headers, params={
    "university": "ncu",
    "semester": "114-2",
    "q": "Artificial intelligence",
    "page": 1,
    "page_size": 20,
})
data = r.json()
for course in data["items"]:
    print(course["id"], course["class_name"], course["instructor"])

# 3. Get course details
r = requests.get(f"{BASE}/courses/123", headers=headers)
print(r.json()["data"])

# Error handling
if r.status_code == 401:
    print("API key invalid or revoked")
elif r.status_code == 429:
    print("Rate limit exceeded, please try again later")
elif r.status_code == 404:
    print("Resource not found")
JavaScript (fetch)
const API_KEY = "uedu_xxxxxxxx";
const BASE = "https://uedu.tw/api/v1";
const headers = { "Authorization": `Bearer ${API_KEY}` };

// Search Courses
const params = new URLSearchParams({
  university: "ncu",
  semester: "114-2",
  page: 1,
  page_size: 20,
});

const res = await fetch(`${BASE}/courses?${params}`, { headers });
if (!res.ok) {
  if (res.status === 401) throw new Error("API key invalid");
  if (res.status === 429) throw new Error("Rate limit");
  throw new Error(`HTTP ${res.status}`);
}
const data = await res.json();
console.log(data.items);

MCP Server (for Claude and other LLM users)

We provide an MCP (Model Context Protocol) server, allowing you to query Uedu's public data directly in tools that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code, using natural language, with no programming required at all.

Install MCP server

Download uedu_mcp_server.py and install dependencies:

pip install "mcp[cli]" httpx
# Download server script
curl -O https://uedu.tw/static/mcp/uedu_mcp_server.py
Set it up in your preferred tool

Claude Desktop

Edit configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "uedu": {
      "command": "python",
      "args": ["/absolute/path/to/uedu_mcp_server.py"],
      "env": {
        "UEDU_API_KEY": "uedu_xxxxxxxx"
      }
    }
  }
}

After saving, restart Claude Desktop for the changes to take effect.

Claude Code (CLI)

Use built-in commands to add quickly:

claude mcp add uedu \
  --env UEDU_API_KEY=uedu_xxxxxxxx \
  -- python /absolute/path/to/uedu_mcp_server.py

Cursor

Edit ~/.cursor/mcp.json (global) or within the project .cursor/mcp.json

{
  "mcpServers": {
    "uedu": {
      "command": "python",
      "args": ["/absolute/path/to/uedu_mcp_server.py"],
      "env": {
        "UEDU_API_KEY": "uedu_xxxxxxxx"
      }
    }
  }
}

You can also add it graphically on Cursor's "Settings → MCP" page.

VS Code (native MCP support)

VS Code has built-in MCP support (not limited to Copilot Chat). Three ways to add it:

  • Run command panel MCP: Add Server, complete according to the guided flow
  • User level: Run MCP: Open User Configuration Edit user mcp.json
  • Workspace level: create manually in the project root .vscode/mcp.json
{
  "servers": {
    "uedu": {
      "type": "stdio",
      "command": "python",
      "args": ["${workspaceFolder}/uedu_mcp_server.py"],
      "env": {
        "UEDU_API_KEY": "uedu_xxxxxxxx"
      }
    }
  }
}

macOS / Linux users are advised to enable sandboxing, restricting the server to access only Uedu domains:

{
  "servers": {
    "uedu": {
      "type": "stdio",
      "command": "python",
      "args": ["${workspaceFolder}/uedu_mcp_server.py"],
      "env": { "UEDU_API_KEY": "uedu_xxxxxxxx" },
      "sandboxEnabled": true,
      "sandbox": {
        "filesystem": { "allowWrite": [] },
        "network": { "allowedDomains": ["uedu.tw"] }
      }
    }
  }
}

At first launch, VS Code will show a “Trust this server” dialogue; once you confirm, you can use it. The Continue extension can also be configured with the same server block.

HTTP mode (experimental, no Python installation required)

We also provide an MCP server using streamable-http transport. On the client side, you only need to enter the URL and API key in the configuration file, with no need to install Python or any dependencies locally. Suitable for users without an engineering background.

VS Code .vscode/mcp.json

{
  "servers": {
    "uedu": {
      "type": "http",
      "url": "https://uedu.tw/mcp",
      "headers": {
        "Authorization": "Bearer uedu_xxxxxxxx"
      }
    }
  }
}

Cursor / Claude Desktop(version that supports http transport):

{
  "mcpServers": {
    "uedu": {
      "url": "https://uedu.tw/mcp",
      "headers": {
        "Authorization": "Bearer uedu_xxxxxxxx"
      }
    }
  }
}
About HTTP Mode: This is currently in the experimental stage. The Tool set is exactly the same as the stdio version (11 in total: university, course, statistics, thesis, seminar, school environment data, UeduHub Pack). Requests will count against the rate limit of the API key you provide. If you encounter issues, we recommend falling back to the stdio version first.
Usage example (natural language dialogue)

Once set up, simply ask in the conversation:

  • "What open Courses are available on Uedu at National Central University in term 114-2?"
  • 'Help me find a course whose name includes “artificial intelligence”, and list the teaching instructors'
  • "What are the details for course id 1234?"
  • 'Which universities in the north are included on Uedu?'

The LLM automatically calls the corresponding MCP tool, returns the result, and summarises it in natural language.

Terms of Use

  • This API only provides low-sensitivity public course and school data, and does not include student lists, marks, forum posts, AI conversation records, or biometric data
  • May not be used for commercial large-scale scraping or resale of data
  • When using data obtained via this API, please acknowledge the source as "Uedu (uedu.tw)"
  • Abuse or breach of the terms may result in the API key being revoked