Prepare the server locally
Run this once before adding it to Claude Code.
pip install -r requirements.txtRegister it in Claude Code
claude mcp add -e "PIAZZA_EMAIL=${PIAZZA_EMAIL}" -e "PIAZZA_PASSWORD=${PIAZZA_PASSWORD}" -e "PIAZZA_COURSES=${PIAZZA_COURSES}" piazza-mcp-ff0d -- /path/to/your/env/bin/python /path/to/piazza-mcp/main.pyReplace any placeholder paths in the command with the real path on your machine.
PIAZZA_EMAILPIAZZA_PASSWORDPIAZZA_COURSESMake your agent remember this setup
piazza-mcp-ff0d's config, env vars, and the gotchas you hit — recalled in every future Claude Code, Cursor, and Codex session.
npx conare@latestFree · one command · indexes the sessions already on disk. Set up in the browser instead →
What it does
- List configured Piazza courses
- Fetch recent posts from specific courses
- Natural language interaction with course content
- Configurable post retrieval count
Tools 2
list_coursesReturns the list of configured courses.fetch_postsFetches recent posts from a specified course.Environment Variables
PIAZZA_EMAILrequiredYour Piazza account emailPIAZZA_PASSWORDrequiredYour Piazza account passwordPIAZZA_COURSESrequiredJSON object mapping course IDs to course namesTry it
Original README from clarsbyte/piazza-mcp
Piazza MCP Server
An MCP (Model Context Protocol) server that allows Claude Code to interact with Piazza, enabling you to fetch posts and course information directly from your terminal.
Prerequisites
- Python 3.10+
- A Piazza account
- Claude Code CLI
Installation
Clone or download this repository
Create a virtual environment and install dependencies:
python -m venv env # Windows env\Scripts\activate # macOS/Linux source env/bin/activate pip install -r requirements.txt
Configuration
Getting Your Course IDs
To find a course ID:
- Log in to Piazza in your browser
- Navigate to the course you want to add
- Look at the URL - it will look like:
https://piazza.com/class/abc123xyz - The course ID is the part after
/class/(e.g.,abc123xyz)
Setting Up Claude Code
Create or edit the .mcp.json file in your project directory:
{
"mcpServers": {
"piazza": {
"command": "/path/to/your/env/bin/python",
"args": ["/path/to/piazza-mcp/main.py"],
"env": {
"PIAZZA_EMAIL": "[email protected]",
"PIAZZA_PASSWORD": "your-piazza-password",
"PIAZZA_COURSES": "{\"course_id_1\":\"Course Name 1\",\"course_id_2\":\"Course Name 2\"}"
}
}
}
}
Windows example:
{
"mcpServers": {
"piazza": {
"command": "C:\\path\\to\\env\\Scripts\\python.exe",
"args": ["C:\\path\\to\\piazza-mcp\\main.py"],
"env": {
"PIAZZA_EMAIL": "[email protected]",
"PIAZZA_PASSWORD": "yourpassword",
"PIAZZA_COURSES": "{\"mjz1kp056nb6t3\":\"CSE 12\",\"mk06sxvpt521xv\":\"ECON 1\"}"
}
}
}
}
macOS/Linux example:
{
"mcpServers": {
"piazza": {
"command": "/home/user/piazza-mcp/env/bin/python",
"args": ["/home/user/piazza-mcp/main.py"],
"env": {
"PIAZZA_EMAIL": "[email protected]",
"PIAZZA_PASSWORD": "yourpassword",
"PIAZZA_COURSES": "{\"mjz1kp056nb6t3\":\"CSE 12\",\"mk06sxvpt521xv\":\"ECON 1\"}"
}
}
}
}
Environment Variables
| Variable | Description |
|---|---|
PIAZZA_EMAIL |
Your Piazza account email |
PIAZZA_PASSWORD |
Your Piazza account password |
PIAZZA_COURSES |
JSON object mapping course IDs to course names |
Available Tools
Once configured, Claude Code will have access to these tools:
`list_courses`
Returns the list of configured courses.
Example usage in Claude Code:
"What courses do I have configured?"
"List my Piazza courses"
`fetch_posts`
Fetches recent posts from a specified course.
Parameters:
course_id(required): The Piazza course IDn(optional): Number of posts to fetch (default: 10)
Example usage in Claude Code:
"Show me the last 5 posts from CSE 12"
"What are the recent questions on ECON 1?"
"Check the latest 3 posts on my physics class"
Usage Examples
After configuration, simply start Claude Code in a directory with the .mcp.json file:
claude
Then you can ask natural language questions like:
- "What are my Piazza courses?"
- "Show me the last 3 posts on ECON 1"
- "Are there any new questions about the midterm in CSE 12?"
- "What's the latest instructor answer on PHYS 2A?"