traqr-memory-mcp 0.1.4 → 0.1.5

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.
package/README.md CHANGED
@@ -1,68 +1,114 @@
1
- # TraqrDB — Memory-as-a-Service for AI Agents
1
+ # traqr-memory-mcp
2
2
 
3
- A schema + intelligence layer on top of Postgres + pgvector. Store memories, search by meaning, track entity relationships, manage memory lifecycle all via 10 MCP tools.
3
+ MCP server for persistent AI agent memory. 10 tools, Postgres + pgvector, multi-strategy retrieval (semantic + BM25 + RRF). Works with Claude Code, Cursor, Codex, and any MCP client.
4
4
 
5
- ## Quick Start (10 minutes)
5
+ ## Quick Start
6
6
 
7
7
  ### 1. Set Up Your Database
8
8
 
9
- **Option A: Supabase (easiest, free tier)**
9
+ **Supabase (easiest, free tier)**
10
10
  1. Create a project at [supabase.com](https://supabase.com)
11
11
  2. Go to SQL Editor, paste contents of `setup.sql`, run
12
12
  3. Copy your project URL + service role key from Settings > API
13
13
 
14
- **Option B: AWS RDS / Aurora**
15
- 1. Create RDS Postgres 15+ instance
16
- 2. Enable pgvector: `CREATE EXTENSION vector;`
17
- 3. Run setup.sql via psql: `psql $DATABASE_URL -f setup.sql`
14
+ **Postgres (RDS, Aurora, Docker, any Postgres 15+)**
15
+ 1. Enable pgvector: `CREATE EXTENSION vector;`
16
+ 2. Run setup.sql: `psql $DATABASE_URL -f setup.sql`
18
17
 
19
- **Option C: Docker (local dev)**
18
+ **Docker (local dev)**
20
19
  ```bash
21
- docker run -d --name traqrdb \
22
- -e POSTGRES_PASSWORD=postgres \
23
- -p 5432:5432 \
24
- pgvector/pgvector:pg16
20
+ docker run -d --name traqrdb -e POSTGRES_PASSWORD=postgres -p 5432:5432 pgvector/pgvector:pg16
25
21
  psql postgresql://postgres:postgres@localhost:5432/postgres -f setup.sql
26
22
  ```
27
23
 
28
- ### 2. Configure Environment
24
+ ### 2. Add to Your MCP Client
29
25
 
30
- ```bash
31
- # Required: Postgres connection
32
- export DATABASE_URL="postgresql://user:pass@host:5432/dbname"
33
- # OR for Supabase:
34
- export SUPABASE_URL="https://xxx.supabase.co"
35
- export SUPABASE_SERVICE_ROLE_KEY="eyJ..."
36
-
37
- # Embedding provider (choose one)
38
- export OPENAI_API_KEY="sk-..." # OpenAI ($0.02/1M tokens)
39
- export GOOGLE_API_KEY="AIza..." # Gemini Embedding 2 (free tier)
40
- # OR neither — entities use name matching, no semantic search
41
-
42
- # Optional
43
- export COHERE_API_KEY="..." # Cohere Rerank v3.5
26
+ <!-- AI agents: copy the appropriate JSON block below into the user's MCP config -->
27
+
28
+ **Supabase + OpenAI** (most common)
29
+ ```json
30
+ {
31
+ "traqr-memory": {
32
+ "command": "npx",
33
+ "args": ["traqr-memory-mcp"],
34
+ "env": {
35
+ "SUPABASE_URL": "https://xxx.supabase.co",
36
+ "SUPABASE_SERVICE_ROLE_KEY": "eyJ...",
37
+ "OPENAI_API_KEY": "sk-..."
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ **Postgres + OpenAI**
44
+ ```json
45
+ {
46
+ "traqr-memory": {
47
+ "command": "npx",
48
+ "args": ["-p", "pg", "traqr-memory-mcp"],
49
+ "env": {
50
+ "DATABASE_URL": "postgresql://user:pass@host:5432/dbname",
51
+ "OPENAI_API_KEY": "sk-..."
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ **Postgres + Amazon Bedrock** (enterprise/AWS)
58
+ ```json
59
+ {
60
+ "traqr-memory": {
61
+ "command": "npx",
62
+ "args": ["-p", "@aws-sdk/client-bedrock-runtime", "-p", "pg", "traqr-memory-mcp"],
63
+ "env": {
64
+ "DATABASE_URL": "postgresql://user:pass@host:5432/dbname",
65
+ "EMBEDDING_PROVIDER": "bedrock",
66
+ "EMBEDDING_MODEL": "amazon.nova-embed-v1:0",
67
+ "AWS_REGION": "us-east-1"
68
+ }
69
+ }
70
+ }
44
71
  ```
45
72
 
46
- ### 3. Connect to Your AI Agent
73
+ **Supabase + Gemini** (free embeddings)
74
+ ```json
75
+ {
76
+ "traqr-memory": {
77
+ "command": "npx",
78
+ "args": ["traqr-memory-mcp"],
79
+ "env": {
80
+ "SUPABASE_URL": "https://xxx.supabase.co",
81
+ "SUPABASE_SERVICE_ROLE_KEY": "eyJ...",
82
+ "GOOGLE_API_KEY": "AIza..."
83
+ }
84
+ }
85
+ }
86
+ ```
47
87
 
48
- Add to your MCP client config (Claude Code, Cursor, etc.):
88
+ **No embeddings** (BM25 keyword search only)
49
89
  ```json
50
90
  {
51
91
  "traqr-memory": {
52
92
  "command": "npx",
53
93
  "args": ["traqr-memory-mcp"],
54
94
  "env": {
55
- "DATABASE_URL": "postgresql://...",
56
- "OPENAI_API_KEY": "sk-..."
95
+ "SUPABASE_URL": "https://xxx.supabase.co",
96
+ "SUPABASE_SERVICE_ROLE_KEY": "eyJ...",
97
+ "EMBEDDING_PROVIDER": "none"
57
98
  }
58
99
  }
59
100
  }
60
101
  ```
61
102
 
62
- ### 4. Verify
103
+ ### 3. Verify
63
104
 
64
105
  Use `memory_audit` to check health, then `memory_store` to create your first memory.
65
106
 
107
+ On startup you should see:
108
+ ```
109
+ TraqrDB Memory MCP v0.1.3 | Schema v2 | DB: Supabase | Embeddings: openai/text-embedding-3-small | Ready
110
+ ```
111
+
66
112
  ---
67
113
 
68
114
  ## 10 MCP Tools
@@ -70,65 +116,92 @@ Use `memory_audit` to check health, then `memory_store` to create your first mem
70
116
  | Tool | Description |
71
117
  |------|-------------|
72
118
  | `memory_store` | Remember something. Only content required — everything else auto-derived. |
73
- | `memory_search` | Search memories by meaning. Returns summaries. |
74
- | `memory_read` | Expand a memory by ID. Full content + version history. |
119
+ | `memory_search` | Search memories by meaning. Returns summaries (~30 tokens each). |
120
+ | `memory_read` | Expand a memory by ID. Full content + metadata + version history. |
75
121
  | `memory_enhance` | Deepen understanding. Creates connected memories via triage pipeline. |
76
122
  | `memory_browse` | Navigate by facet. Domain > category > summaries. Zero embedding cost. |
77
123
  | `memory_context` | Load task-relevant context — principles, preferences, gotchas. |
78
- | `memory_pulse` | Batch: capture multiple learnings + search + update in one call. |
124
+ | `memory_pulse` | Batch: capture multiple learnings + search in one call. |
79
125
  | `memory_audit` | System health, stats, quality metrics. |
80
126
  | `memory_archive` | Archive stale content that was once correct. |
81
127
  | `memory_forget` | Forget incorrect or harmful content permanently. |
82
128
 
129
+ ## Environment Variables
130
+
131
+ ### Database (required — choose one)
132
+
133
+ | Variable | Description |
134
+ |----------|-------------|
135
+ | `SUPABASE_URL` | Supabase project URL (e.g., `https://xxx.supabase.co`) |
136
+ | `SUPABASE_SERVICE_ROLE_KEY` | Supabase service role key (not anon key) |
137
+ | `DATABASE_URL` | Raw Postgres connection string. Requires `npm install pg`. |
138
+
139
+ ### Embedding Provider (choose one)
140
+
141
+ | Variable | Provider | Notes |
142
+ |----------|----------|-------|
143
+ | `OPENAI_API_KEY` | OpenAI | text-embedding-3-small, 1536 dims. $0.02/1M tokens. |
144
+ | `GOOGLE_API_KEY` | Gemini | gemini-embedding-001, 1536 dims. Free tier available. |
145
+ | `EMBEDDING_PROVIDER=bedrock` | Amazon Bedrock | Requires AWS credentials (IAM role, env vars, or ~/.aws/credentials). |
146
+ | `EMBEDDING_PROVIDER=ollama` | Ollama | Local models. Set `OLLAMA_BASE_URL` if not localhost:11434. |
147
+ | `EMBEDDING_PROVIDER=none` | None | BM25 keyword search only. No API key needed. |
148
+
149
+ ### Provider-Specific
150
+
151
+ | Variable | When | Description |
152
+ |----------|------|-------------|
153
+ | `EMBEDDING_PROVIDER` | Always | Explicit provider selection: `openai`, `gemini`, `bedrock`, `ollama`, `none`. Auto-detects from API keys if not set. |
154
+ | `EMBEDDING_MODEL` | Bedrock/Ollama | Override default model (e.g., `amazon.nova-embed-v1:0`, `nomic-embed-text`) |
155
+ | `EMBEDDING_DIMENSIONS` | Bedrock/Ollama | Override embedding dimensions (default: 1536 for Bedrock, 768 for Ollama) |
156
+ | `OPENAI_BASE_URL` | OpenAI | Custom base URL for corporate proxies or compatible APIs |
157
+ | `OLLAMA_BASE_URL` | Ollama | Ollama server URL (default: `http://localhost:11434`) |
158
+ | `AWS_REGION` | Bedrock | AWS region (default: `us-east-1`) |
159
+
160
+ ### Optional
161
+
162
+ | Variable | Description |
163
+ |----------|-------------|
164
+ | `COHERE_API_KEY` | Cohere Rerank v3.5 (quality boost for search results) |
165
+ | `TRAQR_USER_ID` | Override default user ID (for multi-user setups) |
166
+ | `TRAQR_PROJECT_ID` | Override default project ID |
167
+
83
168
  ## What's Inside
84
169
 
85
170
  **Schema** (created by `setup.sql`):
86
- - `traqr_memories` — content, embeddings, lifecycle, dual tsvectors
87
- - `memory_relationships` — graph edges between memories
171
+ - `traqr_memories` — content, embeddings, lifecycle metadata, dual tsvectors for BM25
172
+ - `memory_relationships` — typed graph edges between memories
88
173
  - `memory_entities` — extracted entities with embeddings
89
174
  - `memory_entity_links` — memory-to-entity junction table
90
175
  - 12+ indexes including partial HNSW, BM25 GIN, lifecycle
91
- - 10+ RPC functions for search, BM25, temporal, graph, confidence decay
176
+ - 10+ SQL functions for search, BM25, temporal, graph, confidence decay
92
177
 
93
178
  **Intelligence** (in the TypeScript package):
94
179
  - Multi-strategy retrieval: semantic + BM25 > RRF fusion > optional Cohere rerank
95
180
  - 3-zone cosine triage: NOOP (>=0.90), ADD (<0.60), borderline (GPT-4o-mini decision)
96
181
  - Type-aware lifecycle: facts invalidate, preferences supersede, patterns coexist
97
- - Entity extraction: multi-signal canonicalization (name > ILIKE > embedding)
98
- - Quality gate: 3-layer ingestion filter prevents noise
182
+ - Entity extraction: multi-signal canonicalization (exact name > ILIKE > embedding similarity)
183
+ - Citation-aware decay: frequently cited memories resist archival
99
184
 
100
185
  ## Graceful Degradation
101
186
 
102
- | Missing | Behavior |
103
- |---------|----------|
104
- | No embedding API key | Entities use name matching. BM25 keyword search works. No vector search. |
105
- | No COHERE_API_KEY | Search uses RRF scores instead of Cohere rerank. |
187
+ | Configuration | Search Behavior | Entity Behavior |
188
+ |---------------|----------------|-----------------|
189
+ | OpenAI/Gemini/Bedrock + Cohere | Full: semantic + BM25 + RRF + Cohere rerank | Full: name + fuzzy + embedding matching |
190
+ | OpenAI/Gemini/Bedrock (no Cohere) | Semantic + BM25 + RRF fusion | Full: name + fuzzy + embedding matching |
191
+ | Ollama (local) | Semantic + BM25 + RRF fusion | Full: name + fuzzy + embedding matching |
192
+ | `EMBEDDING_PROVIDER=none` | BM25 keyword search only | Name + fuzzy matching only (no embedding) |
106
193
 
107
- ## TypeScript Library API
194
+ ## Troubleshooting
108
195
 
109
- ```typescript
110
- import { storeMemory, searchMemories, triageAndStore } from '@traqr/memory'
196
+ If something goes wrong, the MCP server prints structured error messages with fix steps. Common issues:
111
197
 
112
- // Store a memory
113
- await storeMemory({ content: 'Always use bun', sourceType: 'manual' })
198
+ **"schema_version table not found"** — Run `setup.sql` on your database. For Supabase: paste into SQL Editor. For Postgres: `psql $DATABASE_URL -f setup.sql`.
114
199
 
115
- // Search by meaning
116
- const results = await searchMemories('package manager', { limit: 5 })
200
+ **"SUPABASE_SERVICE_ROLE_KEY is missing"** — Find it at Supabase Dashboard > Settings > API > service_role (not the anon key).
117
201
 
118
- // Store with triage (dedup + edges + LLM borderline)
119
- const result = await triageAndStore({ content: '...', sourceType: 'session' })
120
- // result.zone: 'noop' | 'add' | 'borderline'
121
- ```
122
-
123
- ## Environment Variables
202
+ **"Raw Postgres requires the pg package"** Install it: `npm install pg` or add `-p pg` to your npx args.
124
203
 
125
- | Variable | Required | Description |
126
- |----------|----------|-------------|
127
- | `DATABASE_URL` or `SUPABASE_URL` | Yes | Postgres connection |
128
- | `SUPABASE_SERVICE_ROLE_KEY` | Supabase only | Service role key |
129
- | `OPENAI_API_KEY` | Recommended | OpenAI embeddings |
130
- | `GOOGLE_API_KEY` | Alternative | Gemini Embedding 2 (free) |
131
- | `COHERE_API_KEY` | No | Cohere Rerank (quality boost) |
204
+ **Embedding errors** Check your API key is valid. For Bedrock, ensure AWS credentials are configured (IAM role, env vars, or `~/.aws/credentials`).
132
205
 
133
206
  ## License
134
207
 
@@ -0,0 +1,23 @@
1
+ /**
2
+ * MCP Config Templates
3
+ *
4
+ * Builds the JSON config block that goes into the user's MCP client config.
5
+ * Templates match the README exactly — same args, same env vars.
6
+ */
7
+ export type DbProvider = 'supabase' | 'postgres';
8
+ export type EmbeddingProvider = 'openai' | 'gemini' | 'bedrock' | 'ollama' | 'none';
9
+ export interface WizardAnswers {
10
+ db: DbProvider;
11
+ embedding: EmbeddingProvider;
12
+ supabaseUrl?: string;
13
+ supabaseKey?: string;
14
+ databaseUrl?: string;
15
+ openaiKey?: string;
16
+ googleKey?: string;
17
+ awsRegion?: string;
18
+ ollamaUrl?: string;
19
+ ollamaModel?: string;
20
+ }
21
+ export declare function buildMcpConfig(answers: WizardAnswers): Record<string, any>;
22
+ export declare function formatConfig(config: Record<string, any>): string;
23
+ //# sourceMappingURL=config-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-templates.d.ts","sourceRoot":"","sources":["../../src/cli/config-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAA;AAChD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,UAAU,CAAA;IACd,SAAS,EAAE,iBAAiB,CAAA;IAE5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiD1E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * MCP Config Templates
3
+ *
4
+ * Builds the JSON config block that goes into the user's MCP client config.
5
+ * Templates match the README exactly — same args, same env vars.
6
+ */
7
+ export function buildMcpConfig(answers) {
8
+ const args = [];
9
+ // Optional peer deps via npx -p
10
+ if (answers.embedding === 'bedrock')
11
+ args.push('-p', '@aws-sdk/client-bedrock-runtime');
12
+ if (answers.db === 'postgres')
13
+ args.push('-p', 'pg');
14
+ args.push('traqr-memory-mcp');
15
+ // Env vars
16
+ const env = {};
17
+ // DB
18
+ if (answers.db === 'supabase') {
19
+ if (answers.supabaseUrl)
20
+ env.SUPABASE_URL = answers.supabaseUrl;
21
+ if (answers.supabaseKey)
22
+ env.SUPABASE_SERVICE_ROLE_KEY = answers.supabaseKey;
23
+ }
24
+ else {
25
+ if (answers.databaseUrl)
26
+ env.DATABASE_URL = answers.databaseUrl;
27
+ }
28
+ // Embedding
29
+ switch (answers.embedding) {
30
+ case 'openai':
31
+ if (answers.openaiKey)
32
+ env.OPENAI_API_KEY = answers.openaiKey;
33
+ break;
34
+ case 'gemini':
35
+ if (answers.googleKey)
36
+ env.GOOGLE_API_KEY = answers.googleKey;
37
+ break;
38
+ case 'bedrock':
39
+ env.EMBEDDING_PROVIDER = 'bedrock';
40
+ env.EMBEDDING_MODEL = 'amazon.nova-embed-v1:0';
41
+ if (answers.awsRegion)
42
+ env.AWS_REGION = answers.awsRegion;
43
+ break;
44
+ case 'ollama':
45
+ env.EMBEDDING_PROVIDER = 'ollama';
46
+ if (answers.ollamaUrl)
47
+ env.OLLAMA_BASE_URL = answers.ollamaUrl;
48
+ if (answers.ollamaModel)
49
+ env.EMBEDDING_MODEL = answers.ollamaModel;
50
+ break;
51
+ case 'none':
52
+ env.EMBEDDING_PROVIDER = 'none';
53
+ break;
54
+ }
55
+ return {
56
+ 'traqr-memory': {
57
+ command: 'npx',
58
+ args,
59
+ env,
60
+ },
61
+ };
62
+ }
63
+ export function formatConfig(config) {
64
+ return JSON.stringify(config, null, 2);
65
+ }
66
+ //# sourceMappingURL=config-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-templates.js","sourceRoot":"","sources":["../../src/cli/config-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,MAAM,UAAU,cAAc,CAAC,OAAsB;IACnD,MAAM,IAAI,GAAa,EAAE,CAAA;IAEzB,gCAAgC;IAChC,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAA;IACvF,IAAI,OAAO,CAAC,EAAE,KAAK,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACpD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAE7B,WAAW;IACX,MAAM,GAAG,GAA2B,EAAE,CAAA;IAEtC,KAAK;IACL,IAAI,OAAO,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,WAAW;YAAE,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAA;QAC/D,IAAI,OAAO,CAAC,WAAW;YAAE,GAAG,CAAC,yBAAyB,GAAG,OAAO,CAAC,WAAW,CAAA;IAC9E,CAAC;SAAM,CAAC;QACN,IAAI,OAAO,CAAC,WAAW;YAAE,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAA;IACjE,CAAC;IAED,YAAY;IACZ,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,KAAK,QAAQ;YACX,IAAI,OAAO,CAAC,SAAS;gBAAE,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,SAAS,CAAA;YAC7D,MAAK;QACP,KAAK,QAAQ;YACX,IAAI,OAAO,CAAC,SAAS;gBAAE,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,SAAS,CAAA;YAC7D,MAAK;QACP,KAAK,SAAS;YACZ,GAAG,CAAC,kBAAkB,GAAG,SAAS,CAAA;YAClC,GAAG,CAAC,eAAe,GAAG,wBAAwB,CAAA;YAC9C,IAAI,OAAO,CAAC,SAAS;gBAAE,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAA;YACzD,MAAK;QACP,KAAK,QAAQ;YACX,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAA;YACjC,IAAI,OAAO,CAAC,SAAS;gBAAE,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAA;YAC9D,IAAI,OAAO,CAAC,WAAW;gBAAE,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,WAAW,CAAA;YAClE,MAAK;QACP,KAAK,MAAM;YACT,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAA;YAC/B,MAAK;IACT,CAAC;IAED,OAAO;QACL,cAAc,EAAE;YACd,OAAO,EAAE,KAAK;YACd,IAAI;YACJ,GAAG;SACJ;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MCP Client Detection
3
+ *
4
+ * Finds the config file for the user's MCP client so --install
5
+ * can write the traqr-memory server config directly.
6
+ */
7
+ export interface DetectedClient {
8
+ name: string;
9
+ configPath: string;
10
+ configKey: string;
11
+ }
12
+ export declare function detectMcpClients(): DetectedClient[];
13
+ export declare function readClientConfig(client: DetectedClient): Record<string, any>;
14
+ //# sourceMappingURL=detect-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-client.d.ts","sourceRoot":"","sources":["../../src/cli/detect-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAsBD,wBAAgB,gBAAgB,IAAI,cAAc,EAAE,CAInD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAM5E"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * MCP Client Detection
3
+ *
4
+ * Finds the config file for the user's MCP client so --install
5
+ * can write the traqr-memory server config directly.
6
+ */
7
+ import { existsSync, readFileSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ const HOME = process.env.HOME || '';
10
+ const CLIENTS = [
11
+ {
12
+ name: 'Claude Code',
13
+ path: join(HOME, '.claude', 'settings.json'),
14
+ key: 'mcpServers',
15
+ },
16
+ {
17
+ name: 'Claude Desktop',
18
+ path: join(HOME, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json'),
19
+ key: 'mcpServers',
20
+ },
21
+ {
22
+ name: 'Cursor',
23
+ path: join(process.cwd(), '.cursor', 'mcp.json'),
24
+ key: 'mcpServers',
25
+ },
26
+ ];
27
+ export function detectMcpClients() {
28
+ return CLIENTS
29
+ .filter(c => existsSync(c.path))
30
+ .map(c => ({ name: c.name, configPath: c.path, configKey: c.key }));
31
+ }
32
+ export function readClientConfig(client) {
33
+ try {
34
+ return JSON.parse(readFileSync(client.configPath, 'utf-8'));
35
+ }
36
+ catch {
37
+ return {};
38
+ }
39
+ }
40
+ //# sourceMappingURL=detect-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-client.js","sourceRoot":"","sources":["../../src/cli/detect-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAQhC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;AAEnC,MAAM,OAAO,GAAuD;IAClE;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC;QAC5C,GAAG,EAAE,YAAY;KAClB;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC;QAC1F,GAAG,EAAE,YAAY;KAClB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;QAChD,GAAG,EAAE,YAAY;KAClB;CACF,CAAA;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * --install — Interactive Setup Wizard
3
+ *
4
+ * Detects MCP client, asks 2-3 questions, writes config.
5
+ * Uses @clack/prompts for polished interactive UI.
6
+ *
7
+ * Usage: npx traqr-memory-mcp --install
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * --install — Interactive Setup Wizard
3
+ *
4
+ * Detects MCP client, asks 2-3 questions, writes config.
5
+ * Uses @clack/prompts for polished interactive UI.
6
+ *
7
+ * Usage: npx traqr-memory-mcp --install
8
+ */
9
+ import * as p from '@clack/prompts';
10
+ import { writeFileSync } from 'node:fs';
11
+ import { detectMcpClients, readClientConfig } from './detect-client.js';
12
+ import { buildMcpConfig, formatConfig } from './config-templates.js';
13
+ async function run() {
14
+ p.intro('TraqrDB Memory — Setup Wizard');
15
+ // Step 1: Detect MCP clients
16
+ const clients = detectMcpClients();
17
+ let targetClient = null;
18
+ if (clients.length === 1) {
19
+ p.log.info(`Detected ${clients[0].name} at ${clients[0].configPath}`);
20
+ targetClient = clients[0];
21
+ }
22
+ else if (clients.length > 1) {
23
+ const choice = await p.select({
24
+ message: 'Multiple MCP clients detected. Which one?',
25
+ options: [
26
+ ...clients.map(c => ({ label: c.name, value: c.configPath })),
27
+ { label: 'Print config to terminal (manual setup)', value: '__stdout__' },
28
+ ],
29
+ });
30
+ if (p.isCancel(choice)) {
31
+ p.cancel('Setup cancelled.');
32
+ process.exit(0);
33
+ }
34
+ if (choice !== '__stdout__') {
35
+ targetClient = clients.find(c => c.configPath === choice) || null;
36
+ }
37
+ }
38
+ else {
39
+ p.log.warn('No MCP client config detected. Config will be printed to terminal.');
40
+ }
41
+ // Step 2: Database provider
42
+ const db = await p.select({
43
+ message: 'Where is your database?',
44
+ options: [
45
+ { label: 'Supabase', value: 'supabase', hint: 'easiest — free tier at supabase.com' },
46
+ { label: 'Postgres', value: 'postgres', hint: 'RDS, Aurora, Docker, any Postgres 15+ with pgvector' },
47
+ { label: "I don't have one yet", value: 'none', hint: 'we\'ll help you set one up' },
48
+ ],
49
+ });
50
+ if (p.isCancel(db)) {
51
+ p.cancel('Setup cancelled.');
52
+ process.exit(0);
53
+ }
54
+ if (db === 'none') {
55
+ p.log.info('Create a free Supabase project at https://supabase.com');
56
+ p.log.info('Then run this wizard again with your project URL and service role key.');
57
+ p.outro('Come back when your database is ready!');
58
+ process.exit(0);
59
+ }
60
+ // Step 3: Collect DB credentials
61
+ const answers = { db: db, embedding: 'none' };
62
+ if (db === 'supabase') {
63
+ const url = await p.text({
64
+ message: 'Supabase project URL',
65
+ placeholder: 'https://xxx.supabase.co',
66
+ validate: (v) => v && !v.includes('supabase.co') ? 'Should be a Supabase URL (https://xxx.supabase.co)' : undefined,
67
+ });
68
+ if (p.isCancel(url)) {
69
+ p.cancel('Setup cancelled.');
70
+ process.exit(0);
71
+ }
72
+ answers.supabaseUrl = url;
73
+ const key = await p.text({
74
+ message: 'Supabase service role key',
75
+ placeholder: 'eyJ...',
76
+ validate: (v) => v && !v.startsWith('eyJ') ? 'Service role key starts with eyJ (not the anon key)' : undefined,
77
+ });
78
+ if (p.isCancel(key)) {
79
+ p.cancel('Setup cancelled.');
80
+ process.exit(0);
81
+ }
82
+ answers.supabaseKey = key;
83
+ }
84
+ else {
85
+ const url = await p.text({
86
+ message: 'Postgres connection string',
87
+ placeholder: 'postgresql://user:pass@host:5432/dbname',
88
+ validate: (v) => v && !v.startsWith('postgres') ? 'Should start with postgresql:// or postgres://' : undefined,
89
+ });
90
+ if (p.isCancel(url)) {
91
+ p.cancel('Setup cancelled.');
92
+ process.exit(0);
93
+ }
94
+ answers.databaseUrl = url;
95
+ }
96
+ // Step 4: Embedding provider
97
+ const embedding = await p.select({
98
+ message: 'Which embedding provider?',
99
+ options: [
100
+ { label: 'OpenAI', value: 'openai', hint: 'text-embedding-3-small — $0.02/1M tokens' },
101
+ { label: 'Gemini', value: 'gemini', hint: 'gemini-embedding-001 — free tier available' },
102
+ { label: 'Amazon Bedrock', value: 'bedrock', hint: 'Nova Embeddings — uses AWS credentials' },
103
+ { label: 'Ollama', value: 'ollama', hint: 'local models — no API key needed' },
104
+ { label: 'None', value: 'none', hint: 'BM25 keyword search only — no embeddings' },
105
+ ],
106
+ });
107
+ if (p.isCancel(embedding)) {
108
+ p.cancel('Setup cancelled.');
109
+ process.exit(0);
110
+ }
111
+ answers.embedding = embedding;
112
+ // Step 5: Collect embedding credentials
113
+ switch (embedding) {
114
+ case 'openai': {
115
+ const key = await p.text({
116
+ message: 'OpenAI API key',
117
+ placeholder: 'sk-...',
118
+ validate: (v) => v && !v.startsWith('sk-') ? 'OpenAI keys start with sk-' : undefined,
119
+ });
120
+ if (p.isCancel(key)) {
121
+ p.cancel('Setup cancelled.');
122
+ process.exit(0);
123
+ }
124
+ answers.openaiKey = key;
125
+ break;
126
+ }
127
+ case 'gemini': {
128
+ const key = await p.text({
129
+ message: 'Google API key',
130
+ placeholder: 'AIza...',
131
+ });
132
+ if (p.isCancel(key)) {
133
+ p.cancel('Setup cancelled.');
134
+ process.exit(0);
135
+ }
136
+ answers.googleKey = key;
137
+ break;
138
+ }
139
+ case 'bedrock': {
140
+ const region = await p.text({
141
+ message: 'AWS region',
142
+ placeholder: 'us-east-1',
143
+ initialValue: 'us-east-1',
144
+ });
145
+ if (p.isCancel(region)) {
146
+ p.cancel('Setup cancelled.');
147
+ process.exit(0);
148
+ }
149
+ answers.awsRegion = region;
150
+ p.log.info('Bedrock uses your AWS credentials (IAM role, env vars, or ~/.aws/credentials).');
151
+ p.log.info('Make sure the role has bedrock:InvokeModel permission.');
152
+ break;
153
+ }
154
+ case 'ollama': {
155
+ const url = await p.text({
156
+ message: 'Ollama URL',
157
+ placeholder: 'http://localhost:11434',
158
+ initialValue: 'http://localhost:11434',
159
+ });
160
+ if (p.isCancel(url)) {
161
+ p.cancel('Setup cancelled.');
162
+ process.exit(0);
163
+ }
164
+ answers.ollamaUrl = url;
165
+ break;
166
+ }
167
+ // 'none' needs no credentials
168
+ }
169
+ // Step 6: Build config
170
+ const config = buildMcpConfig(answers);
171
+ const configJson = formatConfig(config);
172
+ // Step 7: Write or print config
173
+ if (targetClient) {
174
+ const existingConfig = readClientConfig(targetClient);
175
+ const servers = existingConfig[targetClient.configKey] || {};
176
+ if (servers['traqr-memory']) {
177
+ const overwrite = await p.confirm({
178
+ message: 'traqr-memory already exists in your config. Overwrite?',
179
+ });
180
+ if (p.isCancel(overwrite) || !overwrite) {
181
+ p.log.info('Existing config preserved. Here\'s the new config for reference:');
182
+ console.log('\n' + configJson + '\n');
183
+ p.outro('Add it manually if needed.');
184
+ process.exit(0);
185
+ }
186
+ }
187
+ servers['traqr-memory'] = config['traqr-memory'];
188
+ existingConfig[targetClient.configKey] = servers;
189
+ try {
190
+ writeFileSync(targetClient.configPath, JSON.stringify(existingConfig, null, 2) + '\n');
191
+ p.log.success(`Written to ${targetClient.configPath}`);
192
+ }
193
+ catch (err) {
194
+ p.log.error(`Failed to write config: ${err instanceof Error ? err.message : err}`);
195
+ p.log.info('Add this to your MCP config manually:');
196
+ console.log('\n' + configJson + '\n');
197
+ }
198
+ }
199
+ else {
200
+ p.log.info('Add this to your MCP client config:');
201
+ console.log('\n' + configJson + '\n');
202
+ }
203
+ // Step 8: Next steps
204
+ p.log.step('Next steps:');
205
+ if (db === 'supabase') {
206
+ p.log.info('1. Run setup.sql in your Supabase SQL Editor');
207
+ p.log.info(' Get it: npx traqr-memory-mcp --setup');
208
+ }
209
+ else {
210
+ p.log.info('1. Run: npx traqr-memory-mcp --setup');
211
+ p.log.info(' This will create the schema in your Postgres database');
212
+ }
213
+ p.log.info('2. Restart your MCP client');
214
+ p.log.info('3. Run: npx traqr-memory-mcp --verify');
215
+ p.log.info('4. Optional: npx traqr-memory-mcp --print-instructions');
216
+ p.log.info(' Prints a CLAUDE.md section that teaches Claude how to use memory proactively');
217
+ p.outro('Setup complete! Restart your MCP client to connect.');
218
+ }
219
+ run().catch((err) => {
220
+ console.error('Setup failed:', err instanceof Error ? err.message : err);
221
+ process.exit(1);
222
+ });
223
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * --print-instructions — Print MEMORY_INSTRUCTIONS.md to stdout
3
+ *
4
+ * Users paste this into their CLAUDE.md to teach Claude
5
+ * how to use memory proactively.
6
+ *
7
+ * Usage: npx traqr-memory-mcp --print-instructions
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/cli/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * --print-instructions — Print MEMORY_INSTRUCTIONS.md to stdout
3
+ *
4
+ * Users paste this into their CLAUDE.md to teach Claude
5
+ * how to use memory proactively.
6
+ *
7
+ * Usage: npx traqr-memory-mcp --print-instructions
8
+ */
9
+ import { readFileSync } from 'node:fs';
10
+ import { fileURLToPath } from 'node:url';
11
+ import { dirname, join } from 'node:path';
12
+ const __dirname = dirname(fileURLToPath(import.meta.url));
13
+ try {
14
+ const content = readFileSync(join(__dirname, '..', 'MEMORY_INSTRUCTIONS.md'), 'utf-8');
15
+ console.log(content);
16
+ }
17
+ catch {
18
+ console.error('MEMORY_INSTRUCTIONS.md not found.');
19
+ console.error('If installed via npm, it should be at: node_modules/traqr-memory-mcp/MEMORY_INSTRUCTIONS.md');
20
+ process.exit(1);
21
+ }
22
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/cli/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,CAAA;IACtF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAClD,OAAO,CAAC,KAAK,CAAC,6FAA6F,CAAC,CAAA;IAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * --setup — Run setup.sql on configured database
3
+ *
4
+ * For Postgres: executes setup.sql directly via pg.
5
+ * For Supabase: prints the SQL with instructions to paste into SQL Editor.
6
+ *
7
+ * Usage: npx traqr-memory-mcp --setup
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=setup-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-db.d.ts","sourceRoot":"","sources":["../../src/cli/setup-db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * --setup — Run setup.sql on configured database
3
+ *
4
+ * For Postgres: executes setup.sql directly via pg.
5
+ * For Supabase: prints the SQL with instructions to paste into SQL Editor.
6
+ *
7
+ * Usage: npx traqr-memory-mcp --setup
8
+ */
9
+ import { readFileSync } from 'node:fs';
10
+ import { fileURLToPath } from 'node:url';
11
+ import { dirname, join } from 'node:path';
12
+ import * as p from '@clack/prompts';
13
+ const __dirname = dirname(fileURLToPath(import.meta.url));
14
+ async function run() {
15
+ p.intro('TraqrDB Memory — Database Setup');
16
+ const setupSqlPath = join(__dirname, '..', 'setup.sql');
17
+ let setupSql;
18
+ try {
19
+ setupSql = readFileSync(setupSqlPath, 'utf-8');
20
+ }
21
+ catch {
22
+ p.log.error(`setup.sql not found at ${setupSqlPath}`);
23
+ p.log.info('If installed via npm, it should be at: node_modules/traqr-memory-mcp/setup.sql');
24
+ process.exit(1);
25
+ }
26
+ const databaseUrl = process.env.DATABASE_URL;
27
+ const supabaseUrl = process.env.SUPABASE_URL;
28
+ if (!databaseUrl && !supabaseUrl) {
29
+ p.log.error('No database configured.');
30
+ p.log.info('Set DATABASE_URL or SUPABASE_URL environment variable, then run again.');
31
+ p.log.info('Or run: npx traqr-memory-mcp --install');
32
+ process.exit(1);
33
+ }
34
+ if (databaseUrl) {
35
+ // Postgres: execute directly
36
+ p.log.info(`Connecting to Postgres...`);
37
+ let pg;
38
+ try {
39
+ pg = await Function('return import("pg")')();
40
+ }
41
+ catch {
42
+ p.log.error('The pg package is required for direct Postgres setup.');
43
+ p.log.info('Install it: npm install pg');
44
+ process.exit(1);
45
+ }
46
+ const Pool = pg.default?.Pool || pg.Pool;
47
+ const pool = new Pool({ connectionString: databaseUrl });
48
+ try {
49
+ // Check if schema already exists
50
+ try {
51
+ const result = await pool.query('SELECT version FROM schema_version ORDER BY version DESC LIMIT 1');
52
+ if (result.rows.length > 0) {
53
+ const version = result.rows[0].version;
54
+ p.log.success(`Schema v${version} already exists.`);
55
+ const proceed = await p.confirm({
56
+ message: 'Re-run setup.sql anyway? (safe — uses IF NOT EXISTS)',
57
+ });
58
+ if (p.isCancel(proceed) || !proceed) {
59
+ p.outro('Schema is up to date.');
60
+ await pool.end();
61
+ process.exit(0);
62
+ }
63
+ }
64
+ }
65
+ catch {
66
+ // schema_version doesn't exist — fresh database
67
+ p.log.info('Fresh database detected. Running setup.sql...');
68
+ }
69
+ const s = p.spinner();
70
+ s.start('Running setup.sql...');
71
+ await pool.query(setupSql);
72
+ s.stop('Schema created successfully!');
73
+ // Verify
74
+ const result = await pool.query('SELECT version FROM schema_version ORDER BY version DESC LIMIT 1');
75
+ if (result.rows.length > 0) {
76
+ p.log.success(`Schema v${result.rows[0].version} is ready.`);
77
+ }
78
+ await pool.end();
79
+ }
80
+ catch (err) {
81
+ p.log.error(`Failed to run setup.sql: ${err instanceof Error ? err.message : err}`);
82
+ p.log.info('Check your DATABASE_URL and ensure pgvector is enabled:');
83
+ p.log.info(' CREATE EXTENSION IF NOT EXISTS vector;');
84
+ await pool.end();
85
+ process.exit(1);
86
+ }
87
+ }
88
+ else {
89
+ // Supabase: print instructions
90
+ p.log.info('Supabase detected. Setup.sql must be run via the Supabase SQL Editor.');
91
+ p.log.step('Steps:');
92
+ p.log.info('1. Go to your Supabase project dashboard');
93
+ p.log.info('2. Open SQL Editor (left sidebar)');
94
+ p.log.info('3. Paste the contents of setup.sql');
95
+ p.log.info('4. Click "Run"');
96
+ p.log.info('');
97
+ p.log.info(`setup.sql location: ${setupSqlPath}`);
98
+ p.log.info('');
99
+ const print = await p.confirm({
100
+ message: 'Print setup.sql contents to terminal? (for easy copy-paste)',
101
+ });
102
+ if (!p.isCancel(print) && print) {
103
+ console.log('\n--- BEGIN setup.sql ---\n');
104
+ console.log(setupSql);
105
+ console.log('\n--- END setup.sql ---\n');
106
+ }
107
+ }
108
+ p.outro('Database setup complete! Run: npx traqr-memory-mcp --verify');
109
+ }
110
+ run().catch((err) => {
111
+ console.error('Setup failed:', err instanceof Error ? err.message : err);
112
+ process.exit(1);
113
+ });
114
+ //# sourceMappingURL=setup-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-db.js","sourceRoot":"","sources":["../../src/cli/setup-db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * --verify — Health check + round trip test
3
+ *
4
+ * Verifies the complete setup: DB connection, schema, embeddings, round trip.
5
+ *
6
+ * Usage: npx traqr-memory-mcp --verify
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * --verify — Health check + round trip test
3
+ *
4
+ * Verifies the complete setup: DB connection, schema, embeddings, round trip.
5
+ *
6
+ * Usage: npx traqr-memory-mcp --verify
7
+ */
8
+ import * as p from '@clack/prompts';
9
+ import { configureMemory, getVectorDB, getEmbeddingProvider, storeMemory, searchMemoriesV2 } from '@traqr/memory';
10
+ async function run() {
11
+ p.intro('TraqrDB Memory — Verify Setup');
12
+ // Configure from env
13
+ const supabaseUrl = process.env.SUPABASE_URL;
14
+ const databaseUrl = process.env.DATABASE_URL;
15
+ const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
16
+ if (!supabaseUrl && !databaseUrl) {
17
+ p.log.error('No database configured. Set DATABASE_URL or SUPABASE_URL.');
18
+ p.log.info('Run: npx traqr-memory-mcp --install');
19
+ process.exit(1);
20
+ }
21
+ configureMemory({
22
+ supabaseUrl,
23
+ supabaseKey,
24
+ databaseUrl,
25
+ });
26
+ const checks = { db: false, schema: false, embedding: false, roundTrip: false };
27
+ const dbProvider = supabaseUrl ? 'Supabase' : 'Postgres';
28
+ const ep = getEmbeddingProvider();
29
+ const embeddingInfo = ep.provider === 'none' ? 'None (BM25 only)' : `${ep.provider}/${ep.model}`;
30
+ // Check 1: DB connection
31
+ const s = p.spinner();
32
+ s.start('Checking database connection...');
33
+ try {
34
+ const db = getVectorDB();
35
+ const ok = await db.ping();
36
+ if (!ok)
37
+ throw new Error('ping returned false');
38
+ checks.db = true;
39
+ s.stop(`Database: ${dbProvider} — connected`);
40
+ }
41
+ catch (err) {
42
+ s.stop(`Database: ${dbProvider} — FAILED`);
43
+ p.log.error(err instanceof Error ? err.message : String(err));
44
+ }
45
+ // Check 2: Schema version
46
+ if (checks.db) {
47
+ s.start('Checking schema version...');
48
+ try {
49
+ const db = getVectorDB();
50
+ const version = await db.schemaVersion();
51
+ if (version === null)
52
+ throw new Error('schema_version table not found — run setup.sql first');
53
+ checks.schema = true;
54
+ s.stop(`Schema: v${version}`);
55
+ }
56
+ catch (err) {
57
+ s.stop('Schema: FAILED');
58
+ p.log.error(err instanceof Error ? err.message : String(err));
59
+ p.log.info('Run: npx traqr-memory-mcp --setup');
60
+ }
61
+ }
62
+ // Check 3: Embedding provider
63
+ s.start(`Checking embeddings (${embeddingInfo})...`);
64
+ try {
65
+ if (ep.provider === 'none') {
66
+ checks.embedding = true;
67
+ s.stop(`Embeddings: None (BM25 keyword search only)`);
68
+ }
69
+ else {
70
+ const result = await ep.generate('health check');
71
+ if (!result.embedding?.length)
72
+ throw new Error('Empty embedding returned');
73
+ checks.embedding = true;
74
+ s.stop(`Embeddings: ${embeddingInfo} — ${result.dimensions} dimensions`);
75
+ }
76
+ }
77
+ catch (err) {
78
+ s.stop(`Embeddings: ${embeddingInfo} — FAILED`);
79
+ p.log.error(err instanceof Error ? err.message : String(err));
80
+ }
81
+ // Check 4: Round trip (store → search → delete)
82
+ if (checks.db && checks.schema) {
83
+ s.start('Running round-trip test (store → search → delete)...');
84
+ try {
85
+ const testContent = `TraqrDB verify test — ${Date.now()}`;
86
+ const memory = await storeMemory({
87
+ content: testContent,
88
+ sourceType: 'session',
89
+ sourceProject: 'verify-test',
90
+ confidence: 0.1,
91
+ });
92
+ // Search for it (only if embeddings work)
93
+ if (checks.embedding && ep.provider !== 'none') {
94
+ const results = await searchMemoriesV2(testContent, { limit: 1 });
95
+ if (results.length === 0) {
96
+ p.log.warn('Search returned no results for test memory (may be indexing delay)');
97
+ }
98
+ }
99
+ // Clean up
100
+ const db = getVectorDB();
101
+ await db.delete(memory.id);
102
+ checks.roundTrip = true;
103
+ s.stop('Round trip: store → search → delete — OK');
104
+ }
105
+ catch (err) {
106
+ s.stop('Round trip: FAILED');
107
+ p.log.error(err instanceof Error ? err.message : String(err));
108
+ }
109
+ }
110
+ // Summary
111
+ const allPassed = Object.values(checks).every(Boolean);
112
+ const passCount = Object.values(checks).filter(Boolean).length;
113
+ console.log('');
114
+ p.log.info(`DB: ${dbProvider} | Embeddings: ${embeddingInfo}`);
115
+ console.log('');
116
+ console.log(` ${checks.db ? 'pass' : 'FAIL'} Database connection`);
117
+ console.log(` ${checks.schema ? 'pass' : 'FAIL'} Schema version`);
118
+ console.log(` ${checks.embedding ? 'pass' : 'FAIL'} Embedding provider`);
119
+ console.log(` ${checks.roundTrip ? 'pass' : 'FAIL'} Round trip (store/search/delete)`);
120
+ console.log('');
121
+ if (allPassed) {
122
+ p.outro(`All ${passCount} checks passed! TraqrDB is ready.`);
123
+ }
124
+ else {
125
+ p.outro(`${passCount}/4 checks passed. Fix the failures above and re-run.`);
126
+ process.exit(1);
127
+ }
128
+ }
129
+ run().catch((err) => {
130
+ console.error('Verify failed:', err instanceof Error ? err.message : err);
131
+ process.exit(1);
132
+ });
133
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,12 @@
2
2
  /**
3
3
  * TraqrDB Memory MCP Server
4
4
  *
5
+ * CLI flags (run instead of MCP server):
6
+ * --install Interactive setup wizard
7
+ * --setup Run setup.sql on your database
8
+ * --verify Health check + round trip test
9
+ * --print-instructions Print CLAUDE.md memory instructions
10
+ *
5
11
  * Standalone MCP server for AI agents. 10 memory tools powered by
6
12
  * Postgres + pgvector. Multi-strategy retrieval (semantic + BM25 + RRF),
7
13
  * cosine triage, LLM borderline decisions, entity extraction.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
package/dist/index.js CHANGED
@@ -2,6 +2,12 @@
2
2
  /**
3
3
  * TraqrDB Memory MCP Server
4
4
  *
5
+ * CLI flags (run instead of MCP server):
6
+ * --install Interactive setup wizard
7
+ * --setup Run setup.sql on your database
8
+ * --verify Health check + round trip test
9
+ * --print-instructions Print CLAUDE.md memory instructions
10
+ *
5
11
  * Standalone MCP server for AI agents. 10 memory tools powered by
6
12
  * Postgres + pgvector. Multi-strategy retrieval (semantic + BM25 + RRF),
7
13
  * cosine triage, LLM borderline decisions, entity extraction.
@@ -9,6 +15,44 @@
9
15
  * Usage:
10
16
  * SUPABASE_URL=... SUPABASE_SERVICE_ROLE_KEY=... npx traqr-memory-mcp
11
17
  */
18
+ // CLI flag routing — handle before heavy imports
19
+ const cliFlag = process.argv[2];
20
+ if (cliFlag === '--install') {
21
+ await import('./cli/install.js');
22
+ process.exit(0);
23
+ }
24
+ if (cliFlag === '--setup') {
25
+ await import('./cli/setup-db.js');
26
+ process.exit(0);
27
+ }
28
+ if (cliFlag === '--verify') {
29
+ await import('./cli/verify.js');
30
+ process.exit(0);
31
+ }
32
+ if (cliFlag === '--print-instructions') {
33
+ await import('./cli/instructions.js');
34
+ process.exit(0);
35
+ }
36
+ if (cliFlag === '--help' || cliFlag === '-h') {
37
+ console.log(`
38
+ traqr-memory-mcp — MCP server for persistent AI agent memory
39
+
40
+ Usage: npx traqr-memory-mcp [flag]
41
+
42
+ Flags:
43
+ --install Interactive setup wizard
44
+ --setup Run setup.sql on your database
45
+ --verify Health check + round trip test
46
+ --print-instructions Print CLAUDE.md memory instructions
47
+ --help, -h Show this help
48
+
49
+ No flags: start MCP server (for MCP client config, not direct use)
50
+
51
+ Quick start:
52
+ npx traqr-memory-mcp --install
53
+ `);
54
+ process.exit(0);
55
+ }
12
56
  import { readFileSync } from 'node:fs';
13
57
  import { fileURLToPath } from 'node:url';
14
58
  import { dirname, join } from 'node:path';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "traqr-memory-mcp",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Memory-as-a-service MCP server for AI agents. 10 tools, Postgres + pgvector, multi-strategy retrieval. Works with Claude Code, Cursor, Codex, and any MCP client.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -26,8 +26,9 @@
26
26
  "start": "node dist/index.js"
27
27
  },
28
28
  "dependencies": {
29
- "@traqr/memory": "^0.1.0",
29
+ "@clack/prompts": "^1.1.0",
30
30
  "@modelcontextprotocol/sdk": "^1.12.1",
31
+ "@traqr/memory": "^0.1.0",
31
32
  "zod": "^3.24.2"
32
33
  },
33
34
  "keywords": [