mcp-ed

wondermuttt/mcp-ed

3.2

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.

Tools
16
Resources
0
Prompts
0

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 courses
  • ed_get_course - Get detailed course information
Thread Tools
  • ed_list_threads - List threads with filtering and sorting
  • ed_get_thread - Get thread details (with optional mark_as_read control)
  • ed_create_thread - Create new question/post/announcement
  • ed_update_thread - Update thread content or settings
  • ed_delete_thread - Delete a thread
  • ed_mark_thread_read - Mark a thread as read
  • ed_mark_thread_unread - Mark a thread as unread
Comment Tools
  • ed_list_comments - List all comments (thread + answer replies) with participant metadata
  • ed_create_comment - Add comment to thread
  • ed_update_comment - Update/endorse comment
  • ed_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

  1. Get your Ed API token:

  2. Clone and configure:

git clone https://github.com/yourusername/mcp-ed.git
cd mcp-ed
  1. Create .env file:
ED_API_TOKEN=your-token-here
ED_DOMAIN=edstem.org
ED_REGION=us  # or your region (au, uk, etc.)
  1. Install and build:
npm install
npm run build
  1. 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 connectivity
  • testMCPServer.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: false when calling ed_get_thread
  • Default behavior: Threads are marked as read when accessed (preserves normal Ed behavior)
  • Manual control: Use ed_mark_thread_read and ed_mark_thread_unread tools
  • 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 .env files
  • 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:

  1. Fork the repository
  2. Create a feature branch
  3. Test thoroughly
  4. Submit a pull request

Support

License

MIT - See LICENSE file for details

Acknowledgments