@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,79 @@
1
+ ---
2
+ name: openai-claude-format-test
3
+ reference: test-direct-client
4
+ level: intermediate
5
+ description: 'Verify that tools are returned in the correct format for OpenAI and Claude clients using `connectOpenAI` and `connectClaude`.'
6
+ tags: [testing, openai, anthropic, direct-client, direct, client]
7
+ features:
8
+ - 'Using `connectOpenAI()` with `serve: false` to get an in-memory client without starting an HTTP server'
9
+ - "Verifying OpenAI tool format: `{ type: 'function', function: { name, parameters } }`"
10
+ - 'Using dynamic import for `connectClaude` to test Claude tool format: `{ name, description, input_schema }`'
11
+ - 'Proper cleanup with `client.close()` after each test'
12
+ ---
13
+
14
+ # Testing OpenAI and Claude Tool Formats
15
+
16
+ Verify that tools are returned in the correct format for OpenAI and Claude clients using `connectOpenAI` and `connectClaude`.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/__tests__/client-formats.spec.ts
22
+ import { connectOpenAI } from '@frontmcp/sdk';
23
+ import { tool } from '@frontmcp/sdk';
24
+ import { z } from 'zod';
25
+
26
+ const AddTool = tool({
27
+ name: 'add',
28
+ description: 'Add numbers',
29
+ inputSchema: { a: z.number(), b: z.number() },
30
+ outputSchema: { sum: z.number() },
31
+ })((input) => ({ sum: input.a + input.b }));
32
+
33
+ describe('OpenAI format', () => {
34
+ it('should return OpenAI-formatted tools', async () => {
35
+ const client = await connectOpenAI({
36
+ info: { name: 'test', version: '1.0.0' },
37
+ tools: [AddTool],
38
+ serve: false,
39
+ });
40
+
41
+ const tools = await client.listTools();
42
+ // OpenAI format: [{ type: 'function', function: { name, parameters } }]
43
+ expect(tools[0].type).toBe('function');
44
+ expect(tools[0].function.name).toBe('add');
45
+ expect(tools[0].function.parameters).toBeDefined();
46
+
47
+ await client.close();
48
+ });
49
+ });
50
+
51
+ describe('Claude format', () => {
52
+ it('should return Claude-formatted tools', async () => {
53
+ const { connectClaude } = await import('@frontmcp/sdk');
54
+ const client = await connectClaude({
55
+ info: { name: 'test', version: '1.0.0' },
56
+ tools: [AddTool],
57
+ serve: false,
58
+ });
59
+
60
+ const tools = await client.listTools();
61
+ // Claude format: [{ name, description, input_schema }]
62
+ expect(tools[0].name).toBe('add');
63
+ expect(tools[0].input_schema).toBeDefined();
64
+
65
+ await client.close();
66
+ });
67
+ });
68
+ ```
69
+
70
+ ## What This Demonstrates
71
+
72
+ - Using `connectOpenAI()` with `serve: false` to get an in-memory client without starting an HTTP server
73
+ - Verifying OpenAI tool format: `{ type: 'function', function: { name, parameters } }`
74
+ - Using dynamic import for `connectClaude` to test Claude tool format: `{ name, description, input_schema }`
75
+ - Proper cleanup with `client.close()` after each test
76
+
77
+ ## Related
78
+
79
+ - See `test-direct-client` for the full direct client testing reference
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: basic-e2e-test
3
+ reference: test-e2e-handler
4
+ level: basic
5
+ description: 'Set up a basic E2E test that starts a server, connects a client, and verifies tools are listed.'
6
+ tags: [testing, e2e, handler]
7
+ features:
8
+ - 'Using `TestServer.create()` to start a server from its module export'
9
+ - 'Connecting a client via `server.connect()` for automatic base URL wiring'
10
+ - 'Proper lifecycle management with `beforeAll` / `afterAll` for setup and teardown'
11
+ - 'Using the `toContainTool` custom matcher from `@frontmcp/testing`'
12
+ ---
13
+
14
+ # Basic E2E Test with McpTestClient
15
+
16
+ Set up a basic E2E test that starts a server, connects a client, and verifies tools are listed.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/__tests__/server.e2e.spec.ts
22
+ import { McpTestClient, TestServer } from '@frontmcp/testing';
23
+ import Server from '../src/main';
24
+
25
+ describe('Server E2E', () => {
26
+ let client: McpTestClient;
27
+ let server: TestServer;
28
+
29
+ beforeAll(async () => {
30
+ server = await TestServer.create(Server);
31
+ client = await server.connect();
32
+ });
33
+
34
+ afterAll(async () => {
35
+ await client.close();
36
+ await server.dispose();
37
+ });
38
+
39
+ it('should list all tools', async () => {
40
+ const { tools } = await client.listTools();
41
+ expect(tools.length).toBeGreaterThan(0);
42
+ expect(tools).toContainTool('add_numbers');
43
+ });
44
+
45
+ it('should list resources', async () => {
46
+ const { resources } = await client.listResources();
47
+ expect(resources.length).toBeGreaterThanOrEqual(0);
48
+ });
49
+
50
+ it('should list prompts', async () => {
51
+ const result = await client.getPrompt('summarize', { topic: 'testing' });
52
+ expect(result.messages).toBeDefined();
53
+ expect(result.messages.length).toBeGreaterThan(0);
54
+ });
55
+ });
56
+ ```
57
+
58
+ ## What This Demonstrates
59
+
60
+ - Using `TestServer.create()` to start a server from its module export
61
+ - Connecting a client via `server.connect()` for automatic base URL wiring
62
+ - Proper lifecycle management with `beforeAll` / `afterAll` for setup and teardown
63
+ - Using the `toContainTool` custom matcher from `@frontmcp/testing`
64
+
65
+ ## Related
66
+
67
+ - See `test-e2e-handler` for the full E2E handler testing reference
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: manual-client-with-transport
3
+ reference: test-e2e-handler
4
+ level: advanced
5
+ description: 'Use `McpTestClient.create()` with explicit transport settings for fine-grained control over E2E tests.'
6
+ tags: [testing, session, transport, e2e, handler, manual]
7
+ features:
8
+ - 'Using `TestServer.start()` with an explicit command and port for process-based server startup'
9
+ - "Building a client with `McpTestClient.create().withTransport('modern').buildAndConnect()` for streamable HTTP + strict sessions"
10
+ - 'Using `server.info.baseUrl` to wire the client to the correct address'
11
+ - 'Separate `disconnect()` / `stop()` calls for client and server teardown'
12
+ - 'The `toBeError()` and `toHaveTextContent()` custom matchers'
13
+ ---
14
+
15
+ # Manual McpTestClient with Transport Configuration
16
+
17
+ Use `McpTestClient.create()` with explicit transport settings for fine-grained control over E2E tests.
18
+
19
+ ## Code
20
+
21
+ ```typescript
22
+ // src/__tests__/advanced.e2e.spec.ts
23
+ import { McpTestClient, TestServer } from '@frontmcp/testing';
24
+
25
+ describe('Advanced E2E with Transport Config', () => {
26
+ let server: TestServer;
27
+ let client: McpTestClient;
28
+
29
+ beforeAll(async () => {
30
+ server = await TestServer.start({
31
+ command: 'npx tsx src/main.ts',
32
+ port: 3004,
33
+ });
34
+
35
+ client = await McpTestClient.create({ baseUrl: server.info.baseUrl }).withTransport('modern').buildAndConnect();
36
+ });
37
+
38
+ afterAll(async () => {
39
+ await client.disconnect();
40
+ await server.stop();
41
+ });
42
+
43
+ it('should list tools after initialization', async () => {
44
+ const tools = await client.tools.list();
45
+ expect(tools.length).toBeGreaterThan(0);
46
+ });
47
+
48
+ it('should handle tool errors gracefully', async () => {
49
+ const result = await client.tools.call('nonexistent_tool', {});
50
+ expect(result).toBeError();
51
+ });
52
+
53
+ it('should call tool and verify result shape', async () => {
54
+ const result = await client.tools.call('add_numbers', { a: 1, b: 2 });
55
+ expect(result).toBeSuccessful();
56
+ expect(result).toHaveTextContent('3');
57
+ });
58
+ });
59
+ ```
60
+
61
+ ## What This Demonstrates
62
+
63
+ - Using `TestServer.start()` with an explicit command and port for process-based server startup
64
+ - Building a client with `McpTestClient.create().withTransport('modern').buildAndConnect()` for streamable HTTP + strict sessions
65
+ - Using `server.info.baseUrl` to wire the client to the correct address
66
+ - Separate `disconnect()` / `stop()` calls for client and server teardown
67
+ - The `toBeError()` and `toHaveTextContent()` custom matchers
68
+
69
+ ## Related
70
+
71
+ - See `test-e2e-handler` for the full E2E handler testing reference
72
+ - See `setup-testing` for fixture-based E2E patterns
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: tool-call-and-error-e2e
3
+ reference: test-e2e-handler
4
+ level: intermediate
5
+ description: 'Test successful tool calls and verify that invalid inputs produce proper error responses over the full MCP protocol.'
6
+ tags: [testing, e2e, handler, tool, call, error]
7
+ features:
8
+ - 'Calling tools via `client.callTool()` and asserting success with `toBeSuccessful()`'
9
+ - 'Verifying text content in tool results with `result.content[0].text`'
10
+ - 'Checking `result.isError` for invalid input and nonexistent tool calls'
11
+ - 'Testing edge cases like zero values and missing optional parameters'
12
+ ---
13
+
14
+ # E2E Testing Tool Calls and Error Responses
15
+
16
+ Test successful tool calls and verify that invalid inputs produce proper error responses over the full MCP protocol.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/__tests__/tool-calls.e2e.spec.ts
22
+ import { McpTestClient, TestServer } from '@frontmcp/testing';
23
+ import Server from '../src/main';
24
+
25
+ describe('Tool Call E2E', () => {
26
+ let client: McpTestClient;
27
+ let server: TestServer;
28
+
29
+ beforeAll(async () => {
30
+ server = await TestServer.create(Server);
31
+ client = await server.connect();
32
+ });
33
+
34
+ afterAll(async () => {
35
+ await client.close();
36
+ await server.dispose();
37
+ });
38
+
39
+ it('should call a tool and get a successful result', async () => {
40
+ const result = await client.callTool('add_numbers', { a: 5, b: 3 });
41
+ expect(result).toBeSuccessful();
42
+ expect(result.content[0].text).toContain('8');
43
+ });
44
+
45
+ it('should return isError for invalid input', async () => {
46
+ const result = await client.callTool('add_numbers', { a: 'bad' });
47
+ expect(result.isError).toBe(true);
48
+ });
49
+
50
+ it('should return error for nonexistent tool', async () => {
51
+ const result = await client.callTool('nonexistent_tool', {});
52
+ expect(result.isError).toBe(true);
53
+ });
54
+
55
+ it('should handle tool with optional parameters', async () => {
56
+ const result = await client.callTool('add_numbers', { a: 10, b: 0 });
57
+ expect(result).toBeSuccessful();
58
+ expect(result.content[0].text).toContain('10');
59
+ });
60
+ });
61
+ ```
62
+
63
+ ## What This Demonstrates
64
+
65
+ - Calling tools via `client.callTool()` and asserting success with `toBeSuccessful()`
66
+ - Verifying text content in tool results with `result.content[0].text`
67
+ - Checking `result.isError` for invalid input and nonexistent tool calls
68
+ - Testing edge cases like zero values and missing optional parameters
69
+
70
+ ## Related
71
+
72
+ - See `test-e2e-handler` for the full E2E handler testing reference
73
+ - See `test-tool-unit` for unit-level tool testing
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: basic-tool-test
3
+ reference: test-tool-unit
4
+ level: basic
5
+ description: "Test a simple tool's `execute()` method with mock context and verify the output."
6
+ tags: [testing, tool, unit]
7
+ features:
8
+ - 'Creating a mock `ToolContext` with all required methods (`get`, `tryGet`, `fail`, `mark`, `notify`, `respondProgress`)'
9
+ - 'Assigning the mock context to the tool instance via `Object.assign`'
10
+ - 'Testing multiple input scenarios including edge cases (negatives, zero)'
11
+ ---
12
+
13
+ # Basic Tool Unit Test
14
+
15
+ Test a simple tool's `execute()` method with mock context and verify the output.
16
+
17
+ ## Code
18
+
19
+ ```typescript
20
+ // src/tools/__tests__/add.tool.spec.ts
21
+ import { ToolContext } from '@frontmcp/sdk';
22
+ import { AddTool } from '../add.tool';
23
+
24
+ describe('AddTool', () => {
25
+ let tool: AddTool;
26
+
27
+ beforeEach(() => {
28
+ tool = new AddTool();
29
+
30
+ const ctx = {
31
+ get: jest.fn(),
32
+ tryGet: jest.fn(),
33
+ fail: jest.fn((err) => {
34
+ throw err;
35
+ }),
36
+ mark: jest.fn(),
37
+ notify: jest.fn(),
38
+ respondProgress: jest.fn(),
39
+ } as unknown as ToolContext;
40
+
41
+ Object.assign(tool, ctx);
42
+ });
43
+
44
+ it('should add two numbers', async () => {
45
+ const result = await tool.execute({ a: 2, b: 3 });
46
+ expect(result).toEqual({ sum: 5 });
47
+ });
48
+
49
+ it('should handle negative numbers', async () => {
50
+ const result = await tool.execute({ a: -1, b: -2 });
51
+ expect(result).toEqual({ sum: -3 });
52
+ });
53
+
54
+ it('should handle zero values', async () => {
55
+ const result = await tool.execute({ a: 0, b: 0 });
56
+ expect(result).toEqual({ sum: 0 });
57
+ });
58
+ });
59
+ ```
60
+
61
+ ## What This Demonstrates
62
+
63
+ - Creating a mock `ToolContext` with all required methods (`get`, `tryGet`, `fail`, `mark`, `notify`, `respondProgress`)
64
+ - Assigning the mock context to the tool instance via `Object.assign`
65
+ - Testing multiple input scenarios including edge cases (negatives, zero)
66
+
67
+ ## Related
68
+
69
+ - See `test-tool-unit` for the full tool unit testing reference
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: schema-validation-test
3
+ reference: test-tool-unit
4
+ level: intermediate
5
+ description: "Validate that a tool's Zod input schema rejects invalid data before `execute()` is called."
6
+ tags: [testing, tool, unit, schema, validation]
7
+ features:
8
+ - 'Testing the Zod input schema separately from the `execute()` method'
9
+ - 'Using `safeParse()` to check validation results without throwing'
10
+ - 'Covering rejection of wrong types, missing fields, and empty input'
11
+ - 'Combining schema validation with execution to test the full flow'
12
+ ---
13
+
14
+ # Testing Zod Schema Validation for Tool Input
15
+
16
+ Validate that a tool's Zod input schema rejects invalid data before `execute()` is called.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/tools/__tests__/add.tool.schema.spec.ts
22
+ import { z } from 'zod';
23
+ import { ToolContext } from '@frontmcp/sdk';
24
+ import { AddTool } from '../add.tool';
25
+
26
+ describe('AddTool schema validation', () => {
27
+ const schema = z.object({ a: z.number(), b: z.number() });
28
+
29
+ it('should accept valid numeric input', () => {
30
+ const result = schema.safeParse({ a: 5, b: 10 });
31
+ expect(result.success).toBe(true);
32
+ if (result.success) {
33
+ expect(result.data).toEqual({ a: 5, b: 10 });
34
+ }
35
+ });
36
+
37
+ it('should reject string values for numeric fields', () => {
38
+ const result = schema.safeParse({ a: 'not-a-number', b: 3 });
39
+ expect(result.success).toBe(false);
40
+ });
41
+
42
+ it('should reject missing required fields', () => {
43
+ const result = schema.safeParse({ a: 5 });
44
+ expect(result.success).toBe(false);
45
+ });
46
+
47
+ it('should reject empty input', () => {
48
+ const result = schema.safeParse({});
49
+ expect(result.success).toBe(false);
50
+ });
51
+
52
+ it('should coerce valid input and produce correct output', async () => {
53
+ const tool = new AddTool();
54
+ const ctx = {
55
+ get: jest.fn(),
56
+ tryGet: jest.fn(),
57
+ fail: jest.fn((err) => {
58
+ throw err;
59
+ }),
60
+ mark: jest.fn(),
61
+ notify: jest.fn(),
62
+ respondProgress: jest.fn(),
63
+ } as unknown as ToolContext;
64
+ Object.assign(tool, ctx);
65
+
66
+ const parsed = schema.parse({ a: 7, b: 3 });
67
+ const result = await tool.execute(parsed);
68
+ expect(result).toEqual({ sum: 10 });
69
+ });
70
+ });
71
+ ```
72
+
73
+ ## What This Demonstrates
74
+
75
+ - Testing the Zod input schema separately from the `execute()` method
76
+ - Using `safeParse()` to check validation results without throwing
77
+ - Covering rejection of wrong types, missing fields, and empty input
78
+ - Combining schema validation with execution to test the full flow
79
+
80
+ ## Related
81
+
82
+ - See `test-tool-unit` for the full tool unit testing reference
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: tool-error-handling-test
3
+ reference: test-tool-unit
4
+ level: advanced
5
+ description: 'Test that a tool throws the correct MCP error classes with proper error codes and JSON-RPC error shapes.'
6
+ tags: [testing, json-rpc, tool, unit, error, handling]
7
+ features:
8
+ - 'Verifying specific error classes with `toBeInstanceOf` instead of just checking that something threw'
9
+ - 'Asserting MCP error codes from `MCP_ERROR_CODES` constants'
10
+ - 'Validating the JSON-RPC error shape returned by `toJsonRpcError()`'
11
+ - 'Testing both success and failure paths in the same suite'
12
+ ---
13
+
14
+ # Testing Tool Error Handling and Error Classes
15
+
16
+ Test that a tool throws the correct MCP error classes with proper error codes and JSON-RPC error shapes.
17
+
18
+ ## Code
19
+
20
+ ```typescript
21
+ // src/tools/__tests__/lookup.tool.spec.ts
22
+ import { ToolContext } from '@frontmcp/sdk';
23
+ import { ResourceNotFoundError, MCP_ERROR_CODES } from '@frontmcp/sdk';
24
+ import { LookupTool } from '../lookup.tool';
25
+
26
+ describe('LookupTool error handling', () => {
27
+ let tool: LookupTool;
28
+
29
+ beforeEach(() => {
30
+ tool = new LookupTool();
31
+
32
+ const ctx = {
33
+ get: jest.fn(),
34
+ tryGet: jest.fn(),
35
+ fail: jest.fn((err) => {
36
+ throw err;
37
+ }),
38
+ mark: jest.fn(),
39
+ notify: jest.fn(),
40
+ respondProgress: jest.fn(),
41
+ } as unknown as ToolContext;
42
+
43
+ Object.assign(tool, ctx);
44
+ });
45
+
46
+ it('should throw ResourceNotFoundError for missing resource', async () => {
47
+ await expect(tool.execute({ id: 'nonexistent' })).rejects.toThrow(ResourceNotFoundError);
48
+ });
49
+
50
+ it('should produce correct MCP error code', async () => {
51
+ try {
52
+ await tool.execute({ id: 'nonexistent' });
53
+ fail('Expected an error to be thrown');
54
+ } catch (err) {
55
+ expect(err).toBeInstanceOf(ResourceNotFoundError);
56
+ expect((err as ResourceNotFoundError).mcpErrorCode).toBe(MCP_ERROR_CODES.RESOURCE_NOT_FOUND);
57
+ }
58
+ });
59
+
60
+ it('should produce valid JSON-RPC error shape', async () => {
61
+ try {
62
+ await tool.execute({ id: 'nonexistent' });
63
+ fail('Expected an error to be thrown');
64
+ } catch (err) {
65
+ const rpc = (err as ResourceNotFoundError).toJsonRpcError();
66
+ expect(rpc).toEqual({
67
+ code: -32002,
68
+ message: expect.any(String),
69
+ data: expect.objectContaining({ uri: expect.any(String) }),
70
+ });
71
+ }
72
+ });
73
+
74
+ it('should succeed for valid resource id', async () => {
75
+ const result = await tool.execute({ id: 'existing-123' });
76
+ expect(result).toBeDefined();
77
+ expect(result.content).toBeDefined();
78
+ });
79
+ });
80
+ ```
81
+
82
+ ## What This Demonstrates
83
+
84
+ - Verifying specific error classes with `toBeInstanceOf` instead of just checking that something threw
85
+ - Asserting MCP error codes from `MCP_ERROR_CODES` constants
86
+ - Validating the JSON-RPC error shape returned by `toJsonRpcError()`
87
+ - Testing both success and failure paths in the same suite
88
+
89
+ ## Related
90
+
91
+ - See `test-tool-unit` for the full tool unit testing reference
92
+ - See `setup-testing` for error class testing patterns
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: setup-testing
3
+ description: Configure Jest, write unit and E2E tests, and enforce 95%+ coverage for FrontMCP applications
4
+ ---
5
+
1
6
  # Set Up Testing for FrontMCP Applications
