@novorb/mcp-core 2.1.2 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -163
- package/bin/mcp-core-jest.mjs +112 -0
- package/dist/auth.d.ts +57 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +74 -0
- package/dist/auth.js.map +1 -0
- package/dist/bootstrap.d.ts +129 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +206 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/client-input.d.ts +72 -0
- package/dist/client-input.d.ts.map +1 -0
- package/dist/client-input.js +109 -0
- package/dist/client-input.js.map +1 -0
- package/dist/credential-checks.d.ts +80 -0
- package/dist/credential-checks.d.ts.map +1 -0
- package/dist/credential-checks.js +189 -0
- package/dist/credential-checks.js.map +1 -0
- package/dist/credential-health.d.ts +12 -0
- package/dist/credential-health.d.ts.map +1 -0
- package/dist/credential-health.js +12 -0
- package/dist/credential-health.js.map +1 -0
- package/dist/credential-report.d.ts +46 -0
- package/dist/credential-report.d.ts.map +1 -0
- package/dist/credential-report.js +135 -0
- package/dist/credential-report.js.map +1 -0
- package/dist/credential-status-tool.d.ts +20 -0
- package/dist/credential-status-tool.d.ts.map +1 -0
- package/dist/credential-status-tool.js +33 -0
- package/dist/credential-status-tool.js.map +1 -0
- package/dist/credentials.d.ts +288 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +652 -0
- package/dist/credentials.js.map +1 -0
- package/dist/express-peers.d.ts +29 -0
- package/dist/express-peers.d.ts.map +1 -0
- package/dist/express-peers.js +36 -0
- package/dist/express-peers.js.map +1 -0
- package/dist/express.d.ts +74 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +164 -0
- package/dist/express.js.map +1 -0
- package/dist/http-client.d.ts +277 -42
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +620 -180
- package/dist/http-client.js.map +1 -1
- package/dist/index.d.ts +27 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -8
- package/dist/index.js.map +1 -1
- package/dist/limits.d.ts +28 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/limits.js +37 -0
- package/dist/limits.js.map +1 -0
- package/dist/list-pagination.d.ts +41 -0
- package/dist/list-pagination.d.ts.map +1 -0
- package/dist/list-pagination.js +104 -0
- package/dist/list-pagination.js.map +1 -0
- package/dist/net.d.ts +112 -0
- package/dist/net.d.ts.map +1 -0
- package/dist/net.js +490 -0
- package/dist/net.js.map +1 -0
- package/dist/notifications.d.ts +78 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +173 -0
- package/dist/notifications.js.map +1 -0
- package/dist/pagination.d.ts +236 -5
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +393 -6
- package/dist/pagination.js.map +1 -1
- package/dist/prompts.d.ts +70 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +109 -0
- package/dist/prompts.js.map +1 -0
- package/dist/protocol-errors.d.ts +15 -0
- package/dist/protocol-errors.d.ts.map +1 -0
- package/dist/protocol-errors.js +28 -0
- package/dist/protocol-errors.js.map +1 -0
- package/dist/protocol-logging.d.ts +37 -0
- package/dist/protocol-logging.d.ts.map +1 -0
- package/dist/protocol-logging.js +77 -0
- package/dist/protocol-logging.js.map +1 -0
- package/dist/rate-limiter.d.ts +36 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +79 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/request-state.d.ts +74 -0
- package/dist/request-state.d.ts.map +1 -0
- package/dist/request-state.js +190 -0
- package/dist/request-state.js.map +1 -0
- package/dist/resources.d.ts +181 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +302 -0
- package/dist/resources.js.map +1 -0
- package/dist/result-limits.d.ts +80 -0
- package/dist/result-limits.d.ts.map +1 -0
- package/dist/result-limits.js +248 -0
- package/dist/result-limits.js.map +1 -0
- package/dist/retry.d.ts +79 -23
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +170 -57
- package/dist/retry.js.map +1 -1
- package/dist/sdk/client-stdio.d.ts +6 -0
- package/dist/sdk/client-stdio.d.ts.map +1 -0
- package/dist/sdk/client-stdio.js +6 -0
- package/dist/sdk/client-stdio.js.map +1 -0
- package/dist/sdk/client.d.ts +6 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +6 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/express.d.ts +3 -0
- package/dist/sdk/express.d.ts.map +1 -0
- package/dist/sdk/express.js +11 -0
- package/dist/sdk/express.js.map +1 -0
- package/dist/sdk/node.d.ts +6 -0
- package/dist/sdk/node.d.ts.map +1 -0
- package/dist/sdk/node.js +6 -0
- package/dist/sdk/node.js.map +1 -0
- package/dist/sdk/server-stdio.d.ts +6 -0
- package/dist/sdk/server-stdio.d.ts.map +1 -0
- package/dist/sdk/server-stdio.js +6 -0
- package/dist/sdk/server-stdio.js.map +1 -0
- package/dist/sdk/server.d.ts +6 -0
- package/dist/sdk/server.d.ts.map +1 -0
- package/dist/sdk/server.js +6 -0
- package/dist/sdk/server.js.map +1 -0
- package/dist/server.d.ts +88 -35
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +98 -44
- package/dist/server.js.map +1 -1
- package/dist/task-request.d.ts +20 -0
- package/dist/task-request.d.ts.map +1 -0
- package/dist/task-request.js +43 -0
- package/dist/task-request.js.map +1 -0
- package/dist/task-store.d.ts +230 -0
- package/dist/task-store.d.ts.map +1 -0
- package/dist/task-store.js +459 -0
- package/dist/task-store.js.map +1 -0
- package/dist/task-tools.d.ts +115 -0
- package/dist/task-tools.d.ts.map +1 -0
- package/dist/task-tools.js +397 -0
- package/dist/task-tools.js.map +1 -0
- package/dist/testing/client.d.ts +25 -0
- package/dist/testing/client.d.ts.map +1 -0
- package/dist/testing/client.js +11 -0
- package/dist/testing/client.js.map +1 -0
- package/dist/testing/in-memory.d.ts +26 -0
- package/dist/testing/in-memory.d.ts.map +1 -0
- package/dist/testing/in-memory.js +41 -0
- package/dist/testing/in-memory.js.map +1 -0
- package/dist/testing/index.d.ts +20 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +20 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/isolated-dirs.d.ts +27 -0
- package/dist/testing/isolated-dirs.d.ts.map +1 -0
- package/dist/testing/isolated-dirs.js +67 -0
- package/dist/testing/isolated-dirs.js.map +1 -0
- package/dist/testing/logs.d.ts +61 -0
- package/dist/testing/logs.d.ts.map +1 -0
- package/dist/testing/logs.js +113 -0
- package/dist/testing/logs.js.map +1 -0
- package/dist/testing/raw-http.d.ts +25 -0
- package/dist/testing/raw-http.d.ts.map +1 -0
- package/dist/testing/raw-http.js +41 -0
- package/dist/testing/raw-http.js.map +1 -0
- package/dist/testing/raw-peer.d.ts +43 -0
- package/dist/testing/raw-peer.d.ts.map +1 -0
- package/dist/testing/raw-peer.js +101 -0
- package/dist/testing/raw-peer.js.map +1 -0
- package/dist/testing/recording-server.d.ts +38 -0
- package/dist/testing/recording-server.d.ts.map +1 -0
- package/dist/testing/recording-server.js +38 -0
- package/dist/testing/recording-server.js.map +1 -0
- package/dist/testing/server-process.d.ts +76 -0
- package/dist/testing/server-process.d.ts.map +1 -0
- package/dist/testing/server-process.js +241 -0
- package/dist/testing/server-process.js.map +1 -0
- package/dist/testing/tools.d.ts +53 -0
- package/dist/testing/tools.d.ts.map +1 -0
- package/dist/testing/tools.js +98 -0
- package/dist/testing/tools.js.map +1 -0
- package/dist/testing/unit.d.ts +52 -0
- package/dist/testing/unit.d.ts.map +1 -0
- package/dist/testing/unit.js +95 -0
- package/dist/testing/unit.js.map +1 -0
- package/dist/tools.d.ts +205 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +370 -0
- package/dist/tools.js.map +1 -0
- package/dist/transport.d.ts +143 -52
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +292 -123
- package/dist/transport.js.map +1 -1
- package/dist/url-path.d.ts +49 -0
- package/dist/url-path.d.ts.map +1 -0
- package/dist/url-path.js +165 -0
- package/dist/url-path.js.map +1 -0
- package/dist/utils/dataStore.d.ts +143 -0
- package/dist/utils/dataStore.d.ts.map +1 -0
- package/dist/utils/dataStore.js +429 -0
- package/dist/utils/dataStore.js.map +1 -0
- package/dist/utils/envLoader.d.ts +129 -0
- package/dist/utils/envLoader.d.ts.map +1 -0
- package/dist/utils/envLoader.js +399 -0
- package/dist/utils/envLoader.js.map +1 -0
- package/dist/utils/logger.d.ts +181 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +664 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/redact.d.ts +50 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +318 -0
- package/dist/utils/redact.js.map +1 -0
- package/docs/api-reference.md +29 -0
- package/docs/building-a-server.md +63 -0
- package/docs/credentials.md +131 -0
- package/docs/data-store.md +37 -0
- package/docs/env.md +38 -0
- package/docs/features.md +28 -0
- package/docs/http-client.md +116 -0
- package/docs/logger.md +100 -0
- package/docs/migrating-to-v3.md +45 -0
- package/docs/outbound-urls.md +104 -0
- package/docs/pagination.md +45 -0
- package/docs/protocol-features.md +62 -0
- package/docs/resources-prompts-tasks.md +95 -0
- package/docs/sdk.md +33 -0
- package/docs/server.md +68 -0
- package/docs/testing-harness.md +139 -0
- package/docs/testing.md +151 -0
- package/docs/tools.md +88 -0
- package/docs/transport.md +85 -0
- package/examples/testing/tools.integration.test.example.ts +312 -0
- package/examples/testing/tools.unit.test.example.ts +149 -0
- package/package.json +130 -17
- package/dist/logger.d.ts +0 -80
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -237
- package/dist/logger.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @novorb/mcp-core - secret redaction and PII masking for log entries.
|
|
3
|
+
*
|
|
4
|
+
* Applied by the logger to every entry: the message, the context and every value in `meta`.
|
|
5
|
+
* - Sensitive-keyed fields in objects become `[REDACTED]` (keys are matched by name segment).
|
|
6
|
+
* - Secrets inside strings: secret query/form parameters become `name=[REDACTED]`, connection-string
|
|
7
|
+
* passwords `scheme://user:[REDACTED]@host`, HTTP Basic credentials `Basic [TOKEN]`.
|
|
8
|
+
* - PII inside strings and object keys becomes a typed placeholder:
|
|
9
|
+
* [EMAIL] [PHONE] [CARD] [IBAN] [JWT] [TOKEN] [IP].
|
|
10
|
+
* - Strings over MAX_STRING_CHARS are truncated with a marker; subtrees deeper than MAX_DEPTH become
|
|
11
|
+
* `[DEPTH]`, cycles `[CIRCULAR]`; arrays and objects keep their first MAX_ITEMS entries.
|
|
12
|
+
*
|
|
13
|
+
* Every pattern is linear-time: each one either starts only at a run boundary (a lookbehind that
|
|
14
|
+
* rejects a start inside a run of its own characters) or has bounded quantifiers, so no input can make
|
|
15
|
+
* a log call backtrack quadratically.
|
|
16
|
+
*/
|
|
17
|
+
/** Strings longer than this are truncated (with a marker) before they are masked and written. */
|
|
18
|
+
export declare const MAX_STRING_CHARS = 32768;
|
|
19
|
+
/** Nesting levels kept in meta; anything deeper becomes `[DEPTH]`. */
|
|
20
|
+
export declare const MAX_DEPTH = 8;
|
|
21
|
+
/** Array items / object keys kept per level; the rest are summarised. */
|
|
22
|
+
export declare const MAX_ITEMS = 200;
|
|
23
|
+
/**
|
|
24
|
+
* A key is sensitive when it is exactly `key`, or when a secret noun (one segment, or 2-3 adjacent
|
|
25
|
+
* segments joined, e.g. `api`+`key`) is followed only by secret-bearing suffixes. So `accessToken`,
|
|
26
|
+
* `X-Amz-Signature`, `passwordHash` are sensitive and `maxTokens`, `tokenExpiry`, `signatureAlgorithm`,
|
|
27
|
+
* `credentialType`, `primaryKey` are not.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isSensitiveKey(key: string): boolean;
|
|
30
|
+
/** Replace the values of secret query / form parameters in a string with `[REDACTED]`. */
|
|
31
|
+
export declare function redactQueryParams(s: string): string;
|
|
32
|
+
/** Secret parameters, connection-string passwords and HTTP Basic credentials in a string. */
|
|
33
|
+
export declare function redactStringSecrets(s: string): string;
|
|
34
|
+
/** Mask PII in a string with typed placeholders. Linear-time on any input. */
|
|
35
|
+
export declare function maskPii(s: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Cut a string to MAX_STRING_CHARS with a `...[TRUNCATED <n> chars]` marker. The cut moves back to the
|
|
38
|
+
* last delimiter within TRUNCATE_LOOKBACK chars (or drops that whole window), so a secret straddling
|
|
39
|
+
* the cut is never left half-visible where its pattern no longer matches.
|
|
40
|
+
*/
|
|
41
|
+
export declare function truncateString(s: string): string;
|
|
42
|
+
/** Truncation, secret redaction and PII masking, for one string. */
|
|
43
|
+
export declare function sanitizeString(s: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Copy a value for logging: sensitive-keyed fields become `[REDACTED]`, every string and key is
|
|
46
|
+
* sanitised, deep subtrees become `[DEPTH]`, cycles `[CIRCULAR]`, BigInt a string, Error/Date/URL/
|
|
47
|
+
* Map/Set/binary a meaningful plain form. The result is always JSON-serialisable.
|
|
48
|
+
*/
|
|
49
|
+
export declare function redactSecrets(value: unknown): unknown;
|
|
50
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,iGAAiG;AACjG,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,sEAAsE;AACtE,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,yEAAyE;AACzE,eAAO,MAAM,SAAS,MAAM,CAAC;AA4D7B;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUnD;AAcD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAOD,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIrD;AAoED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AA8ED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @novorb/mcp-core - secret redaction and PII masking for log entries.
|
|
3
|
+
*
|
|
4
|
+
* Applied by the logger to every entry: the message, the context and every value in `meta`.
|
|
5
|
+
* - Sensitive-keyed fields in objects become `[REDACTED]` (keys are matched by name segment).
|
|
6
|
+
* - Secrets inside strings: secret query/form parameters become `name=[REDACTED]`, connection-string
|
|
7
|
+
* passwords `scheme://user:[REDACTED]@host`, HTTP Basic credentials `Basic [TOKEN]`.
|
|
8
|
+
* - PII inside strings and object keys becomes a typed placeholder:
|
|
9
|
+
* [EMAIL] [PHONE] [CARD] [IBAN] [JWT] [TOKEN] [IP].
|
|
10
|
+
* - Strings over MAX_STRING_CHARS are truncated with a marker; subtrees deeper than MAX_DEPTH become
|
|
11
|
+
* `[DEPTH]`, cycles `[CIRCULAR]`; arrays and objects keep their first MAX_ITEMS entries.
|
|
12
|
+
*
|
|
13
|
+
* Every pattern is linear-time: each one either starts only at a run boundary (a lookbehind that
|
|
14
|
+
* rejects a start inside a run of its own characters) or has bounded quantifiers, so no input can make
|
|
15
|
+
* a log call backtrack quadratically.
|
|
16
|
+
*/
|
|
17
|
+
const REDACTED = '[REDACTED]';
|
|
18
|
+
/** Strings longer than this are truncated (with a marker) before they are masked and written. */
|
|
19
|
+
export const MAX_STRING_CHARS = 32768;
|
|
20
|
+
/** Nesting levels kept in meta; anything deeper becomes `[DEPTH]`. */
|
|
21
|
+
export const MAX_DEPTH = 8;
|
|
22
|
+
/** Array items / object keys kept per level; the rest are summarised. */
|
|
23
|
+
export const MAX_ITEMS = 200;
|
|
24
|
+
// How far back from the cut a truncation looks for a delimiter, so no partial token is left behind.
|
|
25
|
+
const TRUNCATE_LOOKBACK = 4096;
|
|
26
|
+
// ---------------------------------------------------------------------------------------------------
|
|
27
|
+
// Sensitive keys, matched by name segment (camelCase, snake_case, kebab-case, dotted).
|
|
28
|
+
// ---------------------------------------------------------------------------------------------------
|
|
29
|
+
// A segment (or two or three adjacent segments joined) that names a secret.
|
|
30
|
+
const SECRET_NOUNS = new Set([
|
|
31
|
+
'password',
|
|
32
|
+
'passwd',
|
|
33
|
+
'pwd',
|
|
34
|
+
'passphrase',
|
|
35
|
+
'secret',
|
|
36
|
+
'token',
|
|
37
|
+
'cookie',
|
|
38
|
+
'cookies',
|
|
39
|
+
'authorization',
|
|
40
|
+
'bearer',
|
|
41
|
+
'signature',
|
|
42
|
+
'sig',
|
|
43
|
+
'credential',
|
|
44
|
+
'credentials',
|
|
45
|
+
'tempauth',
|
|
46
|
+
'apikey',
|
|
47
|
+
'accesskey',
|
|
48
|
+
'privatekey',
|
|
49
|
+
'secretkey',
|
|
50
|
+
'signingkey',
|
|
51
|
+
'encryptionkey',
|
|
52
|
+
'clientsecret',
|
|
53
|
+
'xapikey',
|
|
54
|
+
]);
|
|
55
|
+
// Segments that may follow a secret noun and still hold the secret (`passwordHash`, `tokenValue`).
|
|
56
|
+
const SECRET_SUFFIXES = new Set([
|
|
57
|
+
'value',
|
|
58
|
+
'hash',
|
|
59
|
+
'raw',
|
|
60
|
+
'plain',
|
|
61
|
+
'plaintext',
|
|
62
|
+
'b64',
|
|
63
|
+
'base64',
|
|
64
|
+
'hex',
|
|
65
|
+
'enc',
|
|
66
|
+
'encrypted',
|
|
67
|
+
'str',
|
|
68
|
+
'string',
|
|
69
|
+
'data',
|
|
70
|
+
]);
|
|
71
|
+
function keySegments(key) {
|
|
72
|
+
return key
|
|
73
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
74
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
|
|
75
|
+
.split(/[^A-Za-z0-9]+/)
|
|
76
|
+
.filter(Boolean)
|
|
77
|
+
.map((s) => s.toLowerCase());
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A key is sensitive when it is exactly `key`, or when a secret noun (one segment, or 2-3 adjacent
|
|
81
|
+
* segments joined, e.g. `api`+`key`) is followed only by secret-bearing suffixes. So `accessToken`,
|
|
82
|
+
* `X-Amz-Signature`, `passwordHash` are sensitive and `maxTokens`, `tokenExpiry`, `signatureAlgorithm`,
|
|
83
|
+
* `credentialType`, `primaryKey` are not.
|
|
84
|
+
*/
|
|
85
|
+
export function isSensitiveKey(key) {
|
|
86
|
+
if (key.toLowerCase() === 'key')
|
|
87
|
+
return true;
|
|
88
|
+
const segs = keySegments(key);
|
|
89
|
+
for (let end = segs.length - 1; end >= 0; end--) {
|
|
90
|
+
for (let len = 1; len <= 3 && end - len + 1 >= 0; len++) {
|
|
91
|
+
const noun = segs.slice(end - len + 1, end + 1).join('');
|
|
92
|
+
if (SECRET_NOUNS.has(noun) && segs.slice(end + 1).every((s) => SECRET_SUFFIXES.has(s)))
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
// ---------------------------------------------------------------------------------------------------
|
|
99
|
+
// Secrets inside strings
|
|
100
|
+
// ---------------------------------------------------------------------------------------------------
|
|
101
|
+
const SECRET_PARAM_NAMES = 'key|api_key|apikey|access_key|token|access_token|refresh_token|id_token|signature|sig|password|secret|tempauth|client_secret|x-amz-signature|x-amz-credential|x-amz-security-token';
|
|
102
|
+
// A parameter at the start of the string, after ?, &, ; or whitespace. The value is bounded.
|
|
103
|
+
const SENSITIVE_QUERY_PARAM = new RegExp(`((?:^|[?&;\\s])(?:${SECRET_PARAM_NAMES})=)[^&;#\\s"']{0,4096}`, 'gi');
|
|
104
|
+
// scheme://user:password@ ; every part bounded, starting at a word boundary.
|
|
105
|
+
const USERINFO = /\b([a-z][a-z0-9+.-]{0,20}:\/\/[^\s/:@]{1,256}:)[^\s/@]{1,256}@/gi;
|
|
106
|
+
const BASIC = /\b(basic)[ \t]{1,8}([A-Za-z0-9+/]{8,4096}={0,2})(?![A-Za-z0-9+/=])/gi;
|
|
107
|
+
/** Replace the values of secret query / form parameters in a string with `[REDACTED]`. */
|
|
108
|
+
export function redactQueryParams(s) {
|
|
109
|
+
return s.replace(SENSITIVE_QUERY_PARAM, `$1${REDACTED}`);
|
|
110
|
+
}
|
|
111
|
+
function looksLikeBasicCredentials(b64) {
|
|
112
|
+
if (b64.length % 4 !== 0)
|
|
113
|
+
return false;
|
|
114
|
+
return Buffer.from(b64, 'base64').toString('latin1').includes(':');
|
|
115
|
+
}
|
|
116
|
+
/** Secret parameters, connection-string passwords and HTTP Basic credentials in a string. */
|
|
117
|
+
export function redactStringSecrets(s) {
|
|
118
|
+
return redactQueryParams(s)
|
|
119
|
+
.replace(USERINFO, `$1${REDACTED}@`)
|
|
120
|
+
.replace(BASIC, (match, word, b64) => (looksLikeBasicCredentials(b64) ? `${word} [TOKEN]` : match));
|
|
121
|
+
}
|
|
122
|
+
// ---------------------------------------------------------------------------------------------------
|
|
123
|
+
// PII
|
|
124
|
+
// ---------------------------------------------------------------------------------------------------
|
|
125
|
+
function digitsOf(s) {
|
|
126
|
+
return s.replace(/\D/g, '');
|
|
127
|
+
}
|
|
128
|
+
function luhnValid(digits) {
|
|
129
|
+
let sum = 0;
|
|
130
|
+
let double = false;
|
|
131
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
132
|
+
let n = digits.charCodeAt(i) - 48;
|
|
133
|
+
if (double) {
|
|
134
|
+
n *= 2;
|
|
135
|
+
if (n > 9)
|
|
136
|
+
n -= 9;
|
|
137
|
+
}
|
|
138
|
+
sum += n;
|
|
139
|
+
double = !double;
|
|
140
|
+
}
|
|
141
|
+
return sum % 10 === 0;
|
|
142
|
+
}
|
|
143
|
+
function ibanValid(raw) {
|
|
144
|
+
const iban = raw.replace(/ /g, '');
|
|
145
|
+
if (iban.length < 15 || iban.length > 34)
|
|
146
|
+
return false;
|
|
147
|
+
const rearranged = iban.slice(4) + iban.slice(0, 4);
|
|
148
|
+
let remainder = 0;
|
|
149
|
+
for (const ch of rearranged) {
|
|
150
|
+
const code = ch.charCodeAt(0);
|
|
151
|
+
const value = code >= 65 ? String(code - 55) : ch;
|
|
152
|
+
for (const d of value)
|
|
153
|
+
remainder = (remainder * 10 + (d.charCodeAt(0) - 48)) % 97;
|
|
154
|
+
}
|
|
155
|
+
return remainder === 1;
|
|
156
|
+
}
|
|
157
|
+
// Card issuer prefixes (Visa, Mastercard incl. 2-series, Amex, Diners, JCB, Discover, UnionPay).
|
|
158
|
+
const CARD_PREFIX = /^(?:4|5[1-5]|2[2-7]|3[0478]|35|6)/;
|
|
159
|
+
const BEARER = /\b(bearer)[ \t]{1,8}([A-Za-z0-9\-._~+/]{1,4096}={0,4})/gi;
|
|
160
|
+
const JWT = /(?<![\w-])eyJ[A-Za-z0-9_-]{2,16384}\.[A-Za-z0-9_-]{2,16384}\.[A-Za-z0-9_-]{0,16384}/g;
|
|
161
|
+
const EMAIL = /(?<![A-Za-z0-9._%+-])[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9-]{1,63}(?:\.[A-Za-z0-9-]{1,63}){0,8}\.[A-Za-z]{2,24}(?![A-Za-z0-9-])/g;
|
|
162
|
+
const IBAN = /\b[A-Z]{2}\d{2}(?: ?[A-Z0-9]{4}){2,7}(?: ?[A-Z0-9]{1,3})?\b/g;
|
|
163
|
+
const CARD = /(?<![\d-])[2-6]\d(?:[ -]?\d){11,17}(?![\d-])/g;
|
|
164
|
+
const OCTET = '(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)';
|
|
165
|
+
const IPV4 = new RegExp(`(?<![\\d.vV])(?:${OCTET}\\.){3}${OCTET}(?![\\d.])`, 'g');
|
|
166
|
+
const H = '[0-9a-fA-F]{1,4}';
|
|
167
|
+
const IPV6_BODY = `(?:(?:${H}:){7}${H}|(?:${H}:){1,7}:|(?:${H}:){1,6}:${H}|(?:${H}:){1,5}(?::${H}){1,2}|(?:${H}:){1,4}(?::${H}){1,3}|(?:${H}:){1,3}(?::${H}){1,4}|(?:${H}:){1,2}(?::${H}){1,5}|${H}:(?::${H}){1,6}|:(?::${H}){1,7})`;
|
|
168
|
+
// A bracketed IPv6 (`[::1]` in a URL or a bind address) is replaced together with its brackets.
|
|
169
|
+
const IPV6 = new RegExp(`\\[${IPV6_BODY}\\]|(?<![\\w:])${IPV6_BODY}(?![\\w:])`, 'g');
|
|
170
|
+
// International: a country code 1-9, then digit groups separated by space or dash (never '.', so signed
|
|
171
|
+
// decimals like +0.00012345 stay). Compact forms need 10+ digits so a signed integer stays.
|
|
172
|
+
const PHONE_INTL = /(?<![\w+.])\+[1-9]\d{0,2}(?:[ -]?\(?\d{1,4}\)?){2,5}(?![\w.])/g;
|
|
173
|
+
const PHONE_NANP = /(?<![\w.])(?:\(\d{3}\) ?|\d{3}[.-])\d{3}[.-]\d{4}(?![\w.])/g;
|
|
174
|
+
// National (leading 0): area + subscriber (06-12345678, 030 12345678) or area + two space groups
|
|
175
|
+
// (020 123 4567). A three-group dashed number is a reference, not a phone.
|
|
176
|
+
const PHONE_NATIONAL = /(?<![\w.:/-])0\d{1,4}(?:[ -]\d{6,8}| \d{2,4} \d{2,4})(?![\w.-])/g;
|
|
177
|
+
function maskBearer(match, word, token) {
|
|
178
|
+
// Prose such as "Bearer authentication" is a short all-lowercase word; any token with a digit,
|
|
179
|
+
// symbol or capital letter, or 16+ characters, is treated as a credential.
|
|
180
|
+
const prose = /^[a-z]{1,15}$/.test(token);
|
|
181
|
+
return prose ? match : `${word} [TOKEN]`;
|
|
182
|
+
}
|
|
183
|
+
/** Mask PII in a string with typed placeholders. Linear-time on any input. */
|
|
184
|
+
export function maskPii(s) {
|
|
185
|
+
return s
|
|
186
|
+
.replace(BEARER, maskBearer)
|
|
187
|
+
.replace(JWT, '[JWT]')
|
|
188
|
+
.replace(EMAIL, '[EMAIL]')
|
|
189
|
+
.replace(IBAN, (match) => (ibanValid(match) ? '[IBAN]' : match))
|
|
190
|
+
.replace(CARD, (match) => {
|
|
191
|
+
const d = digitsOf(match);
|
|
192
|
+
return d.length >= 13 && d.length <= 19 && CARD_PREFIX.test(d) && luhnValid(d) ? '[CARD]' : match;
|
|
193
|
+
})
|
|
194
|
+
.replace(IPV4, '[IP]')
|
|
195
|
+
.replace(IPV6, '[IP]')
|
|
196
|
+
.replace(PHONE_INTL, (match) => {
|
|
197
|
+
const n = digitsOf(match).length;
|
|
198
|
+
const separated = /[ (-]/.test(match);
|
|
199
|
+
return n >= 8 && n <= 15 && (separated || n >= 10) ? '[PHONE]' : match;
|
|
200
|
+
})
|
|
201
|
+
.replace(PHONE_NANP, '[PHONE]')
|
|
202
|
+
.replace(PHONE_NATIONAL, (match) => {
|
|
203
|
+
const n = digitsOf(match).length;
|
|
204
|
+
return n >= 9 && n <= 11 ? '[PHONE]' : match;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Cut a string to MAX_STRING_CHARS with a `...[TRUNCATED <n> chars]` marker. The cut moves back to the
|
|
209
|
+
* last delimiter within TRUNCATE_LOOKBACK chars (or drops that whole window), so a secret straddling
|
|
210
|
+
* the cut is never left half-visible where its pattern no longer matches.
|
|
211
|
+
*/
|
|
212
|
+
export function truncateString(s) {
|
|
213
|
+
if (s.length <= MAX_STRING_CHARS)
|
|
214
|
+
return s;
|
|
215
|
+
let cut = MAX_STRING_CHARS;
|
|
216
|
+
const floor = MAX_STRING_CHARS - TRUNCATE_LOOKBACK;
|
|
217
|
+
while (cut > floor && !/[\s"'&;,<>()[\]{}|]/.test(s[cut - 1]))
|
|
218
|
+
cut--;
|
|
219
|
+
return `${s.slice(0, cut)}...[TRUNCATED ${s.length - cut} chars]`;
|
|
220
|
+
}
|
|
221
|
+
/** Truncation, secret redaction and PII masking, for one string. */
|
|
222
|
+
export function sanitizeString(s) {
|
|
223
|
+
return maskPii(redactStringSecrets(truncateString(s)));
|
|
224
|
+
}
|
|
225
|
+
// ---------------------------------------------------------------------------------------------------
|
|
226
|
+
// Structured values
|
|
227
|
+
// ---------------------------------------------------------------------------------------------------
|
|
228
|
+
function maskNumber(n) {
|
|
229
|
+
if (!Number.isInteger(n) || Math.abs(n) < 1e12)
|
|
230
|
+
return n;
|
|
231
|
+
const s = String(n);
|
|
232
|
+
const masked = maskPii(s);
|
|
233
|
+
return masked === s ? n : masked;
|
|
234
|
+
}
|
|
235
|
+
function redactEntries(entries, depth, seen, total) {
|
|
236
|
+
const out = {};
|
|
237
|
+
for (const [k, v] of entries.slice(0, MAX_ITEMS)) {
|
|
238
|
+
let key = maskPii(truncateString(k));
|
|
239
|
+
if (key in out) {
|
|
240
|
+
let i = 2;
|
|
241
|
+
while (`${key}#${i}` in out)
|
|
242
|
+
i++;
|
|
243
|
+
key = `${key}#${i}`;
|
|
244
|
+
}
|
|
245
|
+
out[key] = isSensitiveKey(k) ? REDACTED : redactValue(v, depth + 1, seen);
|
|
246
|
+
}
|
|
247
|
+
if (total > MAX_ITEMS)
|
|
248
|
+
out['[truncated]'] = `[+${total - MAX_ITEMS} more keys]`;
|
|
249
|
+
return out;
|
|
250
|
+
}
|
|
251
|
+
function redactError(err, depth, seen) {
|
|
252
|
+
const own = Object.entries(err);
|
|
253
|
+
const out = {
|
|
254
|
+
name: sanitizeString(err.name),
|
|
255
|
+
message: sanitizeString(err.message),
|
|
256
|
+
...redactEntries(own, depth, seen, own.length),
|
|
257
|
+
};
|
|
258
|
+
if (err.stack)
|
|
259
|
+
out.stack = sanitizeString(err.stack);
|
|
260
|
+
if (err.cause !== undefined)
|
|
261
|
+
out.cause = redactValue(err.cause, depth + 1, seen);
|
|
262
|
+
return out;
|
|
263
|
+
}
|
|
264
|
+
function redactValue(value, depth, seen) {
|
|
265
|
+
if (typeof value === 'string')
|
|
266
|
+
return sanitizeString(value);
|
|
267
|
+
if (typeof value === 'number')
|
|
268
|
+
return maskNumber(value);
|
|
269
|
+
if (typeof value === 'bigint')
|
|
270
|
+
return sanitizeString(value.toString());
|
|
271
|
+
if (value === null || typeof value !== 'object')
|
|
272
|
+
return value;
|
|
273
|
+
if (depth > MAX_DEPTH)
|
|
274
|
+
return '[DEPTH]';
|
|
275
|
+
if (seen.has(value))
|
|
276
|
+
return '[CIRCULAR]';
|
|
277
|
+
seen.add(value);
|
|
278
|
+
try {
|
|
279
|
+
if (value instanceof Date)
|
|
280
|
+
return Number.isNaN(value.getTime()) ? 'Invalid Date' : value.toISOString();
|
|
281
|
+
if (value instanceof URL)
|
|
282
|
+
return sanitizeString(value.href);
|
|
283
|
+
if (value instanceof ArrayBuffer)
|
|
284
|
+
return `[Binary ${value.byteLength} bytes]`;
|
|
285
|
+
if (ArrayBuffer.isView(value))
|
|
286
|
+
return `[Binary ${value.byteLength} bytes]`;
|
|
287
|
+
if (value instanceof Error)
|
|
288
|
+
return redactError(value, depth, seen);
|
|
289
|
+
if (value instanceof Map) {
|
|
290
|
+
const entries = [...value.entries()].map(([k, v]) => [String(k), v]);
|
|
291
|
+
return redactEntries(entries, depth, seen, value.size);
|
|
292
|
+
}
|
|
293
|
+
if (Array.isArray(value) || value instanceof Set) {
|
|
294
|
+
const items = Array.isArray(value) ? value : [...value];
|
|
295
|
+
const out = items.slice(0, MAX_ITEMS).map((v) => redactValue(v, depth + 1, seen));
|
|
296
|
+
if (items.length > MAX_ITEMS)
|
|
297
|
+
out.push(`[+${items.length - MAX_ITEMS} more]`);
|
|
298
|
+
return out;
|
|
299
|
+
}
|
|
300
|
+
const entries = Object.entries(value);
|
|
301
|
+
return redactEntries(entries, depth, seen, entries.length);
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return '[UNREADABLE]';
|
|
305
|
+
}
|
|
306
|
+
finally {
|
|
307
|
+
seen.delete(value);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Copy a value for logging: sensitive-keyed fields become `[REDACTED]`, every string and key is
|
|
312
|
+
* sanitised, deep subtrees become `[DEPTH]`, cycles `[CIRCULAR]`, BigInt a string, Error/Date/URL/
|
|
313
|
+
* Map/Set/binary a meaningful plain form. The result is always JSON-serialisable.
|
|
314
|
+
*/
|
|
315
|
+
export function redactSecrets(value) {
|
|
316
|
+
return redactValue(value, 0, new WeakSet());
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# API reference
|
|
2
|
+
|
|
3
|
+
| Import path | Exports | Purpose |
|
|
4
|
+
|-------------|---------|---------|
|
|
5
|
+
| `@novorb/mcp-core/server` | `createMcpServer`, `DEFAULT_CACHE_HINTS`, `TOOL_ANNOTATIONS`, `McpServer`, `Server`, `completable`, `fromJsonSchema`, `inputRequired`, `acceptedContent`, `createRequestStateCodec`, `requestStateCodecOf`, `requireScopes`, `ProtocolError`, `ProtocolErrorCode`, `UrlElicitationRequiredError`, `OAuthError`, `OAuthErrorCode`, types `CreateMcpServerOptions`, `Implementation`, `McpServerOptions`, `AuthInfo`, `OAuthTokenVerifier`, `ScopeChallengeHandler`, `ServerContext`, `InputRequiredResult`, `McpCallToolResult`, `McpToolAnnotations` | The recommended, curated entry: server builder plus the SDK symbols servers use |
|
|
6
|
+
| `@novorb/mcp-core/transport` | `startMcpServer`, `createRequestHandler`, `notifyingFactory`, `resolveHttpAuth`, `resolveTransportMode`, `bearerMatches`, `runBearerGate`, `isJsonRequest`, `toHostname`, `toOriginHostname`, `parseList`, `DEFAULT_MAX_BODY_BYTES`, types `TransportMode`, `TransportOptions`, `TransportHandle`, `RequestContext`, `ServerFactory`, `ServerOrFactory`, `McpRequestHandler`, `AuthenticatedRequest` | stdio and streamable-HTTP transport |
|
|
7
|
+
| `@novorb/mcp-core/auth` | `apiKeyVerifier`, `bearerOptions`, `authenticate`, `writeWebResponse`, `API_KEY_TOKEN_PLACEHOLDER`, `API_KEY_TTL_SECONDS`, types `HttpAuthOptions`, `ApiKeyVerifierOptions`, `AuthOutcome` | The HTTP Bearer gate on the SDK's `verifyBearerToken` (static key or a pluggable verifier) |
|
|
8
|
+
| `@novorb/mcp-core/express` | `createMcpRouter`, `mountMcpServer`, types `McpExpressOptions`, `McpExpressRouter` | The same stateless handler and guards mounted on an existing Express app (optional peers `express` and `@modelcontextprotocol/express`) |
|
|
9
|
+
| `@novorb/mcp-core/resources` | `registerResources`, `defineResource`, `defineResourceTemplate`, `enableResourceSubscriptions`, `textContents`, `blobContents`, `normalizeReadOutcome`, `resourceLink`, `embeddedResource`, `createResultSpill`, types `ResourceDefinition`, `ResourceTemplateDefinition`, `AnyResourceDefinition`, `ResourceContext`, `ResourceReadOutcome`, `RegisterResourcesOptions`, `ResultSpill`, `ResultSpillOptions` | Resources and templates on `McpServer.registerResource`, resource links, 2025-era subscriptions, the result spill |
|
|
10
|
+
| `@novorb/mcp-core/prompts` | `registerPrompts`, `definePrompt`, `normalizePromptOutcome`, types `PromptDefinition`, `AnyPromptDefinition`, `PromptContext`, `PromptOutcome`, `RegisterPromptsOptions` | Prompts on `McpServer.registerPrompt` |
|
|
11
|
+
| `@novorb/mcp-core/notifications` | `processBus`, `setProcessBus`, `createNotifier`, `attachNotifications`, `resourceSubscriptions`, `createRuntimeSurface`, `bindToSurface`, `InMemoryServerEventBus`, types `ServerEvent`, `ServerEventBus`, `ServerNotifier`, `RuntimeSurface`, `SurfaceKind` | The process event bus, change notifications and runtime enable/disable |
|
|
12
|
+
| `@novorb/mcp-core/task-store` | `InMemoryTaskStore`, `FileTaskStore`, `createTaskStore`, `isTerminalStatus`, `TASK_STATUSES`, `TASKS_EXTENSION_ID` (+ types incl. `ManagedTaskStore`, `TaskStore`, `TaskHandle`, `Task`, `DetailedTask`) | Task stores (the SDK PR #2782 contract plus list, watch, updateContext, close) |
|
|
13
|
+
| `@novorb/mcp-core/task-tools` | `registerTaskTools`, `defineTaskTool`, `enableTasks`, `declaresTasksExtension`, `toLegacyTask`, types `TaskToolDefinition`, `AnyTaskToolDefinition`, `TaskContext`, `RegisterTaskToolsOptions`, `EnableTasksOptions`, `LegacyTask` | Long-running tools on MCP Tasks, both eras |
|
|
14
|
+
| `@novorb/mcp-core/request-state` | `requestStateCodecFromEnv`, `createSealedRequestStateCodec`, `defaultRequestStateBinding`, `RequestStateError`, `RequestStateKeyError`, `MIN_REQUEST_STATE_KEY_BYTES`, `DEFAULT_REQUEST_STATE_TTL_SECONDS`, types `RequestStateCodec`, `SealedRequestStateOptions`, `RequestStateFailure` | The sealed requestState codec |
|
|
15
|
+
| `@novorb/mcp-core/bootstrap` | `runMcpServer`, `readPackageInfo`, `transportFromEnv`, types `RunMcpServerOptions`, `RunServerOptions`, `RunningServer`, `SetupContext`, `PackageInfo` | Server entry point: logger, env, shared state, transport, signals, stdio EOF |
|
|
16
|
+
| `@novorb/mcp-core/tools` | `registerTools`, `defineTool`, `toolResult`, `toolError`, `maskClientText`, `normalizeOutcome`, `defaultMapError`, `notConfiguredMessage`, types `ToolDefinition`, `AnyToolDefinition`, `ToolContext`, `ToolOutcome`, `ToolArgs`, `LegacyEnvelope`, `RegisterToolsOptions`, `MappedToolError`, `ResultEnvelope` | Tool registration on `McpServer` with result limits and the client input helpers |
|
|
17
|
+
| `@novorb/mcp-core/credentials` | `CredentialRegistry`, `CredentialScope`, `processCredentials`, `setProcessCredentials`, `runCredentialChecks`, `registerEnvCredentials`, `credentialOutcomeFromHttp`, `credentialOutcomeFromError`, `parseAuthChallenge`, `formatCredentialReport`, `attachCredentialReport`, `attachCredentialMeta`, `credentialReportBytes`, `withCredentialsField`, `credentialStatusTool`, `currentCredentialScope`, `runWithCredentialScope`, `NoUsableCredentialError`, `CREDENTIALS_META_KEY`, `CREDENTIALS_FIELD`, `CREDENTIALS_JSON_SCHEMA`, `CREDENTIAL_STATUSES`, `DEFAULT_CREDENTIAL_CHECK_TIMEOUT_MS`, `DEFAULT_CREDENTIAL_CHECK_CONCURRENCY`, `DEFAULT_CREDENTIAL_RECHECK_MS` (+ types incl. `CredentialStatus`, `CredentialCheck`, `CredentialCheckContext`, `CredentialState`, `CredentialReportEntry`, `CredentialOutcome`) | Credential health: startup checks, pools and rotation, outcome recording, the per-result report, the status tool |
|
|
18
|
+
| `@novorb/mcp-core/sdk/server`, `/sdk/server/stdio`, `/sdk/node`, `/sdk/client`, `/sdk/client/stdio`, `/sdk/express` | `export *` of `@modelcontextprotocol/server`, `/server/stdio`, `/node`, `/client`, `/client/stdio`, `/express` | Every SDK feature, through mcp-core (see "The SDK through mcp-core") |
|
|
19
|
+
| `@novorb/mcp-core/env` | `loadEnv`, `CORE_ENV_SCHEMA`, `renderEnvTable`, `renderEnvExample`, types `EnvVarSpec`, `EnvSchema`, `LoadedEnv`, `LoadEnvOptions`, `EnvError`, `EnvKeyState`, `EnvSource`, `EnvVarType`, `RenderOptions` | Per-server env schema and the one env loader |
|
|
20
|
+
| `@novorb/mcp-core/data-store` | `createDataStore`, `resolveInside`, `safeName`, `DataPathError`, `DataStorageDisabledError`, `DownloadError`, types `DataStore`, `JsonCache`, `DownloadSource`, `DownloadOptions`, `DownloadResult`, `CreateDataStoreOptions` | Disk writes, caches and downloads under `DATA_PATH` |
|
|
21
|
+
| `@novorb/mcp-core/net` | `guardedFetch`, `createGuardedAgent`, `guardedLookup`, `checkUrl`, `isPublicAddress`, `addressPolicy`, `normalizeOrigins`, `GuardedFetchError`, `ADDRESS_BLOCKED_CODE`, types `GuardedFetchOptions`, `UrlGuardOptions`, `AddressGuardOptions`, `GuardedFetchReason` | The SSRF-guarded outbound fetch for caller- or upstream-supplied URLs |
|
|
22
|
+
| `@novorb/mcp-core/url-path` | `pathSegment`, `buildPath`, `joinPath`, `InvalidPathSegmentError`, types `PathValue`, `PathSegmentOptions`, `PathSegmentProblem` | Caller values as exactly one upstream URL path segment |
|
|
23
|
+
| `@novorb/mcp-core/logger` | `initLogger`, `getLogger`, `resetLogger`, `Logger`, `LogLevel`, `logToolCall`, `logToolResult`, `summarizeArgs`, `packageRootFrom`, `addLogListener`, `redactSecrets`, `maskPii`, `maskSecretValues`, `clearSecretValues`, `MIN_SECRET_LENGTH`, types `LoggerConfig`, `LoggerOptions`, `LogFormat`, `LogSinks`, `ArgsSummary` | Console + file logging with rotation, redaction, PII masking and tool-call helpers |
|
|
24
|
+
| `@novorb/mcp-core/retry` | `retryWithBackoff`, `isRetryableError`, `isRetryableStatus`, `isIdempotentMethod`, `calculateRetryDelay`, `retryDelayFor`, `parseRetryAfter`, `retryAfterFromError`, `errorStatus`, `sleep`, `throwIfAborted`, `RETRYABLE_STATUS_CODES`, `RETRYABLE_NETWORK_CODES`, `IDEMPOTENT_METHODS`, types `RetryOptions`, `RetryContext`, `RetryInfo` | The one retry policy (statuses, network codes, idempotency, Retry-After, full-jitter backoff) |
|
|
25
|
+
| `@novorb/mcp-core/pagination` | `normalizePagination`, `createPaginationMetadata`, `pageToOffset`, `paginateArray`; strategies `pagePerPage`, `nextPageHeader`, `offsetLimit`, `linkHeader`, `nextLinkField`, `continuationToken`, runner `paginateRequests`, `parseLinkHeader`, `readHeaderTotal`, `defaultItems`, `DEFAULT_MAX_PAGES`; cursors `encodeCursor`, `decodeCursor`, `InvalidCursorError`, `invalidCursorResult`, `paginateArrayByCursor`, `pagedResultSchema` (+ types incl. `PagedResult`, `PaginationStrategy`, `PageIterator`) | Page-number helpers, upstream page walkers, MCP cursors and the paged result contract |
|
|
26
|
+
| `@novorb/mcp-core/http-client` | `createHttpClient`, `McpHttpClient`, `HttpError`, `TokenBucket`, `createTokenBucket`, `joinUrl`, `buildQueryString`, `templatePath` (+ types incl. `HttpClientConfig`, `RequestOptions`, `HttpAuth`, `HttpResponse`, `HttpErrorInfo`) | Hardened HTTP client |
|
|
27
|
+
| `@novorb/mcp-core/testing` | `startBuiltServer`, `createIsolatedDirs`, `readLogFiles`, `logLevels`, `findLeaks`, `collectStrings`, `callToolJson`, `listToolNames`, `captureToolWire`, `toolCoverage`, `assertToolCoverage`, `rawHttp`, `mcpPostHeaders`, `initializeRequestBody`, `connectInMemory`, `withInMemoryClient`, `callToolInMemory`, `captureToolCall`, `expectToolSuccess`, `expectToolError`, `expectSchemaRejection`, `expectUnknownTool`, `makeRecordingServer`, `createTestClient`, `freePort`, `killAndWait`, `minimalOsEnv`, `rawPeer`, `rawHttpPeer`, `modernMeta`, `parseRpcBody`, `MODERN_PROTOCOL_VERSION`, `INVALID_PARAMS_CODE`, `logFileName`, `maskValue` (+ types) | Test harness (uses `@modelcontextprotocol/client`, a regular dependency). Never imported by the runtime entry points |
|
|
28
|
+
|
|
29
|
+
The package root (`@novorb/mcp-core`) re-exports the logger (except `redactSecrets` and `maskPii`, which are on `@novorb/mcp-core/logger` only; `registerSecretValues` is on both), retry, pagination, http-client, server, bootstrap, tools, env, data-store, net and url-path surfaces, the auth basics (`apiKeyVerifier`, `HttpAuthOptions`), the limits (`resolveLimits`, `DEFAULT_LIST_PAGE_SIZE`, `DEFAULT_MAX_RESULT_BYTES`, `DEFAULT_MAX_RESULT_ITEMS`, `DEFAULT_MAX_TOOL_INPUT_ELEMENTS`), list pagination (`paginateLists`, `pageListResult`, `LIST_RESULT_KEYS`), protocol errors (`toProtocolError`), protocol logging (`enableProtocolLogging`, `protocolLoggingEnabled`, `toMcpLoggingLevel`, `runWithRequestContext`, `currentRequestContext`, `requestEra`, `supportsClientFeature`, ...), the client input types, the resources, prompts, notifications, task-store, task-tools and request-state surfaces, `ExpressAdapterUnavailableError` and `EXPRESS_PEERS_MISSING`, plus `startMcpServer`, `resolveTransportMode`, `DEFAULT_MAX_BODY_BYTES` and the `ServerFactory`, `RequestContext`, `TransportHandle`, `TransportMode` and `TransportOptions` types from transport. `createRequestHandler`, `bearerMatches`, `resolveHttpAuth`, `ServerOrFactory` and `McpRequestHandler` come from `@novorb/mcp-core/transport` only; the Express adapter only from `@novorb/mcp-core/express` (it loads express).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Building a server (`runMcpServer` + `registerTools` + `loadEnv` + `createDataStore`)
|
|
2
|
+
|
|
3
|
+
## Minimal server
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// src/index.ts
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { runMcpServer } from '@novorb/mcp-core/bootstrap';
|
|
9
|
+
import { createDataStore } from '@novorb/mcp-core/data-store';
|
|
10
|
+
import type { EnvSchema } from '@novorb/mcp-core/env';
|
|
11
|
+
import { packageRootFrom } from '@novorb/mcp-core/logger';
|
|
12
|
+
import { TOOL_ANNOTATIONS } from '@novorb/mcp-core/server';
|
|
13
|
+
import { defineTool, registerTools, toolResult } from '@novorb/mcp-core/tools';
|
|
14
|
+
|
|
15
|
+
export const ENV: EnvSchema = [
|
|
16
|
+
{ key: 'ACME_URL', type: 'url', value: 'https://api.acme.example', description: 'Acme API base URL' },
|
|
17
|
+
{ key: 'ACME_TOKEN', required: true, secret: true, description: 'Acme API token' },
|
|
18
|
+
{ key: 'ACME_PAGE_SIZE', type: 'int', value: '50', description: 'Page size for list calls' },
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
await runMcpServer({
|
|
22
|
+
rootDir: packageRootFrom(import.meta.url),
|
|
23
|
+
env: ENV,
|
|
24
|
+
// Once per process (shared by every connection / HTTP request).
|
|
25
|
+
setup: ({ env, logger, rootDir }) => ({
|
|
26
|
+
api: new AcmeClient(env.get('ACME_URL'), env.get('ACME_TOKEN')),
|
|
27
|
+
cache: createDataStore({ rootDir, env, logger }).jsonCache<string[]>({ name: 'projects', ttlMs: 3_600_000 }),
|
|
28
|
+
}),
|
|
29
|
+
// Per connection (stdio) / per HTTP request.
|
|
30
|
+
create: (shared, _req, { env, info, createServer }) => {
|
|
31
|
+
const server = createServer(); // createMcpServer with the package identity + the `server` options
|
|
32
|
+
registerTools(
|
|
33
|
+
server,
|
|
34
|
+
[
|
|
35
|
+
defineTool({
|
|
36
|
+
name: 'acme_project_list',
|
|
37
|
+
description: 'List Acme projects',
|
|
38
|
+
inputSchema: z.object({ cursor: z.string().optional() }),
|
|
39
|
+
annotations: TOOL_ANNOTATIONS.readOnlyOpenWorld,
|
|
40
|
+
requires: ['ACME_TOKEN'],
|
|
41
|
+
handler: async (_args, ctx) => toolResult({ projects: await shared.api.projects({ signal: ctx.signal }) }),
|
|
42
|
+
}),
|
|
43
|
+
],
|
|
44
|
+
{ env, serverName: info.name },
|
|
45
|
+
);
|
|
46
|
+
return server;
|
|
47
|
+
},
|
|
48
|
+
dispose: (shared) => shared.api.close(),
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`runMcpServer` runs: logger init (`name` from package.json without its scope, `rootDir`) > `loadEnv` (then
|
|
53
|
+
the logger is reconfigured so `LOG_*` from `.env` apply) > `setup` once > transport start > ONE INFO line
|
|
54
|
+
`<name> started` with meta `{ version, transport, host, port, url }` after the listener is bound. It owns
|
|
55
|
+
SIGINT/SIGTERM: close the transport, then `dispose(shared)`, then `exit(0)` (`exit(1)` when close or
|
|
56
|
+
dispose failed); servers install no handlers. When a stdio client closes stdin the same shutdown runs
|
|
57
|
+
(`<name> stopping (transport closed)`), so an interval, pool or watcher created in `setup` cannot keep an
|
|
58
|
+
orphaned process alive (with `handleSignals: false` it disposes without exiting). Transport settings come
|
|
59
|
+
from the loaded env (`transportFromEnv`; `transport: {...}` overrides; `transport.auth.verifier` plugs a
|
|
60
|
+
token verifier); `strictEnv: true` throws on env validation errors. `create`'s third argument also
|
|
61
|
+
carries `createServer()`, a `createMcpServer` call with the package identity and `server` options.
|
|
62
|
+
It returns `{ info, env, shared, mode, host?, port?, url?, close() }`. If the transport cannot start (for
|
|
63
|
+
example HTTP without auth), `dispose` runs and the error is rethrown.
|