piazza-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PIAZZA_EMAIL | No | Account email for automatic login. | |
| PIAZZA_PASSWORD | No | Account password for automatic login. | |
| PIAZZA_CACHE_TTL | No | Seconds to keep feeds and posts in memory. 0 turns off the cache. | 60 |
| PIAZZA_COOKIE_FILE | No | Path of the saved session. | ~/.config/piazza-mcp/cookies.json |
| PIAZZA_KEEP_UNREAD | No | Mark unread posts unread again after the server reads them. | false |
| PIAZZA_MIN_INTERVAL | No | Minimum seconds between Piazza requests. | 0.5 |
| PIAZZA_FENCE_CONTENT | No | Mark post text as untrusted data. | true |
| PIAZZA_ANONYMIZE_STUDENTS | No | Replace student names with pseudonyms. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_coursesA | List the user's Piazza courses with ID, course number, term, role, active status, and post folders. Other tools accept the ID, the course number, or part of the name. Set refresh=true to reload from Piazza. |
| get_course_infoA | Get the course page: description, syllabus, office hours, general information, dates, and the staff list with names, roles and emails. Use it to find who teaches the course or when office hours are. |
| get_unread_countsA | Count the posts with unread content in each course. Sends one request per course. By default only active courses are counted. Courses with no unread posts are left out. |
| get_course_statsB | Get the data from the course Statistics page. Some instructors hide this page from students. |
| list_postsA | List post summaries for a course, most recent activity first. filter: "unread" = posts with content the user has not read. "following" = posts the user follows. "unresolved" = unanswered questions and posts with unresolved followups. "unanswered" = questions with no answer. "mine" = the user's own posts that show their name. "starred" = posts the user starred. folder: only posts in this folder, for example "hw1". list_courses shows the folder names. Summaries have a short snippet only. Call get_post or get_posts for full threads. |
| search_postsA | Search posts by keywords, like the Piazza search box, in one course or in all active courses. Use it before the user asks a new question, to find duplicates. Returns post summaries grouped by course. |
| get_postB | Read one full thread: the question or note, both answers, and followups with replies. number is the post number that Piazza shows as @123. |
| get_postsB | Read up to 20 full threads from one course in one call. A post that cannot be read has an "error" field. |
| get_post_historyA | Show every version of a post, oldest first, with author and time. With diff=true, version 1 has the full text and each later version has only a diff from the version before. Use it to see what an instructor changed in an announcement or a question. |
| recent_activityB | List posts with new activity since a time, in all active courses or in one course. since: a relative age such as 24h, 7d or 2w, or an ISO date such as 2026-10-01. The default is 7d. Use this tool for questions such as "what did I miss this week". Courses without activity are left out. |
| list_instructor_notesB | List notes and polls written by instructors, such as announcements and logistics, most recent first. |
| get_attachmentA | Open a file or image that a post links to, such as an [image: ...] link or a piazza.com upload link. Images come back as images that the model can see. Text files come back as text. Other files, such as PDFs, come back as an embedded file if the client supports it. The maximum size is 10 MB. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| catch_up | Summarize what happened on Piazza since a time, across all active courses. |
| before_asking | Check whether a question was already asked and answered in a course. |
| exam_prep | Collect what instructors and students said about an exam or topic. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| courses | The user's Piazza courses. |
TDQS
Scored across 12 tools
Most tools have distinct purposes (e.g., get_course_stats vs get_course_info vs list_courses), but there is potential overlap between get_post and get_posts, and between list_posts and recent_activity; however, descriptions clarify their differences. The main ambiguity is that get_posts can read multiple threads, which might be confused with get_post or list_posts, but it's minor because of clear guidance.
All tool names follow a consistent snake_case pattern with verb_noun structure (e.g., get_course_stats, list_courses, get_post_history). No deviations or mixed conventions are present.
12 tools is well-scoped for a Piazza client, covering courses, posts, search, activity, and attachments without being excessive or too thin. Each tool appears to earn its place.
The tool surface covers many key operations: listing courses/posts, searching, reading threads, getting attachments, and instructor notes. However, obvious gaps exist: there is no tool to create or reply to posts, and no way to mark posts as read/unread or star/unstar, which are common Piazza actions. These gaps are minor but could limit agent workflows.