mcpField
N
NTNU Courses (unofficial)

NTNU Courses (unofficial)

远程服务
github.com科研与教育013 周前更新

关于 NTNU Courses (unofficial)

NTNU Courses (unofficial) 是远程 MCP 服务,为助手提供 NTNU 的公开课程和专业数据。其只读工具涵盖课程详情、时间表、成绩、考试、课程比较和冲突检查;这是非官方社区项目。

主要功能

  1. 01搜索课程目录
  2. 02查询教学安排和周课表
  3. 03查看成绩分布
  4. 04查询考试安排
  5. 05搜索专业和培养计划
  6. 06比较课程并检查冲突

适用场景

  1. 01按关键词和学年查找课程
  2. 02核对考试日期和允许的辅助材料
  3. 03选课前比较课程
  4. 04检查课程和考试时间冲突

MCP 相关

该远程 MCP 服务提供十二个只读工具,用于访问 NTNU 公开的课程、时间安排、成绩、考试和专业数据。客户端可通过公开的 MCP URL 连接,无需身份验证。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://ntnu-mcp.martinsundal.no/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

12
参数类型必填说明
pageinteger否
yearinteger是
querystring|null否

详细介绍

ntnu-mcp

一个远程 MCP 服务,为 LLM 助手提供挪威科技大学(NTNU)的课程数据:课程目录搜索、教学安排、每周课表、成绩统计、课程介绍、考试安排和包含官方学习计划的学习项目,以及帮助学生选择课程的比较工具。 作为 Cloudflare Worker 运行;客户端无需安装。

工具

共十二个工具,均为只读:

  • search_courses — 按年份在 NTNU 课程目录中进行全文搜索;返回课程代码、名称、校区和考试日期。
  • get_course_schedule — 获取某门课程在指定年份的所有有日期的教学活动(讲座、实验),包含奥斯陆当地时间和教室。
  • get_weekly_timetable — 获取某门课程的固定每周课表:星期、时间、ISO 周范围和教室。
  • get_grade_distribution — 获取某门课程按年份和学期划分的历史成绩分布,包含人数和百分比。
  • get_course_versions — 获取普通课程代码对应的 DBH 版本课程代码(例如 TDT4100-1);当成绩查询结果为空时,此工具很有用。
  • get_semesters — 获取 NTNU 的学期信息,包括 26h/26v 这类 ID、教学周、考试期日期,以及当前学期。
  • get_course_info — 获取课程的所有信息,但不包括考试安排:学分、级别、校区、先修要求、必修活动、内容/学习成果、学分减免、计划开设该课程的学习项目、联系人和提醒通知。默认使用英语,设置 language: "nb" 则使用挪威语。
  • get_exam_info — 一次调用即可查询最多 10 门课程的考试安排:每场考试(常规/补考)的日期、开始时间、时长、允许使用的辅助工具代码(“hjelpemiddelkode”)及其含义、考试系统和指定考场。
  • search_study_programs — 按文本、级别和城市搜索 NTNU 约 400 个学习项目;返回可用于 get_study_plan 的项目代码。
  • get_study_plan — 获取某个项目和入学年份对应的官方计划:按学期列出课程(代码、学分、必修/选修),以及专业方向选择节点,是从“我学 X”到具体课程代码的桥梁。
  • compare_courses — 并排比较多门课程:名称、校区、考试日期、每周教学时数和最新成绩分布。
  • check_timetable_conflicts — 在选课前,成对检查一组课程之间的每周课表冲突和考试日期冲突。

连接

将服务器的 MCP URL 粘贴到 Claude 或 ChatGPT 的自定义连接器设置中:

https://ntnu-mcp.martinsundal.no/mcp

服务器无需身份验证,因为它只提供公开的、只读的 NTNU 课程数据。

此服务器也已列入官方 MCP 注册表,名称为 io.github.MartinSA04/ntnu-mcp(见 server.json);可以浏览注册表的客户端可在那里发现该服务器。它是非官方社区服务,与 NTNU 无关。注册表更新由标签触发:npm version <patch|minor|major> && git push --follow-tags — version 脚本会使 server.json 保持同步,而发布工作流会运行检查套件、部署 Worker、重新发布注册表条目(GitHub OIDC),并创建 GitHub Release。

架构

所有 NTNU 上游知识——端点、重试策略、Liferay 目录解析、DBH 成绩统计和 TP 学期数据——都位于本仓库依赖的 ntnu-api TypeScript 客户端库中,该库作为 npm 包引入。上游修复和新数据源应在 ntnu-api 中实现,而不是在此处。 本仓库唯一的工作是调用该类型化客户端,并整理其输出以供 LLM 使用:英文名称(无英文时回退为挪威语)、奥斯陆当地时间戳、按学期汇总的成绩分布表,以及针对空结果的指导说明。这种分层方式详见 ntnu-api 的 TypeScript 迁移规范。

为尽量减少对 NTNU 服务器的负载,所有上游调用都采用两层缓存(共享 Workers KV 命名空间前置每个隔离实例的内存缓存),因此每项资源在全局范围内大约每个 TTL 获取一次:目录搜索、课表和日程缓存 1 小时;成绩统计和学期列表缓存 24 小时。KV 故障时会降级为仅使用内存缓存,不会导致工具报错。测试中缓存仅使用内存。

本地开发

需要 Node 22(通过 mise 固定版本)。

mise install     # installs the pinned Node version
npm install

常见任务可通过 mise 任务和 npm 脚本运行:

mise run dev          # npm run dev       — wrangler dev, local worker with hot reload
mise run test          # npm test          — vitest, over captured fixtures (no live network)
mise run typecheck     # npm run typecheck — tsc --noEmit
mise run lint          # npm run lint      — biome check
mise run fmt           # npm run fmt       — biome check --write
mise run check         # lint + typecheck + test

测试使用 vitest 在普通 Node(而非 Workers 池)下运行,直接针对从 ntnu-api 测试套件逐字捕获的 fetch 测试数据调用工具函数——CI 和本地均不会调用真实的 NTNU 服务。

部署

推送到 main 后会自动部署(本仓库已连接到 Cloudflare Workers Builds)。如需从检出目录手动部署:

npm run deploy   # wrangler deploy

运行于 Cloudflare 免费计划:MCP 会话状态由使用 SQLite 存储的 Durable Object 提供支持,该功能在免费层可用(除非规模扩大后触及每请求 CPU 限制,否则无需订阅 Workers Paid)。

许可证

MIT——详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。