-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschedule.json
More file actions
152 lines (152 loc) · 5.2 KB
/
schedule.json
File metadata and controls
152 lines (152 loc) · 5.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
{
"name": "Schedule",
"access": {
"anon": "Can read public schedule information.",
"user": "Can read public schedule information. Cannot modify schedule fact data.",
"admin": "Can read public schedule information. Does not directly modify schedule facts through ordinary pages.",
"agent": "Can read schedules for specific sections; current-user schedule aggregation is primarily exposed via MCP; public schedule retrieval is available through REST and MCP."
},
"rules": {
"schedule-definition": "Schedule refers to a section's class times, locations, and week patterns.",
"schedule-as-context": "The schedule within a section detail page is not treated as an isolated table but as an important entry point for understanding the section context.",
"personal-calendar-integrates": "The personal calendar integrates subscribed section schedules, homework due dates, exam times, and personal todo due dates."
},
"capabilities": {
"my-schedule": {
"title": "My Schedule",
"auth": "user",
"links": {
"models": ["Schedule"]
},
"web": {
"pages": ["/?tab=calendar"]
},
"rest": "unavailable",
"mcp": {
"tools": [
{
"name": "list_my_schedules",
"returns": "{ schedules: ScheduleEntry[] }",
"notes": [
"Returns schedules[]; each item contains date, weekday, startTime, endTime, section.course.namePrimary, section.code, room, teachers[], and scheduleGroup."
]
}
]
},
"display": {
"fields": [
"7-day grid (Sun-Sat)",
"Today highlight",
"schedule.date",
"schedule.startTime - endTime",
"schedule.room.namePrimary",
"section.course.namePrimary",
"teacher names"
],
"filters": ["Previous/next semester links"]
}
},
"public-schedule-query": {
"title": "Public Schedule Query",
"auth": "anon",
"links": {
"models": ["Schedule"]
},
"web": "unavailable",
"rest": {
"routes": [
{
"path": "/api/schedules",
"returns": "PaginatedResponse<ScheduleEntry>",
"notes": [
"Supports filtering by section, teacher, room, date range, and day of week.",
"REST/MCP both accept exact JW/code-style filters for schedules so callers do not need to resolve internal numeric IDs first."
]
}
]
},
"mcp": {
"tools": [
{
"name": "query_schedules",
"returns": "PaginatedResponse<ScheduleEntry>",
"rest_equivalent": "GET /api/schedules"
}
]
},
"display": {
"filters": [
"sectionId",
"sectionJwId",
"sectionCode",
"teacherId",
"teacherCode",
"roomId",
"roomJwId",
"dateFrom/dateTo",
"weekday"
]
}
},
"section-schedule": {
"title": "Section Schedule",
"auth": "anon",
"links": {
"models": ["Schedule"]
},
"web": {
"pages": ["/sections/[jwId]"]
},
"rest": {
"routes": [
{
"path": "/api/sections/[jwId]/schedules",
"returns": "ScheduleEntry[]",
"notes": [
"Returns a simplified variant of ScheduleEntry[] for the section."
]
},
{
"path": "/api/sections/[jwId]/schedule-groups",
"returns": "ScheduleGroupEntry[] (with schedules)",
"notes": [
"Returns schedule groups with schedules, not separate aggregated period summaries."
]
}
]
},
"mcp": {
"tools": [
{
"name": "list_schedules_by_section",
"returns": "{ found: Boolean, section: Section?, schedules: ScheduleEntry[] }",
"rest_equivalent": "GET /api/sections/[jwId]/schedules",
"notes": [
"Default/summary responses omit the repeated per-item section payload because the top-level section already scopes the list.",
"Accepts optional dateFrom/dateTo to narrow results to a specific window (e.g. the current week); both accept flexible date strings."
]
},
{
"name": "get_my_7days_timeline",
"auth": "user",
"returns": "{ range: { from: DateTime, to: DateTime }, total: Int, events: CalendarEvent[] }",
"notes": [
"Returns schedules as the schedule type within a unified event stream.",
"Summary mode returns grouped counts/day slices plus a limited event sample instead of another full raw event dump.",
"Accepts optional atTime to anchor the 7-day window to a specific moment instead of the server clock; useful for asking about a future week."
]
}
]
},
"display": {
"fields": [
"schedule.date",
"schedule.startTime - endTime",
"schedule.room (with building/campus)",
"schedule.weekday (0=Sunday)",
"schedule.teachers[] names"
]
}
}
}
}