@hydradb/mcp 1.2.2 → 1.3.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.
- package/CHANGELOG.md +20 -0
- package/README.md +15 -0
- package/dist/descriptions.d.ts +5 -0
- package/dist/descriptions.js +11 -2
- package/dist/descriptions.js.map +1 -1
- package/dist/http-config.d.ts +31 -1
- package/dist/http-config.js +29 -29
- package/dist/http-config.js.map +1 -1
- package/dist/http.js +82 -5
- package/dist/http.js.map +1 -1
- package/dist/hydra/client.d.ts +48 -3
- package/dist/hydra/client.js +64 -7
- package/dist/hydra/client.js.map +1 -1
- package/dist/hydra/index.d.ts +1 -0
- package/dist/hydra/index.js +1 -0
- package/dist/hydra/index.js.map +1 -1
- package/dist/oauth.d.ts +109 -0
- package/dist/oauth.js +228 -0
- package/dist/oauth.js.map +1 -0
- package/dist/server.d.ts +9 -1
- package/dist/server.js +86 -6
- package/dist/server.js.map +1 -1
- package/dist/tool-names.d.ts +8 -0
- package/dist/tool-names.js +11 -0
- package/dist/tool-names.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.3.0] - 2026-08-28
|
|
11
|
+
|
|
12
|
+
### Added — OAuth resource server ("Sign in with HydraDB")
|
|
13
|
+
|
|
14
|
+
The hosted server can now take part in the MCP authorization flow (PRO-1790).
|
|
15
|
+
Given `HYDRADB_OAUTH_ISSUER`, `HYDRADB_MCP_PUBLIC_URL` and
|
|
16
|
+
`HYDRADB_OAUTH_INTROSPECTION_SECRET`, it serves an RFC 9728 Protected Resource
|
|
17
|
+
Metadata document at `/.well-known/oauth-protected-resource`, points every
|
|
18
|
+
`401` at it through `WWW-Authenticate`, and accepts `hmat_` access tokens
|
|
19
|
+
issued by the HydraDB dashboard, exchanging each (memoised, bounded by the
|
|
20
|
+
token's own expiry) for the API key and database the user approved on the
|
|
21
|
+
consent screen. Tokens minted for another audience are refused; an unreachable
|
|
22
|
+
issuer answers `503` rather than a `401` blaming the caller.
|
|
23
|
+
|
|
24
|
+
Entirely additive. With the three variables unset the server registers no new
|
|
25
|
+
routes and sends no new headers, and every existing path — API keys in
|
|
26
|
+
`Authorization` or `X-HydraDB-Api-Key`, the `X-HydraDB-Database` and collection
|
|
27
|
+
and graph headers, and the single-tenant environment fallback — behaves exactly
|
|
28
|
+
as before whether OAuth is configured or not.
|
|
29
|
+
|
|
10
30
|
## [1.2.2] - 2026-08-19
|
|
11
31
|
|
|
12
32
|
### Added — per-call database and collection scope overrides
|
package/README.md
CHANGED
|
@@ -363,8 +363,23 @@ The primary MCP endpoint is `/` (with `/mcp` supported as an alias); `GET /healt
|
|
|
363
363
|
The image binds `0.0.0.0` inside the container (the host controls exposure with
|
|
364
364
|
`-p`) and runs as an unprivileged user.
|
|
365
365
|
|
|
366
|
+
### Sign in with HydraDB (OAuth)
|
|
367
|
+
|
|
368
|
+
With three extra variables the hosted server also speaks the MCP authorization flow: a client that arrives with no credentials gets a `401` pointing at `/.well-known/oauth-protected-resource`, discovers the HydraDB dashboard as its authorization server, opens the browser, and the user signs in and picks a database. No key is ever pasted into a client.
|
|
369
|
+
|
|
370
|
+
| Variable | Description |
|
|
371
|
+
| --- | --- |
|
|
372
|
+
| `HYDRADB_OAUTH_ISSUER` | The authorization server, e.g. `https://app.hydradb.com`. Must match its `NEXTAUTH_URL` exactly |
|
|
373
|
+
| `HYDRADB_MCP_PUBLIC_URL` | This server's public URL as clients see it, e.g. `https://mcp.hydradb.com`. Tokens minted for any other audience are refused |
|
|
374
|
+
| `HYDRADB_OAUTH_INTROSPECTION_SECRET` | Shared secret the issuer's `/api/oauth/introspect` expects; must equal the dashboard's `MCP_INTROSPECTION_SECRET` |
|
|
375
|
+
|
|
376
|
+
All three are required together. With any of them missing, OAuth stays off and the server behaves exactly as before: no new routes, no new headers. Token introspection answers are memoised for up to 30 seconds, so disconnecting an app from the dashboard takes effect within that window.
|
|
377
|
+
|
|
378
|
+
OAuth is purely additive. API keys in `Authorization` / `X-HydraDB-Api-Key` headers, the `X-HydraDB-Database` header and the single-tenant environment fallback all keep working unchanged on the same URL.
|
|
379
|
+
|
|
366
380
|
### Server environment variables
|
|
367
381
|
|
|
382
|
+
|
|
368
383
|
These configure the HTTP process itself (the stdio server ignores them). All
|
|
369
384
|
the `HYDRADB_*` variables from [Environment Variables](#environment-variables)
|
|
370
385
|
also apply — as the single-tenant default and as operator settings.
|
package/dist/descriptions.d.ts
CHANGED
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
* replacement so the model prefers the new name.
|
|
8
8
|
*/
|
|
9
9
|
export declare const TOOL_DESCRIPTIONS: {
|
|
10
|
+
readonly hydradb_databases: {
|
|
11
|
+
readonly title: "List Hydra DB Databases";
|
|
12
|
+
readonly description: "List the databases this connection can address, with the default marked. Use it before passing `database` to another tool, when the user asks which databases exist, or when a call was refused for naming a database this connection is confined to. If the list has one entry, that is the only database this connection may use.";
|
|
13
|
+
readonly params: {};
|
|
14
|
+
};
|
|
10
15
|
readonly hydradb_query: {
|
|
11
16
|
readonly title: "Query Hydra DB";
|
|
12
17
|
readonly description: "Search Hydra DB for anything the user has stored: memories (facts, preferences, decisions, past conversations) and ingested knowledge sources (documents, files, playbooks). Returns matching chunks with their source id, a relevance score, and knowledge-graph context — the entity paths and relations that connect facts across separate sources.\n\nCALL THIS BEFORE ANSWERING whenever the answer could depend on the user's history, preferences, prior decisions, project details, or a document they have ingested — including when you are merely unsure. A query that returns nothing costs one call; answering from a blank slate costs the user a correction.\n\nSearches both families by default. Every result carries `[id: …]` — pass it to hydradb_inspect for the full source, or to hydradb_delete to remove it.\n\nExamples:\n {\"query\": \"how does the user prefer code review feedback\"}\n {\"query\": \"postgres connection pooling decision\", \"kind\": \"knowledge\"}\n {\"query\": \"deploy checklist\", \"mode\": \"fast\", \"max_results\": 5}";
|
package/dist/descriptions.js
CHANGED
|
@@ -117,8 +117,10 @@ const PARAM = {
|
|
|
117
117
|
"were actually removed. This is irreversible.",
|
|
118
118
|
delete_kind: "Which context family the ID belongs to: 'memory' or 'knowledge' (default: 'memory')",
|
|
119
119
|
memory_id: "The ID of the memory to delete",
|
|
120
|
-
database: "Database (tenant) to target for this request. Defaults to the
|
|
121
|
-
"
|
|
120
|
+
database: "Database (tenant) to target for this request. Defaults to the database this " +
|
|
121
|
+
"connection was set up with. Pass explicitly to work in another of the user's " +
|
|
122
|
+
"databases; hydradb_databases lists them. A connection the user confined to one " +
|
|
123
|
+
"database refuses any other name.",
|
|
122
124
|
collection: "Collection (sub-tenant) to target for this request. Defaults to the server's configured " +
|
|
123
125
|
"collection (or 'hydra-db-mcp'). Pass explicitly to switch collection scope per request.",
|
|
124
126
|
};
|
|
@@ -242,8 +244,14 @@ const GRAPH_ADMIN_BODY = `Manage graph databases and collections. Pick one \`act
|
|
|
242
244
|
The two drops are IRREVERSIBLE and there is no trash. Confirm with the user before either, and never infer one from a vague instruction — "clean up my graph" authorises nothing until the user has seen ${TOOL_NAMES.GRAPH_COLLECTIONS} output and named what should go.
|
|
243
245
|
|
|
244
246
|
There is no create-collection action: collections come into existence on their first write via ${TOOL_NAMES.GRAPH_QUERY}.`;
|
|
247
|
+
const DATABASES_BODY = `List the databases this connection can address, with the default marked. Use it before passing \`database\` to another tool, when the user asks which databases exist, or when a call was refused for naming a database this connection is confined to. If the list has one entry, that is the only database this connection may use.`;
|
|
245
248
|
export const TOOL_DESCRIPTIONS = {
|
|
246
249
|
// --- Canonical tools (CONTRACT §3) ---
|
|
250
|
+
[TOOL_NAMES.DATABASES]: {
|
|
251
|
+
title: "List Hydra DB Databases",
|
|
252
|
+
description: DATABASES_BODY,
|
|
253
|
+
params: {},
|
|
254
|
+
},
|
|
247
255
|
[TOOL_NAMES.QUERY]: {
|
|
248
256
|
title: "Query Hydra DB",
|
|
249
257
|
description: SEARCH_BODY,
|
|
@@ -475,6 +483,7 @@ THE TOOLS
|
|
|
475
483
|
- ${TOOL_NAMES.INSPECT} — the complete original content of one source you already have an id for.
|
|
476
484
|
- ${TOOL_NAMES.DELETE} — irreversible removal of one item by id.
|
|
477
485
|
- ${TOOL_NAMES.STATUS} — whether an ingested source has finished indexing. Ingestion is asynchronous, so a query issued straight after a save can legitimately return nothing.
|
|
486
|
+
- ${TOOL_NAMES.DATABASES} — which databases this connection can address, with the default marked. Every tool takes an optional \`database\`; call this before naming one, or when a call was refused because the user confined this connection to a single database.
|
|
478
487
|
|
|
479
488
|
Ids flow between these: ${TOOL_NAMES.QUERY} and ${TOOL_NAMES.LIST} emit them, ${TOOL_NAMES.INSPECT}, ${TOOL_NAMES.DELETE} and ${TOOL_NAMES.STATUS} accept them. Never invent one.
|
|
480
489
|
|
package/dist/descriptions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptions.js","sourceRoot":"","sources":["../src/descriptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEjE,4EAA4E;AAC5E,MAAM,KAAK,GAAG;IACb,KAAK,EACJ,oFAAoF;QACpF,mFAAmF;QACnF,kFAAkF;QAClF,uCAAuC;IACxC,UAAU,EACT,qEAAqE;QACrE,oEAAoE;QACpE,mFAAmF;IACpF,WAAW,EACV,8EAA8E;QAC9E,kFAAkF;QAClF,+EAA+E;QAC/E,WAAW;IACZ,IAAI,EACH,8EAA8E;QAC9E,iFAAiF;QACjF,mFAAmF;QACnF,kFAAkF;QAClF,mCAAmC;IACpC,gBAAgB,EACf,uEAAuE;QACvE,+EAA+E;QAC/E,8EAA8E;IAC/E,gBAAgB,EACf,gFAAgF;QAChF,+EAA+E;QAC/E,uDAAuD;IACxD,kBAAkB,EACjB,gFAAgF;QAChF,2EAA2E;QAC3E,6EAA6E;IAC9E,QAAQ,EACP,2EAA2E;QAC3E,gFAAgF;QAChF,wEAAwE;QACxE,0EAA0E;QAC1E,gFAAgF;QAChF,+EAA+E;QAC/E,0EAA0E;QAC1E,8CAA8C;IAC/C,cAAc,EACb,2EAA2E;QAC3E,0CAA0C;IAC3C,aAAa,EACZ,kFAAkF;QAClF,mFAAmF;QACnF,mFAAmF;QACnF,8CAA8C;IAC/C,IAAI,EACH,+EAA+E;QAC/E,kFAAkF;QAClF,mFAAmF;QACnF,wDAAwD;IACzD,WAAW,EACV,0EAA0E;QAC1E,wEAAwE;QACxE,+EAA+E;QAC/E,0DAA0D;IAC3D,KAAK,EACJ,gFAAgF;QAChF,gFAAgF;QAChF,+EAA+E;QAC/E,6EAA6E;IAC9E,SAAS,EACR,iFAAiF;QACjF,sFAAsF;QACtF,uFAAuF;QACvF,0FAA0F;IAC3F,SAAS,EACR,gFAAgF;QAChF,4EAA4E;QAC5E,4DAA4D;IAC7D,QAAQ,EACP,8EAA8E;QAC9E,iFAAiF;QACjF,qFAAqF;IACtF,6EAA6E;IAC7E,8DAA8D;IAC9D,8EAA8E;IAC9E,gBAAgB,EACf,8EAA8E;QAC9E,gFAAgF;QAChF,mFAAmF;QACnF,mFAAmF;QACnF,qBAAqB;IACtB,KAAK,EACJ,4EAA4E;QAC5E,iFAAiF;QACjF,oFAAoF;QACpF,+EAA+E;QAC/E,wBAAwB;IACzB,WAAW,EACV,oFAAoF;QACpF,sEAAsE;IACvE,KAAK,EAAE,uEAAuE;IAC9E,SAAS,EACR,kFAAkF;QAClF,8EAA8E;QAC9E,sEAAsE;IACvE,IAAI,EACH,4EAA4E;QAC5E,gFAAgF;QAChF,gEAAgE;IACjE,UAAU,EACT,oFAAoF;IACrF,IAAI,EACH,oFAAoF;QACpF,mFAAmF;QACnF,+BAA+B;IAChC,SAAS,EACR,iFAAiF;QACjF,oEAAoE;IACrE,MAAM,EACL,4EAA4E;QAC5E,gFAAgF;QAChF,+EAA+E;QAC/E,iFAAiF;QACjF,gFAAgF;IACjF,eAAe,EAAE,oCAAoC;IACrD,UAAU,EACT,iFAAiF;QACjF,iFAAiF;QACjF,iEAAiE;IAClE,YAAY,EACX,iFAAiF;QACjF,6EAA6E;IAC9E,WAAW,EACV,mFAAmF;QACnF,iDAAiD;IAClD,SAAS,EAAE,kEAAkE;IAC7E,UAAU,EACT,8EAA8E;QAC9E,+EAA+E;QAC/E,8CAA8C;IAC/C,WAAW,EACV,qFAAqF;IACtF,SAAS,EAAE,gCAAgC;IAC3C,QAAQ,EACP,
|
|
1
|
+
{"version":3,"file":"descriptions.js","sourceRoot":"","sources":["../src/descriptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEjE,4EAA4E;AAC5E,MAAM,KAAK,GAAG;IACb,KAAK,EACJ,oFAAoF;QACpF,mFAAmF;QACnF,kFAAkF;QAClF,uCAAuC;IACxC,UAAU,EACT,qEAAqE;QACrE,oEAAoE;QACpE,mFAAmF;IACpF,WAAW,EACV,8EAA8E;QAC9E,kFAAkF;QAClF,+EAA+E;QAC/E,WAAW;IACZ,IAAI,EACH,8EAA8E;QAC9E,iFAAiF;QACjF,mFAAmF;QACnF,kFAAkF;QAClF,mCAAmC;IACpC,gBAAgB,EACf,uEAAuE;QACvE,+EAA+E;QAC/E,8EAA8E;IAC/E,gBAAgB,EACf,gFAAgF;QAChF,+EAA+E;QAC/E,uDAAuD;IACxD,kBAAkB,EACjB,gFAAgF;QAChF,2EAA2E;QAC3E,6EAA6E;IAC9E,QAAQ,EACP,2EAA2E;QAC3E,gFAAgF;QAChF,wEAAwE;QACxE,0EAA0E;QAC1E,gFAAgF;QAChF,+EAA+E;QAC/E,0EAA0E;QAC1E,8CAA8C;IAC/C,cAAc,EACb,2EAA2E;QAC3E,0CAA0C;IAC3C,aAAa,EACZ,kFAAkF;QAClF,mFAAmF;QACnF,mFAAmF;QACnF,8CAA8C;IAC/C,IAAI,EACH,+EAA+E;QAC/E,kFAAkF;QAClF,mFAAmF;QACnF,wDAAwD;IACzD,WAAW,EACV,0EAA0E;QAC1E,wEAAwE;QACxE,+EAA+E;QAC/E,0DAA0D;IAC3D,KAAK,EACJ,gFAAgF;QAChF,gFAAgF;QAChF,+EAA+E;QAC/E,6EAA6E;IAC9E,SAAS,EACR,iFAAiF;QACjF,sFAAsF;QACtF,uFAAuF;QACvF,0FAA0F;IAC3F,SAAS,EACR,gFAAgF;QAChF,4EAA4E;QAC5E,4DAA4D;IAC7D,QAAQ,EACP,8EAA8E;QAC9E,iFAAiF;QACjF,qFAAqF;IACtF,6EAA6E;IAC7E,8DAA8D;IAC9D,8EAA8E;IAC9E,gBAAgB,EACf,8EAA8E;QAC9E,gFAAgF;QAChF,mFAAmF;QACnF,mFAAmF;QACnF,qBAAqB;IACtB,KAAK,EACJ,4EAA4E;QAC5E,iFAAiF;QACjF,oFAAoF;QACpF,+EAA+E;QAC/E,wBAAwB;IACzB,WAAW,EACV,oFAAoF;QACpF,sEAAsE;IACvE,KAAK,EAAE,uEAAuE;IAC9E,SAAS,EACR,kFAAkF;QAClF,8EAA8E;QAC9E,sEAAsE;IACvE,IAAI,EACH,4EAA4E;QAC5E,gFAAgF;QAChF,gEAAgE;IACjE,UAAU,EACT,oFAAoF;IACrF,IAAI,EACH,oFAAoF;QACpF,mFAAmF;QACnF,+BAA+B;IAChC,SAAS,EACR,iFAAiF;QACjF,oEAAoE;IACrE,MAAM,EACL,4EAA4E;QAC5E,gFAAgF;QAChF,+EAA+E;QAC/E,iFAAiF;QACjF,gFAAgF;IACjF,eAAe,EAAE,oCAAoC;IACrD,UAAU,EACT,iFAAiF;QACjF,iFAAiF;QACjF,iEAAiE;IAClE,YAAY,EACX,iFAAiF;QACjF,6EAA6E;IAC9E,WAAW,EACV,mFAAmF;QACnF,iDAAiD;IAClD,SAAS,EAAE,kEAAkE;IAC7E,UAAU,EACT,8EAA8E;QAC9E,+EAA+E;QAC/E,8CAA8C;IAC/C,WAAW,EACV,qFAAqF;IACtF,SAAS,EAAE,gCAAgC;IAC3C,QAAQ,EACP,8EAA8E;QAC9E,+EAA+E;QAC/E,iFAAiF;QACjF,kCAAkC;IACnC,UAAU,EACT,0FAA0F;QAC1F,yFAAyF;CACjF,CAAC;AAEX,iDAAiD;AACjD,MAAM,WAAW,GAAG;IACnB,KAAK,EACJ,+EAA+E;QAC/E,iFAAiF;QACjF,6EAA6E;QAC7E,gFAAgF;QAChF,+DAA+D;IAChE,MAAM,EACL,mFAAmF;QACnF,oFAAoF;QACpF,8EAA8E;QAC9E,uEAAuE;IACxE,QAAQ,EACP,2EAA2E;QAC3E,iFAAiF;QACjF,wEAAwE;IACzE,UAAU,EACT,6EAA6E;QAC7E,gFAAgF;QAChF,2BAA2B;IAC5B,QAAQ,EACP,+EAA+E;QAC/E,8EAA8E;QAC9E,wBAAwB;IACzB,MAAM,EACL,uEAAuE;QACvE,kDAAkD;IACnD,cAAc,EACb,6EAA6E;QAC7E,8EAA8E;QAC9E,yEAAyE;IAC1E,gBAAgB,EACf,+EAA+E;CACvE,CAAC;AAEX,SAAS,UAAU,CAAC,KAAa,EAAE,IAAY;IAC9C,OAAO,sBAAsB,kBAAkB,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,WAAW,GAAG;;;;;;;;;kEAS8C,CAAC;AAEnE,MAAM,UAAU,GAAG;;;;;;;;;;;;;;qHAckG,CAAC;AAEtH,MAAM,iBAAiB,GACtB,6EAA6E;IAC7E,qFAAqF;IACrF,oFAAoF;IACpF,6DAA6D,CAAC;AAE/D,MAAM,kBAAkB,GACvB,mFAAmF;IACnF,qFAAqF;IACrF,eAAe,CAAC;AAEjB,MAAM,iBAAiB,GACtB,mFAAmF;IACnF,iFAAiF;IACjF,kCAAkC,CAAC;AAEpC,MAAM,YAAY,GAAG;;;;gNAI2L,CAAC;AAEjN;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG;;;;;oGAK6E,CAAC;AAErG,MAAM,WAAW,GAAG,gRAAgR,CAAC;AAErS,MAAM,gBAAgB,GAAG,sNAAsN,UAAU,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;EAoB7P,WAAW;;EAEX,cAAc,EAAE,CAAC;AAEnB,MAAM,sBAAsB,GAAG;;4MAE6K,CAAC;AAE7M,MAAM,gBAAgB,GAAG;;;;;;2MAMkL,UAAU,CAAC,iBAAiB;;iGAEtI,UAAU,CAAC,WAAW,GAAG,CAAC;AAE3H,MAAM,cAAc,GAAG,uUAAuU,CAAC;AAE/V,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,wCAAwC;IAExC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACvB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,cAAc;QAC3B,MAAM,EAAE,EAAE;KACV;IAED,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACnB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,WAAW;QACxB,MAAM,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,gBAAgB;YAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACpB,KAAK,EAAE,sBAAsB;QAC7B,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,sBAAsB;QACtB,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,KAAK,EACJ,iFAAiF;gBACjF,iFAAiF;gBACjF,gFAAgF;gBAChF,4DAA4D;YAC7D,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAClB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE;;;;;;4IAM6H;QAC1I,MAAM,EAAE;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACrB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,YAAY;QACzB,MAAM,EAAE;YACP,SAAS,EAAE,KAAK,CAAC,eAAe;YAChC,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,MAAM,EAAE,KAAK,CAAC,YAAY;YAC1B,KAAK,EAAE,KAAK,CAAC,WAAW;YACxB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACpB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE;;;;oKAIqJ;QAClK,MAAM,EAAE;YACP,GAAG,EAAE,KAAK,CAAC,UAAU;YACrB,EAAE,EAAE,KAAK,CAAC,SAAS;YACnB,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACpB,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACV,sEAAsE;YACtE,4EAA4E;YAC5E,yEAAyE;YACzE,uEAAuE;YACvE,sEAAsE;YACtE,0CAA0C;QAC3C,MAAM,EAAE;YACP,GAAG,EAAE,yDAAyD;YAC9D,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,sCAAsC;IAEtC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACzB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,gBAAgB;QAC7B,MAAM,EAAE;YACP,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC9B;KACD;IAED,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;QAC/B,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,sBAAsB;QACnC,MAAM,EAAE;YACP,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC9B;KACD;IAED,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACzB,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,gBAAgB;QAC7B,MAAM,EAAE;YACP,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,QAAQ,EAAE,WAAW,CAAC,cAAc;YACpC,UAAU,EAAE,WAAW,CAAC,gBAAgB;SACxC;KACD;IAED,6BAA6B;IAE7B,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACpB,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;QACvD,MAAM,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACnB,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;QACrD,MAAM,EAAE;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,wEAAwE;YACxE,yDAAyD;YACzD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;QACjC,KAAK,EAAE,kCAAkC;QACzC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;QAC1E,MAAM,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EACR,qEAAqE;YACtE,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QAC3B,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,aAAa,EAAE,kBAAkB,CAAC;QACrE,MAAM,EAAE;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAC1B,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY,EAAE,iBAAiB,CAAC;QACnE,MAAM,EAAE;YACP,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QAC3B,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC;QAC/D,MAAM,EAAE;YACP,SAAS,EAAE,KAAK,CAAC,eAAe;YAChC,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,MAAM,EAAE,KAAK,CAAC,YAAY;YAC1B,KAAK,EAAE,KAAK,CAAC,WAAW;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;IAED,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QAC3B,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,UAAU,CACtB,UAAU,CAAC,aAAa,EACxB,4FAA4F,CAC5F;QACD,MAAM,EAAE;YACP,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC5B;KACD;CACQ,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG,wMAAwM,UAAU,CAAC,KAAK;;;;6JAI9F,UAAU,CAAC,KAAK;uIACtC,UAAU,CAAC,MAAM;;4BAE5H,UAAU,CAAC,MAAM,sBAAsB,UAAU,CAAC,MAAM,wCAAwC,UAAU,CAAC,KAAK;;;;IAIxI,UAAU,CAAC,KAAK;IAChB,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,IAAI,2GAA2G,UAAU,CAAC,KAAK;IAC1I,UAAU,CAAC,OAAO;IAClB,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,SAAS;;0BAEE,UAAU,CAAC,KAAK,QAAQ,UAAU,CAAC,IAAI,eAAe,UAAU,CAAC,OAAO,KAAK,UAAU,CAAC,MAAM,QAAQ,UAAU,CAAC,MAAM;;;;+LAI8C,UAAU,CAAC,KAAK,+BAA+B,UAAU,CAAC,WAAW;;IAEhQ,UAAU,CAAC,WAAW;IACtB,UAAU,CAAC,iBAAiB;IAC5B,UAAU,CAAC,WAAW;;qFAE2D,UAAU,CAAC,KAAK,8CAA8C,UAAU,CAAC,WAAW;;;;8OAIqE,CAAC"}
|
package/dist/http-config.d.ts
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* to the environment only to keep the single-tenant self-hosting story (set the
|
|
21
21
|
* env, expose the port, done) working unchanged.
|
|
22
22
|
*/
|
|
23
|
+
import type { OAuthConfig } from "./oauth.js";
|
|
23
24
|
import { type EnvSource, type GraphConfig } from "./config.js";
|
|
24
25
|
export interface HttpServerConfig {
|
|
25
26
|
/** TCP port to listen on. */
|
|
@@ -40,6 +41,12 @@ export interface HttpServerConfig {
|
|
|
40
41
|
* subnet preset so the real client IP is recovered without trusting all hops.
|
|
41
42
|
*/
|
|
42
43
|
trustProxy: boolean | number | string;
|
|
44
|
+
/**
|
|
45
|
+
* OAuth resource-server settings, or absent when OAuth is off. Resolved
|
|
46
|
+
* from the environment by {@link resolveHttpServerConfig}; tests pass it
|
|
47
|
+
* directly.
|
|
48
|
+
*/
|
|
49
|
+
oauth?: OAuthConfig | null;
|
|
43
50
|
}
|
|
44
51
|
export declare const DEFAULT_PORT = 8080;
|
|
45
52
|
export declare const DEFAULT_BIND_ADDRESS = "127.0.0.1";
|
|
@@ -105,6 +112,10 @@ export interface RequestCredentials {
|
|
|
105
112
|
apiKey: string;
|
|
106
113
|
database: string;
|
|
107
114
|
collection: string;
|
|
115
|
+
/** Databases a per-call override may name; absent means any. */
|
|
116
|
+
allowedDatabases?: string[];
|
|
117
|
+
/** Collections a per-call override may name; absent means any. */
|
|
118
|
+
allowedCollections?: string[];
|
|
108
119
|
baseUrl?: string;
|
|
109
120
|
timeoutSeconds?: number;
|
|
110
121
|
maxRetries?: number;
|
|
@@ -148,7 +159,26 @@ export type CredentialResolution = {
|
|
|
148
159
|
* request. `baseUrl`/`timeoutSeconds`/`maxRetries` are read from the environment
|
|
149
160
|
* only — they are the operator's, not the caller's (see {@link RequestCredentials}).
|
|
150
161
|
*/
|
|
151
|
-
|
|
162
|
+
/**
|
|
163
|
+
* An identity established BEFORE the headers are read: what an OAuth access
|
|
164
|
+
* token was found to stand for.
|
|
165
|
+
*
|
|
166
|
+
* It is passed in rather than resolved here because obtaining it is an
|
|
167
|
+
* asynchronous call to the authorization server, and this resolver is
|
|
168
|
+
* deliberately synchronous and pure. When present it replaces the header
|
|
169
|
+
* credentials entirely: the user approved this exact scope on the consent
|
|
170
|
+
* screen, and nothing in the request may widen it.
|
|
171
|
+
*/
|
|
172
|
+
export interface ResolvedIdentity {
|
|
173
|
+
apiKey: string;
|
|
174
|
+
database?: string;
|
|
175
|
+
collection?: string;
|
|
176
|
+
/** See IntrospectedToken.allowedDatabases. */
|
|
177
|
+
allowedDatabases?: string[];
|
|
178
|
+
/** See IntrospectedToken.allowedCollections. */
|
|
179
|
+
allowedCollections?: string[];
|
|
180
|
+
}
|
|
181
|
+
export declare function resolveRequestCredentials(headers: RequestHeaders, env?: EnvSource, identity?: ResolvedIdentity): CredentialResolution;
|
|
152
182
|
/** A JSON-RPC error body, so every HTTP failure speaks the protocol's dialect. */
|
|
153
183
|
export declare function jsonRpcError(code: number, message: string): {
|
|
154
184
|
jsonrpc: "2.0";
|
package/dist/http-config.js
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* to the environment only to keep the single-tenant self-hosting story (set the
|
|
21
21
|
* env, expose the port, done) working unchanged.
|
|
22
22
|
*/
|
|
23
|
+
import { resolveOAuthConfig } from "./oauth.js";
|
|
23
24
|
import { DEFAULT_COLLECTION, nonNegativeInt, positiveInt, readEnv, resolveGraphConfig, } from "./config.js";
|
|
24
25
|
export const DEFAULT_PORT = 8080;
|
|
25
26
|
export const DEFAULT_BIND_ADDRESS = "127.0.0.1";
|
|
@@ -93,6 +94,7 @@ export function resolveHttpServerConfig(env = process.env) {
|
|
|
93
94
|
allowedOrigins: parseList(env.ALLOWED_ORIGINS),
|
|
94
95
|
allowedHosts: buildAllowedHosts(port, parseList(env.ALLOWED_HOSTS)),
|
|
95
96
|
trustProxy: parseTrustProxy(env.TRUST_PROXY),
|
|
97
|
+
oauth: resolveOAuthConfig(env),
|
|
96
98
|
};
|
|
97
99
|
}
|
|
98
100
|
// --- Per-request tenant credentials ---
|
|
@@ -134,30 +136,9 @@ function bearerToken(authorization) {
|
|
|
134
136
|
return match[1].trim() || undefined;
|
|
135
137
|
return authorization.trim() || undefined;
|
|
136
138
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
*
|
|
141
|
-
* The API key and the database resolve TOGETHER, not field-by-field, which is
|
|
142
|
-
* the security-relevant part:
|
|
143
|
-
* - When the key comes from a request header, the request is
|
|
144
|
-
* "caller-authenticated" and its database MUST also come from a header. The
|
|
145
|
-
* env is NOT consulted for the database, so a caller who sends their own key
|
|
146
|
-
* but omits `X-HydraDB-Database` is refused (400) rather than silently run
|
|
147
|
-
* against the operator's env database. Likewise the graph scope defaults to
|
|
148
|
-
* the request's own database, never the operator's `HYDRADB_GRAPH_DATABASE`.
|
|
149
|
-
* - When there is no key header, the request is unauthenticated and falls back
|
|
150
|
-
* entirely to the operator's env credentials — the single-tenant self-host
|
|
151
|
-
* case, identical to the stdio server. A hosted, multi-tenant process sets
|
|
152
|
-
* no tenant env, so such a request is refused (401).
|
|
153
|
-
*
|
|
154
|
-
* Resolving field-by-field instead would let a caller's key pair with the
|
|
155
|
-
* operator's database (or graph namespace), mixing two identities into one
|
|
156
|
-
* request. `baseUrl`/`timeoutSeconds`/`maxRetries` are read from the environment
|
|
157
|
-
* only — they are the operator's, not the caller's (see {@link RequestCredentials}).
|
|
158
|
-
*/
|
|
159
|
-
export function resolveRequestCredentials(headers, env = process.env) {
|
|
160
|
-
const headerKey = bearerToken(headerValue(headers, HEADER_AUTHORIZATION)) ??
|
|
139
|
+
export function resolveRequestCredentials(headers, env = process.env, identity) {
|
|
140
|
+
const headerKey = identity?.apiKey ??
|
|
141
|
+
bearerToken(headerValue(headers, HEADER_AUTHORIZATION)) ??
|
|
161
142
|
headerValue(headers, HEADER_API_KEY);
|
|
162
143
|
// Whether the CALLER authenticated this request with their own key decides
|
|
163
144
|
// whether the operator's env is allowed to supply the rest of the identity.
|
|
@@ -174,7 +155,12 @@ export function resolveRequestCredentials(headers, env = process.env) {
|
|
|
174
155
|
"(or the `X-HydraDB-Api-Key` header). Get a key at https://app.hydradb.com.",
|
|
175
156
|
};
|
|
176
157
|
}
|
|
177
|
-
|
|
158
|
+
// An OAuth identity is what the user approved on the consent screen. No
|
|
159
|
+
// request header may alter it: the client holding the token could otherwise
|
|
160
|
+
// re-scope the connection after consent by adding a header. Per-call tool
|
|
161
|
+
// arguments remain the sanctioned way to name another database, and those
|
|
162
|
+
// are checked against the grant's allowed list.
|
|
163
|
+
const headerDatabase = identity ? identity.database : headerValue(headers, HEADER_DATABASE);
|
|
178
164
|
// A caller-authenticated request takes its database ONLY from the header;
|
|
179
165
|
// the env database belongs to the operator's identity, not the caller's.
|
|
180
166
|
const database = callerAuthenticated
|
|
@@ -190,7 +176,7 @@ export function resolveRequestCredentials(headers, env = process.env) {
|
|
|
190
176
|
}
|
|
191
177
|
// Collection is a partition WITHIN the resolved database, not a cross-tenant
|
|
192
178
|
// boundary, so an env default is safe for either mode.
|
|
193
|
-
const collection = headerValue(headers, HEADER_COLLECTION) ??
|
|
179
|
+
const collection = (identity ? identity.collection : headerValue(headers, HEADER_COLLECTION)) ??
|
|
194
180
|
readEnv(env, "HYDRADB_COLLECTION", "HYDRA_DB_SUB_TENANT_ID", noopWarn) ??
|
|
195
181
|
DEFAULT_COLLECTION;
|
|
196
182
|
// Operator-owned transport knobs. Same env vars, same parsing as resolveConfig.
|
|
@@ -203,10 +189,17 @@ export function resolveRequestCredentials(headers, env = process.env) {
|
|
|
203
189
|
apiKey,
|
|
204
190
|
database,
|
|
205
191
|
collection,
|
|
192
|
+
...(identity?.allowedDatabases ? { allowedDatabases: identity.allowedDatabases } : {}),
|
|
193
|
+
...(identity?.allowedCollections
|
|
194
|
+
? { allowedCollections: identity.allowedCollections }
|
|
195
|
+
: {}),
|
|
206
196
|
...(baseUrl != null ? { baseUrl } : {}),
|
|
207
197
|
...(timeoutSeconds != null ? { timeoutSeconds } : {}),
|
|
208
198
|
...(maxRetries != null ? { maxRetries } : {}),
|
|
209
|
-
graph: resolveRequestGraphConfig(
|
|
199
|
+
graph: resolveRequestGraphConfig(
|
|
200
|
+
// Same rule for the graph namespace: an OAuth connection's graph scope
|
|
201
|
+
// derives from the approved database, never from a header.
|
|
202
|
+
identity ? {} : headers, env, database, callerAuthenticated, identity),
|
|
210
203
|
},
|
|
211
204
|
};
|
|
212
205
|
}
|
|
@@ -224,7 +217,7 @@ export function resolveRequestCredentials(headers, env = process.env) {
|
|
|
224
217
|
* memory database — which, because the two are genuinely separate stores, is a
|
|
225
218
|
* real need.
|
|
226
219
|
*/
|
|
227
|
-
function resolveRequestGraphConfig(headers, env, database, callerAuthenticated) {
|
|
220
|
+
function resolveRequestGraphConfig(headers, env, database, callerAuthenticated, identity) {
|
|
228
221
|
// For a caller-authenticated request the fallback database is the request's
|
|
229
222
|
// own, so `resolveGraphConfig`'s env default is deliberately not consulted.
|
|
230
223
|
const base = resolveGraphConfig(env, database);
|
|
@@ -232,7 +225,14 @@ function resolveRequestGraphConfig(headers, env, database, callerAuthenticated)
|
|
|
232
225
|
return {
|
|
233
226
|
enabled: base.enabled,
|
|
234
227
|
database: headerValue(headers, HEADER_GRAPH_DATABASE) ?? defaultDatabase,
|
|
235
|
-
collection
|
|
228
|
+
// For an OAuth connection the graph collection defaults to the one the
|
|
229
|
+
// user approved, NOT the operator's `HYDRADB_GRAPH_COLLECTION`. On a
|
|
230
|
+
// hosted process that environment value is one namespace shared by every
|
|
231
|
+
// tenant, so inheriting it would run one user's graph calls somewhere
|
|
232
|
+
// they never approved and everyone else can reach.
|
|
233
|
+
collection: identity?.collection ??
|
|
234
|
+
headerValue(headers, HEADER_GRAPH_COLLECTION) ??
|
|
235
|
+
base.collection,
|
|
236
236
|
};
|
|
237
237
|
}
|
|
238
238
|
/**
|
package/dist/http-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-config.js","sourceRoot":"","sources":["../src/http-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"http-config.js","sourceRoot":"","sources":["../src/http-config.ts"],"names":[],"mappings":"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"}
|
package/dist/http.js
CHANGED
|
@@ -24,6 +24,7 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
|
|
|
24
24
|
import { HydraDB } from "./hydra/index.js";
|
|
25
25
|
import { buildAllowedHosts, jsonRpcError, parseList, parsePort, resolveHttpServerConfig, resolveRequestCredentials, } from "./http-config.js";
|
|
26
26
|
import { logger } from "./logger.js";
|
|
27
|
+
import { introspect, isAccessToken, metadataUrl, protectedResourceMetadata, wwwAuthenticate, } from "./oauth.js";
|
|
27
28
|
import { awaitInFlight, beginShutdown, createHydraDBServer, inFlightCount, } from "./server.js";
|
|
28
29
|
/**
|
|
29
30
|
* The largest request body accepted before parsing.
|
|
@@ -49,6 +50,14 @@ const MAX_REQUEST_BODY = "8mb";
|
|
|
49
50
|
function banner(message) {
|
|
50
51
|
console.error(`[hydradb-mcp] ${message}`);
|
|
51
52
|
}
|
|
53
|
+
/** The bearer value from an `Authorization` header, scheme-insensitive. */
|
|
54
|
+
function bearerFromHeader(value) {
|
|
55
|
+
const raw = Array.isArray(value) ? value[0] : value;
|
|
56
|
+
if (!raw)
|
|
57
|
+
return undefined;
|
|
58
|
+
const match = /^\s*Bearer\s+(.+)$/i.exec(raw);
|
|
59
|
+
return (match ? match[1] : raw).trim() || undefined;
|
|
60
|
+
}
|
|
52
61
|
/** JSON-RPC error codes used for transport-level failures (spec: -32000 range). */
|
|
53
62
|
const JSONRPC_UNAUTHORIZED = -32001;
|
|
54
63
|
const JSONRPC_BAD_REQUEST = -32602;
|
|
@@ -64,6 +73,10 @@ const JSONRPC_MISDIRECTED = -32000;
|
|
|
64
73
|
export function createHttpApp(config) {
|
|
65
74
|
const { bindAddress, allowedOrigins, allowedHosts } = config;
|
|
66
75
|
const allowsAllOrigins = allowedOrigins.includes("*");
|
|
76
|
+
// OAuth is a per-deployment capability, not a per-request one, so it is
|
|
77
|
+
// resolved once. `null` means every OAuth surface below is absent and this
|
|
78
|
+
// server is byte-for-byte the pre-OAuth one.
|
|
79
|
+
const oauth = config.oauth ?? null;
|
|
67
80
|
const app = express();
|
|
68
81
|
// Off by default so a direct client cannot spoof `X-Forwarded-*`; a
|
|
69
82
|
// deployment behind a known proxy sets TRUST_PROXY to recover the real client
|
|
@@ -124,7 +137,11 @@ export function createHttpApp(config) {
|
|
|
124
137
|
},
|
|
125
138
|
// The client reads the session id and negotiated protocol version off
|
|
126
139
|
// the response; without exposing them a browser cannot complete a session.
|
|
127
|
-
|
|
140
|
+
// WWW-Authenticate is the OAuth discovery entry point: a browser-based
|
|
141
|
+
// client (claude.ai) that cannot read it off the 401 never learns where
|
|
142
|
+
// to log in, so the whole flow silently fails for exactly the clients
|
|
143
|
+
// OAuth exists for.
|
|
144
|
+
exposedHeaders: ["Mcp-Session-Id", "Mcp-Protocol-Version", "WWW-Authenticate"],
|
|
128
145
|
allowedHeaders: [
|
|
129
146
|
"Content-Type",
|
|
130
147
|
"Authorization",
|
|
@@ -157,16 +174,68 @@ export function createHttpApp(config) {
|
|
|
157
174
|
// --- The MCP endpoint ---
|
|
158
175
|
// Serves MCP at both the root `/` (e.g. https://mcp.hydradb.com) and `/mcp`
|
|
159
176
|
// so clients pointing at either URL connect seamlessly.
|
|
177
|
+
// --- OAuth Protected Resource Metadata (RFC 9728) ---
|
|
178
|
+
//
|
|
179
|
+
// The one document a client needs to get from "401" to "open the browser at
|
|
180
|
+
// the right place". Served at the root form and the `/mcp` path form, since
|
|
181
|
+
// a client tries the path-inserted URL first when the endpoint has a path.
|
|
182
|
+
// Registered only when OAuth is configured, so an unconfigured server has
|
|
183
|
+
// no new routes at all.
|
|
184
|
+
if (oauth) {
|
|
185
|
+
app.get(["/.well-known/oauth-protected-resource", "/.well-known/oauth-protected-resource/mcp"], (_req, res) => {
|
|
186
|
+
res.setHeader("Cache-Control", "public, max-age=300");
|
|
187
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
188
|
+
res.json(protectedResourceMetadata(oauth));
|
|
189
|
+
});
|
|
190
|
+
}
|
|
160
191
|
app.all(["/", "/mcp"], async (req, res) => {
|
|
192
|
+
// An OAuth access token arrives in the same `Authorization: Bearer` slot
|
|
193
|
+
// an API key does. It is told apart by prefix and exchanged, via the
|
|
194
|
+
// issuer, for the API key and scope the user approved on the consent
|
|
195
|
+
// screen. From there it is indistinguishable from a caller who sent that
|
|
196
|
+
// key directly: the same resolver runs, and the tool layer never learns
|
|
197
|
+
// OAuth exists.
|
|
198
|
+
let identity;
|
|
199
|
+
const bearer = bearerFromHeader(req.headers.authorization);
|
|
200
|
+
if (oauth && isAccessToken(bearer)) {
|
|
201
|
+
const result = await introspect(oauth, bearer);
|
|
202
|
+
if (!result.ok) {
|
|
203
|
+
if (result.reason === "unavailable") {
|
|
204
|
+
logger.error("token introspection unavailable", { detail: result.detail });
|
|
205
|
+
res
|
|
206
|
+
.status(503)
|
|
207
|
+
.json(jsonRpcError(JSONRPC_INTERNAL_ERROR, "Authorization service unavailable"));
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
res.setHeader("WWW-Authenticate", wwwAuthenticate(oauth, "invalid_token", result.reason === "wrong_audience"
|
|
211
|
+
? "token was not issued for this server"
|
|
212
|
+
: "token is invalid, expired or revoked"));
|
|
213
|
+
res
|
|
214
|
+
.status(401)
|
|
215
|
+
.json(jsonRpcError(JSONRPC_UNAUTHORIZED, "Invalid or expired access token"));
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const t = result.token;
|
|
219
|
+
identity = {
|
|
220
|
+
apiKey: t.apiKey,
|
|
221
|
+
...(t.database != null ? { database: t.database } : {}),
|
|
222
|
+
...(t.collection != null ? { collection: t.collection } : {}),
|
|
223
|
+
...(t.allowedDatabases ? { allowedDatabases: t.allowedDatabases } : {}),
|
|
224
|
+
...(t.allowedCollections ? { allowedCollections: t.allowedCollections } : {}),
|
|
225
|
+
};
|
|
226
|
+
// A token is a credential; nothing carrying one may be cached.
|
|
227
|
+
res.setHeader("Cache-Control", "no-store");
|
|
228
|
+
}
|
|
161
229
|
// Who is this request for? On a hosted process the answer lives entirely
|
|
162
230
|
// in the request, so it is resolved here and a missing/incomplete answer
|
|
163
231
|
// is refused before any server is built.
|
|
164
|
-
const resolution = resolveRequestCredentials(req.headers, process.env);
|
|
232
|
+
const resolution = resolveRequestCredentials(req.headers, process.env, identity);
|
|
165
233
|
if (!resolution.ok) {
|
|
166
234
|
// 401 gets a WWW-Authenticate header so a spec-compliant client knows
|
|
167
|
-
// how to authenticate rather than just seeing a bare refusal.
|
|
235
|
+
// how to authenticate rather than just seeing a bare refusal. With
|
|
236
|
+
// OAuth configured that header is the whole discovery entry point.
|
|
168
237
|
if (resolution.status === 401) {
|
|
169
|
-
res.setHeader("WWW-Authenticate", 'Bearer realm="Hydra DB MCP"');
|
|
238
|
+
res.setHeader("WWW-Authenticate", oauth ? wwwAuthenticate(oauth) : 'Bearer realm="Hydra DB MCP"');
|
|
170
239
|
}
|
|
171
240
|
res
|
|
172
241
|
.status(resolution.status)
|
|
@@ -181,13 +250,17 @@ export function createHttpApp(config) {
|
|
|
181
250
|
token: creds.apiKey,
|
|
182
251
|
database: creds.database,
|
|
183
252
|
collection: creds.collection,
|
|
253
|
+
...(creds.allowedDatabases ? { allowedDatabases: creds.allowedDatabases } : {}),
|
|
254
|
+
...(creds.allowedCollections
|
|
255
|
+
? { allowedCollections: creds.allowedCollections }
|
|
256
|
+
: {}),
|
|
184
257
|
...(creds.baseUrl != null ? { baseUrl: creds.baseUrl } : {}),
|
|
185
258
|
...(creds.timeoutSeconds != null
|
|
186
259
|
? { timeoutSeconds: creds.timeoutSeconds }
|
|
187
260
|
: {}),
|
|
188
261
|
...(creds.maxRetries != null ? { maxRetries: creds.maxRetries } : {}),
|
|
189
262
|
});
|
|
190
|
-
const server = createHydraDBServer(hydra, creds.graph);
|
|
263
|
+
const server = createHydraDBServer(hydra, creds.graph, { oauthTools: identity != null });
|
|
191
264
|
// Stateless: this pair serves exactly this request and is discarded when
|
|
192
265
|
// the response closes. Tearing them down on `close` — which fires for a
|
|
193
266
|
// clean end AND for the error path below (it sends a response, which then
|
|
@@ -320,6 +393,10 @@ function main() {
|
|
|
320
393
|
"multi-tenant deployment so each caller must authenticate. See SECURITY.md.");
|
|
321
394
|
}
|
|
322
395
|
const app = createHttpApp(config);
|
|
396
|
+
if (config.oauth) {
|
|
397
|
+
banner(`OAuth enabled: issuer ${config.oauth.issuer}, resource ${config.oauth.resource} ` +
|
|
398
|
+
`(metadata at ${metadataUrl(config.oauth)})`);
|
|
399
|
+
}
|
|
323
400
|
const httpServer = app
|
|
324
401
|
.listen(config.port, config.bindAddress, () => {
|
|
325
402
|
// Startup banners: on stderr so an operator sees where it bound
|
package/dist/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|