@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,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: per-tool-rate-limit
|
|
3
|
+
reference: configure-throttle
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Override server defaults with per-tool rate limits and concurrency caps.'
|
|
6
|
+
tags: [config, session, throttle, per, tool, rate]
|
|
7
|
+
features:
|
|
8
|
+
- 'Setting per-tool `rateLimit`, `concurrency`, and `timeout` on the `@Tool` decorator'
|
|
9
|
+
- "Using `partitionBy: 'session'` for per-user fairness on expensive tools"
|
|
10
|
+
- 'Setting `queueTimeoutMs` to briefly queue excess requests instead of rejecting immediately'
|
|
11
|
+
- 'Tools without overrides (`QuickLookupTool`) inherit server defaults'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Per-Tool Rate Limiting
|
|
15
|
+
|
|
16
|
+
Override server defaults with per-tool rate limits and concurrency caps.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/server.ts
|
|
22
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
|
|
25
|
+
@Tool({
|
|
26
|
+
name: 'expensive_query',
|
|
27
|
+
description: 'Run an expensive database query',
|
|
28
|
+
inputSchema: { query: z.string() },
|
|
29
|
+
outputSchema: { rows: z.array(z.record(z.unknown())), rowCount: z.number() },
|
|
30
|
+
rateLimit: {
|
|
31
|
+
maxRequests: 10,
|
|
32
|
+
windowMs: 60000,
|
|
33
|
+
partitionBy: 'session', // per-session rate limit
|
|
34
|
+
},
|
|
35
|
+
concurrency: {
|
|
36
|
+
maxConcurrent: 3,
|
|
37
|
+
queueTimeoutMs: 5000, // wait up to 5s for a slot
|
|
38
|
+
partitionBy: 'session',
|
|
39
|
+
},
|
|
40
|
+
timeout: {
|
|
41
|
+
executeMs: 60000, // 60 second timeout for this tool
|
|
42
|
+
},
|
|
43
|
+
})
|
|
44
|
+
class ExpensiveQueryTool extends ToolContext {
|
|
45
|
+
async execute(input: { query: string }) {
|
|
46
|
+
return { rows: [{ id: 1 }], rowCount: 1 };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Tool({
|
|
51
|
+
name: 'quick_lookup',
|
|
52
|
+
description: 'Fast key-value lookup',
|
|
53
|
+
inputSchema: { key: z.string() },
|
|
54
|
+
outputSchema: { value: z.string().nullable() },
|
|
55
|
+
// No overrides -- uses server defaults
|
|
56
|
+
})
|
|
57
|
+
class QuickLookupTool extends ToolContext {
|
|
58
|
+
async execute(input: { key: string }) {
|
|
59
|
+
return { value: 'cached-value' };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@App({
|
|
64
|
+
name: 'data-api',
|
|
65
|
+
tools: [ExpensiveQueryTool, QuickLookupTool],
|
|
66
|
+
})
|
|
67
|
+
class DataApp {}
|
|
68
|
+
|
|
69
|
+
@FrontMcp({
|
|
70
|
+
info: { name: 'data-server', version: '1.0.0' },
|
|
71
|
+
apps: [DataApp],
|
|
72
|
+
throttle: {
|
|
73
|
+
enabled: true,
|
|
74
|
+
defaultRateLimit: { maxRequests: 100, windowMs: 60000 },
|
|
75
|
+
defaultConcurrency: { maxConcurrent: 10 },
|
|
76
|
+
defaultTimeout: { executeMs: 30000 },
|
|
77
|
+
},
|
|
78
|
+
})
|
|
79
|
+
class Server {}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## What This Demonstrates
|
|
83
|
+
|
|
84
|
+
- Setting per-tool `rateLimit`, `concurrency`, and `timeout` on the `@Tool` decorator
|
|
85
|
+
- Using `partitionBy: 'session'` for per-user fairness on expensive tools
|
|
86
|
+
- Setting `queueTimeoutMs` to briefly queue excess requests instead of rejecting immediately
|
|
87
|
+
- Tools without overrides (`QuickLookupTool`) inherit server defaults
|
|
88
|
+
|
|
89
|
+
## Related
|
|
90
|
+
|
|
91
|
+
- See `configure-throttle` for the full throttle configuration reference
|
|
92
|
+
- See `configure-throttle-guard-config` for the complete GuardConfig interface
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: server-level-rate-limit
|
|
3
|
+
reference: configure-throttle
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Configure global rate limits and IP filtering at the server level.'
|
|
6
|
+
tags: [config, throttle, level, rate, limit]
|
|
7
|
+
features:
|
|
8
|
+
- 'Enabling throttle with `throttle: { enabled: true }`'
|
|
9
|
+
- 'Setting `global` rate limit shared across all clients'
|
|
10
|
+
- 'Configuring `globalConcurrency` to cap simultaneous executions'
|
|
11
|
+
- 'Setting `defaultTimeout` to prevent runaway tool executions'
|
|
12
|
+
- 'Using `ipFilter` with deny-by-default posture and an explicit allow list'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Server-Level Rate Limiting
|
|
16
|
+
|
|
17
|
+
Configure global rate limits and IP filtering at the server level.
|
|
18
|
+
|
|
19
|
+
## Code
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/server.ts
|
|
23
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
24
|
+
import { z } from 'zod';
|
|
25
|
+
|
|
26
|
+
@Tool({
|
|
27
|
+
name: 'search',
|
|
28
|
+
description: 'Search records',
|
|
29
|
+
inputSchema: { query: z.string() },
|
|
30
|
+
outputSchema: { results: z.array(z.string()) },
|
|
31
|
+
})
|
|
32
|
+
class SearchTool extends ToolContext {
|
|
33
|
+
async execute(input: { query: string }) {
|
|
34
|
+
return { results: [`Result for: ${input.query}`] };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@App({
|
|
39
|
+
name: 'api',
|
|
40
|
+
tools: [SearchTool],
|
|
41
|
+
})
|
|
42
|
+
class ApiApp {}
|
|
43
|
+
|
|
44
|
+
@FrontMcp({
|
|
45
|
+
info: { name: 'throttled-server', version: '1.0.0' },
|
|
46
|
+
apps: [ApiApp],
|
|
47
|
+
throttle: {
|
|
48
|
+
enabled: true,
|
|
49
|
+
global: {
|
|
50
|
+
maxRequests: 1000,
|
|
51
|
+
windowMs: 60000, // 1 minute window
|
|
52
|
+
partitionBy: 'global',
|
|
53
|
+
},
|
|
54
|
+
globalConcurrency: {
|
|
55
|
+
maxConcurrent: 50,
|
|
56
|
+
partitionBy: 'global',
|
|
57
|
+
},
|
|
58
|
+
defaultTimeout: {
|
|
59
|
+
executeMs: 30000, // 30 second timeout
|
|
60
|
+
},
|
|
61
|
+
ipFilter: {
|
|
62
|
+
allowList: ['10.0.0.0/8'],
|
|
63
|
+
defaultAction: 'deny',
|
|
64
|
+
trustProxy: true,
|
|
65
|
+
trustedProxyDepth: 1,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
})
|
|
69
|
+
class Server {}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## What This Demonstrates
|
|
73
|
+
|
|
74
|
+
- Enabling throttle with `throttle: { enabled: true }`
|
|
75
|
+
- Setting `global` rate limit shared across all clients
|
|
76
|
+
- Configuring `globalConcurrency` to cap simultaneous executions
|
|
77
|
+
- Setting `defaultTimeout` to prevent runaway tool executions
|
|
78
|
+
- Using `ipFilter` with deny-by-default posture and an explicit allow list
|
|
79
|
+
|
|
80
|
+
## Related
|
|
81
|
+
|
|
82
|
+
- See `configure-throttle` for the full throttle configuration reference
|
|
83
|
+
- See `configure-throttle-guard-config` for the complete GuardConfig interface
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: full-guard-config
|
|
3
|
+
reference: configure-throttle-guard-config
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Complete GuardConfig using every available field for maximum protection.'
|
|
6
|
+
tags: [config, redis, session, throttle, guard, full]
|
|
7
|
+
features:
|
|
8
|
+
- 'Every field in the `GuardConfig` interface used together'
|
|
9
|
+
- 'Priority order: IP filter -> global rate limit -> global concurrency -> per-tool limits'
|
|
10
|
+
- 'Redis `storage` for shared counters across instances'
|
|
11
|
+
- '`keyPrefix` to namespace guard keys in shared Redis'
|
|
12
|
+
- "Mixed `partitionBy` strategies: `'ip'` for global, `'session'` for per-tool"
|
|
13
|
+
- '`queueTimeoutMs` to briefly queue excess requests instead of rejecting'
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Full GuardConfig with All Options
|
|
17
|
+
|
|
18
|
+
Complete GuardConfig using every available field for maximum protection.
|
|
19
|
+
|
|
20
|
+
## Code
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// src/server.ts
|
|
24
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
25
|
+
|
|
26
|
+
@App({ name: 'secure-app' })
|
|
27
|
+
class SecureApp {}
|
|
28
|
+
|
|
29
|
+
@FrontMcp({
|
|
30
|
+
info: { name: 'fully-guarded-server', version: '1.0.0' },
|
|
31
|
+
apps: [SecureApp],
|
|
32
|
+
throttle: {
|
|
33
|
+
enabled: true,
|
|
34
|
+
|
|
35
|
+
// Distributed storage for multi-instance deployments
|
|
36
|
+
storage: {
|
|
37
|
+
type: 'redis',
|
|
38
|
+
redis: {
|
|
39
|
+
config: {
|
|
40
|
+
host: process.env['REDIS_HOST'] ?? 'redis.internal',
|
|
41
|
+
port: 6379,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
keyPrefix: 'myapp:guard:',
|
|
46
|
+
|
|
47
|
+
// Server-wide limits
|
|
48
|
+
global: {
|
|
49
|
+
maxRequests: 1000,
|
|
50
|
+
windowMs: 60000,
|
|
51
|
+
partitionBy: 'ip', // per-client IP rate limit
|
|
52
|
+
},
|
|
53
|
+
globalConcurrency: {
|
|
54
|
+
maxConcurrent: 50,
|
|
55
|
+
queueTimeoutMs: 2000,
|
|
56
|
+
partitionBy: 'global',
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
// Default per-tool limits
|
|
60
|
+
defaultRateLimit: {
|
|
61
|
+
maxRequests: 100,
|
|
62
|
+
windowMs: 60000,
|
|
63
|
+
partitionBy: 'session',
|
|
64
|
+
},
|
|
65
|
+
defaultConcurrency: {
|
|
66
|
+
maxConcurrent: 10,
|
|
67
|
+
queueTimeoutMs: 5000,
|
|
68
|
+
partitionBy: 'session',
|
|
69
|
+
},
|
|
70
|
+
defaultTimeout: {
|
|
71
|
+
executeMs: 30000,
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
// IP-based access control
|
|
75
|
+
ipFilter: {
|
|
76
|
+
allowList: ['10.0.0.0/8', '172.16.0.0/12'],
|
|
77
|
+
denyList: ['192.168.1.100'],
|
|
78
|
+
defaultAction: 'deny',
|
|
79
|
+
trustProxy: true,
|
|
80
|
+
trustedProxyDepth: 2,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
})
|
|
84
|
+
class Server {}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## What This Demonstrates
|
|
88
|
+
|
|
89
|
+
- Every field in the `GuardConfig` interface used together
|
|
90
|
+
- Priority order: IP filter -> global rate limit -> global concurrency -> per-tool limits
|
|
91
|
+
- Redis `storage` for shared counters across instances
|
|
92
|
+
- `keyPrefix` to namespace guard keys in shared Redis
|
|
93
|
+
- Mixed `partitionBy` strategies: `'ip'` for global, `'session'` for per-tool
|
|
94
|
+
- `queueTimeoutMs` to briefly queue excess requests instead of rejecting
|
|
95
|
+
|
|
96
|
+
## Related
|
|
97
|
+
|
|
98
|
+
- See `configure-throttle-guard-config` for the complete interface reference
|
|
99
|
+
- See `configure-throttle` for practical throttle configuration patterns
|
package/catalog/frontmcp-config/examples/configure-throttle-guard-config/minimal-guard-config.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: minimal-guard-config
|
|
3
|
+
reference: configure-throttle-guard-config
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Enable throttle with just a global rate limit and default timeout.'
|
|
6
|
+
tags: [config, throttle, guard, minimal]
|
|
7
|
+
features:
|
|
8
|
+
- 'The minimum fields needed to enable the guard: `enabled`, `global`, and `defaultTimeout`'
|
|
9
|
+
- "`partitionBy: 'global'` shares one counter across all clients"
|
|
10
|
+
- '`windowMs` defaults to 60000 (1 minute) if omitted'
|
|
11
|
+
- 'Other fields (`globalConcurrency`, `ipFilter`, `storage`) are optional'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Minimal GuardConfig
|
|
15
|
+
|
|
16
|
+
Enable throttle with just a global rate limit and default timeout.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/server.ts
|
|
22
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
23
|
+
|
|
24
|
+
@App({ name: 'my-app' })
|
|
25
|
+
class MyApp {}
|
|
26
|
+
|
|
27
|
+
@FrontMcp({
|
|
28
|
+
info: { name: 'guarded-server', version: '1.0.0' },
|
|
29
|
+
apps: [MyApp],
|
|
30
|
+
throttle: {
|
|
31
|
+
enabled: true,
|
|
32
|
+
global: {
|
|
33
|
+
maxRequests: 1000,
|
|
34
|
+
windowMs: 60000,
|
|
35
|
+
partitionBy: 'global',
|
|
36
|
+
},
|
|
37
|
+
defaultTimeout: {
|
|
38
|
+
executeMs: 30000,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
})
|
|
42
|
+
class Server {}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## What This Demonstrates
|
|
46
|
+
|
|
47
|
+
- The minimum fields needed to enable the guard: `enabled`, `global`, and `defaultTimeout`
|
|
48
|
+
- `partitionBy: 'global'` shares one counter across all clients
|
|
49
|
+
- `windowMs` defaults to 60000 (1 minute) if omitted
|
|
50
|
+
- Other fields (`globalConcurrency`, `ipFilter`, `storage`) are optional
|
|
51
|
+
|
|
52
|
+
## Related
|
|
53
|
+
|
|
54
|
+
- See `configure-throttle-guard-config` for the complete GuardConfig interface
|
|
55
|
+
- See `configure-throttle` for practical throttle configuration patterns
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: custom-protocol-flags
|
|
3
|
+
reference: configure-transport
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Override individual protocol flags instead of using a preset for fine-grained control.'
|
|
6
|
+
tags: [config, redis, session, transport, custom, protocol]
|
|
7
|
+
features:
|
|
8
|
+
- 'Passing an object to `protocol` instead of a preset string for fine-grained control'
|
|
9
|
+
- 'Enabling SSE, streamable HTTP, and JSON-only modes simultaneously'
|
|
10
|
+
- 'Setting `strictSession: true` to require `mcp-session-id` header on streamable HTTP'
|
|
11
|
+
- "Using `distributedMode: 'auto'` to auto-detect based on whether Redis is configured"
|
|
12
|
+
- 'Disabling `legacy` SSE while keeping modern SSE support'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Custom Protocol Flags
|
|
16
|
+
|
|
17
|
+
Override individual protocol flags instead of using a preset for fine-grained control.
|
|
18
|
+
|
|
19
|
+
## Code
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/server.ts
|
|
23
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
24
|
+
import { z } from 'zod';
|
|
25
|
+
|
|
26
|
+
@Tool({
|
|
27
|
+
name: 'stream_logs',
|
|
28
|
+
description: 'Stream application logs',
|
|
29
|
+
inputSchema: { service: z.string(), lines: z.number().optional() },
|
|
30
|
+
outputSchema: { logs: z.array(z.string()) },
|
|
31
|
+
})
|
|
32
|
+
class StreamLogsTool extends ToolContext {
|
|
33
|
+
async execute(input: { service: string; lines?: number }) {
|
|
34
|
+
return { logs: ['[INFO] Service started', '[INFO] Healthy'] };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@App({
|
|
39
|
+
name: 'devtools',
|
|
40
|
+
tools: [StreamLogsTool],
|
|
41
|
+
})
|
|
42
|
+
class DevtoolsApp {}
|
|
43
|
+
|
|
44
|
+
@FrontMcp({
|
|
45
|
+
info: { name: 'custom-protocol-server', version: '1.0.0' },
|
|
46
|
+
apps: [DevtoolsApp],
|
|
47
|
+
transport: {
|
|
48
|
+
sessionMode: 'stateful',
|
|
49
|
+
protocol: {
|
|
50
|
+
sse: true, // SSE endpoint enabled
|
|
51
|
+
streamable: true, // Streamable HTTP POST enabled
|
|
52
|
+
json: true, // JSON-only responses also available
|
|
53
|
+
stateless: false, // Sessions required
|
|
54
|
+
legacy: false, // No legacy SSE
|
|
55
|
+
strictSession: true, // Require mcp-session-id header
|
|
56
|
+
},
|
|
57
|
+
distributedMode: 'auto', // auto-detect based on Redis config
|
|
58
|
+
},
|
|
59
|
+
})
|
|
60
|
+
class Server {}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## What This Demonstrates
|
|
64
|
+
|
|
65
|
+
- Passing an object to `protocol` instead of a preset string for fine-grained control
|
|
66
|
+
- Enabling SSE, streamable HTTP, and JSON-only modes simultaneously
|
|
67
|
+
- Setting `strictSession: true` to require `mcp-session-id` header on streamable HTTP
|
|
68
|
+
- Using `distributedMode: 'auto'` to auto-detect based on whether Redis is configured
|
|
69
|
+
- Disabling `legacy` SSE while keeping modern SSE support
|
|
70
|
+
|
|
71
|
+
## Related
|
|
72
|
+
|
|
73
|
+
- See `configure-transport` for the full transport configuration reference
|
|
74
|
+
- See `configure-transport-protocol-presets` for the built-in preset definitions
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: distributed-sessions-redis
|
|
3
|
+
reference: configure-transport
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Configure transport with Redis persistence for multi-instance load-balanced deployments.'
|
|
6
|
+
tags: [config, redis, session, transport, distributed, sessions]
|
|
7
|
+
features:
|
|
8
|
+
- 'Using `distributedMode: true` for load-balanced multi-instance deployments'
|
|
9
|
+
- 'Redis `persistence` so sessions survive restarts and are shared across instances'
|
|
10
|
+
- 'Setting `defaultTtlMs` to prevent sessions from accumulating indefinitely'
|
|
11
|
+
- 'Redis-backed `eventStore` for SSE resumability across instances'
|
|
12
|
+
- "Using the `'modern'` preset (drops legacy SSE but keeps streamable HTTP)"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Distributed Sessions with Redis
|
|
16
|
+
|
|
17
|
+
Configure transport with Redis persistence for multi-instance load-balanced deployments.
|
|
18
|
+
|
|
19
|
+
## Code
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/server.ts
|
|
23
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
24
|
+
import { z } from 'zod';
|
|
25
|
+
|
|
26
|
+
@Tool({
|
|
27
|
+
name: 'get_report',
|
|
28
|
+
description: 'Generate a report',
|
|
29
|
+
inputSchema: { reportId: z.string() },
|
|
30
|
+
outputSchema: { data: z.string(), generatedAt: z.string() },
|
|
31
|
+
})
|
|
32
|
+
class GetReportTool extends ToolContext {
|
|
33
|
+
async execute(input: { reportId: string }) {
|
|
34
|
+
return { data: 'report-data', generatedAt: new Date().toISOString() };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@App({
|
|
39
|
+
name: 'reports',
|
|
40
|
+
tools: [GetReportTool],
|
|
41
|
+
})
|
|
42
|
+
class ReportsApp {}
|
|
43
|
+
|
|
44
|
+
@FrontMcp({
|
|
45
|
+
info: { name: 'distributed-server', version: '1.0.0' },
|
|
46
|
+
apps: [ReportsApp],
|
|
47
|
+
transport: {
|
|
48
|
+
sessionMode: 'stateful',
|
|
49
|
+
protocol: 'modern',
|
|
50
|
+
distributedMode: true,
|
|
51
|
+
persistence: {
|
|
52
|
+
redis: {
|
|
53
|
+
provider: 'redis',
|
|
54
|
+
host: process.env['REDIS_HOST'] ?? 'redis.internal',
|
|
55
|
+
port: 6379,
|
|
56
|
+
},
|
|
57
|
+
defaultTtlMs: 3_600_000, // 1 hour session TTL
|
|
58
|
+
},
|
|
59
|
+
eventStore: {
|
|
60
|
+
enabled: true,
|
|
61
|
+
provider: 'redis',
|
|
62
|
+
maxEvents: 10000,
|
|
63
|
+
ttlMs: 300_000, // 5 minute event TTL
|
|
64
|
+
redis: {
|
|
65
|
+
provider: 'redis',
|
|
66
|
+
host: process.env['REDIS_HOST'] ?? 'redis.internal',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
})
|
|
71
|
+
class Server {}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## What This Demonstrates
|
|
75
|
+
|
|
76
|
+
- Using `distributedMode: true` for load-balanced multi-instance deployments
|
|
77
|
+
- Redis `persistence` so sessions survive restarts and are shared across instances
|
|
78
|
+
- Setting `defaultTtlMs` to prevent sessions from accumulating indefinitely
|
|
79
|
+
- Redis-backed `eventStore` for SSE resumability across instances
|
|
80
|
+
- Using the `'modern'` preset (drops legacy SSE but keeps streamable HTTP)
|
|
81
|
+
|
|
82
|
+
## Related
|
|
83
|
+
|
|
84
|
+
- See `configure-transport` for the full transport configuration reference
|
|
85
|
+
- See `configure-session` for session storage options
|
|
86
|
+
- See `setup-redis` for Redis provisioning
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stateless-serverless
|
|
3
|
+
reference: configure-transport
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Configure stateless transport for Vercel, Lambda, or Cloudflare deployments.'
|
|
6
|
+
tags: [config, vercel, lambda, cloudflare, session, transport]
|
|
7
|
+
features:
|
|
8
|
+
- "Using `sessionMode: 'stateless'` to disable session management"
|
|
9
|
+
- "Using the `'stateless-api'` preset: no SSE, no streaming, pure request/response"
|
|
10
|
+
- 'Each request is standalone with no server-side state between invocations'
|
|
11
|
+
- 'Required for serverless targets (Vercel, Lambda, Cloudflare Workers)'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Stateless Transport for Serverless
|
|
15
|
+
|
|
16
|
+
Configure stateless transport for Vercel, Lambda, or Cloudflare deployments.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/server.ts
|
|
22
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
|
|
25
|
+
@Tool({
|
|
26
|
+
name: 'convert_currency',
|
|
27
|
+
description: 'Convert between currencies',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
amount: z.number(),
|
|
30
|
+
from: z.string(),
|
|
31
|
+
to: z.string(),
|
|
32
|
+
},
|
|
33
|
+
outputSchema: { result: z.number(), rate: z.number() },
|
|
34
|
+
})
|
|
35
|
+
class ConvertCurrencyTool extends ToolContext {
|
|
36
|
+
async execute(input: { amount: number; from: string; to: string }) {
|
|
37
|
+
const rate = 1.1;
|
|
38
|
+
return { result: input.amount * rate, rate };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@App({
|
|
43
|
+
name: 'currency-api',
|
|
44
|
+
tools: [ConvertCurrencyTool],
|
|
45
|
+
})
|
|
46
|
+
class CurrencyApp {}
|
|
47
|
+
|
|
48
|
+
@FrontMcp({
|
|
49
|
+
info: { name: 'serverless-server', version: '1.0.0' },
|
|
50
|
+
apps: [CurrencyApp],
|
|
51
|
+
transport: {
|
|
52
|
+
sessionMode: 'stateless',
|
|
53
|
+
protocol: 'stateless-api',
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
class Server {}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## What This Demonstrates
|
|
60
|
+
|
|
61
|
+
- Using `sessionMode: 'stateless'` to disable session management
|
|
62
|
+
- Using the `'stateless-api'` preset: no SSE, no streaming, pure request/response
|
|
63
|
+
- Each request is standalone with no server-side state between invocations
|
|
64
|
+
- Required for serverless targets (Vercel, Lambda, Cloudflare Workers)
|
|
65
|
+
|
|
66
|
+
## Related
|
|
67
|
+
|
|
68
|
+
- See `configure-transport` for the full transport configuration reference
|
|
69
|
+
- See `configure-transport-protocol-presets` for all preset options
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: legacy-preset-nodejs
|
|
3
|
+
reference: configure-transport-protocol-presets
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Use the default legacy preset for maximum compatibility with all MCP clients.'
|
|
6
|
+
tags: [config, anthropic, session, transport, node, protocol]
|
|
7
|
+
features:
|
|
8
|
+
- "The `'legacy'` preset is the default and can be omitted"
|
|
9
|
+
- 'Enables SSE, Streamable HTTP, and Legacy SSE for maximum client compatibility'
|
|
10
|
+
- '`strictSession: true` requires `mcp-session-id` header for streamable HTTP'
|
|
11
|
+
- 'Best for single-instance Node.js deployments (Claude Desktop, etc.)'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Legacy Preset for Node.js
|
|
15
|
+
|
|
16
|
+
Use the default legacy preset for maximum compatibility with all MCP clients.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/server.ts
|
|
22
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
|
|
25
|
+
@Tool({
|
|
26
|
+
name: 'hello',
|
|
27
|
+
description: 'Say hello',
|
|
28
|
+
inputSchema: { name: z.string() },
|
|
29
|
+
outputSchema: { greeting: z.string() },
|
|
30
|
+
})
|
|
31
|
+
class HelloTool extends ToolContext {
|
|
32
|
+
async execute(input: { name: string }) {
|
|
33
|
+
return { greeting: `Hello, ${input.name}!` };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@App({
|
|
38
|
+
name: 'my-app',
|
|
39
|
+
tools: [HelloTool],
|
|
40
|
+
})
|
|
41
|
+
class MyApp {}
|
|
42
|
+
|
|
43
|
+
@FrontMcp({
|
|
44
|
+
info: { name: 'legacy-server', version: '1.0.0' },
|
|
45
|
+
apps: [MyApp],
|
|
46
|
+
transport: {
|
|
47
|
+
protocol: 'legacy', // default -- can be omitted
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
class Server {}
|
|
51
|
+
// Enables: SSE + Streamable HTTP + Legacy SSE
|
|
52
|
+
// Flags: { sse: true, streamable: true, json: false, stateless: false, legacy: true, strictSession: true }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## What This Demonstrates
|
|
56
|
+
|
|
57
|
+
- The `'legacy'` preset is the default and can be omitted
|
|
58
|
+
- Enables SSE, Streamable HTTP, and Legacy SSE for maximum client compatibility
|
|
59
|
+
- `strictSession: true` requires `mcp-session-id` header for streamable HTTP
|
|
60
|
+
- Best for single-instance Node.js deployments (Claude Desktop, etc.)
|
|
61
|
+
|
|
62
|
+
## Related
|
|
63
|
+
|
|
64
|
+
- See `configure-transport-protocol-presets` for all preset definitions
|
|
65
|
+
- See `configure-transport` for full transport configuration
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stateless-api-serverless
|
|
3
|
+
reference: configure-transport-protocol-presets
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Use the stateless-api preset for Vercel, Lambda, or Cloudflare Workers.'
|
|
6
|
+
tags: [config, vercel, lambda, cloudflare, session, transport]
|
|
7
|
+
features:
|
|
8
|
+
- "The `'stateless-api'` preset disables SSE, streaming, and sessions entirely"
|
|
9
|
+
- 'Each request is standalone with no server-side state'
|
|
10
|
+
- "Pair with `sessionMode: 'stateless'` for serverless execution"
|
|
11
|
+
- 'Required for Vercel, Lambda, Cloudflare Workers where persistent connections are not allowed'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Stateless API Preset for Serverless
|
|
15
|
+
|
|
16
|
+
Use the stateless-api preset for Vercel, Lambda, or Cloudflare Workers.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/server.ts
|
|
22
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
|
|
25
|
+
@Tool({
|
|
26
|
+
name: 'translate',
|
|
27
|
+
description: 'Translate text between languages',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
text: z.string(),
|
|
30
|
+
targetLang: z.string(),
|
|
31
|
+
},
|
|
32
|
+
outputSchema: { translated: z.string() },
|
|
33
|
+
})
|
|
34
|
+
class TranslateTool extends ToolContext {
|
|
35
|
+
async execute(input: { text: string; targetLang: string }) {
|
|
36
|
+
return { translated: `[${input.targetLang}] ${input.text}` };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@App({
|
|
41
|
+
name: 'translate-api',
|
|
42
|
+
tools: [TranslateTool],
|
|
43
|
+
})
|
|
44
|
+
class TranslateApp {}
|
|
45
|
+
|
|
46
|
+
@FrontMcp({
|
|
47
|
+
info: { name: 'serverless-translate', version: '1.0.0' },
|
|
48
|
+
apps: [TranslateApp],
|
|
49
|
+
transport: {
|
|
50
|
+
sessionMode: 'stateless',
|
|
51
|
+
protocol: 'stateless-api',
|
|
52
|
+
},
|
|
53
|
+
})
|
|
54
|
+
class Server {}
|
|
55
|
+
// Enables: Stateless HTTP only
|
|
56
|
+
// Flags: { sse: false, streamable: false, json: false, stateless: true, legacy: false, strictSession: false }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## What This Demonstrates
|
|
60
|
+
|
|
61
|
+
- The `'stateless-api'` preset disables SSE, streaming, and sessions entirely
|
|
62
|
+
- Each request is standalone with no server-side state
|
|
63
|
+
- Pair with `sessionMode: 'stateless'` for serverless execution
|
|
64
|
+
- Required for Vercel, Lambda, Cloudflare Workers where persistent connections are not allowed
|
|
65
|
+
|
|
66
|
+
## Related
|
|
67
|
+
|
|
68
|
+
- See `configure-transport-protocol-presets` for all preset definitions
|
|
69
|
+
- See `configure-transport` for full transport configuration
|