@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
package/catalog/TEMPLATE.md
CHANGED
|
@@ -88,6 +88,61 @@ Continue with subsequent steps.
|
|
|
88
88
|
| -------------------- | -------------- | ------------- |
|
|
89
89
|
| Common error message | Why it happens | How to fix it |
|
|
90
90
|
|
|
91
|
+
## Examples
|
|
92
|
+
|
|
93
|
+
Each reference file has a corresponding `examples/<reference-name>/` directory with standalone, copy-pasteable examples.
|
|
94
|
+
|
|
95
|
+
### Example file structure
|
|
96
|
+
|
|
97
|
+
````markdown
|
|
98
|
+
---
|
|
99
|
+
name: example-name
|
|
100
|
+
reference: parent-reference-name
|
|
101
|
+
level: basic | intermediate | advanced
|
|
102
|
+
description: One sentence describing the exact scenario this example covers.
|
|
103
|
+
tags: [keyword1, keyword2, keyword3]
|
|
104
|
+
features:
|
|
105
|
+
- Concrete API or pattern this example demonstrates
|
|
106
|
+
- Another concrete behavior shown in the code
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
# Example Title
|
|
110
|
+
|
|
111
|
+
One sentence expanding slightly on the frontmatter description.
|
|
112
|
+
|
|
113
|
+
## Code
|
|
114
|
+
|
|
115
|
+
\```typescript
|
|
116
|
+
// src/path/to/file.ts
|
|
117
|
+
import { ... } from '@frontmcp/sdk';
|
|
118
|
+
// Complete, self-contained code
|
|
119
|
+
\```
|
|
120
|
+
|
|
121
|
+
## What This Demonstrates
|
|
122
|
+
|
|
123
|
+
- Key pattern or API shown
|
|
124
|
+
|
|
125
|
+
## Related
|
|
126
|
+
|
|
127
|
+
- See `reference-name` for the full API reference
|
|
128
|
+
````
|
|
129
|
+
|
|
130
|
+
Use the example file frontmatter as the single source of truth for example metadata. Reference `## Examples` tables and `skills-manifest.json` should mirror `name`, `level`, `description`, `tags`, and `features` from the example file.
|
|
131
|
+
|
|
132
|
+
### Linking from references
|
|
133
|
+
|
|
134
|
+
Add a `## Examples` section at the bottom of each reference file (before `## Reference`):
|
|
135
|
+
|
|
136
|
+
```markdown
|
|
137
|
+
## Examples
|
|
138
|
+
|
|
139
|
+
| Example | Level | Description |
|
|
140
|
+
| ------------------------------------------------------------ | ----- | ------------- |
|
|
141
|
+
| [`example-name`](../examples/reference-name/example-name.md) | Basic | What it shows |
|
|
142
|
+
|
|
143
|
+
> See all examples in [`examples/reference-name/`](../examples/reference-name/)
|
|
144
|
+
```
|
|
145
|
+
|
|
91
146
|
## Reference
|
|
92
147
|
|
|
93
148
|
- [Documentation](https://docs.agentfront.dev/frontmcp/...)
|
|
@@ -9,7 +9,7 @@ priority: 10
|
|
|
9
9
|
visibility: both
|
|
10
10
|
license: Apache-2.0
|
|
11
11
|
metadata:
|
|
12
|
-
docs: https://docs.agentfront.dev/frontmcp/
|
|
12
|
+
docs: https://docs.agentfront.dev/frontmcp/fundamentals/overview
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# FrontMCP Configuration Router
|
|
@@ -152,5 +152,5 @@ Server (@FrontMcp) ← Global defaults
|
|
|
152
152
|
|
|
153
153
|
## Reference
|
|
154
154
|
|
|
155
|
-
- [
|
|
155
|
+
- [FrontMCP Overview](https://docs.agentfront.dev/frontmcp/fundamentals/overview)
|
|
156
156
|
- Related skills: `configure-transport`, `configure-http`, `configure-throttle`, `configure-elicitation`, `configure-auth`, `configure-session`, `setup-redis`, `setup-sqlite`
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-app-auth
|
|
3
|
+
reference: configure-auth
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Configure a single FrontMCP server with multiple apps, each using a different auth mode -- public for open endpoints and remote for admin endpoints.'
|
|
6
|
+
tags: [config, auth, security, multi-app, remote, multi]
|
|
7
|
+
features:
|
|
8
|
+
- 'Hosting multiple `@App` instances on a single FrontMCP server with different auth modes'
|
|
9
|
+
- 'Using `public` mode for open-access endpoints alongside `remote` mode for admin-only endpoints'
|
|
10
|
+
- 'Isolating tools per app so each security posture governs only its own tools'
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Multi-App Auth with Different Security Postures
|
|
14
|
+
|
|
15
|
+
Configure a single FrontMCP server with multiple apps, each using a different auth mode -- public for open endpoints and remote for admin endpoints.
|
|
16
|
+
|
|
17
|
+
## Code
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// src/server.ts
|
|
21
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
|
|
24
|
+
@Tool({
|
|
25
|
+
name: 'public_search',
|
|
26
|
+
description: 'Search public records',
|
|
27
|
+
inputSchema: { query: z.string() },
|
|
28
|
+
outputSchema: { results: z.array(z.string()) },
|
|
29
|
+
})
|
|
30
|
+
class PublicSearchTool extends ToolContext {
|
|
31
|
+
async execute(input: { query: string }) {
|
|
32
|
+
return { results: [`Public result: ${input.query}`] };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Tool({
|
|
37
|
+
name: 'admin_config',
|
|
38
|
+
description: 'Modify server configuration (admin only)',
|
|
39
|
+
inputSchema: { key: z.string(), value: z.string() },
|
|
40
|
+
outputSchema: { updated: z.boolean() },
|
|
41
|
+
})
|
|
42
|
+
class AdminConfigTool extends ToolContext {
|
|
43
|
+
async execute(input: { key: string; value: string }) {
|
|
44
|
+
// Only authenticated admins can reach this tool
|
|
45
|
+
return { updated: true };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@App({
|
|
50
|
+
name: 'public-api',
|
|
51
|
+
auth: {
|
|
52
|
+
mode: 'public',
|
|
53
|
+
sessionTtl: 3600,
|
|
54
|
+
anonymousScopes: ['read'],
|
|
55
|
+
},
|
|
56
|
+
tools: [PublicSearchTool],
|
|
57
|
+
})
|
|
58
|
+
class PublicApi {}
|
|
59
|
+
|
|
60
|
+
@App({
|
|
61
|
+
name: 'admin-api',
|
|
62
|
+
auth: {
|
|
63
|
+
mode: 'remote',
|
|
64
|
+
provider: 'https://auth.example.com',
|
|
65
|
+
clientId: process.env['ADMIN_OAUTH_CLIENT_ID'] ?? 'admin-client',
|
|
66
|
+
},
|
|
67
|
+
tools: [AdminConfigTool],
|
|
68
|
+
})
|
|
69
|
+
class AdminApi {}
|
|
70
|
+
|
|
71
|
+
@FrontMcp({
|
|
72
|
+
info: { name: 'multi-app-server', version: '1.0.0' },
|
|
73
|
+
apps: [PublicApi, AdminApi],
|
|
74
|
+
})
|
|
75
|
+
class Server {}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## What This Demonstrates
|
|
79
|
+
|
|
80
|
+
- Hosting multiple `@App` instances on a single FrontMCP server with different auth modes
|
|
81
|
+
- Using `public` mode for open-access endpoints alongside `remote` mode for admin-only endpoints
|
|
82
|
+
- Isolating tools per app so each security posture governs only its own tools
|
|
83
|
+
|
|
84
|
+
## Related
|
|
85
|
+
|
|
86
|
+
- See `configure-auth` for individual auth mode configuration details
|
|
87
|
+
- See `configure-auth-modes` for a feature comparison table across all modes
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: public-mode-setup
|
|
3
|
+
reference: configure-auth
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Set up a FrontMCP server with public (unauthenticated) access and anonymous scopes.'
|
|
6
|
+
tags: [config, auth, session, public, mode, setup]
|
|
7
|
+
features:
|
|
8
|
+
- "Configuring `mode: 'public'` for unauthenticated access"
|
|
9
|
+
- 'Setting `sessionTtl` to control anonymous session lifetime'
|
|
10
|
+
- 'Granting `anonymousScopes` so tools can check scope-based permissions even without auth'
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Public Auth Mode Setup
|
|
14
|
+
|
|
15
|
+
Set up a FrontMCP server with public (unauthenticated) access and anonymous scopes.
|
|
16
|
+
|
|
17
|
+
## Code
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// src/server.ts
|
|
21
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
|
|
24
|
+
@Tool({
|
|
25
|
+
name: 'search',
|
|
26
|
+
description: 'Search public records',
|
|
27
|
+
inputSchema: { query: z.string() },
|
|
28
|
+
outputSchema: { results: z.array(z.string()) },
|
|
29
|
+
})
|
|
30
|
+
class SearchTool extends ToolContext {
|
|
31
|
+
async execute(input: { query: string }) {
|
|
32
|
+
return { results: [`Result for: ${input.query}`] };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@App({
|
|
37
|
+
name: 'public-api',
|
|
38
|
+
auth: {
|
|
39
|
+
mode: 'public',
|
|
40
|
+
sessionTtl: 3600,
|
|
41
|
+
anonymousScopes: ['read'],
|
|
42
|
+
},
|
|
43
|
+
tools: [SearchTool],
|
|
44
|
+
})
|
|
45
|
+
class PublicApi {}
|
|
46
|
+
|
|
47
|
+
@FrontMcp({
|
|
48
|
+
info: { name: 'my-server', version: '1.0.0' },
|
|
49
|
+
apps: [PublicApi],
|
|
50
|
+
})
|
|
51
|
+
class Server {}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## What This Demonstrates
|
|
55
|
+
|
|
56
|
+
- Configuring `mode: 'public'` for unauthenticated access
|
|
57
|
+
- Setting `sessionTtl` to control anonymous session lifetime
|
|
58
|
+
- Granting `anonymousScopes` so tools can check scope-based permissions even without auth
|
|
59
|
+
|
|
60
|
+
## Related
|
|
61
|
+
|
|
62
|
+
- See `configure-auth` for all four auth modes
|
|
63
|
+
- See `configure-auth-modes` for a detailed comparison of modes
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remote-oauth-with-vault
|
|
3
|
+
reference: configure-auth
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: '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.'
|
|
6
|
+
tags: [config, oauth, auth, remote, vault]
|
|
7
|
+
features:
|
|
8
|
+
- "Configuring `mode: 'remote'` for full OAuth 2.1 authorization flow"
|
|
9
|
+
- 'Loading `clientId` from environment variables instead of hardcoding'
|
|
10
|
+
- "Using `this.authProviders.headers('github')` to get pre-formatted auth headers for downstream API calls"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Remote OAuth Mode with Credential Vault
|
|
14
|
+
|
|
15
|
+
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.
|
|
16
|
+
|
|
17
|
+
## Code
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// src/server.ts
|
|
21
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
|
|
24
|
+
@Tool({
|
|
25
|
+
name: 'create_github_issue',
|
|
26
|
+
description: 'Create a GitHub issue on behalf of the user',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
repo: z.string(),
|
|
29
|
+
title: z.string(),
|
|
30
|
+
body: z.string(),
|
|
31
|
+
},
|
|
32
|
+
outputSchema: { issueUrl: z.string() },
|
|
33
|
+
})
|
|
34
|
+
class CreateGithubIssueTool extends ToolContext {
|
|
35
|
+
async execute(input: { repo: string; title: string; body: string }) {
|
|
36
|
+
// Access downstream credentials via the authProviders context extension
|
|
37
|
+
const headers = await this.authProviders.headers('github');
|
|
38
|
+
|
|
39
|
+
const response = await fetch(`https://api.github.com/repos/${input.repo}/issues`, {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
headers: { ...headers, 'Content-Type': 'application/json' },
|
|
42
|
+
body: JSON.stringify({ title: input.title, body: input.body }),
|
|
43
|
+
});
|
|
44
|
+
const issue = await response.json();
|
|
45
|
+
return { issueUrl: issue.html_url };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@App({
|
|
50
|
+
name: 'dev-tools',
|
|
51
|
+
auth: {
|
|
52
|
+
mode: 'remote',
|
|
53
|
+
provider: 'https://auth.example.com',
|
|
54
|
+
clientId: process.env['OAUTH_CLIENT_ID'] ?? 'mcp-client-id',
|
|
55
|
+
},
|
|
56
|
+
tools: [CreateGithubIssueTool],
|
|
57
|
+
})
|
|
58
|
+
class DevToolsApp {}
|
|
59
|
+
|
|
60
|
+
@FrontMcp({
|
|
61
|
+
info: { name: 'dev-tools-server', version: '1.0.0' },
|
|
62
|
+
apps: [DevToolsApp],
|
|
63
|
+
})
|
|
64
|
+
class Server {}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## What This Demonstrates
|
|
68
|
+
|
|
69
|
+
- Configuring `mode: 'remote'` for full OAuth 2.1 authorization flow
|
|
70
|
+
- Loading `clientId` from environment variables instead of hardcoding
|
|
71
|
+
- Using `this.authProviders.headers('github')` to get pre-formatted auth headers for downstream API calls
|
|
72
|
+
|
|
73
|
+
## Related
|
|
74
|
+
|
|
75
|
+
- See `configure-auth` for credential vault API (`get`, `headers`, `has`, `refresh`)
|
|
76
|
+
- See `configure-session` for setting up Redis-based session storage in production
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: local-self-signed-tokens
|
|
3
|
+
reference: configure-auth-modes
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Configure a server that signs its own JWT tokens with consent and incremental auth enabled.'
|
|
6
|
+
tags: [config, auth, redis, local, auth-modes, modes]
|
|
7
|
+
features:
|
|
8
|
+
- "Using `mode: 'local'` so the server signs its own JWTs"
|
|
9
|
+
- 'Setting `local.issuer` and `local.audience` to control token claims'
|
|
10
|
+
- 'Enabling `consent` for explicit user authorization flow'
|
|
11
|
+
- 'Enabling `incrementalAuth` to request additional scopes progressively'
|
|
12
|
+
- 'Using Redis for token storage in production'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Local Self-Signed Tokens
|
|
16
|
+
|
|
17
|
+
Configure a server that signs its own JWT tokens with consent and incremental auth enabled.
|
|
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: 'manage_users',
|
|
28
|
+
description: 'Manage user accounts',
|
|
29
|
+
inputSchema: { action: z.enum(['list', 'create', 'delete']), userId: z.string().optional() },
|
|
30
|
+
outputSchema: { success: z.boolean(), message: z.string() },
|
|
31
|
+
})
|
|
32
|
+
class ManageUsersTool extends ToolContext {
|
|
33
|
+
async execute(input: { action: string; userId?: string }) {
|
|
34
|
+
return { success: true, message: `Action ${input.action} completed` };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@App({
|
|
39
|
+
name: 'internal-api',
|
|
40
|
+
auth: {
|
|
41
|
+
mode: 'local',
|
|
42
|
+
local: {
|
|
43
|
+
issuer: 'my-internal-server',
|
|
44
|
+
audience: 'internal-api',
|
|
45
|
+
},
|
|
46
|
+
tokenStorage: 'redis',
|
|
47
|
+
consent: { enabled: true },
|
|
48
|
+
incrementalAuth: { enabled: true },
|
|
49
|
+
},
|
|
50
|
+
tools: [ManageUsersTool],
|
|
51
|
+
})
|
|
52
|
+
class InternalApi {}
|
|
53
|
+
|
|
54
|
+
@FrontMcp({
|
|
55
|
+
info: { name: 'local-auth-server', version: '1.0.0' },
|
|
56
|
+
apps: [InternalApi],
|
|
57
|
+
redis: {
|
|
58
|
+
provider: 'redis',
|
|
59
|
+
host: process.env['REDIS_HOST'] ?? 'localhost',
|
|
60
|
+
port: 6379,
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
class Server {}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## What This Demonstrates
|
|
67
|
+
|
|
68
|
+
- Using `mode: 'local'` so the server signs its own JWTs
|
|
69
|
+
- Setting `local.issuer` and `local.audience` to control token claims
|
|
70
|
+
- Enabling `consent` for explicit user authorization flow
|
|
71
|
+
- Enabling `incrementalAuth` to request additional scopes progressively
|
|
72
|
+
- Using Redis for token storage in production
|
|
73
|
+
|
|
74
|
+
## Related
|
|
75
|
+
|
|
76
|
+
- See `configure-auth-modes` for a comparison of all auth modes
|
|
77
|
+
- See `configure-session` for session storage configuration
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remote-enterprise-oauth
|
|
3
|
+
reference: configure-auth-modes
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Delegate authentication to an external OAuth orchestrator with Redis-backed token storage.'
|
|
6
|
+
tags: [config, oauth, auth, redis, remote, auth-modes]
|
|
7
|
+
features:
|
|
8
|
+
- "Using `mode: 'remote'` to delegate to an external OAuth 2.1 authorization server"
|
|
9
|
+
- 'Loading `clientId` and `clientSecret` from environment variables (never hardcoded)'
|
|
10
|
+
- 'Configuring Redis-backed token storage for production persistence'
|
|
11
|
+
- 'Full OAuth flow: clients are redirected to the provider and return with an authorization code'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Remote Enterprise OAuth
|
|
15
|
+
|
|
16
|
+
Delegate authentication to an external OAuth orchestrator with Redis-backed token storage.
|
|
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: 'query_data',
|
|
27
|
+
description: 'Query enterprise data warehouse',
|
|
28
|
+
inputSchema: { sql: z.string() },
|
|
29
|
+
outputSchema: { rows: z.array(z.record(z.string(), z.unknown())), rowCount: z.number() },
|
|
30
|
+
})
|
|
31
|
+
class QueryDataTool extends ToolContext {
|
|
32
|
+
async execute(input: { sql: string }) {
|
|
33
|
+
return { rows: [{ id: 1, name: 'example' }], rowCount: 1 };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@App({
|
|
38
|
+
name: 'enterprise-api',
|
|
39
|
+
auth: {
|
|
40
|
+
mode: 'remote',
|
|
41
|
+
provider: 'https://auth.example.com',
|
|
42
|
+
clientId: process.env['OAUTH_CLIENT_ID']!,
|
|
43
|
+
clientSecret: process.env['OAUTH_CLIENT_SECRET'],
|
|
44
|
+
tokenStorage: 'redis',
|
|
45
|
+
},
|
|
46
|
+
tools: [QueryDataTool],
|
|
47
|
+
})
|
|
48
|
+
class EnterpriseApi {}
|
|
49
|
+
|
|
50
|
+
@FrontMcp({
|
|
51
|
+
info: { name: 'enterprise-server', version: '1.0.0' },
|
|
52
|
+
apps: [EnterpriseApi],
|
|
53
|
+
redis: {
|
|
54
|
+
provider: 'redis',
|
|
55
|
+
host: process.env['REDIS_HOST'] ?? 'redis.internal',
|
|
56
|
+
port: Number(process.env['REDIS_PORT'] ?? 6379),
|
|
57
|
+
password: process.env['REDIS_PASSWORD'],
|
|
58
|
+
},
|
|
59
|
+
})
|
|
60
|
+
class Server {}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## What This Demonstrates
|
|
64
|
+
|
|
65
|
+
- Using `mode: 'remote'` to delegate to an external OAuth 2.1 authorization server
|
|
66
|
+
- Loading `clientId` and `clientSecret` from environment variables (never hardcoded)
|
|
67
|
+
- Configuring Redis-backed token storage for production persistence
|
|
68
|
+
- Full OAuth flow: clients are redirected to the provider and return with an authorization code
|
|
69
|
+
|
|
70
|
+
## Related
|
|
71
|
+
|
|
72
|
+
- See `configure-auth-modes` for a comparison of all auth modes
|
|
73
|
+
- See `setup-redis` for Redis provisioning details
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: transparent-jwt-validation
|
|
3
|
+
reference: configure-auth-modes
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Validate externally-issued JWTs without managing token lifecycle on the server.'
|
|
6
|
+
tags: [config, auth, transparent, auth-modes, modes, jwt]
|
|
7
|
+
features:
|
|
8
|
+
- "Using `mode: 'transparent'` to validate tokens from an external identity provider"
|
|
9
|
+
- 'Setting `expectedAudience` to restrict which tokens are accepted'
|
|
10
|
+
- 'The server fetches JWKS from `{provider}/.well-known/jwks.json` automatically'
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Transparent JWT Validation
|
|
14
|
+
|
|
15
|
+
Validate externally-issued JWTs without managing token lifecycle on the server.
|
|
16
|
+
|
|
17
|
+
## Code
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// src/server.ts
|
|
21
|
+
import { FrontMcp, App, Tool, ToolContext } from '@frontmcp/sdk';
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
|
|
24
|
+
@Tool({
|
|
25
|
+
name: 'get_profile',
|
|
26
|
+
description: 'Get the authenticated user profile',
|
|
27
|
+
inputSchema: { userId: z.string() },
|
|
28
|
+
outputSchema: { id: z.string(), email: z.string() },
|
|
29
|
+
})
|
|
30
|
+
class GetProfileTool extends ToolContext {
|
|
31
|
+
async execute(input: { userId: string }) {
|
|
32
|
+
return { id: input.userId, email: `${input.userId}@example.com` };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@App({
|
|
37
|
+
name: 'api',
|
|
38
|
+
auth: {
|
|
39
|
+
mode: 'transparent',
|
|
40
|
+
provider: 'https://auth.example.com',
|
|
41
|
+
expectedAudience: 'my-api',
|
|
42
|
+
clientId: 'my-client-id',
|
|
43
|
+
},
|
|
44
|
+
tools: [GetProfileTool],
|
|
45
|
+
})
|
|
46
|
+
class ApiApp {}
|
|
47
|
+
|
|
48
|
+
@FrontMcp({
|
|
49
|
+
info: { name: 'transparent-server', version: '1.0.0' },
|
|
50
|
+
apps: [ApiApp],
|
|
51
|
+
})
|
|
52
|
+
class Server {}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## What This Demonstrates
|
|
56
|
+
|
|
57
|
+
- Using `mode: 'transparent'` to validate tokens from an external identity provider
|
|
58
|
+
- Setting `expectedAudience` to restrict which tokens are accepted
|
|
59
|
+
- The server fetches JWKS from `{provider}/.well-known/jwks.json` automatically
|
|
60
|
+
|
|
61
|
+
## Related
|
|
62
|
+
|
|
63
|
+
- See `configure-auth-modes` for a comparison of all auth modes
|
|
64
|
+
- See `configure-auth` for the full authentication setup guide
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: basic-confirmation-gate
|
|
3
|
+
reference: configure-elicitation
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Request user confirmation before executing a destructive action.'
|
|
6
|
+
tags: [config, elicitation, confirmation, gate]
|
|
7
|
+
features:
|
|
8
|
+
- 'Enabling elicitation with `elicitation: { enabled: true }` in the `@FrontMcp` decorator'
|
|
9
|
+
- 'Using `this.elicit()` to pause tool execution and request user confirmation'
|
|
10
|
+
- 'Handling the case where the client does not support elicitation (`!confirmation`)'
|
|
11
|
+
- 'Using a boolean `requestedSchema` for simple yes/no confirmations'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Basic Confirmation Gate
|
|
15
|
+
|
|
16
|
+
Request user confirmation before executing a destructive action.
|
|
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: 'delete_records',
|
|
27
|
+
description: 'Delete records from the database',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
table: z.string(),
|
|
30
|
+
filter: z.string(),
|
|
31
|
+
},
|
|
32
|
+
outputSchema: { deleted: z.number() },
|
|
33
|
+
})
|
|
34
|
+
class DeleteRecordsTool extends ToolContext {
|
|
35
|
+
async execute(input: { table: string; filter: string }) {
|
|
36
|
+
const count = 42; // simulate counting matching records
|
|
37
|
+
|
|
38
|
+
const confirmation = await this.elicit({
|
|
39
|
+
message: `This will delete ${count} records from ${input.table}. Are you sure?`,
|
|
40
|
+
requestedSchema: {
|
|
41
|
+
type: 'object',
|
|
42
|
+
properties: {
|
|
43
|
+
confirmed: { type: 'boolean', description: 'Confirm deletion' },
|
|
44
|
+
},
|
|
45
|
+
required: ['confirmed'],
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
if (!confirmation || !confirmation.confirmed) {
|
|
50
|
+
return { deleted: 0 };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return { deleted: count };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@App({
|
|
58
|
+
name: 'db-tools',
|
|
59
|
+
tools: [DeleteRecordsTool],
|
|
60
|
+
})
|
|
61
|
+
class DbApp {}
|
|
62
|
+
|
|
63
|
+
@FrontMcp({
|
|
64
|
+
info: { name: 'elicit-server', version: '1.0.0' },
|
|
65
|
+
apps: [DbApp],
|
|
66
|
+
elicitation: {
|
|
67
|
+
enabled: true,
|
|
68
|
+
},
|
|
69
|
+
})
|
|
70
|
+
class Server {}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## What This Demonstrates
|
|
74
|
+
|
|
75
|
+
- Enabling elicitation with `elicitation: { enabled: true }` in the `@FrontMcp` decorator
|
|
76
|
+
- Using `this.elicit()` to pause tool execution and request user confirmation
|
|
77
|
+
- Handling the case where the client does not support elicitation (`!confirmation`)
|
|
78
|
+
- Using a boolean `requestedSchema` for simple yes/no confirmations
|
|
79
|
+
|
|
80
|
+
## Related
|
|
81
|
+
|
|
82
|
+
- See `configure-elicitation` for the full elicitation configuration reference
|
|
83
|
+
- See `setup-redis` for distributed elicitation state
|
package/catalog/frontmcp-config/examples/configure-elicitation/distributed-elicitation-redis.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: distributed-elicitation-redis
|
|
3
|
+
reference: configure-elicitation
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Configure elicitation with Redis storage for multi-instance production deployments.'
|
|
6
|
+
tags: [config, redis, elicitation, distributed]
|
|
7
|
+
features:
|
|
8
|
+
- 'Configuring Redis-backed elicitation state for multi-instance deployments'
|
|
9
|
+
- 'Using a `requestedSchema` with both required and optional fields'
|
|
10
|
+
- 'Elicitation state is shared across server instances so the response can arrive at any replica'
|
|
11
|
+
- 'Loading Redis connection details from environment variables'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Distributed Elicitation with Redis
|
|
15
|
+
|
|
16
|
+
Configure elicitation with Redis storage for multi-instance production 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: 'deploy_service',
|
|
27
|
+
description: 'Deploy a service to production',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
service: z.string(),
|
|
30
|
+
version: z.string(),
|
|
31
|
+
},
|
|
32
|
+
outputSchema: { deploymentId: z.string(), status: z.string() },
|
|
33
|
+
})
|
|
34
|
+
class DeployServiceTool extends ToolContext {
|
|
35
|
+
async execute(input: { service: string; version: string }) {
|
|
36
|
+
const confirmation = await this.elicit({
|
|
37
|
+
message: `Deploy ${input.service}@${input.version} to production?`,
|
|
38
|
+
requestedSchema: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
confirmed: { type: 'boolean', description: 'Confirm deployment' },
|
|
42
|
+
reason: { type: 'string', description: 'Deployment reason (optional)' },
|
|
43
|
+
},
|
|
44
|
+
required: ['confirmed'],
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
if (!confirmation || !confirmation.confirmed) {
|
|
49
|
+
return { deploymentId: '', status: 'cancelled' };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return { deploymentId: 'deploy-abc123', status: 'started' };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@App({
|
|
57
|
+
name: 'deploy-tools',
|
|
58
|
+
tools: [DeployServiceTool],
|
|
59
|
+
})
|
|
60
|
+
class DeployApp {}
|
|
61
|
+
|
|
62
|
+
@FrontMcp({
|
|
63
|
+
info: { name: 'deploy-server', version: '1.0.0' },
|
|
64
|
+
apps: [DeployApp],
|
|
65
|
+
elicitation: {
|
|
66
|
+
enabled: true,
|
|
67
|
+
redis: {
|
|
68
|
+
provider: 'redis',
|
|
69
|
+
host: process.env['REDIS_HOST'] ?? 'localhost',
|
|
70
|
+
port: Number(process.env['REDIS_PORT'] ?? 6379),
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
class Server {}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## What This Demonstrates
|
|
78
|
+
|
|
79
|
+
- Configuring Redis-backed elicitation state for multi-instance deployments
|
|
80
|
+
- Using a `requestedSchema` with both required and optional fields
|
|
81
|
+
- Elicitation state is shared across server instances so the response can arrive at any replica
|
|
82
|
+
- Loading Redis connection details from environment variables
|
|
83
|
+
|
|
84
|
+
## Related
|
|
85
|
+
|
|
86
|
+
- See `configure-elicitation` for the full elicitation configuration reference
|
|
87
|
+
- See `configure-session` for session storage with Redis
|