Skip to main content
Glama
sayranovv
by sayranovv
README.md
# ๐Ÿ“ Notes MCP Server

A Model Context Protocol (MCP) server for managing notes in Markdown format. Built with Python and the FastMCP SDK.

## ๐ŸŒŸ Features

- **Create Notes**: Create new Markdown notes with titles, content, and tags
- **List & Filter**: View all notes or filter by specific tags
- **Search**: Full-text search across all notes with context preview
- **Update**: Append content to existing notes with timestamps
- **Delete**: Remove notes when no longer needed
- **Resources**: Access all notes as a single MCP resource
- **AI Prompts**: Built-in prompt for analyzing and summarizing notes

## ๐Ÿ“ฆ Installation

### Prerequisites

- Python 3.10 or higher
- [uv](https://github.com/astral-sh/uv) package manager

### Install uv

```bash
# MacOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# Or via pip
pip install uv
```

### Install Dependencies

```bash
# Using uv (recommended)
uv pip install mcp

# Or using pip
pip install mcp
```

## ๐Ÿš€ Quick Start

### 1. Save the Server

Save `notes_server.py` in your desired directory.

### 2. Run the Server

```bash
# Using uv (recommended)
uv run notes_server.py

# Or using python directly
python notes_server.py
```

### 3. Configure in Claude Desktop

Add to your `claude_desktop_config.json`:

**MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "notes": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/notes-mcp-server",
        "run",
        "notes_server.py"
      ]
    }
  }
}
```

**Alternative with Python:**
```json
{
  "mcpServers": {
    "notes": {
      "command": "python",
      "args": ["/absolute/path/to/notes_server.py"]
    }
  }
}
```

### 4. Restart Claude Desktop

After adding the configuration, restart Claude Desktop to load the MCP server.

## ๐Ÿ› ๏ธ Available Tools

### `create_note`
Create a new note with title, content, and optional tags.

**Parameters:**
- `title` (string): Note title
- `content` (string): Note content in Markdown
- `tags` (string, optional): Comma-separated tags

**Example:**
```
Create a note titled "Project Ideas" with content "1. Build MCP server\n2. Add search" and tags "work, ideas"
```

### `list_notes`
List all notes with their titles and creation dates.

**Parameters:**
- `tag` (string, optional): Filter by specific tag

**Example:**
```
List all notes
List notes with tag "work"
```

### `read_note`
Read the full content of a specific note.

**Parameters:**
- `filename` (string): The filename of the note (e.g., `20241106_120000_project_ideas.md`)

**Example:**
```
Read note "20241106_120000_project_ideas.md"
```

### `search_notes`
Search for notes containing specific text.

**Parameters:**
- `query` (string): Search query

**Example:**
```
Search notes for "Python"
```

### `update_note`
Append content to an existing note with timestamp.

**Parameters:**
- `filename` (string): The filename of the note
- `content` (string): Content to append

**Example:**
```
Update note "20241106_120000_project_ideas.md" with "3. Implement testing"
```

### `delete_note`
Delete a note permanently.

**Parameters:**
- `filename` (string): The filename of the note

**Example:**
```
Delete note "20241106_120000_old_note.md"
```

## ๐Ÿ“š Resources

### `notes://all`
Access all notes as a combined resource. Useful for context-aware operations.

## ๐Ÿ’ก Prompts

### `summarize_notes_prompt`
Generates a prompt for AI to analyze all notes and provide:
1. Summary of main themes
2. Recurring ideas or patterns
3. Important action items
4. Recommendations for organization

## ๐Ÿ“ File Structure

Notes are stored in the `notes/` directory with the following format:

```
notes/
โ”œโ”€โ”€ 20241106_120000_project_ideas.md
โ”œโ”€โ”€ 20241106_130000_shopping_list.md
โ””โ”€โ”€ 20241106_140000_python_notes.md
```

### Note Format

Each note is a Markdown file with metadata:

```markdown
# Project Ideas

**Created:** 2024-11-06 12:00:00
**Tags:** work, ideas

---

1. Build MCP server
2. Add search functionality
3. Implement testing
```

## ๐Ÿงช Testing

A test script is included to verify functionality without connecting to an LLM:

```bash
python test_notes_server.py
```

The test script will:
- Create sample notes
- List and filter notes
- Search for content
- Update and delete notes
- Test all features

## ๐Ÿ”ง Configuration

### Notes Directory

By default, notes are stored in `./notes/`. To change the location, modify the `NOTES_DIR` variable in `notes_server.py`:

```python
NOTES_DIR = os.path.join(os.path.dirname(__file__), "notes")
```

### Filename Generation

Notes are saved with timestamps and sanitized titles:
- Format: `YYYYMMDD_HHMMSS_sanitized_title.md`
- Max title length: 100 characters
- Special characters are removed
- Spaces converted to underscores

## ๐Ÿ“ Usage Examples

### Create a Note
```
"Create a note titled 'Meeting Notes' with content 'Discussed Q4 goals' and tags 'work, meetings'"
```

### Find Related Notes
```
"Search my notes for anything related to 'Python'"
```

### Review Notes by Category
```
"List all notes tagged with 'personal'"
```

### Summarize Notes
```
"Use the summarize_notes_prompt to analyze all my notes"
```

## ๐Ÿค Contributing

Contributions are welcome! Feel free to:
- Report bugs
- Suggest new features
- Submit pull requests

## ๐Ÿ“„ License

This project is open source and available under the MIT License.

## ๐Ÿ”— Resources

- [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
- [FastMCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)
- [Claude Desktop](https://claude.ai/download)

## โš ๏ธ Limitations

- Text-based notes only (no file attachments)
- No note encryption
- Single notes directory (no subdirectories)
- UTF-8 encoding only

## ๐Ÿ’ฌ Support

For issues or questions:
1. Check the test script output for debugging
2. Review the notes directory permissions
3. Ensure Python 3.10+ is installed
4. Verify MCP SDK installation

---

Made with โค๏ธ using [FastMCP](https://github.com/modelcontextprotocol/python-sdk)

TDQS

A3.6/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: create, delete, list, read, search, and update notes. The descriptions reinforce these distinctions, making it easy for an agent to select the correct tool for any note-related operation without confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (e.g., create_note, delete_note, list_notes). This uniformity enhances readability and predictability, allowing agents to easily infer functionality from the naming convention.

Tool Count5/5

With 6 tools, the server is well-scoped for managing notes, covering essential CRUD operations and additional utilities like search. Each tool earns its place without being excessive or insufficient for the domain, aligning with typical small to medium-sized tool sets.

Completeness5/5

The tool set provides complete CRUD coverage (create, read, update, delete) along with listing and search capabilities, ensuring no dead ends for note management. There are no obvious gaps, as all core lifecycle operations for a notes domain are adequately covered.

Maintenance

ActivityInactive
ResponsivenessNo issues