piazza-mcp
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 .envPIAZZA_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-mcpThis server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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