kontexta-mcp 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,72 @@
1
+ -- Initial database schema for Kontexta
2
+
3
+ -- Projects table
4
+ CREATE TABLE IF NOT EXISTS projects (
5
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
6
+ name TEXT NOT NULL UNIQUE,
7
+ slug TEXT NOT NULL UNIQUE,
8
+ description TEXT,
9
+ path TEXT,
10
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
11
+ );
12
+
13
+ -- Files table
14
+ CREATE TABLE IF NOT EXISTS files (
15
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
16
+ path TEXT NOT NULL UNIQUE,
17
+ title TEXT NOT NULL,
18
+ project_id INTEGER,
19
+ storage_type TEXT NOT NULL CHECK(storage_type IN ('local', 'reference', 'backup')),
20
+ source_path TEXT,
21
+ content_hash TEXT,
22
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
23
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
24
+ FOREIGN KEY (project_id) REFERENCES projects(id)
25
+ );
26
+
27
+ -- Tags table
28
+ CREATE TABLE IF NOT EXISTS tags (
29
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
30
+ name TEXT NOT NULL UNIQUE,
31
+ color TEXT
32
+ );
33
+
34
+ -- File-Tag junction table
35
+ CREATE TABLE IF NOT EXISTS file_tags (
36
+ file_id INTEGER NOT NULL,
37
+ tag_id INTEGER NOT NULL,
38
+ PRIMARY KEY (file_id, tag_id),
39
+ FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE,
40
+ FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
41
+ );
42
+
43
+ -- Favorites table
44
+ CREATE TABLE IF NOT EXISTS favorites (
45
+ file_id INTEGER PRIMARY KEY,
46
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
47
+ FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
48
+ );
49
+
50
+ -- Users table
51
+ CREATE TABLE IF NOT EXISTS users (
52
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
53
+ name TEXT NOT NULL,
54
+ email TEXT,
55
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
56
+ );
57
+
58
+ -- Insert default user
59
+ INSERT OR IGNORE INTO users (id, name, email)
60
+ VALUES (1, 'Default User', NULL);
61
+
62
+ -- FTS5 virtual table for full-text search
63
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_index USING fts5(
64
+ title,
65
+ content,
66
+ tokenize='porter unicode61'
67
+ );
68
+
69
+ -- Indexes for performance
70
+ CREATE INDEX IF NOT EXISTS idx_files_project ON files(project_id);
71
+ CREATE INDEX IF NOT EXISTS idx_files_storage_type ON files(storage_type);
72
+ CREATE INDEX IF NOT EXISTS idx_files_path ON files(path);
@@ -0,0 +1,2 @@
1
+ -- Add remote_url to projects for collaboration
2
+ ALTER TABLE projects ADD COLUMN remote_url TEXT;
@@ -0,0 +1,2 @@
1
+ -- Speeds up dedup lookup for clipped URLs (clipUrl looks up files by source_path).
2
+ CREATE INDEX IF NOT EXISTS idx_files_source_path ON files(source_path);
@@ -0,0 +1,44 @@
1
+ -- Journaling & indexing — Phase 1 tables.
2
+ -- See docs/superpowers/specs/2026-05-12-journaling-and-indexing-design.md §4.5
3
+
4
+ CREATE TABLE IF NOT EXISTS journal_meta (
5
+ file_id INTEGER PRIMARY KEY REFERENCES files(id) ON DELETE CASCADE,
6
+ project_id INTEGER NOT NULL REFERENCES projects(id),
7
+ task_slug TEXT NOT NULL,
8
+ status_latest TEXT,
9
+ started_at TEXT NOT NULL,
10
+ last_active_at TEXT NOT NULL,
11
+ touched_files TEXT NOT NULL DEFAULT '[]',
12
+ raw_sources TEXT NOT NULL DEFAULT '[]'
13
+ );
14
+
15
+ CREATE INDEX IF NOT EXISTS idx_journal_project_active
16
+ ON journal_meta(project_id, last_active_at DESC);
17
+ CREATE INDEX IF NOT EXISTS idx_journal_project_status
18
+ ON journal_meta(project_id, status_latest);
19
+ CREATE INDEX IF NOT EXISTS idx_journal_task_slug
20
+ ON journal_meta(project_id, task_slug);
21
+
22
+ CREATE TABLE IF NOT EXISTS journal_touches (
23
+ file_id INTEGER NOT NULL REFERENCES journal_meta(file_id) ON DELETE CASCADE,
24
+ touched_path TEXT NOT NULL,
25
+ PRIMARY KEY (file_id, touched_path)
26
+ );
27
+ CREATE INDEX IF NOT EXISTS idx_journal_touches_path ON journal_touches(touched_path);
28
+
29
+ CREATE TABLE IF NOT EXISTS journal_git_refs (
30
+ file_id INTEGER NOT NULL REFERENCES journal_meta(file_id) ON DELETE CASCADE,
31
+ ref_type TEXT NOT NULL,
32
+ ref_value TEXT NOT NULL,
33
+ PRIMARY KEY (file_id, ref_type, ref_value)
34
+ );
35
+ CREATE INDEX IF NOT EXISTS idx_journal_git_value ON journal_git_refs(ref_type, ref_value);
36
+
37
+ -- Per-project high-water mark for distillation. Single row per project_slug.
38
+ -- Stored in DB (not just on disk) so SQL queries can report status without filesystem walk.
39
+ CREATE TABLE IF NOT EXISTS journal_high_water (
40
+ project_slug TEXT PRIMARY KEY,
41
+ last_event_ts TEXT NOT NULL,
42
+ last_distilled_at TEXT NOT NULL,
43
+ events_processed INTEGER NOT NULL DEFAULT 0
44
+ );
@@ -0,0 +1,7 @@
1
+ -- 005-auth.sql
2
+
3
+ CREATE TABLE IF NOT EXISTS settings (
4
+ key TEXT PRIMARY KEY,
5
+ value TEXT NOT NULL,
6
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
7
+ );
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "kontexta-mcp",
3
+ "version": "2.0.2",
4
+ "description": "The local Brain and Hands for AI coding agents (MCP Server)",
5
+ "keywords": [
6
+ "mcp",
7
+ "mcp-server",
8
+ "model-context-protocol",
9
+ "kontexta",
10
+ "context-engine",
11
+ "knowledge-base",
12
+ "agentic",
13
+ "claude",
14
+ "cursor",
15
+ "rag"
16
+ ],
17
+ "homepage": "https://github.com/safiyu/kontexta#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/safiyu/kontexta/issues"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/safiyu/kontexta.git",
24
+ "directory": "apps/mcp"
25
+ },
26
+ "license": "Apache-2.0",
27
+ "author": "safiyu",
28
+ "private": false,
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "type": "module",
33
+ "main": "dist/index.js",
34
+ "exports": {
35
+ ".": "./dist/index.js",
36
+ "./hands/loader": "./dist/hands/loader.js",
37
+ "./hands/sanitizer": "./dist/hands/sanitizer.js",
38
+ "./hands/types": "./dist/hands/types.js"
39
+ },
40
+ "engines": {
41
+ "node": ">=20"
42
+ },
43
+ "files": [
44
+ "dist",
45
+ "README.md",
46
+ "LICENSE"
47
+ ],
48
+ "bin": {
49
+ "kontexta-mcp": "dist/index.js",
50
+ "kxta": "dist/index.js"
51
+ },
52
+ "scripts": {
53
+ "build": "tsc",
54
+ "build:npm": "tsup",
55
+ "dev": "tsc --watch",
56
+ "start": "node dist/index.js",
57
+ "smoke": "node test-tools.mjs",
58
+ "gen:manifest": "node scripts/generate-manifest.js",
59
+ "test": "node test-tools.mjs",
60
+ "prepublishOnly": "pnpm run build:npm"
61
+ },
62
+ "dependencies": {
63
+ "@modelcontextprotocol/sdk": "^1.12.0",
64
+ "better-sqlite3": "^11.7.0",
65
+ "chokidar": "^4.0.0",
66
+ "kxta-core": "workspace:*",
67
+ "re2": "^1.21.4",
68
+ "simple-git": "^3.27.0",
69
+ "zod": "^3.24.0"
70
+ },
71
+ "devDependencies": {
72
+ "@types/node": "^22.0.0",
73
+ "tsup": "^8.3.0",
74
+ "typescript": "^5.7.0"
75
+ },
76
+ "rulesVersion": "2.0.0"
77
+ }