2
7
 
3
8
  This skill covers testing FrontMCP applications at three levels: unit tests for individual tools/resources/prompts, E2E tests exercising the full MCP protocol, and manual testing with `frontmcp dev`.
@@ -311,6 +316,8 @@ test('prompts return well-formed messages', async ({ mcp }) => {
311
316
 
312
317
  For more control, use `McpTestClient` and `TestServer` directly:
313
318
 
319
+ > **Note:** `npx tsx src/main.ts` is correct **only inside E2E tests** (the test framework uses it internally via `resolveServerCommand`). For development and running the server outside of tests, always use `frontmcp dev` (or your package.json `dev` script). Never run `npx tsx src/main.ts` directly for development.
320
+
314
321
  ```typescript
315
322
  // advanced.e2e.spec.ts
316
323
  import { McpTestClient, TestServer } from '@frontmcp/testing';
@@ -544,6 +551,16 @@ node scripts/fix-unused-imports.mjs feature/my-branch
544
551
  | Istanbul shows 0% coverage for async methods | TypeScript compilation source-map mismatch | Known issue with `ts-jest` and certain async patterns; check `tsconfig.spec.json` source-map settings |
545
552
  | Auth E2E test returns 401 unexpectedly | Token not set or expired | Call `mcp.setAuthToken(token)` before the tool call; use `auth.createToken()` with valid claims |
546
553
 
554
+ ## Examples
555
+
556
+ | Example | Level | Description |
557
+ | ----------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
558
+ | [`fixture-based-e2e-test`](../examples/setup-testing/fixture-based-e2e-test.md) | Advanced | Write E2E tests using the fixture API from `@frontmcp/testing` that manages server lifecycle automatically and uses MCP-specific custom matchers. |
559
+ | [`jest-config-with-coverage`](../examples/setup-testing/jest-config-with-coverage.md) | Basic | Set up a Jest configuration file that enforces 95%+ coverage across all metrics for a FrontMCP library. |
560
+ | [`unit-test-tool-resource-prompt`](../examples/setup-testing/unit-test-tool-resource-prompt.md) | Intermediate | Write unit tests for the three core MCP primitives, verifying that outputs match the expected MCP response shapes. |
561
+
562
+ > See all examples in [`examples/setup-testing/`](../examples/setup-testing/)
563
+
547
564
  ## Reference
548
565
 
549
566
  - [Testing Documentation](https://docs.agentfront.dev/frontmcp/testing/overview)
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: test-auth
3
+ description: Test authenticated MCP servers with TestTokenFactory, MockOAuthServer, and role-based access
4
+ ---
5
+
1
6
  # Testing with Authentication
2
7
 
3
8
  ```typescript
@@ -86,3 +91,13 @@ describe('OAuth Flow', () => {
86
91
  });
87
92
  });
