SqREL/evernote_mcp
If you are the rightful owner of evernote_mcp 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 Evernote MCP Server is a Model Context Protocol server that integrates with Evernote, allowing AI assistants to manage notes and notebooks through a standardized interface.
Evernote MCP Server
A Model Context Protocol (MCP) server that provides seamless integration with Evernote, enabling AI assistants to create, read, update, and manage notes and notebooks through a standardized interface.
Features
- š Create Notes - Create new notes with rich content, tags, and notebook assignment
- š Search Notes - Search through your notes with powerful query capabilities
- š Read Notes - Retrieve specific notes by ID with or without content
- āļø Update Notes - Modify existing notes including title, content, and tags
- š Manage Notebooks - List all notebooks and create new ones
- š·ļø Tag Support - Organize notes with tags for better categorization
- š Secure - Uses environment variables for API key management
- ā Fully Tested - 100% test coverage with comprehensive test suite
Prerequisites
- Node.js 16.x or higher
- npm or yarn package manager
- Evernote API key (obtain from Evernote Developer Portal)
Installation
- Clone the repository:
git clone https://github.com/yourusername/evernote-mcp-server.git
cd evernote-mcp-server
- Install dependencies:
yarn install
# or
npm install
- Set up environment variables:
export EVERNOTE_API_KEY="your-evernote-api-key"
- Build the TypeScript code:
yarn build
Usage
Starting the Server
Run the server using stdio transport:
yarn start
The server will output "Evernote MCP server running on stdio" when ready.
Configuration with Claude Desktop
To use this MCP server with Claude Desktop, add the following to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"evernote": {
"command": "node",
"args": ["/path/to/evernote-mcp-server/dist/index.js"],
"env": {
"EVERNOTE_API_KEY": "your-evernote-api-key"
}
}
}
}
Available Tools
1. create_note
Create a new note in Evernote.
Parameters:
title
(required): Note titlecontent
(required): Note content (supports HTML)notebook
(optional): Notebook GUID where the note should be createdtags
(optional): Array of tag names
Example:
{
"title": "Meeting Notes",
"content": "<p>Important points from today's meeting...</p>",
"notebook": "notebook-guid-123",
"tags": ["meetings", "important"]
}
2. search_notes
Search for notes using Evernote's search syntax.
Parameters:
query
(required): Search query stringnotebook
(optional): Limit search to specific notebooklimit
(optional): Maximum number of results (default: 10)
Example:
{
"query": "project proposal",
"notebook": "Work",
"limit": 20
}
3. get_note
Retrieve a specific note by its ID.
Parameters:
noteId
(required): Note GUIDincludeContent
(optional): Whether to include note content (default: true)
Example:
{
"noteId": "note-guid-456",
"includeContent": true
}
4. update_note
Update an existing note.
Parameters:
noteId
(required): Note GUIDtitle
(optional): New titlecontent
(optional): New contenttags
(optional): New tags (replaces existing tags)
Example:
{
"noteId": "note-guid-456",
"title": "Updated Meeting Notes",
"tags": ["meetings", "completed"]
}
5. list_notebooks
List all notebooks in the user's account.
Parameters: None
Returns: Array of notebooks with id, name, and creation date.
6. create_notebook
Create a new notebook.
Parameters:
name
(required): Notebook name
Example:
{
"name": "Project Ideas"
}
Development
Project Structure
evernote-mcp-server/
āāā src/
ā āāā index.ts # Main server implementation
ā āāā index.test.ts # Main test suite
ā āāā index.apikey.test.ts # API key validation tests
āāā dist/ # Compiled JavaScript output
āāā package.json # Project dependencies and scripts
āāā tsconfig.json # TypeScript configuration
āāā jest.config.js # Jest testing configuration
āāā CLAUDE.md # Claude-specific documentation
āāā README.md # This file
Running Tests
# Run main test suite
yarn test
# Run API key validation tests
yarn test:apikey
# Run all tests
yarn test:all
# Run tests with coverage report
yarn test:coverage
# Run tests in watch mode
yarn test:watch
Building
# Build TypeScript to JavaScript
yarn build
Evernote API Integration
This server uses the Evernote API to interact with notes and notebooks. The content is formatted using ENML (Evernote Markup Language), which is automatically handled by the server.
ENML Content
When creating or updating notes, the server automatically wraps content in proper ENML format:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>Your content here</en-note>
Search Syntax
The search functionality supports Evernote's advanced search syntax:
intitle:keyword
- Search in titlenotebook:"Notebook Name"
- Search within specific notebooktag:tagname
- Search by tagcreated:20230101
- Search by creation date- Combine multiple criteria with spaces (AND) or
any:
prefix (OR)
Error Handling
The server implements comprehensive error handling:
- API Key Errors: Returns clear error when API key is not configured
- Network Errors: Wraps network errors with descriptive messages
- Invalid Tool Errors: Returns error for unknown tool names
- API Errors: Properly forwards Evernote API error messages
All errors follow the MCP error format with appropriate error codes.
Security Considerations
- Store your Evernote API key securely using environment variables
- Never commit API keys to version control
- Use
.env
files for local development (remember to add to.gitignore
) - Rotate API keys regularly
- Monitor API usage through Evernote Developer Portal
Troubleshooting
Common Issues
-
"Evernote API key not configured"
- Ensure
EVERNOTE_API_KEY
environment variable is set - Check that the key is valid and not expired
- Ensure
-
"404 Not Found" errors
- Verify the API endpoint URLs are correct
- Check if you're using the correct sandbox/production environment
-
"Permission denied" errors
- Ensure your API key has necessary permissions
- Check rate limits on your Evernote developer account
-
Connection timeouts
- Check your internet connection
- Verify Evernote API service status
Debug Mode
To enable debug logging, set the DEBUG
environment variable:
DEBUG=* yarn start
Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
Development Guidelines
- Write tests for new features
- Maintain 100% test coverage
- Follow TypeScript best practices
- Update documentation for API changes
- Use conventional commit messages
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Model Context Protocol for the MCP specification
- Evernote API for note management capabilities
- Claude for AI assistance integration
Support
For issues, questions, or contributions:
- Open an issue on GitHub
- Check existing issues before creating new ones
- Provide detailed information for bug reports
- Include examples for feature requests