@cybermem/mcp 0.5.1 → 0.6.0

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.
Files changed (68) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +187 -194
  3. package/package.json +29 -28
  4. package/requirements.txt +2 -0
  5. package/server.py +347 -0
  6. package/src/index.ts +227 -0
  7. package/test_mcp.py +111 -0
  8. package/tsconfig.json +14 -0
  9. package/dist/commands/deploy.js +0 -230
  10. package/dist/commands/init.js +0 -65
  11. package/dist/templates/ansible/inventory/hosts.ini +0 -3
  12. package/dist/templates/ansible/playbooks/deploy-cybermem.yml +0 -71
  13. package/dist/templates/ansible/playbooks/stop-cybermem.yml +0 -17
  14. package/dist/templates/charts/cybermem/Chart.yaml +0 -6
  15. package/dist/templates/charts/cybermem/templates/dashboard-deployment.yaml +0 -29
  16. package/dist/templates/charts/cybermem/templates/dashboard-service.yaml +0 -20
  17. package/dist/templates/charts/cybermem/templates/openmemory-deployment.yaml +0 -40
  18. package/dist/templates/charts/cybermem/templates/openmemory-pvc.yaml +0 -10
  19. package/dist/templates/charts/cybermem/templates/openmemory-service.yaml +0 -13
  20. package/dist/templates/charts/cybermem/values-vps.yaml +0 -18
  21. package/dist/templates/charts/cybermem/values.yaml +0 -42
  22. package/dist/templates/docker-compose.yml +0 -219
  23. package/dist/templates/envs/local.example +0 -27
  24. package/dist/templates/envs/rpi.example +0 -27
  25. package/dist/templates/envs/vps.example +0 -25
  26. package/dist/templates/monitoring/db_exporter/Dockerfile +0 -19
  27. package/dist/templates/monitoring/db_exporter/exporter.py +0 -313
  28. package/dist/templates/monitoring/db_exporter/requirements.txt +0 -2
  29. package/dist/templates/monitoring/grafana/dashboards/cybermem.json +0 -1088
  30. package/dist/templates/monitoring/grafana/provisioning/dashboards/default.yml +0 -12
  31. package/dist/templates/monitoring/grafana/provisioning/datasources/prometheus.yml +0 -9
  32. package/dist/templates/monitoring/log_exporter/Dockerfile +0 -13
  33. package/dist/templates/monitoring/log_exporter/exporter.py +0 -274
  34. package/dist/templates/monitoring/log_exporter/requirements.txt +0 -1
  35. package/dist/templates/monitoring/postgres_exporter/queries.yml +0 -22
  36. package/dist/templates/monitoring/prometheus/prometheus.yml +0 -22
  37. package/dist/templates/monitoring/traefik/traefik.yml +0 -32
  38. package/dist/templates/monitoring/vector/vector.toml/vector.yaml +0 -77
  39. package/dist/templates/monitoring/vector/vector.yaml +0 -106
  40. package/templates/ansible/inventory/hosts.ini +0 -3
  41. package/templates/ansible/playbooks/deploy-cybermem.yml +0 -71
  42. package/templates/ansible/playbooks/stop-cybermem.yml +0 -17
  43. package/templates/charts/cybermem/Chart.yaml +0 -6
  44. package/templates/charts/cybermem/templates/dashboard-deployment.yaml +0 -29
  45. package/templates/charts/cybermem/templates/dashboard-service.yaml +0 -20
  46. package/templates/charts/cybermem/templates/openmemory-deployment.yaml +0 -40
  47. package/templates/charts/cybermem/templates/openmemory-pvc.yaml +0 -10
  48. package/templates/charts/cybermem/templates/openmemory-service.yaml +0 -13
  49. package/templates/charts/cybermem/values-vps.yaml +0 -18
  50. package/templates/charts/cybermem/values.yaml +0 -42
  51. package/templates/docker-compose.yml +0 -219
  52. package/templates/envs/local.example +0 -27
  53. package/templates/envs/rpi.example +0 -27
  54. package/templates/envs/vps.example +0 -25
  55. package/templates/monitoring/db_exporter/Dockerfile +0 -19
  56. package/templates/monitoring/db_exporter/exporter.py +0 -313
  57. package/templates/monitoring/db_exporter/requirements.txt +0 -2
  58. package/templates/monitoring/grafana/dashboards/cybermem.json +0 -1088
  59. package/templates/monitoring/grafana/provisioning/dashboards/default.yml +0 -12
  60. package/templates/monitoring/grafana/provisioning/datasources/prometheus.yml +0 -9
  61. package/templates/monitoring/log_exporter/Dockerfile +0 -13
  62. package/templates/monitoring/log_exporter/exporter.py +0 -274
  63. package/templates/monitoring/log_exporter/requirements.txt +0 -1
  64. package/templates/monitoring/postgres_exporter/queries.yml +0 -22
  65. package/templates/monitoring/prometheus/prometheus.yml +0 -22
  66. package/templates/monitoring/traefik/traefik.yml +0 -32
  67. package/templates/monitoring/vector/vector.toml/vector.yaml +0 -77
  68. package/templates/monitoring/vector/vector.yaml +0 -106
