
#### 2. Create Obsidian Client Module
Create `src/clients/obsidian.ts`:
- HTTP client for obsidian-sync.fetcherpay.com
- Methods: searchNotes, getNote, updateNote, appendToNote, getSyncStatus
- Error handling with proper MCP error codes
- Retry logic for network failures

#### 3. Add MCP Tools (4 tools total)

**Tool 1: obsidian_search_notes**
- Description: "Search across Obsidian vault by content, tags, or title. Use when user references 'my notes', 'in obsidian', or needs personal knowledge retrieval."
- Parameters: query (string), tags (string[] optional), limit (number, default 10), path_filter (string optional)
- Returns: Array of {path, title, excerpt, tags, modified_date}

**Tool 2: obsidian_read_note**
- Description: "Retrieve full content of a specific note by path or title."
- Parameters: path (string), format (enum: "markdown", "json", default "markdown")
- Returns: {path, title, content, tags, links, backlinks, modified_date}

**Tool 3: obsidian_append_to_note**
- Description: "Append content to a daily note or specific note. Use for logging, journaling, or capturing insights from email or other sources."
- Parameters: path (string), content (string), create_if_missing (boolean, default true), header (string optional)
- Returns: {success, path, bytes_written}

**Tool 4: obsidian_sync_status**
- Description: "Check last sync time and status of obsidian-sync.fetcherpay.com service."
- Parameters: none
- Returns: {status, last_sync, vault_size, pending_changes}

#### 4. Update Server Registration
Modify `src/index.ts` or main server file:
- Import Obsidian client
- Register all 4 new tools
- Ensure tool names follow pattern: `obsidian_*` for namespacing
- Add to server capabilities

#### 5. Add Resources (Optional but Recommended)
Add `obsidian://` URI scheme resources:
- `obsidian://note/{path}` - Access specific notes
- `obsidian://search/{query}` - Search results as resource

#### 6. Error Handling Standards
Follow existing hermes-mcp error patterns:
- Use MCP error codes: -32602 (invalid params), -32603 (internal error), -32000 (server error)
- Log errors with context but don't expose internals to client
- Graceful degradation if obsidian-sync service is unavailable

#### 7. Testing Checklist
Create or update tests:
- [ ] Obsidian client unit tests (mock HTTP responses)
- [ ] Tool integration tests
- [ ] Error handling tests (timeout, 404, 500 responses)
- [ ] End-to-end test with actual obsidian-sync service

### Architecture Guidelines
- Keep consistent with existing email tool patterns in hermes-mcp
- Use same HTTP client library as existing code (axios/fetch/node-libcurl)
- Maintain same logging and monitoring approach
- Follow existing TypeScript interfaces and types
- Tool descriptions must be explicit about WHEN to use (for LLM routing)

### Deliverables
1. Updated source files with new Obsidian functionality
2. Updated `.env.example` with new variables
3. Updated README.md with Obsidian tool documentation
4. Test file covering new tools
5. Verification that existing email tools still work

### Verification Command
After implementation, I should be able to run:
```bash
npm run build
npm run test
# Then test with MCP inspector or Claude Code:
# "Search my notes for 'funding strategy'"
# "Read my daily note from today"
# "Append 'Meeting with investor scheduled' to my daily note"