88
93
  ```
94
+
95
+ ## Examples
96
+
97
+ | Example | Level | Description |
98
+ | --------------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------- |
99
+ | [`oauth-flow-test`](../examples/test-auth/oauth-flow-test.md) | Advanced | Use `MockOAuthServer` to simulate an OAuth identity provider and test the authorization code flow. |
100
+ | [`role-based-access-test`](../examples/test-auth/role-based-access-test.md) | Intermediate | Verify that tools enforce role-based access by testing admin and user tokens against protected endpoints. |
101
+ | [`token-factory-test`](../examples/test-auth/token-factory-test.md) | Basic | Use `TestTokenFactory` to create tokens and verify authenticated and unauthenticated requests. |
102
+
103
+ > See all examples in [`examples/test-auth/`](../examples/test-auth/)
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: test-browser-build
3
+ description: Validate browser build output for Node.js-free bundles and test with Playwright
4
+ ---
5
+
1
6
  # Testing Browser Build
2
7
 
3
8
  After building with `frontmcp build --target browser`, validate the output:
@@ -55,3 +60,12 @@ test('browser client can call a tool', async ({ page }) => {
55
60
  expect(result).toContain('8');
56
61
  });
57
62
  ```
63
+
64
+ ## Examples
65
+
66
+ | Example | Level | Description |
67
+ | ------------------------------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------ |
68
+ | [`browser-bundle-validation`](../examples/test-browser-build/browser-bundle-validation.md) | Basic | Verify that the browser build produces a valid bundle without Node.js-only module references. |
69
+ | [`playwright-browser-test`](../examples/test-browser-build/playwright-browser-test.md) | Advanced | Use Playwright to test a browser-based MCP client that loads and calls tools from an MCP server. |
70
+
71
+ > See all examples in [`examples/test-browser-build/`](../examples/test-browser-build/)
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: test-cli-binary
3
+ description: Test CLI binary and SEA build for startup, health check, and JS bundle import
4
+ ---
5
+
1
6
  # Testing CLI Binary / SEA Build
