wondermuttt/mcp-ed
If you are the rightful owner of mcp-ed and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Ed Discussions MCP Server is a comprehensive Model Context Protocol server designed for the Ed Discussions platform, facilitating AI interaction with course discussions.
Ed Discussions MCP Server
A comprehensive Model Context Protocol (MCP) server for Ed Discussions (EdStem) platform, enabling AI assistants to interact with course discussions, manage threads, comments, and facilitate Q&A.
Status
✅ Functional - Core MCP server with 16 tools implemented and tested
Features
Implemented Tools (16)
System Tools
ed_health_check- Check API connectivity and authentication
User Tools
ed_get_current_user- Get authenticated user information
Course Tools
ed_list_courses- List all enrolled coursesed_get_course- Get detailed course information
Thread Tools
ed_list_threads- List threads with filtering and sortinged_get_thread- Get thread details (with optional mark_as_read control)ed_create_thread- Create new question/post/announcemented_update_thread- Update thread content or settingsed_delete_thread- Delete a threaded_mark_thread_read- Mark a thread as readed_mark_thread_unread- Mark a thread as unread
Comment Tools
ed_list_comments- List all comments (thread + answer replies) with participant metadataed_create_comment- Add comment to threaded_update_comment- Update/endorse commented_delete_comment- Remove comment
Analytics Tools
ed_course_activity_stats- Generate student-only leaderboards for activity, answers, hearts, questions, and posts
Setup
Prerequisites
- Node.js 18+
- Ed Discussions account with API access
- API token from your institution's Ed instance
Installation
-
Get your Ed API token:
- Log into Ed Discussions
- Navigate to: https://us.edstem.org/settings/api-tokens
- Generate a new token
-
Clone and configure:
git clone https://github.com/yourusername/mcp-ed.git
cd mcp-ed
- Create
.envfile:
ED_API_TOKEN=your-token-here
ED_DOMAIN=edstem.org
ED_REGION=us # or your region (au, uk, etc.)
- Install and build:
npm install
npm run build
- Test connection:
node build/testConnection.js # Test API connection
node build/testMCPServer.js # Test MCP server
Usage
With Claude Desktop
Add to your Claude Desktop configuration (%APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"ed-discussions": {
"command": "node",
"args": ["/path/to/mcp-ed/build/index.js"],
"env": {
"ED_API_TOKEN": "your-token-here",
"ED_DOMAIN": "edstem.org",
"ED_REGION": "us"
}
}
}
}
Standalone Server
npm start # Runs the MCP server on stdio
Using the Inspector
npx @modelcontextprotocol/inspector build/index.js
API Examples
List courses
{
"name": "ed_list_courses",
"arguments": {}
}
Get threads from a course
{
"name": "ed_list_threads",
"arguments": {
"course_id": "81559",
"limit": 10,
"sort": "new",
"filter": "unread"
}
}
Get thread without marking as read
{
"name": "ed_get_thread",
"arguments": {
"course_id": "81559",
"thread_id": "6873464",
"mark_as_read": false // Prevents marking thread as seen
}
}
Generate course activity stats
{
"name": "ed_course_activity_stats",
"arguments": {
"course_id": "81559",
"max_entries": 20
}
}
Create a new thread
{
"name": "ed_create_thread",
"arguments": {
"course_id": "81559",
"type": "question",
"title": "Help with assignment",
"content": "I'm having trouble with...",
"category": "Assignments",
"is_anonymous": false
}
}
Development
Project Structure
mcp-ed/
├── src/
│ ├── index.ts # MCP server implementation
│ ├── edClient.ts # Ed API client
│ ├── testConnection.ts # API connection tester
│ └── testMCPServer.ts # MCP server tester
├── build/ # Compiled JavaScript
├── .env # API credentials (git-ignored)
└── package.json
Scripts
npm run build # Compile TypeScript
npm run dev:watch # Development mode with auto-rebuild
npm run test # Run tests
npm run lint # Lint code
npm start # Run MCP server
Testing
The server includes comprehensive test suites:
testConnection.ts- Tests Ed API connectivitytestMCPServer.ts- Tests all MCP tools
Architecture
Built on the Model Context Protocol SDK, following the successful patterns from the Canvas LMS MCP implementation:
- TypeScript for type safety
- Axios for HTTP requests
- MCP SDK for protocol implementation
- Modular design for easy extension
Read Status Control
The Ed MCP Server provides fine-grained control over thread read status:
- Read without marking: Set
mark_as_read: falsewhen callinged_get_thread - Default behavior: Threads are marked as read when accessed (preserves normal Ed behavior)
- Manual control: Use
ed_mark_thread_readanded_mark_thread_unreadtools - Preserves privacy: Reading threads without marking them prevents others from knowing you've read them
Security
- API tokens are stored in environment variables
- Never commit
.envfiles - Supports anonymous posting where allowed
- Respects course privacy settings
Roadmap
Near-term
- Add search functionality
- Implement file upload support
- Add bulk operations
- Create notification system
Long-term
- WebSocket support for real-time updates
- Analytics and reporting tools
- LMS integration features
- Advanced filtering and sorting
Contributing
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Test thoroughly
- Submit a pull request
Support
- Issues: https://github.com/yourusername/mcp-ed/issues
- Discussions: Use GitHub Discussions for questions
License
MIT - See LICENSE file for details
Acknowledgments
- Built on patterns from Canvas LMS MCP
- Uses the Model Context Protocol SDK
- Thanks to the Ed Discussions team for API access