A secure Model Context Protocol (MCP) server for managing a global AI scratchpad file. Track interruptions, ideas, tasks, and maintain focus across all your projects with a single scratchpad on your Desktop.
- Input Validation: Comprehensive sanitization of all user inputs
- Rate Limiting: 60 requests/minute protection against abuse
- Path Traversal Protection: Workspace boundary enforcement
- Content Size Limits: Max 1MB file size, 500 char notes
- Allowed Directory Restrictions: Only approved locations
- Error Sanitization: Prevents sensitive information disclosure
- π Log Interruptions: Capture ideas without losing focus
- π― Track Current Focus: Update and maintain your current task
- π Review Later: Queue items for follow-up consideration
- β Mark Completed: Track accomplishments with timestamps
- ποΈ Archive Items: Dismiss or archive old ideas
- π Auto Statistics: Automatically tracks logged, completed, and archived items
- π Global Scratchpad: Single scratchpad on Desktop accessible from all projects
- π Organized Storage: Markdown-based scratchpad with sections
- π Secure by Design: Input validation, rate limiting, path protection
- β‘ Fast & Lightweight: Minimal dependencies, quick operations
- Python 3.8+
- MCP-compatible client (Claude Desktop, etc.)
- Clone or download this project:
cd ~/Documents/GitHub/scratchpad- Install dependencies:
pip install -r requirements.txt- Make the server executable:
chmod +x src/server.pyAdd to your MCP client configuration (e.g., Claude Desktop):
{
"mcpServers": {
"scratchpad": {
"command": "python3",
"args": ["/path/to/scratchpad/src/server.py"]
}
}
}The scratchpad will be created at ~/Desktop/scratchpad/scratchpad.md and accessible from all your projects.
Create a new scratchpad file at ~/Desktop/scratchpad/scratchpad.md.
No parameters required.
Get the scratchpad file path and check if it exists.
No parameters required.
Read the entire scratchpad contents.
No parameters required.
Log an idea, bug, or interruption.
Parameters:
note(required): The note to log (max 500 chars)type(optional): One of: idea, bug, feature, question, contact, refactor, task, notepriority(optional): One of: high, medium, low
Example:
{
"note": "Add error handling to API client",
"type": "bug",
"priority": "high"
}Update your current focus/task.
Parameters:
task(required): Description of current task (max 200 chars)
Example:
{
"task": "Implementing user authentication flow"
}Add an item to the "To Review Later" section for follow-up.
Parameters:
note(required): The item to add (max 500 chars)
Example:
{
"note": "Research better caching strategy for API calls"
}Mark an item as completed. Adds it to "Completed Today" with timestamp and removes it from Interruptions/Review Later.
Parameters:
note(required): The completed item (max 500 chars)
Example:
{
"note": "Fixed authentication bug in login flow"
}Archive/dismiss an item. Moves it to "Archived / Dismissed" section and removes it from Interruptions/Review Later.
Parameters:
note(required): The item to archive (max 500 chars)
Example:
{
"note": "Old idea that's no longer relevant"
}The scratchpad is always located at:
- Primary:
~/Desktop/scratchpad/scratchpad.md - Fallback:
~/scratchpad/scratchpad.md(if Desktop doesn't exist)
This fixed location prevents path traversal attacks and unauthorized file access.
- Extensions: Only
.md,.txt,.markdown - Max size: 1MB
- Path length: 256 characters max
- Limit: 60 requests per minute
- Window: Rolling 60-second window
- Scope: Per-process (resets on server restart)
All inputs are sanitized to prevent:
- Path traversal attacks (
..,~) - Command injection (
`,$) - XSS attempts (
<script>,javascript:) - Null byte injection (
\x00)
- Notes: 500 characters maximum
- Tasks: 200 characters maximum
- File size: 1MB maximum
Ensure the scratchpad directory has appropriate permissions:
chmod 755 ~/Desktop/scratchpad
chmod 644 ~/Desktop/scratchpad/scratchpad.mdMonitor scratchpad file sizes and archive old content regularly.
Check stderr output for security warnings:
python3 src/server.py 2>scratchpad-errors.logWait for the specified time or restart the server to reset the rate limiter.
The scratchpad doesn't exist yet. Use scratchpad_create to create it at ~/Desktop/scratchpad/scratchpad.md.
If ~/Desktop doesn't exist, the scratchpad will be created at ~/scratchpad/scratchpad.md instead.
Test the server directly:
cd ~/Documents/GitHub/scratchpad
python3 src/server.pyThe server outputs operational info to stderr:
π Scratchpad MCP initialized
π Scratchpad location: /Users/username/Desktop/scratchpad/scratchpad.md
β
Created scratchpad: /Users/username/Desktop/scratchpad/scratchpad.md
π Logged: Bug - Add error handling...
MIT License - feel free to use and modify as needed.
If you discover a security vulnerability, please report it privately rather than creating a public issue.