A lightweight MCP server that integrates Simplenote with Claude Desktop using the MCP Python SDK.
This allows Claude Desktop to interact with your Simplenote notes as a memory backend or content source.
Major Performance Breakthrough - Production Ready!
Version 1.9.0 delivers a 98% startup performance improvement and marks the project as fully production-ready for Claude Desktop integration:
- 🚀 Startup Time: Reduced from 55+ seconds to < 1 second (98% improvement)
- ✅ Claude Desktop Ready: Fixed critical timeout issue preventing MCP integration
- 📊 Code Quality: 21% reduction in high-complexity functions, Phase 1 refactoring complete
- 📚 Complete Documentation: Comprehensive guides, templates, and production validation
- 🎯 Zero Technical Debt: 0 open issues, 0 open PRs, all quality gates passing
- 🏆 Grade A+ Health: 756 tests passing, 69.64% coverage, 100% CI success rate
Key Improvements:
- Thread pool execution for blocking Simplenote API calls
- True non-blocking cache initialization with background loading
- Graceful empty cache handling during startup
- Enhanced monitoring and complexity analysis tools
- GitHub issue templates for better community engagement
See the CHANGELOG for complete details.
- 📝 Full Note Management: Read, create, update, and delete Simplenote notes
- 🔍 Advanced Search: Boolean operators, phrase matching, tag and date filters
- ⚡ High Performance: In-memory caching with background synchronization
- 🔐 Secure Authentication: Token-based authentication via environment variables
- 🧩 MCP Compatible: Works with Claude Desktop and other MCP clients
- 🐳 Docker Ready: Full containerization with multi-stage builds and security hardening
- 📊 Monitoring: Optional HTTP endpoints for health, readiness, and metrics
- 🧪 Robust Testing: Comprehensive test suite with 700+ tests and continuous integration
- 🔒 Security Hardened: Regular security scanning with Bandit, pip-audit, and dependency checks
- Simplenote account (create one at simplenote.com)
- Python 3.10+ (for non-Docker installs) or Docker
The fastest way to get started is using our pre-built Docker image:
# Pull and run the latest image
docker run -d \
--name simplenote-mcp \
-e SIMPLENOTE_EMAIL=your.email@example.com \
-e SIMPLENOTE_PASSWORD=your-password \
-p 8000:8000 \
docdyhr/simplenote-mcp-server:latestDocker Health Checks: The container includes built-in health monitoring endpoints:
- Health:
http://localhost:8000/health - Readiness:
http://localhost:8000/ready - Metrics:
http://localhost:8000/metrics(Prometheus format)
Or use Docker Compose:
# Clone the repository for docker-compose.yml
git clone https://github.com/docdyhr/simplenote-mcp-server.git
cd simplenote-mcp-server
# Set environment variables
export SIMPLENOTE_EMAIL=your.email@example.com
export SIMPLENOTE_PASSWORD=your-password
# Run with Docker Compose
docker-compose up -dInstall automatically via Smithery:
npx -y @smithery/cli install @docdyhr/simplenote-mcp-server --client claudeThis method automatically configures Claude Desktop with the MCP server.
git clone https://github.com/docdyhr/simplenote-mcp-server.git
cd simplenote-mcp-server
pip install -e .
simplenote-mcp-server- Start with
docs/DOCUMENTATION_GUIDE.mdfor a curated tour of user, developer, and operations docs plus maintenance checklists. - Historical project summaries now live under
docs/archive/2025/, keeping the repository root focused on active roadmaps and guides. - Need something fast? Run
rg "<topic>" docs/or jump todocs/index.mdfor the MkDocs-style table of contents.
- Multi-stage builds for optimized image size
- Security hardening with non-root user and minimal attack surface
- Health monitoring endpoints built-in
- Resource limits and proper signal handling
- Volume support for persistent data
The easiest way to use the server is with our pre-built Docker images:
# Pull the latest image
docker pull docdyhr/simplenote-mcp-server:latest
# Run with Docker
docker run -d \
-e SIMPLENOTE_EMAIL=your.email@example.com \
-e SIMPLENOTE_PASSWORD=your-password \
-p 8000:8000 \
docdyhr/simplenote-mcp-server:latest
# Or use Docker Compose
docker-compose up -dAvailable tags:
latest- Latest stable releasev1.9.0- Specific versionmain- Latest development build
# Build and run the production container
docker-compose up -d
# Or build manually
docker build -t simplenote-mcp-server .
docker run -d \
-e SIMPLENOTE_EMAIL=your.email@example.com \
-e SIMPLENOTE_PASSWORD=your-password \
-p 8000:8000 \
simplenote-mcp-server# Use the development compose file for live code mounting
docker-compose -f docker-compose.dev.yml up- Multi-stage build for optimized image size (346MB)
- Multi-platform support:
linux/amd64andlinux/arm64 - Security hardening: Non-root user, read-only filesystem, no new privileges
- Health checks and automatic restart policies
- Resource limits: 1 CPU, 512MB memory
- Logging: Persistent log volumes
- Environment-based configuration
- CI/CD Pipeline: Automated builds and publishing to Docker Hub
- Security scanning: Trivy vulnerability scanning on all images
- Container signing: Sigstore cosign signatures for supply chain security
- Kubernetes ready: Production-grade Helm chart with security hardening
- Automated updates: Dependabot for dependencies, auto-versioning workflows
- Health monitoring: Continuous health checks and alerting
- Enterprise notifications: Slack and email integration for CI/CD status
Deploy to Kubernetes with our production-ready Helm chart:
# Install from local chart
helm install my-simplenote ./helm/simplenote-mcp-server \
--set simplenote.email="your-email@example.com" \
--set simplenote.password="your-password"
# Or with external secrets (recommended for production)
helm install my-simplenote ./helm/simplenote-mcp-server \
--set externalSecrets.enabled=true \
--set externalSecrets.secretStore.name="vault-backend"- Security hardening: Non-root user, read-only filesystem, dropped capabilities
- Resource management: CPU/memory limits and requests configured
- Auto-scaling: Horizontal Pod Autoscaler support
- Health checks: Liveness and readiness probes
- External secrets: Integration with external secret management
- Service mesh ready: Compatible with Istio and other service meshes
# values.yaml for production
replicaCount: 3
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
resources:
limits:
cpu: 1000m
memory: 512Mi
requests:
cpu: 500m
memory: 256Mi| Variable | Required | Default | Description |
|---|---|---|---|
SIMPLENOTE_EMAIL |
Yes | - | Your Simplenote account email |
SIMPLENOTE_PASSWORD |
Yes | - | Your Simplenote account password |
SYNC_INTERVAL_SECONDS |
No | 120 | Cache synchronization interval |
LOG_LEVEL |
No | INFO | Logging level (DEBUG, INFO, WARNING, ERROR) |
Add to your claude_desktop_config.json:
{
"mcpServers": {
"simplenote": {
"description": "Access and manage your Simplenote notes",
"command": "simplenote-mcp-server",
"env": {
"SIMPLENOTE_EMAIL": "your.email@example.com",
"SIMPLENOTE_PASSWORD": "your-password"
}
}
}
}Powerful search with boolean logic and filters:
# Boolean operators
project AND meeting AND NOT cancelled
# Phrase matching
"action items" AND project
# Tag filtering
meeting tag:work tag:important
# Date ranges
project from:2023-01-01 to:2023-12-31
# Combined query
"status update" AND project tag:work from:2023-01-01 NOT cancelled
| Tool | Description | Parameters |
|---|---|---|
create_note |
Create a new note | content, tags (optional) |
update_note |
Update an existing note | note_id, content, tags (optional) |
delete_note |
Move a note to trash | note_id |
get_note |
Get a note by ID | note_id |
search_notes |
Advanced search with filters | query, limit, offset, tags, from_date, to_date |
add_tags |
Add tags to a note | note_id, tags |
remove_tags |
Remove tags from a note | note_id, tags |
replace_tags |
Replace all tags on a note | note_id, tags |
- In-memory caching with background synchronization
- Pagination support for large note collections
- Indexed lookups for tags and content
- Query result caching for repeated searches
- Optimized API usage with minimal Simplenote calls
Critical Bug Fix:
- Fixed Claude Desktop timeout - Reduced startup time from 55+ seconds to < 1 second (98% improvement)
- Implemented thread pool execution for blocking Simplenote API calls
- Made cache initialization truly non-blocking with background loading
- Resolved
anyio.BrokenResourceErrorduring shutdown
Code Refactoring - Phase 1 Complete:
- Cache module complexity reduced: 5 high-complexity functions (CC >= 15) → 0 (100% reduction)
- Maintainability improved: Cache MI from 12.7 → 16.2 (+28%)
- Extracted 23 helper methods for better code organization
- All 670 tests passing with 67% cache coverage maintained
- See
REFACTORING_PHASE1_COMPLETE.mdfor details
Documentation Enhancements:
- Added comprehensive
CHANGELOG.mdwith complete version history - Created
TESTING_CLAUDE_DESKTOP.mdfor user testing guide - Added code complexity analysis tools (
check_complexity.py) - Documented refactoring plan and completion reports
Quality Tools:
- Integrated Radon for automated complexity analysis
- Baseline metrics: 22 functions CC >= 15 (down from 28)
- Average Maintainability Index: 57.9 (maintained)
- Zero diagnostics errors, all quality gates passing
Test Suite Stabilization:
- Fixed test isolation issues that caused intermittent failures
- Improved test cleanup with proper timeout handling
- Enhanced fixture management for better test reliability
- Achieved consistent test results across individual and suite runs
CI/CD Pipeline Optimization:
- Consolidated 28 workflows down to 16 active workflows
- Implemented unified monitoring workflow combining security, health, and badge checks
- Improved test coverage reporting with realistic 15.6% baseline
- Enhanced Docker build validation and security scanning
Code Quality Improvements:
- All linting (Ruff), formatting, and type checking (MyPy) now pass consistently
- Zero high-severity security vulnerabilities (verified with Bandit, pip-audit, safety)
- Standardized code formatting and pre-commit hooks configuration
- Enhanced error handling and user-facing error messages
Improved Testing:
- 724 comprehensive tests covering core functionality
- Function-scoped fixtures for better test isolation
- Realistic coverage baseline established (15.6%)
- Streamlined test execution with proper cleanup
Enhanced Documentation:
- Updated deployment guides with current Docker setup
- Improved health monitoring endpoint documentation
- Added troubleshooting guides for common issues
- Current status and roadmap documentation
Container Improvements:
- Multi-stage Docker builds for optimized image size
- Built-in health monitoring endpoints (
/health,/ready,/metrics) - Enhanced security hardening with non-root user
- Improved signal handling and graceful shutdown
Status: ✅ WORKING - Complete mcp-evals integration with TypeScript wrapper!
This project includes comprehensive evaluations using mcp-evals to ensure reliability and performance:
# Setup evaluation environment
npm install
npm run validate:evals
# Run evaluation suites
npm run eval:smoke # Quick smoke tests (2-3 minutes) ✅ VERIFIED
npm run eval:basic # Standard evaluations (5-10 minutes)
npm run eval:comprehensive # Full evaluation suite (15-30 minutes)Latest Test Results: 4/5 tests passing excellently (avg 4.1/5):
- Server Startup: 4.6/5 ⭐ (Excellent)
- Authentication: 4.0/5 ⭐ (Good)
- Note Operations: 3.8/5 ⭐ (Good)
- Search: 5.0/5 ⭐ (Perfect)
- Error Handling: 1.4/5
⚠️ (Needs improvement)
- Smoke Tests: Basic functionality validation
- CRUD Operations: Note creation, reading, updating, deletion
- Search & Filtering: Boolean search, tag filtering, date ranges
- Error Handling: Authentication, network issues, edge cases
- Performance: Large datasets, concurrent operations
- Security: Input validation, authentication enforcement
Evaluations run automatically on:
- Pull Requests: Smoke + basic tests
- Releases: Comprehensive evaluation suite
- Manual Trigger: Full test matrix with detailed reporting
The evaluations use OpenAI's GPT models to assess:
- Accuracy: Correctness of responses
- Completeness: Thoroughness of results
- Relevance: Response appropriateness
- Clarity: Response readability
- Performance: Operation efficiency
📁 See evals/README.md for detailed evaluation documentation.
# Python unit tests
pytest
# Code quality checks
ruff check .
mypy simplenote_mcp- Token-based authentication via environment variables
- No hardcoded credentials in Docker images
- Security-hardened containers with non-root users
- Read-only filesystem in production containers
- Resource limits to prevent abuse
Authentication Problems:
- Verify
SIMPLENOTE_EMAILandSIMPLENOTE_PASSWORDare set correctly - Check for typos in credentials
Docker Issues:
# Check container logs
docker-compose logs
# Restart services
docker-compose restart
# Rebuild if needed
docker-compose up --buildClaude Desktop Connection:
# Verify tools are available
./simplenote_mcp/scripts/verify_tools.sh
# Monitor logs
./simplenote_mcp/scripts/watch_logs.sh# Test connectivity
python simplenote_mcp/tests/test_mcp_client.py
# Check server status
./simplenote_mcp/scripts/check_server_pid.sh
# Clean up and restart
./simplenote_mcp/scripts/cleanup_servers.sh# One-command setup including evaluations
./setup-dev-env-with-evals.sh
# Or manual setup
git clone https://github.com/docdyhr/simplenote-mcp-server.git
cd simplenote-mcp-server
pip install -e ".[dev,test]"
npm install # For mcp-evals# Run the server
python simplenote_mcp_server.py
# Run Python tests
pytest
# Run mcp-evals
npm run eval:smoke # Quick validation
npm run eval:basic # Standard tests
npm run eval:all # Full test suite
# Code quality
ruff check .
ruff format .
mypy simplenote_mcpThe setup script creates:
- Python development environment with all dependencies
- Node.js environment for mcp-evals
- Example configuration files
- Pre-commit hooks
- Validation for all evaluation files
- Unit Tests: Traditional Python pytest for core logic
- Integration Tests: MCP protocol compliance testing
- Smoke Tests: Quick validation of basic functionality
- Evaluation Tests: LLM-based assessment of real-world usage
- Performance Tests: Load and stress testing
Due to potential permission issues with tsx, we recommend running MCP evaluations in Docker:
# Run smoke tests
./scripts/run-evals-docker.sh smoke
# Run basic evaluations
./scripts/run-evals-docker.sh basic
# Run comprehensive evaluations
./scripts/run-evals-docker.sh comprehensive
# Run all evaluations
./scripts/run-evals-docker.sh allnpm run eval:smoke
npm run eval:basic
npm run eval:comprehensive
npm run eval:all# Development with live code reload
docker-compose -f docker-compose.dev.yml up
# Build and test
docker build -t simplenote-mcp-server:test .
docker run --rm simplenote-mcp-server:test --helpContributions are welcome! Please read CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
If you find this project helpful, please consider giving it a star on GitHub! Your support helps:
- 🚀 Increase visibility for other developers who might benefit from this tool
- 💪 Motivate continued development and maintenance
- 📈 Build community around the Model Context Protocol ecosystem
- 🛡️ Validate trust through community engagement
⭐ Star this repository — it takes just one click and means a lot!