2
7
 
3
8
  After building with `frontmcp build --target cli`, test the binary:
@@ -46,3 +51,12 @@ describe('JS Bundle', () => {
46
51
  });
47
52
  });
48
53
  ```
54
+
55
+ ## Examples
56
+
57
+ | Example | Level | Description |
58
+ | ------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------ |
59
+ | [`binary-startup-test`](../examples/test-cli-binary/binary-startup-test.md) | Basic | Verify that a compiled CLI binary starts correctly and responds to health checks. |
60
+ | [`js-bundle-import-test`](../examples/test-cli-binary/js-bundle-import-test.md) | Intermediate | Verify that the compiled JS bundle can be imported and exports the expected modules after a `frontmcp build` step. |
61
+
62
+ > See all examples in [`examples/test-cli-binary/`](../examples/test-cli-binary/)
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: test-direct-client
3
+ description: In-memory testing with create() and connectOpenAI/connectClaude without HTTP overhead
4
+ ---
5
+
1
6
  # Testing with Direct Client (No HTTP)
2
7
 
3
8
  Uses `connect()` or `create()` for in-memory testing without HTTP overhead.
@@ -60,3 +65,12 @@ describe('Direct Client Testing', () => {
60
65
  });
61
66
  });
62
67
  ```
68
+
69
+ ## Examples
70
+
71
+ | Example | Level | Description |
72
+ | ------------------------------------------------------------------------------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------- |
73
+ | [`basic-create-test`](../examples/test-direct-client/basic-create-test.md) | Basic | Test tools in-memory without any HTTP overhead using the `create()` function from `@frontmcp/sdk`. |
74
+ | [`openai-claude-format-test`](../examples/test-direct-client/openai-claude-format-test.md) | Intermediate | Verify that tools are returned in the correct format for OpenAI and Claude clients using `connectOpenAI` and `connectClaude`. |
75
+
76
+ > See all examples in [`examples/test-direct-client/`](../examples/test-direct-client/)