@frontmcp/skills 1.0.0-beta.9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/README.md +2 -2
  2. package/catalog/TEMPLATE.md +69 -0
  3. package/catalog/frontmcp-config/SKILL.md +38 -22
  4. package/catalog/frontmcp-config/examples/configure-auth/multi-app-auth.md +87 -0
  5. package/catalog/frontmcp-config/examples/configure-auth/public-mode-setup.md +63 -0
  6. package/catalog/frontmcp-config/examples/configure-auth/remote-oauth-with-vault.md +76 -0
  7. package/catalog/frontmcp-config/examples/configure-auth-modes/local-self-signed-tokens.md +77 -0
  8. package/catalog/frontmcp-config/examples/configure-auth-modes/remote-enterprise-oauth.md +73 -0
  9. package/catalog/frontmcp-config/examples/configure-auth-modes/transparent-jwt-validation.md +64 -0
  10. package/catalog/frontmcp-config/examples/configure-elicitation/basic-confirmation-gate.md +83 -0
  11. package/catalog/frontmcp-config/examples/configure-elicitation/distributed-elicitation-redis.md +87 -0
  12. package/catalog/frontmcp-config/examples/configure-http/cors-restricted-origins.md +52 -0
  13. package/catalog/frontmcp-config/examples/configure-http/entry-path-reverse-proxy.md +72 -0
  14. package/catalog/frontmcp-config/examples/configure-http/unix-socket-local.md +64 -0
  15. package/catalog/frontmcp-config/examples/configure-session/multi-server-key-prefix.md +68 -0
  16. package/catalog/frontmcp-config/examples/configure-session/redis-session-store.md +52 -0
  17. package/catalog/frontmcp-config/examples/configure-session/vercel-kv-session.md +52 -0
  18. package/catalog/frontmcp-config/examples/configure-throttle/distributed-redis-throttle.md +94 -0
  19. package/catalog/frontmcp-config/examples/configure-throttle/per-tool-rate-limit.md +92 -0
  20. package/catalog/frontmcp-config/examples/configure-throttle/server-level-rate-limit.md +83 -0
  21. package/catalog/frontmcp-config/examples/configure-throttle-guard-config/full-guard-config.md +99 -0
  22. package/catalog/frontmcp-config/examples/configure-throttle-guard-config/minimal-guard-config.md +55 -0
  23. package/catalog/frontmcp-config/examples/configure-transport/custom-protocol-flags.md +74 -0
  24. package/catalog/frontmcp-config/examples/configure-transport/distributed-sessions-redis.md +86 -0
  25. package/catalog/frontmcp-config/examples/configure-transport/stateless-serverless.md +69 -0
  26. package/catalog/frontmcp-config/examples/configure-transport-protocol-presets/legacy-preset-nodejs.md +65 -0
  27. package/catalog/frontmcp-config/examples/configure-transport-protocol-presets/stateless-api-serverless.md +69 -0
  28. package/catalog/frontmcp-config/references/configure-auth-modes.md +15 -0
  29. package/catalog/frontmcp-config/references/configure-auth.md +15 -0
  30. package/catalog/frontmcp-config/references/configure-elicitation.md +14 -0
  31. package/catalog/frontmcp-config/references/configure-http.md +15 -0
  32. package/catalog/frontmcp-config/references/configure-session.md +15 -0
  33. package/catalog/frontmcp-config/references/configure-throttle-guard-config.md +14 -0
  34. package/catalog/frontmcp-config/references/configure-throttle.md +15 -0
  35. package/catalog/frontmcp-config/references/configure-transport-protocol-presets.md +14 -0
  36. package/catalog/frontmcp-config/references/configure-transport.md +15 -0
  37. package/catalog/frontmcp-config/references/setup-redis.md +10 -0
  38. package/catalog/frontmcp-config/references/setup-sqlite.md +10 -0
  39. package/catalog/frontmcp-deployment/SKILL.md +40 -12
  40. package/catalog/frontmcp-deployment/examples/build-for-browser/browser-build-with-custom-entry.md +43 -0
  41. package/catalog/frontmcp-deployment/examples/build-for-browser/browser-crypto-and-storage.md +85 -0
  42. package/catalog/frontmcp-deployment/examples/build-for-browser/react-provider-setup.md +61 -0
  43. package/catalog/frontmcp-deployment/examples/build-for-cli/cli-binary-build.md +66 -0
  44. package/catalog/frontmcp-deployment/examples/build-for-cli/unix-socket-daemon.md +76 -0
  45. package/catalog/frontmcp-deployment/examples/build-for-sdk/connect-openai.md +78 -0
  46. package/catalog/frontmcp-deployment/examples/build-for-sdk/create-flat-config.md +85 -0
  47. package/catalog/frontmcp-deployment/examples/build-for-sdk/multi-platform-connect.md +104 -0
  48. package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/basic-worker-deploy.md +82 -0
  49. package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-custom-domain.md +97 -0
  50. package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-with-kv-storage.md +92 -0
  51. package/catalog/frontmcp-deployment/examples/deploy-to-lambda/cdk-deployment.md +92 -0
  52. package/catalog/frontmcp-deployment/examples/deploy-to-lambda/lambda-handler-with-cors.md +113 -0
  53. package/catalog/frontmcp-deployment/examples/deploy-to-lambda/sam-template-basic.md +100 -0
  54. package/catalog/frontmcp-deployment/examples/deploy-to-node/docker-compose-with-redis.md +101 -0
  55. package/catalog/frontmcp-deployment/examples/deploy-to-node/pm2-with-nginx.md +79 -0
  56. package/catalog/frontmcp-deployment/examples/deploy-to-node/resource-limits.md +92 -0
  57. package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/basic-multistage-dockerfile.md +63 -0
  58. package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/secure-nonroot-dockerfile.md +89 -0
  59. package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-mcp-endpoint-test.md +69 -0
  60. package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-kv.md +82 -0
  61. package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-skills-cache.md +90 -0
  62. package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/minimal-vercel-config.md +49 -0
  63. package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/vercel-config-with-security-headers.md +92 -0
  64. package/catalog/frontmcp-deployment/references/build-for-browser.md +15 -0
  65. package/catalog/frontmcp-deployment/references/build-for-cli.md +65 -3
  66. package/catalog/frontmcp-deployment/references/build-for-sdk.md +15 -0
  67. package/catalog/frontmcp-deployment/references/deploy-to-cloudflare.md +15 -0
  68. package/catalog/frontmcp-deployment/references/deploy-to-lambda.md +18 -3
  69. package/catalog/frontmcp-deployment/references/deploy-to-node-dockerfile.md +16 -2
  70. package/catalog/frontmcp-deployment/references/deploy-to-node.md +19 -4
  71. package/catalog/frontmcp-deployment/references/deploy-to-vercel-config.md +14 -0
  72. package/catalog/frontmcp-deployment/references/deploy-to-vercel.md +15 -0
  73. package/catalog/frontmcp-development/SKILL.md +25 -17
  74. package/catalog/frontmcp-development/examples/create-adapter/basic-api-adapter.md +92 -0
  75. package/catalog/frontmcp-development/examples/create-adapter/namespaced-adapter.md +124 -0
  76. package/catalog/frontmcp-development/examples/create-agent/basic-agent-with-tools.md +121 -0
  77. package/catalog/frontmcp-development/examples/create-agent/custom-multi-pass-agent.md +95 -0
  78. package/catalog/frontmcp-development/examples/create-agent/nested-agents-with-swarm.md +111 -0
  79. package/catalog/frontmcp-development/examples/create-agent-llm-config/anthropic-config.md +81 -0
  80. package/catalog/frontmcp-development/examples/create-agent-llm-config/openai-config.md +80 -0
  81. package/catalog/frontmcp-development/examples/create-job/basic-report-job.md +87 -0
  82. package/catalog/frontmcp-development/examples/create-job/job-with-permissions.md +117 -0
  83. package/catalog/frontmcp-development/examples/create-job/job-with-retry.md +88 -0
  84. package/catalog/frontmcp-development/examples/create-plugin/basic-plugin-with-provider.md +69 -0
  85. package/catalog/frontmcp-development/examples/create-plugin/configurable-dynamic-plugin.md +178 -0
  86. package/catalog/frontmcp-development/examples/create-plugin/plugin-with-context-extension.md +107 -0
  87. package/catalog/frontmcp-development/examples/create-plugin-hooks/basic-logging-plugin.md +69 -0
  88. package/catalog/frontmcp-development/examples/create-plugin-hooks/caching-with-around.md +80 -0
  89. package/catalog/frontmcp-development/examples/create-plugin-hooks/tool-level-hooks-and-stage-replacement.md +100 -0
  90. package/catalog/frontmcp-development/examples/create-prompt/basic-prompt.md +72 -0
  91. package/catalog/frontmcp-development/examples/create-prompt/dynamic-rag-prompt.md +92 -0
  92. package/catalog/frontmcp-development/examples/create-prompt/multi-turn-debug-session.md +86 -0
  93. package/catalog/frontmcp-development/examples/create-provider/basic-database-provider.md +113 -0
  94. package/catalog/frontmcp-development/examples/create-provider/config-and-api-providers.md +107 -0
  95. package/catalog/frontmcp-development/examples/create-resource/basic-static-resource.md +72 -0
  96. package/catalog/frontmcp-development/examples/create-resource/binary-and-multi-content.md +111 -0
  97. package/catalog/frontmcp-development/examples/create-resource/parameterized-template.md +84 -0
  98. package/catalog/frontmcp-development/examples/create-skill/basic-inline-skill.md +96 -0
  99. package/catalog/frontmcp-development/examples/create-skill/directory-based-skill.md +115 -0
  100. package/catalog/frontmcp-development/examples/create-skill/parameterized-skill.md +96 -0
  101. package/catalog/frontmcp-development/examples/create-skill-with-tools/basic-tool-orchestration.md +76 -0
  102. package/catalog/frontmcp-development/examples/create-skill-with-tools/directory-skill-with-tools.md +149 -0
  103. package/catalog/frontmcp-development/examples/create-skill-with-tools/incident-response-skill.md +92 -0
  104. package/catalog/frontmcp-development/examples/create-tool/basic-class-tool.md +62 -0
  105. package/catalog/frontmcp-development/examples/create-tool/tool-with-di-and-errors.md +84 -0
  106. package/catalog/frontmcp-development/examples/create-tool/tool-with-rate-limiting-and-progress.md +93 -0
  107. package/catalog/frontmcp-development/examples/create-tool-annotations/destructive-delete-tool.md +94 -0
  108. package/catalog/frontmcp-development/examples/create-tool-annotations/readonly-query-tool.md +60 -0
  109. package/catalog/frontmcp-development/examples/create-tool-output-schema-types/primitive-and-media-outputs.md +104 -0
  110. package/catalog/frontmcp-development/examples/create-tool-output-schema-types/zod-raw-shape-output.md +63 -0
  111. package/catalog/frontmcp-development/examples/create-tool-output-schema-types/zod-schema-advanced-output.md +103 -0
  112. package/catalog/frontmcp-development/examples/create-workflow/basic-deploy-pipeline.md +91 -0
  113. package/catalog/frontmcp-development/examples/create-workflow/parallel-validation-pipeline.md +90 -0
  114. package/catalog/frontmcp-development/examples/create-workflow/webhook-triggered-workflow.md +136 -0
  115. package/catalog/frontmcp-development/examples/decorators-guide/agent-skill-job-workflow.md +145 -0
  116. package/catalog/frontmcp-development/examples/decorators-guide/basic-server-with-app-and-tools.md +124 -0
  117. package/catalog/frontmcp-development/examples/decorators-guide/multi-app-with-plugins-and-providers.md +149 -0
  118. package/catalog/frontmcp-development/examples/official-adapters/authenticated-adapter-with-polling.md +84 -0
  119. package/catalog/frontmcp-development/examples/official-adapters/basic-openapi-adapter.md +54 -0
  120. package/catalog/frontmcp-development/examples/official-adapters/multi-api-hub-with-inline-spec.md +130 -0
  121. package/catalog/frontmcp-development/examples/official-plugins/cache-and-feature-flags.md +117 -0
  122. package/catalog/frontmcp-development/examples/official-plugins/production-multi-plugin-setup.md +147 -0
  123. package/catalog/frontmcp-development/examples/official-plugins/remember-plugin-session-memory.md +104 -0
  124. package/catalog/frontmcp-development/references/create-adapter.md +14 -0
  125. package/catalog/frontmcp-development/references/create-agent-llm-config.md +14 -0
  126. package/catalog/frontmcp-development/references/create-agent.md +15 -0
  127. package/catalog/frontmcp-development/references/create-job.md +15 -0
  128. package/catalog/frontmcp-development/references/create-plugin-hooks.md +51 -0
  129. package/catalog/frontmcp-development/references/create-plugin.md +186 -11
  130. package/catalog/frontmcp-development/references/create-prompt.md +17 -0
  131. package/catalog/frontmcp-development/references/create-provider.md +14 -0
  132. package/catalog/frontmcp-development/references/create-resource.md +127 -0
  133. package/catalog/frontmcp-development/references/create-skill-with-tools.md +126 -7
  134. package/catalog/frontmcp-development/references/create-skill.md +57 -12
  135. package/catalog/frontmcp-development/references/create-tool-annotations.md +14 -0
  136. package/catalog/frontmcp-development/references/create-tool-output-schema-types.md +15 -0
  137. package/catalog/frontmcp-development/references/create-tool.md +205 -1
  138. package/catalog/frontmcp-development/references/create-workflow.md +15 -0
  139. package/catalog/frontmcp-development/references/decorators-guide.md +155 -78
  140. package/catalog/frontmcp-development/references/official-adapters.md +31 -16
  141. package/catalog/frontmcp-development/references/official-plugins.md +62 -28
  142. package/catalog/frontmcp-extensibility/SKILL.md +103 -0
  143. package/catalog/frontmcp-extensibility/examples/vectoriadb/product-catalog-search.md +175 -0
  144. package/catalog/frontmcp-extensibility/examples/vectoriadb/semantic-search-with-persistence.md +138 -0
  145. package/catalog/frontmcp-extensibility/examples/vectoriadb/tfidf-keyword-search.md +103 -0
  146. package/catalog/frontmcp-extensibility/references/vectoriadb.md +299 -0
  147. package/catalog/frontmcp-guides/SKILL.md +7 -4
  148. package/catalog/frontmcp-guides/examples/example-knowledge-base/agent-and-plugin.md +160 -0
  149. package/catalog/frontmcp-guides/examples/example-knowledge-base/multi-app-composition.md +92 -0
  150. package/catalog/frontmcp-guides/examples/example-knowledge-base/vector-search-and-resources.md +135 -0
  151. package/catalog/frontmcp-guides/examples/example-task-manager/auth-and-crud-tools.md +135 -0
  152. package/catalog/frontmcp-guides/examples/example-task-manager/authenticated-e2e-tests.md +148 -0
  153. package/catalog/frontmcp-guides/examples/example-task-manager/redis-provider-with-di.md +129 -0
  154. package/catalog/frontmcp-guides/examples/example-weather-api/server-and-app-setup.md +75 -0
  155. package/catalog/frontmcp-guides/examples/example-weather-api/unit-and-e2e-tests.md +142 -0
  156. package/catalog/frontmcp-guides/examples/example-weather-api/weather-tool-with-schemas.md +74 -0
  157. package/catalog/frontmcp-guides/references/example-knowledge-base.md +15 -0
  158. package/catalog/frontmcp-guides/references/example-task-manager.md +30 -21
  159. package/catalog/frontmcp-guides/references/example-weather-api.md +18 -6
  160. package/catalog/frontmcp-observability/SKILL.md +144 -0
  161. package/catalog/frontmcp-observability/examples/structured-logging/stdout-logging.md +71 -0
  162. package/catalog/frontmcp-observability/examples/structured-logging/winston-integration.md +70 -0
  163. package/catalog/frontmcp-observability/examples/telemetry-api/agent-nested-tracing.md +86 -0
  164. package/catalog/frontmcp-observability/examples/telemetry-api/plugin-telemetry.md +93 -0
  165. package/catalog/frontmcp-observability/examples/telemetry-api/tool-custom-spans.md +72 -0
  166. package/catalog/frontmcp-observability/examples/testing-observability/test-custom-spans.md +90 -0
  167. package/catalog/frontmcp-observability/examples/testing-observability/test-log-correlation.md +104 -0
  168. package/catalog/frontmcp-observability/examples/tracing-setup/basic-tracing.md +82 -0
  169. package/catalog/frontmcp-observability/examples/tracing-setup/production-tracing.md +73 -0
  170. package/catalog/frontmcp-observability/examples/vendor-integrations/coralogix-setup.md +74 -0
  171. package/catalog/frontmcp-observability/references/structured-logging.md +114 -0
  172. package/catalog/frontmcp-observability/references/telemetry-api.md +155 -0
  173. package/catalog/frontmcp-observability/references/testing-observability.md +169 -0
  174. package/catalog/frontmcp-observability/references/tracing-setup.md +146 -0
  175. package/catalog/frontmcp-observability/references/vendor-integrations.md +164 -0
  176. package/catalog/frontmcp-production-readiness/SKILL.md +99 -0
  177. package/catalog/frontmcp-production-readiness/examples/common-checklist/caching-and-performance.md +102 -0
  178. package/catalog/frontmcp-production-readiness/examples/common-checklist/observability-setup.md +104 -0
  179. package/catalog/frontmcp-production-readiness/examples/common-checklist/security-hardening.md +95 -0
  180. package/catalog/frontmcp-production-readiness/examples/health-readiness-endpoints/basic-health-setup.md +81 -0
  181. package/catalog/frontmcp-production-readiness/examples/health-readiness-endpoints/custom-probes.md +136 -0
  182. package/catalog/frontmcp-production-readiness/examples/production-browser/browser-bundle-config.md +93 -0
  183. package/catalog/frontmcp-production-readiness/examples/production-browser/cross-platform-crypto.md +116 -0
  184. package/catalog/frontmcp-production-readiness/examples/production-browser/security-and-performance.md +128 -0
  185. package/catalog/frontmcp-production-readiness/examples/production-cli-binary/binary-build-config.md +109 -0
  186. package/catalog/frontmcp-production-readiness/examples/production-cli-binary/stdio-transport-error-handling.md +132 -0
  187. package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/daemon-socket-config.md +82 -0
  188. package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/graceful-shutdown-cleanup.md +107 -0
  189. package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/security-and-permissions.md +119 -0
  190. package/catalog/frontmcp-production-readiness/examples/production-cloudflare/durable-objects-state.md +124 -0
  191. package/catalog/frontmcp-production-readiness/examples/production-cloudflare/workers-runtime-constraints.md +103 -0
  192. package/catalog/frontmcp-production-readiness/examples/production-cloudflare/wrangler-config.md +89 -0
  193. package/catalog/frontmcp-production-readiness/examples/production-lambda/cold-start-connection-reuse.md +122 -0
  194. package/catalog/frontmcp-production-readiness/examples/production-lambda/sam-template.md +107 -0
  195. package/catalog/frontmcp-production-readiness/examples/production-lambda/scaling-and-monitoring.md +138 -0
  196. package/catalog/frontmcp-production-readiness/examples/production-node-sdk/basic-sdk-lifecycle.md +85 -0
  197. package/catalog/frontmcp-production-readiness/examples/production-node-sdk/multi-instance-cleanup.md +110 -0
  198. package/catalog/frontmcp-production-readiness/examples/production-node-sdk/package-json-config.md +107 -0
  199. package/catalog/frontmcp-production-readiness/examples/production-node-server/docker-multi-stage.md +103 -0
  200. package/catalog/frontmcp-production-readiness/examples/production-node-server/graceful-shutdown.md +87 -0
  201. package/catalog/frontmcp-production-readiness/examples/production-node-server/redis-session-scaling.md +97 -0
  202. package/catalog/frontmcp-production-readiness/examples/production-vercel/cold-start-optimization.md +104 -0
  203. package/catalog/frontmcp-production-readiness/examples/production-vercel/stateless-serverless-design.md +91 -0
  204. package/catalog/frontmcp-production-readiness/examples/production-vercel/vercel-edge-config.md +78 -0
  205. package/catalog/frontmcp-production-readiness/references/common-checklist.md +175 -0
  206. package/catalog/frontmcp-production-readiness/references/health-readiness-endpoints.md +198 -0
  207. package/catalog/frontmcp-production-readiness/references/production-browser.md +56 -0
  208. package/catalog/frontmcp-production-readiness/references/production-cli-binary.md +71 -0
  209. package/catalog/frontmcp-production-readiness/references/production-cli-daemon.md +71 -0
  210. package/catalog/frontmcp-production-readiness/references/production-cloudflare.md +62 -0
  211. package/catalog/frontmcp-production-readiness/references/production-lambda.md +63 -0
  212. package/catalog/frontmcp-production-readiness/references/production-node-sdk.md +76 -0
  213. package/catalog/frontmcp-production-readiness/references/production-node-server.md +71 -0
  214. package/catalog/frontmcp-production-readiness/references/production-vercel.md +62 -0
  215. package/catalog/frontmcp-setup/SKILL.md +19 -14
  216. package/catalog/frontmcp-setup/examples/frontmcp-skills-usage/bundle-presets-scaffolding.md +61 -0
  217. package/catalog/frontmcp-setup/examples/frontmcp-skills-usage/install-and-search-skills.md +83 -0
  218. package/catalog/frontmcp-setup/examples/multi-app-composition/local-apps-with-shared-tools.md +87 -0
  219. package/catalog/frontmcp-setup/examples/multi-app-composition/per-app-auth-and-isolation.md +88 -0
  220. package/catalog/frontmcp-setup/examples/multi-app-composition/remote-and-esm-apps.md +81 -0
  221. package/catalog/frontmcp-setup/examples/nx-workflow/build-test-affected.md +77 -0
  222. package/catalog/frontmcp-setup/examples/nx-workflow/multi-server-deployment.md +93 -0
  223. package/catalog/frontmcp-setup/examples/nx-workflow/scaffold-and-generate.md +62 -0
  224. package/catalog/frontmcp-setup/examples/project-structure-nx/nx-generator-scaffolding.md +73 -0
  225. package/catalog/frontmcp-setup/examples/project-structure-nx/nx-workspace-with-apps.md +85 -0
  226. package/catalog/frontmcp-setup/examples/project-structure-nx/shared-library-usage.md +89 -0
  227. package/catalog/frontmcp-setup/examples/project-structure-standalone/dev-workflow-commands.md +64 -0
  228. package/catalog/frontmcp-setup/examples/project-structure-standalone/feature-folder-organization.md +111 -0
  229. package/catalog/frontmcp-setup/examples/project-structure-standalone/minimal-standalone-layout.md +73 -0
  230. package/catalog/frontmcp-setup/examples/readme-guide/node-server-readme.md +89 -0
  231. package/catalog/frontmcp-setup/examples/readme-guide/vercel-deployment-readme.md +90 -0
  232. package/catalog/frontmcp-setup/examples/setup-project/basic-node-server.md +99 -0
  233. package/catalog/frontmcp-setup/examples/setup-project/cli-scaffold-with-flags.md +77 -0
  234. package/catalog/frontmcp-setup/examples/setup-project/vercel-serverless-server.md +89 -0
  235. package/catalog/frontmcp-setup/examples/setup-redis/docker-redis-local-dev.md +88 -0
  236. package/catalog/frontmcp-setup/examples/setup-redis/hybrid-vercel-kv-with-pubsub.md +78 -0
  237. package/catalog/frontmcp-setup/examples/setup-redis/vercel-kv-serverless.md +78 -0
  238. package/catalog/frontmcp-setup/examples/setup-sqlite/basic-sqlite-setup.md +75 -0
  239. package/catalog/frontmcp-setup/examples/setup-sqlite/encrypted-sqlite-storage.md +55 -0
  240. package/catalog/frontmcp-setup/examples/setup-sqlite/unix-socket-daemon.md +70 -0
  241. package/catalog/frontmcp-setup/references/frontmcp-skills-usage.md +33 -9
  242. package/catalog/frontmcp-setup/references/multi-app-composition.md +15 -0
  243. package/catalog/frontmcp-setup/references/nx-workflow.md +15 -0
  244. package/catalog/frontmcp-setup/references/project-structure-nx.md +15 -0
  245. package/catalog/frontmcp-setup/references/project-structure-standalone.md +15 -0
  246. package/catalog/frontmcp-setup/references/readme-guide.md +235 -0
  247. package/catalog/frontmcp-setup/references/setup-project.md +16 -1
  248. package/catalog/frontmcp-setup/references/setup-redis.md +15 -0
  249. package/catalog/frontmcp-setup/references/setup-sqlite.md +15 -0
  250. package/catalog/frontmcp-testing/SKILL.md +41 -27
  251. package/catalog/frontmcp-testing/examples/setup-testing/fixture-based-e2e-test.md +70 -0
  252. package/catalog/frontmcp-testing/examples/setup-testing/jest-config-with-coverage.md +59 -0
  253. package/catalog/frontmcp-testing/examples/setup-testing/unit-test-tool-resource-prompt.md +115 -0
  254. package/catalog/frontmcp-testing/examples/test-auth/oauth-flow-test.md +78 -0
  255. package/catalog/frontmcp-testing/examples/test-auth/role-based-access-test.md +88 -0
  256. package/catalog/frontmcp-testing/examples/test-auth/token-factory-test.md +71 -0
  257. package/catalog/frontmcp-testing/examples/test-browser-build/browser-bundle-validation.md +58 -0
  258. package/catalog/frontmcp-testing/examples/test-browser-build/playwright-browser-test.md +69 -0
  259. package/catalog/frontmcp-testing/examples/test-cli-binary/binary-startup-test.md +77 -0
  260. package/catalog/frontmcp-testing/examples/test-cli-binary/js-bundle-import-test.md +56 -0
  261. package/catalog/frontmcp-testing/examples/test-direct-client/basic-create-test.md +74 -0
  262. package/catalog/frontmcp-testing/examples/test-direct-client/openai-claude-format-test.md +79 -0
  263. package/catalog/frontmcp-testing/examples/test-e2e-handler/basic-e2e-test.md +67 -0
  264. package/catalog/frontmcp-testing/examples/test-e2e-handler/manual-client-with-transport.md +72 -0
  265. package/catalog/frontmcp-testing/examples/test-e2e-handler/tool-call-and-error-e2e.md +73 -0
  266. package/catalog/frontmcp-testing/examples/test-tool-unit/basic-tool-test.md +69 -0
  267. package/catalog/frontmcp-testing/examples/test-tool-unit/schema-validation-test.md +82 -0
  268. package/catalog/frontmcp-testing/examples/test-tool-unit/tool-error-handling-test.md +92 -0
  269. package/catalog/frontmcp-testing/references/setup-testing.md +17 -0
  270. package/catalog/frontmcp-testing/references/test-auth.md +15 -0
  271. package/catalog/frontmcp-testing/references/test-browser-build.md +14 -0
  272. package/catalog/frontmcp-testing/references/test-cli-binary.md +14 -0
  273. package/catalog/frontmcp-testing/references/test-direct-client.md +14 -0
  274. package/catalog/frontmcp-testing/references/test-e2e-handler.md +15 -0
  275. package/catalog/frontmcp-testing/references/test-tool-unit.md +15 -0
  276. package/catalog/skills-manifest.json +2849 -32
  277. package/package.json +2 -2
  278. package/src/index.d.ts +1 -1
  279. package/src/index.js.map +1 -1
  280. package/src/loader.js +0 -1
  281. package/src/loader.js.map +1 -1
  282. package/src/manifest.d.ts +36 -1
  283. package/src/manifest.js +6 -1
  284. package/src/manifest.js.map +1 -1
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: wrangler-config
3
+ reference: production-cloudflare
4
+ level: basic
5
+ description: 'Shows how to configure `wrangler.toml` with correct routes, KV bindings for session storage, and secret management for a FrontMCP Cloudflare Worker.'
6
+ tags: [production, cloudflare, cache, session, wrangler, config]
7
+ features:
8
+ - 'Complete `wrangler.toml` with KV bindings for sessions and cache'
9
+ - 'Separate staging/production environment configs'
10
+ - 'Cloudflare Worker entry point via `createCloudflareHandler`'
11
+ - 'Secrets managed via `wrangler secret put` (not in config files)'
12
+ ---
13
+
14
+ # Wrangler Configuration with KV Bindings
15
+
16
+ Shows how to configure `wrangler.toml` with correct routes, KV bindings for session storage, and secret management for a FrontMCP Cloudflare Worker.
17
+
18
+ ## Code
19
+
20
+ ```toml
21
+ # wrangler.toml
22
+ name = "my-mcp-worker"
23
+ main = "dist/worker.js"
24
+ compatibility_date = "2024-01-01"
25
+
26
+ # Custom domain routing
27
+ routes = [
28
+ { pattern = "mcp.example.com/*", zone_name = "example.com" }
29
+ ]
30
+
31
+ # KV namespace for session storage
32
+ [[kv_namespaces]]
33
+ binding = "MCP_SESSIONS"
34
+ id = "abc123def456"
35
+
36
+ # KV namespace for cache
37
+ [[kv_namespaces]]
38
+ binding = "MCP_CACHE"
39
+ id = "def456ghi789"
40
+
41
+ # Environment-specific config
42
+ [env.staging]
43
+ name = "my-mcp-worker-staging"
44
+ routes = [
45
+ { pattern = "mcp-staging.example.com/*", zone_name = "example.com" }
46
+ ]
47
+
48
+ [env.production]
49
+ name = "my-mcp-worker-production"
50
+ routes = [
51
+ { pattern = "mcp.example.com/*", zone_name = "example.com" }
52
+ ]
53
+ ```
54
+
55
+ ```typescript
56
+ // src/main.ts
57
+ import { FrontMcp } from '@frontmcp/sdk';
58
+ import { MyApp } from './my.app';
59
+
60
+ @FrontMcp({
61
+ info: { name: 'cf-mcp', version: '1.0.0' },
62
+ apps: [MyApp],
63
+
64
+ // CORS: use the workers.dev or custom domain
65
+ cors: {
66
+ origin: ['https://app.example.com'],
67
+ },
68
+ })
69
+ export default class CloudflareMcpServer {}
70
+ ```
71
+
72
+ ```typescript
73
+ // src/worker.ts — Cloudflare Worker entry point
74
+ import { createCloudflareHandler } from '@frontmcp/adapters/cloudflare';
75
+ import Server from './main';
76
+
77
+ export default createCloudflareHandler(Server);
78
+ ```
79
+
80
+ ## What This Demonstrates
81
+
82
+ - Complete `wrangler.toml` with KV bindings for sessions and cache
83
+ - Separate staging/production environment configs
84
+ - Cloudflare Worker entry point via `createCloudflareHandler`
85
+ - Secrets managed via `wrangler secret put` (not in config files)
86
+
87
+ ## Related
88
+
89
+ - See `production-cloudflare` for the full Cloudflare Workers checklist
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: cold-start-connection-reuse
3
+ reference: production-lambda
4
+ level: intermediate
5
+ description: 'Shows how to minimize Lambda cold starts with lazy initialization, tree-shaking, and the connection reuse pattern for external services.'
6
+ tags: [production, lambda, performance, cold, start, connection]
7
+ features:
8
+ - 'Connection reuse pattern: caching connections in module scope across warm invocations'
9
+ - 'Lazy-loading heavy dependencies (`pg`) via dynamic `import()` to reduce cold start'
10
+ - 'Not closing connections in `onDestroy()` for Lambda (they survive freeze/thaw)'
11
+ - 'Keeping module scope lightweight with no heavy initialization'
12
+ ---
13
+
14
+ # Cold Start Optimization and Connection Reuse
15
+
16
+ Shows how to minimize Lambda cold starts with lazy initialization, tree-shaking, and the connection reuse pattern for external services.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/providers/db-connection.provider.ts
22
+ import { Provider, ProviderScope } from '@frontmcp/sdk';
23
+
24
+ export const DB_CLIENT = Symbol('DbClient');
25
+
26
+ // Connection reuse pattern: connections survive between warm invocations
27
+ // but must handle cold starts and reconnection gracefully
28
+ let cachedConnection: unknown | undefined;
29
+
30
+ @Provider({ token: DB_CLIENT, scope: ProviderScope.GLOBAL })
31
+ export class DbConnectionProvider {
32
+ private connection: unknown;
33
+
34
+ async onInit(): Promise<void> {
35
+ // Reuse connection across warm invocations
36
+ if (cachedConnection) {
37
+ this.connection = cachedConnection;
38
+ return;
39
+ }
40
+
41
+ // Lazy-load the database driver — reduces cold start time
42
+ const { Client } = await import('pg');
43
+ this.connection = new Client({
44
+ host: process.env.DB_HOST,
45
+ connectionTimeoutMillis: 5000, // Don't hang on connection attempts
46
+ });
47
+ await (this.connection as { connect: () => Promise<void> }).connect();
48
+
49
+ // Cache for warm invocations
50
+ cachedConnection = this.connection;
51
+ }
52
+
53
+ getConnection() {
54
+ return this.connection;
55
+ }
56
+
57
+ // Note: Don't close in onDestroy for Lambda — connection survives freeze/thaw
58
+ }
59
+ ```
60
+
61
+ ```typescript
62
+ // src/tools/optimized-query.tool.ts
63
+ import { Tool, ToolContext } from '@frontmcp/sdk';
64
+ import { z } from 'zod';
65
+ import { DB_CLIENT } from '../providers/db-connection.provider';
66
+
67
+ @Tool({
68
+ name: 'query_data',
69
+ description: 'Query data with connection reuse',
70
+ inputSchema: {
71
+ id: z.string().min(1).describe('Record ID'),
72
+ },
73
+ outputSchema: {
74
+ id: z.string(),
75
+ data: z.string(),
76
+ },
77
+ })
78
+ export class OptimizedQueryTool extends ToolContext {
79
+ async execute(input: { id: string }) {
80
+ const db = this.get(DB_CLIENT);
81
+
82
+ // Parameterized query — prevents SQL injection
83
+ const result = await (db as { getConnection: () => { query: Function } })
84
+ .getConnection()
85
+ .query('SELECT * FROM records WHERE id = $1', [input.id]);
86
+
87
+ if (!result.rows[0]) {
88
+ this.fail(new Error(`Record not found: ${input.id}`));
89
+ }
90
+
91
+ return { id: input.id, data: JSON.stringify(result.rows[0]) };
92
+ }
93
+ }
94
+ ```
95
+
96
+ ```typescript
97
+ // src/main.ts
98
+ import { FrontMcp } from '@frontmcp/sdk';
99
+ // Only import lightweight modules at the top level
100
+ // Heavy imports happen lazily in providers
101
+ import { MyApp } from './my.app';
102
+
103
+ // No heavy initialization at module scope
104
+ // No network calls, no database connections here
105
+
106
+ @FrontMcp({
107
+ info: { name: 'fast-lambda', version: '1.0.0' },
108
+ apps: [MyApp],
109
+ })
110
+ export default class FastLambdaServer {}
111
+ ```
112
+
113
+ ## What This Demonstrates
114
+
115
+ - Connection reuse pattern: caching connections in module scope across warm invocations
116
+ - Lazy-loading heavy dependencies (`pg`) via dynamic `import()` to reduce cold start
117
+ - Not closing connections in `onDestroy()` for Lambda (they survive freeze/thaw)
118
+ - Keeping module scope lightweight with no heavy initialization
119
+
120
+ ## Related
121
+
122
+ - See `production-lambda` for the full cold start and scaling checklist
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: sam-template
3
+ reference: production-lambda
4
+ level: basic
5
+ description: 'Shows a complete SAM/CloudFormation template for deploying a FrontMCP server to AWS Lambda with API Gateway routing, DynamoDB for session storage, and proper environment configuration.'
6
+ tags: [production, lambda, session, sam, template]
7
+ features:
8
+ - 'Complete SAM template with API Gateway, Lambda function, and DynamoDB table'
9
+ - 'DynamoDB for session storage with TTL-based automatic cleanup'
10
+ - 'Lambda handler entry point via `createLambdaHandler`'
11
+ - 'Pay-per-request billing for cost-effective scaling'
12
+ - 'IAM policies scoped to the specific DynamoDB table'
13
+ ---
14
+
15
+ # SAM Template with API Gateway and DynamoDB
16
+
17
+ Shows a complete SAM/CloudFormation template for deploying a FrontMCP server to AWS Lambda with API Gateway routing, DynamoDB for session storage, and proper environment configuration.
18
+
19
+ ## Code
20
+
21
+ ```yaml
22
+ # ci/template.yaml
23
+ AWSTemplateFormatVersion: '2010-09-09'
24
+ Transform: AWS::Serverless-2016-10-31
25
+ Description: FrontMCP Lambda deployment
26
+
27
+ Globals:
28
+ Function:
29
+ Runtime: nodejs20.x
30
+ Timeout: 30
31
+ MemorySize: 256
32
+ Environment:
33
+ Variables:
34
+ NODE_ENV: production
35
+ SESSION_TABLE: !Ref SessionTable
36
+
37
+ Resources:
38
+ McpFunction:
39
+ Type: AWS::Serverless::Function
40
+ Properties:
41
+ Handler: dist/lambda.handler
42
+ CodeUri: .
43
+ Events:
44
+ McpApi:
45
+ Type: Api
46
+ Properties:
47
+ Path: /mcp/{proxy+}
48
+ Method: ANY
49
+ Policies:
50
+ - DynamoDBCrudPolicy:
51
+ TableName: !Ref SessionTable
52
+
53
+ SessionTable:
54
+ Type: AWS::DynamoDB::Table
55
+ Properties:
56
+ TableName: mcp-sessions
57
+ BillingMode: PAY_PER_REQUEST
58
+ AttributeDefinitions:
59
+ - AttributeName: sessionId
60
+ AttributeType: S
61
+ KeySchema:
62
+ - AttributeName: sessionId
63
+ KeyType: HASH
64
+ TimeToLiveSpecification:
65
+ AttributeName: ttl
66
+ Enabled: true
67
+
68
+ Outputs:
69
+ ApiEndpoint:
70
+ Description: API Gateway endpoint URL
71
+ Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/mcp/'
72
+ ```
73
+
74
+ ```typescript
75
+ // src/lambda.ts — Lambda handler entry point
76
+ import { createLambdaHandler } from '@frontmcp/adapters/lambda';
77
+ import Server from './main';
78
+
79
+ export const handler = createLambdaHandler(Server);
80
+ ```
81
+
82
+ ```typescript
83
+ // src/main.ts
84
+ import { FrontMcp } from '@frontmcp/sdk';
85
+ import { MyApp } from './my.app';
86
+
87
+ @FrontMcp({
88
+ info: { name: 'lambda-mcp', version: '1.0.0' },
89
+ apps: [MyApp],
90
+ cors: {
91
+ origin: ['https://app.example.com'],
92
+ },
93
+ })
94
+ export default class LambdaMcpServer {}
95
+ ```
96
+
97
+ ## What This Demonstrates
98
+
99
+ - Complete SAM template with API Gateway, Lambda function, and DynamoDB table
100
+ - DynamoDB for session storage with TTL-based automatic cleanup
101
+ - Lambda handler entry point via `createLambdaHandler`
102
+ - Pay-per-request billing for cost-effective scaling
103
+ - IAM policies scoped to the specific DynamoDB table
104
+
105
+ ## Related
106
+
107
+ - See `production-lambda` for the full SAM/CloudFormation and Lambda runtime checklist
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: scaling-and-monitoring
3
+ reference: production-lambda
4
+ level: advanced
5
+ description: 'Shows how to configure concurrency limits, dead letter queues, provisioned concurrency, and CloudWatch alarms for a production Lambda deployment.'
6
+ tags: [production, lambda, performance, scaling, monitoring]
7
+ features:
8
+ - 'Reserved concurrency to prevent downstream service overload'
9
+ - 'Provisioned concurrency for latency-sensitive endpoints (reduces cold starts)'
10
+ - 'Dead letter queue (DLQ) for capturing failed invocations'
11
+ - 'CloudWatch alarms for error rate and throttling detection'
12
+ - 'Loading secrets from AWS SSM Parameter Store instead of environment variables'
13
+ ---
14
+
15
+ # Lambda Scaling, Concurrency Limits, and CloudWatch Monitoring
16
+
17
+ Shows how to configure concurrency limits, dead letter queues, provisioned concurrency, and CloudWatch alarms for a production Lambda deployment.
18
+
19
+ ## Code
20
+
21
+ ```yaml
22
+ # ci/template.yaml — scaling and monitoring additions
23
+ AWSTemplateFormatVersion: '2010-09-09'
24
+ Transform: AWS::Serverless-2016-10-31
25
+
26
+ Resources:
27
+ McpFunction:
28
+ Type: AWS::Serverless::Function
29
+ Properties:
30
+ Handler: dist/lambda.handler
31
+ CodeUri: .
32
+ Runtime: nodejs20.x
33
+ Timeout: 30
34
+ MemorySize: 512
35
+ # Reserved concurrency prevents downstream overload
36
+ ReservedConcurrentExecutions: 100
37
+ # Provisioned concurrency for latency-sensitive endpoints
38
+ AutoPublishAlias: live
39
+ ProvisionedConcurrencyConfig:
40
+ ProvisionedConcurrentExecutions: 5
41
+ # Dead letter queue for failed invocations
42
+ DeadLetterQueue:
43
+ Type: SQS
44
+ TargetArn: !GetAtt DeadLetterQueue.Arn
45
+ Environment:
46
+ Variables:
47
+ NODE_ENV: production
48
+ SECRETS_PATH: /mcp/production/
49
+
50
+ DeadLetterQueue:
51
+ Type: AWS::SQS::Queue
52
+ Properties:
53
+ QueueName: mcp-dlq
54
+ MessageRetentionPeriod: 1209600 # 14 days
55
+
56
+ # CloudWatch alarm: error rate
57
+ ErrorAlarm:
58
+ Type: AWS::CloudWatch::Alarm
59
+ Properties:
60
+ AlarmName: mcp-lambda-errors
61
+ MetricName: Errors
62
+ Namespace: AWS/Lambda
63
+ Statistic: Sum
64
+ Period: 300
65
+ EvaluationPeriods: 1
66
+ Threshold: 5
67
+ ComparisonOperator: GreaterThanThreshold
68
+ Dimensions:
69
+ - Name: FunctionName
70
+ Value: !Ref McpFunction
71
+
72
+ # CloudWatch alarm: throttling
73
+ ThrottleAlarm:
74
+ Type: AWS::CloudWatch::Alarm
75
+ Properties:
76
+ AlarmName: mcp-lambda-throttles
77
+ MetricName: Throttles
78
+ Namespace: AWS/Lambda
79
+ Statistic: Sum
80
+ Period: 300
81
+ EvaluationPeriods: 1
82
+ Threshold: 1
83
+ ComparisonOperator: GreaterThanThreshold
84
+ Dimensions:
85
+ - Name: FunctionName
86
+ Value: !Ref McpFunction
87
+ ```
88
+
89
+ ```typescript
90
+ // src/providers/secrets.provider.ts
91
+ import { Provider, ProviderScope } from '@frontmcp/sdk';
92
+
93
+ export const SECRETS = Symbol('Secrets');
94
+
95
+ @Provider({ token: SECRETS, scope: ProviderScope.GLOBAL })
96
+ export class SecretsProvider {
97
+ private cache = new Map<string, string>();
98
+
99
+ async onInit(): Promise<void> {
100
+ // Load secrets from AWS SSM Parameter Store (not env vars for sensitive data)
101
+ const { SSMClient, GetParametersByPathCommand } = await import('@aws-sdk/client-ssm');
102
+ const ssm = new SSMClient({});
103
+ const path = process.env.SECRETS_PATH ?? '/mcp/production/';
104
+
105
+ const result = await ssm.send(
106
+ new GetParametersByPathCommand({
107
+ Path: path,
108
+ WithDecryption: true,
109
+ }),
110
+ );
111
+
112
+ for (const param of result.Parameters ?? []) {
113
+ const key = param.Name?.replace(path, '') ?? '';
114
+ this.cache.set(key, param.Value ?? '');
115
+ }
116
+ }
117
+
118
+ get(key: string): string {
119
+ const value = this.cache.get(key);
120
+ if (!value) {
121
+ throw new Error(`Secret not found: ${key}`);
122
+ }
123
+ return value;
124
+ }
125
+ }
126
+ ```
127
+
128
+ ## What This Demonstrates
129
+
130
+ - Reserved concurrency to prevent downstream service overload
131
+ - Provisioned concurrency for latency-sensitive endpoints (reduces cold starts)
132
+ - Dead letter queue (DLQ) for capturing failed invocations
133
+ - CloudWatch alarms for error rate and throttling detection
134
+ - Loading secrets from AWS SSM Parameter Store instead of environment variables
135
+
136
+ ## Related
137
+
138
+ - See `production-lambda` for the full CI/CD and scaling checklist
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: basic-sdk-lifecycle
3
+ reference: production-node-sdk
4
+ level: basic
5
+ description: 'Shows the complete lifecycle of a FrontMCP SDK package used as an embedded client: initialization, tool invocation, and proper cleanup.'
6
+ tags: [production, sdk, node, lifecycle]
7
+ features:
8
+ - 'Exporting a `create()` function as the public API surface'
9
+ - 'No port binding in SDK mode (embedded, not standalone server)'
10
+ - 'The full lifecycle: `create()` -> `connect()` -> `callTool()` -> `close()` -> `dispose()`'
11
+ - 'Proper cleanup to prevent memory and connection leaks'
12
+ ---
13
+
14
+ # Basic SDK Lifecycle: Create, Connect, Use, Dispose
15
+
16
+ Shows the complete lifecycle of a FrontMCP SDK package used as an embedded client: initialization, tool invocation, and proper cleanup.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/main.ts
22
+ import { FrontMcp } from '@frontmcp/sdk';
23
+ import { MyApp } from './my.app';
24
+
25
+ @FrontMcp({
26
+ info: { name: 'my-mcp-package', version: '1.0.0' },
27
+ apps: [MyApp],
28
+ // SDK mode: no port binding, no HTTP server
29
+ })
30
+ export default class MyMcpServer {}
31
+ ```
32
+
33
+ ```typescript
34
+ // src/index.ts — Public API surface
35
+ // Export a clean create() function for consumers
36
+ import MyMcpServer from './main';
37
+
38
+ export async function create() {
39
+ // create() does not bind a port — SDK mode, not server mode
40
+ const server = await MyMcpServer.create();
41
+ return server;
42
+ }
43
+
44
+ export type { MyMcpServer };
45
+ ```
46
+
47
+ ```typescript
48
+ // examples/usage.ts — How consumers use the SDK
49
+ import { create } from 'my-mcp-package';
50
+
51
+ async function main() {
52
+ // 1. Create the server (no port binding)
53
+ const server = await create();
54
+
55
+ // 2. Connect to get a typed client
56
+ const client = await server.connect();
57
+
58
+ // 3. Use the client
59
+ const tools = await client.listTools();
60
+ console.log(
61
+ 'Available tools:',
62
+ tools.map((t) => t.name),
63
+ );
64
+
65
+ const result = await client.callTool('my_tool', { input: 'value' });
66
+ console.log('Result:', result);
67
+
68
+ // 4. Always clean up — prevents leaks
69
+ await client.close();
70
+ await server.dispose();
71
+ }
72
+
73
+ main().catch(console.error);
74
+ ```
75
+
76
+ ## What This Demonstrates
77
+
78
+ - Exporting a `create()` function as the public API surface
79
+ - No port binding in SDK mode (embedded, not standalone server)
80
+ - The full lifecycle: `create()` -> `connect()` -> `callTool()` -> `close()` -> `dispose()`
81
+ - Proper cleanup to prevent memory and connection leaks
82
+
83
+ ## Related
84
+
85
+ - See `production-node-sdk` for the full SDK publishing checklist
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: multi-instance-cleanup
3
+ reference: production-node-sdk
4
+ level: advanced
5
+ description: 'Shows how multiple SDK instances can coexist without conflicts, and how to implement proper cleanup to prevent memory leaks from event listeners, timers, and provider resources.'
6
+ tags: [production, sdk, node, multi, instance, cleanup]
7
+ features:
8
+ - 'Implementing `onDestroy()` in providers to clean up timers and listeners'
9
+ - 'Ensuring multiple instances coexist without sharing global state'
10
+ - 'Testing that dispose removes all event listeners (no leaks)'
11
+ - 'Verifying one instance still works after another is disposed'
12
+ ---
13
+
14
+ # Multi-Instance Coexistence and Cleanup
15
+
16
+ Shows how multiple SDK instances can coexist without conflicts, and how to implement proper cleanup to prevent memory leaks from event listeners, timers, and provider resources.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/providers/polling.provider.ts
22
+ import { Provider, ProviderScope } from '@frontmcp/sdk';
23
+
24
+ export const POLLER = Symbol('Poller');
25
+
26
+ @Provider({ token: POLLER, scope: ProviderScope.GLOBAL })
27
+ export class PollingProvider {
28
+ private intervalId: ReturnType<typeof setInterval> | undefined;
29
+ private listeners: Array<() => void> = [];
30
+
31
+ async onInit(): Promise<void> {
32
+ // Start a polling interval
33
+ this.intervalId = setInterval(() => {
34
+ this.listeners.forEach((fn) => fn());
35
+ }, 10_000);
36
+ }
37
+
38
+ addListener(fn: () => void): void {
39
+ this.listeners.push(fn);
40
+ }
41
+
42
+ async onDestroy(): Promise<void> {
43
+ // Clean up timer — prevents dangling intervals after dispose
44
+ if (this.intervalId) {
45
+ clearInterval(this.intervalId);
46
+ this.intervalId = undefined;
47
+ }
48
+ // Remove all listener references — prevents memory leaks
49
+ this.listeners.length = 0;
50
+ }
51
+ }
52
+ ```
53
+
54
+ ```typescript
55
+ // test/multi-instance.spec.ts
56
+ import { create } from '../src/index';
57
+
58
+ describe('Multi-instance coexistence', () => {
59
+ it('should run two instances side by side without conflicts', async () => {
60
+ // Create two independent instances
61
+ const server1 = await create();
62
+ const server2 = await create();
63
+
64
+ const client1 = await server1.connect();
65
+ const client2 = await server2.connect();
66
+
67
+ // Both should work independently
68
+ const tools1 = await client1.listTools();
69
+ const tools2 = await client2.listTools();
70
+
71
+ expect(tools1.tools.length).toBeGreaterThan(0);
72
+ expect(tools2.tools.length).toBeGreaterThan(0);
73
+
74
+ // Clean up both — no shared global state
75
+ await client1.close();
76
+ await server1.dispose();
77
+
78
+ // Instance 2 still works after instance 1 is disposed
79
+ const result = await client2.callTool('my_tool', { input: 'still-alive' });
80
+ expect(result).toBeDefined();
81
+
82
+ await client2.close();
83
+ await server2.dispose();
84
+ });
85
+
86
+ it('should not leak event listeners after dispose', async () => {
87
+ const initialListeners = process.listenerCount('SIGTERM');
88
+
89
+ const server = await create();
90
+ const client = await server.connect();
91
+
92
+ await client.close();
93
+ await server.dispose();
94
+
95
+ // No dangling SIGTERM listeners after dispose
96
+ expect(process.listenerCount('SIGTERM')).toBe(initialListeners);
97
+ });
98
+ });
99
+ ```
100
+
101
+ ## What This Demonstrates
102
+
103
+ - Implementing `onDestroy()` in providers to clean up timers and listeners
104
+ - Ensuring multiple instances coexist without sharing global state
105
+ - Testing that dispose removes all event listeners (no leaks)
106
+ - Verifying one instance still works after another is disposed
107
+
108
+ ## Related
109
+
110
+ - See `production-node-sdk` for the full memory and cleanup checklist