A local-first AI-powered life coach Model Context Protocol (MCP) server that helps you track goals, manage todos, take notes, and provides daily guidance through structured prompts and intelligent tools. Your data stays on your machine - no cloud required.
- Goal Management: Create, update, complete, and track long-term objectives
- Todo Management: Manage daily tasks with due dates and tags
- Note Taking: Capture thoughts, insights, and observations with flexible tagging
- Daily Briefings: Get personalized morning briefings with prioritized tasks
- Day Recaps: Generate comprehensive end-of-day summaries
- Conversation Memory: Remember and reference past conversations
- Smart Search: Find content using keywords or semantic search (with OpenAI integration)
- Priority Intelligence: Automatically prioritizes overdue and due-today items
- Context Awareness: Provides relevant historical context for better decision-making
- Tag-based Filtering: Organize and filter items using flexible tagging system
- Date-based Tracking: Track progress over time with date-aware queries
- Tools: Easy, comprehensive tools for life management
- Resources: Daily tips and motivational content
- Prompts: Structured prompts for reflection and planning
- Complete Data Ownership: Your data stays on your machine, always
- Privacy by Design: No cloud dependencies, tracking, or data uploads
- SQLite Database: Standard format for easy backup, export, and migration
- Offline Operation: Works without internet connection or external services
- Node.js 18+
- npm or yarn
# Clone the repository
git clone https://github.com/Linell/coach.git
cd coach
# Install dependencies
npm install
# Build the project
npm run build
# Run tests to verify installation
npm testAdd the following to your Claude Desktop MCP configuration file:
Development tip: For active development, you can point directly to the TypeScript source:
"command": "npx",
"args": ["ts-node-esm", "/path/to/coach/src/index.ts"]# Run in development mode (with hot reload)
npm run dev
# Run linter
npm run lint
# Run tests with coverage
npm run test:coverageYour data belongs to YOU. Coach MCP Server is built with a local-first philosophy - everything stays on your machine, giving you complete control, privacy, and ownership of your personal data.
The server automatically creates a user-specific configuration file at ~/.config/coach/config.json
Example configuration:
{
"database_path": "~/.local/share/coach/coach.sqlite"
}The server also automatically loads your OpenAI API key from the OPENAI_API_KEY environment variable for enhanced search capabilities.
Customize your setup:
# Use a custom config directory
COACH_CONFIG_DIR=/custom/path npm start
# Point to a specific database location
# Edit ~/.config/coach/config.json:
{
"database_path": "/path/to/your/coach-data.sqlite"
}
# Enable semantic search (optional)
export OPENAI_API_KEY="your-openai-api-key"Your data is all stored in a single SQLite file that you completely control.
π Privacy by Design
- No cloud dependencies or data uploads
- No third-party analytics or tracking
- Your personal insights stay personal
π Complete Data Control
- Standard SQLite format - use any SQLite browser/tool
- Easy backups: just copy the
.sqlitefile - Export your data anytime, anywhere
- Migrate between systems effortlessly
β‘ Performance & Reliability
- Lightning-fast queries (no network latency)
- Works offline, always available
- No rate limits or service interruptions
View your data directly:
# Quick access via npm script (uses your configured database path)
npm run dbconsole
# Or access directly
sqlite3 ~/.local/share/coach/coach.sqlite
.schema # View table structure
SELECT * FROM goals; # See all goals
SELECT * FROM notes WHERE tags LIKE '%work%'; # Filter by tagsCoach includes intelligent search that works in multiple modes:
- Keyword matching across all your content
- Tag-based filtering for precise results
- No setup required - works immediately
For more powerful semantic search that understands meaning and context:
# Set OpenAI API Key for enhanced search
export OPENAI_API_KEY="your-openai-api-key"
# Optional: Build initial search index
npm run reindex-searchSearch across all your content (notes, todos, goals, workouts) using natural language:
# Use via MCP tools
search-content query="productivity tips for remote work"
search-content query="cardio workouts" content_types=["workout", "exercise"]The system automatically updates search indices when content changes and gracefully falls back to keyword search when OpenAI integration is unavailable.
add-goal- Create a new goal with optional due date and metadatalist-goals- View all goals with completion status and due datesupdate-goal- Modify goal text, due date, or mark as completeddelete-goal- Remove a goal permanently
add-todo- Create a new todo with optional due date and tagslist-todos- View all todos with filtering optionsupdate-todo- Modify todo details or mark as completeddelete-todo- Remove a todo permanently
add-note- Capture thoughts and insights with optional tagslist-notes- Browse notes with tag-based filteringupdate-note- Edit existing notesdelete-note- Remove notes permanently
start-day- Get a personalized morning briefing with prioritiesrecap-day- Generate a comprehensive end-of-day summaryremember-convo- Save important conversation points for future reference
search-content- Semantic search across all content using OpenAI embeddingsupdate-search-index- Rebuild search index with latest embeddings
user-summary- Get insights into your productivity patterns and progress
The server uses SQLite with the following tables:
goals- Long-term objectives with completion trackingtodos- Short-term tasks with due dates and tagsnotes- Free-form notes with tagging supportworkouts- Fitness activity tracking with flexible exercise supportexercises- Detailed exercise tracking linked to workoutssearch_embeddings- Vector embeddings for semantic searchsearch_vectors- Optimized vector storage (sqlite-vec)search_fts- Full-text search index (FTS5)
src/
βββ tools/ # MCP tools (19 tools for life management + search)
βββ resources/ # MCP resources (daily tips, etc.)
βββ prompts/ # MCP prompts (reflection prompts)
βββ db.ts # Database connection and schema
βββ search.ts # Semantic search and embedding utilities
βββ config.ts # Configuration management
βββ types.ts # TypeScript type definitions
βββ index.ts # Server entry point
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverageThe test suite includes:
- Unit tests for all major tools
- Database integration tests
- Configuration validation tests
- SQL Injection Prevention: All database queries use prepared statements
- Input Validation: Zod schemas validate all tool inputs
- User Isolation: Data is stored in user-specific directories
- No Network Access: Operates entirely locally for privacy
Contributions are welcome! Please see the Contributing Guidelines for details.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run the test suite:
npm test - Commit your changes:
git commit -m "Add amazing feature" - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript best practices
- Maintain test coverage above 80%
- Use ESLint configuration provided
- Document new tools and features
- Vibe hardcore
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with the Model Context Protocol SDK
- Uses better-sqlite3 for reliable SQLite operations
- Inspired by untreated ADHD π
- π Bug Reports: Open an issue
- π‘ Feature Requests: Request a feature
- π¬ Questions: Start a discussion
β Star this repository if you find it helpful!
{ "mcpServers": { "coach": { "command": "/path/to/coach/coach-mcp.sh" } } }