Skip to main content
Glama

TriliumNext Notes' MCP Server

README.md15 kB
# TriliumNext MCP Server Architecture ## Overview The TriliumNext MCP Server is a Model Context Protocol (MCP) server that provides AI assistants with tools to interact with TriliumNext Notes instances through the External API (ETAPI). The server follows a modular architecture with clear separation of concerns, comprehensive permission management, and robust validation. ## Project Structure ``` triliumnext-mcp/ ├── src/ # Source code │ ├── index.ts # Main server entry point │ ├── modules/ # Business logic modules │ │ ├── toolDefinitions.ts # MCP tool schema definitions │ │ ├── *Manager.ts # Business logic managers │ │ ├── *Handler.ts # MCP request handlers │ │ └── searchQueryBuilder.ts # Search query builder │ ├── types/ # TypeScript type definitions │ └── utils/ # Utility modules │ ├── permissionUtils.ts # Permission management │ ├── validationUtils.ts # Zod schema validation │ ├── verboseUtils.ts # Verbose formatting │ ├── noteFormatter.ts # Output formatting │ ├── contentProcessor.ts # Content processing utilities │ └── noteBuilder.ts # Note creation helper utilities ├── tests/ # Test files (organized by type) │ ├── unit/ # Unit tests │ │ └── utils/ │ │ └── validationUtils/ # Organized validation tests │ ├── integration/ # Integration tests │ └── e2e/ # End-to-end tests ├── docs/ # Documentation │ ├── search-examples/ # Search query examples │ ├── create-notes-examples/ # Note creation examples │ └── *.md # Architecture and user guides ├── build/ # Compiled JavaScript output ├── package.json # Project configuration ├── tsconfig.json # TypeScript configuration ├── CLAUDE.md # Project memory and documentation └── openapi.yaml # TriliumNext ETAPI specification ``` ## Core Architecture Patterns ### 1. Modular Design Pattern The codebase follows a **Manager → Handler → Tool Definition** pattern: ``` Request Flow: MCP Client → Tool Definitions → Handler → Manager → ETAPI ``` **Managers** (`*Manager.ts`): - Core business logic and data processing - Direct interaction with Trilium ETAPI - No MCP-specific concerns **Handlers** (`*Handler.ts`): - MCP request/response processing - Permission validation - Input/output formatting - Error handling for MCP protocol **Tool Definitions** (`toolDefinitions.ts`): - JSON Schema definitions for MCP tools - Permission-based tool availability - Dynamic tool generation ### 2. Permission-Based Architecture Tools are dynamically generated based on environment permissions: ```typescript // Permission environment variable examples PERMISSIONS="READ" // Read-only access PERMISSIONS="WRITE" // Write-only access PERMISSIONS="READ;WRITE" // Full access ``` **Permission Tools Mapping**: - **READ**: `search_notes`, `resolve_note_id`, `get_note`, `manage_attributes` (read-only) - **WRITE**: `create_note`, `update_note`, `delete_note`, `manage_attributes` (write-only) ### 3. Separation of Concerns ``` src/ ├── index.ts # MCP server setup and routing (150 lines) ├── modules/ # Domain-specific modules │ ├── toolDefinitions.ts # Schema definitions │ ├── *Manager.ts # Business logic (no MCP knowledge) │ └── *Handler.ts # MCP protocol handling ├── types/ # Type definitions and interfaces └── utils/ # Reusable utilities ├── permissionUtils.ts # Permission checking ├── validationUtils.ts # Type validation └── *Utils.ts # Helper functions ``` ## Module Responsibilities ### Core Server (`src/index.ts`) **Purpose**: Lightweight MCP server setup and request routing **Key Responsibilities**: - MCP server initialization and configuration - Environment variable management - Request routing to appropriate handlers - Error handling and logging **Size**: ~150 lines (down from 1400+ lines in monolithic version) ### Tool Definitions (`src/modules/toolDefinitions.ts`) **Purpose**: MCP tool schema definitions and permission-based tool generation **Key Functions**: - `createReadTools()`: Generate READ permission tools - `createWriteTools()`: Generate WRITE permission tools - `createReadAttributeTools()`: Generate READ-only attribute tools - `createWriteAttributeTools()`: Generate WRITE-only attribute tools - `generateTools()`: Main tool generation function **Key Features**: - Dynamic tool availability based on permissions - JSON Schema compliance for MCP protocol ### Business Logic Managers (`src/modules/*Manager.ts`) #### Note Manager (`noteManager.ts`) - Note CRUD operations - Revision management and hash validation - Integration with Trilium ETAPI `/notes` endpoint - Template relations support #### Search Manager (`searchManager.ts`) - Unified search query processing - Hierarchy navigation support - FastSearch optimization logic #### Attribute Manager (`attributeManager.ts`) - Full CRUD operations for labels and relations - Batch processing for performance (30-50% improvement) - Template relation support #### Resolve Manager (`resolveManager.ts`) - Title-based note resolution - Fuzzy matching and prioritization - Multiple result handling with user choice workflow ### Request Handlers (`src/modules/*Handler.ts`) #### Attribute Handler (`attributeHandler.ts`) - Operation-specific permission validation - Read operations require READ permission - Write operations require WRITE permission - Error handling and response formatting #### Note Handler (`noteHandler.ts`) - Note operation permissions (READ/WRITE) - Revision control and conflict detection - Parameter validation and error handling #### Search Handler (`searchHandler.ts`) - Search permission validation (READ) - Search criteria processing - Result formatting and debugging #### Resolve Handler (`resolveHandler.ts`) - Note resolution permissions (READ) - User choice workflow for multiple matches - Result prioritization and formatting ### Utility Modules (`src/utils/`) #### Permission Utils (`permissionUtils.ts`) - Permission checking interface and utilities - `PermissionChecker` interface for dependency injection - Environment variable parsing #### Validation Utils (`validationUtils.ts`) - Comprehensive Zod schema validation - Runtime type checking for all MCP parameters - 173 test cases covering all validation scenarios - Organized into 8 focused test files #### Verbose Utils (`verboseUtils.ts`) - Centralized debug information formatting - Response structure standardization - Error message formatting - 11+ repetitive check elimination #### Note Formatter (`noteFormatter.ts`) - Output formatting for note listings - JSON structure standardization - Search result formatting #### Search Query Builder (`searchQueryBuilder.ts`) - Converts JSON parameters to Trilium search DSL - Boolean logic processing (AND/OR) - Parentheses handling and negation operators - Critical fix for OR queries with `~` prefix ### Type Definitions (`src/types/`) **Purpose**: Centralized type definitions and interfaces **Key Files**: - Type definitions for all MCP operations - Interface definitions for managers and handlers - Enum definitions for note types, operators, and permissions ## Data Flow Architecture ### 1. Tool Request Flow ``` 1. MCP Client Request ↓ 2. Tool Definitions (JSON Schema validation) ↓ 3. Handler (Permission validation + MCP processing) ↓ 4. Manager (Business logic + ETAPI calls) ↓ 5. TriliumNext ETAPI ↓ 6. Response formatting ↓ 7. MCP Client Response ``` ### 2. Permission Checking Flow ``` Environment Variables → PermissionChecker → Handler Permission Checks → Tool Availability ``` ### 3. Search Query Flow ``` JSON Parameters → SearchQueryBuilder → Trilium DSL → ETAPI Search → Results → Formatting ``` ## Key Design Decisions ### 1. ES Modules over CommonJS **Choice**: ES modules (`import/export`) throughout codebase **Rationale**: - Modern JavaScript standard - Better tooling support - Static analysis capabilities - Future-proof architecture ### 2. TypeScript for Type Safety **Choice**: Strict TypeScript configuration with comprehensive types **Rationale**: - Compile-time error detection - Better IDE support and autocomplete - Self-documenting code - Refactoring safety ### 3. Zod for Runtime Validation **Choice**: Zod schemas for parameter validation **Rationale**: - Runtime type safety - Clear error messages - Schema-driven validation - Integration with TypeScript types ### 4. Modular Architecture over Monolithic **Choice**: Separated concerns into specialized modules **Rationale**: - Easier testing and maintenance - Better code organization - Reduced cognitive load - Team development scalability ### 5. Permission-Based Tool Generation **Choice**: Dynamic tool availability based on permissions **Rationale**: - Principle of least privilege - Clear security boundaries - Better user experience - Flexible deployment options ## API Integration ### TriliumNext ETAPI Integration **Base URL**: `http://localhost:8080/etapi` (configurable) **Key Endpoints Used**: - `/notes` - Note CRUD operations - `/attributes` - Attribute management - `/search` - Search operations **Authentication**: - Authorization header with API token - Token from `TRILIUM_API_TOKEN` environment variable ### MCP Protocol Integration **SDK**: `@modelcontextprotocol/sdk` v0.6.0 **Protocol Features**: - JSON Schema tool definitions - Structured request/response handling - Error management - Permission-based tool availability ## Configuration and Environment ### Required Environment Variables ```bash TRILIUM_API_TOKEN # Authentication token (required) TRILIUM_API_URL # API endpoint (optional, defaults to http://localhost:8080/etapi) PERMISSIONS # Semicolon-separated permissions (optional, defaults to READ;WRITE) VERBOSE # Debug logging (optional, defaults to false) ``` ### Build Configuration **TypeScript**: Strict compilation with ES modules **Output**: `build/` directory with executable permissions **Testing**: Node.js built-in test runner with TAP output ## Security Considerations ### 1. Permission Model - Granular READ/WRITE permissions - Operation-specific permission checks - Principle of least privilege - No permission escalation ### 2. Input Validation - Zod schema validation for all parameters - Runtime type checking - SQL injection prevention - XSS protection ### 3. API Security - Token-based authentication - HTTPS communication (recommended) - No credential logging - Secure error messages ## Performance Optimizations ### 1. Batch Processing - Parallel attribute creation - Batch operations for multiple items - Efficient memory usage ### 2. FastSearch Integration - Automatic fastSearch detection - Performance-based query optimization - Fallback to full search when needed ### 3. Caching Strategies - Response caching where appropriate - Connection pooling via axios - Efficient data structures ## Testing Strategy ### 1. Unit Testing - **Location**: `tests/unit/` - **Focus**: Individual functions and modules - **Coverage**: 173 test cases for validation utilities - **Organization**: By concern, not source structure - **Tools**: Node.js built-in test runner, Zod schemas ### 2. Integration Testing - **Location**: `tests/integration/` - **Focus**: Multi-module workflows and API integration - **Environment**: Real TriliumNext instances - **Scenarios**: Complete business processes ### 3. End-to-End Testing - **Location**: `tests/e2e/` - **Focus**: Complete system from user perspective - **Scope**: MCP protocol, real user workflows - **Environment**: Production-like setup ## Testing Standards Each test type has specific standards documented in their respective README files: - **Unit Testing**: `tests/unit/README.md` - Isolated function testing - **Integration Testing**: `tests/integration/README.md` - Multi-component workflows - **E2E Testing**: `tests/e2e/README.md` - Complete system validation ## Extensibility ### 1. Adding New Tools 1. Define tool schema in `toolDefinitions.ts` 2. Create handler in appropriate `*Handler.ts` file 3. Implement business logic in `*Manager.ts` 4. Add validation schemas in `validationUtils.ts` 5. Update documentation and tests ### 2. Adding New Permissions 1. Update `permissionUtils.ts` 2. Modify tool generation functions 3. Update handler permission checks 4. Test permission combinations ### 3. Adding New Search Features 1. Extend `searchQueryBuilder.ts` 2. Update validation schemas 3. Add documentation examples 4. Test with actual Trilium instances ## Recent Enhancements ### Test Organization (Completed) - **Reorganized** 449-line monolithic test file into 8 focused files - **Created** organized folder structure in `tests/unit/utils/validationUtils/` - **Maintained** 100% test coverage (173 tests passing) - **Added** comprehensive documentation for each test type ### Validation System (Completed) - **Implemented** comprehensive Zod schema validation - **Added** 25+ test cases for edge cases and error conditions - **Organized** validation tests by concern - **Created** centralized error handling and formatting ### Template Relations (Completed) - **Implemented** one-step template relation creation - **Added** support for all built-in TriliumNext templates - **Optimized** performance with parallel processing - **Created** comprehensive examples and documentation ## Future Enhancements ### Phase 2: Enhanced Features - Webhook support for real-time updates - Advanced search operators - Caching layer for improved performance - Plugin system for extensibility ### Additional Testing - Performance benchmarking - Load testing with concurrent users - Security penetration testing - Cross-platform compatibility testing ## Documentation Resources - **CLAUDE.md**: Project memory and implementation details - **src/README.md**: This architecture documentation - **docs/search-examples/**: Search query examples and patterns - **docs/create-notes-examples/**: Note creation and attribute management examples - **API Reference**: Based on `openapi.yaml` specification - **Testing Standards**: Individual README files in each test directory This architecture provides a solid foundation for scalable, maintainable, and secure TriliumNext MCP server development while maintaining flexibility for future enhancements.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tan-yong-sheng/triliumnext-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server