velixar-mcp-server 0.1.1 → 0.1.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.
- package/README.md +88 -18
- package/package.json +1 -1
- package/src/index.js +11 -1
package/README.md
CHANGED
|
@@ -1,46 +1,116 @@
|
|
|
1
1
|
# Velixar MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/velixar-mcp-server)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
|
|
6
|
+
MCP server that gives any AI assistant persistent memory via [Velixar](https://velixarai.com). Works with any [Model Context Protocol](https://modelcontextprotocol.io)-compatible client — Claude Desktop, Kiro, Cursor, Windsurf, Continue, or any MCP-enabled tool.
|
|
7
|
+
|
|
8
|
+
## What It Does
|
|
9
|
+
|
|
10
|
+
Your AI assistant forgets everything between sessions. This server fixes that. It connects to Velixar's memory API and exposes 5 tools that let your assistant store, search, list, update, and delete memories that persist across conversations.
|
|
4
11
|
|
|
5
12
|
## Setup
|
|
6
13
|
|
|
7
|
-
1. Get an API key
|
|
14
|
+
1. Get an API key at [velixarai.com/settings/api-keys](https://velixarai.com/settings/api-keys)
|
|
8
15
|
|
|
9
16
|
2. Install:
|
|
10
17
|
```bash
|
|
11
|
-
|
|
12
|
-
npm install
|
|
18
|
+
npm install -g velixar-mcp-server
|
|
13
19
|
```
|
|
14
20
|
|
|
15
|
-
3.
|
|
21
|
+
3. Add to your MCP client config:
|
|
22
|
+
|
|
23
|
+
**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
16
24
|
```json
|
|
17
25
|
{
|
|
18
26
|
"mcpServers": {
|
|
19
27
|
"velixar": {
|
|
20
|
-
"command": "
|
|
21
|
-
"args": ["/Users/velixarai/velixar-mcp-server/src/index.js"],
|
|
28
|
+
"command": "velixar-mcp-server",
|
|
22
29
|
"env": {
|
|
23
|
-
"VELIXAR_API_KEY": "vlx_your_key_here"
|
|
24
|
-
"VELIXAR_USER_ID": "kiro_session"
|
|
30
|
+
"VELIXAR_API_KEY": "vlx_your_key_here"
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
}
|
|
28
34
|
}
|
|
29
35
|
```
|
|
30
36
|
|
|
31
|
-
|
|
37
|
+
**Kiro CLI** (`~/.kiro/settings/mcp.json`):
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"mcpServers": {
|
|
41
|
+
"velixar": {
|
|
42
|
+
"command": "velixar-mcp-server",
|
|
43
|
+
"env": {
|
|
44
|
+
"VELIXAR_API_KEY": "vlx_your_key_here"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Cursor** (`.cursor/mcp.json` in your project):
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"mcpServers": {
|
|
55
|
+
"velixar": {
|
|
56
|
+
"command": "velixar-mcp-server",
|
|
57
|
+
"env": {
|
|
58
|
+
"VELIXAR_API_KEY": "vlx_your_key_here"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
4. Restart your AI assistant
|
|
32
66
|
|
|
33
67
|
## Tools
|
|
34
68
|
|
|
35
69
|
| Tool | Description |
|
|
36
70
|
|------|-------------|
|
|
37
|
-
| `velixar_store` | Store a memory |
|
|
38
|
-
| `velixar_search` |
|
|
39
|
-
| `
|
|
71
|
+
| `velixar_store` | Store a memory with optional tags and tier |
|
|
72
|
+
| `velixar_search` | Semantic search across memories |
|
|
73
|
+
| `velixar_list` | Browse memories with pagination |
|
|
74
|
+
| `velixar_update` | Edit an existing memory |
|
|
75
|
+
| `velixar_delete` | Delete a memory by ID |
|
|
76
|
+
|
|
77
|
+
## Memory Tiers
|
|
78
|
+
|
|
79
|
+
| Tier | Name | Use Case |
|
|
80
|
+
|------|------|----------|
|
|
81
|
+
| 0 | Pinned | Critical facts, never expire |
|
|
82
|
+
| 1 | Session | Current conversation context |
|
|
83
|
+
| 2 | Semantic | Long-term memories (default) |
|
|
84
|
+
| 3 | Organization | Shared team knowledge |
|
|
85
|
+
|
|
86
|
+
## Environment Variables
|
|
87
|
+
|
|
88
|
+
| Variable | Required | Description |
|
|
89
|
+
|----------|----------|-------------|
|
|
90
|
+
| `VELIXAR_API_KEY` | Yes | Your Velixar API key |
|
|
91
|
+
| `VELIXAR_API_URL` | No | Custom API endpoint |
|
|
92
|
+
| `VELIXAR_USER_ID` | No | User ID for memory scoping (default: `kiro-cli`) |
|
|
93
|
+
|
|
94
|
+
## Example
|
|
95
|
+
|
|
96
|
+
Once configured, your AI assistant can:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
You: Remember that our production database is on us-east-1 and staging is us-west-2
|
|
100
|
+
Assistant: ✓ Stored memory
|
|
101
|
+
|
|
102
|
+
You: Which region is our staging database in?
|
|
103
|
+
Assistant: Based on my memory, your staging database is in us-west-2.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Memories persist across sessions, restarts, and even different machines — as long as they use the same API key.
|
|
107
|
+
|
|
108
|
+
## Related
|
|
109
|
+
|
|
110
|
+
- [velixar (JavaScript SDK)](https://github.com/VelixarAi/velixar-js) — Use Velixar directly in Node.js/TypeScript
|
|
111
|
+
- [velixar (Python SDK)](https://github.com/VelixarAi/velixar-python) — Python client with LangChain/LlamaIndex integrations
|
|
112
|
+
- [velixarai.com](https://velixarai.com) — Dashboard, API keys, and docs
|
|
40
113
|
|
|
41
|
-
##
|
|
114
|
+
## License
|
|
42
115
|
|
|
43
|
-
|
|
44
|
-
- Remember facts across sessions
|
|
45
|
-
- Store user preferences
|
|
46
|
-
- Build context over time
|
|
116
|
+
MIT
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -24,6 +24,10 @@ async function apiRequest(path, options = {}) {
|
|
|
24
24
|
...options.headers,
|
|
25
25
|
},
|
|
26
26
|
});
|
|
27
|
+
if (!res.ok) {
|
|
28
|
+
const body = await res.text().catch(() => "");
|
|
29
|
+
throw new Error(`API ${res.status}: ${body.slice(0, 200)}`);
|
|
30
|
+
}
|
|
27
31
|
return res.json();
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -113,7 +117,13 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
113
117
|
}),
|
|
114
118
|
});
|
|
115
119
|
if (result.error) throw new Error(result.error);
|
|
116
|
-
|
|
120
|
+
if (!result.id) throw new Error("Store succeeded but no ID returned");
|
|
121
|
+
// Verify the memory was actually persisted
|
|
122
|
+
const verify = await apiRequest(`/memory/search?q=${encodeURIComponent(args.content.slice(0, 60))}&user_id=${USER_ID}&limit=1`);
|
|
123
|
+
const verified = verify.memories?.some(m => m.id === result.id);
|
|
124
|
+
return { content: [{ type: "text", text: verified
|
|
125
|
+
? `✓ Stored and verified memory (id: ${result.id})`
|
|
126
|
+
: `⚠ Stored memory (id: ${result.id}) but verification failed — may not be searchable yet` }] };
|
|
117
127
|
}
|
|
118
128
|
|
|
119
129
|
if (name === "velixar_search") {
|