@daniel.stefan/metalink 1.3.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 +160 -0
- package/package.json +96 -0
- package/packages/cli/dist/bin/cli.d.ts +3 -0
- package/packages/cli/dist/bin/cli.d.ts.map +1 -0
- package/packages/cli/dist/bin/cli.js +4 -0
- package/packages/cli/dist/bin/cli.js.map +1 -0
- package/packages/cli/dist/commands/config/init.d.ts +9 -0
- package/packages/cli/dist/commands/config/init.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/init.js +38 -0
- package/packages/cli/dist/commands/config/init.js.map +1 -0
- package/packages/cli/dist/commands/config/validate.d.ts +9 -0
- package/packages/cli/dist/commands/config/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/validate.js +34 -0
- package/packages/cli/dist/commands/config/validate.js.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts +15 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.js +184 -0
- package/packages/cli/dist/commands/daemon/restart.js.map +1 -0
- package/packages/cli/dist/commands/daemon/start.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/start.js +85 -0
- package/packages/cli/dist/commands/daemon/start.js.map +1 -0
- package/packages/cli/dist/commands/daemon/status.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/status.js +69 -0
- package/packages/cli/dist/commands/daemon/status.js.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts +8 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.js +77 -0
- package/packages/cli/dist/commands/daemon/stop.js.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts +10 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.js +58 -0
- package/packages/cli/dist/commands/import/mcpm.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.js +52 -0
- package/packages/cli/dist/commands/safety/add-risky.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.js +52 -0
- package/packages/cli/dist/commands/safety/add-safe.js.map +1 -0
- package/packages/cli/dist/commands/safety/check.d.ts +9 -0
- package/packages/cli/dist/commands/safety/check.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/check.js +36 -0
- package/packages/cli/dist/commands/safety/check.js.map +1 -0
- package/packages/cli/dist/commands/safety/export.d.ts +10 -0
- package/packages/cli/dist/commands/safety/export.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/export.js +48 -0
- package/packages/cli/dist/commands/safety/export.js.map +1 -0
- package/packages/cli/dist/commands/safety/import.d.ts +12 -0
- package/packages/cli/dist/commands/safety/import.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/import.js +78 -0
- package/packages/cli/dist/commands/safety/import.js.map +1 -0
- package/packages/cli/dist/commands/safety/index.d.ts +8 -0
- package/packages/cli/dist/commands/safety/index.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/index.js +46 -0
- package/packages/cli/dist/commands/safety/index.js.map +1 -0
- package/packages/cli/dist/commands/safety/list.d.ts +6 -0
- package/packages/cli/dist/commands/safety/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/list.js +77 -0
- package/packages/cli/dist/commands/safety/list.js.map +1 -0
- package/packages/cli/dist/commands/safety/remove.d.ts +9 -0
- package/packages/cli/dist/commands/safety/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/remove.js +46 -0
- package/packages/cli/dist/commands/safety/remove.js.map +1 -0
- package/packages/cli/dist/commands/safety/reset.d.ts +9 -0
- package/packages/cli/dist/commands/safety/reset.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/reset.js +46 -0
- package/packages/cli/dist/commands/safety/reset.js.map +1 -0
- package/packages/cli/dist/commands/safety/validate.d.ts +9 -0
- package/packages/cli/dist/commands/safety/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/validate.js +51 -0
- package/packages/cli/dist/commands/safety/validate.js.map +1 -0
- package/packages/cli/dist/commands/secret/get.d.ts +9 -0
- package/packages/cli/dist/commands/secret/get.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/get.js +26 -0
- package/packages/cli/dist/commands/secret/get.js.map +1 -0
- package/packages/cli/dist/commands/secret/set.d.ts +10 -0
- package/packages/cli/dist/commands/secret/set.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/set.js +22 -0
- package/packages/cli/dist/commands/secret/set.js.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts +2 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js +234 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js.map +1 -0
- package/packages/cli/dist/commands/server/add.d.ts +14 -0
- package/packages/cli/dist/commands/server/add.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/add.js +86 -0
- package/packages/cli/dist/commands/server/add.js.map +1 -0
- package/packages/cli/dist/commands/server/available.d.ts +10 -0
- package/packages/cli/dist/commands/server/available.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/available.js +62 -0
- package/packages/cli/dist/commands/server/available.js.map +1 -0
- package/packages/cli/dist/commands/server/debug.d.ts +18 -0
- package/packages/cli/dist/commands/server/debug.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/debug.js +165 -0
- package/packages/cli/dist/commands/server/debug.js.map +1 -0
- package/packages/cli/dist/commands/server/info.d.ts +13 -0
- package/packages/cli/dist/commands/server/info.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/info.js +62 -0
- package/packages/cli/dist/commands/server/info.js.map +1 -0
- package/packages/cli/dist/commands/server/list.d.ts +10 -0
- package/packages/cli/dist/commands/server/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/list.js +105 -0
- package/packages/cli/dist/commands/server/list.js.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts +13 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.js +46 -0
- package/packages/cli/dist/commands/server/refresh-tools.js.map +1 -0
- package/packages/cli/dist/commands/server/remove.d.ts +12 -0
- package/packages/cli/dist/commands/server/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/remove.js +39 -0
- package/packages/cli/dist/commands/server/remove.js.map +1 -0
- package/packages/cli/dist/commands/server/restart.d.ts +9 -0
- package/packages/cli/dist/commands/server/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/restart.js +30 -0
- package/packages/cli/dist/commands/server/restart.js.map +1 -0
- package/packages/cli/dist/commands/server/start.d.ts +9 -0
- package/packages/cli/dist/commands/server/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/start.js +37 -0
- package/packages/cli/dist/commands/server/start.js.map +1 -0
- package/packages/cli/dist/commands/server/status.d.ts +9 -0
- package/packages/cli/dist/commands/server/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/status.js +30 -0
- package/packages/cli/dist/commands/server/status.js.map +1 -0
- package/packages/cli/dist/commands/server/stop.d.ts +9 -0
- package/packages/cli/dist/commands/server/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/stop.js +31 -0
- package/packages/cli/dist/commands/server/stop.js.map +1 -0
- package/packages/cli/dist/commands/server/validate.d.ts +15 -0
- package/packages/cli/dist/commands/server/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/validate.js +87 -0
- package/packages/cli/dist/commands/server/validate.js.map +1 -0
- package/packages/cli/dist/commands/stdio.d.ts +36 -0
- package/packages/cli/dist/commands/stdio.d.ts.map +1 -0
- package/packages/cli/dist/commands/stdio.js +85 -0
- package/packages/cli/dist/commands/stdio.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js +98 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute.js +55 -0
- package/packages/cli/dist/commands/tool/execute.js.map +1 -0
- package/packages/cli/dist/commands/tool/list.d.ts +13 -0
- package/packages/cli/dist/commands/tool/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/list.js +91 -0
- package/packages/cli/dist/commands/tool/list.js.map +1 -0
- package/packages/cli/dist/commands/tool/search.d.ts +12 -0
- package/packages/cli/dist/commands/tool/search.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/search.js +87 -0
- package/packages/cli/dist/commands/tool/search.js.map +1 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +9 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts +18 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.js +69 -0
- package/packages/cli/dist/utils/daemon-checker.js.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts +7 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.js +13 -0
- package/packages/cli/dist/utils/daemon-endpoint.js.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts +43 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.js +141 -0
- package/packages/cli/dist/utils/get-configured-port.js.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts +48 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.js +181 -0
- package/packages/cli/dist/utils/stdio-bridge.js.map +1 -0
- package/packages/cli/package.json +48 -0
- package/packages/core/dist/config/defaults.d.ts +36 -0
- package/packages/core/dist/config/defaults.d.ts.map +1 -0
- package/packages/core/dist/config/defaults.js +324 -0
- package/packages/core/dist/config/defaults.js.map +1 -0
- package/packages/core/dist/config/index.d.ts +9 -0
- package/packages/core/dist/config/index.d.ts.map +1 -0
- package/packages/core/dist/config/index.js +14 -0
- package/packages/core/dist/config/index.js.map +1 -0
- package/packages/core/dist/config/loader.d.ts +269 -0
- package/packages/core/dist/config/loader.d.ts.map +1 -0
- package/packages/core/dist/config/loader.js +777 -0
- package/packages/core/dist/config/loader.js.map +1 -0
- package/packages/core/dist/config/registry.d.ts +212 -0
- package/packages/core/dist/config/registry.d.ts.map +1 -0
- package/packages/core/dist/config/registry.js +754 -0
- package/packages/core/dist/config/registry.js.map +1 -0
- package/packages/core/dist/config/schema.d.ts +4352 -0
- package/packages/core/dist/config/schema.d.ts.map +1 -0
- package/packages/core/dist/config/schema.js +267 -0
- package/packages/core/dist/config/schema.js.map +1 -0
- package/packages/core/dist/daemon.d.ts +7 -0
- package/packages/core/dist/daemon.d.ts.map +1 -0
- package/packages/core/dist/daemon.js +116 -0
- package/packages/core/dist/daemon.js.map +1 -0
- package/packages/core/dist/http-client-retry.d.ts +67 -0
- package/packages/core/dist/http-client-retry.d.ts.map +1 -0
- package/packages/core/dist/http-client-retry.js +133 -0
- package/packages/core/dist/http-client-retry.js.map +1 -0
- package/packages/core/dist/http-client-updated.d.ts +147 -0
- package/packages/core/dist/http-client-updated.d.ts.map +1 -0
- package/packages/core/dist/http-client-updated.js +452 -0
- package/packages/core/dist/http-client-updated.js.map +1 -0
- package/packages/core/dist/http-client.d.ts +207 -0
- package/packages/core/dist/http-client.d.ts.map +1 -0
- package/packages/core/dist/http-client.js +704 -0
- package/packages/core/dist/http-client.js.map +1 -0
- package/packages/core/dist/index.d.ts +13 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +23 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/logging/index.d.ts +46 -0
- package/packages/core/dist/logging/index.d.ts.map +1 -0
- package/packages/core/dist/logging/index.js +74 -0
- package/packages/core/dist/logging/index.js.map +1 -0
- package/packages/core/dist/metrics/index.d.ts +339 -0
- package/packages/core/dist/metrics/index.d.ts.map +1 -0
- package/packages/core/dist/metrics/index.js +792 -0
- package/packages/core/dist/metrics/index.js.map +1 -0
- package/packages/core/dist/plugins/index.d.ts +49 -0
- package/packages/core/dist/plugins/index.d.ts.map +1 -0
- package/packages/core/dist/plugins/index.js +82 -0
- package/packages/core/dist/plugins/index.js.map +1 -0
- package/packages/core/dist/secrets/index.d.ts +6 -0
- package/packages/core/dist/secrets/index.d.ts.map +1 -0
- package/packages/core/dist/secrets/index.js +5 -0
- package/packages/core/dist/secrets/index.js.map +1 -0
- package/packages/core/dist/secrets/keyring.d.ts +54 -0
- package/packages/core/dist/secrets/keyring.d.ts.map +1 -0
- package/packages/core/dist/secrets/keyring.js +141 -0
- package/packages/core/dist/secrets/keyring.js.map +1 -0
- package/packages/core/dist/server/batch-executor.d.ts +83 -0
- package/packages/core/dist/server/batch-executor.d.ts.map +1 -0
- package/packages/core/dist/server/batch-executor.js +291 -0
- package/packages/core/dist/server/batch-executor.js.map +1 -0
- package/packages/core/dist/server/circuit-breaker.d.ts +215 -0
- package/packages/core/dist/server/circuit-breaker.d.ts.map +1 -0
- package/packages/core/dist/server/circuit-breaker.js +330 -0
- package/packages/core/dist/server/circuit-breaker.js.map +1 -0
- package/packages/core/dist/server/client-detection.d.ts +40 -0
- package/packages/core/dist/server/client-detection.d.ts.map +1 -0
- package/packages/core/dist/server/client-detection.js +242 -0
- package/packages/core/dist/server/client-detection.js.map +1 -0
- package/packages/core/dist/server/client-profiles.d.ts +102 -0
- package/packages/core/dist/server/client-profiles.d.ts.map +1 -0
- package/packages/core/dist/server/client-profiles.js +254 -0
- package/packages/core/dist/server/client-profiles.js.map +1 -0
- package/packages/core/dist/server/http.d.ts +386 -0
- package/packages/core/dist/server/http.d.ts.map +1 -0
- package/packages/core/dist/server/http.js +4253 -0
- package/packages/core/dist/server/http.js.map +1 -0
- package/packages/core/dist/server/index.d.ts +7 -0
- package/packages/core/dist/server/index.d.ts.map +1 -0
- package/packages/core/dist/server/index.js +6 -0
- package/packages/core/dist/server/index.js.map +1 -0
- package/packages/core/dist/server/manager.d.ts +458 -0
- package/packages/core/dist/server/manager.d.ts.map +1 -0
- package/packages/core/dist/server/manager.js +3255 -0
- package/packages/core/dist/server/manager.js.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts +69 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js +214 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts +128 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.js +443 -0
- package/packages/core/dist/server/managers/ProcessManager.js.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts +152 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js +426 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js.map +1 -0
- package/packages/core/dist/server/managers/index.d.ts +9 -0
- package/packages/core/dist/server/managers/index.d.ts.map +1 -0
- package/packages/core/dist/server/managers/index.js +9 -0
- package/packages/core/dist/server/managers/index.js.map +1 -0
- package/packages/core/dist/server/metrics.d.ts +134 -0
- package/packages/core/dist/server/metrics.d.ts.map +1 -0
- package/packages/core/dist/server/metrics.js +273 -0
- package/packages/core/dist/server/metrics.js.map +1 -0
- package/packages/core/dist/server/prompts.d.ts +58 -0
- package/packages/core/dist/server/prompts.d.ts.map +1 -0
- package/packages/core/dist/server/prompts.js +405 -0
- package/packages/core/dist/server/prompts.js.map +1 -0
- package/packages/core/dist/server/protocol-versions.d.ts +49 -0
- package/packages/core/dist/server/protocol-versions.d.ts.map +1 -0
- package/packages/core/dist/server/protocol-versions.js +173 -0
- package/packages/core/dist/server/protocol-versions.js.map +1 -0
- package/packages/core/dist/server/resources.d.ts +64 -0
- package/packages/core/dist/server/resources.d.ts.map +1 -0
- package/packages/core/dist/server/resources.js +243 -0
- package/packages/core/dist/server/resources.js.map +1 -0
- package/packages/core/dist/server/schema-store.d.ts +84 -0
- package/packages/core/dist/server/schema-store.d.ts.map +1 -0
- package/packages/core/dist/server/schema-store.js +234 -0
- package/packages/core/dist/server/schema-store.js.map +1 -0
- package/packages/core/dist/server/schema-validator.d.ts +51 -0
- package/packages/core/dist/server/schema-validator.d.ts.map +1 -0
- package/packages/core/dist/server/schema-validator.js +208 -0
- package/packages/core/dist/server/schema-validator.js.map +1 -0
- package/packages/core/dist/server/token-calculator.d.ts +44 -0
- package/packages/core/dist/server/token-calculator.d.ts.map +1 -0
- package/packages/core/dist/server/token-calculator.js +53 -0
- package/packages/core/dist/server/token-calculator.js.map +1 -0
- package/packages/core/dist/server/types.d.ts +45 -0
- package/packages/core/dist/server/types.d.ts.map +1 -0
- package/packages/core/dist/server/types.js +5 -0
- package/packages/core/dist/server/types.js.map +1 -0
- package/packages/core/dist/utils/file-lock.d.ts +73 -0
- package/packages/core/dist/utils/file-lock.d.ts.map +1 -0
- package/packages/core/dist/utils/file-lock.js +235 -0
- package/packages/core/dist/utils/file-lock.js.map +1 -0
- package/packages/core/package.json +36 -0
- package/packages/dashboard/dist/assets/index-B7hvkCMu.css +1 -0
- package/packages/dashboard/dist/assets/index-yZhLPpzr.js +1 -0
- package/packages/dashboard/dist/index.html +14 -0
- package/packages/dashboard/package.json +24 -0
- package/packages/shared/dist/version.d.ts +2 -0
- package/packages/shared/dist/version.d.ts.map +1 -0
- package/packages/shared/dist/version.js +2 -0
- package/packages/shared/dist/version.js.map +1 -0
- package/packages/shared/package.json +18 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources Implementation for Metalink
|
|
3
|
+
*
|
|
4
|
+
* Provides built-in resources and resource templates per MCP spec:
|
|
5
|
+
* - Built-in resources: metalink://servers, metalink://tools, metalink://version
|
|
6
|
+
* - Resource templates: metalink://server/{name}, metalink://server/{name}/tools
|
|
7
|
+
*/
|
|
8
|
+
import type { ServerManager } from './manager.js';
|
|
9
|
+
import type { ConfigLoader } from '../config/loader.js';
|
|
10
|
+
/**
|
|
11
|
+
* Resource definition for MCP resources/list response
|
|
12
|
+
*/
|
|
13
|
+
export interface ResourceDefinition {
|
|
14
|
+
uri: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
mimeType?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resource template definition for MCP resources/templates/list response
|
|
21
|
+
*/
|
|
22
|
+
export interface ResourceTemplateDefinition {
|
|
23
|
+
uriTemplate: string;
|
|
24
|
+
name: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
mimeType?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resource content item for MCP resources/read response
|
|
30
|
+
*/
|
|
31
|
+
export interface ResourceContent {
|
|
32
|
+
uri: string;
|
|
33
|
+
mimeType?: string;
|
|
34
|
+
text?: string;
|
|
35
|
+
blob?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resource read response per MCP spec
|
|
39
|
+
*/
|
|
40
|
+
export interface ResourceReadResponse {
|
|
41
|
+
contents: ResourceContent[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get list of built-in resources
|
|
45
|
+
* Used for MCP resources/list method
|
|
46
|
+
*/
|
|
47
|
+
export declare function getResourcesList(): ResourceDefinition[];
|
|
48
|
+
/**
|
|
49
|
+
* Get list of resource templates
|
|
50
|
+
* Used for MCP resources/templates/list method
|
|
51
|
+
*/
|
|
52
|
+
export declare function getResourceTemplatesList(): ResourceTemplateDefinition[];
|
|
53
|
+
/**
|
|
54
|
+
* Read a resource by URI
|
|
55
|
+
* Used for MCP resources/read method
|
|
56
|
+
*
|
|
57
|
+
* @param uri - Resource URI to read
|
|
58
|
+
* @param serverManager - Server manager instance for runtime data
|
|
59
|
+
* @param configLoader - Config loader instance for server configurations
|
|
60
|
+
* @returns Resource read response with contents
|
|
61
|
+
* @throws Error if resource not found
|
|
62
|
+
*/
|
|
63
|
+
export declare function readResource(uri: string, serverManager: ServerManager, configLoader: ConfigLoader): Promise<ResourceReadResponse>;
|
|
64
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/server/resources.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,EAAE,CAqBvD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,0BAA0B,EAAE,CAevE;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA6B/B"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources Implementation for Metalink
|
|
3
|
+
*
|
|
4
|
+
* Provides built-in resources and resource templates per MCP spec:
|
|
5
|
+
* - Built-in resources: metalink://servers, metalink://tools, metalink://version
|
|
6
|
+
* - Resource templates: metalink://server/{name}, metalink://server/{name}/tools
|
|
7
|
+
*/
|
|
8
|
+
import { VERSION } from '@metalink/shared';
|
|
9
|
+
/**
|
|
10
|
+
* Get list of built-in resources
|
|
11
|
+
* Used for MCP resources/list method
|
|
12
|
+
*/
|
|
13
|
+
export function getResourcesList() {
|
|
14
|
+
return [
|
|
15
|
+
{
|
|
16
|
+
uri: 'metalink://servers',
|
|
17
|
+
name: 'MCP Servers List',
|
|
18
|
+
description: 'List of all configured MCP servers with current status',
|
|
19
|
+
mimeType: 'application/json',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
uri: 'metalink://tools',
|
|
23
|
+
name: 'Tools Summary',
|
|
24
|
+
description: 'Summary of all tools available across MCP servers',
|
|
25
|
+
mimeType: 'application/json',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
uri: 'metalink://version',
|
|
29
|
+
name: 'Metalink Version',
|
|
30
|
+
description: 'Current Metalink version information',
|
|
31
|
+
mimeType: 'text/plain',
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get list of resource templates
|
|
37
|
+
* Used for MCP resources/templates/list method
|
|
38
|
+
*/
|
|
39
|
+
export function getResourceTemplatesList() {
|
|
40
|
+
return [
|
|
41
|
+
{
|
|
42
|
+
uriTemplate: 'metalink://server/{name}',
|
|
43
|
+
name: 'Server Details',
|
|
44
|
+
description: 'Detailed information about a specific MCP server',
|
|
45
|
+
mimeType: 'application/json',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
uriTemplate: 'metalink://server/{name}/tools',
|
|
49
|
+
name: 'Server Tools',
|
|
50
|
+
description: 'List of tools provided by a specific MCP server',
|
|
51
|
+
mimeType: 'application/json',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Read a resource by URI
|
|
57
|
+
* Used for MCP resources/read method
|
|
58
|
+
*
|
|
59
|
+
* @param uri - Resource URI to read
|
|
60
|
+
* @param serverManager - Server manager instance for runtime data
|
|
61
|
+
* @param configLoader - Config loader instance for server configurations
|
|
62
|
+
* @returns Resource read response with contents
|
|
63
|
+
* @throws Error if resource not found
|
|
64
|
+
*/
|
|
65
|
+
export async function readResource(uri, serverManager, configLoader) {
|
|
66
|
+
// Handle built-in resources
|
|
67
|
+
if (uri === 'metalink://servers') {
|
|
68
|
+
return await readServersResource(serverManager, configLoader);
|
|
69
|
+
}
|
|
70
|
+
if (uri === 'metalink://tools') {
|
|
71
|
+
return await readToolsResource(serverManager, configLoader);
|
|
72
|
+
}
|
|
73
|
+
if (uri === 'metalink://version') {
|
|
74
|
+
return readVersionResource();
|
|
75
|
+
}
|
|
76
|
+
// Handle resource templates
|
|
77
|
+
const serverDetailsMatch = uri.match(/^metalink:\/\/server\/([^/]+)$/);
|
|
78
|
+
if (serverDetailsMatch) {
|
|
79
|
+
const serverName = serverDetailsMatch[1];
|
|
80
|
+
return await readServerDetailsResource(serverName, serverManager, configLoader);
|
|
81
|
+
}
|
|
82
|
+
const serverToolsMatch = uri.match(/^metalink:\/\/server\/([^/]+)\/tools$/);
|
|
83
|
+
if (serverToolsMatch) {
|
|
84
|
+
const serverName = serverToolsMatch[1];
|
|
85
|
+
return await readServerToolsResource(serverName, serverManager, configLoader);
|
|
86
|
+
}
|
|
87
|
+
// Resource not found
|
|
88
|
+
throw new Error(`Resource not found: ${uri}`);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Read metalink://servers resource
|
|
92
|
+
* Returns list of all configured servers with status
|
|
93
|
+
*/
|
|
94
|
+
async function readServersResource(serverManager, configLoader) {
|
|
95
|
+
const allServers = configLoader.getAllServers();
|
|
96
|
+
const serverStates = serverManager.getAllServers();
|
|
97
|
+
const servers = allServers.map((config) => {
|
|
98
|
+
const status = serverStates[config.name];
|
|
99
|
+
const isStdio = config.transport === 'stdio' || config.transport === undefined;
|
|
100
|
+
return {
|
|
101
|
+
name: config.name,
|
|
102
|
+
transport: config.transport || 'stdio',
|
|
103
|
+
...(isStdio && 'command' in config ? { command: config.command, args: config.args || [] } : {}),
|
|
104
|
+
...(!isStdio && 'url' in config ? { url: config.url } : {}),
|
|
105
|
+
env: config.env || {},
|
|
106
|
+
status: status?.status || 'stopped',
|
|
107
|
+
pid: status?.pid,
|
|
108
|
+
uptime: status?.uptime,
|
|
109
|
+
errorCount: status?.errorCount || 0,
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
contents: [
|
|
114
|
+
{
|
|
115
|
+
uri: 'metalink://servers',
|
|
116
|
+
mimeType: 'application/json',
|
|
117
|
+
text: JSON.stringify(servers, null, 2),
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Read metalink://tools resource
|
|
124
|
+
* Returns summary of all tools across all servers
|
|
125
|
+
*/
|
|
126
|
+
async function readToolsResource(serverManager, configLoader) {
|
|
127
|
+
const allServers = configLoader.getAllServers();
|
|
128
|
+
const toolsSummary = {};
|
|
129
|
+
// Collect tools from all servers
|
|
130
|
+
for (const server of allServers) {
|
|
131
|
+
const tools = serverManager.getServerTools(server.name);
|
|
132
|
+
toolsSummary[server.name] = {
|
|
133
|
+
serverName: server.name,
|
|
134
|
+
toolCount: tools.length,
|
|
135
|
+
tools: tools.map((tool) => ({
|
|
136
|
+
name: tool.name,
|
|
137
|
+
description: tool.description,
|
|
138
|
+
})),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const summary = {
|
|
142
|
+
totalServers: allServers.length,
|
|
143
|
+
totalTools: Object.values(toolsSummary).reduce((sum, s) => sum + s.toolCount, 0),
|
|
144
|
+
servers: toolsSummary,
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
contents: [
|
|
148
|
+
{
|
|
149
|
+
uri: 'metalink://tools',
|
|
150
|
+
mimeType: 'application/json',
|
|
151
|
+
text: JSON.stringify(summary, null, 2),
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Read metalink://version resource
|
|
158
|
+
* Returns Metalink version information
|
|
159
|
+
*/
|
|
160
|
+
function readVersionResource() {
|
|
161
|
+
return {
|
|
162
|
+
contents: [
|
|
163
|
+
{
|
|
164
|
+
uri: 'metalink://version',
|
|
165
|
+
mimeType: 'text/plain',
|
|
166
|
+
text: `Metalink ${VERSION}\nMCP Protocol Version: 2025-06-18`,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Read metalink://server/{name} resource
|
|
173
|
+
* Returns detailed information about a specific server
|
|
174
|
+
*/
|
|
175
|
+
async function readServerDetailsResource(serverName, serverManager, configLoader) {
|
|
176
|
+
const allServers = configLoader.getAllServers();
|
|
177
|
+
const serverConfig = allServers.find((s) => s.name === serverName);
|
|
178
|
+
if (!serverConfig) {
|
|
179
|
+
throw new Error(`Resource not found: metalink://server/${serverName}`);
|
|
180
|
+
}
|
|
181
|
+
const status = serverManager.getServerStatus(serverName);
|
|
182
|
+
const tools = serverManager.getServerTools(serverName);
|
|
183
|
+
const isStdio = serverConfig.transport === 'stdio' || serverConfig.transport === undefined;
|
|
184
|
+
const serverDetails = {
|
|
185
|
+
name: serverConfig.name,
|
|
186
|
+
transport: serverConfig.transport || 'stdio',
|
|
187
|
+
...(isStdio && 'command' in serverConfig ? { command: serverConfig.command, args: serverConfig.args || [] } : {}),
|
|
188
|
+
...(!isStdio && 'url' in serverConfig ? { url: serverConfig.url } : {}),
|
|
189
|
+
env: serverConfig.env || {},
|
|
190
|
+
status: {
|
|
191
|
+
state: status?.status || 'stopped',
|
|
192
|
+
pid: status?.pid,
|
|
193
|
+
uptime: status?.uptime,
|
|
194
|
+
errorCount: status?.errorCount || 0,
|
|
195
|
+
lastHealthCheck: status?.lastHealthCheck,
|
|
196
|
+
},
|
|
197
|
+
tools: {
|
|
198
|
+
count: tools.length,
|
|
199
|
+
available: tools.map((tool) => tool.name),
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
return {
|
|
203
|
+
contents: [
|
|
204
|
+
{
|
|
205
|
+
uri: `metalink://server/${serverName}`,
|
|
206
|
+
mimeType: 'application/json',
|
|
207
|
+
text: JSON.stringify(serverDetails, null, 2),
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Read metalink://server/{name}/tools resource
|
|
214
|
+
* Returns list of tools from a specific server
|
|
215
|
+
*/
|
|
216
|
+
async function readServerToolsResource(serverName, serverManager, configLoader) {
|
|
217
|
+
const allServers = configLoader.getAllServers();
|
|
218
|
+
const serverConfig = allServers.find((s) => s.name === serverName);
|
|
219
|
+
if (!serverConfig) {
|
|
220
|
+
throw new Error(`Resource not found: metalink://server/${serverName}/tools`);
|
|
221
|
+
}
|
|
222
|
+
const tools = serverManager.getServerTools(serverName);
|
|
223
|
+
const toolsData = {
|
|
224
|
+
serverName,
|
|
225
|
+
toolCount: tools.length,
|
|
226
|
+
tools: tools.map((tool) => ({
|
|
227
|
+
name: tool.name,
|
|
228
|
+
description: tool.description,
|
|
229
|
+
inputSchema: tool.inputSchema,
|
|
230
|
+
annotations: tool.annotations,
|
|
231
|
+
})),
|
|
232
|
+
};
|
|
233
|
+
return {
|
|
234
|
+
contents: [
|
|
235
|
+
{
|
|
236
|
+
uri: `metalink://server/${serverName}/tools`,
|
|
237
|
+
mimeType: 'application/json',
|
|
238
|
+
text: JSON.stringify(toolsData, null, 2),
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/server/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { ToolInfo } from './manager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Schema cache entry with timestamp for TTL tracking
|
|
4
|
+
*/
|
|
5
|
+
interface CachedSchema {
|
|
6
|
+
tools: ToolInfo[];
|
|
7
|
+
timestamp: number;
|
|
8
|
+
stability?: {
|
|
9
|
+
refreshCount: number;
|
|
10
|
+
changeCount: number;
|
|
11
|
+
lastChangeTimestamp: number;
|
|
12
|
+
currentTTL: number;
|
|
13
|
+
stability: 'stable' | 'normal' | 'unstable';
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* SchemaStore - Persistent schema storage for MCP tools
|
|
18
|
+
*
|
|
19
|
+
* Stores tool schemas on disk to enable:
|
|
20
|
+
* 1. Fast discovery responses without waiting for server startup
|
|
21
|
+
* 2. Schema persistence across daemon restarts
|
|
22
|
+
* 3. Background refresh of schemas while keeping responses instant
|
|
23
|
+
*
|
|
24
|
+
* Files are stored as JSON: .metalink/schemas/<serverName>.json
|
|
25
|
+
*/
|
|
26
|
+
export declare class SchemaStore {
|
|
27
|
+
private cacheDir;
|
|
28
|
+
private cacheTTL;
|
|
29
|
+
private memoryCache;
|
|
30
|
+
constructor(cacheDir?: string, cacheTTL?: number);
|
|
31
|
+
/**
|
|
32
|
+
* Get the file path for a server's schema cache
|
|
33
|
+
*/
|
|
34
|
+
private getSchemaPath;
|
|
35
|
+
/**
|
|
36
|
+
* Load all schemas from disk into memory
|
|
37
|
+
* Returns map of serverName → CachedSchema
|
|
38
|
+
* Silently skips corrupted files
|
|
39
|
+
*/
|
|
40
|
+
loadFromDisk(): Promise<Map<string, CachedSchema>>;
|
|
41
|
+
/**
|
|
42
|
+
* Save a schema to disk atomically
|
|
43
|
+
* Creates .metalink/schemas/<serverName>.json
|
|
44
|
+
*/
|
|
45
|
+
saveToDisk(serverName: string, schema: CachedSchema): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Check if a schema is stale (older than TTL)
|
|
48
|
+
*/
|
|
49
|
+
isStale(schema: CachedSchema | undefined, ttl: number): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Prune expired schemas from disk
|
|
52
|
+
* Removes schema files older than TTL
|
|
53
|
+
*/
|
|
54
|
+
pruneExpired(ttl?: number): Promise<number>;
|
|
55
|
+
/**
|
|
56
|
+
* Delete a specific schema from disk
|
|
57
|
+
* Used when server is removed from registry
|
|
58
|
+
*/
|
|
59
|
+
deleteSchema(serverName: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Flush pending operations
|
|
62
|
+
* Used during graceful shutdown
|
|
63
|
+
*/
|
|
64
|
+
flush(): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Get cache statistics
|
|
67
|
+
*/
|
|
68
|
+
getStats(): Promise<{
|
|
69
|
+
memorySchemas: number;
|
|
70
|
+
diskSchemas: number;
|
|
71
|
+
totalTools: number;
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Get schema synchronously from memory cache (disk is already loaded)
|
|
75
|
+
* Returns tools array or undefined if not in memory cache
|
|
76
|
+
*/
|
|
77
|
+
getSyncFromDisk(serverName: string): ToolInfo[] | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Update memory cache
|
|
80
|
+
*/
|
|
81
|
+
updateMemoryCache(serverName: string, schema: CachedSchema): void;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=schema-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-store.d.ts","sourceRoot":"","sources":["../../src/server/schema-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C;;GAEG;AACH,UAAU,YAAY;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;KAC7C,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAwC;gBAE/C,QAAQ,GAAE,MAA4B,EAAE,QAAQ,GAAE,MAAe;IAM7E;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IA2CxD;;;OAGG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BzE;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAK/D;;;OAGG;IACG,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAwChE;;;OAGG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrD;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAgCF;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,SAAS;IAK3D;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;CAGlE"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { atomicWrite } from '../utils/file-lock.js';
|
|
4
|
+
/**
|
|
5
|
+
* SchemaStore - Persistent schema storage for MCP tools
|
|
6
|
+
*
|
|
7
|
+
* Stores tool schemas on disk to enable:
|
|
8
|
+
* 1. Fast discovery responses without waiting for server startup
|
|
9
|
+
* 2. Schema persistence across daemon restarts
|
|
10
|
+
* 3. Background refresh of schemas while keeping responses instant
|
|
11
|
+
*
|
|
12
|
+
* Files are stored as JSON: .metalink/schemas/<serverName>.json
|
|
13
|
+
*/
|
|
14
|
+
export class SchemaStore {
|
|
15
|
+
constructor(cacheDir = '.metalink/schemas', cacheTTL = 300000) {
|
|
16
|
+
this.memoryCache = new Map();
|
|
17
|
+
this.cacheDir = cacheDir;
|
|
18
|
+
this.cacheTTL = cacheTTL;
|
|
19
|
+
console.log(`[SchemaStore] Initialized with cache dir: ${cacheDir}, TTL: ${cacheTTL}ms`);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the file path for a server's schema cache
|
|
23
|
+
*/
|
|
24
|
+
getSchemaPath(serverName) {
|
|
25
|
+
return path.join(this.cacheDir, `${serverName}.json`);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Load all schemas from disk into memory
|
|
29
|
+
* Returns map of serverName → CachedSchema
|
|
30
|
+
* Silently skips corrupted files
|
|
31
|
+
*/
|
|
32
|
+
async loadFromDisk() {
|
|
33
|
+
const schemas = new Map();
|
|
34
|
+
try {
|
|
35
|
+
// Create cache directory if it doesn't exist
|
|
36
|
+
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
37
|
+
// List all .json files in cache directory
|
|
38
|
+
const files = await fs.readdir(this.cacheDir);
|
|
39
|
+
const jsonFiles = files.filter(f => f.endsWith('.json') && !f.endsWith('.backup'));
|
|
40
|
+
console.log(`[SchemaStore] Found ${jsonFiles.length} cached schemas on disk`);
|
|
41
|
+
for (const file of jsonFiles) {
|
|
42
|
+
const serverName = file.replace('.json', '');
|
|
43
|
+
const filePath = this.getSchemaPath(serverName);
|
|
44
|
+
try {
|
|
45
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
46
|
+
const data = JSON.parse(content);
|
|
47
|
+
// Validate schema structure
|
|
48
|
+
if (data.tools && Array.isArray(data.tools) && typeof data.timestamp === 'number') {
|
|
49
|
+
schemas.set(serverName, {
|
|
50
|
+
tools: data.tools,
|
|
51
|
+
timestamp: data.timestamp,
|
|
52
|
+
});
|
|
53
|
+
console.log(`[SchemaStore] Loaded schema for ${serverName} (${data.tools.length} tools)`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.warn(`[SchemaStore] Invalid schema structure for ${serverName}, skipping`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.warn(`[SchemaStore] Failed to load schema for ${serverName}:`, error);
|
|
61
|
+
// Continue with next file
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.warn('[SchemaStore] Failed to load schemas from disk:', error);
|
|
67
|
+
}
|
|
68
|
+
return schemas;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Save a schema to disk atomically
|
|
72
|
+
* Creates .metalink/schemas/<serverName>.json
|
|
73
|
+
*/
|
|
74
|
+
async saveToDisk(serverName, schema) {
|
|
75
|
+
try {
|
|
76
|
+
// Create cache directory if it doesn't exist
|
|
77
|
+
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
78
|
+
const filePath = this.getSchemaPath(serverName);
|
|
79
|
+
const content = JSON.stringify({
|
|
80
|
+
serverName,
|
|
81
|
+
tools: schema.tools,
|
|
82
|
+
timestamp: schema.timestamp,
|
|
83
|
+
toolCount: schema.tools.length,
|
|
84
|
+
stability: schema.stability, // Include adaptive TTL metrics
|
|
85
|
+
}, null, 2);
|
|
86
|
+
// Use atomic write (temp file + rename)
|
|
87
|
+
await atomicWrite(filePath, content, { createBackup: true, timeout: 5000 });
|
|
88
|
+
const stabilityInfo = schema.stability
|
|
89
|
+
? ` [${schema.stability.stability}, TTL: ${schema.stability.currentTTL}ms]`
|
|
90
|
+
: '';
|
|
91
|
+
console.log(`[SchemaStore] Saved schema for ${serverName} (${schema.tools.length} tools)${stabilityInfo}`);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.warn(`[SchemaStore] Failed to save schema for ${serverName}:`, error);
|
|
95
|
+
// Non-blocking failure - continue without persisting
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if a schema is stale (older than TTL)
|
|
100
|
+
*/
|
|
101
|
+
isStale(schema, ttl) {
|
|
102
|
+
if (!schema)
|
|
103
|
+
return true;
|
|
104
|
+
return Date.now() - schema.timestamp > ttl;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Prune expired schemas from disk
|
|
108
|
+
* Removes schema files older than TTL
|
|
109
|
+
*/
|
|
110
|
+
async pruneExpired(ttl = this.cacheTTL) {
|
|
111
|
+
let prunedCount = 0;
|
|
112
|
+
try {
|
|
113
|
+
const files = await fs.readdir(this.cacheDir);
|
|
114
|
+
const jsonFiles = files.filter(f => f.endsWith('.json') && !f.endsWith('.backup'));
|
|
115
|
+
for (const file of jsonFiles) {
|
|
116
|
+
const filePath = path.join(this.cacheDir, file);
|
|
117
|
+
try {
|
|
118
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
119
|
+
const data = JSON.parse(content);
|
|
120
|
+
// Check if expired
|
|
121
|
+
if (typeof data.timestamp === 'number' && Date.now() - data.timestamp > ttl) {
|
|
122
|
+
await fs.unlink(filePath);
|
|
123
|
+
const serverName = file.replace('.json', '');
|
|
124
|
+
console.log(`[SchemaStore] Pruned expired schema for ${serverName}`);
|
|
125
|
+
prunedCount++;
|
|
126
|
+
// Also remove backup
|
|
127
|
+
const backupPath = `${filePath}.backup`;
|
|
128
|
+
try {
|
|
129
|
+
await fs.unlink(backupPath);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Ignore if backup doesn't exist
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.warn(`[SchemaStore] Error checking ${file} for expiration:`, error);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.warn('[SchemaStore] Failed to prune expired schemas:', error);
|
|
143
|
+
}
|
|
144
|
+
return prunedCount;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Delete a specific schema from disk
|
|
148
|
+
* Used when server is removed from registry
|
|
149
|
+
*/
|
|
150
|
+
async deleteSchema(serverName) {
|
|
151
|
+
try {
|
|
152
|
+
const filePath = this.getSchemaPath(serverName);
|
|
153
|
+
await fs.unlink(filePath);
|
|
154
|
+
console.log(`[SchemaStore] Deleted schema for ${serverName}`);
|
|
155
|
+
// Also delete backup
|
|
156
|
+
const backupPath = `${filePath}.backup`;
|
|
157
|
+
try {
|
|
158
|
+
await fs.unlink(backupPath);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Ignore if backup doesn't exist
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const errCode = error.code;
|
|
166
|
+
if (errCode !== 'ENOENT') {
|
|
167
|
+
console.warn(`[SchemaStore] Failed to delete schema for ${serverName}:`, error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Flush pending operations
|
|
173
|
+
* Used during graceful shutdown
|
|
174
|
+
*/
|
|
175
|
+
async flush() {
|
|
176
|
+
// Save all in-memory schemas to disk before shutdown
|
|
177
|
+
for (const [serverName, schema] of this.memoryCache) {
|
|
178
|
+
try {
|
|
179
|
+
await this.saveToDisk(serverName, schema);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.warn(`[SchemaStore] Failed to flush schema for ${serverName}:`, error);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
console.log('[SchemaStore] Flush complete');
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get cache statistics
|
|
189
|
+
*/
|
|
190
|
+
async getStats() {
|
|
191
|
+
let diskSchemas = 0;
|
|
192
|
+
let totalTools = 0;
|
|
193
|
+
try {
|
|
194
|
+
const files = await fs.readdir(this.cacheDir);
|
|
195
|
+
const jsonFiles = files.filter(f => f.endsWith('.json') && !f.endsWith('.backup'));
|
|
196
|
+
diskSchemas = jsonFiles.length;
|
|
197
|
+
for (const file of jsonFiles) {
|
|
198
|
+
try {
|
|
199
|
+
const content = await fs.readFile(path.join(this.cacheDir, file), 'utf8');
|
|
200
|
+
const data = JSON.parse(content);
|
|
201
|
+
if (data.tools && Array.isArray(data.tools)) {
|
|
202
|
+
totalTools += data.tools.length;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Skip corrupted files
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
console.warn('[SchemaStore] Failed to get stats:', error);
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
memorySchemas: this.memoryCache.size,
|
|
215
|
+
diskSchemas,
|
|
216
|
+
totalTools,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get schema synchronously from memory cache (disk is already loaded)
|
|
221
|
+
* Returns tools array or undefined if not in memory cache
|
|
222
|
+
*/
|
|
223
|
+
getSyncFromDisk(serverName) {
|
|
224
|
+
const cached = this.memoryCache.get(serverName);
|
|
225
|
+
return cached?.tools;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Update memory cache
|
|
229
|
+
*/
|
|
230
|
+
updateMemoryCache(serverName, schema) {
|
|
231
|
+
this.memoryCache.set(serverName, schema);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=schema-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-store.js","sourceRoot":"","sources":["../../src/server/schema-store.ts"],"names":[],"mappings":"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"}
|