Skip to main content
Glama

piazza-mcp

piazza-mcp 是一个本地、只读的 MCP 服务器,用于搜索和阅读已配置的 Piazza 讨论。

该服务器使用社区构建的 piazza-api 包和 Piazza 未公开的内部端点。它不是官方的 Piazza 集成,当 Piazza 更改其网站时可能会失效。请保持请求频率保守,并确认此访问方式对您的账户和机构是可接受的。

要求

  • Python 3.10 至 3.14。

  • uv 用于依赖和环境管理。

  • MCP Python SDK 1.x。服务器使用 v1 低级 Server 装饰器 API,并声明 mcp>=1.28.1,<2

工具

  • list-piazza-courses:列出账户可访问的已配置课程。

  • list-piazza-posts:返回一个课程的近期帖子摘要(有数量限制)。

  • get-piazza-post:返回一个规范化线程(有数量限制)。

  • search-piazza-posts:搜索一个已配置的课程并返回有数量限制的摘要。

所有工具均为只读。课程范围的调用仅限于 PIAZZA_COURSES 中的 ID。返回的帖子文本是受限的纯文本,并标记为不可信的用户生成内容。服务器不会发帖、回答、编辑、下载附件、暴露名册或执行教师操作。

list-piazza-posts 接受 1 到 25 的 limit 和 0 到 500 的 offset。仅当之前的响应报告 truncated: true 时才请求下一页。搜索接受最多 200 个字符的查询,并返回最多 25 个结果。响应在内存中缓存 60 秒;刷新失败后可能返回过期的缓存数据。

配置

复制脱敏模板,并保持生成的文件私密:

cp .env.example .env
chmod 600 .env
PIAZZA_EMAIL="student@example.edu"
PIAZZA_PASSWORD="replace-with-your-password"
PIAZZA_COURSES='{"abc123":"CMSC 132","xyz789":"CMSC 216"}'

PIAZZA_COURSES 将 Piazza 课程 ID 映射到显示名称。课程 ID 是 Piazza 课程 URL 中 /class/ 之后的值。进程环境变量优先于 .env。在此检出目录之外运行已安装的 wheel 时,请通过进程环境提供变量。

切勿将 .env 提交到版本控制、在提示中粘贴凭据,或将凭据、cookie、课程 ID 或帖子内容包含在日志中。需要机构专属 SSO 的账户可能不支持非官方包使用的电子邮件/密码流程。

运行和注册

uv sync --locked
uv run --frozen piazza-mcp

使用 Codex 注册检出目录:

codex mcp add piazza-mcp \
  -- uv --directory /absolute/path/to/piazza_mcp run --frozen piazza-mcp

检出目录本地的 .env 在首次调用 Piazza 工具时被延迟加载。您可以使用以下命令刷新注册:

./scripts/update_mcp_server.sh

更改工具目录后,请重启 MCP 客户端。

项目结构

src/piazza_mcp/
  server.py              MCP protocol boundary and dispatch
  config/
    env.py               lazy checkout-local .env loading
    piazza.py            credentials and course allowlist
  mcp_schemas/
    piazza.py            structured-output contracts
  mcp_tools/
    piazza.py            tool descriptions, inputs, and annotations
  models/
    piazza.py            bounded Piazza data structures
  services/piazza/
    client.py            timeout-bound unofficial API adapter
    normalizer.py        HTML cleanup and response normalization
    profiler.py          privacy-safe aggregate shape diagnostics
    service.py           allowlisting, limits, caching, and serialization
    factory.py           lazy configured service construction
tests/
  config/
  mcp_schemas/
  mcp_tools/
  server/
  services/piazza/

开发

隐私安全的检查器最多加载五个摘要和一个完整线程,然后打印聚合的键、类型和嵌套计数,而不打印帖子值:

uv run --frozen python scripts/inspect_piazza_shapes.py

它仍然会发出实时请求。仅在您明确打算访问已配置的 Piazza 账户时运行它。

运行离线验证套件:

uv lock --check
uv run --frozen pytest -q
uv run --frozen python -m compileall -q src/piazza_mcp tests scripts
uv build

使用 MCP Inspector 调试服务器:

npx @modelcontextprotocol/inspector \
  uv --directory /absolute/path/to/piazza_mcp run --frozen piazza-mcp
-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Browse and manage Reddit posts, comments, and threads. Fetch user activity, explore hot/new/rising…

  • Read-only MCP server for ClassQuill, a tutoring-business-management platform.

  • Search Stack Exchange questions, fetch Q&A threads as markdown, look up tag FAQs and user profiles.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mkslge/piazza-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server