Metadata-Version: 2.4
Name: iflow-mcp_labeveryday-mcp-obsidian
Version: 0.1.0
Summary: MCP server for Obsidian integration with AI assistants
Author: MCP Obsidian Team
License: MIT
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: mcp>=1.1.0
Requires-Dist: httpx>=0.24.0
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: anyio>=4.0.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: black>=23.0.0; extra == "dev"
Requires-Dist: isort>=5.12.0; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Requires-Dist: flake8>=6.0.0; extra == "dev"

# Obsidian MCP Server Enhanced

![Status: Phase 1 Complete](https://img.shields.io/badge/status-Phase%201%20Complete-brightgreen)

A Model Context Protocol (MCP) server for integrating Amazon Q with Obsidian.

## Project Overview

This MCP server allows Amazon Q to interact with Obsidian vaults without requiring the Obsidian application to be open. It leverages the Obsidian [Local REST API plugin](https://coddingtonbear.github.io/obsidian-local-rest-api/) to provide functionality for note management, search, and knowledge management.

## Current Status

- **Phase 1 (Core Infrastructure)**: Complete
- Basic file operations, search, and note templates are fully implemented
- Built with FastMCP for seamless integration with Amazon Q
- Uses decorator-based approach for prompt registration
- Ready to begin Phase 2: Essential Features

## Features

### Currently Implemented

- **File Operations**: Read, create, update, append to, and delete notes
- **Basic Folder Management**: List files in folders
- **Search**: Basic search functionality for notes
- **Daily Notes**: Create daily notes with predefined sections
- **Meeting Notes**: Create meeting notes with structured templates

### Planned Features

- **Advanced Folder Management**: Create, delete, rename, and move folders
- **Organization & Metadata**: Manage tags, frontmatter, and file organization
- **Advanced Search & Discovery**: Enhanced search by content, tags, and other criteria
- **Knowledge Management**: Extract highlights, compile notes, and more
- **Search and Compile**: Search for notes and compile information into a single note
- **Note Organization**: Organize notes on specific topics with AI assistance

## Getting Started

### Prerequisites

1. **Obsidian**: Install [Obsidian](https://obsidian.md/) and create a vault
2. **Local REST API Plugin**: Install the [Local REST API](https://github.com/coddingtonbear/obsidian-local-rest-api) plugin in Obsidian
3. **Python 3.10+**: Make sure you have Python 3.10 or newer installed

### Installation

1. Clone this repository:
   ```bash
   git clone https://github.com/yourusername/mcp-obsidian-enhanced.git
   cd mcp-obsidian-enhanced
   ```

2. Create a virtual environment:
   ```bash
   python -m venv venv
   source venv/bin/activate  # On Windows: venv\Scripts\activate
   ```

3. Install dependencies:
   ```bash
   pip install -e ".[dev]"
   ```

4. Create a `.env` file with your Obsidian API configuration:
   ```
   OBSIDIAN_API_KEY=your_api_key_from_local_rest_api_plugin
   OBSIDIAN_HOST=127.0.0.1
   OBSIDIAN_PORT=27124
   ```

### Integration with Amazon Q CLI

To integrate this MCP server with Amazon Q CLI, configure the MCP server in your AWS configuration:

1. Create or update the file at `~/.aws/amazonq/mcp.json`:

```json
{
  "mcpServers": {
    "obsidian-mcp-server": {
        "command": "uv",
        "args": ["--directory", "/path/to/mcp-obsidian-enhanced", "run", "run_server.py"],
        "env": {},
        "disabled": false,
        "autoApprove": []
    }
  }
}
```

2. Replace `/path/to/mcp-obsidian-enhanced` with the actual path to your repository.

### Running the Server

Run the server with:

```bash
python run_server.py
```

To test with MCP Inspector:

```bash
npx @modelcontextprotocol/inspector uv --directory ./ "run" "run_server.py"
```

## Available Tools

| Tool Name | Description |
|-----------|-------------|
| `obsidian_read_note` | Get content of a note from your Obsidian vault |
| `obsidian_create_note` | Create a new note in your Obsidian vault |
| `obsidian_update_note` | Update an existing note in your Obsidian vault |
| `obsidian_append_note` | Append content to an existing note |
| `obsidian_delete_note` | Delete a note from your Obsidian vault |
| `obsidian_list_files` | List files and folders in your Obsidian vault |
| `obsidian_get_active_file` | Get the currently active file in Obsidian |
| `obsidian_create_daily_note` | Create a daily note with predefined sections |

### Planned Tools (Phase 2)
| Tool Name | Description |
|-----------|-------------|
| `obsidian_search` | Search for notes in your Obsidian vault |
| `obsidian_summarize_note` | Summarize the content of a note |
| `obsidian_search_and_compile` | Search for notes and compile information |
| `obsidian_organize_notes` | Organize notes on a specific topic |

## Available Prompts

The server provides prompt templates using the decorator-based approach:

### Meeting Notes

```python
@mcp.prompt("meeting-notes")
async def meeting_notes_prompt(
    title: str,
    date: str = "",
    participants: str = "",
    folder: str = "Meetings",
    tags: List[str] = None
) -> Dict[str, Any]:
    """Create a meeting note with the given details."""
    # Implementation...
```

### Create Note

```python
@mcp.prompt("create-note")
async def create_note_prompt(
    title: str,
    content: str,
    folder: str = "",
    tags: List[str] = None
) -> Dict[str, Any]:
    """Create a new note with the given details."""
    # Implementation...
```

### Organize Notes

```python
@mcp.prompt("organize-notes")
async def organize_notes_prompt(
    topic: str,
    folder: str = ""
) -> Dict[str, Any]:
    """Organize notes related to a specific topic."""
    # Implementation...
```

## Configuration Options

| Environment Variable | Description | Default |
|---------------------|-------------|---------|
| `OBSIDIAN_API_KEY` | API key from Local REST API plugin | (Required) |
| `OBSIDIAN_HOST` | Host where Obsidian is running | 127.0.0.1 |
| `OBSIDIAN_PORT` | Port for the API | 27124 |
| `OBSIDIAN_PROTOCOL` | Protocol to use | https |
| `OBSIDIAN_VERIFY_SSL` | Whether to verify SSL certificates | false |
| `OBSIDIAN_TIMEOUT` | Connection timeout in seconds | 10 |
| `LOG_LEVEL` | Logging level (INFO, DEBUG, etc.) | INFO |

## Implementation Roadmap

### Phase 1: Core Infrastructure (Complete)
- ✅ Basic server setup with FastMCP
- ✅ Configuration management
- ✅ Obsidian API client
- ✅ Basic file operations
- ✅ Basic folder management tools

### Phase 2: Essential Features (Planned)
- Advanced search functionality
- Metadata management
- Improved templates
- Note organization capabilities
- Search and compile functionality
- Note summarization

### Phase 3: Advanced Features (Planned)
- Knowledge management tools
- Bulk operations
- Advanced search capabilities

### Phase 4: Optimization & Polish (Planned)
- Performance optimizations
- Enhanced error handling
- Comprehensive logging
- Detailed documentation

## Testing the API Directly

You can test the Obsidian Local REST API endpoints directly using curl:

### List Files in a Folder
```bash
curl -X GET "http://127.0.0.1:27124/vault/FolderName?list=true" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Read a Note
```bash
curl -X GET "http://127.0.0.1:27124/vault/path/to/note.md" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Create/Update a Note
```bash
curl -X PUT "http://127.0.0.1:27124/vault/path/to/note.md" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: text/markdown" \
  -d "# Note Title\n\nNote content here."
```

### Search Notes
```bash
curl -X POST "http://127.0.0.1:27124/search/simple" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "query=search_term"
```

## Contributing

Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines.

## License

This project is licensed under the MIT License - see the LICENSE file for details.
