@frontmcp/skills 1.0.0-beta.13 → 1.0.0-beta.14
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/catalog/TEMPLATE.md +55 -0
- package/catalog/frontmcp-config/SKILL.md +2 -2
- 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 +10 -0
- package/catalog/frontmcp-config/references/configure-auth.md +10 -0
- package/catalog/frontmcp-config/references/configure-elicitation.md +9 -0
- package/catalog/frontmcp-config/references/configure-http.md +10 -0
- package/catalog/frontmcp-config/references/configure-session.md +10 -0
- package/catalog/frontmcp-config/references/configure-throttle-guard-config.md +9 -0
- package/catalog/frontmcp-config/references/configure-throttle.md +10 -0
- package/catalog/frontmcp-config/references/configure-transport-protocol-presets.md +9 -0
- package/catalog/frontmcp-config/references/configure-transport.md +10 -0
- package/catalog/frontmcp-config/references/setup-redis.md +5 -0
- package/catalog/frontmcp-config/references/setup-sqlite.md +5 -0
- package/catalog/frontmcp-deployment/SKILL.md +2 -2
- 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 +10 -0
- package/catalog/frontmcp-deployment/references/build-for-cli.md +9 -0
- package/catalog/frontmcp-deployment/references/build-for-sdk.md +10 -0
- package/catalog/frontmcp-deployment/references/deploy-to-cloudflare.md +10 -0
- package/catalog/frontmcp-deployment/references/deploy-to-lambda.md +10 -0
- package/catalog/frontmcp-deployment/references/deploy-to-node-dockerfile.md +9 -0
- package/catalog/frontmcp-deployment/references/deploy-to-node.md +10 -0
- package/catalog/frontmcp-deployment/references/deploy-to-vercel-config.md +9 -0
- package/catalog/frontmcp-deployment/references/deploy-to-vercel.md +10 -0
- package/catalog/frontmcp-development/SKILL.md +2 -2
- 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 +9 -0
- package/catalog/frontmcp-development/references/create-agent-llm-config.md +9 -0
- package/catalog/frontmcp-development/references/create-agent.md +10 -0
- package/catalog/frontmcp-development/references/create-job.md +10 -0
- package/catalog/frontmcp-development/references/create-plugin-hooks.md +10 -0
- package/catalog/frontmcp-development/references/create-plugin.md +10 -0
- package/catalog/frontmcp-development/references/create-prompt.md +10 -0
- package/catalog/frontmcp-development/references/create-provider.md +9 -0
- package/catalog/frontmcp-development/references/create-resource.md +52 -15
- package/catalog/frontmcp-development/references/create-skill-with-tools.md +10 -0
- package/catalog/frontmcp-development/references/create-skill.md +10 -0
- package/catalog/frontmcp-development/references/create-tool-annotations.md +9 -0
- package/catalog/frontmcp-development/references/create-tool-output-schema-types.md +10 -0
- package/catalog/frontmcp-development/references/create-tool.md +10 -0
- package/catalog/frontmcp-development/references/create-workflow.md +10 -0
- package/catalog/frontmcp-development/references/decorators-guide.md +10 -0
- package/catalog/frontmcp-development/references/official-adapters.md +10 -0
- package/catalog/frontmcp-development/references/official-plugins.md +10 -0
- package/catalog/frontmcp-extensibility/SKILL.md +1 -1
- 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 +10 -0
- package/catalog/frontmcp-guides/SKILL.md +2 -2
- 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 +10 -0
- package/catalog/frontmcp-guides/references/example-task-manager.md +10 -0
- package/catalog/frontmcp-guides/references/example-weather-api.md +10 -0
- package/catalog/frontmcp-production-readiness/SKILL.md +2 -2
- 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/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 +10 -0
- package/catalog/frontmcp-production-readiness/references/production-browser.md +10 -0
- package/catalog/frontmcp-production-readiness/references/production-cli-binary.md +9 -0
- package/catalog/frontmcp-production-readiness/references/production-cli-daemon.md +10 -0
- package/catalog/frontmcp-production-readiness/references/production-cloudflare.md +10 -0
- package/catalog/frontmcp-production-readiness/references/production-lambda.md +10 -0
- package/catalog/frontmcp-production-readiness/references/production-node-sdk.md +10 -0
- package/catalog/frontmcp-production-readiness/references/production-node-server.md +10 -0
- package/catalog/frontmcp-production-readiness/references/production-vercel.md +10 -0
- 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 +9 -0
- package/catalog/frontmcp-setup/references/multi-app-composition.md +10 -0
- package/catalog/frontmcp-setup/references/nx-workflow.md +10 -0
- package/catalog/frontmcp-setup/references/project-structure-nx.md +10 -0
- package/catalog/frontmcp-setup/references/project-structure-standalone.md +10 -0
- package/catalog/frontmcp-setup/references/readme-guide.md +9 -0
- package/catalog/frontmcp-setup/references/setup-project.md +10 -0
- package/catalog/frontmcp-setup/references/setup-redis.md +10 -0
- package/catalog/frontmcp-setup/references/setup-sqlite.md +10 -0
- 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 +10 -0
- package/catalog/frontmcp-testing/references/test-auth.md +10 -0
- package/catalog/frontmcp-testing/references/test-browser-build.md +9 -0
- package/catalog/frontmcp-testing/references/test-cli-binary.md +9 -0
- package/catalog/frontmcp-testing/references/test-direct-client.md +9 -0
- package/catalog/frontmcp-testing/references/test-e2e-handler.md +10 -0
- package/catalog/frontmcp-testing/references/test-tool-unit.md +10 -0
- package/catalog/skills-manifest.json +2383 -67
- package/package.json +1 -1
- package/src/manifest.d.ts +23 -0
- package/src/manifest.js +3 -1
- package/src/manifest.js.map +1 -1
|
@@ -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
|
|
@@ -80,3 +80,13 @@ auth: {
|
|
|
80
80
|
| Credential vault | No | No | Yes | Yes |
|
|
81
81
|
| Consent flow | No | No | Optional | Optional |
|
|
82
82
|
| Federated auth | No | No | Optional | Optional |
|
|
83
|
+
|
|
84
|
+
## Examples
|
|
85
|
+
|
|
86
|
+
| Example | Level | Description |
|
|
87
|
+
| ---------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------- |
|
|
88
|
+
| [`local-self-signed-tokens`](../examples/configure-auth-modes/local-self-signed-tokens.md) | Intermediate | Configure a server that signs its own JWT tokens with consent and incremental auth enabled. |
|
|
89
|
+
| [`remote-enterprise-oauth`](../examples/configure-auth-modes/remote-enterprise-oauth.md) | Advanced | Delegate authentication to an external OAuth orchestrator with Redis-backed token storage. |
|
|
90
|
+
| [`transparent-jwt-validation`](../examples/configure-auth-modes/transparent-jwt-validation.md) | Basic | Validate externally-issued JWTs without managing token lifecycle on the server. |
|
|
91
|
+
|
|
92
|
+
> See all examples in [`examples/configure-auth-modes/`](../examples/configure-auth-modes/)
|
|
@@ -237,6 +237,16 @@ The `authProviders` accessor (from `@frontmcp/auth`) provides:
|
|
|
237
237
|
| `VAULT_SECRET is not defined` error | The vault encryption secret environment variable is missing | Set `VAULT_SECRET` in your environment or `.env` file before starting the server |
|
|
238
238
|
| OAuth redirect fails in local dev | `remote` mode requires HTTPS and reachable callback URLs | Set `NODE_ENV=development` to relax HTTPS requirements, or use a local OAuth mock server |
|
|
239
239
|
|
|
240
|
+
## Examples
|
|
241
|
+
|
|
242
|
+
| Example | Level | Description |
|
|
243
|
+
| ---------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
244
|
+
| [`multi-app-auth`](../examples/configure-auth/multi-app-auth.md) | Advanced | Configure a single FrontMCP server with multiple apps, each using a different auth mode -- public for open endpoints and remote for admin endpoints. |
|
|
245
|
+
| [`public-mode-setup`](../examples/configure-auth/public-mode-setup.md) | Basic | Set up a FrontMCP server with public (unauthenticated) access and anonymous scopes. |
|
|
246
|
+
| [`remote-oauth-with-vault`](../examples/configure-auth/remote-oauth-with-vault.md) | Intermediate | Configure a FrontMCP server with remote OAuth 2.1 authentication and use the credential vault to call downstream APIs on behalf of the authenticated user. |
|
|
247
|
+
|
|
248
|
+
> See all examples in [`examples/configure-auth/`](../examples/configure-auth/)
|
|
249
|
+
|
|
240
250
|
## Reference
|
|
241
251
|
|
|
242
252
|
- Docs: [Authentication Overview](https://docs.agentfront.dev/frontmcp/authentication/overview)
|
|
@@ -177,6 +177,15 @@ frontmcp dev
|
|
|
177
177
|
| User sees raw JSON instead of a form | The MCP client renders the `requestedSchema` as raw data rather than a form | Use standard JSON Schema types (`boolean`, `string`, `enum`) that clients can render as UI controls |
|
|
178
178
|
| Tool hangs indefinitely waiting for user response | No timeout configured and user never responds | Implement a timeout or cancellation mechanism in the tool logic to handle non-responsive users |
|
|
179
179
|
|
|
180
|
+
## Examples
|
|
181
|
+
|
|
182
|
+
| Example | Level | Description |
|
|
183
|
+
| ----------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------- |
|
|
184
|
+
| [`basic-confirmation-gate`](../examples/configure-elicitation/basic-confirmation-gate.md) | Basic | Request user confirmation before executing a destructive action. |
|
|
185
|
+
| [`distributed-elicitation-redis`](../examples/configure-elicitation/distributed-elicitation-redis.md) | Intermediate | Configure elicitation with Redis storage for multi-instance production deployments. |
|
|
186
|
+
|
|
187
|
+
> See all examples in [`examples/configure-elicitation/`](../examples/configure-elicitation/)
|
|
188
|
+
|
|
180
189
|
## Reference
|
|
181
190
|
|
|
182
191
|
- [Elicitation Docs](https://docs.agentfront.dev/frontmcp/servers/elicitation)
|
|
@@ -204,6 +204,16 @@ curl --unix-socket /tmp/my-mcp-server.sock http://localhost/
|
|
|
204
204
|
| Routes return 404 after setting `entryPath` | Client is still requesting the root path without the prefix | Update client base URL to include the entry path (e.g., `http://localhost:3001/api/mcp`) |
|
|
205
205
|
| Server binds but external clients cannot connect | Server bound to `localhost` or `127.0.0.1` inside a container | Set `host: '0.0.0.0'` or use Docker port mapping to expose the container port |
|
|
206
206
|
|
|
207
|
+
## Examples
|
|
208
|
+
|
|
209
|
+
| Example | Level | Description |
|
|
210
|
+
| ------------------------------------------------------------------------------------ | ------------ | ------------------------------------------------------------------------------------ |
|
|
211
|
+
| [`cors-restricted-origins`](../examples/configure-http/cors-restricted-origins.md) | Basic | Configure CORS to allow only specific frontend origins with credentials. |
|
|
212
|
+
| [`entry-path-reverse-proxy`](../examples/configure-http/entry-path-reverse-proxy.md) | Intermediate | Mount the MCP server under a URL prefix for reverse proxy or multi-service setups. |
|
|
213
|
+
| [`unix-socket-local`](../examples/configure-http/unix-socket-local.md) | Intermediate | Bind the server to a unix socket instead of a TCP port for local-only communication. |
|
|
214
|
+
|
|
215
|
+
> See all examples in [`examples/configure-http/`](../examples/configure-http/)
|
|
216
|
+
|
|
207
217
|
## Reference
|
|
208
218
|
|
|
209
219
|
- [HTTP Server Docs](https://docs.agentfront.dev/frontmcp/deployment/local-dev-server)
|
|
@@ -204,6 +204,16 @@ const pubsubStore = createPubsubStore({
|
|
|
204
204
|
| Session key collisions between servers | Multiple servers share the same Redis instance and `keyPrefix` | Set a unique `keyPrefix` per server (e.g., `billing-mcp:session:`, `api-mcp:session:`) |
|
|
205
205
|
| Pub/sub not working with Vercel KV | Vercel KV does not support pub/sub operations | Add a separate `pubsub` config pointing to a real Redis instance |
|
|
206
206
|
|
|
207
|
+
## Examples
|
|
208
|
+
|
|
209
|
+
| Example | Level | Description |
|
|
210
|
+
| ------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------- |
|
|
211
|
+
| [`multi-server-key-prefix`](../examples/configure-session/multi-server-key-prefix.md) | Intermediate | Use unique key prefixes when multiple FrontMCP servers share one Redis instance. |
|
|
212
|
+
| [`redis-session-store`](../examples/configure-session/redis-session-store.md) | Basic | Configure Redis-backed session storage for production deployments. |
|
|
213
|
+
| [`vercel-kv-session`](../examples/configure-session/vercel-kv-session.md) | Intermediate | Configure Vercel KV for session storage in serverless Vercel deployments. |
|
|
214
|
+
|
|
215
|
+
> See all examples in [`examples/configure-session/`](../examples/configure-session/)
|
|
216
|
+
|
|
207
217
|
## Reference
|
|
208
218
|
|
|
209
219
|
- [Session Storage Docs](https://docs.agentfront.dev/frontmcp/deployment/redis-setup)
|
|
@@ -71,3 +71,12 @@ interface IpFilterConfig {
|
|
|
71
71
|
4. Per-tool rate limit — checked per tool
|
|
72
72
|
5. Per-tool concurrency — checked per tool
|
|
73
73
|
6. Per-tool timeout — enforced during execution
|
|
74
|
+
|
|
75
|
+
## Examples
|
|
76
|
+
|
|
77
|
+
| Example | Level | Description |
|
|
78
|
+
| --------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------ |
|
|
79
|
+
| [`full-guard-config`](../examples/configure-throttle-guard-config/full-guard-config.md) | Advanced | Complete GuardConfig using every available field for maximum protection. |
|
|
80
|
+
| [`minimal-guard-config`](../examples/configure-throttle-guard-config/minimal-guard-config.md) | Basic | Enable throttle with just a global rate limit and default timeout. |
|
|
81
|
+
|
|
82
|
+
> See all examples in [`examples/configure-throttle-guard-config/`](../examples/configure-throttle-guard-config/)
|
|
@@ -228,6 +228,16 @@ done
|
|
|
228
228
|
| `X-Forwarded-For` header ignored | `ipFilter.trustProxy` not enabled or `trustedProxyDepth` too low | Set `trustProxy: true` and adjust `trustedProxyDepth` to match your proxy chain |
|
|
229
229
|
| Rate limit resets not aligned with expectations | `windowMs` misunderstood as a sliding window when it is a fixed window | The window is fixed; all counters reset at the end of each `windowMs` interval |
|
|
230
230
|
|
|
231
|
+
## Examples
|
|
232
|
+
|
|
233
|
+
| Example | Level | Description |
|
|
234
|
+
| -------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------- |
|
|
235
|
+
| [`distributed-redis-throttle`](../examples/configure-throttle/distributed-redis-throttle.md) | Advanced | Configure Redis-backed rate limiting for multi-instance deployments behind a load balancer. |
|
|
236
|
+
| [`per-tool-rate-limit`](../examples/configure-throttle/per-tool-rate-limit.md) | Intermediate | Override server defaults with per-tool rate limits and concurrency caps. |
|
|
237
|
+
| [`server-level-rate-limit`](../examples/configure-throttle/server-level-rate-limit.md) | Basic | Configure global rate limits and IP filtering at the server level. |
|
|
238
|
+
|
|
239
|
+
> See all examples in [`examples/configure-throttle/`](../examples/configure-throttle/)
|
|
240
|
+
|
|
231
241
|
## Reference
|
|
232
242
|
|
|
233
243
|
- [Guard Configuration Docs](https://docs.agentfront.dev/frontmcp/servers/guard)
|
|
@@ -60,3 +60,12 @@ All protocols enabled. Maximum flexibility.
|
|
|
60
60
|
| AWS Lambda | `'stateless-api'` | Stateless execution model |
|
|
61
61
|
| Cloudflare Workers | `'stateless-api'` | Stateless edge runtime |
|
|
62
62
|
| Development | `'full'` | Test all protocols |
|
|
63
|
+
|
|
64
|
+
## Examples
|
|
65
|
+
|
|
66
|
+
| Example | Level | Description |
|
|
67
|
+
| ---------------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------- |
|
|
68
|
+
| [`legacy-preset-nodejs`](../examples/configure-transport-protocol-presets/legacy-preset-nodejs.md) | Basic | Use the default legacy preset for maximum compatibility with all MCP clients. |
|
|
69
|
+
| [`stateless-api-serverless`](../examples/configure-transport-protocol-presets/stateless-api-serverless.md) | Intermediate | Use the stateless-api preset for Vercel, Lambda, or Cloudflare Workers. |
|
|
70
|
+
|
|
71
|
+
> See all examples in [`examples/configure-transport-protocol-presets/`](../examples/configure-transport-protocol-presets/)
|