Simplenote MCP Server
This server provides read-only access to Simplenote notes, tags, versions, exports, and server/vault status.
List recent notes with optional tag filtering and trashed-note inclusion.
Search notes with boolean/phrase queries, tag/date/pinned filters, fuzzy matching, pagination, and sorting.
Retrieve full note content by ID.
List all tags with counts and find untagged notes.
View a note's version history.
Export selected notes as Markdown or JSON.
Check server version/runtime details and Vault encryption key/status.
Provides full note management capabilities including reading, creating, updating, and deleting notes, with advanced search features supporting boolean operators, phrase matching, tag and date filters.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Simplenote MCP Serversearch for notes about meeting agenda from last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Simplenote MCP Server

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.
Related MCP server: simplenote-mcp
What's New
30 Tools — Full Bear Parity + Simplenote Differentiators + Claude Companion Tools + Vault Encryption
Vault — opt-in client-side note encryption: Simplenote has no encryption at rest. create_note/update_note now accept encrypt: true, and encrypt_note/decrypt_note convert existing notes — bodies become AES-256-GCM ciphertext before they ever reach Simplenote's API. See docs/security/encryption-design.md.
MCP Resources and Prompts hardened for the working-memory companion use case:
Fixed:
list_resources/read_resourcewere silently dropping tag/date/pagination metadata via non-schema fields — now attached through the MCP spec's_metaextension field, the correct mechanism.session-handoffMCP Prompt: scaffolds the Session Continuity workflow (get_or_create_note+add_textwith aStatus:/Next:/Blockers:format) for cross-session context handoff.
Irreversible-deletion tools with mandatory safety guards:
permanent_delete_note: Permanently destroy a single note; requiresconfirm=true; dry-run preview by defaultempty_trash: Permanently delete all trashed notes; defaults todry_run=true(preview); requiresdry_run=falseANDconfirm=true1334 tests passing, 79%+ coverage, zero linting/type errors
See the CHANGELOG and ROADMAP.md for complete details.
v1.17.0
search_notesasync fix: Boolean AND queries no longer hang the server; search now runs in a thread-pool executor with a 30 s timeoutSubstring pre-filter: searching "test" now correctly returns notes containing "testing", "tested", etc.
Real-engine integration test suite added; import error in test helpers fixed
v1.16.0
publish_note: Publish a note to a public URL — unique to Simplenote MCP; returnspublic_urlunpublish_note: Remove a note from public access; no-op if already unpublished
See the CHANGELOG for complete details.
🔧 Features
📝 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
🔑 Vault Encryption: Opt-in client-side AES-256-GCM encryption for sensitive notes — Simplenote itself has no encryption at rest
🧩 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 1334 tests and continuous integration
🔒 Security Hardened: Regular security scanning with Bandit, pip-audit, and dependency checks
🚀 Quick Start
Prerequisites
Simplenote account (create one at simplenote.com)
Python 3.10+ (for non-Docker installs) or Docker
Option 1: Docker (Recommended)
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 \
-e MCP_TRANSPORT=http \
-e MCP_HTTP_HOST=0.0.0.0 \
-e MCP_HTTP_AUTH_TOKEN=your-random-secret-token \
-p 8000:8000 \
docdyhr/simplenote-mcp-server:latestMCP_HTTP_AUTH_TOKEN is required whenever MCP_HTTP_HOST is anything other
than 127.0.0.1/localhost — the server refuses to start otherwise (see the
Security section below). Without MCP_TRANSPORT=http, the server runs over
stdio by default and nothing listens on the published port at all.
Docker Health Checks: health monitoring is a separate HTTP endpoint
from the MCP protocol port above — it's off by default and must be enabled
explicitly with -e ENABLE_HTTP_ENDPOINT=true -e HTTP_HOST=0.0.0.0 -p 8080:8080
(Docker's -p mapping forwards to the container's network interface, not its
loopback, so HTTP_HOST must be 0.0.0.0 for the published port to actually
reach it — the 127.0.0.1 default only works if you're calling these
endpoints from another process inside the same container):
Health:
http://localhost:8080/healthReadiness:
http://localhost:8080/readyMetrics:
http://localhost:8080/metrics(Prometheus format)
The server refuses to start if HTTP_HOST is non-loopback and no
HTTP_ENDPOINT_AUTH_TOKEN is set, since these endpoints would otherwise be
reachable by anyone who can reach the port. Set a bearer token (checked via
Authorization: Bearer <token>, same mechanism as MCP_HTTP_AUTH_TOKEN
above) if you need a non-loopback bind — loopback callers are always
trusted regardless, so this never breaks a local health check. Prefer
keeping it loopback-only and publishing with -p 127.0.0.1:8080:8080
instead of -p 8080:8080 when you can.
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 -dOption 2: Smithery (One-click install)
Install automatically via Smithery:
npx -y @smithery/cli install @docdyhr/simplenote-mcp-server --client claudeThis method automatically configures Claude Desktop with the MCP server.
Option 3: Traditional Python Install
git clone https://github.com/docdyhr/simplenote-mcp-server.git
cd simplenote-mcp-server
pip install -e .
simplenote-mcp-server🗂 Documentation Map & Archives
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.
🐳 Docker Deployment
Container Features
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
Using Pre-built Images
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 (see Quick Start above for the required MCP_HTTP_* env vars)
docker run -d \
-e SIMPLENOTE_EMAIL=your.email@example.com \
-e SIMPLENOTE_PASSWORD=your-password \
-e MCP_TRANSPORT=http \
-e MCP_HTTP_HOST=0.0.0.0 \
-e MCP_HTTP_AUTH_TOKEN=your-random-secret-token \
-p 8000:8000 \
docdyhr/simplenote-mcp-server:latest
# Or use Docker Compose (set MCP_HTTP_AUTH_TOKEN in your environment/.env first)
docker-compose up -dAvailable tags:
latest- Latest stable releasev1.18.4- Specific versionmain- Latest development build
Production Deployment
# 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 \
-e MCP_TRANSPORT=http \
-e MCP_HTTP_HOST=0.0.0.0 \
-e MCP_HTTP_AUTH_TOKEN=your-random-secret-token \
-p 8000:8000 \
simplenote-mcp-serverDevelopment with Docker
# Use the development compose file for live code mounting
docker-compose -f docker-compose.dev.yml upDocker Features
Multi-stage build for optimized image size (346MB)
Multi-platform support:
linux/amd64andlinux/arm64Security 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
☸️ Kubernetes Deployment
Using Helm (Recommended)
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"Kubernetes Features
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
Production Configuration
# values.yaml for production
replicaCount: 3
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
resources:
limits:
cpu: 1000m
memory: 512Mi
requests:
cpu: 500m
memory: 256Mi⚙️ Configuration
Environment Variables
Variable | Required | Default | Description |
| Yes | - | Your Simplenote account email |
| Yes | - | Your Simplenote account password |
| No | 120 | Cache synchronization interval in seconds |
| No | 10000 | Max notes held in memory — set ≥ your total note count |
| No | INFO | Logging level (DEBUG, INFO, WARNING, ERROR) |
| No | false | Skip API calls; used for testing without credentials |
| No | stdio |
|
| No | 127.0.0.1 | Bind host when |
| Conditional | - | Bearer token; required if |
| No | - | Comma-separated allowlist for DNS-rebinding protection |
| No | - | Comma-separated Origin allowlist (used with the above) |
| No | false | Enable the separate |
| No | 127.0.0.1 | Bind host for the monitoring endpoint above |
| No | 8080 | Port for the monitoring endpoint above |
| Conditional | - | Bearer token; required if |
Claude Desktop Integration
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",
"CACHE_MAX_SIZE": "10000"
}
}
}
}🔍 Advanced Search
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🛠️ Available Tools
Tool | Description | Parameters |
| Create a new note |
|
| Replace full note content (destructive) |
|
| Soft-delete: move note to Trash |
|
| Untrash a note — move it back from Trash |
|
| Irreversibly destroy a single note (requires |
|
| Permanently delete all trashed notes (dry-run by default) |
|
| Get a note by ID with full content and metadata |
|
| Append or prepend text without overwriting |
|
| Full-text search with filters and pagination |
|
| Add tags to a note |
|
| Remove specific tags from a note |
|
| Replace all tags on a note |
|
| List all tags with note counts |
|
| Rename a tag across all notes atomically |
|
| List version history for a note |
|
| Roll back a note to a previous version |
|
| Atomic find-or-create by title |
|
| Append a timestamped entry to today's note |
|
| Replace one Markdown section without touching others |
|
| Find notes with no tags |
|
| Apply tags to multiple notes in one call |
|
| Export notes to Markdown or JSON |
|
| Detect and merge duplicate notes |
|
| Server version, author, and runtime debug info | (no parameters) |
📊 Performance & Caching
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
🎯 Recent Improvements
✅ January 2025 - Performance & Code Quality
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 historyCreated
TESTING_CLAUDE_DESKTOP.mdfor user testing guideAdded 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
✅ September 2025 - Quality & Reliability Enhancements
✅ Quality & Reliability Enhancements
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
🔧 Developer Experience
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
🧪 Testing & Evaluation
MCP Evaluations ✅
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)
Evaluation Types
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
Automated Testing
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.
Traditional Testing
# Python unit tests
pytest
# Code quality checks
ruff check .
mypy simplenote_mcp🛡️ Security
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
MCP HTTP transport is fail-closed by default:
MCP_TRANSPORT=httprefuses to start on any non-loopbackMCP_HTTP_HOSTunlessMCP_HTTP_AUTH_TOKENis set (a shared bearer secret, checked via constant-time comparison). Loopback binds (127.0.0.1/localhost) work without a token, matching stdio's local-process trust level. SetMCP_HTTP_ALLOWED_HOSTS/MCP_HTTP_ALLOWED_ORIGINS(comma-separated) to enable DNS-rebinding protection for non-loopback binds. This is intended for private networks (behind a VPN/Tailscale/SSH tunnel) — a static shared token has none of OAuth's revocation/audit/expiry properties, so avoid exposing it directly to the public internet even with a token set.
🚨 Troubleshooting
Common Issues
Authentication Problems:
Verify
SIMPLENOTE_EMAILandSIMPLENOTE_PASSWORDare set correctlyCheck 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.shDiagnostic Commands
# 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📚 Development
Quick Setup with mcp-evals
# 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-evalsLocal Development
# 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_mcpDevelopment Environment
The 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
Testing Strategy
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
Running MCP Evaluations
Docker Method (Recommended)
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 allDirect Method (if permissions allow)
npm run eval:smoke
npm run eval:basic
npm run eval:comprehensive
npm run eval:allDocker Development
# 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 --help🤝 Contributing
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🔗 Related Projects
⭐ Support the Project
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!
Available Tools
9 toolsexport_notesBRead-onlyIdempotent
Export one or more notes to Markdown or JSON format
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Export format: 'markdown' (with YAML front matter) or 'json' (default: markdown) | |
| note_ids | Yes | Note IDs to export (comma-separated) | |
| include_metadata | No | Include metadata like dates, tags, and ID (default: true) |
find_untagged_notesARead-onlyIdempotent
List notes that have no tags. Useful for tag housekeeping — find notes that need to be organized.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of notes to return (default: 50) |
get_noteARead-onlyIdempotent
Retrieves the full content of a note by ID from Simplenote. Use search_notes when you don't know the exact note ID.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | The ID of the note to retrieve |
get_note_versionsARead-onlyIdempotent
Retrieve the version history of a note (up to 10 most recent versions).
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | The ID of the note |
get_server_infoARead-onlyIdempotent
Return version, author, and debug information about this MCP server. Use this to confirm which version is running, check whether the cache is initialized, and see runtime settings (log level, sync interval, offline mode). No parameters required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_notesARead-onlyIdempotent
List recent notes, optionally filtered by tag. Use search_notes for full-text or boolean queries. Use list_tags first to discover available tag names.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag name (exact match) | |
| limit | No | Maximum number of notes to return (default: 20, max: 100) | |
| include_deleted | No | Include trashed notes (default: false) |
list_tagsARead-onlyIdempotent
List all tags used across notes with note counts. Use this before creating or searching by tags to discover existing tags and avoid fragmentation.
| Name | Required | Description | Default |
|---|---|---|---|
| sort_by | No | Sort order: 'alpha' (alphabetical, default) or 'count' (by note count descending) |
search_notesARead-onlyIdempotent
Search for notes in Simplenote with advanced capabilities including fuzzy matching, pagination, and sorting support. To find the most recently updated note on a topic, use sort_by='modifydate' with sort_direction='desc' and limit=1. Use list_tags first if you need to discover available tags before filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags to filter by — all must be present (array of strings; a comma-separated string is also accepted). Use 'untagged' to find notes without tags. | |
| fuzzy | No | Enable fuzzy matching to handle typos and approximate matches (default: false) | |
| limit | No | Maximum number of results to return per page (default: 20) | |
| query | Yes | The search query (supports boolean operators AND, OR, NOT; phrase matching with quotes; tag filters like tag:work; date filters like from:2023-01-01 to:2023-12-31 or natural language dates like from:last_week to:yesterday) | |
| offset | No | Number of results to skip for pagination (default: 0) | |
| pinned | No | Filter by pin status: true = only pinned notes, false = only unpinned notes, omit = all notes | |
| sort_by | No | Sort results by field. Default: 'relevance' (by match quality). Use 'modifydate' to get the most recently updated notes first. Use 'createdate' to get the newest-created notes first. | |
| to_date | No | Filter notes modified before this date (ISO format e.g. 2023-12-31, or natural language e.g. today, yesterday) | |
| from_date | No | Filter notes modified after this date (ISO format e.g. 2023-01-01, or natural language e.g. yesterday, last_week, 3_days_ago) | |
| created_after | No | Filter notes created after this date (ISO format e.g. 2023-01-01) | |
| modified_after | No | Filter notes modified after this date (ISO format e.g. 2023-06-01) | |
| sort_direction | No | Sort direction: 'desc' (newest/highest first, default) or 'asc' (oldest/lowest first). |
vault_statusARead-onlyIdempotent
Check the Vault encryption key status: whether a key is available this session, which provider it came from (keyring or SIMPLENOTE_VAULT_KEY_FILE), and how many notes are currently Vault-encrypted. Call this before encrypt_note/decrypt_note or create_note/update_note with encrypt=true if you're unsure whether a key is provisioned. No parameters required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.17.2- Changed
search_notes3 fields changed- changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to filter by (comma-separated list of tags that must all be present). Use 'untagged' to find notes without tags."New value: +"Tags to filter by — all must be present (array of strings; a comma-separated string is also accepted). Use 'untagged' to find notes without tags." - added
Input schema / properties / tags / itemsAdded value: +{ + "type": "string" +} - changed
Input schema / properties / tags / typePrevious value: -"string"New value: +"array"
- Added
vault_status
8 tool updates
v1.0.0- First observed
export_notes - First observed
find_untagged_notes - First observed
get_note - First observed
get_note_versions - First observed
get_server_info - First observed
list_notes - First observed
list_tags - First observed
search_notes
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: export, find untagged, get by ID, get versions, server info, list notes, list tags, search, and vault status. No two tools overlap in functionality.
All tool names follow a consistent snake_case verb_noun pattern (e.g., export_notes, list_tags, get_note). Even 'vault_status' is noun_verb but fits the style. No mixing of conventions.
9 tools is a reasonable count for a note-taking server, though the set lacks core CRUD operations. The number itself is appropriate for the scope, but slightly incomplete.
The tool set is missing essential note operations: create, update, delete, and encrypt/decrypt. References in vault_status imply they exist but aren't provided, leaving significant gaps for typical workflows.
Maintenance
Related MCP Connectors
Your own memory inside ChatGPT and Claude, with the source of every note.
Notes and actions in one app. Let Claude or ChatGPT read and update them.
Search, read, create and edit your Memol notes from Claude. Team note-taking with AI search.
Portable AI memory you own. Keep memories and notes across Claude, ChatGPT, and other AI tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables structured note-taking with markdown support, dynamic tagging system, advanced search capabilities, and markdown export functionality through natural language conversations in Claude Desktop.3GPL 3.0

simplenote-mcpofficial
AlicenseNot gradedqualityBmaintenanceEnables AI tools to read and optionally write Simplenote notes via local database or API, supporting offline use on macOS.661 npm33MIT- FlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to Evernote, enabling you to list notebooks/notes and create new notes directly from conversations.-
- AlicenseAqualityDmaintenanceConnects Claude Desktop to an Obsidian vault, enabling reading, searching, capturing ideas, and managing notes through natural language.2111 npmMIT