Skip to main content
Glama
MEIQI-Lee
by MEIQI-Lee
README.md
# campus-course 课程信息 MCP Server

封装课程信息 MCP Server。使用 Python SQLite 存储课程/教师/作业数据,
通过 MCP Python SDK 2.x 将查询函数封装为 MCP Tools,接入 Codex 智能体,
支持自然语言查询课程信息。

## 目录结构

```text
mcp-course-demo/
├── .venv/                       # uv 虚拟环境(Python 3.12 + mcp 2.x)
├── courses.db                   # SQLite 数据库(由 init_db.py 生成)
├── pyproject.toml / uv.lock     # uv 项目配置与锁文件
├── screenshots/                 # 功能运行截图(Inspector / Codex)
└── src/mcp_course_demo/
    ├── init_db.py               # 建库脚本:teachers/courses/assignments 三表 + 种子数据
    ├── db.py                    # SQLite 参数化查询层(sqlite3 标准库)
    └── server.py                # MCP Server 入口(MCPServer,stdio 传输)
```

## 数据表

- `teachers`(教师):teacher_id、name、title、department、email
- `courses`(课程):course_id、name、teacher_id(FK)、weekday、time、location、credits
- `assignments`(作业):assignment_id、course_id(FK)、title、due_date、description

## MCP Tools

| 工具名 | 功能 |
|--------|------|
| `search_courses(keyword)` | 按课程名/课程号/教师姓名模糊搜索课程 |
| `get_course(course_id)` | 按课程号(如 CS101)查课程详情(含教师信息) |
| `list_courses_by_weekday(weekday)` | 查某天课程表(支持“周一/星期一/Mon/1”) |
| `get_teacher(name)` | 查教师信息及所授课程列表 |
| `list_assignments(course_id=None)` | 查作业及截止日期(可按课程过滤) |

## 环境复现与运行

```powershell
# 1. (可选)重建数据库
uv run python -m mcp_course_demo.init_db

# 2. 启动 MCP Server(stdio,供 MCP 客户端连接)
uv run campus-course
# 等价于:uv run python -m mcp_course_demo.server

# 3. MCP Inspector 可视化调试
npx @modelcontextprotocol/inspector uv run campus-course
```

## Codex 接入

在 `~/.codex/config.toml` 追加:

```toml
[mcp_servers.campus-course]
command = 'C:\Users\dell\.local\bin\uv.exe'
args = ["run", "--directory", '<项目绝对路径>\mcp-course-demo', "campus-course"]
startup_timeout_sec = 120
tool_timeout_sec = 60
default_tools_approval_mode = "approve"   # 非交互/自动批准工具调用,避免 "user cancelled MCP tool call"
[mcp_servers.campus-course.env]
PYTHONIOENCODING = "utf-8"
```

接入后在 Codex 中自然语言提问即可,例如:

- “张老师教哪些课程?”
- “CS101 有哪些作业?截止日期是什么时候?”
- “周三有什么课?”

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

每个工具面向明确的资源与动作:课程搜索、课程详情、按天查课表、教师信息、作业列表。search_courses和list_courses_by_weekday虽然都返回课程列表,但一个按关键词模糊匹配,一个按星期筛选,描述足以消除歧义。

Naming Consistency5/5

所有工具均采用动词_名词的清晰模式(search/get/list),命名风格统一,动词准确反映操作类型,没有混合大小写或混乱命名。

Tool Count5/5

5个工具覆盖课程查询场景的核心需求,数量精炼,每个工具都有独立用途,没有冗余或明显缺失。

Completeness4/5

覆盖了课程搜索、详情、按星期课表、教师信息及作业列表,足以支撑常见查询场景。但缺少一个无筛选的“列出全部课程”工具,可能需依赖search_courses或list_courses_by_weekday迂回实现。

Maintenance

ActivityMaintained
ResponsivenessNo issues