内容
# 42 MCP 服务器
一个由 [Mateo LBS](https://github.com/MatLBS) 设计的 [模型上下文协议](https://modelcontextprotocol.io) 服务器,用于与 [42 API](https://api.intra.42.fr) 交互。它允许 AI 助手查找 42 学生的个人资料、进度、团队和联盟排名,并浏览校园生活 — 地点、活动和考试。
[](https://mcpampel.com/repo/MatLBS/42-mcp-server)
## 功能
- **个人资料和进度:** 通过登录或 ID 查找任意 42 学生的个人资料、课程进度、项目状态、获得的成就、任务和头衔
- **搜索:** 使用筛选器(校区、登录、 piscine 年/月)搜索/列出用户,分页
- **团队:** 获取用户曾经参与过的团队,或团队的完整详细信息(成员、状态、最终分数、仓库网址)
- **联盟:** 获取用户的联盟成员资格/分数,或联盟的分数历史
- **校园生活:** 列出校区,查看当前登录的用户和地点,浏览即将举行的活动和考试日期
## 安装方法
将服务器添加到您的 MCP 客户端配置中:
```json
{
"mcpServers": {
"42-mcp": {
"command": "npx",
"args": ["-y", "42-mcp-server@latest"],
"env": {
"FORTY_TWO_TOKEN": "<FORTY_TWO_TOKEN>",
"FORTY_TWO_URL": "https://api.intra.42.fr"
}
}
}
}
```
## 配置
| 变量 | 描述 |
| ------------------ | ------------------------------------------------------ |
| `FORTY_TWO_TOKEN` | 42 API 访问令牌(OAuth2 Bearer 令牌) |
| `FORTY_TWO_URL` | 42 API 的基本网址(`https://api.intra.42.fr`) |
`FORTY_TWO_TOKEN` 直接使用,不会自动刷新。你可以通过客户端凭证授权,使用在 [profile.intra.42.fr/oauth/applications](https://profile.intra.42.fr/oauth/applications) 上创建的 42 OAuth 应用的 UID/密钥(仅需“public”范围)获取:
```bash
curl -X POST "https://api.intra.42.fr/oauth/token" \
-d "grant_type=client_credentials" \
-d "client_id=<uid>" \
-d "client_secret=<secret>"
```
复制响应中的 `access_token` 字段到 `FORTY_TWO_TOKEN`。它在几个小时后过期(参见响应中的 `expires_in`),因此你需要重复此操作并在过期时更新。
### 输出格式
服务器返回 **JSON** 输出。
## 可用工具
### 个人资料和进度
| 工具 | 描述 |
| --------------------------- | --------------------------------------------------------------------------- |
| `42-get-user` | 通过数字 ID 或登录获取 42 用户的完整个人资料 |
| `42-search-users` | 使用可选筛选器(校区、登录、piscine 年/月)列出/搜索用户,分页 |
| `42-get-user-cursus` | 获取用户的课程进度(级别、技能、blackholed_at) |
| `42-get-user-projects` | 获取用户的项目状态(已验证/失败、分数、团队) |
| `42-get-user-achievements` | 获取用户获得的成就(徽章) |
| `42-get-user-quests` | 获取用户的任务进度(进行中和已验证的任务) |
| `42-get-user-titles` | 获取用户解锁的头衔 |
### 团队
| 工具 | 描述 |
| --------------------------- | --------------------------------------------------------------------------- |
| `42-get-user-teams` | 获取用户参与过的项目防御团队 |
| `42-get-team` | 通过 ID 获取团队的完整详细信息(成员、状态、最终分数、仓库网址) |
### 联盟
| 工具 | 描述 |
| --------------------------- | -------------------------------------------------------------- |
| `42-get-user-coalition` | 获取用户的联盟成员资格和当前分数 |
| `42-get-coalition-scores` | 获取联盟的分数历史(获得/失去的分数) |
### 校园生活
| 工具 | 描述 |
| --------------------------- | -------------------------------------------------------------- |
| `42-list-campus` | 列出所有 42 校区,分页 |
| `42-get-campus-locations` | 获取校园的工作站位置(谁登录在哪里) |
| `42-list-events` | 列出校园的即将举行的活动,分页 |
| `42-get-event` | 通过 ID 获取特定活动的详细信息 |
| `42-list-exams` | 列出校园的考试日期,分页 |