wicker-study-mcp 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +2 -2
  2. package/package.json +1 -1
  3. package/server.mjs +10 -1
package/README.md CHANGED
@@ -17,7 +17,7 @@ the MCP server.
17
17
  For a manually supplied key, the same secure bootstrap is available as:
18
18
 
19
19
  ```sh
20
- WICKER_STUDY_URL='https://study.wicker.life' WICKER_STUDY_API_KEY='wsk_…' npx -y wicker-study-mcp@2.7.0 configure
20
+ WICKER_STUDY_URL='https://study.wicker.life' WICKER_STUDY_API_KEY='wsk_…' npx -y wicker-study-mcp@2.8.0 configure
21
21
  ```
22
22
 
23
23
  ```jsonc
@@ -67,7 +67,7 @@ agent receives proxied course data and nothing else.
67
67
  `wicker_status`, `wicker_authorize`, `wicker_sign_out`, and `canvas_connect` work without a key —
68
68
  they are how a key is obtained. Everything else needs one.
69
69
 
70
- - **Reading** — `list_courses`, `get_course`, `get_chapter`, `get_course_outline`, `search_course`,
70
+ - **Reading** — `list_courses`, `get_course`, `get_chapter`, `get_course_outline`, `search_course`, `list_regulation_sources`, `search_regulations`,
71
71
  `list_materials`, `list_questions`, `get_practice_queue`, `get_progress`, `list_flashcards`,
72
72
  `list_due_cards`, `list_mistakes`, `list_mock_sessions`, `get_mock_session`, `get_academic_plan`,
73
73
  `get_planning_context`, `list_known_programmes`, `get_calendar`, `get_activity`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wicker-study-mcp",
3
- "version": "2.7.0",
3
+ "version": "2.8.0",
4
4
  "description": "MCP server for Wicker Study: read course material and a student's academic record, study on their behalf, collect a private Canvas course snapshot, and \u2014 with an admin key \u2014 run the editorial workflow.",
5
5
  "keywords": [
6
6
  "mcp",
package/server.mjs CHANGED
@@ -89,7 +89,7 @@ const json = (value) => ({ content: [{ type: 'text', text: typeof value === 'str
89
89
  const failed = (error) => ({ isError: true, content: [{ type: 'text', text: error.message }] })
90
90
  const run = (fn) => async (args) => { try { return json(await fn(args)) } catch (error) { return failed(error) } }
91
91
 
92
- const server = new McpServer({ name: 'wicker-study', version: '2.7.0' })
92
+ const server = new McpServer({ name: 'wicker-study', version: '2.8.0' })
93
93
  const courseId = z.string().describe('Course id (e.g. "sec"). Use list_courses to discover ids.')
94
94
  const chapterId = z.string().describe('Chapter id (e.g. "02").')
95
95
 
@@ -488,6 +488,15 @@ server.tool('search_course', 'Hybrid full-text and embedding retrieval across pu
488
488
  query: z.string(),
489
489
  limit: z.number().int().min(1).max(20).optional()
490
490
  }, run((args) => api('/api/retrieve', { method: 'POST', body: args })))
491
+ server.tool('search_regulations', 'Focused retrieval from official regulations for the active programme. Use for the Education and Examination Regulations, Board of Examiners, exam and resit procedures, registration, inspections, appeals, exemptions, hardship, fraud, projects, internships and curriculum transition rules. Results include the governing document, academic year and exact page; programme-restricted originals are not exposed.', {
492
+ query: z.string(),
493
+ academicYear: z.string().optional().describe('Exact academic year such as 2026-2027. Defaults to the active programme year.'),
494
+ documentKind: z.enum(['education-examination-regulations', 'rules-regulations', 'board-of-examiners', 'exam-procedure', 'programme-policy', 'other']).optional(),
495
+ limit: z.number().int().min(1).max(20).optional()
496
+ }, run((args) => api('/api/programme-policies/retrieve', { method: 'POST', body: args })))
497
+ server.tool('list_regulation_sources', 'List the official regulation sources indexed for the active programme and academic year. Returns reviewed metadata and coverage counts, never a programme-restricted original.', {
498
+ academicYear: z.string().optional().describe('Exact academic year such as 2026-2027. Defaults to the active programme year.')
499
+ }, run(({ academicYear }) => api('/api/programme-policies', { query: { academicYear } })))
491
500
  server.tool('canvas_corpus_status', 'Material collection consent, background sync jobs, versioned course editions, source counts, and last/next scrape times for the connected account.', {
492
501
  canvasUrl: z.string().url().optional()
493
502
  }, run(({ canvasUrl }) => api('/api/account/integrations/canvas/corpus', { query: { canvasUrl: canvasUrl || DEFAULT_CANVAS_URL } })))