saurabhudeshi/RAID_MCP_SERVER
If you are the rightful owner of RAID_MCP_SERVER and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
RAID MCP Server is a comprehensive solution for managing project risks, actions, issues, and decisions through the Model Context Protocol.
RAID MCP Server
A Complete Model Context Protocol (MCP) Server for Enterprise RAID Management
A production-ready MCP server for managing RAID (Risks, Actions, Issues, Decisions) in project management. Built with FastMCP, Supabase PostgreSQL, JWT authentication, and comprehensive security features.
🎥 Watch Live Demonstrations - 6-part series showcasing all server capabilities with sequential prompts
📋 Table of Contents
- Overview
- What is RAID?
- Features
- Architecture
- Quick Start
- Prerequisites
- Installation
- Database Setup
- Configuration
- Running the Server
- Claude Desktop Setup
- Using the Server
- Security
- Project Structure
- API Reference
- Troubleshooting
- Additional Documentation
🎯 Overview
RAID MCP Server is a comprehensive solution for managing project risks, actions, issues, and decisions through the Model Context Protocol. It provides a secure, role-based API with JWT authentication, designed specifically for AI assistants like Claude Desktop.
Key Highlights
- 38 MCP Tools - Complete CRUD operations for all entities
- JWT Authentication - Secure token-based auth with bcrypt hashing
- Role-Based Access Control - Admin and User roles with granular permissions
- Table-Formatted Lists - Beautiful markdown tables with action hints
- Interactive Help System - Built-in guidance for every operation
- Production Ready - Comprehensive error handling and logging
📊 What is RAID?
RAID is a project management framework for tracking critical project elements:
| Element | Purpose | Example |
|---|---|---|
| Risks | Future events that could negatively impact the project | "Key developer may leave team" |
| Actions | Tasks and activities that need completion | "Implement user authentication by Friday" |
| Issues | Current problems requiring resolution | "Production server experiencing downtime" |
| Decisions | Key choices and determinations made | "Use PostgreSQL instead of MongoDB" |
✨ Features
Core Functionality
- ✅ Complete CRUD Operations - Create, Read, Update, Delete for all entities
- ✅ User Management - Full user lifecycle with role-based permissions
- ✅ Project Management - Multi-project support with user assignments
- ✅ RAID Items - Manage Risks, Actions, Issues, and Decisions
- ✅ Table Formatting - Lists and single records displayed as clean markdown tables
- ✅ Action Hints - Quick action suggestions below tables and detail views
Security & Authentication
- ✅ JWT Tokens - Secure, time-limited authentication tokens
- ✅ Bcrypt Hashing - Industry-standard password encryption
- ✅ Role-Based Access - Admin and User roles with different permissions
- ✅ Project-Level Security - Users only access assigned projects
- ✅ Audit Logging - Comprehensive activity logging
Developer Experience
- ✅ Interactive Help -
help_tool()andhelp_workflow()for guidance - ✅ MCP Prompts - Interactive forms with validation
- ✅ Extensive Documentation - Detailed docstrings and comments
- ✅ Error Handling - Clear, actionable error messages
- ✅ Type Safety - Pydantic schemas for validation
🏗️ Architecture
System Layers
┌─────────────────────────────────────────────────────────────┐
│ Claude Desktop (Client) │
│ Model Context Protocol (MCP) │
└────────────────────────┬────────────────────────────────────┘
│
│ MCP Protocol
▼
┌─────────────────────────────────────────────────────────────┐
│ RAID MCP Server (FastMCP) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ main.py - 38 MCP Tools │ │
│ │ ├─ Health Check │ │
│ │ ├─ Authentication (3 tools) │ │
│ │ ├─ User Management (5 tools) │ │
│ │ ├─ Project Management (6 tools) │ │
│ │ ├─ Risk Management (4 tools) │ │
│ │ ├─ Action Management (4 tools) │ │
│ │ ├─ Issue Management (4 tools) │ │
│ │ ├─ Decision Management (4 tools) │ │
│ │ └─ Help & Discovery (3 tools) │ │
│ └──────────────────────────────────────────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ services/raid_service.py - Business Logic │ │
│ │ ├─ Authentication & Authorization │ │
│ │ ├─ Token Verification │ │
│ │ ├─ Access Control │ │
│ │ └─ Data Validation │ │
│ └──────────────────────────────────────────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ database/ - Repository Pattern │ │
│ │ ├─ user_repository.py │ │
│ │ ├─ project_repository.py │ │
│ │ └─ raid_repositories.py │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────┬────────────────────────────────────┘
│
│ Async HTTP
▼
┌─────────────────────────────────────────────────────────────┐
│ Supabase PostgreSQL Database │
│ ┌─────────┬──────────┬────────┬────────────┬───────────┐ │
│ │ users │ projects │ risks │ actions │ issues │ │
│ └─────────┴──────────┴────────┴────────────┴───────────┘ │
│ ┌──────────────────┬───────────────────────────────────┐ │
│ │ decisions │ project_assignments │ │
│ └──────────────────┴───────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
3-Tier Architecture
- MCP Tools Layer (
src/main.py) - FastMCP tools that handle MCP protocol communication - Business Logic Layer (
src/services/) - Service layer with authentication, authorization, and validation - Data Access Layer (
src/database/) - Repository pattern for database operations
🚀 Quick Start
1. Clone and Setup
# Clone repository
git clone <your-repo-url> RAID_MCP_ONE
cd RAID_MCP_ONE
# Create virtual environment
python -m venv venv
.\venv\Scripts\Activate.ps1
# Install dependencies
pip install -r requirements.txt
2. Configure Environment
# Copy example environment file
copy .env.example .env
# Edit .env with your credentials
notepad .env
3. Setup Database
- Create a Supabase account at https://supabase.com
- Create a new project
- Run the database setup SQL (see Database Setup)
- Copy your Supabase URL and API key to
.env
4. Start Server
python src/main.py
5. Configure Claude Desktop
See Claude Desktop Setup for detailed instructions.
📦 Prerequisites
System Requirements
- Python 3.11+ (recommended: 3.11 or 3.12)
- Git for version control
- Windows/Mac/Linux compatible
External Services
- Supabase Account (free tier available at supabase.com)
- PostgreSQL database
- Real-time subscriptions
- Built-in authentication
MCP Client
- Claude Desktop (primary client) - https://claude.ai/download
- Any MCP-compatible client
💿 Installation
Step-by-Step Installation
1. Prerequisites Check
# Check Python version (must be 3.11+)
python --version
# Check Git installation
git --version
# Check pip
pip --version
2. Clone Repository
# Navigate to your workspace
cd D:\MCP\learn
# Clone the project
git clone <repository-url> RAID_MCP_ONE
cd RAID_MCP_ONE
3. Set Up Python Virtual Environment
# Create virtual environment
python -m venv venv
# Activate it (Windows PowerShell)
.\venv\Scripts\Activate.ps1
# For Command Prompt use:
# .\venv\Scripts\activate.bat
# For Git Bash use:
# source venv/Scripts/activate
4. Install Python Dependencies
# Upgrade pip
python -m pip install --upgrade pip
# Install requirements
pip install -r requirements.txt
# Verify installation
pip list
Expected packages:
- fastmcp==0.3.0
- supabase==2.10.0
- PyJWT==2.9.0
- bcrypt==4.2.1
- pydantic==2.10.3
- loguru==0.7.3
🗄️ Database Setup
1. Create Supabase Project
- Go to https://supabase.com
- Sign up for a free account
- Create a new project
- Wait for the project to be provisioned (~2 minutes)
2. Get Credentials
- Go to Project Settings → API
- Find your Project URL (e.g.,
https://xxxxx.supabase.co) - Find your anon/public key (starts with
eyJ...) - Save both values for your
.envfile
3. Run Database Setup Script
- In your Supabase project, go to SQL Editor
- Copy the SQL script below
- Paste into SQL Editor and click RUN
-- ============================================
-- 1. USERS TABLE
-- ============================================
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
username VARCHAR(100) UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
full_name VARCHAR(200),
role VARCHAR(20) DEFAULT 'user' CHECK (role IN ('admin', 'user')),
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- ============================================
-- 2. PROJECTS TABLE
-- ============================================
CREATE TABLE projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(200) NOT NULL,
description TEXT NOT NULL,
status VARCHAR(20) DEFAULT 'planning'
CHECK (status IN ('planning', 'active', 'on_hold', 'completed', 'cancelled')),
start_date DATE NOT NULL,
end_date DATE,
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- ============================================
-- 3. PROJECT ASSIGNMENTS TABLE
-- ============================================
CREATE TABLE project_assignments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
assigned_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
UNIQUE(project_id, user_id)
);
-- ============================================
-- 4. RISKS TABLE
-- ============================================
CREATE TABLE risks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
title VARCHAR(200) NOT NULL,
description TEXT NOT NULL,
probability VARCHAR(20) CHECK (probability IN ('low', 'medium', 'high', 'critical')),
impact VARCHAR(20) CHECK (impact IN ('low', 'medium', 'high', 'critical')),
priority VARCHAR(20) CHECK (priority IN ('low', 'medium', 'high', 'critical')),
status VARCHAR(20) DEFAULT 'identified'
CHECK (status IN ('identified', 'assessed', 'mitigating', 'mitigated', 'accepted', 'occurred')),
mitigation_strategy TEXT,
contingency_plan TEXT,
owner_id UUID REFERENCES users(id) ON DELETE SET NULL,
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- ============================================
-- 5. ACTIONS TABLE
-- ============================================
CREATE TABLE actions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
title VARCHAR(200) NOT NULL,
description TEXT NOT NULL,
priority VARCHAR(20) DEFAULT 'medium' CHECK (priority IN ('low', 'medium', 'high', 'critical')),
status VARCHAR(20) DEFAULT 'pending'
CHECK (status IN ('pending', 'in_progress', 'completed', 'cancelled', 'on_hold')),
due_date DATE,
completion_date DATE,
assigned_to UUID REFERENCES users(id) ON DELETE SET NULL,
dependencies TEXT,
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- ============================================
-- 6. ISSUES TABLE
-- ============================================
CREATE TABLE issues (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
title VARCHAR(200) NOT NULL,
description TEXT NOT NULL,
severity VARCHAR(20) CHECK (severity IN ('low', 'medium', 'high', 'critical')),
priority VARCHAR(20) DEFAULT 'medium' CHECK (priority IN ('low', 'medium', 'high', 'critical')),
status VARCHAR(20) DEFAULT 'open'
CHECK (status IN ('open', 'in_progress', 'resolved', 'closed', 'reopened')),
resolution TEXT,
date_identified DATE DEFAULT CURRENT_DATE,
date_resolved DATE,
assigned_to UUID REFERENCES users(id) ON DELETE SET NULL,
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- ============================================
-- 7. DECISIONS TABLE
-- ============================================
CREATE TABLE decisions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
title VARCHAR(200) NOT NULL,
description TEXT NOT NULL,
decision_date DATE NOT NULL,
status VARCHAR(20) DEFAULT 'proposed'
CHECK (status IN ('proposed', 'approved', 'rejected', 'implemented', 'reversed')),
rationale TEXT,
alternatives_considered TEXT,
stakeholders TEXT,
made_by UUID REFERENCES users(id) ON DELETE SET NULL,
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- ============================================
-- INDEXES FOR PERFORMANCE
-- ============================================
CREATE INDEX idx_projects_created_by ON projects(created_by);
CREATE INDEX idx_project_assignments_project ON project_assignments(project_id);
CREATE INDEX idx_project_assignments_user ON project_assignments(user_id);
CREATE INDEX idx_risks_project ON risks(project_id);
CREATE INDEX idx_actions_project ON actions(project_id);
CREATE INDEX idx_issues_project ON issues(project_id);
CREATE INDEX idx_decisions_project ON decisions(project_id);
-- ============================================
-- UPDATED_AT TRIGGERS
-- ============================================
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_projects_updated_at BEFORE UPDATE ON projects
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_risks_updated_at BEFORE UPDATE ON risks
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_actions_updated_at BEFORE UPDATE ON actions
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_issues_updated_at BEFORE UPDATE ON issues
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_decisions_updated_at BEFORE UPDATE ON decisions
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
4. Verify Database Tables
After running the script, verify all 7 tables were created:
usersprojectsproject_assignmentsrisksactionsissuesdecisions
⚙️ Configuration
Environment Variables
Create a .env file in the project root:
# Copy example file
copy .env.example .env
# Edit with your credentials
notepad .env
.env File Contents
# ==================================================
# Supabase Database Configuration
# ==================================================
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-anon-key-here
# ==================================================
# JWT Authentication Configuration
# ==================================================
JWT_SECRET_KEY=your-super-secret-key-change-this-in-production
JWT_ALGORITHM=HS256
JWT_EXPIRATION_HOURS=24
# ==================================================
# Server Configuration
# ==================================================
MCP_SERVER_HOST=0.0.0.0
MCP_SERVER_PORT=8000
# ==================================================
# Application Configuration
# ==================================================
APP_NAME=RAID MCP Server
APP_VERSION=1.0.0
DEBUG=false
LOG_LEVEL=INFO
Generate JWT Secret
Run this command to generate a secure secret:
python -c "import secrets; print(secrets.token_urlsafe(32))"
Copy the output and paste it as your JWT_SECRET in .env.
Security Notes
⚠️ IMPORTANT:
- Never commit
.envto version control (it's already in.gitignore) - Use strong, unique
JWT_SECRET_KEYin production - Rotate JWT secrets regularly
- Use environment-specific configurations
🏃 Running the Server
Start the Server
# Activate virtual environment
.\venv\Scripts\Activate.ps1
# Run server
python src/main.py
Expected Output
======================================================================
RAID Management MCP Server
======================================================================
Server Name: RAID Management Server
Transport: Streamable HTTP
Host: 0.0.0.0
Port: 8000
URL: http://0.0.0.0:8000
======================================================================
[HELP] GETTING HELP:
- health_check - Verify server is running
- list_all_tools - See all available tools
- help_tool('tool_name') - Get detailed help for any tool
[TOOLS] Available Tools (38 total)
...
Starting server...
Test Server Connection
# In Claude Desktop, run:
health_check
# Expected response:
{
"status": "healthy",
"server": "RAID Management MCP Server",
"version": "1.0.0",
"tools_available": 38,
"message": "Server is running and ready to accept requests"
}
🖥️ Claude Desktop Setup
1. Configure Claude Desktop
Edit your Claude Desktop config file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
Add this configuration:
{
"mcpServers": {
"raid-server": {
"command": "D:\\MCP\\learn\\RAID_MCP_ONE\\venv\\Scripts\\python.exe",
"args": ["D:\\MCP\\learn\\RAID_MCP_ONE\\src\\main.py"]
}
}
}
Important: Update the paths to match your actual project location.
2. Restart Claude Desktop
After adding the configuration:
- Close Claude Desktop completely
- Reopen Claude Desktop
- The MCP server will start automatically
3. Verify Connection
In Claude Desktop chat, type:
Check if the RAID server is healthy and running
You should see a health status response.
💬 Using the Server
First-Time Setup
1. Create Admin User
Create a RAID admin user with:
- username: admin
- email: admin@example.com
- password: AdminPass123!
- full_name: System Administrator
- role: admin
2. Login
Login to RAID using email 'admin@example.com' and password 'AdminPass123!'
Note: After successful login, Claude Desktop remembers your token automatically. No need to provide it in subsequent prompts!
3. Change Password
Change my RAID password from 'AdminPass123!' to 'NewSecurePass456!'
Creating Projects and Users
Create a Project:
Create a new project named 'Website Redesign' with description 'Complete redesign of company website', status 'planning', start date '2025-01-01', and end date '2025-06-30'
Create a User:
Create a new user with email 'john@example.com', username 'john_doe', password 'UserPass123', full name 'John Doe', and role 'user'
Assign User to Project:
Assign user with ID 'user-id-here' to project with ID 'project-id-here'
Managing RAID Items
Create a Risk:
Create a risk in project 'project-id-here' with title 'Database Migration Risk', description 'Risk of data loss during migration', probability 'medium', impact 'high', and priority 'high'
Create an Action:
Create an action in project 'project-id-here' with title 'Setup CI/CD Pipeline', description 'Configure GitHub Actions', priority 'high', and due date '2025-02-15'
Create an Issue:
Create an issue in project 'project-id-here' with title 'Login page not responsive', description 'Cannot login from mobile devices', severity 'high', and priority 'critical'
Create a Decision:
Create a decision in project 'project-id-here' with title 'Use PostgreSQL', description 'Selected PostgreSQL as primary database', and decision date '2025-01-10'
Getting Help
Show me how to use the create_risk tool
List all available RAID tools
For more example prompts, see .
🔐 Security
Authentication Flow
1. User calls login(email, password)
↓
2. Server verifies password (bcrypt)
↓
3. Server generates JWT token
↓
4. User receives token
↓
5. Claude Desktop remembers token
↓
6. Server validates token on each request
↓
7. Token expires after JWT_EXPIRATION_HOURS
Password Security
- Bcrypt Hashing: Industry-standard password encryption
- Salt Generation: Unique salt for each password
- Cost Factor: 12 rounds (configurable)
- No Plain Text Storage: Passwords never stored in plain text
Token Security
- HS256 Algorithm: HMAC with SHA-256
- Expiration: Configurable (default 24 hours)
- Payload: Contains user_id, email, role
- Secret Rotation: Change JWT_SECRET_KEY regularly
Access Control
| Role | Permissions |
|---|---|
| Admin | • Create/update/delete users • Create/update/delete projects • Assign users to projects • Full access to all RAID items |
| User | • View assigned projects only • Create RAID items in assigned projects • Update/delete own RAID items • Change own password |
📁 Project Structure
RAID_MCP_ONE/
├── .env # Environment variables (not in git)
├── .env.example # Environment template
├── .gitignore # Git ignore rules
├── README.md # This file
├── requirements.txt # Python dependencies
│
├── readmes/ # Additional documentation
│ ├── TESTING_GUIDE.md # Manual testing instructions
│ ├── GITHUB_COPILOT_MCP_GUIDE.md # GitHub Copilot setup
│ ├── PROMPTS.md # Claude Desktop prompt examples
│ └── ARCHITECTURE_DIAGRAMS.md # Visual architecture diagrams
│
└── src/ # Source code
├── main.py # FastMCP server & MCP tools (38 tools)
│
├── config/ # Configuration
│ └── settings.py # App settings (Pydantic)
│
├── models/ # Data models
│ └── enums.py # Enumerations (Status, Priority, etc.)
│
├── schemas/ # Pydantic schemas
│ ├── __init__.py # Schema exports
│ ├── auth.py # Authentication schemas
│ ├── user.py # User schemas
│ ├── project.py # Project schemas
│ └── raid.py # RAID item schemas
│
├── auth/ # Authentication
│ ├── password.py # Bcrypt password hashing
│ └── jwt_handler.py # JWT token operations
│
├── database/ # Database layer
│ ├── base_repository.py # Base repository class
│ ├── supabase_client.py # Supabase client singleton
│ ├── user_repository.py # User data access
│ ├── project_repository.py # Project data access
│ └── raid_repositories.py # RAID items data access
│
├── services/ # Business logic
│ └── raid_service.py # Main service layer
│
└── utils/ # Utilities
├── interactive_prompts.py # Help & validation
└── formatters.py # Table formatting
📚 API Reference
Tool Categories
| Category | Tools | Description |
|---|---|---|
| Health | 1 | Server status checking |
| Authentication | 3 | Login and password management |
| User Management | 5 | Complete user CRUD (Admin only) |
| Project Management | 6 | Complete project CRUD + assignments |
| Risk Management | 4 | Complete risk CRUD |
| Action Management | 4 | Complete action CRUD |
| Issue Management | 4 | Complete issue CRUD |
| Decision Management | 4 | Complete decision CRUD |
| Help & Discovery | 3 | Interactive assistance |
| TOTAL | 38 | All operations covered |
Quick Reference
Authentication Tools
login(email, password)- Get JWT tokenchange_password(token, current_password, new_password)- Change your passwordreset_user_password(token, user_id, new_password)- Admin resets user password
User Management Tools (Admin Only)
create_user(token, email, username, password, full_name, role)- Create new userlist_users(token, skip, limit)- List all usersget_user(token, user_id)- Get user detailsupdate_user(token, user_id, ...)- Update user informationdelete_user(token, user_id)- Delete user
Project Management Tools
create_project(token, name, description, status, start_date, end_date)- Create projectlist_projects(token, skip, limit)- List projects (filtered by access)get_project(token, project_id)- Get project detailsupdate_project(token, project_id, ...)- Update projectdelete_project(token, project_id)- Delete projectassign_user_to_project(token, project_id, user_id)- Assign user (Admin only)
RAID Management Tools
Each RAID category (Risks, Actions, Issues, Decisions) has 4 tools:
create_*- Create new itemlist_*- List items with filteringupdate_*- Update itemdelete_*- Delete item
For detailed parameter descriptions and examples, see .
🐛 Troubleshooting
Common Issues
Server Won't Start
Problem: ModuleNotFoundError: No module named 'fastmcp'
Solution:
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
Authentication Fails
Problem: "Invalid email or password"
Solution:
- Verify admin user exists in database
- Check password is correct
- Ensure user
is_active = true
Database Connection Error
Problem: "Supabase connection failed"
Solution:
# Verify .env settings
Get-Content .env | Select-String "SUPABASE"
# Test connection from Python
python -c "from src.database.supabase_client import get_supabase_client; print(get_supabase_client())"
Token Expired
Problem: "Token has expired"
Solution:
Login again to get new token:
login to RAID using email 'your-email@example.com' and password 'your-password'
Permission Denied
Problem: "Admin role required"
Solution:
- Some operations require admin role (user management, project deletion)
- Check user's role in database
- Login with admin account for admin operations
List Returns Empty
Problem: list_projects() returns "No projects found"
Solution:
- Regular users only see assigned projects
- Use admin account to assign user to project
- Admins see all projects
Debug Mode
Enable debug logging in .env:
DEBUG=true
LOG_LEVEL=DEBUG
📖 Additional Documentation
- - Manual testing procedures and workflows
- - Using GitHub Copilot as MCP client
- - Claude Desktop prompt examples for all 38 tools
- - Visual architecture diagrams (Mermaid)
📄 License
This project is licensed under the MIT License - see the file for details.
🙏 Acknowledgments
- FastMCP - MCP framework
- Supabase - Database platform
- Pydantic - Data validation
- Claude Desktop - MCP client
Made with ❤️ for Project Management
Last Updated: November 5, 2025