@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.
- package/README.md +2 -2
- package/catalog/TEMPLATE.md +69 -0
- package/catalog/frontmcp-config/SKILL.md +38 -22
- package/catalog/frontmcp-config/examples/configure-auth/multi-app-auth.md +87 -0
- package/catalog/frontmcp-config/examples/configure-auth/public-mode-setup.md +63 -0
- package/catalog/frontmcp-config/examples/configure-auth/remote-oauth-with-vault.md +76 -0
- package/catalog/frontmcp-config/examples/configure-auth-modes/local-self-signed-tokens.md +77 -0
- package/catalog/frontmcp-config/examples/configure-auth-modes/remote-enterprise-oauth.md +73 -0
- package/catalog/frontmcp-config/examples/configure-auth-modes/transparent-jwt-validation.md +64 -0
- package/catalog/frontmcp-config/examples/configure-elicitation/basic-confirmation-gate.md +83 -0
- package/catalog/frontmcp-config/examples/configure-elicitation/distributed-elicitation-redis.md +87 -0
- package/catalog/frontmcp-config/examples/configure-http/cors-restricted-origins.md +52 -0
- package/catalog/frontmcp-config/examples/configure-http/entry-path-reverse-proxy.md +72 -0
- package/catalog/frontmcp-config/examples/configure-http/unix-socket-local.md +64 -0
- package/catalog/frontmcp-config/examples/configure-session/multi-server-key-prefix.md +68 -0
- package/catalog/frontmcp-config/examples/configure-session/redis-session-store.md +52 -0
- package/catalog/frontmcp-config/examples/configure-session/vercel-kv-session.md +52 -0
- package/catalog/frontmcp-config/examples/configure-throttle/distributed-redis-throttle.md +94 -0
- package/catalog/frontmcp-config/examples/configure-throttle/per-tool-rate-limit.md +92 -0
- package/catalog/frontmcp-config/examples/configure-throttle/server-level-rate-limit.md +83 -0
- package/catalog/frontmcp-config/examples/configure-throttle-guard-config/full-guard-config.md +99 -0
- package/catalog/frontmcp-config/examples/configure-throttle-guard-config/minimal-guard-config.md +55 -0
- package/catalog/frontmcp-config/examples/configure-transport/custom-protocol-flags.md +74 -0
- package/catalog/frontmcp-config/examples/configure-transport/distributed-sessions-redis.md +86 -0
- package/catalog/frontmcp-config/examples/configure-transport/stateless-serverless.md +69 -0
- package/catalog/frontmcp-config/examples/configure-transport-protocol-presets/legacy-preset-nodejs.md +65 -0
- package/catalog/frontmcp-config/examples/configure-transport-protocol-presets/stateless-api-serverless.md +69 -0
- package/catalog/frontmcp-config/references/configure-auth-modes.md +15 -0
- package/catalog/frontmcp-config/references/configure-auth.md +15 -0
- package/catalog/frontmcp-config/references/configure-elicitation.md +14 -0
- package/catalog/frontmcp-config/references/configure-http.md +15 -0
- package/catalog/frontmcp-config/references/configure-session.md +15 -0
- package/catalog/frontmcp-config/references/configure-throttle-guard-config.md +14 -0
- package/catalog/frontmcp-config/references/configure-throttle.md +15 -0
- package/catalog/frontmcp-config/references/configure-transport-protocol-presets.md +14 -0
- package/catalog/frontmcp-config/references/configure-transport.md +15 -0
- package/catalog/frontmcp-config/references/setup-redis.md +10 -0
- package/catalog/frontmcp-config/references/setup-sqlite.md +10 -0
- package/catalog/frontmcp-deployment/SKILL.md +40 -12
- package/catalog/frontmcp-deployment/examples/build-for-browser/browser-build-with-custom-entry.md +43 -0
- package/catalog/frontmcp-deployment/examples/build-for-browser/browser-crypto-and-storage.md +85 -0
- package/catalog/frontmcp-deployment/examples/build-for-browser/react-provider-setup.md +61 -0
- package/catalog/frontmcp-deployment/examples/build-for-cli/cli-binary-build.md +66 -0
- package/catalog/frontmcp-deployment/examples/build-for-cli/unix-socket-daemon.md +76 -0
- package/catalog/frontmcp-deployment/examples/build-for-sdk/connect-openai.md +78 -0
- package/catalog/frontmcp-deployment/examples/build-for-sdk/create-flat-config.md +85 -0
- package/catalog/frontmcp-deployment/examples/build-for-sdk/multi-platform-connect.md +104 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/basic-worker-deploy.md +82 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-custom-domain.md +97 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-with-kv-storage.md +92 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-lambda/cdk-deployment.md +92 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-lambda/lambda-handler-with-cors.md +113 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-lambda/sam-template-basic.md +100 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node/docker-compose-with-redis.md +101 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node/pm2-with-nginx.md +79 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node/resource-limits.md +92 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/basic-multistage-dockerfile.md +63 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/secure-nonroot-dockerfile.md +89 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-mcp-endpoint-test.md +69 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-kv.md +82 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-skills-cache.md +90 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/minimal-vercel-config.md +49 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/vercel-config-with-security-headers.md +92 -0
- package/catalog/frontmcp-deployment/references/build-for-browser.md +15 -0
- package/catalog/frontmcp-deployment/references/build-for-cli.md +65 -3
- package/catalog/frontmcp-deployment/references/build-for-sdk.md +15 -0
- package/catalog/frontmcp-deployment/references/deploy-to-cloudflare.md +15 -0
- package/catalog/frontmcp-deployment/references/deploy-to-lambda.md +18 -3
- package/catalog/frontmcp-deployment/references/deploy-to-node-dockerfile.md +16 -2
- package/catalog/frontmcp-deployment/references/deploy-to-node.md +19 -4
- package/catalog/frontmcp-deployment/references/deploy-to-vercel-config.md +14 -0
- package/catalog/frontmcp-deployment/references/deploy-to-vercel.md +15 -0
- package/catalog/frontmcp-development/SKILL.md +25 -17
- package/catalog/frontmcp-development/examples/create-adapter/basic-api-adapter.md +92 -0
- package/catalog/frontmcp-development/examples/create-adapter/namespaced-adapter.md +124 -0
- package/catalog/frontmcp-development/examples/create-agent/basic-agent-with-tools.md +121 -0
- package/catalog/frontmcp-development/examples/create-agent/custom-multi-pass-agent.md +95 -0
- package/catalog/frontmcp-development/examples/create-agent/nested-agents-with-swarm.md +111 -0
- package/catalog/frontmcp-development/examples/create-agent-llm-config/anthropic-config.md +81 -0
- package/catalog/frontmcp-development/examples/create-agent-llm-config/openai-config.md +80 -0
- package/catalog/frontmcp-development/examples/create-job/basic-report-job.md +87 -0
- package/catalog/frontmcp-development/examples/create-job/job-with-permissions.md +117 -0
- package/catalog/frontmcp-development/examples/create-job/job-with-retry.md +88 -0
- package/catalog/frontmcp-development/examples/create-plugin/basic-plugin-with-provider.md +69 -0
- package/catalog/frontmcp-development/examples/create-plugin/configurable-dynamic-plugin.md +178 -0
- package/catalog/frontmcp-development/examples/create-plugin/plugin-with-context-extension.md +107 -0
- package/catalog/frontmcp-development/examples/create-plugin-hooks/basic-logging-plugin.md +69 -0
- package/catalog/frontmcp-development/examples/create-plugin-hooks/caching-with-around.md +80 -0
- package/catalog/frontmcp-development/examples/create-plugin-hooks/tool-level-hooks-and-stage-replacement.md +100 -0
- package/catalog/frontmcp-development/examples/create-prompt/basic-prompt.md +72 -0
- package/catalog/frontmcp-development/examples/create-prompt/dynamic-rag-prompt.md +92 -0
- package/catalog/frontmcp-development/examples/create-prompt/multi-turn-debug-session.md +86 -0
- package/catalog/frontmcp-development/examples/create-provider/basic-database-provider.md +113 -0
- package/catalog/frontmcp-development/examples/create-provider/config-and-api-providers.md +107 -0
- package/catalog/frontmcp-development/examples/create-resource/basic-static-resource.md +72 -0
- package/catalog/frontmcp-development/examples/create-resource/binary-and-multi-content.md +111 -0
- package/catalog/frontmcp-development/examples/create-resource/parameterized-template.md +84 -0
- package/catalog/frontmcp-development/examples/create-skill/basic-inline-skill.md +96 -0
- package/catalog/frontmcp-development/examples/create-skill/directory-based-skill.md +115 -0
- package/catalog/frontmcp-development/examples/create-skill/parameterized-skill.md +96 -0
- package/catalog/frontmcp-development/examples/create-skill-with-tools/basic-tool-orchestration.md +76 -0
- package/catalog/frontmcp-development/examples/create-skill-with-tools/directory-skill-with-tools.md +149 -0
- package/catalog/frontmcp-development/examples/create-skill-with-tools/incident-response-skill.md +92 -0
- package/catalog/frontmcp-development/examples/create-tool/basic-class-tool.md +62 -0
- package/catalog/frontmcp-development/examples/create-tool/tool-with-di-and-errors.md +84 -0
- package/catalog/frontmcp-development/examples/create-tool/tool-with-rate-limiting-and-progress.md +93 -0
- package/catalog/frontmcp-development/examples/create-tool-annotations/destructive-delete-tool.md +94 -0
- package/catalog/frontmcp-development/examples/create-tool-annotations/readonly-query-tool.md +60 -0
- package/catalog/frontmcp-development/examples/create-tool-output-schema-types/primitive-and-media-outputs.md +104 -0
- package/catalog/frontmcp-development/examples/create-tool-output-schema-types/zod-raw-shape-output.md +63 -0
- package/catalog/frontmcp-development/examples/create-tool-output-schema-types/zod-schema-advanced-output.md +103 -0
- package/catalog/frontmcp-development/examples/create-workflow/basic-deploy-pipeline.md +91 -0
- package/catalog/frontmcp-development/examples/create-workflow/parallel-validation-pipeline.md +90 -0
- package/catalog/frontmcp-development/examples/create-workflow/webhook-triggered-workflow.md +136 -0
- package/catalog/frontmcp-development/examples/decorators-guide/agent-skill-job-workflow.md +145 -0
- package/catalog/frontmcp-development/examples/decorators-guide/basic-server-with-app-and-tools.md +124 -0
- package/catalog/frontmcp-development/examples/decorators-guide/multi-app-with-plugins-and-providers.md +149 -0
- package/catalog/frontmcp-development/examples/official-adapters/authenticated-adapter-with-polling.md +84 -0
- package/catalog/frontmcp-development/examples/official-adapters/basic-openapi-adapter.md +54 -0
- package/catalog/frontmcp-development/examples/official-adapters/multi-api-hub-with-inline-spec.md +130 -0
- package/catalog/frontmcp-development/examples/official-plugins/cache-and-feature-flags.md +117 -0
- package/catalog/frontmcp-development/examples/official-plugins/production-multi-plugin-setup.md +147 -0
- package/catalog/frontmcp-development/examples/official-plugins/remember-plugin-session-memory.md +104 -0
- package/catalog/frontmcp-development/references/create-adapter.md +14 -0
- package/catalog/frontmcp-development/references/create-agent-llm-config.md +14 -0
- package/catalog/frontmcp-development/references/create-agent.md +15 -0
- package/catalog/frontmcp-development/references/create-job.md +15 -0
- package/catalog/frontmcp-development/references/create-plugin-hooks.md +51 -0
- package/catalog/frontmcp-development/references/create-plugin.md +186 -11
- package/catalog/frontmcp-development/references/create-prompt.md +17 -0
- package/catalog/frontmcp-development/references/create-provider.md +14 -0
- package/catalog/frontmcp-development/references/create-resource.md +127 -0
- package/catalog/frontmcp-development/references/create-skill-with-tools.md +126 -7
- package/catalog/frontmcp-development/references/create-skill.md +57 -12
- package/catalog/frontmcp-development/references/create-tool-annotations.md +14 -0
- package/catalog/frontmcp-development/references/create-tool-output-schema-types.md +15 -0
- package/catalog/frontmcp-development/references/create-tool.md +205 -1
- package/catalog/frontmcp-development/references/create-workflow.md +15 -0
- package/catalog/frontmcp-development/references/decorators-guide.md +155 -78
- package/catalog/frontmcp-development/references/official-adapters.md +31 -16
- package/catalog/frontmcp-development/references/official-plugins.md +62 -28
- package/catalog/frontmcp-extensibility/SKILL.md +103 -0
- package/catalog/frontmcp-extensibility/examples/vectoriadb/product-catalog-search.md +175 -0
- package/catalog/frontmcp-extensibility/examples/vectoriadb/semantic-search-with-persistence.md +138 -0
- package/catalog/frontmcp-extensibility/examples/vectoriadb/tfidf-keyword-search.md +103 -0
- package/catalog/frontmcp-extensibility/references/vectoriadb.md +299 -0
- package/catalog/frontmcp-guides/SKILL.md +7 -4
- package/catalog/frontmcp-guides/examples/example-knowledge-base/agent-and-plugin.md +160 -0
- package/catalog/frontmcp-guides/examples/example-knowledge-base/multi-app-composition.md +92 -0
- package/catalog/frontmcp-guides/examples/example-knowledge-base/vector-search-and-resources.md +135 -0
- package/catalog/frontmcp-guides/examples/example-task-manager/auth-and-crud-tools.md +135 -0
- package/catalog/frontmcp-guides/examples/example-task-manager/authenticated-e2e-tests.md +148 -0
- package/catalog/frontmcp-guides/examples/example-task-manager/redis-provider-with-di.md +129 -0
- package/catalog/frontmcp-guides/examples/example-weather-api/server-and-app-setup.md +75 -0
- package/catalog/frontmcp-guides/examples/example-weather-api/unit-and-e2e-tests.md +142 -0
- package/catalog/frontmcp-guides/examples/example-weather-api/weather-tool-with-schemas.md +74 -0
- package/catalog/frontmcp-guides/references/example-knowledge-base.md +15 -0
- package/catalog/frontmcp-guides/references/example-task-manager.md +30 -21
- package/catalog/frontmcp-guides/references/example-weather-api.md +18 -6
- package/catalog/frontmcp-observability/SKILL.md +144 -0
- package/catalog/frontmcp-observability/examples/structured-logging/stdout-logging.md +71 -0
- package/catalog/frontmcp-observability/examples/structured-logging/winston-integration.md +70 -0
- package/catalog/frontmcp-observability/examples/telemetry-api/agent-nested-tracing.md +86 -0
- package/catalog/frontmcp-observability/examples/telemetry-api/plugin-telemetry.md +93 -0
- package/catalog/frontmcp-observability/examples/telemetry-api/tool-custom-spans.md +72 -0
- package/catalog/frontmcp-observability/examples/testing-observability/test-custom-spans.md +90 -0
- package/catalog/frontmcp-observability/examples/testing-observability/test-log-correlation.md +104 -0
- package/catalog/frontmcp-observability/examples/tracing-setup/basic-tracing.md +82 -0
- package/catalog/frontmcp-observability/examples/tracing-setup/production-tracing.md +73 -0
- package/catalog/frontmcp-observability/examples/vendor-integrations/coralogix-setup.md +74 -0
- package/catalog/frontmcp-observability/references/structured-logging.md +114 -0
- package/catalog/frontmcp-observability/references/telemetry-api.md +155 -0
- package/catalog/frontmcp-observability/references/testing-observability.md +169 -0
- package/catalog/frontmcp-observability/references/tracing-setup.md +146 -0
- package/catalog/frontmcp-observability/references/vendor-integrations.md +164 -0
- package/catalog/frontmcp-production-readiness/SKILL.md +99 -0
- package/catalog/frontmcp-production-readiness/examples/common-checklist/caching-and-performance.md +102 -0
- package/catalog/frontmcp-production-readiness/examples/common-checklist/observability-setup.md +104 -0
- package/catalog/frontmcp-production-readiness/examples/common-checklist/security-hardening.md +95 -0
- package/catalog/frontmcp-production-readiness/examples/health-readiness-endpoints/basic-health-setup.md +81 -0
- package/catalog/frontmcp-production-readiness/examples/health-readiness-endpoints/custom-probes.md +136 -0
- package/catalog/frontmcp-production-readiness/examples/production-browser/browser-bundle-config.md +93 -0
- package/catalog/frontmcp-production-readiness/examples/production-browser/cross-platform-crypto.md +116 -0
- package/catalog/frontmcp-production-readiness/examples/production-browser/security-and-performance.md +128 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-binary/binary-build-config.md +109 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-binary/stdio-transport-error-handling.md +132 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/daemon-socket-config.md +82 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/graceful-shutdown-cleanup.md +107 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/security-and-permissions.md +119 -0
- package/catalog/frontmcp-production-readiness/examples/production-cloudflare/durable-objects-state.md +124 -0
- package/catalog/frontmcp-production-readiness/examples/production-cloudflare/workers-runtime-constraints.md +103 -0
- package/catalog/frontmcp-production-readiness/examples/production-cloudflare/wrangler-config.md +89 -0
- package/catalog/frontmcp-production-readiness/examples/production-lambda/cold-start-connection-reuse.md +122 -0
- package/catalog/frontmcp-production-readiness/examples/production-lambda/sam-template.md +107 -0
- package/catalog/frontmcp-production-readiness/examples/production-lambda/scaling-and-monitoring.md +138 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-sdk/basic-sdk-lifecycle.md +85 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-sdk/multi-instance-cleanup.md +110 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-sdk/package-json-config.md +107 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-server/docker-multi-stage.md +103 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-server/graceful-shutdown.md +87 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-server/redis-session-scaling.md +97 -0
- package/catalog/frontmcp-production-readiness/examples/production-vercel/cold-start-optimization.md +104 -0
- package/catalog/frontmcp-production-readiness/examples/production-vercel/stateless-serverless-design.md +91 -0
- package/catalog/frontmcp-production-readiness/examples/production-vercel/vercel-edge-config.md +78 -0
- package/catalog/frontmcp-production-readiness/references/common-checklist.md +175 -0
- package/catalog/frontmcp-production-readiness/references/health-readiness-endpoints.md +198 -0
- package/catalog/frontmcp-production-readiness/references/production-browser.md +56 -0
- package/catalog/frontmcp-production-readiness/references/production-cli-binary.md +71 -0
- package/catalog/frontmcp-production-readiness/references/production-cli-daemon.md +71 -0
- package/catalog/frontmcp-production-readiness/references/production-cloudflare.md +62 -0
- package/catalog/frontmcp-production-readiness/references/production-lambda.md +63 -0
- package/catalog/frontmcp-production-readiness/references/production-node-sdk.md +76 -0
- package/catalog/frontmcp-production-readiness/references/production-node-server.md +71 -0
- package/catalog/frontmcp-production-readiness/references/production-vercel.md +62 -0
- package/catalog/frontmcp-setup/SKILL.md +19 -14
- package/catalog/frontmcp-setup/examples/frontmcp-skills-usage/bundle-presets-scaffolding.md +61 -0
- package/catalog/frontmcp-setup/examples/frontmcp-skills-usage/install-and-search-skills.md +83 -0
- package/catalog/frontmcp-setup/examples/multi-app-composition/local-apps-with-shared-tools.md +87 -0
- package/catalog/frontmcp-setup/examples/multi-app-composition/per-app-auth-and-isolation.md +88 -0
- package/catalog/frontmcp-setup/examples/multi-app-composition/remote-and-esm-apps.md +81 -0
- package/catalog/frontmcp-setup/examples/nx-workflow/build-test-affected.md +77 -0
- package/catalog/frontmcp-setup/examples/nx-workflow/multi-server-deployment.md +93 -0
- package/catalog/frontmcp-setup/examples/nx-workflow/scaffold-and-generate.md +62 -0
- package/catalog/frontmcp-setup/examples/project-structure-nx/nx-generator-scaffolding.md +73 -0
- package/catalog/frontmcp-setup/examples/project-structure-nx/nx-workspace-with-apps.md +85 -0
- package/catalog/frontmcp-setup/examples/project-structure-nx/shared-library-usage.md +89 -0
- package/catalog/frontmcp-setup/examples/project-structure-standalone/dev-workflow-commands.md +64 -0
- package/catalog/frontmcp-setup/examples/project-structure-standalone/feature-folder-organization.md +111 -0
- package/catalog/frontmcp-setup/examples/project-structure-standalone/minimal-standalone-layout.md +73 -0
- package/catalog/frontmcp-setup/examples/readme-guide/node-server-readme.md +89 -0
- package/catalog/frontmcp-setup/examples/readme-guide/vercel-deployment-readme.md +90 -0
- package/catalog/frontmcp-setup/examples/setup-project/basic-node-server.md +99 -0
- package/catalog/frontmcp-setup/examples/setup-project/cli-scaffold-with-flags.md +77 -0
- package/catalog/frontmcp-setup/examples/setup-project/vercel-serverless-server.md +89 -0
- package/catalog/frontmcp-setup/examples/setup-redis/docker-redis-local-dev.md +88 -0
- package/catalog/frontmcp-setup/examples/setup-redis/hybrid-vercel-kv-with-pubsub.md +78 -0
- package/catalog/frontmcp-setup/examples/setup-redis/vercel-kv-serverless.md +78 -0
- package/catalog/frontmcp-setup/examples/setup-sqlite/basic-sqlite-setup.md +75 -0
- package/catalog/frontmcp-setup/examples/setup-sqlite/encrypted-sqlite-storage.md +55 -0
- package/catalog/frontmcp-setup/examples/setup-sqlite/unix-socket-daemon.md +70 -0
- package/catalog/frontmcp-setup/references/frontmcp-skills-usage.md +33 -9
- package/catalog/frontmcp-setup/references/multi-app-composition.md +15 -0
- package/catalog/frontmcp-setup/references/nx-workflow.md +15 -0
- package/catalog/frontmcp-setup/references/project-structure-nx.md +15 -0
- package/catalog/frontmcp-setup/references/project-structure-standalone.md +15 -0
- package/catalog/frontmcp-setup/references/readme-guide.md +235 -0
- package/catalog/frontmcp-setup/references/setup-project.md +16 -1
- package/catalog/frontmcp-setup/references/setup-redis.md +15 -0
- package/catalog/frontmcp-setup/references/setup-sqlite.md +15 -0
- package/catalog/frontmcp-testing/SKILL.md +41 -27
- package/catalog/frontmcp-testing/examples/setup-testing/fixture-based-e2e-test.md +70 -0
- package/catalog/frontmcp-testing/examples/setup-testing/jest-config-with-coverage.md +59 -0
- package/catalog/frontmcp-testing/examples/setup-testing/unit-test-tool-resource-prompt.md +115 -0
- package/catalog/frontmcp-testing/examples/test-auth/oauth-flow-test.md +78 -0
- package/catalog/frontmcp-testing/examples/test-auth/role-based-access-test.md +88 -0
- package/catalog/frontmcp-testing/examples/test-auth/token-factory-test.md +71 -0
- package/catalog/frontmcp-testing/examples/test-browser-build/browser-bundle-validation.md +58 -0
- package/catalog/frontmcp-testing/examples/test-browser-build/playwright-browser-test.md +69 -0
- package/catalog/frontmcp-testing/examples/test-cli-binary/binary-startup-test.md +77 -0
- package/catalog/frontmcp-testing/examples/test-cli-binary/js-bundle-import-test.md +56 -0
- package/catalog/frontmcp-testing/examples/test-direct-client/basic-create-test.md +74 -0
- package/catalog/frontmcp-testing/examples/test-direct-client/openai-claude-format-test.md +79 -0
- package/catalog/frontmcp-testing/examples/test-e2e-handler/basic-e2e-test.md +67 -0
- package/catalog/frontmcp-testing/examples/test-e2e-handler/manual-client-with-transport.md +72 -0
- package/catalog/frontmcp-testing/examples/test-e2e-handler/tool-call-and-error-e2e.md +73 -0
- package/catalog/frontmcp-testing/examples/test-tool-unit/basic-tool-test.md +69 -0
- package/catalog/frontmcp-testing/examples/test-tool-unit/schema-validation-test.md +82 -0
- package/catalog/frontmcp-testing/examples/test-tool-unit/tool-error-handling-test.md +92 -0
- package/catalog/frontmcp-testing/references/setup-testing.md +17 -0
- package/catalog/frontmcp-testing/references/test-auth.md +15 -0
- package/catalog/frontmcp-testing/references/test-browser-build.md +14 -0
- package/catalog/frontmcp-testing/references/test-cli-binary.md +14 -0
- package/catalog/frontmcp-testing/references/test-direct-client.md +14 -0
- package/catalog/frontmcp-testing/references/test-e2e-handler.md +15 -0
- package/catalog/frontmcp-testing/references/test-tool-unit.md +15 -0
- package/catalog/skills-manifest.json +2849 -32
- package/package.json +2 -2
- package/src/index.d.ts +1 -1
- package/src/index.js.map +1 -1
- package/src/loader.js +0 -1
- package/src/loader.js.map +1 -1
- package/src/manifest.d.ts +36 -1
- package/src/manifest.js +6 -1
- package/src/manifest.js.map +1 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vendor-integrations
|
|
3
|
+
description: 'Connect FrontMCP observability to Coralogix, Datadog, Logz.io, Grafana Cloud, or any OTLP backend.'
|
|
4
|
+
tags: [vendor, coralogix, datadog, logz, grafana, otlp, integration]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Vendor Integrations
|
|
8
|
+
|
|
9
|
+
Connect FrontMCP traces and logs to any monitoring platform. All major vendors accept OTLP — the standard OpenTelemetry protocol.
|
|
10
|
+
|
|
11
|
+
## OTLP — Universal Standard
|
|
12
|
+
|
|
13
|
+
The `otlp` sink type sends structured logs (with trace correlation) to any OTLP-compatible endpoint:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
@FrontMcp({
|
|
17
|
+
observability: {
|
|
18
|
+
tracing: true,
|
|
19
|
+
logging: {
|
|
20
|
+
sinks: [{
|
|
21
|
+
type: 'otlp',
|
|
22
|
+
endpoint: 'http://your-collector:4318',
|
|
23
|
+
headers: { Authorization: 'Bearer YOUR_TOKEN' },
|
|
24
|
+
}],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
})
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Vendor-Specific Configuration
|
|
31
|
+
|
|
32
|
+
### Coralogix
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
observability: {
|
|
36
|
+
tracing: true,
|
|
37
|
+
logging: {
|
|
38
|
+
sinks: [{
|
|
39
|
+
type: 'otlp',
|
|
40
|
+
endpoint: 'https://ingress.coralogix.com:443', // EU: eu2.coralogix.com
|
|
41
|
+
headers: { Authorization: 'Bearer CX_PRIVATE_KEY' },
|
|
42
|
+
serviceName: 'my-mcp-server',
|
|
43
|
+
}],
|
|
44
|
+
},
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For traces, configure `setupOTel()` with the same endpoint:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { setupOTel } from '@frontmcp/observability';
|
|
52
|
+
|
|
53
|
+
setupOTel({
|
|
54
|
+
serviceName: 'my-mcp-server',
|
|
55
|
+
exporter: 'otlp',
|
|
56
|
+
endpoint: 'https://ingress.coralogix.com:443',
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Datadog
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
observability: {
|
|
64
|
+
tracing: true,
|
|
65
|
+
logging: {
|
|
66
|
+
sinks: [{
|
|
67
|
+
type: 'otlp',
|
|
68
|
+
endpoint: 'https://http-intake.logs.datadoghq.com', // EU: .datadoghq.eu
|
|
69
|
+
headers: { 'DD-API-KEY': 'YOUR_DATADOG_API_KEY' },
|
|
70
|
+
}],
|
|
71
|
+
},
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Logz.io
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
observability: {
|
|
79
|
+
tracing: true,
|
|
80
|
+
logging: {
|
|
81
|
+
sinks: [{
|
|
82
|
+
type: 'otlp',
|
|
83
|
+
endpoint: 'https://otlp-listener.logz.io:8071',
|
|
84
|
+
headers: { Authorization: 'Bearer YOUR_SHIPPING_TOKEN' },
|
|
85
|
+
}],
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Grafana Cloud
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
observability: {
|
|
94
|
+
tracing: true,
|
|
95
|
+
logging: {
|
|
96
|
+
sinks: [{
|
|
97
|
+
type: 'otlp',
|
|
98
|
+
endpoint: 'https://otlp-gateway-prod-us-east-0.grafana.net/otlp',
|
|
99
|
+
headers: {
|
|
100
|
+
Authorization: 'Basic ' + Buffer.from(`${instanceId}:${apiKey}`).toString('base64'),
|
|
101
|
+
},
|
|
102
|
+
}],
|
|
103
|
+
},
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Local Collector (Development)
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
observability: {
|
|
111
|
+
tracing: true,
|
|
112
|
+
logging: {
|
|
113
|
+
sinks: [{ type: 'otlp', endpoint: 'http://localhost:4318' }],
|
|
114
|
+
},
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Environment Variable Configuration
|
|
119
|
+
|
|
120
|
+
All vendors can be configured via environment variables — no code changes:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
OTEL_SERVICE_NAME=my-mcp-server
|
|
124
|
+
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingress.coralogix.com:443
|
|
125
|
+
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer CX_KEY"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Winston / Pino (Existing Logging)
|
|
129
|
+
|
|
130
|
+
If you already have a winston or pino setup routing logs to a vendor:
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// Use your existing logger — it already sends to your vendor
|
|
134
|
+
observability: {
|
|
135
|
+
logging: {
|
|
136
|
+
sinks: [{ type: 'winston', logger: existingWinstonLogger }],
|
|
137
|
+
},
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Structured log entries (with `trace_id`) are forwarded to your logger, which sends them to wherever it's configured.
|
|
142
|
+
|
|
143
|
+
## OTLP Sink Options
|
|
144
|
+
|
|
145
|
+
| Option | Type | Default | Description |
|
|
146
|
+
| ----------------- | ------------------------ | -------------------------------------------------------- | ------------------------------------------- |
|
|
147
|
+
| `endpoint` | `string` | `OTEL_EXPORTER_OTLP_ENDPOINT` or `http://localhost:4318` | OTLP endpoint (path `/v1/logs` is appended) |
|
|
148
|
+
| `headers` | `Record<string, string>` | `{}` | Auth headers |
|
|
149
|
+
| `batchSize` | `number` | `100` | Max entries before auto-flush |
|
|
150
|
+
| `flushIntervalMs` | `number` | `5000` | Flush timer interval |
|
|
151
|
+
| `serviceName` | `string` | `OTEL_SERVICE_NAME` or `frontmcp-server` | Service name in resource attributes |
|
|
152
|
+
|
|
153
|
+
## Examples
|
|
154
|
+
|
|
155
|
+
| Example | Level | Description |
|
|
156
|
+
| ----------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------- |
|
|
157
|
+
| [`coralogix-setup`](../examples/vendor-integrations/coralogix-setup.md) | Intermediate | Send both traces and structured logs to Coralogix. Logs include trace_id so Coralogix links them to traces automatically. |
|
|
158
|
+
|
|
159
|
+
> See all examples in [`examples/vendor-integrations/`](../examples/vendor-integrations/)
|
|
160
|
+
|
|
161
|
+
## Reference
|
|
162
|
+
|
|
163
|
+
- [Observability Guide](https://docs.agentfront.dev/frontmcp/guides/observability)
|
|
164
|
+
- Related skills: `frontmcp-deployment`, `frontmcp-production-readiness`
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontmcp-production-readiness
|
|
3
|
+
description: 'Pre-production audit and checklist for FrontMCP servers. Use before go-live to verify security hardening, performance checks, observability, monitoring, and health checks. Triggers: production ready, security audit, performance check, production checklist, hardening, go live.'
|
|
4
|
+
tags: [production, security, performance, reliability, observability, audit, best-practices]
|
|
5
|
+
category: production
|
|
6
|
+
targets: [all]
|
|
7
|
+
bundle: [recommended, full]
|
|
8
|
+
priority: 10
|
|
9
|
+
visibility: both
|
|
10
|
+
license: Apache-2.0
|
|
11
|
+
metadata:
|
|
12
|
+
docs: https://docs.agentfront.dev/frontmcp/deployment/production-build
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# FrontMCP Production Readiness Audit
|
|
16
|
+
|
|
17
|
+
Router for production readiness checklists. Start with the common checklist (security, performance, reliability, observability), then follow the target-specific checklist for your deployment environment.
|
|
18
|
+
|
|
19
|
+
## When to Use This Skill
|
|
20
|
+
|
|
21
|
+
### Must Use
|
|
22
|
+
|
|
23
|
+
- Before deploying a FrontMCP server to production for the first time
|
|
24
|
+
- After major feature additions or architectural changes
|
|
25
|
+
- During security reviews or compliance audits
|
|
26
|
+
|
|
27
|
+
### Recommended
|
|
28
|
+
|
|
29
|
+
- As part of PR reviews for infrastructure-touching changes
|
|
30
|
+
- Quarterly health checks on production deployments
|
|
31
|
+
- When switching deployment targets
|
|
32
|
+
|
|
33
|
+
### Skip When
|
|
34
|
+
|
|
35
|
+
- Building a prototype or proof-of-concept
|
|
36
|
+
- Running in development/local mode only
|
|
37
|
+
|
|
38
|
+
> **Decision:** Use this skill when preparing for production. Start with `common-checklist`, then pick your deployment target.
|
|
39
|
+
|
|
40
|
+
## Step 1: Detect Deployment Target
|
|
41
|
+
|
|
42
|
+
Check the project to determine the deployment target:
|
|
43
|
+
|
|
44
|
+
1. Look at `package.json` scripts for `frontmcp build --target <target>`
|
|
45
|
+
2. Check for target-specific files: `ci/Dockerfile` (node), `vercel.json` (vercel), `wrangler.toml` (cloudflare), `ci/template.yaml` (lambda)
|
|
46
|
+
3. Check if the build target is `cli` or `browser` in the build config
|
|
47
|
+
4. If unclear, ask the user which environment they're deploying to
|
|
48
|
+
|
|
49
|
+
## Step 2: Run Common Checklist
|
|
50
|
+
|
|
51
|
+
Always start with the common checklist — it covers security, performance, reliability, and observability that apply to every target.
|
|
52
|
+
|
|
53
|
+
## Step 3: Run Target-Specific Checklist
|
|
54
|
+
|
|
55
|
+
After the common checklist, run the checklist for your deployment target.
|
|
56
|
+
|
|
57
|
+
## Scenario Routing Table
|
|
58
|
+
|
|
59
|
+
| Scenario | Reference | Description |
|
|
60
|
+
| -------------------------------------------------------- | ------------------------------------------ | --------------------------------------------------- |
|
|
61
|
+
| Common security, performance, reliability, observability | `references/common-checklist.md` | Applies to ALL targets — run this first |
|
|
62
|
+
| Health & readiness endpoints (/healthz, /readyz) | `references/health-readiness-endpoints.md` | Custom probes, Kubernetes, runtime-aware readiness |
|
|
63
|
+
| Standalone Node.js server with Docker | `references/production-node-server.md` | Docker, health checks, Redis, scaling, CI/CD |
|
|
64
|
+
| Node.js SDK / direct client (npm package) | `references/production-node-sdk.md` | create()/connect() API, disposal, npm publishing |
|
|
65
|
+
| Vercel serverless / edge | `references/production-vercel.md` | Vercel config, edge runtime, cold starts, Vercel KV |
|
|
66
|
+
| Cloudflare Workers | `references/production-cloudflare.md` | Wrangler, Workers runtime, KV, Durable Objects |
|
|
67
|
+
| AWS Lambda | `references/production-lambda.md` | SAM template, cold starts, DynamoDB, API Gateway |
|
|
68
|
+
| CLI daemon (local MCP server) | `references/production-cli-daemon.md` | Process manager, socket files, service registration |
|
|
69
|
+
| CLI binary (one-shot execution) | `references/production-cli-binary.md` | Fast startup, stdio transport, exit codes, npm bin |
|
|
70
|
+
| Browser SDK | `references/production-browser.md` | Bundle size, browser APIs, CSP, CDN distribution |
|
|
71
|
+
|
|
72
|
+
## Quick Reference: Target Detection
|
|
73
|
+
|
|
74
|
+
| File / Signal Found | Target |
|
|
75
|
+
| ----------------------------------------------------- | ----------------------------------------------- |
|
|
76
|
+
| `ci/Dockerfile` or `ci/docker-compose.yml` | Standalone server → `production-node-server.md` |
|
|
77
|
+
| `serve: false` or `create()` API usage | SDK / direct client → `production-node-sdk.md` |
|
|
78
|
+
| `vercel.json` | Vercel → `production-vercel.md` |
|
|
79
|
+
| `wrangler.toml` | Cloudflare → `production-cloudflare.md` |
|
|
80
|
+
| `ci/template.yaml` | Lambda → `production-lambda.md` |
|
|
81
|
+
| `frontmcp start` / `socket` / `service install` usage | CLI daemon → `production-cli-daemon.md` |
|
|
82
|
+
| `build --target cli` + `bin` in package.json | CLI binary → `production-cli-binary.md` |
|
|
83
|
+
| `build --target browser` in scripts | Browser → `production-browser.md` |
|
|
84
|
+
|
|
85
|
+
## Verification Checklist
|
|
86
|
+
|
|
87
|
+
After completing both common and target-specific checklists:
|
|
88
|
+
|
|
89
|
+
1. Run `frontmcp doctor` to check project configuration
|
|
90
|
+
2. Run `frontmcp test` to ensure all tests pass
|
|
91
|
+
3. Run `frontmcp build` to verify production build succeeds
|
|
92
|
+
4. Deploy to staging and run E2E tests against it
|
|
93
|
+
5. Review logs for any warnings or errors during startup
|
|
94
|
+
6. Update README for the deployment target (see `frontmcp-setup` → `references/readme-guide.md`)
|
|
95
|
+
|
|
96
|
+
## Reference
|
|
97
|
+
|
|
98
|
+
- [Production Build](https://docs.agentfront.dev/frontmcp/deployment/production-build)
|
|
99
|
+
- Related skills: `frontmcp-config`, `frontmcp-deployment`, `frontmcp-testing`, `frontmcp-setup`, `frontmcp-observability`
|
package/catalog/frontmcp-production-readiness/examples/common-checklist/caching-and-performance.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caching-and-performance
|
|
3
|
+
reference: common-checklist
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Shows how to configure caching with TTL, optimize responses, and manage memory with proper provider lifecycle cleanup.'
|
|
6
|
+
tags: [production, redis, cache, session, performance, checklist]
|
|
7
|
+
features:
|
|
8
|
+
- 'Configuring per-tool cache TTL instead of a single global value'
|
|
9
|
+
- 'Using Redis-backed cache for multi-instance consistency'
|
|
10
|
+
- 'Setting session TTL to prevent unbounded storage growth'
|
|
11
|
+
- 'Implementing `onDestroy()` in providers for proper connection cleanup'
|
|
12
|
+
- 'Using connection pool limits and timeouts to prevent resource exhaustion'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Caching and Performance Configuration
|
|
16
|
+
|
|
17
|
+
Shows how to configure caching with TTL, optimize responses, and manage memory with proper provider lifecycle cleanup.
|
|
18
|
+
|
|
19
|
+
## Code
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/main.ts
|
|
23
|
+
import { FrontMcp } from '@frontmcp/sdk';
|
|
24
|
+
import { CachePlugin } from '@frontmcp/plugins';
|
|
25
|
+
import { MyApp } from './my.app';
|
|
26
|
+
|
|
27
|
+
@FrontMcp({
|
|
28
|
+
info: { name: 'perf-server', version: '1.0.0' },
|
|
29
|
+
apps: [MyApp],
|
|
30
|
+
plugins: [
|
|
31
|
+
new CachePlugin({
|
|
32
|
+
// Per-tool TTL tuning (not one-size-fits-all)
|
|
33
|
+
ttl: {
|
|
34
|
+
get_weather: 300_000, // 5 minutes — data changes slowly
|
|
35
|
+
list_tasks: 10_000, // 10 seconds — data changes frequently
|
|
36
|
+
},
|
|
37
|
+
defaultTtl: 60_000, // 1 minute default
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
40
|
+
|
|
41
|
+
// Redis for multi-instance cache consistency
|
|
42
|
+
redis: {
|
|
43
|
+
provider: 'redis',
|
|
44
|
+
host: process.env.REDIS_HOST ?? 'localhost',
|
|
45
|
+
port: 6379,
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
// Session TTL to prevent unbounded growth
|
|
49
|
+
session: {
|
|
50
|
+
ttl: 3600_000, // 1 hour
|
|
51
|
+
},
|
|
52
|
+
})
|
|
53
|
+
export default class PerfServer {}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// src/providers/db-connection.provider.ts
|
|
58
|
+
import { Provider, ProviderScope } from '@frontmcp/sdk';
|
|
59
|
+
|
|
60
|
+
export const DB_POOL = Symbol('DbPool');
|
|
61
|
+
|
|
62
|
+
@Provider({ token: DB_POOL, scope: ProviderScope.GLOBAL })
|
|
63
|
+
export class DbConnectionProvider {
|
|
64
|
+
private pool!: { query: Function; end: Function };
|
|
65
|
+
|
|
66
|
+
async onInit(): Promise<void> {
|
|
67
|
+
// Connection pool with limits — prevents resource exhaustion
|
|
68
|
+
this.pool = await this.createPool({
|
|
69
|
+
host: process.env.DB_HOST,
|
|
70
|
+
max: 20, // Maximum connections
|
|
71
|
+
idleTimeoutMs: 30_000, // Close idle connections after 30s
|
|
72
|
+
connectionTimeoutMs: 5_000, // Don't hang on connection attempts
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async query(sql: string, params: unknown[]): Promise<unknown> {
|
|
77
|
+
return this.pool.query(sql, params); // Parameterized — no SQL injection
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async onDestroy(): Promise<void> {
|
|
81
|
+
// Clean up on shutdown — prevents connection leaks
|
|
82
|
+
await this.pool.end();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private async createPool(config: Record<string, unknown>): Promise<{ query: Function; end: Function }> {
|
|
86
|
+
// Replace with your database driver (e.g., pg, mysql2)
|
|
87
|
+
throw new Error('Implement with your database driver');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## What This Demonstrates
|
|
93
|
+
|
|
94
|
+
- Configuring per-tool cache TTL instead of a single global value
|
|
95
|
+
- Using Redis-backed cache for multi-instance consistency
|
|
96
|
+
- Setting session TTL to prevent unbounded storage growth
|
|
97
|
+
- Implementing `onDestroy()` in providers for proper connection cleanup
|
|
98
|
+
- Using connection pool limits and timeouts to prevent resource exhaustion
|
|
99
|
+
|
|
100
|
+
## Related
|
|
101
|
+
|
|
102
|
+
- See `common-checklist` for the full performance and memory management checklist
|
package/catalog/frontmcp-production-readiness/examples/common-checklist/observability-setup.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: observability-setup
|
|
3
|
+
reference: common-checklist
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Shows how to configure structured logging, error handling with MCP error codes, and monitoring integration for production.'
|
|
6
|
+
tags: [production, observability, checklist, setup]
|
|
7
|
+
features:
|
|
8
|
+
- 'Using `this.mark()` to annotate execution phases for tracing'
|
|
9
|
+
- 'Using `this.fail()` for business-logic errors without exposing internals'
|
|
10
|
+
- 'Setting timeouts on all external calls via `AbortSignal.timeout()`'
|
|
11
|
+
- 'Implementing health check providers that verify downstream dependencies'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Observability and Error Handling Setup
|
|
15
|
+
|
|
16
|
+
Shows how to configure structured logging, error handling with MCP error codes, and monitoring integration for production.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/tools/monitored-tool.tool.ts
|
|
22
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
|
|
25
|
+
@Tool({
|
|
26
|
+
name: 'monitored_operation',
|
|
27
|
+
description: 'A tool with proper error handling and observability markers',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
operationId: z.string().min(1).describe('Operation identifier'),
|
|
30
|
+
},
|
|
31
|
+
outputSchema: {
|
|
32
|
+
status: z.string(),
|
|
33
|
+
operationId: z.string(),
|
|
34
|
+
},
|
|
35
|
+
})
|
|
36
|
+
export class MonitoredOperationTool extends ToolContext {
|
|
37
|
+
async execute(input: { operationId: string }) {
|
|
38
|
+
// Mark execution phases for tracing and duration metrics
|
|
39
|
+
this.mark('validation');
|
|
40
|
+
// ... validate business rules ...
|
|
41
|
+
|
|
42
|
+
this.mark('processing');
|
|
43
|
+
const result = await this.processOperation(input.operationId);
|
|
44
|
+
|
|
45
|
+
if (!result) {
|
|
46
|
+
// Use this.fail() with specific errors — never expose stack traces
|
|
47
|
+
this.fail(new Error(`Operation not found: ${input.operationId}`));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Report progress for long-running operations
|
|
51
|
+
await this.respondProgress(1, 1);
|
|
52
|
+
|
|
53
|
+
return { status: 'completed', operationId: input.operationId };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private async processOperation(id: string): Promise<boolean> {
|
|
57
|
+
// External call with timeout — always set timeouts for external services
|
|
58
|
+
const response = await this.fetch(`https://api.example.com/operations/${id}`, {
|
|
59
|
+
signal: AbortSignal.timeout(5000), // 5 second timeout
|
|
60
|
+
});
|
|
61
|
+
return response.ok;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// src/providers/health-check.provider.ts
|
|
68
|
+
import { Provider, ProviderScope } from '@frontmcp/sdk';
|
|
69
|
+
|
|
70
|
+
export const HEALTH_CHECK = Symbol('HealthCheck');
|
|
71
|
+
|
|
72
|
+
@Provider({ token: HEALTH_CHECK, scope: ProviderScope.GLOBAL })
|
|
73
|
+
export class HealthCheckProvider {
|
|
74
|
+
async checkRedis(): Promise<boolean> {
|
|
75
|
+
// Verify downstream dependency is reachable
|
|
76
|
+
try {
|
|
77
|
+
// ... ping Redis ...
|
|
78
|
+
return true;
|
|
79
|
+
} catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async checkDatabase(): Promise<boolean> {
|
|
85
|
+
try {
|
|
86
|
+
// ... run a lightweight query ...
|
|
87
|
+
return true;
|
|
88
|
+
} catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## What This Demonstrates
|
|
96
|
+
|
|
97
|
+
- Using `this.mark()` to annotate execution phases for tracing
|
|
98
|
+
- Using `this.fail()` for business-logic errors without exposing internals
|
|
99
|
+
- Setting timeouts on all external calls via `AbortSignal.timeout()`
|
|
100
|
+
- Implementing health check providers that verify downstream dependencies
|
|
101
|
+
|
|
102
|
+
## Related
|
|
103
|
+
|
|
104
|
+
- See `common-checklist` for the full observability and monitoring checklist
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-hardening
|
|
3
|
+
reference: common-checklist
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Shows how to configure authentication, CORS, input validation, and rate limiting for a production FrontMCP server.'
|
|
6
|
+
tags: [production, redis, session, security, throttle, checklist]
|
|
7
|
+
features:
|
|
8
|
+
- "Restricting CORS origins to known domains instead of using `'*'`"
|
|
9
|
+
- 'Configuring rate limiting via the `throttle` option'
|
|
10
|
+
- 'Using Redis for session storage in multi-instance deployments'
|
|
11
|
+
- 'Defining both `inputSchema` and `outputSchema` on tools to prevent data leaks'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Security Hardening Configuration
|
|
15
|
+
|
|
16
|
+
Shows how to configure authentication, CORS, input validation, and rate limiting for a production FrontMCP server.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/main.ts
|
|
22
|
+
import { FrontMcp } from '@frontmcp/sdk';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
import { MyApp } from './my.app';
|
|
25
|
+
|
|
26
|
+
@FrontMcp({
|
|
27
|
+
info: { name: 'secure-server', version: '1.0.0' },
|
|
28
|
+
apps: [MyApp],
|
|
29
|
+
|
|
30
|
+
// Authentication: use remote OAuth provider
|
|
31
|
+
auth: {
|
|
32
|
+
mode: 'remote',
|
|
33
|
+
provider: 'https://auth.example.com',
|
|
34
|
+
clientId: process.env.AUTH_CLIENT_ID!,
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
// CORS: restrict to known origins (never use '*' in production)
|
|
38
|
+
cors: {
|
|
39
|
+
origin: ['https://app.example.com', 'https://admin.example.com'],
|
|
40
|
+
credentials: true,
|
|
41
|
+
maxAge: 86400, // Cache preflight for 24 hours
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
// Rate limiting: prevent abuse
|
|
45
|
+
throttle: {
|
|
46
|
+
windowMs: 60_000, // 1 minute window
|
|
47
|
+
max: 100, // 100 requests per window per client
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
// Session storage: use Redis (not in-memory) for multi-instance
|
|
51
|
+
redis: {
|
|
52
|
+
provider: 'redis',
|
|
53
|
+
host: process.env.REDIS_HOST ?? 'localhost',
|
|
54
|
+
port: 6379,
|
|
55
|
+
},
|
|
56
|
+
})
|
|
57
|
+
export default class SecureServer {}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// src/tools/safe-query.tool.ts
|
|
62
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
63
|
+
import { z } from 'zod';
|
|
64
|
+
|
|
65
|
+
@Tool({
|
|
66
|
+
name: 'safe_query',
|
|
67
|
+
description: 'Query data with validated and sanitized input',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
query: z.string().min(1).max(500).describe('Search query'),
|
|
70
|
+
limit: z.number().int().min(1).max(100).default(10).describe('Max results'),
|
|
71
|
+
},
|
|
72
|
+
outputSchema: {
|
|
73
|
+
results: z.array(z.object({ id: z.string(), title: z.string() })),
|
|
74
|
+
total: z.number(),
|
|
75
|
+
},
|
|
76
|
+
})
|
|
77
|
+
export class SafeQueryTool extends ToolContext {
|
|
78
|
+
async execute(input: { query: string; limit: number }) {
|
|
79
|
+
// Zod already validated input — safe to use
|
|
80
|
+
// outputSchema prevents accidental data leaks
|
|
81
|
+
return { results: [], total: 0 };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## What This Demonstrates
|
|
87
|
+
|
|
88
|
+
- Restricting CORS origins to known domains instead of using `'*'`
|
|
89
|
+
- Configuring rate limiting via the `throttle` option
|
|
90
|
+
- Using Redis for session storage in multi-instance deployments
|
|
91
|
+
- Defining both `inputSchema` and `outputSchema` on tools to prevent data leaks
|
|
92
|
+
|
|
93
|
+
## Related
|
|
94
|
+
|
|
95
|
+
- See `common-checklist` for the full security, performance, and reliability checklist
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: basic-health-setup
|
|
3
|
+
reference: health-readiness-endpoints
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Default health endpoints with Redis session store, showing /healthz and /readyz responses.'
|
|
6
|
+
tags: [production, health, readiness, redis, kubernetes, docker]
|
|
7
|
+
features:
|
|
8
|
+
- 'Zero-config /healthz and /readyz endpoints enabled by default'
|
|
9
|
+
- 'Auto-discovered session-store probe via Redis persistence'
|
|
10
|
+
- 'Catalog hash for config drift detection across instances'
|
|
11
|
+
- 'Docker HEALTHCHECK directive using /healthz'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Basic Health Setup
|
|
15
|
+
|
|
16
|
+
Default health endpoints with Redis session store, showing /healthz and /readyz responses.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/server.ts
|
|
22
|
+
import { FrontMcp } from '@frontmcp/sdk';
|
|
23
|
+
import { MyApp } from './apps/my-app';
|
|
24
|
+
|
|
25
|
+
@FrontMcp({
|
|
26
|
+
info: { name: 'my-server', version: '1.0.0' },
|
|
27
|
+
apps: [MyApp],
|
|
28
|
+
http: { port: 3001 },
|
|
29
|
+
redis: { host: 'localhost', port: 6379 },
|
|
30
|
+
transport: {
|
|
31
|
+
persistence: {}, // auto-uses global redis
|
|
32
|
+
},
|
|
33
|
+
// health endpoints are enabled by default:
|
|
34
|
+
// GET /healthz -> { status: 'ok', server: {...}, runtime: {...}, uptime: ... }
|
|
35
|
+
// GET /readyz -> { status: 'ready', catalog: {...}, probes: { 'session-store': {...} } }
|
|
36
|
+
// GET /health -> legacy alias for /healthz
|
|
37
|
+
})
|
|
38
|
+
export default class Server {}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```dockerfile
|
|
42
|
+
# ci/Dockerfile
|
|
43
|
+
FROM node:20-slim
|
|
44
|
+
WORKDIR /app
|
|
45
|
+
COPY dist/ ./dist/
|
|
46
|
+
COPY package.json ./
|
|
47
|
+
RUN npm ci --production
|
|
48
|
+
EXPOSE 3001
|
|
49
|
+
|
|
50
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
51
|
+
CMD curl -f http://localhost:3001/healthz || exit 1
|
|
52
|
+
|
|
53
|
+
CMD ["node", "dist/main.js"]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Test the endpoints:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Liveness probe
|
|
60
|
+
curl http://localhost:3001/healthz
|
|
61
|
+
# {"status":"ok","server":{"name":"my-server","version":"1.0.0"},"runtime":{"platform":"linux","runtime":"node","deployment":"standalone","env":"production"},"uptime":42.5}
|
|
62
|
+
|
|
63
|
+
# Readiness probe (includes auto-discovered session-store probe)
|
|
64
|
+
curl http://localhost:3001/readyz
|
|
65
|
+
# {"status":"ready","totalLatencyMs":15,"catalog":{"toolsHash":"a1b2c3...","toolCount":5,"resourceCount":2,"promptCount":1,"skillCount":0,"agentCount":0},"probes":{"session-store":{"status":"healthy","latencyMs":3}}}
|
|
66
|
+
|
|
67
|
+
# Legacy endpoint (alias for /healthz)
|
|
68
|
+
curl http://localhost:3001/health
|
|
69
|
+
# same as /healthz
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## What This Demonstrates
|
|
73
|
+
|
|
74
|
+
- Zero-config /healthz and /readyz endpoints enabled by default
|
|
75
|
+
- Auto-discovered session-store probe via Redis persistence
|
|
76
|
+
- Catalog hash for config drift detection across instances
|
|
77
|
+
- Docker HEALTHCHECK directive using /healthz
|
|
78
|
+
|
|
79
|
+
## Related
|
|
80
|
+
|
|
81
|
+
- See `health-readiness-endpoints` for custom probes and configuration options
|