# Knowledge MCP Server
[](https://www.typescriptlang.org/)
[](#testing)
[](LICENSE)
[](https://modelcontextprotocol.io/)
A production-ready Model Context Protocol (MCP) server that provides centralized knowledge management for AI assistants. Features project-specific documentation, searchable knowledge bases, integrated TODO management, and Git-backed version control for persistent AI memory across sessions.
## π Features
- **π Project Knowledge Management**: Centralized storage for project instructions and documentation
- **π Advanced Search**: Full-text search across all knowledge documents with contextual results
- **π TODO System**: Built-in task management with markdown support and progress tracking
- **π Security-First**: Comprehensive input validation, path sanitization, and abstraction boundaries
- **β‘ High Performance**: Optimized for concurrent operations with sophisticated file locking
- **π Request Tracing**: Unique trace IDs for debugging and monitoring
- **π Git Integration**: Automatic version control with descriptive commit messages
- **π§ͺ Battle-Tested**: 133 comprehensive tests covering all functionality and edge cases
## π¦ Installation
### NPM (Recommended)
```bash
npm install -g @spothlynx/knowledge-mcp
```
### From Source
```bash
git clone https://github.com/sven-borkert/knowledge-mcp.git
cd knowledge-mcp
pnpm install
pnpm run build
npm link
```
## π οΈ Usage
### MCP Client Configuration
Add to your MCP client configuration:
```json
{
"mcpServers": {
"knowledge": {
"command": "knowledge-mcp",
"args": []
}
}
}
```
### Claude Desktop Configuration
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"knowledge": {
"command": "knowledge-mcp"
}
}
}
```
### Direct Execution
```bash
# Start the MCP server
knowledge-mcp
# Development mode with auto-reload
pnpm run dev
```
## π€ AI Assistant Configuration
For comprehensive usage instructions, copy the contents of [`INSTRUCTIONS.md`](INSTRUCTIONS.md) to your global instruction file (e.g., `~/.claude/CLAUDE.md`).
This will enable Claude Code to automatically use the Knowledge MCP for all project knowledge management.
Knowledge is organized as:
```
~/.knowledge-mcp/
βββ index.json # Project name mapping
βββ activity.log # Request logs (gitignored)
βββ projects/
βββ {project-slug}/ # Auto-detected from git/directory
βββ main.md # Project instructions
βββ knowledge/ # Knowledge documents
β βββ api-guide.md
β βββ architecture.md
βββ TODO/ # TODO lists
βββ 1/ # TODO #1
βββ index.md # TODO metadata
βββ tasks/ # Individual task files
```
## β οΈ IMPORTANT CONSTRAINTS
- Project ID auto-detected from git repo or current directory name
- All paths are sanitized - no `../` or absolute paths
- Keywords must be alphanumeric + dots, underscores, hyphens
- Maximum 50 chapters per document
- File extension `.md` required for knowledge files
- Section headers must include `##` prefix (e.g., `"## Configuration"`)
- All changes auto-commit with descriptive messages
- Storage syncs with origin/main if git remote configured
## π ERROR CODES
Common errors and their meanings:
- `PROJECT_NOT_FOUND`: Project doesn't exist yet (use update_project_main to create)
- `DOCUMENT_NOT_FOUND`: Knowledge file not found
- `FILE_ALREADY_EXISTS`: File/chapter already exists (use update instead)
- `CHAPTER_NOT_FOUND`: Chapter title not found in document
- `SECTION_NOT_FOUND`: Section header not found in main.md
- `TODO_NOT_FOUND`: TODO list doesn't exist
- `INVALID_INPUT`: Parameters failed validation
- `FILE_SYSTEM_ERROR`: File operation failed
- `GIT_ERROR`: Git operation failed
Each error includes a `traceId` for debugging.
````
## π¦ Client-Specific Configuration
### Claude Code
```bash
# For global scope (all projects) - ensures latest version is always used
claude mcp add knowledge-mcp npx -- -y @spothlynx/knowledge-mcp@latest
# For current project only
claude mcp add --scope project knowledge-mcp npx -- -y @spothlynx/knowledge-mcp@latest
# For development (using local build)
claude mcp add knowledge-mcp node "$(pwd)/dist/knowledge-mcp/index.js"
````
### Claude Desktop
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"knowledge": {
"command": "npx",
"args": ["-y", "@spothlynx/knowledge-mcp@latest"]
}
}
}
```
### Generic MCP Configuration
For other MCP-compatible clients:
```json
{
"mcpServers": {
"knowledge-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@spothlynx/knowledge-mcp@latest"],
"env": {}
}
}
}
```
## π Version Management
### Why Use `@latest` and `-y` Flags
- **`-y` flag**: Automatically accepts npx installation prompt without user interaction
- **`@latest` tag**: Forces npx to fetch the newest version instead of using cached versions
**Important**: NPX caches packages indefinitely. Without `@latest`, you might run outdated versions.
### Updating to Latest Version
```bash
# Remove and re-add to ensure latest version
claude mcp remove knowledge-mcp
claude mcp add knowledge-mcp npx -- -y @spothlynx/knowledge-mcp@latest
```
### Configuration Precedence
Most MCP clients support multiple configuration levels:
1. **User-level (Global)**: Applies to all projects
2. **Project-level**: Applies to current project only
3. **Configuration files**: Manual configuration files
Higher-level configurations typically override lower-level ones.
## π‘οΈ Environment Configuration
### Environment Variables
- `KNOWLEDGE_MCP_HOME`: Storage directory (default: `~/.knowledge-mcp`)
- `KNOWLEDGE_MCP_LOG_LEVEL`: Log level: `ERROR`, `WARN`, `INFO`, `DEBUG` (default: `INFO`)
### Automatic Project Identification
The Knowledge MCP automatically identifies projects based on:
- **Git repositories**: Uses repository name from git remote URL
- **Non-git directories**: Uses current directory name
Example: `/path/to/my-awesome-project/.git` β project_id = "my-awesome-project"
### Storage Structure
```
~/.knowledge-mcp/
βββ .git/ # Git repository (auto-initialized)
βββ index.json # Project name mapping
βββ activity.log # Request activity log (gitignored)
βββ projects/
βββ my-app/
βββ main.md # Project instructions (centralized, not in repo)
βββ knowledge/
β βββ api-guide.md # Structured knowledge documents
β βββ architecture.md
βββ TODO/ # TODO lists for the project
βββ 1/ # First TODO list
β βββ index.md # TODO metadata
β βββ tasks/ # Individual task files
βββ 2/ # Second TODO list
```
### Git Remote Setup (Recommended)
Enable automatic cloud backup:
```bash
# 1. Create repository on GitHub/GitLab
# 2. Configure remote
cd ~/.knowledge-mcp
git remote add origin https://github.com/yourusername/knowledge-mcp-backup.git
git push -u origin main
# 3. Set up authentication (SSH recommended)
git remote set-url origin git@github.com:yourusername/knowledge-mcp-backup.git
```
**β οΈ Important**: On startup, Knowledge MCP pulls from `origin/main` and overwrites local changes.
## π API Reference
### Core Tools
#### Project Management
- `get_project_main(project_id)` - Retrieve main project instructions
- `update_project_main(project_id, content)` - Update project instructions
- `update_project_section(project_id, section_header, new_content)` - Update specific section
- `add_project_section(project_id, section_header, content, position?, reference_header?)` - Add new section
- `remove_project_section(project_id, section_header)` - Remove section
- `delete_project(project_id)` - Delete entire project
#### Knowledge Documents
- `create_knowledge_file(project_id, filename, title, introduction, keywords, chapters)` - Create structured document
- `get_knowledge_file(project_id, filename)` - Retrieve complete document
- `delete_knowledge_file(project_id, filename)` - Delete document
- `update_chapter(project_id, filename, chapter_title, new_content, new_summary?)` - Update chapter
- `add_chapter(project_id, filename, chapter_title, content, position?, reference_chapter?)` - Add chapter
- `remove_chapter(project_id, filename, chapter_title)` - Remove chapter
#### Chapter Iteration
- `list_chapters(project_id, filename)` - List all chapters (titles and summaries only)
- `get_chapter(project_id, filename, chapter_title | chapter_index)` - Get single chapter content
- `get_next_chapter(project_id, filename, current_chapter_title | current_index)` - Get next chapter
#### Search & Discovery
- `search_knowledge(project_id, query)` - Full-text search across all documents
#### TODO Management
- `list_todos(project_id)` - List all TODO lists
- `create_todo(project_id, description, tasks?)` - Create new TODO list
- `get_todo_tasks(project_id, todo_number)` - Get tasks in TODO list
- `add_todo_task(project_id, todo_number, title, content?)` - Add task
- `complete_todo_task(project_id, todo_number, task_number)` - Mark task complete
- `get_next_todo_task(project_id, todo_number)` - Get next incomplete task
- `remove_todo_task(project_id, todo_number, task_number)` - Remove task
- `delete_todo(project_id, todo_number)` - Delete entire TODO list
#### Server Operations
- `get_server_info()` - Get server version and configuration
- `get_storage_status()` - Get Git repository status
- `sync_storage()` - Force Git commit and sync
### Resources
The server provides read-only resources for browsing:
- `knowledge://projects/{project_id}/main` - Project main instructions
- `knowledge://projects/{project_id}/files` - List of knowledge files
- `knowledge://projects/{project_id}/chapters/{filename}` - Chapter listings
## ποΈ Architecture
### Storage Structure
```
~/.knowledge-mcp/
βββ index.json # Project name to directory mapping
βββ activity.log # Request activity log (gitignored)
βββ projects/
βββ {project-slug}/ # Slugified project directory
βββ main.md # Main project instructions
βββ knowledge/ # Knowledge documents
β βββ *.md # Individual knowledge files
βββ TODO/ # TODO lists
βββ {number}/ # Numbered TODO directories
βββ index.md # TODO metadata
βββ tasks/ # Individual task files
βββ *.md
```
### Security Features
- **Path Validation**: Prevents directory traversal attacks
- **Input Sanitization**: Comprehensive validation with Zod schemas
- **Abstraction Boundaries**: Internal paths never exposed to clients
- **Atomic Operations**: File operations use temp-file + rename pattern
- **Request Tracing**: Unique trace IDs for all operations
### Concurrency & Performance
- **File Locking**: Queue-based locking prevents race conditions
- **Atomic Updates**: All file operations are atomic
- **Efficient Search**: Optimized full-text search with result limiting
- **Memory Management**: Controlled memory usage for large documents
## π§ͺ Testing
The project includes comprehensive test coverage:
```bash
# Run all tests
pnpm run test:all
# Run specific test suite
npx tsx test/suites/01-project-main.test.ts
# Generate HTML test report
pnpm run test:all && open test-results/html/merged-results.html
```
### Test Coverage
- **133 tests** across 11 comprehensive test suites
- **100% success rate** in CI/CD pipeline
- **Edge cases** including concurrency, unicode, and error conditions
- **Security tests** for abstraction boundaries and input validation
- **Performance tests** for high-load scenarios
## π§ Development
### Prerequisites
- Node.js 18+
- pnpm (recommended) or npm
- TypeScript 5.7+
### Development Workflow
```bash
# Install dependencies
pnpm install
# Start development server with auto-reload
pnpm run dev
# Build for production
pnpm run build
# Run type checking
pnpm run type-check
# Run linter
pnpm run lint
# Format code
pnpm run format
# Run all quality checks
pnpm run analyze
```
### Code Quality
The project enforces high code quality standards:
- **TypeScript**: Strict mode with comprehensive type checking
- **ESLint**: Comprehensive linting with TypeScript support
- **Prettier**: Consistent code formatting
- **Static Analysis**: Zero warnings policy
- **Test Coverage**: All functionality thoroughly tested
## π Documentation
- **[Technical Specification](docs/technical-specification.md)** - Complete API reference and architecture
- **[Error Handling Guide](docs/error-handling-guide.md)** - Error codes and debugging
- **[MCP Security Guidelines](docs/mcp-security-guidelines.md)** - Security best practices
- **[Publishing Guidelines](docs/publishing-guidelines.md)** - Release and deployment process
## π Troubleshooting
### Common Issues
1. **"spawn npx ENOENT" or "Connection closed"**
```bash
# Remove and re-add to ensure latest version
claude mcp remove knowledge-mcp
claude mcp add knowledge-mcp npx -- -y @spothlynx/knowledge-mcp@latest
```
2. **Permission errors**
```bash
# Ensure storage directory exists and is writable
mkdir -p ~/.knowledge-mcp
chmod 755 ~/.knowledge-mcp
```
3. **NPX cache issues**
```bash
# Clear NPX cache if using published version
rm -rf ~/.npm/_npx
# Reinstall with @latest
claude mcp remove knowledge-mcp
claude mcp add knowledge-mcp npx -- -y @spothlynx/knowledge-mcp@latest
```
4. **Version conflicts**
```bash
# Check all configuration scopes
claude mcp list
# Remove from all scopes and re-add
claude mcp remove knowledge-mcp -s global
claude mcp remove knowledge-mcp -s project
claude mcp add knowledge-mcp npx -- -y @spothlynx/knowledge-mcp@latest
```
### Debugging with Logs
```bash
# View MCP logs (location varies by client)
# For Claude Code:
ls ~/Library/Caches/claude-cli-nodejs/*/mcp-logs-knowledge-mcp/
# View activity logs with trace IDs
tail -f ~/.knowledge-mcp/activity.log
# Check Git repository status
cd ~/.knowledge-mcp && git status
```
### Error Codes
The Knowledge MCP uses standardized error codes for debugging:
- `PROJECT_NOT_FOUND` - Project doesn't exist yet (call `update_project_main` to create)
- `DOCUMENT_NOT_FOUND` - Knowledge file not found
- `FILE_ALREADY_EXISTS` - File already exists (use update instead of create)
- `SECTION_NOT_FOUND` - Section header not found in document
- `SECTION_ALREADY_EXISTS` - Section header already exists
- `INVALID_INPUT` - Invalid parameters (check Zod validation errors)
- `TODO_NOT_FOUND` - TODO list doesn't exist
- `TODO_TASK_NOT_FOUND` - Task not found in TODO list
- `FILE_SYSTEM_ERROR` - File operation failed
- `GIT_ERROR` - Git operation failed
Each error includes a unique `traceId` for debugging. Search logs using: `grep "traceId" ~/.knowledge-mcp/activity.log`
### Verifying Installation
```bash
# Check if Knowledge MCP is properly configured
claude mcp list | grep knowledge-mcp
# Test basic functionality (if using Claude Code)
# Should return server information
/mcp knowledge get_server_info
# Verify storage directory
ls -la ~/.knowledge-mcp/
```
### Performance Issues
If experiencing slow performance:
1. **Large knowledge base**: Consider splitting large documents
2. **Git repository size**: Archive old projects or use shallow clones
3. **Concurrent operations**: File locking ensures safety but may slow bulk operations
4. **Search performance**: Use specific keywords instead of broad queries
See [Error Handling Guide](docs/error-handling-guide.md) for detailed debugging information.
## π€ Contributing
1. Fork the repository
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Make your changes and add tests
4. Ensure all tests pass: `pnpm run test:all`
5. Run quality checks: `pnpm run analyze`
6. Commit your changes: `git commit -m 'Add amazing feature'`
7. Push to the branch: `git push origin feature/amazing-feature`
8. Open a Pull Request
### Development Standards
- All new features must include comprehensive tests
- Code must pass all static analysis checks
- Documentation must be updated for API changes
- Security considerations must be addressed
## π License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## π Acknowledgments
- **Model Context Protocol** - For the excellent MCP specification
- **TypeScript Community** - For outstanding tooling and ecosystem
- **Contributors** - For making this project better
## π Support
- **Issues**: [GitHub Issues](https://github.com/sven-borkert/knowledge-mcp/issues)
- **Documentation**: [Technical Specification](docs/technical-specification.md)
- **MCP Protocol**: [Official Documentation](https://modelcontextprotocol.io/)
---
**Built with β€οΈ using TypeScript and the Model Context Protocol**