For LLM / AI agents
Use the register with tools.
This page explains how autonomous agents, chatbots, and research copilots should query The Course Register safely and cite course information accurately.
- API base
- https://uniapi.stanislav.black
- Machine guide
- /llms.txt
- Manifest
- /.well-known/ai-agent.json
Preferred access pattern
Use the API or MCP tools rather than scraping rendered HTML pages.
The public website is optimized for humans and SEO. AI agents should treat the backend as the canonical machine interface, because it exposes normalized fields for provider, title, subject, modality, price, start dates, enrollment status, lifecycle state, and source URLs.
MCP endpoint: https://uniapi.stanislav.black/mcp
Transport: HTTP JSON-RPC
OpenAPI: https://uniapi.stanislav.black/openapi.json
Instructions: https://uni.stanislav.black/ai-agentsAvailable MCP tools
The MCP server exposes read-only catalog tools for course discovery and diagnostics.
- search_courses — search by text, provider, subject, status, price range, and expired-row policy.
- get_course — fetch a single normalized course by numeric id.
- get_stats — fetch global totals, active counts, subject counts, and last sync time.
- get_subject_stats — fetch subject totals with both active and retained archived counts.
- get_provider_diagnostics — fetch provider health, missing-field diagnostics, and sync metadata.
POST https://uniapi.stanislav.black/mcp
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_courses",
"arguments": {
"q": "machine learning",
"provider": "stanford",
"limit": 5
}
}
}Interpretation rules
Course records have both enrollment status and lifecycle status. Do not conflate them.
Agents should prioritize is_active when describing whether a listing is current. If is_active is false, describe the row as archived even when status_normalizedstill says open. The status string is provider text; the lifecycle flag is the register’s current/archived decision.
- Use
source_urlorenrollment_urlas the final authority for enrollment. - Use
price_numericonly as a normalized filter/sort value; showpriceto humans. - Datetime fields are UTC and should be rendered with timezone context.
- For subject pages, use
include_expired=truewhen you need total retained listings.
Safe usage and attribution
Be useful without pretending the register is the issuing university.
The Course Register is an independent index. When answering users, cite the university/provider and link back to the original source. Do not claim affiliation, admission guarantees, or real-time seat availability unless the provider source explicitly says so.
Keep requests modest, cache read-only responses where appropriate, and use the MCP/API surfaces instead of high-rate HTML crawling.