@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/dist/hydra/client.d.ts
CHANGED
|
@@ -47,6 +47,14 @@ export interface HydraConfig {
|
|
|
47
47
|
database: string;
|
|
48
48
|
/** Collection scope (canonical name for the sub-tenant). */
|
|
49
49
|
collection?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Databases a per-call `database` override may name. Absent means any.
|
|
52
|
+
* Set from an OAuth grant the user confined to specific databases; the
|
|
53
|
+
* default `database` is always allowed.
|
|
54
|
+
*/
|
|
55
|
+
allowedDatabases?: string[];
|
|
56
|
+
/** Collections a per-call `collection` override may name. Absent means any. */
|
|
57
|
+
allowedCollections?: string[];
|
|
50
58
|
/** Optional base URL override; defaults to the SDK's environment. */
|
|
51
59
|
baseUrl?: string;
|
|
52
60
|
/**
|
|
@@ -177,16 +185,45 @@ type ScopeFields = {
|
|
|
177
185
|
database: string;
|
|
178
186
|
collection?: string;
|
|
179
187
|
};
|
|
188
|
+
/**
|
|
189
|
+
* A per-call `database` named one the connection is not allowed to touch.
|
|
190
|
+
*
|
|
191
|
+
* Written for the agent that reads it as a tool error: it names what IS
|
|
192
|
+
* allowed and where the choice was made, so the agent can either use an
|
|
193
|
+
* allowed database or tell the user to reconnect with wider access, rather
|
|
194
|
+
* than retrying blindly.
|
|
195
|
+
*/
|
|
196
|
+
export declare class ScopeNotAllowedError extends Error {
|
|
197
|
+
readonly kind: "database" | "collection";
|
|
198
|
+
readonly requested: string;
|
|
199
|
+
readonly allowed: readonly string[];
|
|
200
|
+
constructor(kind: "database" | "collection", requested: string, allowed: readonly string[]);
|
|
201
|
+
}
|
|
202
|
+
/** Kept for the name callers already import; the database case of the above. */
|
|
203
|
+
export declare const DatabaseNotAllowedError: typeof ScopeNotAllowedError;
|
|
204
|
+
/** Throws unless `database` is one the connection may use. */
|
|
205
|
+
export declare function assertDatabaseAllowed(database: string, allowed: readonly string[] | undefined): void;
|
|
206
|
+
/**
|
|
207
|
+
* Throws unless `collection` is one the connection may use.
|
|
208
|
+
*
|
|
209
|
+
* Separate from the database check because confinement has to cover both:
|
|
210
|
+
* a caller pinned to one database can otherwise step sideways into a
|
|
211
|
+
* collection the consent screen never showed, and `drop_collection` makes
|
|
212
|
+
* that destructive.
|
|
213
|
+
*/
|
|
214
|
+
export declare function assertCollectionAllowed(collection: string, allowed: readonly string[] | undefined): void;
|
|
180
215
|
declare abstract class Resource {
|
|
181
216
|
protected readonly sdk: HydraDBClient;
|
|
182
217
|
private readonly database;
|
|
183
218
|
private readonly collection?;
|
|
184
|
-
|
|
219
|
+
private readonly allowedDatabases?;
|
|
220
|
+
private readonly allowedCollections?;
|
|
221
|
+
protected constructor(sdk: HydraDBClient, database: string, collection?: string | undefined, allowedDatabases?: readonly string[] | undefined, allowedCollections?: readonly string[] | undefined);
|
|
185
222
|
protected scope(override?: string, dbOverride?: string): ScopeFields;
|
|
186
223
|
protected call<T>(path: string, fn: () => Promise<unknown>): Promise<T>;
|
|
187
224
|
}
|
|
188
225
|
export declare class ContextResource extends Resource {
|
|
189
|
-
constructor(sdk: HydraDBClient, database: string, collection?: string);
|
|
226
|
+
constructor(sdk: HydraDBClient, database: string, collection?: string, allowedDatabases?: readonly string[], allowedCollections?: readonly string[]);
|
|
190
227
|
/**
|
|
191
228
|
* The single retrieval entry point (SDK `client.query`).
|
|
192
229
|
*
|
|
@@ -214,7 +251,7 @@ export declare class ContextResource extends Resource {
|
|
|
214
251
|
delete(params: DeleteParams, opts?: RequestOptions): Promise<SDK.SourcesMemoryDeleteResponse>;
|
|
215
252
|
}
|
|
216
253
|
export declare class DatabasesResource extends Resource {
|
|
217
|
-
constructor(sdk: HydraDBClient, database: string, collection?: string);
|
|
254
|
+
constructor(sdk: HydraDBClient, database: string, collection?: string, allowedDatabases?: readonly string[], allowedCollections?: readonly string[]);
|
|
218
255
|
create(params: CreateDatabaseParams): Promise<SDK.TenantsTenantCreateAcceptedResponse>;
|
|
219
256
|
delete(database: string): Promise<SDK.TenantsTenantDeleteResponse>;
|
|
220
257
|
list(): Promise<SDK.TenantsTenantIdsResponse>;
|
|
@@ -231,6 +268,14 @@ export declare class DatabasesResource extends Resource {
|
|
|
231
268
|
export declare class HydraDB {
|
|
232
269
|
readonly context: ContextResource;
|
|
233
270
|
readonly databases: DatabasesResource;
|
|
271
|
+
/** The default database every unscoped call uses. */
|
|
272
|
+
readonly database: string;
|
|
273
|
+
/** Databases a per-call override may name; undefined means any. */
|
|
274
|
+
readonly allowedDatabases?: readonly string[];
|
|
275
|
+
/** Collections a per-call override may name; undefined means any. */
|
|
276
|
+
readonly allowedCollections?: readonly string[];
|
|
277
|
+
/** The default collection every unscoped call uses. */
|
|
278
|
+
readonly collection?: string;
|
|
234
279
|
/**
|
|
235
280
|
* BYOG graph operations. Not backed by the SDK — see ./graph.ts for why —
|
|
236
281
|
* but exposed here so callers reach every HydraDB surface through one object.
|
package/dist/hydra/client.js
CHANGED
|
@@ -47,15 +47,64 @@ const STDERR_LOGGER = {
|
|
|
47
47
|
function req(opts) {
|
|
48
48
|
return opts?.signal ? { abortSignal: opts.signal } : undefined;
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* A per-call `database` named one the connection is not allowed to touch.
|
|
52
|
+
*
|
|
53
|
+
* Written for the agent that reads it as a tool error: it names what IS
|
|
54
|
+
* allowed and where the choice was made, so the agent can either use an
|
|
55
|
+
* allowed database or tell the user to reconnect with wider access, rather
|
|
56
|
+
* than retrying blindly.
|
|
57
|
+
*/
|
|
58
|
+
export class ScopeNotAllowedError extends Error {
|
|
59
|
+
constructor(kind, requested, allowed) {
|
|
60
|
+
super(`This connection is confined to ${kind} ${allowed.map((d) => `"${d}"`).join(", ")} ` +
|
|
61
|
+
`and cannot use ${kind} "${requested}". The user chose this when approving the ` +
|
|
62
|
+
`connection; to use another ${kind} they must reconnect and allow it.`);
|
|
63
|
+
this.kind = kind;
|
|
64
|
+
this.requested = requested;
|
|
65
|
+
this.allowed = allowed;
|
|
66
|
+
this.name = "ScopeNotAllowedError";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Kept for the name callers already import; the database case of the above. */
|
|
70
|
+
export const DatabaseNotAllowedError = ScopeNotAllowedError;
|
|
71
|
+
/** Throws unless `database` is one the connection may use. */
|
|
72
|
+
export function assertDatabaseAllowed(database, allowed) {
|
|
73
|
+
if (allowed && !allowed.includes(database)) {
|
|
74
|
+
throw new ScopeNotAllowedError("database", database, allowed);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Throws unless `collection` is one the connection may use.
|
|
79
|
+
*
|
|
80
|
+
* Separate from the database check because confinement has to cover both:
|
|
81
|
+
* a caller pinned to one database can otherwise step sideways into a
|
|
82
|
+
* collection the consent screen never showed, and `drop_collection` makes
|
|
83
|
+
* that destructive.
|
|
84
|
+
*/
|
|
85
|
+
export function assertCollectionAllowed(collection, allowed) {
|
|
86
|
+
if (allowed && !allowed.includes(collection)) {
|
|
87
|
+
throw new ScopeNotAllowedError("collection", collection, allowed);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
50
90
|
class Resource {
|
|
51
|
-
constructor(sdk, database, collection) {
|
|
91
|
+
constructor(sdk, database, collection, allowedDatabases, allowedCollections) {
|
|
52
92
|
this.sdk = sdk;
|
|
53
93
|
this.database = database;
|
|
54
94
|
this.collection = collection;
|
|
95
|
+
this.allowedDatabases = allowedDatabases;
|
|
96
|
+
this.allowedCollections = allowedCollections;
|
|
55
97
|
}
|
|
56
98
|
scope(override, dbOverride) {
|
|
57
99
|
const database = dbOverride?.trim() || this.database;
|
|
100
|
+
// Enforced HERE, on the one path every per-call scope takes, so no tool
|
|
101
|
+
// can forget to check. The configured defaults are always allowed.
|
|
102
|
+
if (database !== this.database)
|
|
103
|
+
assertDatabaseAllowed(database, this.allowedDatabases);
|
|
58
104
|
const collection = override?.trim() || this.collection;
|
|
105
|
+
if (collection && collection !== this.collection) {
|
|
106
|
+
assertCollectionAllowed(collection, this.allowedCollections);
|
|
107
|
+
}
|
|
59
108
|
return collection != null && collection !== ""
|
|
60
109
|
? { database, collection }
|
|
61
110
|
: { database };
|
|
@@ -65,6 +114,10 @@ class Resource {
|
|
|
65
114
|
return unwrap(await fn());
|
|
66
115
|
}
|
|
67
116
|
catch (err) {
|
|
117
|
+
// A refused database is a decision the user made, not a transport
|
|
118
|
+
// failure from `path`; it keeps its own type and message.
|
|
119
|
+
if (err instanceof ScopeNotAllowedError)
|
|
120
|
+
throw err;
|
|
68
121
|
throw translateError(path, err);
|
|
69
122
|
}
|
|
70
123
|
}
|
|
@@ -73,8 +126,8 @@ export class ContextResource extends Resource {
|
|
|
73
126
|
// The base constructor is `protected`, so this one is what makes the class
|
|
74
127
|
// instantiable from outside the file. Removing it fails with TS2674.
|
|
75
128
|
// biome-ignore lint/complexity/noUselessConstructor: widens visibility
|
|
76
|
-
constructor(sdk, database, collection) {
|
|
77
|
-
super(sdk, database, collection);
|
|
129
|
+
constructor(sdk, database, collection, allowedDatabases, allowedCollections) {
|
|
130
|
+
super(sdk, database, collection, allowedDatabases, allowedCollections);
|
|
78
131
|
}
|
|
79
132
|
/**
|
|
80
133
|
* The single retrieval entry point (SDK `client.query`).
|
|
@@ -250,8 +303,8 @@ export class DatabasesResource extends Resource {
|
|
|
250
303
|
// The base constructor is `protected`, so this one is what makes the class
|
|
251
304
|
// instantiable from outside the file. Removing it fails with TS2674.
|
|
252
305
|
// biome-ignore lint/complexity/noUselessConstructor: widens visibility
|
|
253
|
-
constructor(sdk, database, collection) {
|
|
254
|
-
super(sdk, database, collection);
|
|
306
|
+
constructor(sdk, database, collection, allowedDatabases, allowedCollections) {
|
|
307
|
+
super(sdk, database, collection, allowedDatabases, allowedCollections);
|
|
255
308
|
}
|
|
256
309
|
create(params) {
|
|
257
310
|
return this.call("/databases", () => this.sdk.databases.create({
|
|
@@ -298,8 +351,12 @@ export class HydraDB {
|
|
|
298
351
|
// overridden — level and silencing keep the SDK's own defaults.
|
|
299
352
|
logging: { logger: STDERR_LOGGER },
|
|
300
353
|
});
|
|
301
|
-
this.
|
|
302
|
-
this.
|
|
354
|
+
this.database = config.database;
|
|
355
|
+
this.collection = config.collection;
|
|
356
|
+
this.allowedDatabases = config.allowedDatabases;
|
|
357
|
+
this.allowedCollections = config.allowedCollections;
|
|
358
|
+
this.context = new ContextResource(client, config.database, config.collection, config.allowedDatabases, config.allowedCollections);
|
|
359
|
+
this.databases = new DatabasesResource(client, config.database, config.collection, config.allowedDatabases, config.allowedCollections);
|
|
303
360
|
this.graph = new GraphResource({
|
|
304
361
|
token: config.token,
|
|
305
362
|
...(config.baseUrl != null ? { baseUrl: config.baseUrl } : {}),
|
package/dist/hydra/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/hydra/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/hydra/client.ts"],"names":[],"mappings":"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"}
|
package/dist/hydra/index.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ export type { HydraConfig, ContextKind, RequestOptions, QueryKind, ConversationT
|
|
|
10
10
|
export { GraphResource } from "./graph.js";
|
|
11
11
|
export type { GraphConfig, GraphQueryParams, GraphScopeParams, GraphRow, } from "./graph.js";
|
|
12
12
|
export { HydraWrapperError, responseError, translateError } from "./errors.js";
|
|
13
|
+
export { assertCollectionAllowed, assertDatabaseAllowed, DatabaseNotAllowedError, ScopeNotAllowedError, } from "./client.js";
|
|
13
14
|
export { unwrap } from "./envelope.js";
|
package/dist/hydra/index.js
CHANGED
|
@@ -8,5 +8,6 @@
|
|
|
8
8
|
export { HydraDB, ContextResource, DatabasesResource, DEFAULT_TIMEOUT_SECONDS, DEFAULT_MAX_RETRIES, } from "./client.js";
|
|
9
9
|
export { GraphResource } from "./graph.js";
|
|
10
10
|
export { HydraWrapperError, responseError, translateError } from "./errors.js";
|
|
11
|
+
export { assertCollectionAllowed, assertDatabaseAllowed, DatabaseNotAllowedError, ScopeNotAllowedError, } from "./client.js";
|
|
11
12
|
export { unwrap } from "./envelope.js";
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/hydra/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hydra/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO3C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hydra/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO3C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACN,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/oauth.d.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The OAuth 2.1 RESOURCE-SERVER half of MCP authorization (PRO-1790).
|
|
3
|
+
*
|
|
4
|
+
* This server never issues tokens and never talks to the user. It does three
|
|
5
|
+
* things the MCP authorization spec asks of a protected resource:
|
|
6
|
+
*
|
|
7
|
+
* 1. Advertise where its authorization server is, via an RFC 9728 Protected
|
|
8
|
+
* Resource Metadata document at `/.well-known/oauth-protected-resource`,
|
|
9
|
+
* and point at that document from every 401 (`WWW-Authenticate`).
|
|
10
|
+
* 2. Recognise an access token the authorization server issued and turn it
|
|
11
|
+
* into the same {@link RequestCredentials} an API key would produce, by
|
|
12
|
+
* asking the authorization server what the token stands for (RFC 7662
|
|
13
|
+
* introspection). The answer carries the API key the dashboard minted on
|
|
14
|
+
* the user's Approve click, so the tool layer keeps calling Hydra DB
|
|
15
|
+
* exactly as it does for a key: nothing downstream knows OAuth exists.
|
|
16
|
+
* 3. Refuse a token that was not issued for THIS server (audience binding,
|
|
17
|
+
* RFC 8707), so a token minted for another resource cannot be replayed
|
|
18
|
+
* here.
|
|
19
|
+
*
|
|
20
|
+
* All of it is additive and switched on only by configuration: with no
|
|
21
|
+
* `HYDRADB_OAUTH_ISSUER` the server behaves exactly as before.
|
|
22
|
+
*/
|
|
23
|
+
/** Access tokens the dashboard issues carry this prefix; keys carry `sk_`. */
|
|
24
|
+
export declare const ACCESS_TOKEN_PREFIX = "hmat_";
|
|
25
|
+
/** The one scope this resource defines. Granularity is PRO-1789's problem. */
|
|
26
|
+
export declare const SCOPE = "hydradb";
|
|
27
|
+
export interface OAuthConfig {
|
|
28
|
+
/** The authorization server, e.g. `https://app.hydradb.com`. No trailing slash. */
|
|
29
|
+
issuer: string;
|
|
30
|
+
/** This server's canonical URL as clients know it, e.g. `https://mcp.hydradb.com`. */
|
|
31
|
+
resource: string;
|
|
32
|
+
/** Shared secret presented to the issuer's introspection endpoint. */
|
|
33
|
+
introspectionSecret: string;
|
|
34
|
+
/** Overrides for tests. */
|
|
35
|
+
fetchFn?: typeof fetch;
|
|
36
|
+
now?: () => number;
|
|
37
|
+
}
|
|
38
|
+
/** Everything an introspected token stands for. Mirrors the dashboard's response. */
|
|
39
|
+
export interface IntrospectedToken {
|
|
40
|
+
apiKey: string;
|
|
41
|
+
database?: string;
|
|
42
|
+
collection?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Databases a per-call `database` argument may name. Absent means any (the
|
|
45
|
+
* user chose to let the app switch when asked); present means the user
|
|
46
|
+
* confined the app to exactly these on the consent screen, and this server
|
|
47
|
+
* is where that promise is kept, because the API key behind the token is
|
|
48
|
+
* org-wide and the key never leaves this process.
|
|
49
|
+
*/
|
|
50
|
+
allowedDatabases?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* Collections a per-call `collection` argument may name, on the same terms.
|
|
53
|
+
* Confinement has to cover both or it means nothing: a caller pinned to one
|
|
54
|
+
* database could still step sideways into a collection the consent screen
|
|
55
|
+
* never showed and, through `drop_collection`, delete it.
|
|
56
|
+
*/
|
|
57
|
+
allowedCollections?: string[];
|
|
58
|
+
userId?: string;
|
|
59
|
+
clientId?: string;
|
|
60
|
+
clientName?: string;
|
|
61
|
+
/** Epoch seconds. */
|
|
62
|
+
expiresAt: number;
|
|
63
|
+
}
|
|
64
|
+
export type IntrospectionResult = {
|
|
65
|
+
ok: true;
|
|
66
|
+
token: IntrospectedToken;
|
|
67
|
+
} | {
|
|
68
|
+
ok: false;
|
|
69
|
+
reason: "invalid_token" | "wrong_audience" | "unavailable";
|
|
70
|
+
detail?: string;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Read the OAuth configuration, or `null` when the feature is off.
|
|
74
|
+
*
|
|
75
|
+
* All three values are needed: an issuer says where to send clients, a
|
|
76
|
+
* resource says which audience to accept, and the secret is what makes the
|
|
77
|
+
* introspection answer trustworthy. Half a configuration is treated as none,
|
|
78
|
+
* with a startup warning, rather than as a server that advertises an
|
|
79
|
+
* authorization flow it cannot complete.
|
|
80
|
+
*/
|
|
81
|
+
export declare function resolveOAuthConfig(env?: Record<string, string | undefined>, warn?: (message: string) => void): OAuthConfig | null;
|
|
82
|
+
/** Where the Protected Resource Metadata document lives for this server. */
|
|
83
|
+
export declare function metadataUrl(config: OAuthConfig, mcpPath?: string): string;
|
|
84
|
+
/** The RFC 9728 document itself. */
|
|
85
|
+
export declare function protectedResourceMetadata(config: OAuthConfig): Record<string, unknown>;
|
|
86
|
+
/**
|
|
87
|
+
* The `WWW-Authenticate` value for a 401.
|
|
88
|
+
*
|
|
89
|
+
* `resource_metadata` is how a client that arrived with nothing learns where
|
|
90
|
+
* to log in (the MCP spec's first discovery step), and `scope` tells it what
|
|
91
|
+
* to ask for. `error` is included only when a token was PRESENTED and refused,
|
|
92
|
+
* so an anonymous first contact reads as "authenticate" rather than "your
|
|
93
|
+
* token is bad".
|
|
94
|
+
*/
|
|
95
|
+
export declare function wwwAuthenticate(config: OAuthConfig, error?: "invalid_token" | "insufficient_scope", description?: string): string;
|
|
96
|
+
/** Whether a bearer value is one of OUR access tokens rather than an API key. */
|
|
97
|
+
export declare function isAccessToken(bearer: string | undefined): bearer is string;
|
|
98
|
+
/** Test-only. */
|
|
99
|
+
export declare function __resetIntrospectionCache(): void;
|
|
100
|
+
/**
|
|
101
|
+
* Ask the issuer what a token stands for.
|
|
102
|
+
*
|
|
103
|
+
* The response shape is the contract in PRO-1790: `active`, `aud`, `exp`,
|
|
104
|
+
* `api_key`, `database`, `collection`, `sub`, `client_id`, `client_name`.
|
|
105
|
+
* Audience is checked HERE, not trusted from the issuer's say-so: the issuer
|
|
106
|
+
* may legitimately serve several resources, and this server must only honour
|
|
107
|
+
* tokens minted for itself.
|
|
108
|
+
*/
|
|
109
|
+
export declare function introspect(config: OAuthConfig, token: string): Promise<IntrospectionResult>;
|
package/dist/oauth.js
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The OAuth 2.1 RESOURCE-SERVER half of MCP authorization (PRO-1790).
|
|
3
|
+
*
|
|
4
|
+
* This server never issues tokens and never talks to the user. It does three
|
|
5
|
+
* things the MCP authorization spec asks of a protected resource:
|
|
6
|
+
*
|
|
7
|
+
* 1. Advertise where its authorization server is, via an RFC 9728 Protected
|
|
8
|
+
* Resource Metadata document at `/.well-known/oauth-protected-resource`,
|
|
9
|
+
* and point at that document from every 401 (`WWW-Authenticate`).
|
|
10
|
+
* 2. Recognise an access token the authorization server issued and turn it
|
|
11
|
+
* into the same {@link RequestCredentials} an API key would produce, by
|
|
12
|
+
* asking the authorization server what the token stands for (RFC 7662
|
|
13
|
+
* introspection). The answer carries the API key the dashboard minted on
|
|
14
|
+
* the user's Approve click, so the tool layer keeps calling Hydra DB
|
|
15
|
+
* exactly as it does for a key: nothing downstream knows OAuth exists.
|
|
16
|
+
* 3. Refuse a token that was not issued for THIS server (audience binding,
|
|
17
|
+
* RFC 8707), so a token minted for another resource cannot be replayed
|
|
18
|
+
* here.
|
|
19
|
+
*
|
|
20
|
+
* All of it is additive and switched on only by configuration: with no
|
|
21
|
+
* `HYDRADB_OAUTH_ISSUER` the server behaves exactly as before.
|
|
22
|
+
*/
|
|
23
|
+
import { createHash } from "node:crypto";
|
|
24
|
+
import { logger } from "./logger.js";
|
|
25
|
+
/** Access tokens the dashboard issues carry this prefix; keys carry `sk_`. */
|
|
26
|
+
export const ACCESS_TOKEN_PREFIX = "hmat_";
|
|
27
|
+
/** The one scope this resource defines. Granularity is PRO-1789's problem. */
|
|
28
|
+
export const SCOPE = "hydradb";
|
|
29
|
+
function stripSlash(url) {
|
|
30
|
+
return url.replace(/\/+$/, "");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Read the OAuth configuration, or `null` when the feature is off.
|
|
34
|
+
*
|
|
35
|
+
* All three values are needed: an issuer says where to send clients, a
|
|
36
|
+
* resource says which audience to accept, and the secret is what makes the
|
|
37
|
+
* introspection answer trustworthy. Half a configuration is treated as none,
|
|
38
|
+
* with a startup warning, rather than as a server that advertises an
|
|
39
|
+
* authorization flow it cannot complete.
|
|
40
|
+
*/
|
|
41
|
+
export function resolveOAuthConfig(env = process.env, warn = (m) => console.error(`[hydradb-mcp] ${m}`)) {
|
|
42
|
+
const issuer = env.HYDRADB_OAUTH_ISSUER?.trim();
|
|
43
|
+
const resource = env.HYDRADB_MCP_PUBLIC_URL?.trim();
|
|
44
|
+
const introspectionSecret = env.HYDRADB_OAUTH_INTROSPECTION_SECRET?.trim();
|
|
45
|
+
if (!issuer && !resource && !introspectionSecret)
|
|
46
|
+
return null;
|
|
47
|
+
const missing = [
|
|
48
|
+
!issuer && "HYDRADB_OAUTH_ISSUER",
|
|
49
|
+
!resource && "HYDRADB_MCP_PUBLIC_URL",
|
|
50
|
+
!introspectionSecret && "HYDRADB_OAUTH_INTROSPECTION_SECRET",
|
|
51
|
+
].filter(Boolean);
|
|
52
|
+
if (missing.length > 0) {
|
|
53
|
+
warn(`WARNING: OAuth is partially configured (missing ${missing.join(", ")}); ` +
|
|
54
|
+
"it stays OFF until all three are set.");
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
for (const [name, value] of [
|
|
58
|
+
["HYDRADB_OAUTH_ISSUER", issuer],
|
|
59
|
+
["HYDRADB_MCP_PUBLIC_URL", resource],
|
|
60
|
+
]) {
|
|
61
|
+
if (!/^https?:\/\//i.test(value)) {
|
|
62
|
+
warn(`WARNING: ${name} must be an absolute http(s) URL; OAuth stays OFF.`);
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
issuer: stripSlash(issuer),
|
|
68
|
+
resource: stripSlash(resource),
|
|
69
|
+
introspectionSecret: introspectionSecret,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** Where the Protected Resource Metadata document lives for this server. */
|
|
73
|
+
export function metadataUrl(config, mcpPath = "") {
|
|
74
|
+
// RFC 9728 puts the well-known segment BEFORE the resource's path, so a
|
|
75
|
+
// server at /mcp advertises at /.well-known/oauth-protected-resource/mcp.
|
|
76
|
+
return `${config.resource}/.well-known/oauth-protected-resource${mcpPath}`;
|
|
77
|
+
}
|
|
78
|
+
/** The RFC 9728 document itself. */
|
|
79
|
+
export function protectedResourceMetadata(config) {
|
|
80
|
+
return {
|
|
81
|
+
resource: config.resource,
|
|
82
|
+
authorization_servers: [config.issuer],
|
|
83
|
+
scopes_supported: [SCOPE],
|
|
84
|
+
bearer_methods_supported: ["header"],
|
|
85
|
+
resource_name: "Hydra DB MCP",
|
|
86
|
+
resource_documentation: "https://docs.hydradb.com/mcp",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The `WWW-Authenticate` value for a 401.
|
|
91
|
+
*
|
|
92
|
+
* `resource_metadata` is how a client that arrived with nothing learns where
|
|
93
|
+
* to log in (the MCP spec's first discovery step), and `scope` tells it what
|
|
94
|
+
* to ask for. `error` is included only when a token was PRESENTED and refused,
|
|
95
|
+
* so an anonymous first contact reads as "authenticate" rather than "your
|
|
96
|
+
* token is bad".
|
|
97
|
+
*/
|
|
98
|
+
export function wwwAuthenticate(config, error, description) {
|
|
99
|
+
const parts = [`Bearer realm="Hydra DB MCP"`];
|
|
100
|
+
if (error)
|
|
101
|
+
parts.push(`error="${error}"`);
|
|
102
|
+
if (description)
|
|
103
|
+
parts.push(`error_description="${description.replace(/"/g, "'")}"`);
|
|
104
|
+
parts.push(`resource_metadata="${metadataUrl(config)}"`);
|
|
105
|
+
parts.push(`scope="${SCOPE}"`);
|
|
106
|
+
return parts.join(", ");
|
|
107
|
+
}
|
|
108
|
+
/** Whether a bearer value is one of OUR access tokens rather than an API key. */
|
|
109
|
+
export function isAccessToken(bearer) {
|
|
110
|
+
return typeof bearer === "string" && bearer.startsWith(ACCESS_TOKEN_PREFIX);
|
|
111
|
+
}
|
|
112
|
+
// --- Introspection, with a bounded memo ---
|
|
113
|
+
/**
|
|
114
|
+
* Introspection answers are memoised per token so the hosted server, which
|
|
115
|
+
* builds a client per request, does not ask the dashboard on every tool call.
|
|
116
|
+
* Only successes are cached, for the shorter of the token's own expiry and
|
|
117
|
+
* this ceiling. The ceiling IS the revocation lag: measured end to end, a
|
|
118
|
+
* disconnect or a refresh-token reuse detection reaches this server exactly
|
|
119
|
+
* one ceiling later. Thirty seconds keeps an agent's burst of tool calls at
|
|
120
|
+
* one hop while keeping that lag short enough that a revoked token cannot do
|
|
121
|
+
* much with it.
|
|
122
|
+
*/
|
|
123
|
+
const INTROSPECTION_CACHE_TTL_MS = 30000;
|
|
124
|
+
const INTROSPECTION_CACHE_MAX = 5000;
|
|
125
|
+
const INTROSPECTION_TIMEOUT_MS = 5000;
|
|
126
|
+
const cache = new Map();
|
|
127
|
+
/** Test-only. */
|
|
128
|
+
export function __resetIntrospectionCache() {
|
|
129
|
+
cache.clear();
|
|
130
|
+
}
|
|
131
|
+
function cacheKey(token) {
|
|
132
|
+
// Never keep the raw token as a Map key: it would sit in memory in the
|
|
133
|
+
// clear for as long as the entry lives.
|
|
134
|
+
return createHash("sha256").update(token).digest("hex");
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Ask the issuer what a token stands for.
|
|
138
|
+
*
|
|
139
|
+
* The response shape is the contract in PRO-1790: `active`, `aud`, `exp`,
|
|
140
|
+
* `api_key`, `database`, `collection`, `sub`, `client_id`, `client_name`.
|
|
141
|
+
* Audience is checked HERE, not trusted from the issuer's say-so: the issuer
|
|
142
|
+
* may legitimately serve several resources, and this server must only honour
|
|
143
|
+
* tokens minted for itself.
|
|
144
|
+
*/
|
|
145
|
+
export async function introspect(config, token) {
|
|
146
|
+
const now = config.now ?? Date.now;
|
|
147
|
+
const key = cacheKey(token);
|
|
148
|
+
const hit = cache.get(key);
|
|
149
|
+
if (hit && hit.expires > now())
|
|
150
|
+
return { ok: true, token: hit.token };
|
|
151
|
+
if (hit)
|
|
152
|
+
cache.delete(key);
|
|
153
|
+
const fetchFn = config.fetchFn ?? fetch;
|
|
154
|
+
const controller = new AbortController();
|
|
155
|
+
const timer = setTimeout(() => controller.abort(), INTROSPECTION_TIMEOUT_MS);
|
|
156
|
+
let body;
|
|
157
|
+
try {
|
|
158
|
+
const res = await fetchFn(`${config.issuer}/api/oauth/introspect`, {
|
|
159
|
+
method: "POST",
|
|
160
|
+
headers: {
|
|
161
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
162
|
+
Accept: "application/json",
|
|
163
|
+
Authorization: `Bearer ${config.introspectionSecret}`,
|
|
164
|
+
},
|
|
165
|
+
body: new URLSearchParams({ token }).toString(),
|
|
166
|
+
signal: controller.signal,
|
|
167
|
+
});
|
|
168
|
+
if (res.status === 401 || res.status === 403) {
|
|
169
|
+
// Our secret was refused. That is an operator problem, not the
|
|
170
|
+
// caller's, and it must not read as "your token is invalid".
|
|
171
|
+
logger.error("introspection refused: HYDRADB_OAUTH_INTROSPECTION_SECRET is not accepted by the issuer");
|
|
172
|
+
return { ok: false, reason: "unavailable", detail: "introspection refused" };
|
|
173
|
+
}
|
|
174
|
+
if (!res.ok) {
|
|
175
|
+
return { ok: false, reason: "unavailable", detail: `introspection HTTP ${res.status}` };
|
|
176
|
+
}
|
|
177
|
+
body = (await res.json());
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
return {
|
|
181
|
+
ok: false,
|
|
182
|
+
reason: "unavailable",
|
|
183
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
clearTimeout(timer);
|
|
188
|
+
}
|
|
189
|
+
if (body.active !== true)
|
|
190
|
+
return { ok: false, reason: "invalid_token" };
|
|
191
|
+
const aud = body.aud;
|
|
192
|
+
const audiences = Array.isArray(aud) ? aud : typeof aud === "string" ? [aud] : [];
|
|
193
|
+
if (!audiences.some((a) => typeof a === "string" && stripSlash(a) === config.resource)) {
|
|
194
|
+
return { ok: false, reason: "wrong_audience" };
|
|
195
|
+
}
|
|
196
|
+
const apiKey = typeof body.api_key === "string" ? body.api_key : "";
|
|
197
|
+
const exp = typeof body.exp === "number" ? body.exp : 0;
|
|
198
|
+
if (!apiKey || exp <= Math.floor(now() / 1000)) {
|
|
199
|
+
return { ok: false, reason: "invalid_token" };
|
|
200
|
+
}
|
|
201
|
+
const stringList = (v) => Array.isArray(v)
|
|
202
|
+
? v.filter((d) => typeof d === "string" && d.length > 0)
|
|
203
|
+
: undefined;
|
|
204
|
+
const allowed = stringList(body.databases);
|
|
205
|
+
const allowedCols = stringList(body.collections);
|
|
206
|
+
const resolved = {
|
|
207
|
+
apiKey,
|
|
208
|
+
...(allowed ? { allowedDatabases: allowed } : {}),
|
|
209
|
+
...(allowedCols ? { allowedCollections: allowedCols } : {}),
|
|
210
|
+
database: typeof body.database === "string" && body.database ? body.database : undefined,
|
|
211
|
+
collection: typeof body.collection === "string" && body.collection ? body.collection : undefined,
|
|
212
|
+
userId: typeof body.sub === "string" ? body.sub : undefined,
|
|
213
|
+
clientId: typeof body.client_id === "string" ? body.client_id : undefined,
|
|
214
|
+
clientName: typeof body.client_name === "string" ? body.client_name : undefined,
|
|
215
|
+
expiresAt: exp,
|
|
216
|
+
};
|
|
217
|
+
if (cache.size >= INTROSPECTION_CACHE_MAX) {
|
|
218
|
+
const oldest = cache.keys().next().value;
|
|
219
|
+
if (oldest != null)
|
|
220
|
+
cache.delete(oldest);
|
|
221
|
+
}
|
|
222
|
+
cache.set(key, {
|
|
223
|
+
token: resolved,
|
|
224
|
+
expires: Math.min(now() + INTROSPECTION_CACHE_TTL_MS, exp * 1000),
|
|
225
|
+
});
|
|
226
|
+
return { ok: true, token: resolved };
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -19,12 +19,20 @@ export declare function inFlightCount(): number;
|
|
|
19
19
|
export declare function legacyToolsEnabled(env?: NodeJS.ProcessEnv): boolean;
|
|
20
20
|
/** Test-only: reset the once-per-process alias warning dedupe. */
|
|
21
21
|
export declare function __resetAliasWarnings(): void;
|
|
22
|
+
export interface ServerOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Register the OAuth-connection tools (currently `hydradb_databases`).
|
|
25
|
+
* Set by the HTTP transport when the request authenticated with an OAuth
|
|
26
|
+
* token; never for API keys, so their tool list is unchanged.
|
|
27
|
+
*/
|
|
28
|
+
oauthTools?: boolean;
|
|
29
|
+
}
|
|
22
30
|
export declare function createHydraDBServer(hydraOverride?: HydraDB,
|
|
23
31
|
/**
|
|
24
32
|
* Graph scope/gating override, for tests and embedders. Without it the graph
|
|
25
33
|
* config is read from the environment exactly as the rest of the config is.
|
|
26
34
|
*/
|
|
27
|
-
graphOverride?: Partial<GraphConfig
|
|
35
|
+
graphOverride?: Partial<GraphConfig>, options?: ServerOptions): import("@modelcontextprotocol/sdk/server").Server<{
|
|
28
36
|
method: string;
|
|
29
37
|
params?: {
|
|
30
38
|
[x: string]: unknown;
|