You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/docker.md
+38Lines changed: 38 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,11 +35,28 @@ services:
35
35
- /path/to/my-app:/data/projects/my-app
36
36
- models:/data/models
37
37
restart: unless-stopped
38
+
depends_on:
39
+
redis:
40
+
condition: service_healthy
41
+
42
+
redis:
43
+
image: redis:7-alpine
44
+
restart: unless-stopped
45
+
volumes:
46
+
- redis-data:/data
47
+
healthcheck:
48
+
test: ["CMD", "redis-cli", "ping"]
49
+
interval: 10s
50
+
timeout: 3s
51
+
retries: 3
38
52
39
53
volumes:
40
54
models:
55
+
redis-data:
41
56
```
42
57
58
+
> Redis is optional. Remove the `redis` service and `depends_on` if you don't need shared session store or embedding cache. See [configuration.md](configuration.md#redis) for the `server.redis` settings.
59
+
43
60
```bash
44
61
docker compose up -d
45
62
```
@@ -70,6 +87,9 @@ server:
70
87
host: "0.0.0.0" # Bind to all interfaces (required in Docker)
71
88
port: 3000
72
89
modelsDir: "/data/models" # Match the volume mount
90
+
redis:
91
+
enabled: true
92
+
url: "redis://redis:6379" # Service name from docker-compose
Copy file name to clipboardExpand all lines: site/src/pages/changelog.md
+35-56Lines changed: 35 additions & 56 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,87 +5,66 @@ description: Graph Memory release history and version changes.
5
5
6
6
# Changelog
7
7
8
-
## v1.6.3
9
-
10
-
**Released: March 2026**
11
-
12
-
### New
13
-
14
-
-**OAuth 2.0 Authorization Code + PKCE** — full browser-based OAuth flow with PKCE (`S256`) support. Discovery manifest points clients to `/ui/auth/authorize`; authenticated users see a **consent page** and can approve without re-entering credentials. Unauthenticated users sign in first at `/ui/auth/signin`.
15
-
-**Frontend consent page** — new UI page at `/ui/auth/authorize` for reviewing and approving OAuth authorization requests. Displays the requesting service's hostname from `redirect_uri`.
16
-
-**Frontend login page** — new dedicated login page at `/ui/auth/signin` with `returnUrl` redirect, separate from the main UI auth gate.
17
-
-**Refresh token support** — `POST /oauth/token` with `grant_type=refresh_token` issues a new access token using a previously issued refresh token (JWT type `oauth_refresh`). Enables long-lived sessions without re-authentication.
18
-
-**`oauth_refresh` JWT type** — refresh tokens are self-contained signed JWTs with `type: "oauth_refresh"`. They are only accepted at `POST /oauth/token`; presenting one as a Bearer token for API/MCP access returns 401.
-**Redis session store** — session store is now pluggable. Set `server.redis.url` to use Redis for MCP HTTP sessions instead of the default in-memory store. Enables horizontal scaling and survives server restarts.
21
-
-**Redis embedding cache** — embedding cache can be backed by Redis (`server.redis.url`). Embeddings computed once are reused across restarts and shared between server instances.
22
-
-**Session store abstraction** — internal `SessionStore` interface with `Memory` and `Redis` implementations. Selecting the backend is done via config; no code changes required.
23
-
24
-
### Updated OAuth discovery
25
-
26
-
`GET /.well-known/oauth-authorization-server` now includes `authorization_endpoint`, `token_endpoint`, `userinfo_endpoint`, `introspection_endpoint`, `revocation_endpoint`, `end_session_endpoint`, `response_types_supported: ["code"]`, `code_challenge_methods_supported: ["S256"]`, and `refresh_token` in `grant_types_supported`.
27
-
28
-
---
29
-
30
-
## v1.6.2
31
-
32
-
**Released: March 2026**
33
-
34
-
### New
35
-
36
-
-**OAuth 2.0 Authorization Code + PKCE** — Claude.ai and other browser-based OAuth clients can now authenticate via the full Authorization Code flow with PKCE (`S256`). The consent page at `/ui/auth/authorize` handles user approval; `POST /api/oauth/authorize` issues authorization codes for authenticated sessions.
37
-
-**Refresh tokens** — `POST /oauth/token` now supports `grant_type=refresh_token`. Tokens are self-contained signed JWTs using the configured `refreshTokenTtl` (default `7d`). Access and refresh tokens use the configured `accessTokenTtl`/`refreshTokenTtl` from `graph-memory.yaml`.
38
-
-**Updated OAuth discovery** — `/.well-known/oauth-authorization-server` now includes `authorization_endpoint`, `response_types_supported: ["code"]`, `code_challenge_methods_supported: ["S256"]`, and `refresh_token` in `grant_types_supported`.
39
-
40
-
---
41
-
42
-
## v1.6.1
43
-
44
-
**Released: March 2026**
45
-
46
-
### Fixes
47
-
48
-
-**Express `trust proxy`** — enabled `trust proxy` so that `X-Forwarded-For` and `X-Forwarded-Proto` headers from reverse proxies (nginx, etc.) are correctly trusted. Fixes real IP detection for rate limiting and `Secure` cookie behavior behind HTTPS proxies.
49
-
50
-
---
51
-
52
-
## v1.6.0
8
+
## v1.7.0
53
9
54
10
**Released: March 2026**
55
11
56
12
### Highlights
57
13
58
-
-**OAuth 2.0 for AI chat clients** — Graph Memory now implements the OAuth 2.0 `client_credentials` flow. AI chat clients that support OAuth connectors (Claude.ai, etc.) can authenticate automatically — no manual API key headers required. Client ID = `userId`, Client Secret = `apiKey` from config.
14
+
-**Full OAuth 2.0 support** — both `client_credentials` and Authorization Code + PKCE (`S256`) grant types. AI chat clients (Claude.ai, etc.) authenticate via the browser-based consent flow; programmatic clients use client credentials. Discovery at `GET /.well-known/oauth-authorization-server`.
15
+
-**Frontend auth pages** — consent page at `/ui/auth/authorize` (shows requesting service hostname, inline login if needed), standalone login page at `/ui/auth/signin` with `returnUrl` redirect.
16
+
-**Redis backend** — optional Redis support (`server.redis`) for session store (auth codes, OAuth sessions) and embedding cache. Enables horizontal scaling and survives server restarts. In-memory fallback when disabled.
59
17
-**Tool naming consistency** — all 58 MCP tools audited and renamed to consistent `graph_verb_noun` prefixes. Parameter names, defaults, and descriptions aligned across MCP tools and REST endpoints.
60
-
-**Array syntax for `include` patterns** — the `include` field in graph config now accepts a YAML array in addition to a single glob string, matching the existing `exclude` behavior.
61
-
-**Cleaner MCP responses** — internal graph fields (`fileEmbedding`, `pendingLinks`, `pendingImports`, `pendingEdges`, `version`), null values, and empty arrays stripped from all MCP tool responses to reduce noise and token usage.
-**`oauth_refresh` JWT type** — refresh tokens are self-contained signed JWTs with `type: "oauth_refresh"`, separate from UI `refresh` type. Only accepted at `POST /oauth/token`.
-**PKCE S256** — code challenge verification required for all Authorization Code flows.
34
+
-**Open redirect protection** — `returnUrl` on `/ui/auth/signin` validated to allow only relative paths.
67
35
68
36
### Security
69
37
70
-
-**Auth before project lookup** — MCP handler now checks authentication before resolving the project, preventing unauthenticated callers from enumerating which project IDs exist via 404 vs 401 responses
71
-
-**`WWW-Authenticate: Bearer` on 401** — MCP endpoints include the RFC 6750 required header on all 401 responses, enabling OAuth clients to trigger automatic re-authentication
38
+
-**Auth before project lookup** — MCP handler checks authentication before resolving the project, preventing project ID enumeration
39
+
-**`WWW-Authenticate: Bearer` on 401** — RFC 6750 header on all MCP 401 responses
-`notes_list` — removed content preview field (not in tool description)
79
54
80
55
### Tests
81
56
82
-
- 33 new tests in `oauth.test.ts`: unit tests for `signOAuthToken` and `resolveUserFromBearer`, supertest coverage of discovery and token endpoints, integration tests against a real HTTP server for `WWW-Authenticate` header behavior
0 commit comments