loading…
Search for a command to run...
loading…
A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers. It provides intelligent task tracking with semantic
A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers. It provides intelligent task tracking with semantic search capabilities to organize and retrieve development tasks efficiently.
A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers. This MCP server provides intelligent task tracking with semantic search capabilities that enhance AI coding assistants by organizing and retrieving development tasks efficiently.
sqlite-vecsentence-transformers| Component | Technology | Purpose |
|---|---|---|
| Vector DB | sqlite-vec | Vector storage and similarity search |
| Embeddings | sentence-transformers/all-MiniLM-L6-v2 | 384D text embeddings |
| MCP Framework | FastMCP | High-level tools-only server |
| Tag Normalization | Custom (src/normalization.py) | Semantic tag deduplication |
| Dependencies | uv script headers | Self-contained deployment |
| Security | Custom validation | Path/input sanitization |
| Testing | pytest + coverage | Comprehensive test suite |
vector-task-mcp/
├── main.py # Main MCP server entry point
├── README.md # This documentation
├── requirements.txt # Python dependencies
├── pyproject.toml # Modern Python project config
├── .python-version # Python version specification
├── claude-desktop-config.example.json # Claude Desktop config example
│
├── src/ # Core package modules
│ ├── __init__.py # Package initialization
│ ├── models.py # Data models & configuration
│ ├── security.py # Security validation & sanitization
│ ├── task_store.py # SQLite-vec task operations
│ ├── embeddings.py # Embedding model wrapper
│ └── normalization.py # Tag normalization & classification
│
├── tests/ # Test suite
│ ├── test_task_store.py # Task store tests
│ └── test_normalization.py # Normalization tests
│
└── .gitignore # Git exclusions
This project is organized for clarity and ease of use:
main.py - Start here! Main server entry pointsrc/ - Core implementation (security, task storage)claude-desktop-config.example.json - Configuration templateNew here? Start with main.py and claude-desktop-config.example.json
Installing uv (if not already installed):
macOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Verify installation:
uv --version
The easiest way to use this MCP server - no cloning or setup required!
Once published to PyPI, you can use it directly:
# Run without installation (like npx)
uvx vector-task-mcp --working-dir /path/to/your/project
Claude Desktop Configuration (using uvx):
{
"mcpServers": {
"vector-task": {
"command": "uvx",
"args": [
"vector-task-mcp",
"--working-dir",
"/absolute/path/to/your/project"
]
}
}
}
Note: Publishing to PyPI is in progress.
Clone the project:
git clone <repository-url>
cd vector-task-mcp
Install dependencies (automatic with uv): Dependencies are automatically managed via inline metadata in main.py. No manual installation needed.
To verify dependencies:
uv pip list
Test the server:
# Test with sample working directory
uv run main.py --working-dir ./test-tasks
Configure Claude Desktop:
Copy the example configuration:
cp claude-desktop-config.example.json ~/path/to/your/config/
Open Claude Desktop Settings → Developer → Edit Config, and add (replace paths with absolute paths):
{
"mcpServers": {
"vector-task": {
"command": "uv",
"args": [
"run",
"/absolute/path/to/vector-task-mcp/main.py",
"--working-dir",
"/your/project/path"
]
}
}
}
Important:
Restart Claude Desktop and look for the MCP integration icon.
# Install globally (once published to PyPI)
pipx install vector-task-mcp
# Run
vector-task-mcp --working-dir /path/to/your/project
Claude Desktop Configuration (using pipx):
{
"mcpServers": {
"vector-task": {
"command": "vector-task-mcp",
"args": [
"--working-dir",
"/absolute/path/to/your/project"
]
}
}
}
1. task_create - Create New Task
Create a new task:
Title: "Implement user authentication"
Content: "Add JWT-based authentication with refresh tokens"
Priority: high
Tags: ["auth", "backend", "security"]
2. task_create_bulk - Create Multiple Tasks
Create multiple tasks at once for batch operations
3. task_update - Update Task Fields
Update task 123:
- Status: in_progress
- Priority: critical
- Title: "Updated title"
4. task_delete - Delete Task
Delete task with ID 123
5. task_delete_bulk - Delete Multiple Tasks
Delete tasks: [123, 124, 125]
6. task_list - List Tasks with Filters
List tasks:
- Status: pending
- Query: "authentication"
- Limit: 10
7. task_get - Get Specific Task
Get task with ID 123
For ROOT tasks (parent_id IS NULL) when --task-folder is enabled, the response
also includes folder_path (resolved folder location) and folder_files
(recursive file listing).
7a. task_folder_files - List Files in Task Folder
List files in folder for task 123 (or by code "FEAT-12")
Requires --task-folder. Provide exactly one of task_id or code. Subtasks
are rejected. Returns {code, folder_path, files: [{path, relative}, ...]}.
8. task_last - Get Last Created Task
Show me the last task I created
9. task_next - Get Next Task to Work On
What should I work on next?
Returns in_progress task if any, otherwise next pending task.
10. task_start - Start Task
Start working on task 123
Sets status to in_progress and records start time.
11. task_finish - Complete Task
Mark task 123 as completed
Sets status to completed and records finish time.
12. task_stop - Stop Task
Stop working on task 123
Sets status to stopped (can be resumed later).
13. task_resume - Resume Stopped Task
Resume task 123
Sets status back to in_progress.
14. task_comment - Add/Update Comment
Add comment to task 123:
"Updated API endpoint to use v2, all tests passing"
15. task_add_tag - Add Tag
Add tag "urgent" to task 123
16. task_remove_tag - Remove Tag
Remove tag "urgent" from task 123
17. task_get_all_tags - List All Tags
Show all tags used in tasks
18. task_stats - Get Task Statistics
Show task statistics
Returns:
{
"total_tasks": 45,
"by_status": {
"pending": 20,
"in_progress": 3,
"completed": 20,
"stopped": 2
},
"with_subtasks": 5,
"next_task_id": 12
}
19. tag_normalize_preview - Preview Tag Merges
Preview which tags can be merged:
- threshold: 0.90 (strict) or 0.85 (aggressive)
Shows similar tags that can be merged into canonical forms.
20. tag_normalize_apply - Apply Tag Normalization
Apply tag normalization with optional dry_run
Merges variant tags into canonical forms and stores original variants in tag_variants.
21. tag_similarity - Compare Two Tags
Compare similarity between "auth" and "authentication"
Returns cosine similarity score (0.0-1.0).
22. canonical_tag_add - Add Canonical Mapping
Add mapping: "authentication" → "auth"
23. canonical_tag_remove - Remove Mapping
Remove mapping for "authentication"
24. canonical_tag_list - List All Mappings
List all canonical tag mappings
25. get_canonical_tags - List Canonical Tags
List all canonical tags only
26. tag_frequencies - Get Tag Frequencies & IDF Weights
Get tag frequencies with IDF weights
Returns frequency statistics and IDF weights for search ranking:
{
"api": {"count": 10, "frequency": 0.4, "idf_weight": 0.621},
"vendor:stripe": {"count": 1, "frequency": 0.04, "idf_weight": 1.443}
}
27. tag_weights - Get Simplified IDF Weights
Get IDF weights for all tags (for search ranking)
28. tag_classify - Classify Single Tag
Classify tag "vendor:stripe"
Returns boost level (high/medium/low/filter_only) for ranking.
29. tags_classify_batch - Classify Multiple Tags
Classify tags: ["vendor:stripe", "api", "status:pending"]
30. search_explain - Search with Ranking Explanation
Search for "authentication" with ranking explanation
Shows how IDF weights, classification, and variants affect ranking.
| Priority | Use Cases |
|---|---|
critical |
Production bugs, security issues, blockers |
high |
Important features, major improvements |
medium |
Regular features, enhancements (default) |
low |
Nice-to-have, refactoring, documentation |
Available statuses: draft, pending, in_progress, completed, tested, validated, done, stopped, canceled
draft → pending → in_progress → completed → tested → validated → done
↓ ↓ ↓ ↓
stopped/canceled (jump-to-done)
| Status | Description |
|---|---|
draft |
Task draft (not ready for execution) |
pending |
Task not yet started |
in_progress |
Currently being worked on |
completed |
Task finished (basic completion) |
tested |
Task completed and tested |
validated |
Task completed, tested, and validated |
done |
Final / archived; reachable as a jump from completed, tested, or validated |
stopped |
Task paused/blocked (can be resumed) |
canceled |
Task canceled (will not be done) |
# Run with uv (recommended)
uv run main.py --working-dir /path/to/project
# Working directory is where task database will be stored
uv run main.py --working-dir ~/projects/my-project
Available Options:
--working-dir (required): Directory where task database will be stored--task-folder (optional): Root directory for per-task folders (feature opt-in).
When set, every ROOT task gets a folder named by its code (e.g. FEAT-12/)
with an auto-generated task.md template. Subtasks never receive folders.
Status transitions rename/archive the folder automatically:
completed → -on-review, done → Archive/{code} (top-level Archive), revert on in_progress.
Filesystem failures are logged and never block DB operations.
Read APIs: task_get returns folder_path + folder_files for root tasks;
the dedicated task_folder_files(task_id|code) tool returns the listing on demand.
The project://info resource exposes the per-root folder summary.--timezone (optional): IANA timezone for displayed timestamps (default: UTC).
Example: --timezone Europe/Kyivyour-project/
├── memory/
│ └── tasks.db # SQLite database with task vectors
├── src/ # Your project files
└── other-files...
tasks table:
tags (canonical) + tag_variants (original variants)canonical_tags table:
task_vectors table:
# Track feature development
"Implement OAuth2 integration with Google and GitHub providers"
# Track bug fixes
"Fix memory leak in WebSocket connection handler"
# Track learning tasks
"Learn and implement Redis caching for API responses"
# Sprint planning
"Sprint 23: Redesign user dashboard with new analytics"
# Code review tasks
"Review PR #456: Database migration for user preferences"
# Infrastructure tasks
"Set up CI/CD pipeline for automated testing and deployment"
# Epic-level tasks
"User Management System" (parent task)
→ "User registration" (subtask)
→ "Email verification" (subtask)
→ "Password reset" (subtask)
# Milestone tracking
"v2.0 Release Preparation"
# Technical debt
"Refactor legacy authentication module to use new security library"
Tag normalization reduces tag fragmentation by merging semantically similar tags:
| Before | After |
|---|---|
| auth, authentication, auth-api, login | → auth |
| db, database, database-setup | → database |
| api, rest api, API | → api |
| Guard | Rule | Example |
|---|---|---|
| Version | Different versions → NO | php8 ≠ php7 |
| Numeric | Different numbers → NO | api1 ≠ api2 |
| Facet | Different prefixes → NO | type:* ≠ domain:* |
| Prefix | Structured ≠ Plain | type:refactor ≠ refactor |
Tags that are substrings get a small boost if:
Example: "laravel" ⊂ "laravel framework" → boost to 0.95
Tags with colons (prefix:value) are treated as structured facets:
type:refactor ← facet: "type", value: "refactor"
vendor:stripe ← facet: "vendor", value: "stripe"
module:terminal ← facet: "module", value: "terminal"
Rules:
type:refactor ↔ type:refactoring ✅type:* ↔ domain:* ❌type:* ↔ refactor ❌When tags are migrated, original variants are preserved:
{
"tags": ["auth"],
"tag_variants": ["authentication", "auth-api", "login"]
}
Variants provide:
Rare tags boost relevance more than common tags:
idf_weight = 1 / log(1 + frequency)
| Tag | Count | IDF Weight | Effect |
|---|---|---|---|
api |
70% of tasks | 0.38 | Low signal |
vendor:stripe |
3% of tasks | 1.44 | Strong signal |
Tags are classified by boost level:
| Level | Boost | Examples |
|---|---|---|
high |
1.5 | vendor:*, module:*, service:* |
medium |
1.0 | Facet tags (domain:*, type:*), specific tags |
low |
0.5 | General tags (api, backend, test) |
filter_only |
0.1 | status:*, priority:* |
Final search score combines:
The server uses sentence-transformers to convert tasks into 384-dimensional vectors that capture semantic meaning:
| Query | Finds Tasks About |
|---|---|
| "authentication" | Login, JWT, OAuth, user verification |
| "database optimization" | SQL queries, indexing, performance |
| "frontend components" | React, UI elements, styling |
| "API integration" | REST endpoints, webhooks, external services |
Create parent-child relationships:
# Create parent task
task_create(title="User Management", content="Complete user system")
# Returns: task_id = 100
# Create subtasks
task_create(title="User Registration", content="...", parent_id=100)
task_create(title="Email Verification", content="...", parent_id=100)
task_create(title="Password Reset", content="...", parent_id=100)
The task_stats tool provides comprehensive insights:
{
"total_tasks": 247,
"by_status": {
"pending": 120,
"in_progress": 8,
"completed": 80,
"tested": 20,
"validated": 10,
"stopped": 9
},
"pending_count": 120,
"in_progress_count": 8,
"completed_count": 80,
"tested_count": 20,
"validated_count": 10,
"stopped_count": 9,
"with_subtasks": 15,
"next_task_id": 45
}
# Check if uv is installed
uv --version
# Test server manually
uv run main.py --working-dir ./test
# Check Python version
python --version # Should be 3.10+
~/Library/Logs/Claude/Run the server manually to see detailed logs:
uv run main.py --working-dir ./debug-test
Use tags to organize by development phase:
["phase-1", "mvp", "core-features"]["phase-2", "optimization", "performance"]["phase-3", "polish", "ux-improvements"]["frontend", "react", "typescript"]["backend", "python", "fastapi"]["devops", "docker", "kubernetes"]["authentication", "security", "jwt"]["payments", "stripe", "billing"]["analytics", "reporting", "dashboard"]Create sprint backlog tasks with priorities
Track progress with task_start/task_finish
Use task_stats for sprint reports
Create bug tasks with "critical" priority
Add tags: ["bug", "production", "hotfix"]
Use comments for debugging notes
Create parent task for feature
Add subtasks for implementation steps
Track each subtask through lifecycle
Based on testing with various dataset sizes:
| Task Count | Search Time | Storage Size | RAM Usage |
|---|---|---|---|
| 1,000 | <50ms | ~5MB | ~100MB |
| 5,000 | <100ms | ~20MB | ~200MB |
| 10,000 | <200ms | ~40MB | ~300MB |
Tested on MacBook Air M1 with sentence-transformers/all-MiniLM-L6-v2
tests/
├── test_task_store.py # 60 tests - Task store operations
└── test_normalization.py # 45 tests - Tag normalization
Total: 105 tests
Run tests:
uv run pytest tests/ -v
New features are backward compatible:
| Feature | Migration |
|---|---|
tag_variants column |
Auto-added via ALTER TABLE |
canonical_tags table |
Auto-created via CREATE TABLE IF NOT EXISTS |
| IDF reranking | Opt-in via use_idf_rerank=True |
Existing databases work without changes. New columns/tables added automatically on first run.
This is a standalone MCP server designed for personal/team use. For improvements:
This project is released under the MIT License.
Built for developers who want intelligent task management with semantic search capabilities.
Run in your terminal:
claude mcp add vector-task-mcp-server -- npx Security
Low riskAutomated heuristic from public metadata — not a security guarantee.