@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
|
@@ -607,6 +607,16 @@ class DataServer {}
|
|
|
607
607
|
| Job times out unexpectedly | Default 5-minute timeout too short | Set `timeout` in `@Job` to a higher value (e.g., `600000` for 10 minutes) |
|
|
608
608
|
| Permission denied error | User lacks required roles or scopes | Verify user has one of the `roles` and all `scopes` defined in `permissions` |
|
|
609
609
|
|
|
610
|
+
## Examples
|
|
611
|
+
|
|
612
|
+
| Example | Level | Description |
|
|
613
|
+
| ------------------------------------------------------------------------ | ------------ | ------------------------------------------------------------------------------------------------------------------ |
|
|
614
|
+
| [`basic-report-job`](../examples/create-job/basic-report-job.md) | Basic | A minimal job that generates a report with progress tracking and structured output. |
|
|
615
|
+
| [`job-with-permissions`](../examples/create-job/job-with-permissions.md) | Advanced | A data export job with declarative permission controls, plus a function-style job for simple tasks. |
|
|
616
|
+
| [`job-with-retry`](../examples/create-job/job-with-retry.md) | Intermediate | A job that syncs data from an external API with automatic retry, exponential backoff, and batch progress tracking. |
|
|
617
|
+
|
|
618
|
+
> See all examples in [`examples/create-job/`](../examples/create-job/)
|
|
619
|
+
|
|
610
620
|
## Reference
|
|
611
621
|
|
|
612
622
|
- [Jobs Documentation](https://docs.agentfront.dev/frontmcp/servers/jobs)
|
|
@@ -369,6 +369,16 @@ Any stage can have `@Will`, `@Did`, `@Stage`, or `@Around` hooks.
|
|
|
369
369
|
| Multiple hooks execute in wrong order | Priorities not set or conflicting | Set explicit `priority` values; higher numbers execute first |
|
|
370
370
|
| `@Stage` replacement causes downstream errors | Return value shape does not match stage contract | Ensure the return matches what the next stage expects (e.g., MCP response format) |
|
|
371
371
|
|
|
372
|
+
## Examples
|
|
373
|
+
|
|
374
|
+
| Example | Level | Description |
|
|
375
|
+
| --------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
376
|
+
| [`basic-logging-plugin`](../examples/create-plugin-hooks/basic-logging-plugin.md) | Basic | Demonstrates a plugin that logs tool execution using `@Will` and `@Did` hook decorators from the pre-built `ToolHook` export. |
|
|
377
|
+
| [`caching-with-around`](../examples/create-plugin-hooks/caching-with-around.md) | Intermediate | Demonstrates wrapping tool execution with an `@Around` hook to implement result caching with TTL-based expiry. |
|
|
378
|
+
| [`tool-level-hooks-and-stage-replacement`](../examples/create-plugin-hooks/tool-level-hooks-and-stage-replacement.md) | Advanced | Demonstrates two advanced patterns: adding `@Will`/`@Did` hooks directly on a `@Tool` class (scoped to that tool only), and using `@Stage` in a plugin to replace a flow stage entirely with a filtered mock. |
|
|
379
|
+
|
|
380
|
+
> See all examples in [`examples/create-plugin-hooks/`](../examples/create-plugin-hooks/)
|
|
381
|
+
|
|
372
382
|
## Reference
|
|
373
383
|
|
|
374
384
|
- [Plugin Hooks Documentation](https://docs.agentfront.dev/frontmcp/plugins/creating-plugins)
|
|
@@ -500,6 +500,16 @@ plugins/
|
|
|
500
500
|
| `ProviderNotRegisteredError` for context extension | Token in `contextExtensions` not in `providers` | Ensure the token used in `contextExtensions[].token` is registered in the plugin's `providers` array. Use `{ provide: MyToken, useClass: MyService }` or list the class directly. If using `dynamicProviders()`, return the provider there |
|
|
501
501
|
| Provider works in tools but not in context extension | Using class reference instead of Symbol token | Create a typed `Token<T> = Symbol('name')` in `symbols.ts`, use it in both `providers` and `contextExtensions`. Direct class references can fail if not constructable without dependencies |
|
|
502
502
|
|
|
503
|
+
## Examples
|
|
504
|
+
|
|
505
|
+
| Example | Level | Description |
|
|
506
|
+
| --------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------- |
|
|
507
|
+
| [`basic-plugin-with-provider`](../examples/create-plugin/basic-plugin-with-provider.md) | Basic | A minimal plugin that contributes an injectable service via the `providers` and `exports` arrays. |
|
|
508
|
+
| [`configurable-dynamic-plugin`](../examples/create-plugin/configurable-dynamic-plugin.md) | Advanced | A plugin that accepts runtime configuration via `DynamicPlugin` and extends decorator metadata with custom fields. |
|
|
509
|
+
| [`plugin-with-context-extension`](../examples/create-plugin/plugin-with-context-extension.md) | Intermediate | A plugin that adds a `this.auditLog` property to all execution contexts using context extensions and module augmentation. |
|
|
510
|
+
|
|
511
|
+
> See all examples in [`examples/create-plugin/`](../examples/create-plugin/)
|
|
512
|
+
|
|
503
513
|
## Reference
|
|
504
514
|
|
|
505
515
|
- [Plugin System Documentation](https://docs.agentfront.dev/frontmcp/plugins/creating-plugins)
|
|
@@ -437,6 +437,16 @@ This creates the prompt file, spec file, and updates barrel exports.
|
|
|
437
437
|
| Type error on `execute()` return | Returning plain string instead of `GetPromptResult` | Wrap return in `{ messages: [{ role: 'user', content: { type: 'text', text: '...' } }] }` |
|
|
438
438
|
| `this.get(TOKEN)` throws DependencyNotFoundError | Provider not registered in scope | Register provider in `providers` array of `@App` or `@FrontMcp` |
|
|
439
439
|
|
|
440
|
+
## Examples
|
|
441
|
+
|
|
442
|
+
| Example | Level | Description |
|
|
443
|
+
| ----------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------- |
|
|
444
|
+
| [`basic-prompt`](../examples/create-prompt/basic-prompt.md) | Basic | A simple prompt that generates a structured code review message from user-provided arguments. |
|
|
445
|
+
| [`dynamic-rag-prompt`](../examples/create-prompt/dynamic-rag-prompt.md) | Advanced | A prompt that queries a knowledge base via DI to build context-aware messages at runtime. |
|
|
446
|
+
| [`multi-turn-debug-session`](../examples/create-prompt/multi-turn-debug-session.md) | Intermediate | A prompt that uses alternating user/assistant messages to guide a structured debugging conversation. |
|
|
447
|
+
|
|
448
|
+
> See all examples in [`examples/create-prompt/`](../examples/create-prompt/)
|
|
449
|
+
|
|
440
450
|
## Reference
|
|
441
451
|
|
|
442
452
|
- [Prompts Documentation](https://docs.agentfront.dev/frontmcp/servers/prompts)
|
|
@@ -267,6 +267,15 @@ frontmcp dev
|
|
|
267
267
|
| Type mismatch on `this.get(TOKEN)` | Token typed with wrong interface | Ensure `Token<T>` generic matches the provider's implemented interface |
|
|
268
268
|
| Provider not destroyed on shutdown | Missing `onDestroy()` method | Implement `onDestroy()` to close connections and release resources |
|
|
269
269
|
|
|
270
|
+
## Examples
|
|
271
|
+
|
|
272
|
+
| Example | Level | Description |
|
|
273
|
+
| ------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------- |
|
|
274
|
+
| [`basic-database-provider`](../examples/create-provider/basic-database-provider.md) | Basic | A provider that manages a database connection pool with `onInit()` and `onDestroy()` lifecycle hooks. |
|
|
275
|
+
| [`config-and-api-providers`](../examples/create-provider/config-and-api-providers.md) | Intermediate | A configuration provider with readonly environment settings and an HTTP API client provider. |
|
|
276
|
+
|
|
277
|
+
> See all examples in [`examples/create-provider/`](../examples/create-provider/)
|
|
278
|
+
|
|
270
279
|
## Reference
|
|
271
280
|
|
|
272
281
|
- [Providers Documentation](https://docs.agentfront.dev/frontmcp/extensibility/providers)
|
|
@@ -465,24 +465,55 @@ type ResourceArgumentCompleter = (partial: string) => Promise<ResourceCompletion
|
|
|
465
465
|
|
|
466
466
|
### How to Implement
|
|
467
467
|
|
|
468
|
-
|
|
468
|
+
There are two approaches, both with full DI access via `this.get()`:
|
|
469
|
+
|
|
470
|
+
#### Convention-Based (Preferred)
|
|
471
|
+
|
|
472
|
+
Define a method named `${argName}Completer` on your `ResourceContext` subclass. The framework discovers it automatically -- no override needed.
|
|
473
|
+
|
|
474
|
+
```typescript
|
|
475
|
+
@ResourceTemplate({
|
|
476
|
+
name: 'user-profile',
|
|
477
|
+
description: 'User profile by ID',
|
|
478
|
+
uriTemplate: 'users://{userId}/profile',
|
|
479
|
+
mimeType: 'application/json',
|
|
480
|
+
})
|
|
481
|
+
class UserProfileResource extends ResourceContext<{ userId: string }> {
|
|
482
|
+
async execute(uri: string, params: { userId: string }) {
|
|
483
|
+
const user = await this.get(UserService).findById(params.userId);
|
|
484
|
+
return { id: user.id, name: user.name, email: user.email };
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
async userIdCompleter(partial: string): Promise<ResourceCompletionResult> {
|
|
488
|
+
const users = await this.get(UserService).search(partial);
|
|
489
|
+
return { values: users.map((u) => u.id), total: users.length };
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
The naming convention is `${argName}Completer` -- for a URI parameter `{accountName}`, define `accountNameCompleter(partial)`.
|
|
495
|
+
|
|
496
|
+
#### Override-Based
|
|
497
|
+
|
|
498
|
+
Override the `getArgumentCompleter(argName)` method for dynamic dispatch across multiple parameters. Return a completer function for argument names you support, or `null` for unknown arguments.
|
|
469
499
|
|
|
470
500
|
```typescript
|
|
471
501
|
getArgumentCompleter(argName: string): ResourceArgumentCompleter | null {
|
|
472
|
-
if (argName === '
|
|
502
|
+
if (argName === 'userId') {
|
|
473
503
|
return async (partial) => {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
return { values: matches, total: matches.length };
|
|
504
|
+
const users = await this.get(UserService).search(partial);
|
|
505
|
+
return { values: users.map((u) => u.id), total: users.length };
|
|
477
506
|
};
|
|
478
507
|
}
|
|
479
508
|
return null;
|
|
480
509
|
}
|
|
481
510
|
```
|
|
482
511
|
|
|
512
|
+
Convention-based completers take priority when both are present on the same class.
|
|
513
|
+
|
|
483
514
|
### Complete Example
|
|
484
515
|
|
|
485
|
-
A user profile template resource that autocompletes user IDs
|
|
516
|
+
A user profile template resource that autocompletes user IDs using the convention-based approach:
|
|
486
517
|
|
|
487
518
|
```typescript
|
|
488
519
|
@ResourceTemplate({
|
|
@@ -497,14 +528,9 @@ class UserProfileResource extends ResourceContext<{ userId: string }> {
|
|
|
497
528
|
return { id: user.id, name: user.name, email: user.email };
|
|
498
529
|
}
|
|
499
530
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
const users = await this.get(UserService).search(partial);
|
|
504
|
-
return { values: users.map((u) => u.id), total: users.length };
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
return null;
|
|
531
|
+
async userIdCompleter(partial: string): Promise<ResourceCompletionResult> {
|
|
532
|
+
const users = await this.get(UserService).search(partial);
|
|
533
|
+
return { values: users.map((u) => u.id), total: users.length };
|
|
508
534
|
}
|
|
509
535
|
}
|
|
510
536
|
```
|
|
@@ -540,8 +566,9 @@ When a client requests completions for the `userId` parameter with a partial str
|
|
|
540
566
|
|
|
541
567
|
### Autocompletion
|
|
542
568
|
|
|
543
|
-
- [ ] Template resources with dynamic params
|
|
569
|
+
- [ ] Template resources with dynamic params define `${argName}Completer` methods or override `getArgumentCompleter()`
|
|
544
570
|
- [ ] Completer returns `{ values, total?, hasMore? }` matching the partial input
|
|
571
|
+
- [ ] Completers use `this.get()` for DI (both convention and override patterns support full DI)
|
|
545
572
|
|
|
546
573
|
## Troubleshooting
|
|
547
574
|
|
|
@@ -553,6 +580,16 @@ When a client requests completions for the `userId` parameter with a partial str
|
|
|
553
580
|
| Binary content is garbled | Returning raw buffer in `text` field | Use `blob: buffer.toString('base64')` instead of `text` for binary data |
|
|
554
581
|
| `this.get(TOKEN)` throws DependencyNotFoundError | Provider not registered in scope | Register provider in `providers` array of `@App` or `@FrontMcp` |
|
|
555
582
|
|
|
583
|
+
## Examples
|
|
584
|
+
|
|
585
|
+
| Example | Level | Description |
|
|
586
|
+
| ------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------ |
|
|
587
|
+
| [`basic-static-resource`](../examples/create-resource/basic-static-resource.md) | Basic | A static resource that exposes application configuration at a fixed URI. |
|
|
588
|
+
| [`binary-and-multi-content`](../examples/create-resource/binary-and-multi-content.md) | Advanced | A resource serving binary blob data and a resource returning multiple content items. |
|
|
589
|
+
| [`parameterized-template`](../examples/create-resource/parameterized-template.md) | Intermediate | A resource template with typed URI parameters and argument autocompletion. |
|
|
590
|
+
|
|
591
|
+
> See all examples in [`examples/create-resource/`](../examples/create-resource/)
|
|
592
|
+
|
|
556
593
|
## Reference
|
|
557
594
|
|
|
558
595
|
- [Resources Documentation](https://docs.agentfront.dev/frontmcp/servers/resources)
|
|
@@ -727,6 +727,16 @@ class DeployServiceSkill extends SkillContext {}
|
|
|
727
727
|
| Instructions are empty at runtime | `{ file: './path.md' }` path is relative to wrong directory | Use a path relative to the skill file's location, not the project root |
|
|
728
728
|
| Parameters not visible to AI client | `parameters` defined as a plain object instead of an array | Use array format: `[{ name, description, type, required }]` |
|
|
729
729
|
|
|
730
|
+
## Examples
|
|
731
|
+
|
|
732
|
+
| Example | Level | Description |
|
|
733
|
+
| ------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------- |
|
|
734
|
+
| [`basic-tool-orchestration`](../examples/create-skill-with-tools/basic-tool-orchestration.md) | Basic | A skill that guides an AI client through a deploy workflow using referenced MCP tools. |
|
|
735
|
+
| [`directory-skill-with-tools`](../examples/create-skill-with-tools/directory-skill-with-tools.md) | Advanced | A directory-based skill loaded with `skillDir()`, plus a class-based skill using Agent Skills spec metadata fields. |
|
|
736
|
+
| [`incident-response-skill`](../examples/create-skill-with-tools/incident-response-skill.md) | Intermediate | A skill that uses object-style tool references with purpose descriptions and required flags, plus strict validation. |
|
|
737
|
+
|
|
738
|
+
> See all examples in [`examples/create-skill-with-tools/`](../examples/create-skill-with-tools/)
|
|
739
|
+
|
|
730
740
|
## Reference
|
|
731
741
|
|
|
732
742
|
- [Skills Documentation](https://docs.agentfront.dev/frontmcp/servers/skills)
|
|
@@ -606,6 +606,16 @@ class DevServer {}
|
|
|
606
606
|
| Skill parameters are ignored by the AI | Parameters are declared but not referenced in the instruction text | Mention each parameter by name in the instructions so the AI knows how to apply them |
|
|
607
607
|
| Directory-based skill missing bundled files | Subdirectories are not named `scripts/`, `references/`, or `assets/` | Use the exact conventional directory names; other names are not auto-bundled |
|
|
608
608
|
|
|
609
|
+
## Examples
|
|
610
|
+
|
|
611
|
+
| Example | Level | Description |
|
|
612
|
+
| ---------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
613
|
+
| [`basic-inline-skill`](../examples/create-skill/basic-inline-skill.md) | Basic | A minimal instruction-only skill with inline content and the function builder alternative. |
|
|
614
|
+
| [`directory-based-skill`](../examples/create-skill/directory-based-skill.md) | Advanced | A skill loaded from a directory structure with SKILL.md frontmatter, plus file-based and URL-based instruction sources. |
|
|
615
|
+
| [`parameterized-skill`](../examples/create-skill/parameterized-skill.md) | Intermediate | A skill with customizable parameters, usage examples for AI guidance, and controlled visibility. |
|
|
616
|
+
|
|
617
|
+
> See all examples in [`examples/create-skill/`](../examples/create-skill/)
|
|
618
|
+
|
|
609
619
|
## Reference
|
|
610
620
|
|
|
611
621
|
- **Docs:** <https://docs.agentfront.dev/frontmcp/servers/skills>
|
|
@@ -37,3 +37,12 @@ Annotations provide hints to MCP clients about tool behavior:
|
|
|
37
37
|
- Set `destructiveHint: true` for delete/overwrite operations (triggers client warnings)
|
|
38
38
|
- Set `idempotentHint: true` for safe-to-retry tools
|
|
39
39
|
- Set `openWorldHint: false` for tools that only access local data
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
|
|
43
|
+
| Example | Level | Description |
|
|
44
|
+
| ------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
45
|
+
| [`destructive-delete-tool`](../examples/create-tool-annotations/destructive-delete-tool.md) | Intermediate | Demonstrates annotating a tool that deletes data, enabling MCP clients to warn users before execution. |
|
|
46
|
+
| [`readonly-query-tool`](../examples/create-tool-annotations/readonly-query-tool.md) | Basic | Demonstrates annotating a tool that only reads data, signaling to MCP clients that it has no side effects and is safe to retry. |
|
|
47
|
+
|
|
48
|
+
> See all examples in [`examples/create-tool-annotations/`](../examples/create-tool-annotations/)
|
|
@@ -59,3 +59,13 @@ When `outputSchema` is omitted, the tool returns unvalidated content. This:
|
|
|
59
59
|
- Risks leaking internal fields to the client
|
|
60
60
|
- Prevents CodeCall from inferring return types
|
|
61
61
|
- Loses compile-time type checking on `Out` generic
|
|
62
|
+
|
|
63
|
+
## Examples
|
|
64
|
+
|
|
65
|
+
| Example | Level | Description |
|
|
66
|
+
| ----------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
67
|
+
| [`primitive-and-media-outputs`](../examples/create-tool-output-schema-types/primitive-and-media-outputs.md) | Intermediate | Demonstrates using primitive string literals and media types as `outputSchema` for tools that return plain text, images, or multi-content arrays. |
|
|
68
|
+
| [`zod-raw-shape-output`](../examples/create-tool-output-schema-types/zod-raw-shape-output.md) | Basic | Demonstrates the recommended approach of using a Zod raw shape as `outputSchema` for structured, validated JSON output. |
|
|
69
|
+
| [`zod-schema-advanced-output`](../examples/create-tool-output-schema-types/zod-schema-advanced-output.md) | Advanced | Demonstrates using full Zod schema objects (not raw shapes) as `outputSchema`, including `z.object()`, `z.array()`, `z.union()`, and `z.discriminatedUnion()`. |
|
|
70
|
+
|
|
71
|
+
> See all examples in [`examples/create-tool-output-schema-types/`](../examples/create-tool-output-schema-types/)
|
|
@@ -581,6 +581,16 @@ class ConvertCurrencyTool extends ToolContext {
|
|
|
581
581
|
| Output contains unexpected fields | No `outputSchema` defined | Add `outputSchema` to strip unvalidated fields from response |
|
|
582
582
|
| Tool times out | No timeout configured for long operation | Add `timeout: { executeMs: 30_000 }` to `@Tool` options |
|
|
583
583
|
|
|
584
|
+
## Examples
|
|
585
|
+
|
|
586
|
+
| Example | Level | Description |
|
|
587
|
+
| --------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------- |
|
|
588
|
+
| [`basic-class-tool`](../examples/create-tool/basic-class-tool.md) | Basic | A minimal tool using the class-based pattern with Zod input validation and output schema. |
|
|
589
|
+
| [`tool-with-di-and-errors`](../examples/create-tool/tool-with-di-and-errors.md) | Intermediate | A tool that resolves a database service via DI and uses `this.fail()` for business-logic errors. |
|
|
590
|
+
| [`tool-with-rate-limiting-and-progress`](../examples/create-tool/tool-with-rate-limiting-and-progress.md) | Advanced | A batch processing tool that uses rate limiting, concurrency control, progress notifications, and annotations. |
|
|
591
|
+
|
|
592
|
+
> See all examples in [`examples/create-tool/`](../examples/create-tool/)
|
|
593
|
+
|
|
584
594
|
## Reference
|
|
585
595
|
|
|
586
596
|
- [Tools Documentation](https://docs.agentfront.dev/frontmcp/servers/tools)
|
|
@@ -750,6 +750,16 @@ class CiServer {}
|
|
|
750
750
|
| Webhook trigger does not fire | Missing or mismatched `webhook.secret` | Ensure `webhook.secret` matches the sender's HMAC secret and `webhook.path` is correct |
|
|
751
751
|
| Workflow exceeds timeout | Total step execution time exceeds the default 600000 ms | Increase `timeout` at the workflow level or add per-step `timeout` overrides |
|
|
752
752
|
|
|
753
|
+
## Examples
|
|
754
|
+
|
|
755
|
+
| Example | Level | Description |
|
|
756
|
+
| --------------------------------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
757
|
+
| [`basic-deploy-pipeline`](../examples/create-workflow/basic-deploy-pipeline.md) | Basic | A linear workflow that builds, tests, and deploys a service with step dependencies and dynamic input. |
|
|
758
|
+
| [`parallel-validation-pipeline`](../examples/create-workflow/parallel-validation-pipeline.md) | Intermediate | A workflow that validates multiple datasets in parallel, then conditionally merges results or notifies on failure. |
|
|
759
|
+
| [`webhook-triggered-workflow`](../examples/create-workflow/webhook-triggered-workflow.md) | Advanced | A CI/CD workflow triggered by a webhook, featuring `continueOnError`, per-step conditions, and the `workflow()` function builder. |
|
|
760
|
+
|
|
761
|
+
> See all examples in [`examples/create-workflow/`](../examples/create-workflow/)
|
|
762
|
+
|
|
753
763
|
## Reference
|
|
754
764
|
|
|
755
765
|
- [Workflows Documentation](https://docs.agentfront.dev/frontmcp/servers/workflows)
|
|
@@ -744,6 +744,16 @@ class AuditHooks {
|
|
|
744
744
|
|
|
745
745
|
---
|
|
746
746
|
|
|
747
|
+
## Examples
|
|
748
|
+
|
|
749
|
+
| Example | Level | Description |
|
|
750
|
+
| -------------------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
751
|
+
| [`agent-skill-job-workflow`](../examples/decorators-guide/agent-skill-job-workflow.md) | Advanced | Demonstrates the advanced decorator types: `@Agent` for autonomous AI agents, `@Skill` for knowledge packages, `@Job` for background tasks, and `@Workflow` for multi-step orchestration. |
|
|
752
|
+
| [`basic-server-with-app-and-tools`](../examples/decorators-guide/basic-server-with-app-and-tools.md) | Basic | Demonstrates the minimal decorator hierarchy to create a working FrontMCP server with one app containing a tool and a resource. |
|
|
753
|
+
| [`multi-app-with-plugins-and-providers`](../examples/decorators-guide/multi-app-with-plugins-and-providers.md) | Intermediate | Demonstrates a server with multiple `@App` modules, a `@Provider` for dependency injection, and a `@Plugin` for cross-cutting concerns. |
|
|
754
|
+
|
|
755
|
+
> See all examples in [`examples/decorators-guide/`](../examples/decorators-guide/)
|
|
756
|
+
|
|
747
757
|
## Reference
|
|
748
758
|
|
|
749
759
|
- **Official docs:** [FrontMCP Decorators Overview](https://docs.agentfront.dev/frontmcp/sdk-reference/decorators/overview)
|
|
@@ -193,6 +193,16 @@ class IntegrationHub {}
|
|
|
193
193
|
| Stale tools after API update | Spec polling not configured | Add `polling: { intervalMs: 300000 }` to refresh every 5 minutes |
|
|
194
194
|
| TypeScript error importing adapter | Wrong import path | Import from `@frontmcp/adapters`: `import { OpenapiAdapter } from '@frontmcp/adapters'` |
|
|
195
195
|
|
|
196
|
+
## Examples
|
|
197
|
+
|
|
198
|
+
| Example | Level | Description |
|
|
199
|
+
| ----------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
200
|
+
| [`authenticated-adapter-with-polling`](../examples/official-adapters/authenticated-adapter-with-polling.md) | Intermediate | Demonstrates configuring authentication (API key and bearer token) and automatic spec polling for OpenAPI adapters. |
|
|
201
|
+
| [`basic-openapi-adapter`](../examples/official-adapters/basic-openapi-adapter.md) | Basic | Demonstrates converting an OpenAPI specification into MCP tools automatically using `OpenapiAdapter` with minimal configuration. |
|
|
202
|
+
| [`multi-api-hub-with-inline-spec`](../examples/official-adapters/multi-api-hub-with-inline-spec.md) | Advanced | Demonstrates registering multiple OpenAPI adapters from different APIs in a single app, including one with an inline spec definition instead of a remote URL. |
|
|
203
|
+
|
|
204
|
+
> See all examples in [`examples/official-adapters/`](../examples/official-adapters/)
|
|
205
|
+
|
|
196
206
|
## Reference
|
|
197
207
|
|
|
198
208
|
- [Adapter Overview Documentation](https://docs.agentfront.dev/frontmcp/adapters/overview)
|
|
@@ -731,6 +731,16 @@ class ProductionServer {}
|
|
|
731
731
|
| Dashboard returns 404 | Plugin is in beta and auto-disabled in production (`NODE_ENV=production`) | Dashboard is unstable — avoid in production. For dev: set `enabled: true` explicitly |
|
|
732
732
|
| Approval webhook times out | Callback URL not reachable from the external approval service | Verify `callbackPath` is publicly accessible and matches the webhook configuration |
|
|
733
733
|
|
|
734
|
+
## Examples
|
|
735
|
+
|
|
736
|
+
| Example | Level | Description |
|
|
737
|
+
| -------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
738
|
+
| [`cache-and-feature-flags`](../examples/official-plugins/cache-and-feature-flags.md) | Intermediate | Demonstrates combining the Cache plugin for tool result caching with the Feature Flags plugin for gating tools behind flags. |
|
|
739
|
+
| [`production-multi-plugin-setup`](../examples/official-plugins/production-multi-plugin-setup.md) | Advanced | Demonstrates a production-ready server configuration combining CodeCall, Remember, Approval, Cache, and Feature Flags plugins with Redis storage and external flag services. |
|
|
740
|
+
| [`remember-plugin-session-memory`](../examples/official-plugins/remember-plugin-session-memory.md) | Basic | Demonstrates installing the Remember plugin and using `this.remember` in tools to store and retrieve session memory. |
|
|
741
|
+
|
|
742
|
+
> See all examples in [`examples/official-plugins/`](../examples/official-plugins/)
|
|
743
|
+
|
|
734
744
|
## Reference
|
|
735
745
|
|
|
736
746
|
- [Plugins Overview Documentation](https://docs.agentfront.dev/frontmcp/plugins/overview)
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: product-catalog-search
|
|
3
|
+
reference: vectoriadb
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Shows advanced VectoriaDB usage with typed document metadata, batch operations, filtered search by multiple criteria, and batch indexing of a product catalog.'
|
|
6
|
+
tags: [extensibility, vectoriadb, product, catalog, search]
|
|
7
|
+
features:
|
|
8
|
+
- 'Typed document metadata with `ProductDoc extends DocumentMetadata`'
|
|
9
|
+
- 'Batch operations with `db.addMany()` for efficient catalog indexing'
|
|
10
|
+
- 'Multi-criteria filtered search combining category, price, and stock status'
|
|
11
|
+
- '`maxDocuments` option for DoS protection on large datasets'
|
|
12
|
+
- '`FileStorageAdapter` for persisting the entire product index to disk'
|
|
13
|
+
- 'Semantic matching: "something to block office noise" finds "noise-canceling headphones"'
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# VectoriaDB: Product Catalog with Typed Metadata and Batch Operations
|
|
17
|
+
|
|
18
|
+
Shows advanced VectoriaDB usage with typed document metadata, batch operations, filtered search by multiple criteria, and batch indexing of a product catalog.
|
|
19
|
+
|
|
20
|
+
## Code
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// src/providers/product-search.provider.ts
|
|
24
|
+
import { Provider, ProviderScope } from '@frontmcp/sdk';
|
|
25
|
+
import { VectoriaDB, FileStorageAdapter } from 'vectoriadb';
|
|
26
|
+
import type { DocumentMetadata } from 'vectoriadb';
|
|
27
|
+
|
|
28
|
+
export const ProductSearch = Symbol('ProductSearch');
|
|
29
|
+
|
|
30
|
+
// Typed metadata for product documents
|
|
31
|
+
interface ProductDoc extends DocumentMetadata {
|
|
32
|
+
name: string;
|
|
33
|
+
category: string;
|
|
34
|
+
price: number;
|
|
35
|
+
inStock: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@Provider({ name: 'product-search', provide: ProductSearch, scope: ProviderScope.GLOBAL })
|
|
39
|
+
export class ProductSearchProvider {
|
|
40
|
+
private db: VectoriaDB<ProductDoc>;
|
|
41
|
+
private ready: Promise<void>;
|
|
42
|
+
|
|
43
|
+
constructor() {
|
|
44
|
+
this.db = new VectoriaDB<ProductDoc>({
|
|
45
|
+
modelName: 'Xenova/all-MiniLM-L6-v2',
|
|
46
|
+
cacheDir: './.cache/transformers',
|
|
47
|
+
useHNSW: true,
|
|
48
|
+
defaultSimilarityThreshold: 0.3,
|
|
49
|
+
defaultTopK: 10,
|
|
50
|
+
maxDocuments: 100000, // DoS protection
|
|
51
|
+
storageAdapter: new FileStorageAdapter({ cacheDir: './.cache/product-vectors' }),
|
|
52
|
+
});
|
|
53
|
+
this.ready = this.db.initialize();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Batch indexing for large catalogs
|
|
57
|
+
async indexProducts(
|
|
58
|
+
products: Array<{
|
|
59
|
+
id: string;
|
|
60
|
+
description: string;
|
|
61
|
+
name: string;
|
|
62
|
+
category: string;
|
|
63
|
+
price: number;
|
|
64
|
+
inStock: boolean;
|
|
65
|
+
}>,
|
|
66
|
+
) {
|
|
67
|
+
await this.ready;
|
|
68
|
+
|
|
69
|
+
// Use addMany for efficient batch operations
|
|
70
|
+
await this.db.addMany(
|
|
71
|
+
products.map((p) => ({
|
|
72
|
+
id: p.id,
|
|
73
|
+
text: `${p.name}: ${p.description}`,
|
|
74
|
+
metadata: {
|
|
75
|
+
id: p.id,
|
|
76
|
+
name: p.name,
|
|
77
|
+
category: p.category,
|
|
78
|
+
price: p.price,
|
|
79
|
+
inStock: p.inStock,
|
|
80
|
+
},
|
|
81
|
+
})),
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
await this.db.saveToStorage();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Multi-criteria filtered search
|
|
88
|
+
async search(query: string, filters?: { category?: string; maxPrice?: number; inStockOnly?: boolean }, limit = 10) {
|
|
89
|
+
await this.ready;
|
|
90
|
+
|
|
91
|
+
return this.db.search(query, {
|
|
92
|
+
topK: limit,
|
|
93
|
+
threshold: 0.4,
|
|
94
|
+
filter: (meta) => {
|
|
95
|
+
if (filters?.category && meta.category !== filters.category) return false;
|
|
96
|
+
if (filters?.maxPrice !== undefined && meta.price > filters.maxPrice) return false;
|
|
97
|
+
if (filters?.inStockOnly && !meta.inStock) return false;
|
|
98
|
+
return true;
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// src/tools/find-products.tool.ts
|
|
107
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
108
|
+
import { z } from 'zod';
|
|
109
|
+
import { ProductSearch } from '../providers/product-search.provider';
|
|
110
|
+
|
|
111
|
+
@Tool({
|
|
112
|
+
name: 'find_products',
|
|
113
|
+
description: 'Find products using natural language (e.g., "something to block office noise")',
|
|
114
|
+
inputSchema: {
|
|
115
|
+
query: z.string().min(1).describe('Natural language product search'),
|
|
116
|
+
category: z.string().optional().describe('Filter by category'),
|
|
117
|
+
maxPrice: z.number().positive().optional().describe('Maximum price'),
|
|
118
|
+
inStockOnly: z.boolean().default(true).describe('Only show in-stock products'),
|
|
119
|
+
limit: z.number().int().min(1).max(20).default(5).describe('Max results'),
|
|
120
|
+
},
|
|
121
|
+
outputSchema: {
|
|
122
|
+
products: z.array(
|
|
123
|
+
z.object({
|
|
124
|
+
id: z.string(),
|
|
125
|
+
name: z.string(),
|
|
126
|
+
category: z.string(),
|
|
127
|
+
price: z.number(),
|
|
128
|
+
score: z.number(),
|
|
129
|
+
inStock: z.boolean(),
|
|
130
|
+
}),
|
|
131
|
+
),
|
|
132
|
+
total: z.number(),
|
|
133
|
+
},
|
|
134
|
+
})
|
|
135
|
+
export class FindProductsTool extends ToolContext {
|
|
136
|
+
async execute(input: { query: string; category?: string; maxPrice?: number; inStockOnly: boolean; limit: number }) {
|
|
137
|
+
const search = this.get(ProductSearch);
|
|
138
|
+
|
|
139
|
+
const results = await search.search(
|
|
140
|
+
input.query,
|
|
141
|
+
{
|
|
142
|
+
category: input.category,
|
|
143
|
+
maxPrice: input.maxPrice,
|
|
144
|
+
inStockOnly: input.inStockOnly,
|
|
145
|
+
},
|
|
146
|
+
input.limit,
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
products: results.map((r) => ({
|
|
151
|
+
id: r.id,
|
|
152
|
+
name: r.metadata.name,
|
|
153
|
+
category: r.metadata.category,
|
|
154
|
+
price: r.metadata.price,
|
|
155
|
+
score: r.score,
|
|
156
|
+
inStock: r.metadata.inStock,
|
|
157
|
+
})),
|
|
158
|
+
total: results.length,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## What This Demonstrates
|
|
165
|
+
|
|
166
|
+
- Typed document metadata with `ProductDoc extends DocumentMetadata`
|
|
167
|
+
- Batch operations with `db.addMany()` for efficient catalog indexing
|
|
168
|
+
- Multi-criteria filtered search combining category, price, and stock status
|
|
169
|
+
- `maxDocuments` option for DoS protection on large datasets
|
|
170
|
+
- `FileStorageAdapter` for persisting the entire product index to disk
|
|
171
|
+
- Semantic matching: "something to block office noise" finds "noise-canceling headphones"
|
|
172
|
+
|
|
173
|
+
## Related
|
|
174
|
+
|
|
175
|
+
- See `vectoriadb` for the full configuration reference, engine comparison, and TFIDFVectoria examples
|