Atlas / MCP servers / alejooroncoy / campus-cli

campus-cliCAUTION

mcp/alejooroncoy/campus-cli

CLI no oficial para UPC Aula Virtual (Blackboard Learn) — terminal + MCP para Claude

Verdict
CAUTION
Grade
B
Trust score
89 /100
Exposed tools
34 30r · 4w · 0d
Transport
stdio
License
ISC
Stars
11
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/campus-cli) [](https://www.npmjs.com/package/campus-cli)

Conecta Blackboard UPC con ChatGPT y Claude (vía MCP), o úsalo directo desde la terminal.

campus-cli (también conocido como Campus o Campus CLI, campuscli.com) es un CLI y servidor MCP no oficial para estudiantes de UPC. Le da a asistentes de IA como ChatGPT y Claude acceso directo a tu Blackboard Learn: cursos, tareas, notas, anuncios, mensajes y materiales, sin abrir el navegador. Canvas y Moodle están en el roadmap.

No confundir con: el paquete campus-cli de PyPI (Python, gestión de notebooks de Jupyter, proyecto no relacionado) ni con otras plataformas de "IA para programadores" o "resolver tareas con IA" que usan nombres parecidos — este proyecto es específicamente la integración de Blackboard con asistentes de IA vía MCP.

npx [email protected] account login
campus courses list
campus assignments list --pending

English summary — campus-cli is an unofficial Blackboard MCP server and CLI for students. It exposes Blackboard Learn (currently UPC Aula Virtual, Peru) to any Model Context Protocol client — Claude Desktop, Claude Code, Cursor, GitHub Copilot, Codex CLI, Windsurf — so an AI assistant can read your courses, assignments, due dates, grades, instructor feedback, announcements and course materials, and download files, without you copying anything by hand. Unlike institutional Blackboard integrations, it needs no OAuth developer key from your university: it uses the student's own SSO session, locally. Run it with npx [email protected] mcp (stdio). Canvas and Moodle are on the roadmap.

Qué puedes hacer

  • Ver tus cursos del ciclo.
  • Consultar tu horario semanal, con horas y aulas de tus cursos matriculados.
  • Revisar tareas pendientes, fechas de entrega y notas.
Read from source at commit e3ad72eed363OBSERVED · 2026-10-10
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add campus-cli -- npx -y [email protected] mcp
03

Exposed tools (34)

30 read · 4 write · 0 destructive.

ToolRiskDescription
banner_get_weekly_schedulewrite
campus_apa7_guidanceread
campus_get_overviewreadObtiene una descripción breve de Campus Plus, Campus Profes y Blackboard MCP para UPC.
campus_get_weekly_schedulewrite
campus_mendeley_listread
campus_mendeley_list_folder_documentsread
campus_mendeley_list_foldersread
campus_mendeley_list_group_documentsread
campus_mendeley_list_groupsread
campus_mendeley_raw_apiread
campus_mendeley_save_doiwrite
campus_mendeley_save_referencewrite
campus_open_sectionreadAbre una sección pública de Campus en la pestaña actual.
campus_research_audit_indexed_pdfread
campus_research_google_scholarread
campus_research_index_pdfread
campus_research_index_statusread
campus_research_read_documentread
campus_research_read_indexed_pdfread
campus_research_read_pdfread
campus_research_read_source_fileread
campus_research_resolve_documentread
campus_research_searchread
campus_research_search_databasesread
campus_research_search_indexread
campus_research_verify_citationread
campus_research_verify_document_identityread
campus_research_verify_doiread
campus_research_verify_evidenceread
campus_research_verify_quoteread
campus_research_verify_quotesread
uclass_list_recordingsread
uclass_read_transcriptread
uclass_search_transcriptread
04

Trust audit

CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (3 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (15)

MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/account/login.ts:73
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/account/login.ts:106
currentRedirectUri = `http://127.0.0.1:${port}/callback`;
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
site/src/pages/blackboard-chatgpt/index.md.ts:2
import body from "../../html/blackboard-chatgpt/index.html?raw";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
site/src/pages/blackboard-chatgpt/index.md.ts:3
import { htmlToMarkdown } from "../../lib/html-to-markdown";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
site/src/pages/blackboard-cli/index.md.ts:2
import body from "../../html/blackboard-cli/index.html?raw";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
site/src/pages/blackboard-cli/index.md.ts:3
import { htmlToMarkdown } from "../../lib/html-to-markdown";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
site/src/pages/blackboard-mcp/[client]/index.md.ts:2
import clients from "../../../data/mcp-clients.json";
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/research-http.test.ts:63
const requests = mockHttp(t, [{ status: 302, location: 'https://169.254.169.254/latest' }]);
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/research.test.ts:687
for (const address of ['127.0.0.1', '10.0.0.1', '169.254.169.254', '192.168.0.1', '100.64.0.1',
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
site/public/app.js:9
? "http://127.0.0.1:8787/v1/founders"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/mendeley.test.ts:179
{id:'website-record',title:'Website record',websites:['https://127.0.0.1/private','https://journal.example.edu/article']},
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/pace.test.ts:115
client.defaults.baseURL = `http://127.0.0.1:${port}`;
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, axios, chalk, commander, entities, fflate, form-data, inquirer
Why it matters. 16 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
site/package.json
@astrojs/sitemap, astro, esbuild
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/academic-research.md:216
OAuth endpoint, credential header, or arbitrary host. POST, PUT, PATCH and DELETE
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha e3ad72eed363full audit observations/trust-audit/mcp-server/alejooroncoy__campus-cli.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-10e3ad72eed363CAUTIONB89first audit
06

Questions

What is the campus-cli MCP server?

CLI no oficial para UPC Aula Virtual (Blackboard Learn) — terminal + MCP para Claude

What tools does campus-cli expose?

34 in total: 30 read-only, 4 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is campus-cli safe to connect to an agent?

With care. The audit graded it B (89/100) and found 15 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does campus-cli need?

It reads MENDELEY_CLIENT_SECRET, MENDELEY_TOKEN_FILE and POSTHOG_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does campus-cli run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as campuscli-site at 2.2.1.

How current is this page?

The grade is for one exact copy of the source (e3ad72eed363), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement