@frontmcp/skills 1.0.0-beta.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/catalog/TEMPLATE.md +69 -0
- package/catalog/frontmcp-config/SKILL.md +38 -22
- package/catalog/frontmcp-config/examples/configure-auth/multi-app-auth.md +87 -0
- package/catalog/frontmcp-config/examples/configure-auth/public-mode-setup.md +63 -0
- package/catalog/frontmcp-config/examples/configure-auth/remote-oauth-with-vault.md +76 -0
- package/catalog/frontmcp-config/examples/configure-auth-modes/local-self-signed-tokens.md +77 -0
- package/catalog/frontmcp-config/examples/configure-auth-modes/remote-enterprise-oauth.md +73 -0
- package/catalog/frontmcp-config/examples/configure-auth-modes/transparent-jwt-validation.md +64 -0
- package/catalog/frontmcp-config/examples/configure-elicitation/basic-confirmation-gate.md +83 -0
- package/catalog/frontmcp-config/examples/configure-elicitation/distributed-elicitation-redis.md +87 -0
- package/catalog/frontmcp-config/examples/configure-http/cors-restricted-origins.md +52 -0
- package/catalog/frontmcp-config/examples/configure-http/entry-path-reverse-proxy.md +72 -0
- package/catalog/frontmcp-config/examples/configure-http/unix-socket-local.md +64 -0
- package/catalog/frontmcp-config/examples/configure-session/multi-server-key-prefix.md +68 -0
- package/catalog/frontmcp-config/examples/configure-session/redis-session-store.md +52 -0
- package/catalog/frontmcp-config/examples/configure-session/vercel-kv-session.md +52 -0
- package/catalog/frontmcp-config/examples/configure-throttle/distributed-redis-throttle.md +94 -0
- package/catalog/frontmcp-config/examples/configure-throttle/per-tool-rate-limit.md +92 -0
- package/catalog/frontmcp-config/examples/configure-throttle/server-level-rate-limit.md +83 -0
- package/catalog/frontmcp-config/examples/configure-throttle-guard-config/full-guard-config.md +99 -0
- package/catalog/frontmcp-config/examples/configure-throttle-guard-config/minimal-guard-config.md +55 -0
- package/catalog/frontmcp-config/examples/configure-transport/custom-protocol-flags.md +74 -0
- package/catalog/frontmcp-config/examples/configure-transport/distributed-sessions-redis.md +86 -0
- package/catalog/frontmcp-config/examples/configure-transport/stateless-serverless.md +69 -0
- package/catalog/frontmcp-config/examples/configure-transport-protocol-presets/legacy-preset-nodejs.md +65 -0
- package/catalog/frontmcp-config/examples/configure-transport-protocol-presets/stateless-api-serverless.md +69 -0
- package/catalog/frontmcp-config/references/configure-auth-modes.md +15 -0
- package/catalog/frontmcp-config/references/configure-auth.md +15 -0
- package/catalog/frontmcp-config/references/configure-elicitation.md +14 -0
- package/catalog/frontmcp-config/references/configure-http.md +15 -0
- package/catalog/frontmcp-config/references/configure-session.md +15 -0
- package/catalog/frontmcp-config/references/configure-throttle-guard-config.md +14 -0
- package/catalog/frontmcp-config/references/configure-throttle.md +15 -0
- package/catalog/frontmcp-config/references/configure-transport-protocol-presets.md +14 -0
- package/catalog/frontmcp-config/references/configure-transport.md +15 -0
- package/catalog/frontmcp-config/references/setup-redis.md +10 -0
- package/catalog/frontmcp-config/references/setup-sqlite.md +10 -0
- package/catalog/frontmcp-deployment/SKILL.md +40 -12
- package/catalog/frontmcp-deployment/examples/build-for-browser/browser-build-with-custom-entry.md +43 -0
- package/catalog/frontmcp-deployment/examples/build-for-browser/browser-crypto-and-storage.md +85 -0
- package/catalog/frontmcp-deployment/examples/build-for-browser/react-provider-setup.md +61 -0
- package/catalog/frontmcp-deployment/examples/build-for-cli/cli-binary-build.md +66 -0
- package/catalog/frontmcp-deployment/examples/build-for-cli/unix-socket-daemon.md +76 -0
- package/catalog/frontmcp-deployment/examples/build-for-sdk/connect-openai.md +78 -0
- package/catalog/frontmcp-deployment/examples/build-for-sdk/create-flat-config.md +85 -0
- package/catalog/frontmcp-deployment/examples/build-for-sdk/multi-platform-connect.md +104 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/basic-worker-deploy.md +82 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-custom-domain.md +97 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-with-kv-storage.md +92 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-lambda/cdk-deployment.md +92 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-lambda/lambda-handler-with-cors.md +113 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-lambda/sam-template-basic.md +100 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node/docker-compose-with-redis.md +101 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node/pm2-with-nginx.md +79 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node/resource-limits.md +92 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/basic-multistage-dockerfile.md +63 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/secure-nonroot-dockerfile.md +89 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-mcp-endpoint-test.md +69 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-kv.md +82 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-skills-cache.md +90 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/minimal-vercel-config.md +49 -0
- package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/vercel-config-with-security-headers.md +92 -0
- package/catalog/frontmcp-deployment/references/build-for-browser.md +15 -0
- package/catalog/frontmcp-deployment/references/build-for-cli.md +65 -3
- package/catalog/frontmcp-deployment/references/build-for-sdk.md +15 -0
- package/catalog/frontmcp-deployment/references/deploy-to-cloudflare.md +15 -0
- package/catalog/frontmcp-deployment/references/deploy-to-lambda.md +18 -3
- package/catalog/frontmcp-deployment/references/deploy-to-node-dockerfile.md +16 -2
- package/catalog/frontmcp-deployment/references/deploy-to-node.md +19 -4
- package/catalog/frontmcp-deployment/references/deploy-to-vercel-config.md +14 -0
- package/catalog/frontmcp-deployment/references/deploy-to-vercel.md +15 -0
- package/catalog/frontmcp-development/SKILL.md +25 -17
- package/catalog/frontmcp-development/examples/create-adapter/basic-api-adapter.md +92 -0
- package/catalog/frontmcp-development/examples/create-adapter/namespaced-adapter.md +124 -0
- package/catalog/frontmcp-development/examples/create-agent/basic-agent-with-tools.md +121 -0
- package/catalog/frontmcp-development/examples/create-agent/custom-multi-pass-agent.md +95 -0
- package/catalog/frontmcp-development/examples/create-agent/nested-agents-with-swarm.md +111 -0
- package/catalog/frontmcp-development/examples/create-agent-llm-config/anthropic-config.md +81 -0
- package/catalog/frontmcp-development/examples/create-agent-llm-config/openai-config.md +80 -0
- package/catalog/frontmcp-development/examples/create-job/basic-report-job.md +87 -0
- package/catalog/frontmcp-development/examples/create-job/job-with-permissions.md +117 -0
- package/catalog/frontmcp-development/examples/create-job/job-with-retry.md +88 -0
- package/catalog/frontmcp-development/examples/create-plugin/basic-plugin-with-provider.md +69 -0
- package/catalog/frontmcp-development/examples/create-plugin/configurable-dynamic-plugin.md +178 -0
- package/catalog/frontmcp-development/examples/create-plugin/plugin-with-context-extension.md +107 -0
- package/catalog/frontmcp-development/examples/create-plugin-hooks/basic-logging-plugin.md +69 -0
- package/catalog/frontmcp-development/examples/create-plugin-hooks/caching-with-around.md +80 -0
- package/catalog/frontmcp-development/examples/create-plugin-hooks/tool-level-hooks-and-stage-replacement.md +100 -0
- package/catalog/frontmcp-development/examples/create-prompt/basic-prompt.md +72 -0
- package/catalog/frontmcp-development/examples/create-prompt/dynamic-rag-prompt.md +92 -0
- package/catalog/frontmcp-development/examples/create-prompt/multi-turn-debug-session.md +86 -0
- package/catalog/frontmcp-development/examples/create-provider/basic-database-provider.md +113 -0
- package/catalog/frontmcp-development/examples/create-provider/config-and-api-providers.md +107 -0
- package/catalog/frontmcp-development/examples/create-resource/basic-static-resource.md +72 -0
- package/catalog/frontmcp-development/examples/create-resource/binary-and-multi-content.md +111 -0
- package/catalog/frontmcp-development/examples/create-resource/parameterized-template.md +84 -0
- package/catalog/frontmcp-development/examples/create-skill/basic-inline-skill.md +96 -0
- package/catalog/frontmcp-development/examples/create-skill/directory-based-skill.md +115 -0
- package/catalog/frontmcp-development/examples/create-skill/parameterized-skill.md +96 -0
- package/catalog/frontmcp-development/examples/create-skill-with-tools/basic-tool-orchestration.md +76 -0
- package/catalog/frontmcp-development/examples/create-skill-with-tools/directory-skill-with-tools.md +149 -0
- package/catalog/frontmcp-development/examples/create-skill-with-tools/incident-response-skill.md +92 -0
- package/catalog/frontmcp-development/examples/create-tool/basic-class-tool.md +62 -0
- package/catalog/frontmcp-development/examples/create-tool/tool-with-di-and-errors.md +84 -0
- package/catalog/frontmcp-development/examples/create-tool/tool-with-rate-limiting-and-progress.md +93 -0
- package/catalog/frontmcp-development/examples/create-tool-annotations/destructive-delete-tool.md +94 -0
- package/catalog/frontmcp-development/examples/create-tool-annotations/readonly-query-tool.md +60 -0
- package/catalog/frontmcp-development/examples/create-tool-output-schema-types/primitive-and-media-outputs.md +104 -0
- package/catalog/frontmcp-development/examples/create-tool-output-schema-types/zod-raw-shape-output.md +63 -0
- package/catalog/frontmcp-development/examples/create-tool-output-schema-types/zod-schema-advanced-output.md +103 -0
- package/catalog/frontmcp-development/examples/create-workflow/basic-deploy-pipeline.md +91 -0
- package/catalog/frontmcp-development/examples/create-workflow/parallel-validation-pipeline.md +90 -0
- package/catalog/frontmcp-development/examples/create-workflow/webhook-triggered-workflow.md +136 -0
- package/catalog/frontmcp-development/examples/decorators-guide/agent-skill-job-workflow.md +145 -0
- package/catalog/frontmcp-development/examples/decorators-guide/basic-server-with-app-and-tools.md +124 -0
- package/catalog/frontmcp-development/examples/decorators-guide/multi-app-with-plugins-and-providers.md +149 -0
- package/catalog/frontmcp-development/examples/official-adapters/authenticated-adapter-with-polling.md +84 -0
- package/catalog/frontmcp-development/examples/official-adapters/basic-openapi-adapter.md +54 -0
- package/catalog/frontmcp-development/examples/official-adapters/multi-api-hub-with-inline-spec.md +130 -0
- package/catalog/frontmcp-development/examples/official-plugins/cache-and-feature-flags.md +117 -0
- package/catalog/frontmcp-development/examples/official-plugins/production-multi-plugin-setup.md +147 -0
- package/catalog/frontmcp-development/examples/official-plugins/remember-plugin-session-memory.md +104 -0
- package/catalog/frontmcp-development/references/create-adapter.md +14 -0
- package/catalog/frontmcp-development/references/create-agent-llm-config.md +14 -0
- package/catalog/frontmcp-development/references/create-agent.md +15 -0
- package/catalog/frontmcp-development/references/create-job.md +15 -0
- package/catalog/frontmcp-development/references/create-plugin-hooks.md +51 -0
- package/catalog/frontmcp-development/references/create-plugin.md +186 -11
- package/catalog/frontmcp-development/references/create-prompt.md +17 -0
- package/catalog/frontmcp-development/references/create-provider.md +14 -0
- package/catalog/frontmcp-development/references/create-resource.md +127 -0
- package/catalog/frontmcp-development/references/create-skill-with-tools.md +126 -7
- package/catalog/frontmcp-development/references/create-skill.md +57 -12
- package/catalog/frontmcp-development/references/create-tool-annotations.md +14 -0
- package/catalog/frontmcp-development/references/create-tool-output-schema-types.md +15 -0
- package/catalog/frontmcp-development/references/create-tool.md +205 -1
- package/catalog/frontmcp-development/references/create-workflow.md +15 -0
- package/catalog/frontmcp-development/references/decorators-guide.md +155 -78
- package/catalog/frontmcp-development/references/official-adapters.md +31 -16
- package/catalog/frontmcp-development/references/official-plugins.md +62 -28
- package/catalog/frontmcp-extensibility/SKILL.md +103 -0
- package/catalog/frontmcp-extensibility/examples/vectoriadb/product-catalog-search.md +175 -0
- package/catalog/frontmcp-extensibility/examples/vectoriadb/semantic-search-with-persistence.md +138 -0
- package/catalog/frontmcp-extensibility/examples/vectoriadb/tfidf-keyword-search.md +103 -0
- package/catalog/frontmcp-extensibility/references/vectoriadb.md +299 -0
- package/catalog/frontmcp-guides/SKILL.md +7 -4
- package/catalog/frontmcp-guides/examples/example-knowledge-base/agent-and-plugin.md +160 -0
- package/catalog/frontmcp-guides/examples/example-knowledge-base/multi-app-composition.md +92 -0
- package/catalog/frontmcp-guides/examples/example-knowledge-base/vector-search-and-resources.md +135 -0
- package/catalog/frontmcp-guides/examples/example-task-manager/auth-and-crud-tools.md +135 -0
- package/catalog/frontmcp-guides/examples/example-task-manager/authenticated-e2e-tests.md +148 -0
- package/catalog/frontmcp-guides/examples/example-task-manager/redis-provider-with-di.md +129 -0
- package/catalog/frontmcp-guides/examples/example-weather-api/server-and-app-setup.md +75 -0
- package/catalog/frontmcp-guides/examples/example-weather-api/unit-and-e2e-tests.md +142 -0
- package/catalog/frontmcp-guides/examples/example-weather-api/weather-tool-with-schemas.md +74 -0
- package/catalog/frontmcp-guides/references/example-knowledge-base.md +15 -0
- package/catalog/frontmcp-guides/references/example-task-manager.md +30 -21
- package/catalog/frontmcp-guides/references/example-weather-api.md +18 -6
- package/catalog/frontmcp-observability/SKILL.md +144 -0
- package/catalog/frontmcp-observability/examples/structured-logging/stdout-logging.md +71 -0
- package/catalog/frontmcp-observability/examples/structured-logging/winston-integration.md +70 -0
- package/catalog/frontmcp-observability/examples/telemetry-api/agent-nested-tracing.md +86 -0
- package/catalog/frontmcp-observability/examples/telemetry-api/plugin-telemetry.md +93 -0
- package/catalog/frontmcp-observability/examples/telemetry-api/tool-custom-spans.md +72 -0
- package/catalog/frontmcp-observability/examples/testing-observability/test-custom-spans.md +90 -0
- package/catalog/frontmcp-observability/examples/testing-observability/test-log-correlation.md +104 -0
- package/catalog/frontmcp-observability/examples/tracing-setup/basic-tracing.md +82 -0
- package/catalog/frontmcp-observability/examples/tracing-setup/production-tracing.md +73 -0
- package/catalog/frontmcp-observability/examples/vendor-integrations/coralogix-setup.md +74 -0
- package/catalog/frontmcp-observability/references/structured-logging.md +114 -0
- package/catalog/frontmcp-observability/references/telemetry-api.md +155 -0
- package/catalog/frontmcp-observability/references/testing-observability.md +169 -0
- package/catalog/frontmcp-observability/references/tracing-setup.md +146 -0
- package/catalog/frontmcp-observability/references/vendor-integrations.md +164 -0
- package/catalog/frontmcp-production-readiness/SKILL.md +99 -0
- package/catalog/frontmcp-production-readiness/examples/common-checklist/caching-and-performance.md +102 -0
- package/catalog/frontmcp-production-readiness/examples/common-checklist/observability-setup.md +104 -0
- package/catalog/frontmcp-production-readiness/examples/common-checklist/security-hardening.md +95 -0
- package/catalog/frontmcp-production-readiness/examples/health-readiness-endpoints/basic-health-setup.md +81 -0
- package/catalog/frontmcp-production-readiness/examples/health-readiness-endpoints/custom-probes.md +136 -0
- package/catalog/frontmcp-production-readiness/examples/production-browser/browser-bundle-config.md +93 -0
- package/catalog/frontmcp-production-readiness/examples/production-browser/cross-platform-crypto.md +116 -0
- package/catalog/frontmcp-production-readiness/examples/production-browser/security-and-performance.md +128 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-binary/binary-build-config.md +109 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-binary/stdio-transport-error-handling.md +132 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/daemon-socket-config.md +82 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/graceful-shutdown-cleanup.md +107 -0
- package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/security-and-permissions.md +119 -0
- package/catalog/frontmcp-production-readiness/examples/production-cloudflare/durable-objects-state.md +124 -0
- package/catalog/frontmcp-production-readiness/examples/production-cloudflare/workers-runtime-constraints.md +103 -0
- package/catalog/frontmcp-production-readiness/examples/production-cloudflare/wrangler-config.md +89 -0
- package/catalog/frontmcp-production-readiness/examples/production-lambda/cold-start-connection-reuse.md +122 -0
- package/catalog/frontmcp-production-readiness/examples/production-lambda/sam-template.md +107 -0
- package/catalog/frontmcp-production-readiness/examples/production-lambda/scaling-and-monitoring.md +138 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-sdk/basic-sdk-lifecycle.md +85 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-sdk/multi-instance-cleanup.md +110 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-sdk/package-json-config.md +107 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-server/docker-multi-stage.md +103 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-server/graceful-shutdown.md +87 -0
- package/catalog/frontmcp-production-readiness/examples/production-node-server/redis-session-scaling.md +97 -0
- package/catalog/frontmcp-production-readiness/examples/production-vercel/cold-start-optimization.md +104 -0
- package/catalog/frontmcp-production-readiness/examples/production-vercel/stateless-serverless-design.md +91 -0
- package/catalog/frontmcp-production-readiness/examples/production-vercel/vercel-edge-config.md +78 -0
- package/catalog/frontmcp-production-readiness/references/common-checklist.md +175 -0
- package/catalog/frontmcp-production-readiness/references/health-readiness-endpoints.md +198 -0
- package/catalog/frontmcp-production-readiness/references/production-browser.md +56 -0
- package/catalog/frontmcp-production-readiness/references/production-cli-binary.md +71 -0
- package/catalog/frontmcp-production-readiness/references/production-cli-daemon.md +71 -0
- package/catalog/frontmcp-production-readiness/references/production-cloudflare.md +62 -0
- package/catalog/frontmcp-production-readiness/references/production-lambda.md +63 -0
- package/catalog/frontmcp-production-readiness/references/production-node-sdk.md +76 -0
- package/catalog/frontmcp-production-readiness/references/production-node-server.md +71 -0
- package/catalog/frontmcp-production-readiness/references/production-vercel.md +62 -0
- package/catalog/frontmcp-setup/SKILL.md +19 -14
- package/catalog/frontmcp-setup/examples/frontmcp-skills-usage/bundle-presets-scaffolding.md +61 -0
- package/catalog/frontmcp-setup/examples/frontmcp-skills-usage/install-and-search-skills.md +83 -0
- package/catalog/frontmcp-setup/examples/multi-app-composition/local-apps-with-shared-tools.md +87 -0
- package/catalog/frontmcp-setup/examples/multi-app-composition/per-app-auth-and-isolation.md +88 -0
- package/catalog/frontmcp-setup/examples/multi-app-composition/remote-and-esm-apps.md +81 -0
- package/catalog/frontmcp-setup/examples/nx-workflow/build-test-affected.md +77 -0
- package/catalog/frontmcp-setup/examples/nx-workflow/multi-server-deployment.md +93 -0
- package/catalog/frontmcp-setup/examples/nx-workflow/scaffold-and-generate.md +62 -0
- package/catalog/frontmcp-setup/examples/project-structure-nx/nx-generator-scaffolding.md +73 -0
- package/catalog/frontmcp-setup/examples/project-structure-nx/nx-workspace-with-apps.md +85 -0
- package/catalog/frontmcp-setup/examples/project-structure-nx/shared-library-usage.md +89 -0
- package/catalog/frontmcp-setup/examples/project-structure-standalone/dev-workflow-commands.md +64 -0
- package/catalog/frontmcp-setup/examples/project-structure-standalone/feature-folder-organization.md +111 -0
- package/catalog/frontmcp-setup/examples/project-structure-standalone/minimal-standalone-layout.md +73 -0
- package/catalog/frontmcp-setup/examples/readme-guide/node-server-readme.md +89 -0
- package/catalog/frontmcp-setup/examples/readme-guide/vercel-deployment-readme.md +90 -0
- package/catalog/frontmcp-setup/examples/setup-project/basic-node-server.md +99 -0
- package/catalog/frontmcp-setup/examples/setup-project/cli-scaffold-with-flags.md +77 -0
- package/catalog/frontmcp-setup/examples/setup-project/vercel-serverless-server.md +89 -0
- package/catalog/frontmcp-setup/examples/setup-redis/docker-redis-local-dev.md +88 -0
- package/catalog/frontmcp-setup/examples/setup-redis/hybrid-vercel-kv-with-pubsub.md +78 -0
- package/catalog/frontmcp-setup/examples/setup-redis/vercel-kv-serverless.md +78 -0
- package/catalog/frontmcp-setup/examples/setup-sqlite/basic-sqlite-setup.md +75 -0
- package/catalog/frontmcp-setup/examples/setup-sqlite/encrypted-sqlite-storage.md +55 -0
- package/catalog/frontmcp-setup/examples/setup-sqlite/unix-socket-daemon.md +70 -0
- package/catalog/frontmcp-setup/references/frontmcp-skills-usage.md +33 -9
- package/catalog/frontmcp-setup/references/multi-app-composition.md +15 -0
- package/catalog/frontmcp-setup/references/nx-workflow.md +15 -0
- package/catalog/frontmcp-setup/references/project-structure-nx.md +15 -0
- package/catalog/frontmcp-setup/references/project-structure-standalone.md +15 -0
- package/catalog/frontmcp-setup/references/readme-guide.md +235 -0
- package/catalog/frontmcp-setup/references/setup-project.md +16 -1
- package/catalog/frontmcp-setup/references/setup-redis.md +15 -0
- package/catalog/frontmcp-setup/references/setup-sqlite.md +15 -0
- package/catalog/frontmcp-testing/SKILL.md +41 -27
- package/catalog/frontmcp-testing/examples/setup-testing/fixture-based-e2e-test.md +70 -0
- package/catalog/frontmcp-testing/examples/setup-testing/jest-config-with-coverage.md +59 -0
- package/catalog/frontmcp-testing/examples/setup-testing/unit-test-tool-resource-prompt.md +115 -0
- package/catalog/frontmcp-testing/examples/test-auth/oauth-flow-test.md +78 -0
- package/catalog/frontmcp-testing/examples/test-auth/role-based-access-test.md +88 -0
- package/catalog/frontmcp-testing/examples/test-auth/token-factory-test.md +71 -0
- package/catalog/frontmcp-testing/examples/test-browser-build/browser-bundle-validation.md +58 -0
- package/catalog/frontmcp-testing/examples/test-browser-build/playwright-browser-test.md +69 -0
- package/catalog/frontmcp-testing/examples/test-cli-binary/binary-startup-test.md +77 -0
- package/catalog/frontmcp-testing/examples/test-cli-binary/js-bundle-import-test.md +56 -0
- package/catalog/frontmcp-testing/examples/test-direct-client/basic-create-test.md +74 -0
- package/catalog/frontmcp-testing/examples/test-direct-client/openai-claude-format-test.md +79 -0
- package/catalog/frontmcp-testing/examples/test-e2e-handler/basic-e2e-test.md +67 -0
- package/catalog/frontmcp-testing/examples/test-e2e-handler/manual-client-with-transport.md +72 -0
- package/catalog/frontmcp-testing/examples/test-e2e-handler/tool-call-and-error-e2e.md +73 -0
- package/catalog/frontmcp-testing/examples/test-tool-unit/basic-tool-test.md +69 -0
- package/catalog/frontmcp-testing/examples/test-tool-unit/schema-validation-test.md +82 -0
- package/catalog/frontmcp-testing/examples/test-tool-unit/tool-error-handling-test.md +92 -0
- package/catalog/frontmcp-testing/references/setup-testing.md +17 -0
- package/catalog/frontmcp-testing/references/test-auth.md +15 -0
- package/catalog/frontmcp-testing/references/test-browser-build.md +14 -0
- package/catalog/frontmcp-testing/references/test-cli-binary.md +14 -0
- package/catalog/frontmcp-testing/references/test-direct-client.md +14 -0
- package/catalog/frontmcp-testing/references/test-e2e-handler.md +15 -0
- package/catalog/frontmcp-testing/references/test-tool-unit.md +15 -0
- package/catalog/skills-manifest.json +2849 -32
- package/package.json +2 -2
- package/src/index.d.ts +1 -1
- package/src/index.js.map +1 -1
- package/src/loader.js +0 -1
- package/src/loader.js.map +1 -1
- package/src/manifest.d.ts +36 -1
- package/src/manifest.js +6 -1
- package/src/manifest.js.map +1 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: authenticated-adapter-with-polling
|
|
3
|
+
reference: official-adapters
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Demonstrates configuring authentication (API key and bearer token) and automatic spec polling for OpenAPI adapters.'
|
|
6
|
+
tags: [development, auth, openapi, security, adapters, authenticated]
|
|
7
|
+
features:
|
|
8
|
+
- 'Three authentication methods: `staticAuth.apiKey`, `staticAuth.jwt`, and dynamic `securityResolver`'
|
|
9
|
+
- 'Using `securityResolver` for per-request dynamic authentication based on the calling context'
|
|
10
|
+
- 'Enabling `polling` to automatically refresh tool definitions when the upstream spec changes'
|
|
11
|
+
- 'Loading secrets from environment variables instead of hardcoding them'
|
|
12
|
+
- 'Each adapter has a unique `name` to avoid tool naming collisions'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Authenticated Adapter with Spec Polling
|
|
16
|
+
|
|
17
|
+
Demonstrates configuring authentication (API key and bearer token) and automatic spec polling for OpenAPI adapters.
|
|
18
|
+
|
|
19
|
+
## Code
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/server.ts
|
|
23
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
24
|
+
import { OpenapiAdapter } from '@frontmcp/adapters';
|
|
25
|
+
|
|
26
|
+
@App({
|
|
27
|
+
name: 'integrations',
|
|
28
|
+
adapters: [
|
|
29
|
+
// API key authentication via staticAuth
|
|
30
|
+
OpenapiAdapter.init({
|
|
31
|
+
name: 'analytics-api',
|
|
32
|
+
url: 'https://api.analytics.example.com/openapi.json',
|
|
33
|
+
baseUrl: 'https://api.analytics.example.com',
|
|
34
|
+
staticAuth: {
|
|
35
|
+
apiKey: process.env.ANALYTICS_API_KEY!,
|
|
36
|
+
},
|
|
37
|
+
}),
|
|
38
|
+
|
|
39
|
+
// Bearer token authentication via staticAuth
|
|
40
|
+
OpenapiAdapter.init({
|
|
41
|
+
name: 'crm-api',
|
|
42
|
+
url: 'https://crm.example.com/openapi.json',
|
|
43
|
+
baseUrl: 'https://crm.example.com',
|
|
44
|
+
staticAuth: {
|
|
45
|
+
jwt: process.env.CRM_API_TOKEN!,
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
|
|
49
|
+
// Dynamic auth with spec polling
|
|
50
|
+
OpenapiAdapter.init({
|
|
51
|
+
name: 'evolving-api',
|
|
52
|
+
url: 'https://api.example.com/openapi.json',
|
|
53
|
+
baseUrl: 'https://api.example.com',
|
|
54
|
+
securityResolver: (tool, ctx) => {
|
|
55
|
+
return { jwt: ctx.authInfo?.token };
|
|
56
|
+
},
|
|
57
|
+
polling: {
|
|
58
|
+
intervalMs: 300000, // Re-fetch spec every 5 minutes
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
],
|
|
62
|
+
})
|
|
63
|
+
class IntegrationsApp {}
|
|
64
|
+
|
|
65
|
+
@FrontMcp({
|
|
66
|
+
info: { name: 'integration-hub', version: '1.0.0' },
|
|
67
|
+
apps: [IntegrationsApp],
|
|
68
|
+
http: { port: 3000 },
|
|
69
|
+
})
|
|
70
|
+
class MyServer {}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## What This Demonstrates
|
|
74
|
+
|
|
75
|
+
- Three authentication methods: `staticAuth.apiKey`, `staticAuth.jwt`, and dynamic `securityResolver`
|
|
76
|
+
- Using `securityResolver` for per-request dynamic authentication based on the calling context
|
|
77
|
+
- Enabling `polling` to automatically refresh tool definitions when the upstream spec changes
|
|
78
|
+
- Loading secrets from environment variables instead of hardcoding them
|
|
79
|
+
- Each adapter has a unique `name` to avoid tool naming collisions
|
|
80
|
+
|
|
81
|
+
## Related
|
|
82
|
+
|
|
83
|
+
- See `official-adapters` for inline specs, multiple adapter registration, and troubleshooting
|
|
84
|
+
- See `decorators-guide` for the full `@App` and `@FrontMcp` field reference
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: basic-openapi-adapter
|
|
3
|
+
reference: official-adapters
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Demonstrates converting an OpenAPI specification into MCP tools automatically using `OpenapiAdapter` with minimal configuration.'
|
|
6
|
+
tags: [development, openapi, adapters, adapter]
|
|
7
|
+
features:
|
|
8
|
+
- 'Using `OpenapiAdapter.init()` with just `name` and `url` to auto-generate MCP tools'
|
|
9
|
+
- 'Each OpenAPI operation becomes a tool named `<adapter-name>:<operationId>`'
|
|
10
|
+
- 'The adapter is registered in the `adapters` array of `@App`, not in `plugins`'
|
|
11
|
+
- 'The `name` field serves as the namespace prefix to prevent tool name collisions'
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Basic OpenAPI Adapter
|
|
15
|
+
|
|
16
|
+
Demonstrates converting an OpenAPI specification into MCP tools automatically using `OpenapiAdapter` with minimal configuration.
|
|
17
|
+
|
|
18
|
+
## Code
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// src/server.ts
|
|
22
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
23
|
+
import { OpenapiAdapter } from '@frontmcp/adapters';
|
|
24
|
+
|
|
25
|
+
@App({
|
|
26
|
+
name: 'petstore',
|
|
27
|
+
adapters: [
|
|
28
|
+
OpenapiAdapter.init({
|
|
29
|
+
name: 'petstore',
|
|
30
|
+
url: 'https://petstore3.swagger.io/api/v3/openapi.json',
|
|
31
|
+
}),
|
|
32
|
+
],
|
|
33
|
+
})
|
|
34
|
+
class PetstoreApp {}
|
|
35
|
+
|
|
36
|
+
@FrontMcp({
|
|
37
|
+
info: { name: 'petstore-server', version: '1.0.0' },
|
|
38
|
+
apps: [PetstoreApp],
|
|
39
|
+
http: { port: 3000 },
|
|
40
|
+
})
|
|
41
|
+
class MyServer {}
|
|
42
|
+
// Generated tools: petstore:addPet, petstore:getPetById, petstore:deletePet, etc.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## What This Demonstrates
|
|
46
|
+
|
|
47
|
+
- Using `OpenapiAdapter.init()` with just `name` and `url` to auto-generate MCP tools
|
|
48
|
+
- Each OpenAPI operation becomes a tool named `<adapter-name>:<operationId>`
|
|
49
|
+
- The adapter is registered in the `adapters` array of `@App`, not in `plugins`
|
|
50
|
+
- The `name` field serves as the namespace prefix to prevent tool name collisions
|
|
51
|
+
|
|
52
|
+
## Related
|
|
53
|
+
|
|
54
|
+
- See `official-adapters` for authentication options, spec polling, and inline specs
|
package/catalog/frontmcp-development/examples/official-adapters/multi-api-hub-with-inline-spec.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-api-hub-with-inline-spec
|
|
3
|
+
reference: official-adapters
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Demonstrates registering multiple OpenAPI adapters from different APIs in a single app, including one with an inline spec definition instead of a remote URL.'
|
|
6
|
+
tags: [development, openapi, remote, adapters, multi, api]
|
|
7
|
+
features:
|
|
8
|
+
- 'Registering multiple adapters in a single `@App` with unique names for tool namespacing'
|
|
9
|
+
- 'Using `additionalHeaders` for header-based authentication (GitHub token)'
|
|
10
|
+
- 'Providing an inline `spec` object instead of a remote `url` for APIs without hosted specs'
|
|
11
|
+
- "Each adapter's tools are namespaced: `github:*`, `jira:*`, `internal:*`"
|
|
12
|
+
- 'Only one of `url` or `spec` should be provided per adapter; `spec` takes precedence'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Multi-API Hub with Inline Spec
|
|
16
|
+
|
|
17
|
+
Demonstrates registering multiple OpenAPI adapters from different APIs in a single app, including one with an inline spec definition instead of a remote URL.
|
|
18
|
+
|
|
19
|
+
## Code
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/server.ts
|
|
23
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
24
|
+
import { OpenapiAdapter } from '@frontmcp/adapters';
|
|
25
|
+
|
|
26
|
+
@App({
|
|
27
|
+
name: 'integration-hub',
|
|
28
|
+
adapters: [
|
|
29
|
+
// Remote specs from public APIs
|
|
30
|
+
OpenapiAdapter.init({
|
|
31
|
+
name: 'github',
|
|
32
|
+
url: 'https://api.github.com/openapi.json',
|
|
33
|
+
additionalHeaders: {
|
|
34
|
+
Authorization: `token ${process.env.GITHUB_TOKEN!}`,
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
37
|
+
|
|
38
|
+
OpenapiAdapter.init({
|
|
39
|
+
name: 'jira',
|
|
40
|
+
url: 'https://jira.example.com/openapi.json',
|
|
41
|
+
staticAuth: {
|
|
42
|
+
apiKey: process.env.JIRA_API_KEY!,
|
|
43
|
+
},
|
|
44
|
+
}),
|
|
45
|
+
|
|
46
|
+
// Inline spec for an internal API without a hosted spec URL
|
|
47
|
+
OpenapiAdapter.init({
|
|
48
|
+
name: 'internal',
|
|
49
|
+
spec: {
|
|
50
|
+
openapi: '3.0.0',
|
|
51
|
+
info: { title: 'Internal API', version: '1.0.0' },
|
|
52
|
+
paths: {
|
|
53
|
+
'/health': {
|
|
54
|
+
get: {
|
|
55
|
+
operationId: 'getHealth',
|
|
56
|
+
summary: 'Health check endpoint',
|
|
57
|
+
responses: {
|
|
58
|
+
'200': {
|
|
59
|
+
description: 'Service is healthy',
|
|
60
|
+
content: {
|
|
61
|
+
'application/json': {
|
|
62
|
+
schema: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
status: { type: 'string' },
|
|
66
|
+
uptime: { type: 'number' },
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
'/users/{id}': {
|
|
76
|
+
get: {
|
|
77
|
+
operationId: 'getUserById',
|
|
78
|
+
summary: 'Get user by ID',
|
|
79
|
+
parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
|
|
80
|
+
responses: {
|
|
81
|
+
'200': {
|
|
82
|
+
description: 'User found',
|
|
83
|
+
content: {
|
|
84
|
+
'application/json': {
|
|
85
|
+
schema: {
|
|
86
|
+
type: 'object',
|
|
87
|
+
properties: {
|
|
88
|
+
id: { type: 'string' },
|
|
89
|
+
name: { type: 'string' },
|
|
90
|
+
email: { type: 'string' },
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
baseUrl: 'https://internal.example.com',
|
|
102
|
+
staticAuth: {
|
|
103
|
+
jwt: process.env.INTERNAL_API_TOKEN!,
|
|
104
|
+
},
|
|
105
|
+
}),
|
|
106
|
+
],
|
|
107
|
+
})
|
|
108
|
+
class IntegrationHub {}
|
|
109
|
+
// Tools: github:createIssue, jira:createTicket, internal:getHealth, internal:getUserById
|
|
110
|
+
|
|
111
|
+
@FrontMcp({
|
|
112
|
+
info: { name: 'multi-api-server', version: '1.0.0' },
|
|
113
|
+
apps: [IntegrationHub],
|
|
114
|
+
http: { port: 3000 },
|
|
115
|
+
})
|
|
116
|
+
class MyServer {}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## What This Demonstrates
|
|
120
|
+
|
|
121
|
+
- Registering multiple adapters in a single `@App` with unique names for tool namespacing
|
|
122
|
+
- Using `additionalHeaders` for header-based authentication (GitHub token)
|
|
123
|
+
- Providing an inline `spec` object instead of a remote `url` for APIs without hosted specs
|
|
124
|
+
- Each adapter's tools are namespaced: `github:*`, `jira:*`, `internal:*`
|
|
125
|
+
- Only one of `url` or `spec` should be provided per adapter; `spec` takes precedence
|
|
126
|
+
|
|
127
|
+
## Related
|
|
128
|
+
|
|
129
|
+
- See `official-adapters` for spec polling, `securityResolver`, and the adapter vs plugin comparison
|
|
130
|
+
- See `decorators-guide` for the `@Adapter` decorator and how adapters fit in the hierarchy
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cache-and-feature-flags
|
|
3
|
+
reference: official-plugins
|
|
4
|
+
level: intermediate
|
|
5
|
+
description: 'Demonstrates combining the Cache plugin for tool result caching with the Feature Flags plugin for gating tools behind flags.'
|
|
6
|
+
tags: [development, feature-flags, cache, plugins, feature, flags]
|
|
7
|
+
features:
|
|
8
|
+
- 'Combining `CachePlugin` and `FeatureFlagPlugin` in the same server'
|
|
9
|
+
- 'Using `toolPatterns` glob patterns to cache groups of tools without per-tool configuration'
|
|
10
|
+
- 'Per-tool `cache` metadata with custom `ttl` (seconds) and `slideWindow` for TTL refresh on hits'
|
|
11
|
+
- 'Using `cache: true` for simple default-TTL caching'
|
|
12
|
+
- "Gating a tool with `featureFlag: 'beta-search'` -- the tool is hidden from `list_tools` when the flag is off"
|
|
13
|
+
- 'Accessing `this.featureFlags.isEnabled()` inside a tool for runtime flag checks'
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Cache Plugin and Feature Flags Plugin
|
|
17
|
+
|
|
18
|
+
Demonstrates combining the Cache plugin for tool result caching with the Feature Flags plugin for gating tools behind flags.
|
|
19
|
+
|
|
20
|
+
## Code
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// src/server.ts
|
|
24
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
25
|
+
import CachePlugin from '@frontmcp/plugin-cache';
|
|
26
|
+
import FeatureFlagPlugin from '@frontmcp/plugin-feature-flags';
|
|
27
|
+
|
|
28
|
+
@App({
|
|
29
|
+
name: 'api',
|
|
30
|
+
tools: [GetWeatherTool, GetUserProfileTool, BetaSearchTool],
|
|
31
|
+
})
|
|
32
|
+
class ApiApp {}
|
|
33
|
+
|
|
34
|
+
@FrontMcp({
|
|
35
|
+
info: { name: 'cached-flagged-server', version: '1.0.0' },
|
|
36
|
+
apps: [ApiApp],
|
|
37
|
+
plugins: [
|
|
38
|
+
CachePlugin.init({
|
|
39
|
+
type: 'memory',
|
|
40
|
+
defaultTTL: 3600,
|
|
41
|
+
toolPatterns: ['api:get-*', 'search:*'],
|
|
42
|
+
bypassHeader: 'x-frontmcp-disable-cache',
|
|
43
|
+
}),
|
|
44
|
+
FeatureFlagPlugin.init({
|
|
45
|
+
adapter: 'static',
|
|
46
|
+
flags: {
|
|
47
|
+
'beta-search': true,
|
|
48
|
+
'experimental-agent': false,
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
})
|
|
53
|
+
class MyServer {}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// src/tools/get-weather.tool.ts
|
|
58
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
59
|
+
import { z } from 'zod';
|
|
60
|
+
|
|
61
|
+
// Per-tool cache metadata with custom TTL and sliding window
|
|
62
|
+
@Tool({
|
|
63
|
+
name: 'get_weather',
|
|
64
|
+
description: 'Get current weather for a city',
|
|
65
|
+
inputSchema: {
|
|
66
|
+
city: z.string().describe('City name'),
|
|
67
|
+
},
|
|
68
|
+
cache: {
|
|
69
|
+
ttl: 1800,
|
|
70
|
+
slideWindow: true,
|
|
71
|
+
},
|
|
72
|
+
})
|
|
73
|
+
class GetWeatherTool extends ToolContext {
|
|
74
|
+
async execute(input: { city: string }) {
|
|
75
|
+
const weather = await this.get(WeatherService).getCurrent(input.city);
|
|
76
|
+
return { city: input.city, temperature: weather.temp, condition: weather.condition };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
// src/tools/beta-search.tool.ts
|
|
83
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
84
|
+
import { z } from 'zod';
|
|
85
|
+
|
|
86
|
+
// Tool gated behind a feature flag -- hidden from list_tools when flag is off
|
|
87
|
+
@Tool({
|
|
88
|
+
name: 'beta_search',
|
|
89
|
+
description: 'New search algorithm (beta)',
|
|
90
|
+
inputSchema: {
|
|
91
|
+
query: z.string(),
|
|
92
|
+
},
|
|
93
|
+
featureFlag: 'beta-search',
|
|
94
|
+
cache: true,
|
|
95
|
+
})
|
|
96
|
+
class BetaSearchTool extends ToolContext {
|
|
97
|
+
async execute(input: { query: string }) {
|
|
98
|
+
const enabled = await this.featureFlags.isEnabled('beta-search');
|
|
99
|
+
const results = await this.get(SearchService).search(input.query);
|
|
100
|
+
return { results, algorithm: 'v2-beta' };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## What This Demonstrates
|
|
106
|
+
|
|
107
|
+
- Combining `CachePlugin` and `FeatureFlagPlugin` in the same server
|
|
108
|
+
- Using `toolPatterns` glob patterns to cache groups of tools without per-tool configuration
|
|
109
|
+
- Per-tool `cache` metadata with custom `ttl` (seconds) and `slideWindow` for TTL refresh on hits
|
|
110
|
+
- Using `cache: true` for simple default-TTL caching
|
|
111
|
+
- Gating a tool with `featureFlag: 'beta-search'` -- the tool is hidden from `list_tools` when the flag is off
|
|
112
|
+
- Accessing `this.featureFlags.isEnabled()` inside a tool for runtime flag checks
|
|
113
|
+
|
|
114
|
+
## Related
|
|
115
|
+
|
|
116
|
+
- See `official-plugins` for all plugin configuration options, Redis cache, and external flag adapters
|
|
117
|
+
- See `create-tool-annotations` for additional tool metadata like `readOnlyHint` and `destructiveHint`
|
package/catalog/frontmcp-development/examples/official-plugins/production-multi-plugin-setup.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: production-multi-plugin-setup
|
|
3
|
+
reference: official-plugins
|
|
4
|
+
level: advanced
|
|
5
|
+
description: 'Demonstrates a production-ready server configuration combining CodeCall, Remember, Approval, Cache, and Feature Flags plugins with Redis storage and external flag services.'
|
|
6
|
+
tags: [development, feature-flags, redis, keyword-search, cache, approval]
|
|
7
|
+
features:
|
|
8
|
+
- 'Configuring all 5 stable official plugins together in a production server'
|
|
9
|
+
- 'CodeCall in `codecall_only` mode with TF-IDF search and synonym expansion for semantic tool discovery'
|
|
10
|
+
- 'Remember plugin with Redis storage, encryption enabled, and LLM-accessible memory tools'
|
|
11
|
+
- 'Approval plugin in `webhook` mode with external PKCE-secured approval flow and audit logging'
|
|
12
|
+
- 'Cache plugin with Redis storage and 24-hour default TTL'
|
|
13
|
+
- 'Feature Flags with LaunchDarkly integration for external flag management'
|
|
14
|
+
- 'Per-tool `approval` metadata with risk level and scope configuration'
|
|
15
|
+
- 'Per-tool `featureFlag` with a `defaultValue` fallback if flag evaluation fails'
|
|
16
|
+
- 'Using `this.approval.isApproved()` and `this.remember.set()` together in a single tool'
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Production Multi-Plugin Setup
|
|
20
|
+
|
|
21
|
+
Demonstrates a production-ready server configuration combining CodeCall, Remember, Approval, Cache, and Feature Flags plugins with Redis storage and external flag services.
|
|
22
|
+
|
|
23
|
+
## Code
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// src/server.ts
|
|
27
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
28
|
+
import CodeCallPlugin from '@frontmcp/plugin-codecall';
|
|
29
|
+
import RememberPlugin from '@frontmcp/plugin-remember';
|
|
30
|
+
import { ApprovalPlugin } from '@frontmcp/plugin-approval';
|
|
31
|
+
import CachePlugin from '@frontmcp/plugin-cache';
|
|
32
|
+
import FeatureFlagPlugin from '@frontmcp/plugin-feature-flags';
|
|
33
|
+
|
|
34
|
+
@App({ name: 'core', tools: [ReadDataTool, WriteDataTool, DeleteDataTool] })
|
|
35
|
+
class CoreApp {}
|
|
36
|
+
|
|
37
|
+
@FrontMcp({
|
|
38
|
+
info: { name: 'production-server', version: '1.0.0' },
|
|
39
|
+
apps: [CoreApp],
|
|
40
|
+
plugins: [
|
|
41
|
+
CodeCallPlugin.init({
|
|
42
|
+
mode: 'codecall_only',
|
|
43
|
+
topK: 8,
|
|
44
|
+
maxDefinitions: 8,
|
|
45
|
+
vm: {
|
|
46
|
+
preset: 'secure',
|
|
47
|
+
timeoutMs: 5000,
|
|
48
|
+
allowLoops: false,
|
|
49
|
+
},
|
|
50
|
+
embedding: {
|
|
51
|
+
strategy: 'tfidf',
|
|
52
|
+
synonymExpansion: { enabled: true },
|
|
53
|
+
},
|
|
54
|
+
}),
|
|
55
|
+
|
|
56
|
+
RememberPlugin.init({
|
|
57
|
+
type: 'redis',
|
|
58
|
+
config: { host: process.env.REDIS_HOST!, port: 6379 },
|
|
59
|
+
keyPrefix: 'remember:',
|
|
60
|
+
encryption: { enabled: true },
|
|
61
|
+
tools: { enabled: true },
|
|
62
|
+
}),
|
|
63
|
+
|
|
64
|
+
ApprovalPlugin.init({
|
|
65
|
+
mode: 'webhook',
|
|
66
|
+
webhook: {
|
|
67
|
+
url: 'https://approval.example.com/webhook',
|
|
68
|
+
challengeTtl: 300,
|
|
69
|
+
callbackPath: '/approval/callback',
|
|
70
|
+
},
|
|
71
|
+
enableAudit: true,
|
|
72
|
+
maxDelegationDepth: 3,
|
|
73
|
+
}),
|
|
74
|
+
|
|
75
|
+
CachePlugin.init({
|
|
76
|
+
type: 'redis',
|
|
77
|
+
config: { host: process.env.REDIS_HOST!, port: 6379 },
|
|
78
|
+
defaultTTL: 86400,
|
|
79
|
+
}),
|
|
80
|
+
|
|
81
|
+
FeatureFlagPlugin.init({
|
|
82
|
+
adapter: 'launchdarkly',
|
|
83
|
+
config: { sdkKey: process.env.LD_SDK_KEY! },
|
|
84
|
+
}),
|
|
85
|
+
],
|
|
86
|
+
})
|
|
87
|
+
class ProductionServer {}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// src/tools/delete-data.tool.ts
|
|
92
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
93
|
+
import { z } from 'zod';
|
|
94
|
+
|
|
95
|
+
@Tool({
|
|
96
|
+
name: 'delete_data',
|
|
97
|
+
description: 'Permanently delete a data record',
|
|
98
|
+
inputSchema: {
|
|
99
|
+
recordId: z.string(),
|
|
100
|
+
confirm: z.boolean(),
|
|
101
|
+
},
|
|
102
|
+
approval: {
|
|
103
|
+
required: true,
|
|
104
|
+
defaultScope: 'session',
|
|
105
|
+
category: 'write',
|
|
106
|
+
riskLevel: 'high',
|
|
107
|
+
approvalMessage: 'Allow data deletion for this session?',
|
|
108
|
+
},
|
|
109
|
+
featureFlag: { key: 'enable-delete', defaultValue: false },
|
|
110
|
+
})
|
|
111
|
+
class DeleteDataTool extends ToolContext {
|
|
112
|
+
async execute(input: { recordId: string; confirm: boolean }) {
|
|
113
|
+
if (!input.confirm) {
|
|
114
|
+
return { deleted: false, reason: 'Confirmation required' };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const isApproved = await this.approval.isApproved('delete_data');
|
|
118
|
+
if (!isApproved) {
|
|
119
|
+
return { deleted: false, reason: 'Awaiting approval' };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const db = this.get(DatabaseToken);
|
|
123
|
+
await db.deleteRecord(input.recordId);
|
|
124
|
+
|
|
125
|
+
await this.remember.set(`deleted:${input.recordId}`, new Date().toISOString());
|
|
126
|
+
|
|
127
|
+
return { deleted: true, recordId: input.recordId };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## What This Demonstrates
|
|
133
|
+
|
|
134
|
+
- Configuring all 5 stable official plugins together in a production server
|
|
135
|
+
- CodeCall in `codecall_only` mode with TF-IDF search and synonym expansion for semantic tool discovery
|
|
136
|
+
- Remember plugin with Redis storage, encryption enabled, and LLM-accessible memory tools
|
|
137
|
+
- Approval plugin in `webhook` mode with external PKCE-secured approval flow and audit logging
|
|
138
|
+
- Cache plugin with Redis storage and 24-hour default TTL
|
|
139
|
+
- Feature Flags with LaunchDarkly integration for external flag management
|
|
140
|
+
- Per-tool `approval` metadata with risk level and scope configuration
|
|
141
|
+
- Per-tool `featureFlag` with a `defaultValue` fallback if flag evaluation fails
|
|
142
|
+
- Using `this.approval.isApproved()` and `this.remember.set()` together in a single tool
|
|
143
|
+
|
|
144
|
+
## Related
|
|
145
|
+
|
|
146
|
+
- See `official-plugins` for all plugin options, storage types, and troubleshooting
|
|
147
|
+
- See `create-plugin-hooks` for adding custom lifecycle hooks alongside official plugins
|
package/catalog/frontmcp-development/examples/official-plugins/remember-plugin-session-memory.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remember-plugin-session-memory
|
|
3
|
+
reference: official-plugins
|
|
4
|
+
level: basic
|
|
5
|
+
description: 'Demonstrates installing the Remember plugin and using `this.remember` in tools to store and retrieve session memory.'
|
|
6
|
+
tags: [development, session, plugins, remember, plugin, memory]
|
|
7
|
+
features:
|
|
8
|
+
- "Installing `RememberPlugin` with `type: 'memory'` for development"
|
|
9
|
+
- 'Enabling `tools: { enabled: true }` to expose LLM-callable memory tools (`remember_this`, `recall`, etc.)'
|
|
10
|
+
- 'Using `this.remember.set()` with default `session` scope and explicit `user` scope'
|
|
11
|
+
- 'Using `this.remember.get()` with a `defaultValue` fallback'
|
|
12
|
+
- 'Using `this.remember.knows()` to check key existence without retrieving the value'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Remember Plugin for Session Memory
|
|
16
|
+
|
|
17
|
+
Demonstrates installing the Remember plugin and using `this.remember` in tools to store and retrieve session memory.
|
|
18
|
+
|
|
19
|
+
## Code
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// src/server.ts
|
|
23
|
+
import { FrontMcp, App } from '@frontmcp/sdk';
|
|
24
|
+
import RememberPlugin from '@frontmcp/plugin-remember';
|
|
25
|
+
|
|
26
|
+
@App({ name: 'my-app', tools: [PreferencesTool, GreetingTool] })
|
|
27
|
+
class MyApp {}
|
|
28
|
+
|
|
29
|
+
@FrontMcp({
|
|
30
|
+
info: { name: 'memory-server', version: '1.0.0' },
|
|
31
|
+
apps: [MyApp],
|
|
32
|
+
plugins: [
|
|
33
|
+
RememberPlugin.init({
|
|
34
|
+
type: 'memory',
|
|
35
|
+
tools: { enabled: true },
|
|
36
|
+
}),
|
|
37
|
+
],
|
|
38
|
+
})
|
|
39
|
+
class MyServer {}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// src/tools/preferences.tool.ts
|
|
44
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
45
|
+
import { z } from 'zod';
|
|
46
|
+
|
|
47
|
+
@Tool({
|
|
48
|
+
name: 'set_preferences',
|
|
49
|
+
description: 'Save user preferences for the session',
|
|
50
|
+
inputSchema: {
|
|
51
|
+
theme: z.enum(['light', 'dark']).describe('UI theme preference'),
|
|
52
|
+
language: z.string().describe('Preferred language code'),
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
class PreferencesTool extends ToolContext {
|
|
56
|
+
async execute(input: { theme: string; language: string }) {
|
|
57
|
+
await this.remember.set('theme', input.theme);
|
|
58
|
+
await this.remember.set('language', input.language, { scope: 'user' });
|
|
59
|
+
|
|
60
|
+
return { saved: true, theme: input.theme, language: input.language };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
// src/tools/greeting.tool.ts
|
|
67
|
+
import { Tool, ToolContext } from '@frontmcp/sdk';
|
|
68
|
+
import { z } from 'zod';
|
|
69
|
+
|
|
70
|
+
@Tool({
|
|
71
|
+
name: 'get_greeting',
|
|
72
|
+
description: 'Get a personalized greeting using remembered preferences',
|
|
73
|
+
inputSchema: {
|
|
74
|
+
name: z.string().describe('User name'),
|
|
75
|
+
},
|
|
76
|
+
})
|
|
77
|
+
class GreetingTool extends ToolContext {
|
|
78
|
+
async execute(input: { name: string }) {
|
|
79
|
+
const theme = await this.remember.get('theme', { defaultValue: 'light' });
|
|
80
|
+
const language = await this.remember.get('language', { defaultValue: 'en' });
|
|
81
|
+
const hasOnboarded = await this.remember.knows('onboarding_complete');
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
greeting: `Hello ${input.name}!`,
|
|
85
|
+
theme,
|
|
86
|
+
language,
|
|
87
|
+
showOnboarding: !hasOnboarded,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## What This Demonstrates
|
|
94
|
+
|
|
95
|
+
- Installing `RememberPlugin` with `type: 'memory'` for development
|
|
96
|
+
- Enabling `tools: { enabled: true }` to expose LLM-callable memory tools (`remember_this`, `recall`, etc.)
|
|
97
|
+
- Using `this.remember.set()` with default `session` scope and explicit `user` scope
|
|
98
|
+
- Using `this.remember.get()` with a `defaultValue` fallback
|
|
99
|
+
- Using `this.remember.knows()` to check key existence without retrieving the value
|
|
100
|
+
|
|
101
|
+
## Related
|
|
102
|
+
|
|
103
|
+
- See `official-plugins` for Redis storage, Vercel KV, memory scopes, and all Remember API methods
|
|
104
|
+
- See `create-plugin-hooks` for building custom plugins with lifecycle hooks
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-adapter
|
|
3
|
+
description: Build adapters that generate MCP tools and resources from external sources automatically
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Creating Custom Adapters
|
|
2
7
|
|
|
3
8
|
Build adapters that automatically generate MCP tools, resources, and prompts from external sources — databases, GraphQL schemas, proprietary APIs, or any definition format.
|
|
@@ -159,6 +164,15 @@ Creates a `DynamicAdapter` subclass in `src/adapters/my-adapter.adapter.ts`.
|
|
|
159
164
|
| Duplicate tool name error | Multiple adapters produce tools with the same name | Use unique `name` parameter in `init()` to namespace tools |
|
|
160
165
|
| Adapter not found at runtime | Registered in wrong `@App` or not in `adapters` array | Ensure `.init()` result is in the `adapters` array of the correct `@App` |
|
|
161
166
|
|
|
167
|
+
## Examples
|
|
168
|
+
|
|
169
|
+
| Example | Level | Description |
|
|
170
|
+
| ------------------------------------------------------------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
171
|
+
| [`basic-api-adapter`](../examples/create-adapter/basic-api-adapter.md) | Basic | A minimal adapter that fetches operation definitions from an external API and generates MCP tools. |
|
|
172
|
+
| [`namespaced-adapter`](../examples/create-adapter/namespaced-adapter.md) | Intermediate | An adapter that namespaces generated tools to avoid collisions and includes proper error handling for startup failures. |
|
|
173
|
+
|
|
174
|
+
> See all examples in [`examples/create-adapter/`](../examples/create-adapter/)
|
|
175
|
+
|
|
162
176
|
## Reference
|
|
163
177
|
|
|
164
178
|
- [Adapter Documentation](https://docs.agentfront.dev/frontmcp/adapters/overview)
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-agent-llm-config
|
|
3
|
+
description: Reference for supported LLM provider configurations including Anthropic and OpenAI
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Agent LLM Configuration Reference
|
|
2
7
|
|
|
3
8
|
## Supported Providers
|
|
@@ -44,3 +49,12 @@ apiKey: 'sk-...';
|
|
|
44
49
|
| Anthropic | `claude-opus-4-20250514` | Most capable |
|
|
45
50
|
| OpenAI | `gpt-4o` | General purpose |
|
|
46
51
|
| OpenAI | `gpt-4o-mini` | Fast, cost-effective |
|
|
52
|
+
|
|
53
|
+
## Examples
|
|
54
|
+
|
|
55
|
+
| Example | Level | Description |
|
|
56
|
+
| ----------------------------------------------------------------------------- | ----- | -------------------------------------------------------------------------- |
|
|
57
|
+
| [`anthropic-config`](../examples/create-agent-llm-config/anthropic-config.md) | Basic | Configuring an agent with the Anthropic provider and common model options. |
|
|
58
|
+
| [`openai-config`](../examples/create-agent-llm-config/openai-config.md) | Basic | Configuring an agent with the OpenAI provider and different model options. |
|
|
59
|
+
|
|
60
|
+
> See all examples in [`examples/create-agent-llm-config/`](../examples/create-agent-llm-config/)
|