@@ -1,29 +0,0 @@
1
- apiVersion: apps/v1
2
- kind: Deployment
3
- metadata:
4
- name: {{ .Chart.Name }}-dashboard
5
- labels:
6
- app.kubernetes.io/name: dashboard
7
- spec:
8
- replicas: {{ .Values.dashboard.replicaCount }}
9
- selector:
10
- matchLabels:
11
- app.kubernetes.io/name: dashboard
12
- template:
13
- metadata:
14
- labels:
15
- app.kubernetes.io/name: dashboard
16
- spec:
17
- containers:
18
- - name: dashboard
19
- image: "{{ .Values.dashboard.image.repository }}:{{ .Values.dashboard.image.tag }}"
20
- imagePullPolicy: {{ .Values.dashboard.image.pullPolicy }}
21
- ports:
22
- - name: http
23
- containerPort: 3000
24
- protocol: TCP
25
- env:
26
- - name: NEXT_PUBLIC_API_URL
27
- value: "http://{{ .Chart.Name }}-openmemory:8080"
28
- resources:
29
- {{- toYaml .Values.dashboard.resources | nindent 12 }}
@@ -1,20 +0,0 @@
1
- apiVersion: v1
2
- kind: Service
3
- metadata:
4
- name: {{ .Chart.Name }}-dashboard
5
- spec:
6
- type: {{ .Values.dashboard.service.type }}
7
- ports:
8
- - port: {{ .Values.dashboard.service.port }}
9
- targetPort: http
10
- protocol: TCP
11
- name: http
12
- {{- if eq .Values.dashboard.service.type "NodePort" }}
13
- - port: {{ .Values.dashboard.service.port }}
14
- targetPort: http
15
- nodePort: {{ .Values.dashboard.service.nodePort }}
16
- protocol: TCP
17
- name: http-node
18
- {{- end }}
19
- selector:
20
- app.kubernetes.io/name: dashboard
@@ -1,40 +0,0 @@
1
- apiVersion: apps/v1
2
- kind: Deployment
3
- metadata:
4
- name: {{ .Chart.Name }}-openmemory
5
- labels:
6
- app.kubernetes.io/name: openmemory
7
- spec:
8
- replicas: {{ .Values.openmemory.replicaCount }}
9
- selector:
10
- matchLabels:
11
- app.kubernetes.io/name: openmemory
12
- template:
13
- metadata:
14
- labels:
15
- app.kubernetes.io/name: openmemory
16
- spec:
17
- containers:
18
- - name: openmemory
19
- image: "{{ .Values.openmemory.image.repository }}:{{ .Values.openmemory.image.tag }}"
20
- imagePullPolicy: {{ .Values.openmemory.image.pullPolicy }}
21
- ports:
22
- - name: http
23
- containerPort: 8080
24
- protocol: TCP
25
- env:
26
- - name: OPENMEMORY_API_KEY
27
- value: {{ .Values.env.OPENMEMORY_API_KEY | quote }}
28
- - name: OPENAI_API_KEY
29
- value: {{ .Values.env.OPENAI_API_KEY | quote }}
30
- - name: DB_PATH
31
- value: "/data/openmemory.sqlite"
32
- volumeMounts:
33
- - name: data
34
- mountPath: /data
35
- resources:
36
- {{- toYaml .Values.openmemory.resources | nindent 12 }}
37
- volumes:
38
- - name: data
39
- persistentVolumeClaim:
40
- claimName: {{ .Chart.Name }}-openmemory-pvc
@@ -1,10 +0,0 @@
1
- apiVersion: v1
2
- kind: PersistentVolumeClaim
3
- metadata:
4
- name: {{ .Chart.Name }}-openmemory-pvc
5
- spec:
6
- accessModes:
7
- - {{ .Values.openmemory.persistence.accessMode }}
8
- resources:
9
- requests:
10
- storage: {{ .Values.openmemory.persistence.size }}
@@ -1,13 +0,0 @@
1
- apiVersion: v1
2
- kind: Service
3
- metadata:
4
- name: {{ .Chart.Name }}-openmemory
5
- spec:
6
- type: {{ .Values.openmemory.service.type }}
7
- ports:
8
- - port: {{ .Values.openmemory.service.port }}
9
- targetPort: http
10
- protocol: TCP
11
- name: http
12
- selector:
13
- app.kubernetes.io/name: openmemory
@@ -1,18 +0,0 @@
1
- # VPS Overrides
2
-
3
- openmemory:
4
- image:
5
- repository: ghcr.io/mikhailkogan17/cybermem-openmemory
6
- pullPolicy: Always
7
- service:
8
- type: ClusterIP
9
-
10
- dashboard:
11
- image:
12
- repository: ghcr.io/mikhailkogan17/cybermem-dashboard
13
- pullPolicy: Always
14
-
15
- env:
16
- OPENMEMORY_API_KEY: "prod-secret-key-CHANGE-ME"
17
- # Add your OpenAI Key here for production
18
- OPENAI_API_KEY: "sk-..."
@@ -1,42 +0,0 @@
1
- # Default values for cybermem.
2
-
3
- openmemory:
4
- image:
5
- repository: cybermem-openmemory
6
- pullPolicy: IfNotPresent
7
- tag: "latest"
8
- replicaCount: 1
9
- service:
10
- type: ClusterIP
11
- port: 8080
12
- persistence:
13
- enabled: true
14
- size: 10Gi
15
- accessMode: ReadWriteOnce
16
- resources:
17
- limits:
18
- cpu: 1000m
19
- memory: 1Gi
20
- requests:
21
- cpu: 100m
22
- memory: 256Mi
23
- env:
24
- # Passed to the container
25
- OM_PORT: "8080"
26
-
27
- dashboard:
28
- image:
29
- repository: cybermem-dashboard
30
- pullPolicy: IfNotPresent
31
- tag: "latest"
32
- replicaCount: 1
33
- service:
34
- type: ClusterIP
35
- port: 3000
36
- nodePort: 30000 # For k3d/local access if needed
37
- resources: {}
38
-
39
- env:
40
- # Shared secrets
41
- OPENMEMORY_API_KEY: "dev-secret-key"
42
- OPENAI_API_KEY: ""
@@ -1,219 +0,0 @@
1
- # CyberMem - OpenMemory + DevOps monitoring stack
2
- # For local development only
3
- # Production deployment: use Helm chart (charts/cybermem/)
4
-
5
- services:
6
- traefik:
7
- image: traefik:v3.0
8
- container_name: cybermem-traefik
9
- command:
10
- - --api.dashboard=true
11
- - --api.insecure=true
12
- - --providers.docker=true
13
- - --providers.docker.exposedbydefault=false
14
- - --entrypoints.web.address=:8626
15
- - --accesslog=true
16
- - --accesslog.filepath=/var/log/traefik/access.log
17
- - --accesslog.format=json
18
- ports:
19
- - "8626:8626"
20
- volumes:
21
- - /var/run/docker.sock:/var/run/docker.sock:ro
22
- - ./monitoring/traefik/traefik.yml:/etc/traefik/traefik.yml:ro
23
- - traefik-logs:/var/log/traefik
24
- labels:
25
- - traefik.enable=true
26
- restart: unless-stopped
27
-
28
- openmemory:
29
- image: ghcr.io/mikhailkogan17/cybermem-openmemory:latest
30
- container_name: cybermem-openmemory
31
- ports: [] # Access via Traefik on 8626
32
- volumes:
33
- - openmemory-data:/data
34
- - ${CYBERMEM_ENV_PATH}:/.env
35
- environment:
36
- # Core settings
37
- OM_PORT: "8080"
38
- OM_TIER: "deep"
39
- # API Key is loaded from /.env file
40
-
41
- # Embeddings (local dev uses Ollama)
42
- OM_EMBEDDINGS: ${EMBEDDINGS_PROVIDER:-ollama}
43
- OLLAMA_URL: ${OLLAMA_URL:-http://ollama:11434}
44
- OPENAI_API_KEY: ${OPENAI_API_KEY:-}
45
-
46
- # Database (local dev uses SQLite)
47
- OM_METADATA_BACKEND: ${DB_BACKEND:-sqlite}
48
- OM_DB_PATH: ${DB_PATH:-/data/openmemory.sqlite}
49
- OM_VECTOR_BACKEND: ${VECTOR_BACKEND:-sqlite}
50
-
51
- # PostgreSQL (for production/testing)
52
- OM_PG_HOST: ${PG_HOST:-postgres}
53
- OM_PG_PORT: ${PG_PORT:-5432}
54
- OM_PG_DB: ${PG_DB:-openmemory}
55
- OM_PG_USER: ${PG_USER:-openmemory}
56
- OM_PG_PASSWORD: ${PG_PASSWORD:-}
57
-
58
- # Performance
59
- OM_RATE_LIMIT_ENABLED: "true"
60
- OM_RATE_LIMIT_MAX_REQUESTS: "1000"
61
-
62
- labels:
63
- - traefik.enable=true
64
- - traefik.http.routers.openmemory.entrypoints=web
65
- - traefik.http.routers.openmemory.rule=PathPrefix(`/memory`) || PathPrefix(`/health`) || PathPrefix(`/v1`) || PathPrefix(`/api`) || PathPrefix(`/all`) || PathPrefix(`/add`) || PathPrefix(`/mcp`) || PathPrefix(`/sse`)
66
- - traefik.http.services.openmemory.loadbalancer.server.port=8080
67
- healthcheck:
68
- test:
69
- [
70
- "CMD",
71
- "wget",
72
- "--quiet",
73
- "--tries=1",
74
- "--spider",
75
- "http://localhost:8080/health",
76
- ]
77
- interval: 30s
78
- timeout: 10s
79
- retries: 3
80
- start_period: 40s
81
- restart: unless-stopped
82
- depends_on:
83
- - traefik
84
-
85
- db-exporter:
86
- image: ghcr.io/mikhailkogan17/cybermem-db_exporter:latest
87
- container_name: cybermem-db-exporter
88
- environment:
89
- DB_PATH: /data/openmemory.sqlite
90
- SCRAPE_INTERVAL: "15"
91
- EXPORTER_PORT: "8000"
92
- ports:
93
- - "8000:8000"
94
- volumes:
95
- - openmemory-data:/data:ro
96
- restart: unless-stopped
97
- depends_on:
98
- - openmemory
99
-
100
- log-exporter:
101
- image: ghcr.io/mikhailkogan17/cybermem-log_exporter:latest
102
- container_name: cybermem-log-exporter
103
- environment:
104
- LOG_FILE: /var/log/traefik/access.log
105
- SCRAPE_INTERVAL: "5"
106
- EXPORTER_PORT: "8001"
107
- DB_PATH: /data/openmemory.sqlite
108
- volumes:
109
- - traefik-logs:/var/log/traefik:ro
110
- - openmemory-data:/data
111
- - ./monitoring/log_exporter/exporter.py:/app/exporter.py:ro
112
- restart: unless-stopped
113
- depends_on:
114
- - traefik
115
- - openmemory
116
-
117
- postgres:
118
- image: postgres:15-alpine
119
- container_name: cybermem-postgres
120
- environment:
121
- POSTGRES_DB: ${PG_DB:-openmemory}
122
- POSTGRES_USER: ${PG_USER:-openmemory}
123
- POSTGRES_PASSWORD: ${PG_PASSWORD:-postgres}
124
- ports:
125
- - "5432:5432"
126
- volumes:
127
- - postgres-data:/var/lib/postgresql/data
128
- healthcheck:
129
- test: ["CMD-SHELL", "pg_isready -U ${PG_USER:-openmemory}"]
130
- interval: 10s
131
- timeout: 5s
132
- retries: 5
133
- restart: unless-stopped
134
- profiles:
135
- - postgres
136
-
137
- postgres-exporter:
138
- image: prometheuscommunity/postgres-exporter:v0.15.0
139
- container_name: cybermem-postgres-exporter
140
- environment:
141
- DATA_SOURCE_NAME: postgresql://${PG_USER:-openmemory}:${PG_PASSWORD:-postgres}@postgres:5432/${PG_DB:-openmemory}?sslmode=disable
142
- PG_EXPORTER_EXTEND_QUERY_PATH: /queries.yml
143
- ports:
144
- - "9187:9187"
145
- volumes:
146
- - ./monitoring/postgres_exporter/queries.yml:/queries.yml:ro
147
- restart: unless-stopped
148
- depends_on:
149
- - postgres
150
- profiles:
151
- - postgres
152
-
153
- ollama:
154
- image: ollama/ollama:latest
155
- container_name: cybermem-ollama
156
- ports:
157
- - "11434:11434"
158
- volumes:
159
- - ollama-models:/root/.ollama
160
- restart: unless-stopped
161
- profiles:
162
- - ollama
163
-
164
- prometheus:
165
- image: prom/prometheus:v2.48.0
166
- container_name: cybermem-prometheus
167
- command:
168
- - --config.file=/etc/prometheus/prometheus.yml
169
- - --storage.tsdb.path=/prometheus
170
- - --storage.tsdb.retention.time=${PROM_RETENTION:-7d}
171
- - --web.console.libraries=/usr/share/prometheus/console_libraries
172
- - --web.console.templates=/usr/share/prometheus/consoles
173
- ports:
174
- - "9092:9090"
175
- volumes:
176
- - ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
177
- - prometheus-data:/prometheus
178
- restart: unless-stopped
179
- depends_on:
180
- - db-exporter
181
-
182
- dashboard:
183
- image: ghcr.io/mikhailkogan17/cybermem-dashboard:latest
184
- container_name: cybermem-dashboard
185
- environment:
186
- NEXT_PUBLIC_PROMETHEUS_URL: http://prometheus:9090
187
- PROMETHEUS_URL: http://prometheus:9090
188
- OM_API_KEY: ${OM_API_KEY:-dev-secret-key}
189
- # WATCHPACK_POLLING: "true" # Enable if hot reload blocks (high CPU usage)
190
- ports:
191
- - "3000:3000"
192
- volumes:
193
- - openmemory-data:/data
194
- - /var/run/docker.sock:/var/run/docker.sock
195
- - ${CYBERMEM_ENV_PATH}:/app/shared.env
196
- restart: unless-stopped
197
- depends_on:
198
- - prometheus
199
-
200
- volumes:
201
- openmemory-data:
202
- name: cybermem-openmemory-data
203
- driver: local
204
- postgres-data:
205
- name: cybermem-postgres-data
206
- driver: local
207
- ollama-models:
208
- name: cybermem-ollama-models
209
- driver: local
210
- prometheus-data:
211
- name: cybermem-prometheus-data
212
- driver: local
213
- traefik-logs:
214
- name: cybermem-traefik-logs
215
- driver: local
216
-
217
- networks:
218
- default:
219
- name: cybermem-network
@@ -1,27 +0,0 @@
1
- # Example environment configuration
2
- # Copy to .env and customize
3
-
4
- # Embeddings provider: ollama (local) or openai (cloud)
5
- EMBEDDINGS_PROVIDER=ollama
6
- OLLAMA_URL=http://ollama:11434
7
- OPENAI_API_KEY=
8
-
9
- # Database backend: sqlite (local/rpi) or postgres (vps)
10
- DB_BACKEND=sqlite
11
- DB_PATH=/data/openmemory.sqlite
12
- VECTOR_BACKEND=sqlite
13
-
14
- # PostgreSQL settings (only for DB_BACKEND=postgres)
15
- PG_HOST=postgres
16
- PG_PORT=5432
17
- PG_DB=openmemory
18
- PG_USER=openmemory
19
- PG_PASSWORD=change-me
20
-
21
- # OpenMemory API key (Optional for local mode)
22
- # CYBERMEM_API_KEY=
23
-
24
- # Monitoring
25
- PROM_RETENTION=7d
26
- GRAFANA_USER=admin
27
- GRAFANA_PASSWORD=admin
@@ -1,27 +0,0 @@
1
- # Raspberry Pi environment
2
- # Optimized for low memory (1GB total)
3
- DOCKER_PLATFORM=linux/arm64
4
-
5
-
6
- # Embeddings (use Ollama with small models)
7
- EMBEDDINGS_PROVIDER=ollama
8
- OLLAMA_URL=http://ollama:11434
9
- OPENAI_API_KEY=
10
-
11
- # Database (SQLite for RPi - low memory footprint)
12
- DB_BACKEND=sqlite
13
- DB_PATH=/data/openmemory.sqlite
14
-
15
- # PostgreSQL (not used)
16
- PG_HOST=postgres
17
- PG_DB=openmemory
18
- PG_USER=openmemory
19
- PG_PASSWORD=not-used
20
-
21
- # OpenMemory
22
- CYBERMEM_API_KEY=key-change-me
23
-
24
- # Monitoring (short retention for disk space)
25
- PROM_RETENTION=3d
26
- GRAFANA_USER=admin
27
- GRAFANA_PASSWORD=admin
@@ -1,25 +0,0 @@
1
- # VPS production environment
2
- # For Hetzner CX22 or similar (2 vCPU, 4GB RAM)
3
-
4
- # Embeddings (use OpenAI for production)
5
- EMBEDDINGS_PROVIDER=openai
6
- OPENAI_API_KEY=sk-change-me-in-production
7
- OLLAMA_URL=
8
-
9
- # Database (PostgreSQL for production)
10
- DB_BACKEND=postgres
11
- VECTOR_BACKEND=postgres
12
-
13
- # PostgreSQL
14
- PG_HOST=postgres
15
- PG_DB=openmemory
16
- PG_USER=openmemory
17
- PG_PASSWORD=change-me-in-production-use-secrets
18
-
19
- # OpenMemory
20
- CYBERMEM_API_KEY=change-me-in-production-use-secrets
21
-
22
- # Monitoring
23
- PROM_RETENTION=30d
24
- GRAFANA_USER=admin
25
- GRAFANA_PASSWORD=change-me-in-production-use-secrets
@@ -1,19 +0,0 @@
1
- FROM python:3.11-alpine
2
-
3
- WORKDIR /app
4
-
5
- # Install dependencies
6
- COPY requirements.txt .
7
- RUN pip install --no-cache-dir -r requirements.txt
8
-
9
- # Copy exporter script
10
- COPY exporter.py .
11
-
12
- # Make script executable
13
- RUN chmod +x exporter.py
14
-
15
- # Expose Prometheus metrics port
16
- EXPOSE 8000
17
-
18
- # Run exporter
19
- CMD ["python", "-u", "exporter.py"]