IndusLMS Agent
Read-only agent access to Indus LMS academics — announcements, assignments, shared resources, notifications, attendance — plus school email and OneDrive files. For pi, opencode, Claude Code/Desktop, and OpenAI-compatible agents via MCP + Skill + CLI.
Quickstart
git clone https://github.com/StrangeSid/induslms-agent.git
cd induslms-agent
./install.sh
install.sh creates .venv, installs the package, logs you in, wires up MCP configs for pi + opencode, installs the skill, and runs a health check. Then restart your agent host and ask: "list my courses using induslms-academics".
Manual setup (if you prefer)
python3 -m venv .venv && source .venv/bin/activate
pip install -e . # or: pip install -r requirements.txt
cp .env.example .env # fill in your values (auto-loaded, never committed)
python3 lms.py login you@school.example
python3 lms.py doctor # health check
Or from PyPI: pipx install induslms-agent (or uvx induslms-agent doctor), then induslms login you@school.example and use induslms-server as your MCP command.
Configuration
| Variable | Purpose |
|---|---|
INDUSLMS_EMAIL / INDUSLMS_PASS |
Used once by lms.py login, then discarded |
INDUSLMS_TENANT |
Tenant fallback when the token has no roles |
INDUSLMS_TOKEN_FILE |
Token cache path (default ~/.induslms_token.json) |
INDUS_OUTLOOK_CLIENT_ID |
Your Entra app id for Graph login |
INDUS_USE_BUILTIN_CLIENT=1 |
Alternative: no registration — sign in as yourself via the pre-consented Microsoft Office client |
Credentials live only in your local process environment. The MCP server exposes no login/token tools, no tool ever returns secrets, and .gitignore blocks .env, *token*.json, and downloads.
MCP server
Stdio, 22 tools. Run with python3 server.py (or induslms-server after install).
| Group | Tools |
|---|---|
| LMS academics | get_profile, list_courses, list_resources, get_resource, download_resource, assignments_overview, list_eol, list_assessments, list_notifications, get_attendance, get_attendance_day, list_announcements, list_calendar |
| Mail (macOS, no setup) | schoolmail_search, schoolmail_read, schoolmail_folders |
| Mail (Graph, any OS) | outlook_search, outlook_read, outlook_folders |
| Files (Graph, any OS) | od_resolve_link, od_browse, od_download |
Connect your host (replace /path/to with your checkout; ready-made files in examples/):
| Host | Config |
|---|---|
| pi | ~/.pi/agent/mcp.json (or run ./install.sh, which merges it) |
| opencode | ~/.config/opencode/opencode.jsonc under mcp (v1) or mcp.servers (v2) |
| Claude Code | claude mcp add induslms-academics -- <venv-python> <checkout>/server.py, or copy .mcp.json |
| Claude Desktop | paste examples/claude_desktop_config.json.example into claude_desktop_config.json, relaunch |
| OpenAI SDK | MCPServerStdio with {command: <venv-python>, args: [server.py]}; hosted MCP/GPT Actions need public HTTPS (not provided, stdio-only by design) |
School email
- Apple Mail.app (macOS, zero setup):
python3 mailapp.py search "assignment" --top 5— reads the existingSchoolaccount via osascript. On other platforms these tools report unavailable; use Outlook instead. - Outlook/Graph (any OS):
python3 outlook.py login(approve the code in your browser), thensearch/read/folders. NeedsMail.Read: your own app id + one admin consent, orINDUS_USE_BUILTIN_CLIENT=1for no-registration sign-in.
OneDrive / SharePoint files (any OS)
Same device-code flow and token cache as Outlook, plus Files.Read + Sites.Read.All (re-run login once to consent):
python3 sharepoint.py login
python3 sharepoint.py resolve <sharing-link-from-mail>
python3 sharepoint.py browse /
python3 sharepoint.py download <item-id-or-link> --out /tmp/school
No sync client needed — pure HTTPS. Teacher sharing links pasted from mail resolve directly.
Skill + prompt template
- Skill (
skills/induslms-academics/): workflow guidance for agents (notices → assignments → resources → attendance + inbox). Install:bash scripts/install-skill.sh(pi, opencode, Claude). - Prompt (
examples/update-resources.prompt.md): copy-paste template that refreshes a localSchool/folder from LMS + mailbox. Fill in your subjects/teachers, paste into a fresh agent session. - API reference:
skills/induslms-academics/references/endpoints.md(reverse-engineered endpoints, verified live).
Contributing, changelog, license
See CONTRIBUTING.md and CHANGELOG.md. Licensed under GPL-3.0-or-later — see COPYING.
Metadata
Release files for induslms-agent 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| induslms_agent-0.3.1.tar.gz | 33.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| induslms_agent-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 70.2 kB
Release files / induslms_agent-0.3.1.tar.gz
| Download URL | induslms_agent-0.3.1.tar.gz |
|---|---|
| Size | 33.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dc3a8262651309fab927566ec97992a5074e3c9bce71ca724a0b41d3b8e3d8f7
|
|
BLAKE2b-256 checksum How to use checksums |
0ff5cacdda5637b5ecc7f96b8372ad93003a2a4b4c44b4b507a8af12d58b9939
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency logRelease files / induslms_agent-0.3.1-py3-none-any.whl
| Download URL | induslms_agent-0.3.1-py3-none-any.whl |
|---|---|
| Size | 36.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3386da9ebe05b219e8d1ea6ba962d07833d5c024dfcd4efc2f4ff9fd48787d05
|
|
BLAKE2b-256 checksum How to use checksums |
e8185a754cb45739b7a5ffb39d305446879b3ae2ff5228b4212921d82dfdf40b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.
Transparency log