UNPKG

@tomschell/personal-kg-mcp

Version:

Personal Knowledge Graph MCP server for maintaining a local, private knowledge graph of decisions, progress, insights, and questions during development

431 lines (344 loc) 16.2 kB
# Personal Knowledge Graph MCP A Model Context Protocol (MCP) server for maintaining a local, private knowledge graph of decisions, progress, insights, and questions during development. ## Overview The Personal KG MCP server provides tools to capture, search, and manage knowledge during development work. It focuses on essential functionality to reduce cognitive load while maintaining a comprehensive knowledge base. ## Why Personal Knowledge Graph? ### The Problem As developers, we constantly make decisions, solve problems, and gain insights that get lost in the noise of daily work. Important context disappears when: - Switching between projects or tasks - Returning to code after time away - Onboarding new team members - Debugging issues that resurface months later - Trying to remember "why we did it that way" **But the biggest challenge is agentic development**: AI assistants like Claude and Cursor start each session with zero context about your project history, decisions, and progress. Every conversation becomes a ground-up explanation, wasting time and losing valuable context. ### The Solution A Personal Knowledge Graph captures your development journey as it happens, creating a searchable, connected memory of your work. Think of it as a second brain that: - **Remembers everything** - Decisions, progress, insights, and questions - **Connects the dots** - Links related work across time and projects - **Provides context** - Gives you the full story when you need it - **Scales with you** - Grows more valuable over time **For agentic development, it's your AI assistant's memory**: The Personal KG gives AI tools like Claude and Cursor instant access to your project context, decisions, and progress history. No more starting from scratch every session. **It's effectively a communications layer** between you and your AI assistants, between different development sessions, and between team members. It bridges the gap between human context and AI capabilities. ### Key Benefits #### 🧠 **Reduced Cognitive Load** - Stop trying to remember everything - Focus on current work, not context switching - Quick access to relevant background information #### 🔄 **Seamless Context Switching** - Resume any project with full context - Understand the "why" behind past decisions - Pick up where you left off, even months later - **AI assistants start with full project context** - No more explaining your codebase from scratch #### 📈 **Accelerated Learning** - Build on past insights and avoid repeating mistakes - Track your problem-solving patterns - Identify recurring challenges and solutions #### 🤝 **Better Collaboration** - Share context with team members - Document decisions for future reference - Maintain institutional knowledge - **AI-human collaboration** - Your AI assistant understands your project as well as you do - **Communications bridge** - Seamless information flow between human context and AI capabilities #### 🎯 **Improved Decision Making** - Reference similar past situations - Understand the full impact of decisions - Track the evolution of your thinking ### Real-World Scenarios **Scenario 1: AI Assistant Session Continuity** > "I'm starting a new session with Claude to work on the authentication system. How do I avoid explaining the entire project history again?" **With Personal KG**: `kg_session_warmup({ project: "auth-system" })` gives your AI assistant instant context about recent decisions, blockers, and progress - no more ground-up explanations. **Scenario 2: Returning to a Project** > "I need to work on the authentication system again, but it's been 3 months. What was I thinking about the OAuth flow?" **With Personal KG**: `kg_session_warmup({ project: "auth-system" })` gives you recent decisions, blockers, and context in seconds. **Scenario 3: Debugging a Recurring Issue** > "This database connection error feels familiar. Have I seen this before?" **With Personal KG**: `kg_semantic_search("database connection timeout")` finds related debugging sessions and solutions. **Scenario 4: Onboarding a New Developer** > "I need to explain our architecture decisions to the new team member." **With Personal KG**: `kg_query_context("architecture decisions")` provides a comprehensive overview of key decisions and reasoning. **Scenario 5: Planning a Refactor** > "I want to refactor this module, but I need to understand what depends on it." **With Personal KG**: `kg_get_project_state("module-refactor")` shows related work, dependencies, and potential impacts. ### How It Fits Your Workflow The Personal KG integrates seamlessly with your existing development tools: #### **🔄 Daily Development Cycle** 1. **Start work**`kg_session_warmup()` gets you and your AI assistant up to speed 2. **During coding**`kg_capture()` records decisions and progress 3. **Link related work**`kg_create_edge()` connects related concepts 4. **End session**`kg_capture_session()` summarizes and plans next steps #### **🛠️ Tool Integration** - **MCP Protocol** - Works with Claude, Cursor, and other AI assistants - **GitHub Integration** - Automatically captures issue and PR context - **Local Storage** - Your data stays private and under your control - **Search & Discovery** - Find relevant information when you need it - **Session Continuity** - AI assistants maintain context across sessions - **Communications Layer** - Bridges human context and AI capabilities seamlessly #### **📊 Knowledge Growth** Your Personal KG becomes more valuable over time: - **Week 1**: Basic decision tracking - **Month 1**: Pattern recognition and context building - **Month 6**: Comprehensive project history and insights - **Year 1**: Institutional knowledge and learning acceleration ## Quick Start ### Installation 1. **Configure MCP Server** in `.cursor/mcp.json`: ```json { "mcpServers": { "personal-kg-cursor": { "command": "node", "args": ["packages/personal-kg-mcp/dist/server.cjs"], "cwd": "packages/personal-kg-mcp", "env": { "PKG_STORAGE_DIR": ".kg", "PKG_GITHUB_INTEGRATION_ENABLED": "true", "PKG_MCP_CAPTURE_ENABLED": "true" } } } } ``` 2. **Set up GitHub Integration** (optional): - Create a GitHub Personal Access Token - Add to `.env` file: `PKG_GITHUB_TOKEN=github_pat_your_token_here` - Or set as environment variable 3. **Build the server**: ```bash cd packages/personal-kg-mcp npm install npm run build ``` ### Basic Usage Start with these 8 essential tools: | Purpose | Tool | |---------|------| | Health check | `kg_health` | | Session warmup | `kg_session_warmup` | | Capture decisions/progress | `kg_capture` | | Session summaries | `kg_capture_session` | | Search | `kg_semantic_search` | | Project overview | `kg_get_project_state` | | Recent activity | `kg_list_recent` | | Link nodes | `kg_create_edge` | ## Configuration The Personal KG MCP server is configured through environment variables set in `.cursor/mcp.json`. ### Storage Configuration **`PKG_STORAGE_DIR`** - **Description**: Directory path for Personal KG storage - **Default**: `.kg` - **Example**: `"PKG_STORAGE_DIR": "data/knowledge/personal"` ### GitHub Integration **`PKG_GITHUB_INTEGRATION_ENABLED`** - **Description**: Enable/disable GitHub integration in session warmup - **Default**: `false` (disabled by default for security) - **Values**: `"true"` or `"false"` - **Note**: Requires `PKG_GITHUB_TOKEN` to be set to actually enable **`PKG_GITHUB_TOKEN`** - **Description**: GitHub Personal Access Token for Personal KG integration - **Default**: Not set - **Security**: Store in `.env` file, not in version control ### MCP Capture Configuration **`PKG_MCP_CAPTURE_ENABLED`** - **Description**: Enable/disable automatic capture of MCP tool calls - **Default**: `true` **`PKG_MCP_CAPTURE_TOOLS`** - **Description**: Comma-separated list of MCP tool names to capture - **Default**: `"github"` - **Example**: `"PKG_MCP_CAPTURE_TOOLS": "obsidian,notion,github"` **`PKG_MCP_CAPTURE_EXCLUDE`** - **Description**: Comma-separated list of MCP tool names to exclude - **Default**: `""` (empty) **`PKG_MCP_CAPTURE_AUTO`** - **Description**: Enable automatic capture without explicit calls - **Default**: `"true"` ### Example Configuration ```json { "mcpServers": { "personal-kg-cursor": { "command": "node", "args": ["packages/personal-kg-mcp/dist/server.cjs"], "cwd": "packages/personal-kg-mcp", "env": { "PKG_STORAGE_DIR": ".kg", "PKG_AUTO_BACKUP_MINUTES": "0", "PKG_USE_ANN": "true", "PKG_GITHUB_INTEGRATION_ENABLED": "true", "PKG_MCP_CAPTURE_ENABLED": "true", "PKG_MCP_CAPTURE_TOOLS": "github", "PKG_MCP_CAPTURE_EXCLUDE": "", "PKG_MCP_CAPTURE_AUTO": "true" } } } } ``` ## Usage Guide ### Tag Conventions - Normalised tags: `proj:<name>`, `ws:<workstream>`, `ticket:<id>` - Examples: `proj:kg` `ws:kg-dev` `ticket:78` ### Proactive Behavior 1. Capture key moments with **kg_capture** (decisions, progress, insights, questions). 2. At session boundaries use **kg_capture_session** (include `next_actions[]`). 3. When resuming a topic call **kg_query_context** or **kg_get_project_state**. 4. Link entries to the active session and mark dependencies with **kg_create_edge**. ### Core Tools #### Health | Tool | Purpose | |------|---------| | **kg_health** | Confirm MCP server availability | #### Capture | Tool | Args (required **bold**) | Notes | |------|--------------------------|-------| | **kg_capture** | **content**, type∈idea\|decision\|progress\|insight\|question, tags?, visibility?, includeGit?, importance∈high\|medium\|low, auto_link?, sessionId?, project?, workstream?, ticket? | Primary knowledge creation | | **kg_capture_session** | **summary**, duration?, artifacts?, **next_actions[]**, visibility?, importance? | Session summaries | #### Relationships | Tool | Args | Notes | |------|------|-------| | **kg_create_edge** | **fromNodeId**, **toNodeId**, **relation**∈references\|relates_to\|derived_from\|blocks\|duplicates | Single relationship creation | | **kg_list_edges** | nodeId? | | | **kg_link_session** | **sessionId**, **nodeId** | Link a session to a node (session → node, references) | #### Search & Retrieval | Tool | Args | Notes | |------|------|-------| | **kg_semantic_search** | **query**, limit? | Vector similarity | | **kg_search** | query?, tags?, type?, limit?, format?, includeContent?, includeTags?, includeMetadata?, summaryLength? | Keyword/tag search with optional formatting | | **kg_list_recent** | limit, format?, summaryLength? | Recent activity | | **kg_get_node** | **id** | | | **kg_query_context** | **topic** | Summarise topic-relevant nodes | | **kg_get_project_state** | **project**, includeRecent? | Overview, blockers, recent etc. | | **kg_session_warmup** | **project**, limit? | Session context warmup | | **kg_find_similar** | **nodeId**, limit? | Find similar nodes | #### Maintenance & Data | Tool | Args | Notes | |------|------|-------| | **kg_relationships_maintenance** | rebuildThreshold?, pruneThreshold?, limit? | Rebuild + prune relationships | | **kg_validate** | | Structural check | | **kg_repair** | | Auto-fix minor issues | | **kg_backup** | retentionDays? | Zip export w/ retention policy | | **kg_export / kg_import** | (payload) | Full JSON export / import | | **kg_graph_export** | | Mermaid-compatible graph | ### Relationship Type Guide | Relation | When to use | Example | |----------|-------------|---------| | references | Loose citation / mention | Session note references design doc | | relates_to | General topical overlap | Two progress nodes on same feature | | derived_from | Work or idea builds on another | Refactor derived_from original design decision | | blocks | Hard dependency ordering | Bug fix blocks release task | | duplicates | Identical or redundant content | Duplicate question captured twice | ### Best-Practice Flow 1. **Start / resume** → `kg_health`, then `kg_session_warmup({ project: "kg", limit: 20 })` 2. **Before starting work**`kg_query_context` to get relevant background 3. **During dev**`kg_capture` with `sessionId` + tags 4. **Link related work**`kg_create_edge` (relation="blocks" or "derived_from") 5. **End session** → `kg_capture_session`, then `kg_relationships_maintenance` ### Examples #### Session Warmup ```json { "tool": "kg_session_warmup", "args": { "project": "kg", "limit": 20 } } ``` #### Capture Progress ```json { "tool": "kg_capture", "args": { "content": "Progress: added query tools for Issue 64", "type": "progress", "sessionId": "<sessionId>", "tags": ["proj:kg", "ws:kg-dev", "ticket:64"], "importance": "medium" } } ``` #### Session Summary ```json { "tool": "kg_capture_session", "args": { "summary": "Completed KG tool analysis and documentation updates", "next_actions": ["Implement simplified system prompt", "Update .cursorrules"], "artifacts": ["Issue #215", "Updated documentation"] } } ``` #### Link Related Work ```json { "tool": "kg_create_edge", "args": { "fromNodeId": "<decisionId>", "toNodeId": "<taskId>", "relation": "blocks" } } ``` #### Get Context Before Starting ```json { "tool": "kg_query_context", "args": { "topic": "CI/CD pipeline improvements" } } ``` ## Advanced Tools (Reference Only) These tools are available but rarely needed: - `kg_find_connection_path` - Find relationship path between nodes - `kg_detect_topic_clusters` - Discover clusters/themes - `kg_find_emerging_concepts` - Detect new concepts over time - `kg_query_time_range` - Time-window queries - `kg_delete_node` - Delete nodes with edge cleanup ## Deprecated Tools (Avoid) These tools will be removed in future releases: - `kg_mark_blocks`, `kg_mark_blocked_by`, `kg_mark_derived_from`, `kg_mark_affects` - Use `kg_create_edge` instead - `kg_rebuild_relationships`, `kg_prune_weak_relationships` - Use `kg_relationships_maintenance` instead - `capture_context`, `capture_session` - Use `kg_capture`, `kg_capture_session` instead - `kg_search_minimal` - Use `kg_search` or `kg_semantic_search` instead - `kg_query_context_expanded` - Use `kg_query_context` instead - `kg_reclassify_relationships` - Use `kg_relationships_maintenance` instead ## Development ### Building ```bash cd packages/personal-kg-mcp npm install npm run build ``` ### Testing ```bash npm test npm run test:unit npm test -- config.test.ts --run ``` ### Development Mode ```bash npm run dev ``` ## Changelog ### [2.1.0] - 2025-08-16 - **Configuration System**: Centralized configuration management via environment variables - **GitHub Integration**: Configurable GitHub integration with secure token handling - **MCP Capture**: Configurable automatic capture of MCP tool calls - **Security**: GitHub integration disabled by default, secure token storage recommendations ### [2.0.0] - 2025-08-14 - **Modular Architecture**: Refactored from monolithic 1,625-line server to modular structure - **Core Tools Module**: kg_health, kg_capture, kg_capture_session, kg_link_session - **Search Tools Module**: kg_list_recent, kg_search, kg_semantic_search, kg_find_similar, kg_query_time_range, kg_query_context - **Relationship Tools Module**: 10 relationship management tools - **Maintenance Tools Module**: 5 maintenance tools - **Analysis Tools Module**: 4 analysis tools - **Project Tools Module**: 3 project tools - **Deprecated Tools Module**: 6 deprecated tools - **Comprehensive Documentation**: Detailed architecture guide - **GitHub Repository**: Standalone repository at https://github.com/tomschell/personal-kg-mcp - **CI/CD Pipeline**: GitHub Actions for testing, building, and deployment ### [1.0.0] - 2025-01-01 - Initial Personal KG MCP server implementation - 43 tools for knowledge graph management - File-based storage system - Vector similarity search - Relationship management - Session management - Project state tracking ## License MIT License - see LICENSE file for details.