@ama-mcp/core 13.3.0-prerelease.14 → 13.3.0-prerelease.22

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 CHANGED
@@ -6,6 +6,9 @@
6
6
  <br />
7
7
  <br />
8
8
 
9
+ > [!WARNING]
10
+ > [Experimental](https://github.com/AmadeusITGroup/otter/blob/main/README.md#experimental)
11
+
9
12
  ## Description
10
13
 
11
14
  This module provides utilities to interact inside an MCP server.
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@ama-mcp/core",
3
- "version": "13.3.0-prerelease.14",
3
+ "version": "13.3.0-prerelease.22",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "description": "This module provides utilities to interact inside an MCP server",
7
+ "description": "Experimental package — This module provides utilities to interact inside an MCP server",
8
8
  "keywords": [
9
9
  "mcp",
10
10
  "otter",
@@ -42,15 +42,15 @@
42
42
  "@angular/platform-browser": "~20.3.0",
43
43
  "@angular/platform-browser-dynamic": "~20.3.0",
44
44
  "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
45
- "@modelcontextprotocol/sdk": "~1.19.0",
45
+ "@modelcontextprotocol/sdk": "~1.20.0",
46
46
  "@nx/eslint": "~21.6.0",
47
47
  "@nx/eslint-plugin": "~21.6.0",
48
48
  "@nx/jest": "~21.6.0",
49
49
  "@nx/js": "~21.6.0",
50
- "@o3r/build-helpers": "^13.3.0-prerelease.14",
51
- "@o3r/eslint-config": "^13.3.0-prerelease.14",
52
- "@o3r/eslint-plugin": "^13.3.0-prerelease.14",
53
- "@o3r/test-helpers": "^13.3.0-prerelease.14",
50
+ "@o3r/build-helpers": "^13.3.0-prerelease.22",
51
+ "@o3r/eslint-config": "^13.3.0-prerelease.22",
52
+ "@o3r/eslint-plugin": "^13.3.0-prerelease.22",
53
+ "@o3r/test-helpers": "^13.3.0-prerelease.22",
54
54
  "@stylistic/eslint-plugin": "~5.4.0",
55
55
  "@types/jest": "~29.5.2",
56
56
  "@types/node": "~22.18.0",
@@ -0,0 +1,95 @@
1
+ import { type LoggerToolOptions } from '../logger';
2
+ /**
3
+ * Default maximum age for cache entries before they are considered expired.
4
+ * @experimental
5
+ */
6
+ export declare const DEFAULT_AMA_MCP_CACHE_MAX_AGE_DAYS = 90;
7
+ /**
8
+ * Options for a tool using the cache manager.
9
+ * @experimental
10
+ */
11
+ export interface CacheToolOptions extends LoggerToolOptions {
12
+ /**
13
+ * Path to the cache file.
14
+ */
15
+ cacheFilePath?: string;
16
+ /**
17
+ * Maximum age for cache entries before they are considered expired.
18
+ */
19
+ cacheEntryExpireAfterDays?: number;
20
+ /**
21
+ * Whether to prettify the cache file when writing to disk.
22
+ */
23
+ prettifyCacheFile?: boolean;
24
+ /**
25
+ * Whether to disable the cache.
26
+ */
27
+ disableCache?: boolean;
28
+ }
29
+ interface GetOptions {
30
+ /**
31
+ * Whether to exclude expired entries.
32
+ */
33
+ excludeExpiredEntries?: boolean;
34
+ }
35
+ /**
36
+ * A simple cache manager that stores cache entries in a JSON file.
37
+ * @experimental
38
+ */
39
+ export declare class CacheManager<T> {
40
+ private cache;
41
+ private readonly options;
42
+ /**
43
+ * Creates a new CacheManager.
44
+ * @param options CacheManager options.
45
+ */
46
+ constructor(options: CacheToolOptions);
47
+ private writeCache;
48
+ /**
49
+ * Retrieves a cache entry by key.
50
+ * @param key
51
+ * @param options
52
+ */
53
+ get(key: string, options?: GetOptions): T | undefined;
54
+ /**
55
+ * Sets a cache entry.
56
+ * @param key
57
+ * @param value
58
+ */
59
+ set(key: string, value: T): Promise<void>;
60
+ /**
61
+ * Clears the entire cache.
62
+ */
63
+ clear(): Promise<void>;
64
+ /**
65
+ * Loads the cache from the cache file.
66
+ * @param options
67
+ * @param options.throwOnError Whether to throw an error if the cache file cannot be read.
68
+ */
69
+ initialize(options?: GetOptions & {
70
+ throwOnError?: boolean;
71
+ }): Promise<void>;
72
+ /**
73
+ * Iterates over all cache entries.
74
+ * @param callback
75
+ * @param options
76
+ */
77
+ forEach(callback: (key: string, entry: T | undefined) => void, options?: GetOptions): void;
78
+ /**
79
+ * Checks if a cache entry is expired.
80
+ * @param key
81
+ */
82
+ isExpired(key: string): boolean;
83
+ /**
84
+ * Returns the available keys
85
+ * @param options
86
+ */
87
+ getKeys(options?: GetOptions): string[];
88
+ /**
89
+ * Returns the available entries
90
+ * @param options
91
+ */
92
+ getEntries(options?: GetOptions): [string, T][];
93
+ }
94
+ export {};
95
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cache/index.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,WAAW,CAAC;AAWnB;;;GAGG;AACH,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,UAAU;IAClB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqF;IAE7G;;;OAGG;gBAED,OAAO,EAAE,gBAAgB;YAYb,UAAU;IAcxB;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,CAAC,GAAG,SAAS;IAQhE;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAQhC;;OAEG;IACI,KAAK;IAKZ;;;;OAIG;IACU,UAAU,CAAC,OAAO,GAAE,UAAU,GAAG;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;IA4B7E;;;;OAIG;IACI,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,EAAE,OAAO,GAAE,UAAe;IAM9F;;;OAGG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYtC;;;OAGG;IACI,OAAO,CAAC,OAAO,GAAE,UAAe,GAAG,MAAM,EAAE;IAQlD;;;OAGG;IACI,UAAU,CAAC,OAAO,GAAE,UAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;CAS3D"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CacheManager = exports.DEFAULT_AMA_MCP_CACHE_MAX_AGE_DAYS = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const promises_1 = require("node:fs/promises");
6
+ const node_os_1 = require("node:os");
7
+ const node_path_1 = require("node:path");
8
+ const logger_1 = require("../logger");
9
+ const MS_IN_A_DAY = 1000 * 60 * 60 * 24;
10
+ /**
11
+ * Default maximum age for cache entries before they are considered expired.
12
+ * @experimental
13
+ */
14
+ exports.DEFAULT_AMA_MCP_CACHE_MAX_AGE_DAYS = 90;
15
+ /**
16
+ * A simple cache manager that stores cache entries in a JSON file.
17
+ * @experimental
18
+ */
19
+ class CacheManager {
20
+ /**
21
+ * Creates a new CacheManager.
22
+ * @param options CacheManager options.
23
+ */
24
+ constructor(options) {
25
+ this.cache = {};
26
+ this.options = {
27
+ cacheFilePath: (0, node_path_1.resolve)((0, node_os_1.tmpdir)(), 'ama-mcp-cache.json'),
28
+ cacheEntryExpireAfterDays: exports.DEFAULT_AMA_MCP_CACHE_MAX_AGE_DAYS,
29
+ prettifyCacheFile: false,
30
+ disableCache: false,
31
+ logger: new logger_1.MCPLogger('CacheManager', options.logLevel),
32
+ ...options
33
+ };
34
+ }
35
+ async writeCache() {
36
+ if (this.options.disableCache) {
37
+ this.options.logger.debug?.('Cache is disabled; skipping write.');
38
+ return;
39
+ }
40
+ const directory = (0, node_path_1.dirname)(this.options.cacheFilePath);
41
+ if (!(0, node_fs_1.existsSync)(directory)) {
42
+ this.options.logger.debug?.(`Creating cache directory at ${directory}`);
43
+ await (0, promises_1.mkdir)(directory, { recursive: true });
44
+ }
45
+ this.options.logger.debug?.(`Writing cache to ${this.options.cacheFilePath}`, this.cache);
46
+ return (0, promises_1.writeFile)(this.options.cacheFilePath, JSON.stringify(this.cache, null, this.options.prettifyCacheFile ? 2 : 0));
47
+ }
48
+ /**
49
+ * Retrieves a cache entry by key.
50
+ * @param key
51
+ * @param options
52
+ */
53
+ get(key, options = {}) {
54
+ const { excludeExpiredEntries = true } = options;
55
+ if (excludeExpiredEntries && this.isExpired(key)) {
56
+ return;
57
+ }
58
+ return this.cache[key]?.data;
59
+ }
60
+ /**
61
+ * Sets a cache entry.
62
+ * @param key
63
+ * @param value
64
+ */
65
+ set(key, value) {
66
+ this.cache[key] = {
67
+ updatedAt: new Date().toISOString(),
68
+ data: value
69
+ };
70
+ return this.writeCache();
71
+ }
72
+ /**
73
+ * Clears the entire cache.
74
+ */
75
+ clear() {
76
+ this.cache = {};
77
+ return this.writeCache();
78
+ }
79
+ /**
80
+ * Loads the cache from the cache file.
81
+ * @param options
82
+ * @param options.throwOnError Whether to throw an error if the cache file cannot be read.
83
+ */
84
+ async initialize(options = {}) {
85
+ const { excludeExpiredEntries = true, throwOnError = false } = options;
86
+ if (this.options.disableCache) {
87
+ this.options.logger.debug?.('Cache is disabled; skipping initialization.');
88
+ return;
89
+ }
90
+ try {
91
+ this.cache = JSON.parse(await (0, promises_1.readFile)(this.options.cacheFilePath, { encoding: 'utf8' }));
92
+ if (excludeExpiredEntries) {
93
+ let cacheUpdated = false;
94
+ Object.keys(this.cache).forEach((key) => {
95
+ if (this.isExpired(key)) {
96
+ delete this.cache[key];
97
+ cacheUpdated = true;
98
+ }
99
+ });
100
+ if (cacheUpdated) {
101
+ await this.writeCache();
102
+ }
103
+ }
104
+ }
105
+ catch (e) {
106
+ this.options.logger.warn?.(`Could not read cache file at ${this.options.cacheFilePath}, starting with empty cache.`);
107
+ if (throwOnError) {
108
+ throw e;
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Iterates over all cache entries.
114
+ * @param callback
115
+ * @param options
116
+ */
117
+ forEach(callback, options = {}) {
118
+ Object.keys(this.cache).forEach((key) => callback(key, this.get(key, options)));
119
+ }
120
+ /**
121
+ * Checks if a cache entry is expired.
122
+ * @param key
123
+ */
124
+ isExpired(key) {
125
+ const entry = this.cache[key];
126
+ if (!entry) {
127
+ return true;
128
+ }
129
+ if (this.options.cacheEntryExpireAfterDays) {
130
+ const ageMs = Date.now() - new Date(entry.updatedAt).getTime();
131
+ return ageMs > (this.options.cacheEntryExpireAfterDays * MS_IN_A_DAY);
132
+ }
133
+ return false;
134
+ }
135
+ /**
136
+ * Returns the available keys
137
+ * @param options
138
+ */
139
+ getKeys(options = {}) {
140
+ const { excludeExpiredEntries = true } = options;
141
+ if (!excludeExpiredEntries) {
142
+ return Object.keys(this.cache);
143
+ }
144
+ return Object.keys(this.cache).filter((key) => !this.isExpired(key));
145
+ }
146
+ /**
147
+ * Returns the available entries
148
+ * @param options
149
+ */
150
+ getEntries(options = {}) {
151
+ const { excludeExpiredEntries = true } = options;
152
+ if (!excludeExpiredEntries) {
153
+ return Object.entries(this.cache).map(([key, entry]) => [key, entry.data]);
154
+ }
155
+ return Object.entries(this.cache)
156
+ .filter(([key]) => !this.isExpired(key))
157
+ .map(([key, entry]) => [key, entry.data]);
158
+ }
159
+ }
160
+ exports.CacheManager = CacheManager;
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cache/index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,33 @@
1
+ /**
2
+ * Log levels for MCP server logging
3
+ * @experimental
4
+ */
1
5
  export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
2
6
  /**
3
7
  * Logger type for MCP server
8
+ * @experimental
4
9
  */
5
10
  export type Logger = {
6
11
  [K in LogLevel]?: (message: string, meta?: any) => any;
7
12
  };
13
+ /**
14
+ * Options for a tool using a logger
15
+ * @experimental
16
+ */
17
+ export interface LoggerToolOptions {
18
+ /**
19
+ * Logger instance to use for the tool
20
+ */
21
+ logger?: Logger;
22
+ /**
23
+ * Log level for the tool logger
24
+ */
25
+ logLevel?: LogLevel;
26
+ }
27
+ /**
28
+ * MCP Logger implementation
29
+ * @experimental
30
+ */
8
31
  export declare class MCPLogger implements Logger {
9
32
  private readonly name;
10
33
  private level;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/logger/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG;KAMlB,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG;CACvD,CAAC;AAmBF,qBAAa,SAAU,YAAW,MAAM;IAEpC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,KAAK;gBADI,IAAI,EAAE,MAAM,EACrB,KAAK,GAAE,QAAiB;IAKlC,OAAO,CAAC,GAAG;IAMJ,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAOxB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;CAGzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/logger/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG;KAMlB,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG;CACvD,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAoBD;;;GAGG;AACH,qBAAa,SAAU,YAAW,MAAM;IAEpC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,KAAK;gBADI,IAAI,EAAE,MAAM,EACrB,KAAK,GAAE,QAAiB;IAKlC,OAAO,CAAC,GAAG;IAMJ,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAOxB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;CAGzC"}
@@ -15,6 +15,10 @@ const logInStderr = (name, level, message, meta) => process.stderr.write(JSON.st
15
15
  message,
16
16
  meta
17
17
  }) + '\n');
18
+ /**
19
+ * MCP Logger implementation
20
+ * @experimental
21
+ */
18
22
  class MCPLogger {
19
23
  constructor(name, level = 'info') {
20
24
  this.name = name;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logger/index.ts"],"names":[],"mappings":";;;AAcA,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAA+B,CAAC;AAE/F;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAe,EAAE,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACtG,IAAI,CAAC,SAAS,CAAC;IACb,IAAI;IACJ,KAAK;IACL,OAAO;IACP,IAAI;CACL,CAAC,GAAG,IAAI,CACV,CAAC;AACF,MAAa,SAAS;IACpB,YACmB,IAAY,EACrB,QAAkB,MAAM;QADf,SAAI,GAAJ,IAAI,CAAQ;QACrB,UAAK,GAAL,KAAK,CAAmB;QAEhC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAAU;QACtD,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEM,QAAQ,CAAC,KAAe;QAC7B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,OAAe,EAAE,IAAU;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAEM,IAAI,CAAC,OAAe,EAAE,IAAU;QACrC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,IAAI,CAAC,OAAe,EAAE,IAAU;QACrC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,OAAe,EAAE,IAAU;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AApCD,8BAoCC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logger/index.ts"],"names":[],"mappings":";;;AAkCA,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAA+B,CAAC;AAE/F;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAe,EAAE,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACtG,IAAI,CAAC,SAAS,CAAC;IACb,IAAI;IACJ,KAAK;IACL,OAAO;IACP,IAAI;CACL,CAAC,GAAG,IAAI,CACV,CAAC;AAEF;;;GAGG;AACH,MAAa,SAAS;IACpB,YACmB,IAAY,EACrB,QAAkB,MAAM;QADf,SAAI,GAAJ,IAAI,CAAQ;QACrB,UAAK,GAAL,KAAK,CAAmB;QAEhC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAAU;QACtD,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEM,QAAQ,CAAC,KAAe;QAC7B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,OAAe,EAAE,IAAU;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAEM,IAAI,CAAC,OAAe,EAAE,IAAU;QACrC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,IAAI,CAAC,OAAe,EAAE,IAAU;QACrC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,OAAe,EAAE,IAAU;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AApCD,8BAoCC"}
@@ -1,3 +1,4 @@
1
+ export * from './cache/index';
1
2
  export * from './logger/index';
2
3
  export * from './resource/index';
3
4
  export * from './testing/index';
@@ -1 +1 @@
1
- {"version":3,"file":"public_api.d.ts","sourceRoot":"","sources":["../../src/public_api.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"public_api.d.ts","sourceRoot":"","sources":["../../src/public_api.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
package/src/public_api.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./cache/index"), exports);
4
5
  tslib_1.__exportStar(require("./logger/index"), exports);
5
6
  tslib_1.__exportStar(require("./resource/index"), exports);
6
7
  tslib_1.__exportStar(require("./testing/index"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"public_api.js","sourceRoot":"","sources":["../../src/public_api.ts"],"names":[],"mappings":";;;AAAA,yDAA+B;AAC/B,2DAAiC;AACjC,0DAAgC;AAChC,uDAA6B"}
1
+ {"version":3,"file":"public_api.js","sourceRoot":"","sources":["../../src/public_api.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,yDAA+B;AAC/B,2DAAiC;AACjC,0DAAgC;AAChC,uDAA6B"}
@@ -4,4 +4,10 @@
4
4
  * value: resource content
5
5
  */
6
6
  export declare const resourceRegistry: Map<string, string>;
7
+ export interface ResourceToolOptions {
8
+ /**
9
+ * Prefix for resource URIs managed by the tool.
10
+ */
11
+ uriPrefix: string;
12
+ }
7
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resource/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,qBAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resource/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,qBAA4B,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -4,6 +4,7 @@ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
4
  * Set up an MCP client and server for testing purposes.
5
5
  * DO NOT USE OUTSIDE OF TESTS.
6
6
  * @param mcpServer
7
+ * @experimental
7
8
  */
8
9
  export declare const setUpClientAndServerForTesting: (mcpServer: McpServer) => Promise<{
9
10
  mcpServer: McpServer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACP,MAAM,2CAA2C,CAAC;AAInD,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,GAAU,WAAW,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;EAWxE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACP,MAAM,2CAA2C,CAAC;AAInD,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,GAAU,WAAW,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;EAWxE,CAAC"}
@@ -7,6 +7,7 @@ const inMemory_js_1 = require("@modelcontextprotocol/sdk/inMemory.js");
7
7
  * Set up an MCP client and server for testing purposes.
8
8
  * DO NOT USE OUTSIDE OF TESTS.
9
9
  * @param mcpServer
10
+ * @experimental
10
11
  */
11
12
  const setUpClientAndServerForTesting = async (mcpServer) => {
12
13
  const [clientTransport, serverTransport] = inMemory_js_1.InMemoryTransport.createLinkedPair();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":";;;AAAA,wEAEmD;AACnD,uEAE+C;AAK/C;;;;GAIG;AACI,MAAM,8BAA8B,GAAG,KAAK,EAAE,SAAoB,EAAE,EAAE;IAC3E,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,+BAAiB,CAAC,gBAAgB,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC;QACxB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;QAC/B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;KAC1C,CAAC,CAAC;IACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC,CAAC;AAXW,QAAA,8BAA8B,kCAWzC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":";;;AAAA,wEAEmD;AACnD,uEAE+C;AAK/C;;;;;GAKG;AACI,MAAM,8BAA8B,GAAG,KAAK,EAAE,SAAoB,EAAE,EAAE;IAC3E,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,+BAAiB,CAAC,gBAAgB,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC;QACxB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;QAC/B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;KAC1C,CAAC,CAAC;IACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC,CAAC;AAXW,QAAA,8BAA8B,kCAWzC"}
@@ -1,16 +1,9 @@
1
- import type { Logger, LogLevel } from '../logger';
1
+ import type { LoggerToolOptions } from '../logger';
2
2
  /**
3
3
  * Possible override for tool definition
4
+ * @experimental
4
5
  */
5
- export interface ToolDefinition {
6
- /**
7
- * Logger instance to use for the tool
8
- */
9
- logger?: Logger;
10
- /**
11
- * Log level for the tool logger
12
- */
13
- logLevel?: LogLevel;
6
+ export interface ToolDefinition extends LoggerToolOptions {
14
7
  /**
15
8
  * Tool name
16
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tool/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EACT,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tool/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}