awesome-monash-tools 0.0.0-stage → 0.1.1
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.
- package/LICENSE +21 -0
- package/README.md +296 -2
- package/README.zh-CN.md +297 -0
- package/dist/all.d.ts +2 -0
- package/dist/all.js +13 -0
- package/dist/all.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +384 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/config.d.ts +6 -0
- package/dist/core/config.js +18 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/credentials.d.ts +4 -0
- package/dist/core/credentials.js +64 -0
- package/dist/core/credentials.js.map +1 -0
- package/dist/core/errors.d.ts +20 -0
- package/dist/core/errors.js +38 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/http.d.ts +11 -0
- package/dist/core/http.js +58 -0
- package/dist/core/http.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/mcp.d.ts +16 -0
- package/dist/core/mcp.js +53 -0
- package/dist/core/mcp.js.map +1 -0
- package/dist/core/text.d.ts +7 -0
- package/dist/core/text.js +33 -0
- package/dist/core/text.js.map +1 -0
- package/dist/ed/client.d.ts +126 -0
- package/dist/ed/client.js +333 -0
- package/dist/ed/client.js.map +1 -0
- package/dist/ed/index.d.ts +2 -0
- package/dist/ed/index.js +3 -0
- package/dist/ed/index.js.map +1 -0
- package/dist/ed/server.d.ts +2 -0
- package/dist/ed/server.js +5 -0
- package/dist/ed/server.js.map +1 -0
- package/dist/ed/tools.d.ts +5 -0
- package/dist/ed/tools.js +105 -0
- package/dist/ed/tools.js.map +1 -0
- package/dist/gmail/client.d.ts +57 -0
- package/dist/gmail/client.js +181 -0
- package/dist/gmail/client.js.map +1 -0
- package/dist/gmail/index.d.ts +3 -0
- package/dist/gmail/index.js +4 -0
- package/dist/gmail/index.js.map +1 -0
- package/dist/gmail/oauth.d.ts +29 -0
- package/dist/gmail/oauth.js +147 -0
- package/dist/gmail/oauth.js.map +1 -0
- package/dist/gmail/server.d.ts +2 -0
- package/dist/gmail/server.js +5 -0
- package/dist/gmail/server.js.map +1 -0
- package/dist/gmail/tools.d.ts +12 -0
- package/dist/gmail/tools.js +87 -0
- package/dist/gmail/tools.js.map +1 -0
- package/dist/moodle/client.d.ts +73 -0
- package/dist/moodle/client.js +291 -0
- package/dist/moodle/client.js.map +1 -0
- package/dist/moodle/index.d.ts +2 -0
- package/dist/moodle/index.js +3 -0
- package/dist/moodle/index.js.map +1 -0
- package/dist/moodle/server.d.ts +2 -0
- package/dist/moodle/server.js +5 -0
- package/dist/moodle/server.js.map +1 -0
- package/dist/moodle/tools.d.ts +5 -0
- package/dist/moodle/tools.js +84 -0
- package/dist/moodle/tools.js.map +1 -0
- package/dist/ontrack/client.d.ts +89 -0
- package/dist/ontrack/client.js +213 -0
- package/dist/ontrack/client.js.map +1 -0
- package/dist/ontrack/index.d.ts +2 -0
- package/dist/ontrack/index.js +3 -0
- package/dist/ontrack/index.js.map +1 -0
- package/dist/ontrack/server.d.ts +2 -0
- package/dist/ontrack/server.js +5 -0
- package/dist/ontrack/server.js.map +1 -0
- package/dist/ontrack/tools.d.ts +5 -0
- package/dist/ontrack/tools.js +76 -0
- package/dist/ontrack/tools.js.map +1 -0
- package/docs/auth.md +147 -0
- package/docs/auth.zh-CN.md +147 -0
- package/docs/tools.md +187 -0
- package/docs/tools.zh-CN.md +187 -0
- package/llms.txt +48 -0
- package/package.json +56 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 jackdsjk
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,297 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# Awesome Monash Tools
|
|
4
|
+
|
|
5
|
+
**Agent-native MCP servers for Monash University — Ed, Moodle, Gmail and OnTrack, exposed as 22 read-only tools your agent can call.**
|
|
6
|
+
|
|
7
|
+
[](https://awesome.re)
|
|
8
|
+
[](https://github.com/jackdsjk/awesome-monash-tools/actions/workflows/ci.yml)
|
|
9
|
+
[](https://www.npmjs.com/package/awesome-monash-tools)
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[](https://modelcontextprotocol.io)
|
|
12
|
+
[](#-tool-catalogue)
|
|
13
|
+
[](#-built-for-agents-not-for-humans)
|
|
14
|
+
|
|
15
|
+
**English** · [中文](README.zh-CN.md)
|
|
16
|
+
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
> Monash students work across four systems that never talk to each other: **Ed** for discussion, **Moodle** for deadlines and materials, **Gmail** for official mail, **OnTrack** for FIT task feedback. None of them offers a student-facing API. This repository turns all four into small, typed, read-only MCP tools so an agent can answer *"what is due, what did my tutor say, and what did I miss?"* with real data instead of guesses.
|
|
20
|
+
|
|
21
|
+
> **Unofficial.** Not affiliated with Monash University, Ed, Moodle, Google or Doubtfire. Use your own account, at your own risk, and respect each service's terms.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 🤖 Built for agents, not for humans
|
|
26
|
+
|
|
27
|
+
This repository ships **no app, no dashboard and no chat UI**. The only interface is a set of MCP tools. Every design choice targets the model on the other side of the protocol:
|
|
28
|
+
|
|
29
|
+
| Decision | Why it exists |
|
|
30
|
+
|---|---|
|
|
31
|
+
| **Tools, not pages** | An agent cannot "browse" Moodle. It can call `moodle_deadlines` and get JSON. |
|
|
32
|
+
| **Descriptions written for models** | Each tool states when to use it, what it returns, and what the next step is. |
|
|
33
|
+
| **Errors are instructions** | A dead session returns *"Moodle rejected the saved session. Run `awesome-monash login moodle`"* — not a stack trace. |
|
|
34
|
+
| **Deterministic output** | Stable field names, ISO timestamps, nearest-first sorting. Nothing the model has to re-derive. |
|
|
35
|
+
| **Read-only by construction** | No write path exists in the codebase. Every tool is annotated `readOnlyHint`. |
|
|
36
|
+
| **One credential, many calls** | Login is a CLI step; the agent never sees or asks for a password. |
|
|
37
|
+
| **Local stdio only** | No server, no telemetry, no account to create. The host spawns a process. |
|
|
38
|
+
|
|
39
|
+
Works with any MCP host: **Claude Code**, **Claude Desktop**, **Cursor**, **Codex**, **DeepSeek Harness**, or your own agent loop.
|
|
40
|
+
|
|
41
|
+
## 📋 Table of Contents
|
|
42
|
+
|
|
43
|
+
- [Why this exists](#-why-this-exists)
|
|
44
|
+
- [What's inside](#-whats-inside)
|
|
45
|
+
- [What agents can do](#-what-agents-can-do)
|
|
46
|
+
- [Quick start](#-quick-start)
|
|
47
|
+
- [MCP configuration](#-mcp-configuration)
|
|
48
|
+
- [Tool catalogue](#-tool-catalogue)
|
|
49
|
+
- [Design principles](#-design-principles)
|
|
50
|
+
- [Security and privacy](#-security-and-privacy)
|
|
51
|
+
- [Repository layout](#-repository-layout)
|
|
52
|
+
- [Development](#-development)
|
|
53
|
+
- [Contributing](#-contributing)
|
|
54
|
+
- [Related projects](#-related-projects)
|
|
55
|
+
- [License](#-license)
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 💡 Why this exists
|
|
60
|
+
|
|
61
|
+
Ask a Monash student a simple question — *"what's due this week?"* — and the real answer requires four logins, four UIs and a mental join. The information exists, but it is optimized for humans clicking around, not for an agent answering.
|
|
62
|
+
|
|
63
|
+
Existing tools stop halfway:
|
|
64
|
+
|
|
65
|
+
- `moodle-cli`, `edstem-cli` and `ontrack-cli` are excellent **terminal** tools. They print tables for a person and assume a person runs them.
|
|
66
|
+
- Scraping libraries return HTML. A model then burns context re-reading a Moodle theme.
|
|
67
|
+
- Each service authenticates differently (API token, SSO cookie, OAuth, refresh cookie). Doing that per question is impossible.
|
|
68
|
+
|
|
69
|
+
This project does the boring part once — **authentication, normalization, and error recovery** — and exposes the result as 22 MCP tools with consistent shapes. The agent does the thinking; the repository does the plumbing.
|
|
70
|
+
|
|
71
|
+
**What this is not:** not a Monash client, not a notification app, not a scraper you point at arbitrary URLs, and not a way to automate submissions. There is deliberately no write access.
|
|
72
|
+
|
|
73
|
+
## 📦 What's inside
|
|
74
|
+
|
|
75
|
+
| Component | What you get |
|
|
76
|
+
|---|---|
|
|
77
|
+
| **4 MCP servers** | `ed`, `moodle`, `gmail`, `ontrack` — each independently runnable |
|
|
78
|
+
| **1 combined server** | `all` — all 22 tools in one process |
|
|
79
|
+
| **1 CLI** | `awesome-monash login / logout / status / serve` |
|
|
80
|
+
| **22 tools** | typed inputs, JSON output, actionable errors |
|
|
81
|
+
| **Docs** | [Auth guide](docs/auth.md) · [Tool reference](docs/tools.md) · [llms.txt](llms.txt) |
|
|
82
|
+
|
|
83
|
+
| Server | Bin | Tools | Auth captured by `awesome-monash login` |
|
|
84
|
+
|---|---|---:|---|
|
|
85
|
+
| Ed | `awesome-monash-ed` | 7 | API token from <https://edstem.org/settings/api-tokens> |
|
|
86
|
+
| Moodle | `awesome-monash-moodle` | 5 | Monash SSO cookie jar (Chrome, one login) |
|
|
87
|
+
| Gmail | `awesome-monash-gmail` | 5 | Google OAuth, `gmail.readonly` only |
|
|
88
|
+
| OnTrack | `awesome-monash-ontrack` | 5 | Monash SSO refresh cookie |
|
|
89
|
+
| All | `awesome-monash-all` | 22 | whichever sources you connected |
|
|
90
|
+
|
|
91
|
+
## 🎯 What agents can do
|
|
92
|
+
|
|
93
|
+
Real questions, and the tools that answer them:
|
|
94
|
+
|
|
95
|
+
| Ask your agent | Tools it calls |
|
|
96
|
+
|---|---|
|
|
97
|
+
| "What is due in the next 14 days, and which ones have I already submitted?" | `moodle_deadlines` with `checkSubmitted: true` |
|
|
98
|
+
| "Summarize this week's Ed threads in FIT1045; skip anything already answered." | `ed_list_threads` → `ed_get_thread` |
|
|
99
|
+
| "Did my tutor leave feedback on P1? Quote the part about the data model." | `ontrack_list_projects` → `ontrack_list_tasks` → `ontrack_task_comments` |
|
|
100
|
+
| "Find the enrolment email from Monash and tell me the payment deadline." | `gmail_search_messages` → `gmail_get_message` |
|
|
101
|
+
| "What's in week 8 of FIT1047, and is there a lab sheet?" | `moodle_list_courses` → `moodle_course_content` |
|
|
102
|
+
| "Build my week: deadlines first, then unread Ed threads, then tutor feedback." | all four servers |
|
|
103
|
+
|
|
104
|
+
Because everything is scoped to **your own account**, the answers are yours: your submissions, your feedback, your inbox. Nothing is shared or cached remotely.
|
|
105
|
+
|
|
106
|
+
## 🚀 Quick start
|
|
107
|
+
|
|
108
|
+
Requires **Node.js 20.11+** and **Google Chrome** (only for the two SSO logins).
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Nothing to install: npx pulls the published package.
|
|
112
|
+
npx -y awesome-monash-tools@latest login ed
|
|
113
|
+
npx -y awesome-monash-tools@latest login moodle
|
|
114
|
+
npx -y awesome-monash-tools@latest login ontrack
|
|
115
|
+
npx -y awesome-monash-tools@latest login gmail --client-id <id> --client-secret <secret>
|
|
116
|
+
|
|
117
|
+
npx -y awesome-monash-tools@latest status
|
|
118
|
+
npx -y awesome-monash-tools@latest serve all
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Prefer a short command? Install it once and drop the `npx ...` prefix:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npm install -g awesome-monash-tools
|
|
125
|
+
|
|
126
|
+
awesome-monash login ed
|
|
127
|
+
awesome-monash status
|
|
128
|
+
awesome-monash serve all
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`login moodle` and `login ontrack` open a Chrome window: finish the normal Monash SSO login, wait for the dashboard, and the session is saved automatically. Nothing is typed into this tool.
|
|
132
|
+
|
|
133
|
+
> Working on the code instead? `git clone` the repo, then `npm install && npm run build && npm link`.
|
|
134
|
+
|
|
135
|
+
## 🔌 MCP configuration
|
|
136
|
+
|
|
137
|
+
**Claude Code**
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
claude mcp add monash -- npx -y awesome-monash-tools@latest serve all
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`)
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"mcpServers": {
|
|
148
|
+
"monash": {
|
|
149
|
+
"command": "npx",
|
|
150
|
+
"args": ["-y", "awesome-monash-tools@latest", "serve", "all"]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Prefer one server per source (smaller tool list, clearer permissions):
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"mcpServers": {
|
|
161
|
+
"ed": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "ed"] },
|
|
162
|
+
"moodle": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "moodle"] },
|
|
163
|
+
"gmail": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "gmail"] },
|
|
164
|
+
"ontrack": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "ontrack"] }
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Cursor** uses the same JSON in `.cursor/mcp.json`.
|
|
170
|
+
|
|
171
|
+
**Codex** (`~/.codex/config.toml`):
|
|
172
|
+
|
|
173
|
+
```toml
|
|
174
|
+
[mcp_servers.monash]
|
|
175
|
+
command = "npx"
|
|
176
|
+
args = ["-y", "awesome-monash-tools@latest", "serve", "all"]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## 🧰 Tool catalogue
|
|
180
|
+
|
|
181
|
+
Full parameters and return shapes: [docs/tools.md](docs/tools.md).
|
|
182
|
+
|
|
183
|
+
### Ed — discussion threads and lessons
|
|
184
|
+
|
|
185
|
+
| Tool | Description |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `ed_whoami` | Account and courses behind the token |
|
|
188
|
+
| `ed_list_courses` | Course ids and codes |
|
|
189
|
+
| `ed_list_threads` | Threads of one course, newest/top/unanswered |
|
|
190
|
+
| `ed_search_threads` | Search titles and bodies across courses |
|
|
191
|
+
| `ed_get_thread` | Full thread with nested replies and staff answers |
|
|
192
|
+
| `ed_list_lessons` | Weekly lesson modules |
|
|
193
|
+
| `ed_get_lesson` | Every slide as text/Markdown, files and video URLs |
|
|
194
|
+
|
|
195
|
+
### Moodle — deadlines and materials
|
|
196
|
+
|
|
197
|
+
| Tool | Description |
|
|
198
|
+
|---|---|
|
|
199
|
+
| `moodle_whoami` | Session health check |
|
|
200
|
+
| `moodle_list_courses` | Enrolled courses |
|
|
201
|
+
| `moodle_deadlines` | Due dates nearest first, optional submission check |
|
|
202
|
+
| `moodle_course_content` | Sections, activities, label text, file links |
|
|
203
|
+
| `moodle_submission_status` | submitted / graded / none for one activity |
|
|
204
|
+
|
|
205
|
+
### Gmail — the official inbox
|
|
206
|
+
|
|
207
|
+
| Tool | Description |
|
|
208
|
+
|---|---|
|
|
209
|
+
| `gmail_profile` | Address and counts |
|
|
210
|
+
| `gmail_list_labels` | Labels and ids |
|
|
211
|
+
| `gmail_search_messages` | Gmail query syntax, metadata results |
|
|
212
|
+
| `gmail_get_message` | Plain-text body, recipients, attachments |
|
|
213
|
+
| `gmail_get_thread` | Every message in a thread |
|
|
214
|
+
|
|
215
|
+
### OnTrack — FIT task feedback
|
|
216
|
+
|
|
217
|
+
| Tool | Description |
|
|
218
|
+
|---|---|
|
|
219
|
+
| `ontrack_whoami` | Account behind the refresh cookie |
|
|
220
|
+
| `ontrack_list_projects` | Units and project ids |
|
|
221
|
+
| `ontrack_list_tasks` | Status, weighting, due dates |
|
|
222
|
+
| `ontrack_task_comments` | Tutor comments and grade rationale |
|
|
223
|
+
| `ontrack_download` | Save a task sheet or submission PDF locally |
|
|
224
|
+
|
|
225
|
+
## 🧱 Design principles
|
|
226
|
+
|
|
227
|
+
1. **Normalize at the edge.** Moodle is scraped internally and returned as structured sections — the model never sees HTML.
|
|
228
|
+
2. **One job per tool.** `moodle_deadlines` does deadlines; `moodle_submission_status` checks one submission. No mega-tools.
|
|
229
|
+
3. **Verb + noun names, prefixed by source.** `ed_get_thread` is unambiguous in a 22-tool list.
|
|
230
|
+
4. **Fail with the fix.** Every `AmtError` carries a `hint`; the tool result includes the exact command to run.
|
|
231
|
+
5. **Read-only by construction.** No write code path exists. `ontrack_download` writes a local file and is the only non-read-only annotation.
|
|
232
|
+
6. **Stable shapes.** Field names, ISO timestamps, deterministic ordering — agents can rely on them between calls.
|
|
233
|
+
7. **Local and quiet.** stdio transport, no server component, no analytics, no remote cache.
|
|
234
|
+
|
|
235
|
+
## 🔒 Security and privacy
|
|
236
|
+
|
|
237
|
+
- Credentials live in `~/.config/awesome-monash-tools/credentials.json`, mode `0600`; `AMT_CONFIG_DIR` relocates them.
|
|
238
|
+
- No password is ever entered into this tool. Moodle and OnTrack logins happen in a real Chrome window.
|
|
239
|
+
- Gmail requests only `gmail.readonly`; revoke at <https://myaccount.google.com/permissions>.
|
|
240
|
+
- No telemetry, no remote logging, no third-party service in the middle.
|
|
241
|
+
- Output is sensitive by definition (grades, feedback, email). Treat transcripts accordingly.
|
|
242
|
+
- Environment overrides exist for advanced users: `ED_API_TOKEN`, `MOODLE_COOKIE`, `ONTRACK_REFRESH_TOKEN`, `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`.
|
|
243
|
+
|
|
244
|
+
## 🗂 Repository layout
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
src/core/ config, credential store, HTTP retries, MCP helpers
|
|
248
|
+
src/ed/ Ed client, tools, server bin
|
|
249
|
+
src/moodle/ Moodle client (AJAX + scraping), tools, server bin
|
|
250
|
+
src/gmail/ Gmail client + OAuth loopback, tools, server bin
|
|
251
|
+
src/ontrack/ OnTrack client (refresh-cookie auth), tools, server bin
|
|
252
|
+
src/all.ts combined server
|
|
253
|
+
src/cli.ts login / logout / status / serve
|
|
254
|
+
docs/ auth guide and tool reference (EN + 中文)
|
|
255
|
+
scripts/ protocol-level smoke test
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## 🛠 Development
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
npm install
|
|
262
|
+
npm run check # tsc --noEmit + vitest
|
|
263
|
+
npm run build # emit dist/
|
|
264
|
+
npm run smoke # start every server over stdio and call one tool
|
|
265
|
+
npm run dev -- status
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
The test suite uses a fake `fetch`; no real account is required to develop. See [AGENTS.md](AGENTS.md) for conventions.
|
|
269
|
+
|
|
270
|
+
## 🤝 Contributing
|
|
271
|
+
|
|
272
|
+
- **New tools:** keep them read-only, add a zod schema, annotate with `readOnlyHint`, and make the error hint actionable.
|
|
273
|
+
- **New sources:** follow `src/ed/` (client → tools → server) and add a credential section in [docs/auth.md](docs/auth.md).
|
|
274
|
+
- **Docs:** update both `README.md` and `README.zh-CN.md`, and both language versions of `docs/`.
|
|
275
|
+
- Run `npm run check && npm run smoke` before opening a PR.
|
|
276
|
+
|
|
277
|
+
## 🌏 Related projects
|
|
278
|
+
|
|
279
|
+
Other community work in the Monash × agents space. Some of it taught this project how the APIs behave; none of it is bundled here.
|
|
280
|
+
|
|
281
|
+
| Project | What it does | License |
|
|
282
|
+
|---|---|---|
|
|
283
|
+
| [bunizao/edstem-cli](https://github.com/bunizao/edstem-cli) | Ed CLI + MCP server, the closest prior art | MIT |
|
|
284
|
+
| [bunizao/moodle-cli](https://github.com/bunizao/moodle-cli) | Moodle CLI covering deadlines, grades and forums | MIT |
|
|
285
|
+
| [bunizao/ontrack-cli](https://github.com/bunizao/ontrack-cli) | OnTrack tasks and submissions from the terminal | MIT |
|
|
286
|
+
| [MarkChu-git/Always-Ontrack](https://github.com/MarkChu-git/Always-Ontrack) | OnTrack watcher with real-time feedback | Apache-2.0 |
|
|
287
|
+
| [TuuHub/unicorn](https://github.com/TuuHub/unicorn) | Self-hosted campus memory layer (Cove) | Apache-2.0 |
|
|
288
|
+
|
|
289
|
+
Built something else for Monash students? Open a PR and add it to the table.
|
|
290
|
+
|
|
291
|
+
## 📄 License
|
|
292
|
+
|
|
293
|
+
[MIT](LICENSE) © 2026 jackdsjk
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
*Built for agents that need to know what is due.*
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# Awesome Monash Tools
|
|
4
|
+
|
|
5
|
+
**为 Monash 学生做的 Agent 原生 MCP 工具集:把 Ed、Moodle、Gmail、OnTrack 变成 22 个只读工具,交给你的 Agent 调用。**
|
|
6
|
+
|
|
7
|
+
[](https://awesome.re)
|
|
8
|
+
[](https://github.com/jackdsjk/awesome-monash-tools/actions/workflows/ci.yml)
|
|
9
|
+
[](https://www.npmjs.com/package/awesome-monash-tools)
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[](https://modelcontextprotocol.io)
|
|
12
|
+
[](#-工具目录)
|
|
13
|
+
[](#-这是给-agent-用的不是给人用的)
|
|
14
|
+
|
|
15
|
+
[English](README.md) · **中文**
|
|
16
|
+
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
> Monash 学生的日常横跨四个互不相通的系统:**Ed** 讨论区、**Moodle** 截止日期与课件、**Gmail** 官方邮件、**OnTrack** FIT 任务反馈。这四个系统都没有面向学生的 API。本仓库把它们统一成一组小而明确的只读 MCP 工具,让 Agent 能基于真实数据回答「这周要交什么、tutor 说了什么、我漏了什么」。
|
|
20
|
+
|
|
21
|
+
> **非官方项目。** 与 Monash University、Ed、Moodle、Google、Doubtfire 均无隶属关系。请使用自己的账号,自担风险,并遵守各服务条款。
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 🤖 这是给 Agent 用的,不是给人用的
|
|
26
|
+
|
|
27
|
+
本仓库**没有 App、没有仪表盘、没有聊天界面**。唯一的接口就是一组 MCP 工具。每个设计决定都服务于协议另一端的那个模型:
|
|
28
|
+
|
|
29
|
+
| 设计 | 为什么 |
|
|
30
|
+
|---|---|
|
|
31
|
+
| **给工具,不给页面** | Agent 没法「浏览」Moodle;它能调用 `moodle_deadlines` 拿到 JSON。 |
|
|
32
|
+
| **工具描述按模型来写** | 每个工具都说明:什么时候用、返回什么、下一步做什么。 |
|
|
33
|
+
| **报错即指令** | 会话过期时返回的是「Moodle 会话已失效,请运行 `awesome-monash login moodle`」,不是堆栈。 |
|
|
34
|
+
| **输出确定** | 字段名稳定、时间统一 ISO、默认按时间排序,模型不需要二次推导。 |
|
|
35
|
+
| **结构上只读** | 代码里不存在写入路径;每个工具都标注 `readOnlyHint`。 |
|
|
36
|
+
| **一次登录,多次调用** | 登录是 CLI 的一步;Agent 永远看不到、也不需要密码。 |
|
|
37
|
+
| **纯本地 stdio** | 没有服务端、没有埋点、不用注册账号;宿主拉起一个进程即可。 |
|
|
38
|
+
|
|
39
|
+
兼容任何 MCP 宿主:**Claude Code**、**Claude Desktop**、**Cursor**、**Codex**、**DeepSeek Harness**,或你自己的 agent loop。
|
|
40
|
+
|
|
41
|
+
## 📋 目录
|
|
42
|
+
|
|
43
|
+
- [为什么做这个](#-为什么做这个)
|
|
44
|
+
- [里面有什么](#-里面有什么)
|
|
45
|
+
- [Agent 能做什么](#-agent-能做什么)
|
|
46
|
+
- [快速开始](#-快速开始)
|
|
47
|
+
- [MCP 配置](#-mcp-配置)
|
|
48
|
+
- [工具目录](#-工具目录)
|
|
49
|
+
- [设计原则](#-设计原则)
|
|
50
|
+
- [安全与隐私](#-安全与隐私)
|
|
51
|
+
- [仓库结构](#-仓库结构)
|
|
52
|
+
- [开发](#-开发)
|
|
53
|
+
- [参与贡献](#-参与贡献)
|
|
54
|
+
- [相关项目](#-相关项目)
|
|
55
|
+
- [许可证](#-许可证)
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 💡 为什么做这个
|
|
60
|
+
|
|
61
|
+
问一个 Monash 学生「这周要交什么」,真实答案需要四次登录、四个界面,再在脑子里做一次 join。信息一直存在,但它优化的是「人点着看」,不是「Agent 直接回答」。
|
|
62
|
+
|
|
63
|
+
现有工具只解决了一半:
|
|
64
|
+
|
|
65
|
+
- `moodle-cli`、`edstem-cli`、`ontrack-cli` 都是优秀的**终端**工具,但它们默认使用者是人:输出表格、命令行交互、一次一问。
|
|
66
|
+
- 网页抓取库返回的是 HTML,模型得花大量上下文重新理解 Moodle 的主题结构。
|
|
67
|
+
- 四个系统的认证方式完全不同:API token、SSO cookie、OAuth、refresh cookie。每问一个问题都重新认证一次,不可行。
|
|
68
|
+
|
|
69
|
+
这个项目把最枯燥的部分一次做完——**认证、归一化、错误恢复**——然后把结果暴露成 22 个形状一致的 MCP 工具。思考交给 Agent,管道交给仓库。
|
|
70
|
+
|
|
71
|
+
**它不是什么:** 不是 Monash 客户端,不是通知应用,不是可以随便指向任意 URL 的爬虫,也不是自动交作业的捷径。**这里刻意没有写权限。**
|
|
72
|
+
|
|
73
|
+
## 📦 里面有什么
|
|
74
|
+
|
|
75
|
+
| 组成 | 内容 |
|
|
76
|
+
|---|---|
|
|
77
|
+
| **4 个 MCP server** | `ed`、`moodle`、`gmail`、`ontrack`,各自独立运行 |
|
|
78
|
+
| **1 个聚合 server** | `all`,22 个工具在同一个进程里 |
|
|
79
|
+
| **1 个 CLI** | `awesome-monash login / logout / status / serve` |
|
|
80
|
+
| **22 个工具** | 类型化入参、JSON 输出、可执行的报错 |
|
|
81
|
+
| **文档** | [认证指南](docs/auth.zh-CN.md) · [工具参考](docs/tools.zh-CN.md) · [llms.txt](llms.txt) |
|
|
82
|
+
|
|
83
|
+
| Server | 可执行名 | 工具数 | `awesome-monash login` 抓取的凭据 |
|
|
84
|
+
|---|---|---:|---|
|
|
85
|
+
| Ed | `awesome-monash-ed` | 7 | <https://edstem.org/settings/api-tokens> 生成的 API token |
|
|
86
|
+
| Moodle | `awesome-monash-moodle` | 5 | Monash SSO cookie(Chrome 里登录一次) |
|
|
87
|
+
| Gmail | `awesome-monash-gmail` | 5 | Google OAuth,仅 `gmail.readonly` |
|
|
88
|
+
| OnTrack | `awesome-monash-ontrack` | 5 | Monash SSO refresh cookie |
|
|
89
|
+
| All | `awesome-monash-all` | 22 | 你已连接的所有来源 |
|
|
90
|
+
|
|
91
|
+
## 🎯 Agent 能做什么
|
|
92
|
+
|
|
93
|
+
真实问题,以及回答它们要调用的工具:
|
|
94
|
+
|
|
95
|
+
| 你可以这样问 Agent | 它会调用 |
|
|
96
|
+
|---|---|
|
|
97
|
+
| 「未来 14 天有什么要交?哪些我已经交了?」 | `moodle_deadlines`(`checkSubmitted: true`) |
|
|
98
|
+
| 「总结 FIT1045 这周的 Ed 帖子,已经被回答的跳过。」 | `ed_list_threads` → `ed_get_thread` |
|
|
99
|
+
| 「Tutor 对 P1 留反馈了吗?把讲数据模型的那段原话给我。」 | `ontrack_list_projects` → `ontrack_list_tasks` → `ontrack_task_comments` |
|
|
100
|
+
| 「找出 Monash 发的选课邮件,告诉我缴费截止日。」 | `gmail_search_messages` → `gmail_get_message` |
|
|
101
|
+
| 「FIT1047 第 8 周有什么?有 lab sheet 吗?」 | `moodle_list_courses` → `moodle_course_content` |
|
|
102
|
+
| 「帮我排这周:先截止日期,再未读 Ed 帖,最后 tutor 反馈。」 | 四个 server 全用上 |
|
|
103
|
+
|
|
104
|
+
因为一切都限定在**你自己的账号**内,答案也是你自己的:你的提交、你的反馈、你的收件箱。不会共享,也不会在远端缓存。
|
|
105
|
+
|
|
106
|
+
## 🚀 快速开始
|
|
107
|
+
|
|
108
|
+
需要 **Node.js 20.11+** 和 **Google Chrome**(只有两个 SSO 登录会用到)。
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# 不用安装:npx 直接从 npm 拉取
|
|
112
|
+
npx -y awesome-monash-tools@latest login ed
|
|
113
|
+
npx -y awesome-monash-tools@latest login moodle
|
|
114
|
+
npx -y awesome-monash-tools@latest login ontrack
|
|
115
|
+
npx -y awesome-monash-tools@latest login gmail --client-id <id> --client-secret <secret>
|
|
116
|
+
|
|
117
|
+
npx -y awesome-monash-tools@latest status
|
|
118
|
+
npx -y awesome-monash-tools@latest serve all
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
嫌命令长?装一次,之后就能用短命令:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npm install -g awesome-monash-tools
|
|
125
|
+
|
|
126
|
+
awesome-monash login ed
|
|
127
|
+
awesome-monash status
|
|
128
|
+
awesome-monash serve all
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`login moodle` / `login ontrack` 会打开 Chrome 窗口:正常完成 Monash SSO 登录、等仪表盘加载出来,会话就自动保存了。**这个工具不会让你输入密码。**
|
|
132
|
+
|
|
133
|
+
> 想改代码?`git clone` 仓库后 `npm install && npm run build && npm link`。
|
|
134
|
+
|
|
135
|
+
## 🔌 MCP 配置
|
|
136
|
+
|
|
137
|
+
**Claude Code**
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
claude mcp add monash -- npx -y awesome-monash-tools@latest serve all
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Claude Desktop**(`~/Library/Application Support/Claude/claude_desktop_config.json`)
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"mcpServers": {
|
|
148
|
+
"monash": {
|
|
149
|
+
"command": "npx",
|
|
150
|
+
"args": ["-y", "awesome-monash-tools@latest", "serve", "all"]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
也可以按来源拆开(工具列表更小、权限更清晰):
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"mcpServers": {
|
|
161
|
+
"ed": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "ed"] },
|
|
162
|
+
"moodle": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "moodle"] },
|
|
163
|
+
"gmail": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "gmail"] },
|
|
164
|
+
"ontrack": { "command": "npx", "args": ["-y", "awesome-monash-tools@latest", "serve", "ontrack"] }
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Cursor** 在 `.cursor/mcp.json` 用同样的 JSON。
|
|
170
|
+
|
|
171
|
+
**Codex**(`~/.codex/config.toml`):
|
|
172
|
+
|
|
173
|
+
```toml
|
|
174
|
+
[mcp_servers.monash]
|
|
175
|
+
command = "npx"
|
|
176
|
+
args = ["-y", "awesome-monash-tools@latest", "serve", "all"]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## 🧰 工具目录
|
|
180
|
+
|
|
181
|
+
完整参数与返回结构见 [docs/tools.zh-CN.md](docs/tools.zh-CN.md)。
|
|
182
|
+
|
|
183
|
+
### Ed — 讨论帖与课件
|
|
184
|
+
|
|
185
|
+
| 工具 | 作用 |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `ed_whoami` | token 背后的账号与课程 |
|
|
188
|
+
| `ed_list_courses` | 课程 id 与课程代码 |
|
|
189
|
+
| `ed_list_threads` | 某门课的帖子,可按最新/最热/未回答 |
|
|
190
|
+
| `ed_search_threads` | 跨课程搜索标题与正文 |
|
|
191
|
+
| `ed_get_thread` | 完整帖子,含嵌套回复与 staff 回答 |
|
|
192
|
+
| `ed_list_lessons` | 按周的 lesson 模块 |
|
|
193
|
+
| `ed_get_lesson` | 每页 slide 的文本/Markdown、附件与视频地址 |
|
|
194
|
+
|
|
195
|
+
### Moodle — 截止日期与课件
|
|
196
|
+
|
|
197
|
+
| 工具 | 作用 |
|
|
198
|
+
|---|---|
|
|
199
|
+
| `moodle_whoami` | 会话健康检查 |
|
|
200
|
+
| `moodle_list_courses` | 已选课程 |
|
|
201
|
+
| `moodle_deadlines` | 按到期时间排序,可选检查是否已提交 |
|
|
202
|
+
| `moodle_course_content` | 章节、活动、label 文本、文件链接 |
|
|
203
|
+
| `moodle_submission_status` | 单个作业的 submitted / graded / none |
|
|
204
|
+
|
|
205
|
+
### Gmail — 官方邮箱
|
|
206
|
+
|
|
207
|
+
| 工具 | 作用 |
|
|
208
|
+
|---|---|
|
|
209
|
+
| `gmail_profile` | 邮箱地址与邮件计数 |
|
|
210
|
+
| `gmail_list_labels` | 标签与 id |
|
|
211
|
+
| `gmail_search_messages` | Gmail 查询语法,返回元数据 |
|
|
212
|
+
| `gmail_get_message` | 纯文本正文、收件人、附件列表 |
|
|
213
|
+
| `gmail_get_thread` | 整个会话的所有邮件 |
|
|
214
|
+
|
|
215
|
+
### OnTrack — FIT 任务反馈
|
|
216
|
+
|
|
217
|
+
| 工具 | 作用 |
|
|
218
|
+
|---|---|
|
|
219
|
+
| `ontrack_whoami` | refresh cookie 背后的账号 |
|
|
220
|
+
| `ontrack_list_projects` | 单元与项目 id |
|
|
221
|
+
| `ontrack_list_tasks` | 状态、权重、截止日期 |
|
|
222
|
+
| `ontrack_task_comments` | tutor 评论与评分理由 |
|
|
223
|
+
| `ontrack_download` | 把任务书或提交 PDF 存到本地 |
|
|
224
|
+
|
|
225
|
+
## 🧱 设计原则
|
|
226
|
+
|
|
227
|
+
1. **在边缘做归一化。** Moodle 在内部被解析,对外只返回结构化章节——模型永远看不到 HTML。
|
|
228
|
+
2. **一个工具只做一件事。** `moodle_deadlines` 只管截止日期,查单个提交状态用 `moodle_submission_status`。不做大杂烩。
|
|
229
|
+
3. **动词 + 名词,带来源前缀。** 在 22 个工具里,`ed_get_thread` 没有歧义。
|
|
230
|
+
4. **报错要给解法。** 每个 `AmtError` 都带 `hint`,工具结果里直接给出该跑的命令。
|
|
231
|
+
5. **结构上只读。** 代码里没有写入路径;`ontrack_download` 只写本地文件,是唯一非只读标注。
|
|
232
|
+
6. **形状稳定。** 字段名、ISO 时间、确定的排序——Agent 可以在多次调用之间依赖它们。
|
|
233
|
+
7. **本地、安静。** stdio 传输,没有服务端组件、没有分析、没有远端缓存。
|
|
234
|
+
|
|
235
|
+
## 🔒 安全与隐私
|
|
236
|
+
|
|
237
|
+
- 凭据存放在 `~/.config/awesome-monash-tools/credentials.json`,权限 `0600`;可用 `AMT_CONFIG_DIR` 改位置。
|
|
238
|
+
- 本工具从不要求输入密码。Moodle 与 OnTrack 的登录发生在真实的 Chrome 窗口里。
|
|
239
|
+
- Gmail 只申请 `gmail.readonly`;可随时在 <https://myaccount.google.com/permissions> 撤销。
|
|
240
|
+
- 没有埋点、没有远端日志、中间没有第三方服务。
|
|
241
|
+
- 输出本身就是敏感信息(成绩、反馈、邮件),转述时请自行判断。
|
|
242
|
+
- 高级用户可用环境变量覆盖:`ED_API_TOKEN`、`MOODLE_COOKIE`、`ONTRACK_REFRESH_TOKEN`、`GOOGLE_CLIENT_ID`、`GOOGLE_CLIENT_SECRET`。
|
|
243
|
+
|
|
244
|
+
## 🗂 仓库结构
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
src/core/ 配置、凭据存储、HTTP 重试、MCP 辅助
|
|
248
|
+
src/ed/ Ed 客户端、工具、server 入口
|
|
249
|
+
src/moodle/ Moodle 客户端(AJAX + 抓取)、工具、入口
|
|
250
|
+
src/gmail/ Gmail 客户端 + OAuth 回环、工具、入口
|
|
251
|
+
src/ontrack/ OnTrack 客户端(refresh cookie)、工具、入口
|
|
252
|
+
src/all.ts 聚合 server
|
|
253
|
+
src/cli.ts login / logout / status / serve
|
|
254
|
+
docs/ 认证指南与工具参考(中英双语)
|
|
255
|
+
scripts/ 协议级 smoke 测试
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## 🛠 开发
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
npm install
|
|
262
|
+
npm run check # tsc --noEmit + vitest
|
|
263
|
+
npm run build # 产出 dist/
|
|
264
|
+
npm run smoke # 真的拉起每个 server 并通过 stdio 调用一个工具
|
|
265
|
+
npm run dev -- status
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
测试使用假的 `fetch`,开发不需要真实账号。代码约定见 [AGENTS.md](AGENTS.md)。
|
|
269
|
+
|
|
270
|
+
## 🤝 参与贡献
|
|
271
|
+
|
|
272
|
+
- **加工具:** 保持只读、补 zod schema、标注 `readOnlyHint`、报错必须给下一步。
|
|
273
|
+
- **加数据源:** 照 `src/ed/` 的结构(client → tools → server),并在 [docs/auth.md](docs/auth.md) 与中文版里补认证说明。
|
|
274
|
+
- **改文档:** `README.md` 与 `README.zh-CN.md`、`docs/` 的中英两版要同步。
|
|
275
|
+
- 提交 PR 前先跑 `npm run check && npm run smoke`。
|
|
276
|
+
|
|
277
|
+
## 🌏 相关项目
|
|
278
|
+
|
|
279
|
+
Monash × Agent 生态里的其他社区工作。其中一些帮本项目摸清了这些 API 的行为;没有一个被打包进这里。
|
|
280
|
+
|
|
281
|
+
| 项目 | 作用 | 许可 |
|
|
282
|
+
|---|---|---|
|
|
283
|
+
| [bunizao/edstem-cli](https://github.com/bunizao/edstem-cli) | Ed CLI + MCP server,最接近的先行实现 | MIT |
|
|
284
|
+
| [bunizao/moodle-cli](https://github.com/bunizao/moodle-cli) | Moodle CLI,覆盖截止日期、成绩、论坛 | MIT |
|
|
285
|
+
| [bunizao/ontrack-cli](https://github.com/bunizao/ontrack-cli) | 终端里的 OnTrack 任务与提交 | MIT |
|
|
286
|
+
| [MarkChu-git/Always-Ontrack](https://github.com/MarkChu-git/Always-Ontrack) | OnTrack 实时反馈监听 | Apache-2.0 |
|
|
287
|
+
| [TuuHub/unicorn](https://github.com/TuuHub/unicorn) | 自托管的校园记忆层(Cove) | Apache-2.0 |
|
|
288
|
+
|
|
289
|
+
如果你也为 Monash 学生做了东西,欢迎提 PR 加进这张表。
|
|
290
|
+
|
|
291
|
+
## 📄 许可证
|
|
292
|
+
|
|
293
|
+
[MIT](LICENSE) © 2026 jackdsjk
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
*为那些需要知道「这周要交什么」的 Agent 而建。*
|
package/dist/all.d.ts
ADDED
package/dist/all.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createServer, serve } from "./core/mcp.js";
|
|
3
|
+
import { registerEdTools } from "./ed/tools.js";
|
|
4
|
+
import { registerGmailTools } from "./gmail/tools.js";
|
|
5
|
+
import { registerMoodleTools } from "./moodle/tools.js";
|
|
6
|
+
import { registerOnTrackTools } from "./ontrack/tools.js";
|
|
7
|
+
const server = createServer("awesome-monash-all", "One MCP server for Ed, Moodle, Gmail and OnTrack. Tool prefixes name the source (ed_, moodle_, gmail_, ontrack_); use `awesome-monash login <source>` for any that report a missing session.");
|
|
8
|
+
registerEdTools(server);
|
|
9
|
+
registerMoodleTools(server);
|
|
10
|
+
registerGmailTools(server);
|
|
11
|
+
registerOnTrackTools(server);
|
|
12
|
+
await serve(server, "all");
|
|
13
|
+
//# sourceMappingURL=all.js.map
|
package/dist/all.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all.js","sourceRoot":"","sources":["../src/all.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,GAAG,YAAY,CACzB,oBAAoB,EACpB,8LAA8L,CAC/L,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAE7B,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC"}
|
package/dist/cli.d.ts
ADDED