@frontmcp/skills 1.1.2 → 1.2.1

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.
Files changed (176) hide show
  1. package/catalog/TEMPLATE.md +16 -11
  2. package/catalog/frontmcp-authorities/SKILL.md +116 -11
  3. package/catalog/frontmcp-authorities/references/authority-profiles.md +39 -36
  4. package/catalog/frontmcp-authorities/references/claims-mapping.md +7 -0
  5. package/catalog/frontmcp-authorities/references/custom-evaluators.md +63 -14
  6. package/catalog/frontmcp-channels/SKILL.md +36 -0
  7. package/catalog/frontmcp-channels/examples/channel-sources/file-watcher.md +8 -2
  8. package/catalog/frontmcp-channels/examples/channel-sources/replay-buffer.md +111 -30
  9. package/catalog/frontmcp-channels/examples/channel-two-way/whatsapp-bridge.md +45 -3
  10. package/catalog/frontmcp-channels/references/channel-sources.md +11 -3
  11. package/catalog/frontmcp-channels/references/channel-two-way.md +60 -89
  12. package/catalog/frontmcp-config/SKILL.md +111 -8
  13. package/catalog/frontmcp-config/examples/configure-auth-modes/local-self-signed-tokens.md +4 -4
  14. package/catalog/frontmcp-config/examples/configure-auth-modes/remote-enterprise-oauth.md +7 -1
  15. package/catalog/frontmcp-config/examples/configure-deployment-targets/distributed-ha-config.md +1 -1
  16. package/catalog/frontmcp-config/examples/configure-deployment-targets/json-schema-ide-support.md +1 -1
  17. package/catalog/frontmcp-config/examples/configure-deployment-targets/multi-target-with-security.md +12 -9
  18. package/catalog/frontmcp-config/examples/configure-http/cors-restricted-origins.md +2 -2
  19. package/catalog/frontmcp-config/examples/configure-http/entry-path-reverse-proxy.md +1 -1
  20. package/catalog/frontmcp-config/examples/configure-security-headers/csp-report-only.md +1 -1
  21. package/catalog/frontmcp-config/examples/configure-security-headers/full-production-headers.md +1 -1
  22. package/catalog/frontmcp-config/examples/configure-skills-http/audit-log-basic.md +76 -0
  23. package/catalog/frontmcp-config/examples/configure-skills-http/audit-log-redis.md +116 -0
  24. package/catalog/frontmcp-config/examples/configure-skills-http/inject-instructions.md +59 -0
  25. package/catalog/frontmcp-config/references/configure-auth-modes.md +5 -5
  26. package/catalog/frontmcp-config/references/configure-deployment-targets.md +27 -24
  27. package/catalog/frontmcp-config/references/configure-http.md +14 -10
  28. package/catalog/frontmcp-config/references/configure-security-headers.md +2 -2
  29. package/catalog/frontmcp-config/references/configure-session.md +25 -25
  30. package/catalog/frontmcp-config/references/configure-skills-http.md +157 -0
  31. package/catalog/frontmcp-config/references/configure-throttle.md +1 -1
  32. package/catalog/frontmcp-config/references/configure-transport.md +2 -2
  33. package/catalog/frontmcp-deployment/SKILL.md +112 -9
  34. package/catalog/frontmcp-deployment/examples/build-for-browser/browser-build-with-custom-entry.md +23 -11
  35. package/catalog/frontmcp-deployment/examples/build-for-browser/browser-crypto-and-storage.md +44 -17
  36. package/catalog/frontmcp-deployment/examples/build-for-browser/react-provider-setup.md +53 -21
  37. package/catalog/frontmcp-deployment/examples/build-for-cli/cli-binary-build.md +1 -1
  38. package/catalog/frontmcp-deployment/examples/build-for-cli/unix-socket-daemon.md +1 -1
  39. package/catalog/frontmcp-deployment/examples/build-for-mcpb/mcpb-bundle-build.md +1 -1
  40. package/catalog/frontmcp-deployment/examples/build-for-sdk/connect-openai.md +1 -1
  41. package/catalog/frontmcp-deployment/examples/build-for-sdk/multi-platform-connect.md +1 -1
  42. package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/basic-worker-deploy.md +7 -8
  43. package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-custom-domain.md +8 -6
  44. package/catalog/frontmcp-deployment/examples/deploy-to-cloudflare/worker-with-kv-storage.md +5 -4
  45. package/catalog/frontmcp-deployment/examples/deploy-to-lambda/cdk-deployment.md +8 -5
  46. package/catalog/frontmcp-deployment/examples/deploy-to-lambda/lambda-handler-with-cors.md +20 -18
  47. package/catalog/frontmcp-deployment/examples/deploy-to-lambda/sam-template-basic.md +8 -5
  48. package/catalog/frontmcp-deployment/examples/deploy-to-node/docker-compose-with-redis.md +3 -3
  49. package/catalog/frontmcp-deployment/examples/deploy-to-node/pm2-with-nginx.md +1 -1
  50. package/catalog/frontmcp-deployment/examples/deploy-to-node/resource-limits.md +2 -2
  51. package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/basic-multistage-dockerfile.md +2 -2
  52. package/catalog/frontmcp-deployment/examples/deploy-to-node-dockerfile/secure-nonroot-dockerfile.md +1 -1
  53. package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-mcp-endpoint-test.md +23 -21
  54. package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-kv.md +25 -22
  55. package/catalog/frontmcp-deployment/examples/deploy-to-vercel/vercel-with-skills-cache.md +23 -30
  56. package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/minimal-vercel-config.md +52 -28
  57. package/catalog/frontmcp-deployment/examples/deploy-to-vercel-config/vercel-config-with-security-headers.md +32 -55
  58. package/catalog/frontmcp-deployment/examples/mcp-client-integration/http-remote.md +9 -0
  59. package/catalog/frontmcp-deployment/references/build-for-browser.md +40 -17
  60. package/catalog/frontmcp-deployment/references/build-for-cli.md +8 -8
  61. package/catalog/frontmcp-deployment/references/deploy-to-cloudflare.md +43 -24
  62. package/catalog/frontmcp-deployment/references/deploy-to-lambda.md +36 -25
  63. package/catalog/frontmcp-deployment/references/deploy-to-node-dockerfile.md +56 -14
  64. package/catalog/frontmcp-deployment/references/deploy-to-node.md +9 -6
  65. package/catalog/frontmcp-deployment/references/deploy-to-vercel-config.md +57 -58
  66. package/catalog/frontmcp-deployment/references/deploy-to-vercel.md +49 -59
  67. package/catalog/frontmcp-deployment/references/mcp-client-integration.md +2 -0
  68. package/catalog/frontmcp-development/SKILL.md +186 -11
  69. package/catalog/frontmcp-development/examples/create-agent/custom-multi-pass-agent.md +1 -1
  70. package/catalog/frontmcp-development/examples/create-agent/nested-agents-with-swarm.md +30 -27
  71. package/catalog/frontmcp-development/examples/create-job/job-with-permissions.md +13 -8
  72. package/catalog/frontmcp-development/examples/create-provider/basic-database-provider.md +33 -23
  73. package/catalog/frontmcp-development/examples/create-provider/config-and-api-providers.md +19 -10
  74. package/catalog/frontmcp-development/examples/create-tool/tool-with-rate-limiting-and-progress.md +3 -3
  75. package/catalog/frontmcp-development/examples/create-workflow/webhook-triggered-workflow.md +6 -4
  76. package/catalog/frontmcp-development/examples/decorators-guide/agent-skill-job-workflow.md +1 -1
  77. package/catalog/frontmcp-development/examples/decorators-guide/basic-server-with-app-and-tools.md +13 -8
  78. package/catalog/frontmcp-development/examples/decorators-guide/multi-app-with-plugins-and-providers.md +50 -23
  79. package/catalog/frontmcp-development/references/create-agent.md +47 -30
  80. package/catalog/frontmcp-development/references/create-job.md +69 -54
  81. package/catalog/frontmcp-development/references/create-plugin-hooks.md +45 -28
  82. package/catalog/frontmcp-development/references/create-plugin.md +10 -8
  83. package/catalog/frontmcp-development/references/create-prompt.md +3 -3
  84. package/catalog/frontmcp-development/references/create-provider.md +91 -51
  85. package/catalog/frontmcp-development/references/create-resource.md +3 -3
  86. package/catalog/frontmcp-development/references/create-skill.md +2 -2
  87. package/catalog/frontmcp-development/references/create-tool.md +7 -7
  88. package/catalog/frontmcp-development/references/create-workflow.md +8 -10
  89. package/catalog/frontmcp-development/references/decorators-guide.md +92 -56
  90. package/catalog/frontmcp-development/references/official-plugins.md +4 -3
  91. package/catalog/frontmcp-development/references/openapi-adapter.md +1 -1
  92. package/catalog/frontmcp-extensibility/SKILL.md +70 -10
  93. package/catalog/frontmcp-extensibility/examples/skill-audit-log/custom-store.md +197 -0
  94. package/catalog/frontmcp-extensibility/examples/skill-audit-log/verify-chain.md +68 -0
  95. package/catalog/frontmcp-extensibility/examples/vectoriadb/product-catalog-search.md +3 -5
  96. package/catalog/frontmcp-extensibility/examples/vectoriadb/semantic-search-with-persistence.md +4 -11
  97. package/catalog/frontmcp-extensibility/examples/vectoriadb/tfidf-keyword-search.md +41 -30
  98. package/catalog/frontmcp-extensibility/references/skill-audit-log.md +233 -0
  99. package/catalog/frontmcp-extensibility/references/vectoriadb.md +73 -63
  100. package/catalog/frontmcp-guides/SKILL.md +84 -27
  101. package/catalog/frontmcp-guides/examples/example-knowledge-base/agent-and-plugin.md +72 -62
  102. package/catalog/frontmcp-guides/examples/example-knowledge-base/vector-search-and-resources.md +32 -43
  103. package/catalog/frontmcp-guides/examples/example-task-manager/auth-and-crud-tools.md +24 -17
  104. package/catalog/frontmcp-guides/examples/example-task-manager/authenticated-e2e-tests.md +23 -21
  105. package/catalog/frontmcp-guides/examples/example-task-manager/redis-provider-with-di.md +47 -39
  106. package/catalog/frontmcp-guides/examples/example-weather-api/server-and-app-setup.md +16 -6
  107. package/catalog/frontmcp-guides/examples/example-weather-api/unit-and-e2e-tests.md +9 -8
  108. package/catalog/frontmcp-guides/references/example-knowledge-base.md +192 -265
  109. package/catalog/frontmcp-guides/references/example-task-manager.md +60 -54
  110. package/catalog/frontmcp-guides/references/example-weather-api.md +22 -24
  111. package/catalog/frontmcp-observability/SKILL.md +66 -2
  112. package/catalog/frontmcp-observability/examples/telemetry-api/skill-counters.md +100 -0
  113. package/catalog/frontmcp-observability/examples/tracing-setup/production-tracing.md +7 -2
  114. package/catalog/frontmcp-observability/examples/vendor-integrations/coralogix-setup.md +6 -2
  115. package/catalog/frontmcp-observability/references/telemetry-api.md +72 -8
  116. package/catalog/frontmcp-observability/references/testing-observability.md +33 -49
  117. package/catalog/frontmcp-observability/references/tracing-setup.md +12 -5
  118. package/catalog/frontmcp-observability/references/vendor-integrations.md +46 -1
  119. package/catalog/frontmcp-production-readiness/SKILL.md +134 -3
  120. package/catalog/frontmcp-production-readiness/examples/common-checklist/caching-and-performance.md +57 -36
  121. package/catalog/frontmcp-production-readiness/examples/common-checklist/observability-setup.md +1 -1
  122. package/catalog/frontmcp-production-readiness/examples/common-checklist/security-hardening.md +102 -6
  123. package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/daemon-socket-config.md +2 -1
  124. package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/graceful-shutdown-cleanup.md +66 -58
  125. package/catalog/frontmcp-production-readiness/examples/production-cli-daemon/security-and-permissions.md +5 -3
  126. package/catalog/frontmcp-production-readiness/examples/production-cloudflare/durable-objects-state.md +2 -1
  127. package/catalog/frontmcp-production-readiness/examples/production-cloudflare/wrangler-config.md +55 -76
  128. package/catalog/frontmcp-production-readiness/examples/production-lambda/cold-start-connection-reuse.md +43 -40
  129. package/catalog/frontmcp-production-readiness/examples/production-lambda/sam-template.md +63 -94
  130. package/catalog/frontmcp-production-readiness/examples/production-lambda/scaling-and-monitoring.md +28 -18
  131. package/catalog/frontmcp-production-readiness/examples/production-node-sdk/multi-instance-cleanup.md +29 -14
  132. package/catalog/frontmcp-production-readiness/examples/production-node-server/graceful-shutdown.md +58 -42
  133. package/catalog/frontmcp-production-readiness/examples/production-node-server/redis-session-scaling.md +5 -2
  134. package/catalog/frontmcp-production-readiness/examples/production-vercel/cold-start-optimization.md +41 -24
  135. package/catalog/frontmcp-production-readiness/examples/production-vercel/vercel-edge-config.md +56 -65
  136. package/catalog/frontmcp-production-readiness/references/common-checklist.md +17 -5
  137. package/catalog/frontmcp-production-readiness/references/production-cli-daemon.md +5 -5
  138. package/catalog/frontmcp-production-readiness/references/production-cloudflare.md +5 -5
  139. package/catalog/frontmcp-production-readiness/references/production-lambda.md +5 -5
  140. package/catalog/frontmcp-production-readiness/references/production-node-sdk.md +5 -5
  141. package/catalog/frontmcp-production-readiness/references/production-node-server.md +1 -1
  142. package/catalog/frontmcp-production-readiness/references/production-vercel.md +5 -5
  143. package/catalog/frontmcp-setup/SKILL.md +88 -0
  144. package/catalog/frontmcp-setup/examples/project-structure-nx/nx-workspace-with-apps.md +10 -4
  145. package/catalog/frontmcp-setup/examples/project-structure-standalone/dev-workflow-commands.md +21 -8
  146. package/catalog/frontmcp-setup/examples/readme-guide/node-server-readme.md +3 -3
  147. package/catalog/frontmcp-setup/references/multi-app-composition.md +4 -3
  148. package/catalog/frontmcp-setup/references/project-structure-nx.md +15 -6
  149. package/catalog/frontmcp-setup/references/project-structure-standalone.md +18 -15
  150. package/catalog/frontmcp-setup/references/readme-guide.md +1 -1
  151. package/catalog/frontmcp-setup/references/setup-project.md +19 -5
  152. package/catalog/frontmcp-setup/references/setup-redis.md +27 -39
  153. package/catalog/frontmcp-setup/references/setup-sqlite.md +25 -18
  154. package/catalog/frontmcp-testing/SKILL.md +102 -15
  155. package/catalog/frontmcp-testing/examples/setup-testing/unit-test-tool-resource-prompt.md +3 -3
  156. package/catalog/frontmcp-testing/examples/test-auth/oauth-flow-test.md +50 -39
  157. package/catalog/frontmcp-testing/examples/test-auth/role-based-access-test.md +52 -29
  158. package/catalog/frontmcp-testing/examples/test-auth/token-factory-test.md +37 -20
  159. package/catalog/frontmcp-testing/examples/test-direct-client/basic-create-test.md +25 -15
  160. package/catalog/frontmcp-testing/examples/test-direct-client/openai-claude-format-test.md +27 -21
  161. package/catalog/frontmcp-testing/examples/test-e2e-handler/basic-e2e-test.md +29 -20
  162. package/catalog/frontmcp-testing/examples/test-e2e-handler/manual-client-with-transport.md +5 -3
  163. package/catalog/frontmcp-testing/examples/test-e2e-handler/tool-call-and-error-e2e.md +35 -26
  164. package/catalog/frontmcp-testing/examples/test-tool-unit/basic-tool-test.md +8 -3
  165. package/catalog/frontmcp-testing/examples/test-tool-unit/schema-validation-test.md +4 -1
  166. package/catalog/frontmcp-testing/examples/test-tool-unit/tool-error-handling-test.md +6 -3
  167. package/catalog/frontmcp-testing/references/setup-testing.md +35 -39
  168. package/catalog/frontmcp-testing/references/test-auth.md +86 -43
  169. package/catalog/frontmcp-testing/references/test-browser-build.md +1 -1
  170. package/catalog/frontmcp-testing/references/test-direct-client.md +29 -19
  171. package/catalog/frontmcp-testing/references/test-e2e-handler.md +31 -19
  172. package/catalog/frontmcp-testing/references/test-tool-unit.md +6 -2
  173. package/catalog/skills-manifest.json +428 -339
  174. package/package.json +1 -1
  175. package/src/manifest.d.ts +13 -0
  176. package/src/manifest.js.map +1 -1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: configure-deployment-targets
3
- description: Configure multi-target builds with frontmcp.config.ts for node, distributed, vercel, lambda, cloudflare, browser, cli, and sdk targets
3
+ description: Configure multi-target builds with frontmcp.config.ts for node, distributed, vercel, lambda, cloudflare, browser, cli, sdk, and mcpb targets
4
4
  ---
5
5
 
6
6
  # Configure Deployment Targets
@@ -29,14 +29,14 @@ FrontMCP's configuration file defines one or more deployment targets, each with
29
29
 
30
30
  ## Prerequisites
31
31
 
32
- - `@frontmcp/cli` installed
32
+ - `frontmcp` installed
33
33
  - A working FrontMCP server (see `frontmcp-development`)
34
34
 
35
35
  ## Step 1: Create Configuration File
36
36
 
37
37
  ```typescript
38
38
  // frontmcp.config.ts
39
- import { defineConfig } from '@frontmcp/cli';
39
+ import { defineConfig } from 'frontmcp';
40
40
 
41
41
  export default defineConfig({
42
42
  name: 'my-server',
@@ -70,10 +70,13 @@ export default defineConfig({
70
70
  {
71
71
  target: 'node',
72
72
  server: {
73
- http: { port: 3000, cors: { origin: 'https://app.example.com' } },
73
+ http: { port: 3000, cors: { origins: ['https://app.example.com'] } },
74
74
  csp: {
75
75
  enabled: true,
76
- directives: "default-src 'self'; upgrade-insecure-requests",
76
+ directives: {
77
+ 'default-src': "'self'",
78
+ 'upgrade-insecure-requests': '',
79
+ },
77
80
  },
78
81
  headers: {
79
82
  hsts: 'max-age=31536000; includeSubDomains',
@@ -117,25 +120,25 @@ frontmcp build --target vercel
117
120
  | `browser` | In-memory | Memory | Web browser |
118
121
  | `cli` | stdio | SQLite, memory | Standalone binary |
119
122
  | `sdk` | Direct | Configurable | Library embedding |
123
+ | `mcpb` | stdio | SQLite, memory | `.mcpb` MCP bundles |
120
124
 
121
125
  ### Server HTTP Options
122
126
 
123
- | Field | Type | Default | Description |
124
- | ------------- | ---------------- | ------- | ---------------------------- |
125
- | `port` | number | 3000 | Listen port |
126
- | `socketPath` | string | --- | Unix socket (overrides port) |
127
- | `entryPath` | string | `/` | Base path |
128
- | `cors.origin` | string | --- | CORS allowed origin |
129
- | `portRange` | [number, number] | --- | Auto-find available port |
127
+ | Field | Type | Default | Description |
128
+ | -------------- | -------- | ------- | ---------------------------- |
129
+ | `port` | number | 3000 | Listen port |
130
+ | `socketPath` | string | --- | Unix socket (overrides port) |
131
+ | `entryPath` | string | `/` | Base path |
132
+ | `cors.origins` | string[] | --- | CORS allowed origins |
130
133
 
131
134
  ### CSP Options
132
135
 
133
- | Field | Type | Default | Description |
134
- | ------------ | ------- | ------- | ------------------------------ |
135
- | `enabled` | boolean | false | Enable CSP headers |
136
- | `directives` | string | --- | Semicolon-separated directives |
137
- | `reportUri` | string | --- | Violation report URI |
138
- | `reportOnly` | boolean | false | Report-only mode |
136
+ | Field | Type | Default | Description |
137
+ | ------------ | ------------------------------------ | ------- | ---------------------- |
138
+ | `enabled` | boolean | false | Enable CSP headers |
139
+ | `directives` | `Record<string, string \| string[]>` | --- | Directive-to-value map |
140
+ | `reportUri` | string | --- | Violation report URI |
141
+ | `reportOnly` | boolean | false | Report-only mode |
139
142
 
140
143
  ### Security Headers
141
144
 
@@ -169,7 +172,7 @@ For JSON configs, add `$schema` for autocomplete:
169
172
 
170
173
  ```json
171
174
  {
172
- "$schema": "./node_modules/@frontmcp/cli/frontmcp.schema.json",
175
+ "$schema": "./node_modules/frontmcp/frontmcp.schema.json",
173
176
  "name": "my-server",
174
177
  "deployments": [{ "target": "node" }]
175
178
  }
@@ -177,11 +180,11 @@ For JSON configs, add `$schema` for autocomplete:
177
180
 
178
181
  ## Common Patterns
179
182
 
180
- | Pattern | Correct | Incorrect | Why |
181
- | -------------- | ---------------------------- | ---------------------------- | ----------------------------- |
182
- | Config helper | `defineConfig({...})` | Plain object export | Loses IDE autocomplete |
183
- | HA config | Only on `distributed` target | On `node` or `vercel` target | HA requires Redis + multi-pod |
184
- | CSP directives | Semicolon-separated string | Object or array | Schema expects a string |
183
+ | Pattern | Correct | Incorrect | Why |
184
+ | -------------- | ------------------------------------------------------ | ----------------------------------- | ------------------------------------------------------------ |
185
+ | Config helper | `defineConfig({...})` | Plain object export | Loses IDE autocomplete |
186
+ | HA config | Only on `distributed` target | On `node` or `vercel` target | HA requires Redis + multi-pod |
187
+ | CSP directives | `{ 'default-src': "'self'" }` (record of name → value) | A single semicolon-separated string | Schema is `Record<string, string \| string[]>`, not a string |
185
188
 
186
189
  ## Verification Checklist
187
190
 
@@ -27,7 +27,7 @@ Configure the HTTP server — port, CORS policy, unix sockets, and entry path pr
27
27
  - Only need rate limiting or IP filtering without changing HTTP binding -- use `configure-throttle`
28
28
  - Need to configure TLS/HTTPS termination -- handle at the reverse proxy or load balancer level, not in FrontMCP
29
29
 
30
- > **Decision:** Use this skill when you need to customize how the HTTP listener binds (port, socket, prefix) or how it handles CORS; skip if the default port 3001 with permissive CORS is sufficient.
30
+ > **Decision:** Use this skill when you need to customize how the HTTP listener binds (port, socket, prefix) or how it handles CORS; skip if the default port 3000 with permissive CORS is sufficient.
31
31
 
32
32
  ## HttpOptionsInput
33
33
 
@@ -36,7 +36,7 @@ Configure the HTTP server — port, CORS policy, unix sockets, and entry path pr
36
36
  info: { name: 'my-server', version: '1.0.0' },
37
37
  apps: [MyApp],
38
38
  http: {
39
- port: 3001, // default: 3001
39
+ port: 3000, // default: 3000
40
40
  entryPath: '', // default: '' (root)
41
41
  socketPath: undefined, // unix socket path (overrides port)
42
42
  cors: {
@@ -53,14 +53,14 @@ class Server {}
53
53
  ## Port Configuration
54
54
 
55
55
  ```typescript
56
- // Default: port 3001
56
+ // Default: port 3000
57
57
  http: {
58
- port: 3001;
58
+ port: 3000;
59
59
  }
60
60
 
61
61
  // Use environment variable
62
62
  http: {
63
- port: Number(process.env.PORT) || 3001;
63
+ port: Number(process.env.PORT) || 3000;
64
64
  }
65
65
 
66
66
  // Random port (useful for testing)
@@ -103,12 +103,16 @@ http: {
103
103
 
104
104
  ### Dynamic Origin
105
105
 
106
+ The `origin` callback uses Node-style `(origin, callback)` signature so origin checks
107
+ can be async (e.g., look up the allowlist from a database):
108
+
106
109
  ```typescript
107
110
  http: {
108
111
  cors: {
109
- origin: (origin: string) => {
110
- // Allow any *.myapp.com subdomain
111
- return origin.endsWith('.myapp.com');
112
+ origin: (origin, callback) => {
113
+ // origin is `string | undefined` (undefined for same-origin / non-browser requests)
114
+ const allowed = !!origin && origin.endsWith('.myapp.com');
115
+ callback(null, allowed);
112
116
  },
113
117
  credentials: true,
114
118
  },
@@ -167,7 +171,7 @@ curl --unix-socket /tmp/my-mcp-server.sock http://localhost/
167
171
 
168
172
  | Pattern | Correct | Incorrect | Why |
169
173
  | --------------------- | ------------------------------------------------------------ | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
170
- | Port from environment | `port: Number(process.env.PORT) \|\| 3001` | `port: process.env.PORT` | The `port` field expects a number; passing a string causes a silent bind failure |
174
+ | Port from environment | `port: Number(process.env.PORT) \|\| 3000` | `port: process.env.PORT` | The `port` field expects a number; passing a string causes a silent bind failure |
171
175
  | CORS with credentials | `cors: { origin: ['https://myapp.com'], credentials: true }` | `cors: { origin: true, credentials: true }` | Browsers reject `Access-Control-Allow-Origin: *` when credentials are enabled; you must list explicit origins |
172
176
  | Unix socket mode | `socketPath: '/tmp/my-mcp.sock'` with no `port` field | Setting both `socketPath` and `port` | When `socketPath` is set, `port` is silently ignored which can cause confusion during debugging |
173
177
  | Entry path prefix | `entryPath: '/api/mcp'` (no trailing slash) | `entryPath: '/api/mcp/'` with trailing slash | Trailing slashes cause double-slash issues in route matching (e.g., `/api/mcp//sse`) |
@@ -201,7 +205,7 @@ curl --unix-socket /tmp/my-mcp-server.sock http://localhost/
201
205
  | `EADDRINUSE` on startup | Another process is already using the configured port | Change the port, stop the other process, or use `port: 0` for a random available port |
202
206
  | CORS errors in the browser console | Origin not included in the `cors.origin` list or `credentials: true` with wildcard origin | Add the frontend origin to the `origin` array and ensure credentials and origin settings are compatible |
203
207
  | Unix socket file not created | Missing write permissions on the target directory or stale socket file from a previous run | Check directory permissions and remove the stale `.sock` file before restarting |
204
- | Routes return 404 after setting `entryPath` | Client is still requesting the root path without the prefix | Update client base URL to include the entry path (e.g., `http://localhost:3001/api/mcp`) |
208
+ | Routes return 404 after setting `entryPath` | Client is still requesting the root path without the prefix | Update client base URL to include the entry path (e.g., `http://localhost:3000/api/mcp`) |
205
209
  | Server binds but external clients cannot connect | Server bound to `localhost` or `127.0.0.1` inside a container | Set `host: '0.0.0.0'` or use Docker port mapping to expose the container port |
206
210
 
207
211
  ## Examples
@@ -30,7 +30,7 @@ Set Content Security Policy (CSP), HSTS, and other security headers on every HTT
30
30
 
31
31
  ## Prerequisites
32
32
 
33
- - `@frontmcp/cli` installed
33
+ - `frontmcp` installed
34
34
  - A `frontmcp.config.ts` or `.json` file (see `configure-deployment-targets`)
35
35
 
36
36
  ## Step 1: Add CSP to Your Config
@@ -39,7 +39,7 @@ CSP directives are specified as a record (object) mapping directive names to val
39
39
 
40
40
  ```typescript
41
41
  // frontmcp.config.ts
42
- import { defineConfig } from '@frontmcp/cli';
42
+ import { defineConfig } from 'frontmcp';
43
43
 
44
44
  export default defineConfig({
45
45
  name: 'my-server',
@@ -44,7 +44,7 @@ Never use the memory store in production. Sessions are lost on process restart,
44
44
  Configure Redis session storage via the `@FrontMcp` decorator:
45
45
 
46
46
  ```typescript
47
- import { FrontMcp, App } from '@frontmcp/sdk';
47
+ import { App, FrontMcp } from '@frontmcp/sdk';
48
48
 
49
49
  @App({ name: 'MyApp' })
50
50
  class MyApp {}
@@ -62,7 +62,7 @@ class MyApp {}
62
62
  class MyServer {}
63
63
  ```
64
64
 
65
- The SDK internally calls `createSessionStore()` to create a `RedisSessionStore`. The factory lazy-loads `ioredis` so it is not bundled when you use a different provider.
65
+ The SDK internally constructs a `RedisSessionStore` from the config block, lazy-loading `ioredis` so it is not bundled when you use a different provider. There is no need to import the factory yourself — pass the config to `@FrontMcp` and the SDK takes care of the rest.
66
66
 
67
67
  ## Vercel KV
68
68
 
@@ -143,35 +143,35 @@ class MyServer {}
143
143
 
144
144
  ## Pub/Sub for Resource Subscriptions
145
145
 
146
- If your server uses resource subscriptions (clients subscribe to resource change notifications), you need a pub/sub channel. Vercel KV does not support pub/sub, so you must use Redis for the pub/sub channel even when using Vercel KV for sessions:
146
+ If your server uses resource subscriptions (clients subscribe to resource change notifications), you need a pub/sub channel. Vercel KV does not support pub/sub, so you must configure a separate `pubsub` block pointing at Redis even when using Vercel KV for sessions. The SDK reads `pubsub` from the `@FrontMcp` decorator and constructs the pub/sub channel automatically there is no public subpath import for the factories:
147
147
 
148
148
  ```typescript
149
- import { createSessionStore, createPubsubStore } from '@frontmcp/sdk/auth/session';
150
-
151
- // Sessions in Vercel KV
152
- const sessionStore = await createSessionStore({
153
- provider: 'vercel-kv',
154
- url: process.env['KV_REST_API_URL'],
155
- token: process.env['KV_REST_API_TOKEN'],
156
- });
157
-
158
- // Pub/sub requires Redis
159
- const pubsubStore = createPubsubStore({
160
- provider: 'redis',
161
- host: process.env['REDIS_HOST'] ?? 'localhost',
162
- port: 6379,
163
- });
149
+ @FrontMcp({
150
+ info: { name: 'my-server', version: '1.0.0' },
151
+ apps: [MyApp],
152
+ // Sessions in Vercel KV
153
+ redis: { provider: 'vercel-kv' },
154
+ // Pub/sub requires real Redis
155
+ pubsub: {
156
+ provider: 'redis',
157
+ host: process.env['REDIS_HOST'] ?? 'localhost',
158
+ port: 6379,
159
+ },
160
+ })
161
+ class MyServer {}
164
162
  ```
165
163
 
164
+ When the global `redis` config already points at a real Redis instance, `pubsub` falls back to it automatically and can be omitted.
165
+
166
166
  ## Common Patterns
167
167
 
168
- | Pattern | Correct | Incorrect | Why |
169
- | ---------------------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
170
- | Store construction | Use `createSessionStore()` factory function | `new RedisSessionStore(client)` direct construction | The factory handles lazy-loading, key prefix normalization, and provider detection automatically |
171
- | Vercel KV creation | `const store = await createSessionStore({ provider: 'vercel-kv' })` | `const store = createSessionStore({ provider: 'vercel-kv' })` without `await` | The factory is async for Vercel KV; forgetting `await` uses the store before its connection is ready |
172
- | Key prefix per server | `keyPrefix: 'billing-mcp:session:'` unique per server | Same `keyPrefix` across multiple servers sharing one Redis instance | Shared prefixes cause session key collisions; one server may read or overwrite another's sessions |
173
- | Production storage | `redis: { provider: 'redis', host: '...' }` or `redis: { provider: 'vercel-kv' }` | Omitting redis config in production (falls back to memory) | Memory sessions vanish on restart; all connected clients must re-authenticate and in-flight workflows are lost |
174
- | Pub/sub with Vercel KV | Separate `pubsub` config pointing to real Redis alongside `redis: { provider: 'vercel-kv' }` | Expecting Vercel KV to handle pub/sub | Vercel KV does not support pub/sub operations; a real Redis instance is required for resource subscriptions |
168
+ | Pattern | Correct | Incorrect | Why |
169
+ | ---------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
170
+ | Store construction | Pass a `redis` config block to `@FrontMcp({ redis: { provider: ... } })` | Importing `createSessionStore` / `new RedisSessionStore(...)` directly | The SDK constructs and lazy-loads the right store internally based on `provider`; there is no public subpath |
171
+ | Vercel KV provider | `redis: { provider: 'vercel-kv' }` | Calling `createSessionStore({ provider: 'vercel-kv' })` from user code | The SDK awaits the async Vercel KV connection internally during startup |
172
+ | Key prefix per server | `keyPrefix: 'billing-mcp:session:'` unique per server | Same `keyPrefix` across multiple servers sharing one Redis instance | Shared prefixes cause session key collisions; one server may read or overwrite another's sessions |
173
+ | Production storage | `redis: { provider: 'redis', host: '...' }` or `redis: { provider: 'vercel-kv' }` | Omitting redis config in production (falls back to memory) | Memory sessions vanish on restart; all connected clients must re-authenticate and in-flight workflows are lost |
174
+ | Pub/sub with Vercel KV | Separate `pubsub` config pointing to real Redis alongside `redis: { provider: 'vercel-kv' }` | Expecting Vercel KV to handle pub/sub | Vercel KV does not support pub/sub operations; a real Redis instance is required for resource subscriptions |
175
175
 
176
176
  ## Verification Checklist
177
177
 
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: configure-skills-http
3
+ description: Full reference for skillsConfig — HTTP catalog endpoints, auth, caching, instructions injection, and tamper-evident audit log.
4
+ tags: [config, skills, skills-http, llm-txt, instructions, audit, injection]
5
+ ---
6
+
7
+ # Configure `skillsConfig`
8
+
9
+ `skillsConfig` is the single configuration object on `@FrontMcp({ ... })` that controls everything about the Skills HTTP surface (`/skills`, `/llm.txt`, `/llm_full.txt`), the MCP `skill://` resource catalog (SEP-2640 — singular scheme), the auto-injected `instructions` field on the MCP `initialize` response, and the tamper-evident skill audit log.
10
+
11
+ ## Top-Level Shape
12
+
13
+ ```typescript
14
+ @FrontMcp({
15
+ info: { name: 'my-server', version: '1.0.0' },
16
+ apps: [MainApp],
17
+
18
+ // Server-level instructions, exposed as `instructions` on initialize.
19
+ // Combined with the skill catalog summary per skillsConfig.injectInstructions.
20
+ instructions: 'You are a helpful assistant for booking flights.',
21
+
22
+ skillsConfig: {
23
+ enabled: true, // turn on /skills, /llm.txt, skill:// resources
24
+ mcpResources: true, // expose skills as MCP resources (skill://index.json, skill://<skillPath>/SKILL.md)
25
+ llmTxt: true, // serve /llm.txt
26
+ llmFullTxt: false, // serve /llm_full.txt (full SKILL.md bodies)
27
+ auth: 'api-key', // 'inherit' (default) | 'public' | 'api-key' | 'bearer'
28
+ apiKeys: ['sk-xxx', 'sk-yyy'],
29
+ jwt: { issuer: 'https://auth.example.com', audience: 'skills-api' },
30
+ cache: {
31
+ enabled: true,
32
+ redis: { provider: 'redis', host: 'localhost', port: 6379 },
33
+ ttlMs: 60_000,
34
+ },
35
+ injectInstructions: 'append', // 'off' | 'append' | 'prepend' | 'replace'
36
+ audit: {
37
+ enabled: true,
38
+ signer: customSigner, // SkillAuditSigner — see audit section below
39
+ store: customStore, // SkillAuditStore — see audit section below
40
+ subjectMode: 'hash', // 'plain' | 'hash' | 'omit'
41
+ headAnchorIntervalMs: 300_000,
42
+ },
43
+ },
44
+ })
45
+ class MyServer {}
46
+ ```
47
+
48
+ ## Server-Level `instructions`
49
+
50
+ The new top-level `instructions?: string` field on `@FrontMcp` is forwarded verbatim into the MCP `initialize` response. MCP clients use it as the global system prompt for the connected server.
51
+
52
+ | Field | Type | Default | Description |
53
+ | -------------- | -------- | ------- | ----------------------------------------------------------------------- |
54
+ | `instructions` | `string` | `''` | High-level prompt the server gives to the LLM client at connection time |
55
+
56
+ `skillsConfig.injectInstructions` controls whether (and how) FrontMCP appends a generated **skill catalog summary** to those instructions on every `initialize` request.
57
+
58
+ ## Skill Catalog Injection Policy
59
+
60
+ | Mode | Behavior |
61
+ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
62
+ | `off` | The catalog summary is suppressed. Server `instructions` and channel hints are still surfaced. |
63
+ | `append` | Server `instructions`, then channel hints, then the catalog summary, joined by `\n\n---\n\n`. **(Default.)** |
64
+ | `prepend` | Catalog summary first, then channel hints, then server `instructions`. |
65
+ | `replace` | Surface ONLY the server `instructions`; the catalog AND channel hints are dropped. When `instructions` is empty/undefined this falls back to `'append'` so a misconfig doesn't drop everything. |
66
+
67
+ The catalog summary is built by `composeInitializeInstructions(...)` and `buildSkillsCatalogSummary(...)` (exported from `@frontmcp/sdk`). It is bounded at **16 KB** with a truncation footer; the footer points clients at `skill://index.json` and `skill://<skillPath>/SKILL.md` for full content (SEP-2640 — singular scheme).
68
+
69
+ > **Dynamic skills:** because the composer recomputes the summary on every `initialize` request, skills registered after server boot **are** picked up automatically.
70
+
71
+ ## Skills HTTP Authentication
72
+
73
+ ```typescript
74
+ // API key auth
75
+ skillsConfig: {
76
+ enabled: true,
77
+ auth: 'api-key',
78
+ apiKeys: [process.env.SKILLS_API_KEY!],
79
+ }
80
+
81
+ // JWT bearer auth
82
+ skillsConfig: {
83
+ enabled: true,
84
+ auth: 'bearer',
85
+ jwt: {
86
+ issuer: 'https://auth.example.com',
87
+ audience: 'skills-api',
88
+ },
89
+ }
90
+ ```
91
+
92
+ When `auth` is omitted it defaults to `'inherit'`, which means the Skills HTTP
93
+ surface adopts whatever authentication policy the parent server enforces
94
+ (typically the same `auth` block on `@FrontMcp(...)`). Use `'public'`
95
+ explicitly to opt out of authentication; use `'api-key'` or `'bearer'` to
96
+ override the inherited policy with a Skills-specific one. **In production,
97
+ set `auth` explicitly so the policy is visible at the call site.**
98
+
99
+ ## Skills HTTP Caching
100
+
101
+ ```typescript
102
+ skillsConfig: {
103
+ enabled: true,
104
+ cache: {
105
+ enabled: true,
106
+ // memory cache (default): no redis option
107
+ // distributed cache: pass redis options
108
+ redis: { provider: 'redis', host: 'localhost', port: 6379 },
109
+ ttlMs: 60_000,
110
+ },
111
+ }
112
+ ```
113
+
114
+ Memory cache is the default; for multi-pod deployments use Redis or another supported provider.
115
+
116
+ ## Audit Log
117
+
118
+ `skillsConfig.audit` enables a tamper-evident, hash-chained audit log of skill action executions (authority pass / authority fail / HTTP success / HTTP failure phases). Records are signed and chained so that any later mutation breaks verification.
119
+
120
+ | Field | Type | Default | Description |
121
+ | ---------------------- | ----------------------------- | --------- | --------------------------------------------------------------------------------------------------------- |
122
+ | `enabled` | `boolean` | `false` | Turn the audit writer on |
123
+ | `signer` | `SkillAuditSigner` | dev HS256 | The signer used to sign each record. **Use `Rs256AuditSigner` in production.** |
124
+ | `store` | `SkillAuditStore` | memory | Where records are persisted. Use `StorageAdapterAuditStore` for Redis/Vercel KV/SQLite-backed persistence |
125
+ | `subjectMode` | `'plain' \| 'hash' \| 'omit'` | `'hash'` | Redaction policy for the subject (e.g., user ID) embedded in each record |
126
+ | `headAnchorIntervalMs` | `number` | unset | Periodically anchor the chain head out-of-band so tail truncation is detectable (queued for v1.3.0 use) |
127
+
128
+ **Production constraint:** `Hs256AuditSigner` initialized with an in-memory `randomBytes` key refuses to fire when `NODE_ENV === 'production'`. The recommended production pattern is `Rs256AuditSigner` reusing the bundle-signing keypair.
129
+
130
+ **Multi-pod constraint (v1.2.0):** the audit chain is **single-writer**. Running multiple pods that share the same `SkillAuditStore` will produce a loud warning; CAS-based atomic chain-head updates are queued for v1.3.0. Until then, route audit writes to a single elected leader pod or to per-pod chains that you stitch offline.
131
+
132
+ See [`skill-audit-log`](../../frontmcp-extensibility/references/skill-audit-log.md) for the full architecture, threat model, custom signer / custom store recipes, and chain verification with `verifyChain(...)`.
133
+
134
+ ## Decision Matrix
135
+
136
+ | Situation | Recommended setting |
137
+ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------- |
138
+ | Local dev, no skills | `skillsConfig` unset |
139
+ | Public server, hand-curated server prompt | `instructions: '...'`, `injectInstructions: 'off'` |
140
+ | Server with many dynamic skills | `injectInstructions: 'append'` (default) or `'replace'` if you want skills to drive the entire prompt |
141
+ | Multi-pod production | `cache: { enabled: true, redis: {...} }`, `audit: { signer: Rs256, store: StorageAdapterAuditStore }` |
142
+ | Compliance / forensic requirements | RS256 signer + persistent store + scheduled `verifyChain(...)` in CI |
143
+
144
+ ## Examples
145
+
146
+ | Example | Level | Description |
147
+ | --------------------------------------------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------- |
148
+ | [`inject-instructions`](../examples/configure-skills-http/inject-instructions.md) | Basic | Set a server-level instructions string and append the skill catalog summary on every initialize response. |
149
+ | [`audit-log-basic`](../examples/configure-skills-http/audit-log-basic.md) | Basic | Enable the skill audit log with the in-memory store and HS256 signer for development and tests. |
150
+ | [`audit-log-redis`](../examples/configure-skills-http/audit-log-redis.md) | Advanced | Production-grade audit log with the Redis-backed StorageAdapterAuditStore and the RS256 bundle-signing key. |
151
+
152
+ > See all examples in [`examples/configure-skills-http/`](../examples/configure-skills-http/)
153
+
154
+ ## Reference
155
+
156
+ - [Skills HTTP](https://docs.agentfront.dev/frontmcp/features/skill-based-workflows)
157
+ - Related skills: `decorators-guide`, `skill-audit-log`, `vendor-integrations`
@@ -175,7 +175,7 @@ frontmcp dev
175
175
 
176
176
  # Test rate limiting (send 101 requests rapidly)
177
177
  for i in $(seq 1 101); do
178
- curl -s -o /dev/null -w "%{http_code}\n" -X POST http://localhost:3001/ \
178
+ curl -s -o /dev/null -w "%{http_code}\n" -X POST http://localhost:3000/ \
179
179
  -H 'Content-Type: application/json' \
180
180
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
181
181
  done
@@ -140,10 +140,10 @@ transport: {
140
140
  frontmcp dev
141
141
 
142
142
  # Test SSE endpoint
143
- curl -N http://localhost:3001/sse
143
+ curl -N http://localhost:3000/sse
144
144
 
145
145
  # Test streamable HTTP
146
- curl -X POST http://localhost:3001/ -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
146
+ curl -X POST http://localhost:3000/ -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
147
147
  ```
148
148
 
149
149
  ## Common Patterns
@@ -98,20 +98,22 @@ Beyond `frontmcp build`, the CLI provides commands for the full deployment lifec
98
98
  | Lambda | Streamable HTTP (stateless) | DynamoDB, ElastiCache | ~500ms | No | AWS ecosystem, event-driven |
99
99
  | Cloudflare | Streamable HTTP (stateless) | KV, Durable Objects | ~5ms | Limited | Edge-first, global latency |
100
100
  | CLI | stdio | SQLite, memory | None | Yes | Desktop tools, local agents |
101
- | Browser | In-memory | memory | None | Yes | Client-side AI, demos |
101
+ | Browser | In-process direct client | memory | None | Yes | Client-side AI, demos |
102
102
  | SDK | Programmatic | Configurable | None | Yes | Embedding in existing apps |
103
103
 
104
- > **Note on storage:** The FrontMCP SDK's `StorageProvider` type supports `'redis'` and `'vercel-kv'` as built-in providers. References to DynamoDB, Cloudflare KV, D1, and Durable Objects in the table above refer to platform-native storage that you configure outside the SDK (e.g., via AWS SDK, Cloudflare bindings). The SDK does not provide a built-in adapter for these use them directly in your tools/providers.
104
+ > **Note on storage:** Only `redis` and `vercel-kv` are SDK-native providers. DynamoDB, Cloudflare KV, D1, and Durable Objects are platform-side wire them in your tools using the platform SDK / Workers bindings. The Cloudflare build adapter actively rejects `redis: { ... }` and `sqlite: { ... }` configs at build time because Workers has no Node TCP / fs.
105
+ >
106
+ > **Note on browser:** "In-process direct client" means an in-memory `DirectClient` created via `connect()`/`create()` from `@frontmcp/sdk`. There is no separate "in-memory transport" — the client and server share the same JS heap.
105
107
 
106
108
  ## Cross-Cutting Patterns
107
109
 
108
- | Pattern | Rule |
109
- | --------------------- | -------------------------------------------------------------------------------------------------------- |
110
- | Transport selection | Stateful servers (Node, CLI) can use stdio or SSE; serverless must use Streamable HTTP (stateless) |
111
- | Storage mapping | Node: Redis or SQLite; Vercel: Vercel KV; Lambda: DynamoDB; Cloudflare: KV; CLI: SQLite; Browser: memory |
112
- | Environment variables | Never hardcode secrets; use `.env` locally, platform secrets in production |
113
- | Build command | All targets: `frontmcp build --target <target>` produces optimized output |
114
- | Entry point | All targets require `export default` of the `@FrontMcp` class from `main.ts` |
110
+ | Pattern | Rule |
111
+ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
112
+ | Transport selection | Stateful servers (Node, CLI) can use stdio or SSE; serverless must use Streamable HTTP (stateless) |
113
+ | Storage mapping | SDK-native: `redis` (Node, Lambda+ElastiCache, CLI), `vercel-kv` (Vercel, can also work on Cloudflare via Upstash HTTP). Platform-side (you wire it in tools): DynamoDB, Cloudflare KV/D1/DO. Cloudflare build rejects `redis`/`sqlite` configs. |
114
+ | Environment variables | Never hardcode secrets; use `.env` locally, platform secrets in production |
115
+ | Build command | All targets: `frontmcp build --target <target>` produces optimized output |
116
+ | Entry point | All targets require `export default` of the `@FrontMcp` class from `main.ts` |
115
117
 
116
118
  ## Common Patterns
117
119
 
@@ -147,6 +149,107 @@ Beyond `frontmcp build`, the CLI provides commands for the full deployment lifec
147
149
  | CORS errors on browser/web clients | HTTP CORS not configured | Add CORS config via `configure-http` skill |
148
150
  | Build fails with missing module | Node-only module in browser/edge build | Use conditional imports or `@frontmcp/utils` cross-platform utilities |
149
151
 
152
+ ## Examples
153
+
154
+ Each reference has matching examples under [`examples/<reference>/`](./examples/):
155
+
156
+ ### `build-for-browser`
157
+
158
+ | Example | Level | Description |
159
+ | ---------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------- |
160
+ | [`browser-build-with-custom-entry`](./examples/build-for-browser/browser-build-with-custom-entry.md) | Intermediate | Build a browser bundle using a dedicated client entry file that avoids Node.js-only imports. |
161
+ | [`browser-crypto-and-storage`](./examples/build-for-browser/browser-crypto-and-storage.md) | Advanced | Use `@frontmcp/utils` crypto functions (WebCrypto API) and in-memory storage in browser environments. |
162
+ | [`react-provider-setup`](./examples/build-for-browser/react-provider-setup.md) | Basic | Connect a React application to a remote FrontMCP server using `@frontmcp/react`. |
163
+
164
+ ### `build-for-cli`
165
+
166
+ | Example | Level | Description |
167
+ | ---------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------ |
168
+ | [`cli-binary-build`](./examples/build-for-cli/cli-binary-build.md) | Basic | Build a FrontMCP server as a standalone binary using Node.js Single Executable Applications (SEA). |
169
+ | [`unix-socket-daemon`](./examples/build-for-cli/unix-socket-daemon.md) | Intermediate | Run a FrontMCP server as a local daemon accessible via Unix socket for IDE extensions and local MCP clients. |
170
+
171
+ ### `build-for-mcpb`
172
+
173
+ | Example | Level | Description |
174
+ | --------------------------------------------------------------------- | ----- | ---------------------------------------------------------------------------------------------- |
175
+ | [`mcpb-bundle-build`](./examples/build-for-mcpb/mcpb-bundle-build.md) | Basic | Produce a .mcpb archive for Claude Desktop with metadata, tools, and install-time user_config. |
176
+
177
+ ### `build-for-sdk`
178
+
179
+ | Example | Level | Description |
180
+ | ------------------------------------------------------------------------------ | ------------ | ---------------------------------------------------------------------------------------------------------- |
181
+ | [`connect-openai`](./examples/build-for-sdk/connect-openai.md) | Intermediate | Use `connectOpenAI()` to get tools formatted for OpenAI's function-calling API. |
182
+ | [`create-flat-config`](./examples/build-for-sdk/create-flat-config.md) | Basic | Spin up an in-memory FrontMCP server from a flat config object using `create()`. |
183
+ | [`multi-platform-connect`](./examples/build-for-sdk/multi-platform-connect.md) | Advanced | Connect the same FrontMCP server to multiple LLM platforms using platform-specific `connect*()` functions. |
184
+
185
+ ### `deploy-to-cloudflare`
186
+
187
+ | Example | Level | Description |
188
+ | ------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------- |
189
+ | [`basic-worker-deploy`](./examples/deploy-to-cloudflare/basic-worker-deploy.md) | Basic | Deploy a FrontMCP server to Cloudflare Workers with a minimal configuration. |
190
+ | [`worker-custom-domain`](./examples/deploy-to-cloudflare/worker-custom-domain.md) | Advanced | Scaffold a FrontMCP project targeting Cloudflare, configure a custom domain, and verify the deployment. |
191
+ | [`worker-with-kv-storage`](./examples/deploy-to-cloudflare/worker-with-kv-storage.md) | Intermediate | Deploy a FrontMCP server to Cloudflare Workers with KV namespace for session and state storage. |
192
+
193
+ ### `deploy-to-lambda`
194
+
195
+ | Example | Level | Description |
196
+ | ------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------- |
197
+ | [`cdk-deployment`](./examples/deploy-to-lambda/cdk-deployment.md) | Advanced | Deploy a FrontMCP server to AWS Lambda using CDK with provisioned concurrency and secrets management. |
198
+ | [`lambda-handler-with-cors`](./examples/deploy-to-lambda/lambda-handler-with-cors.md) | Intermediate | Create a custom Lambda handler with an explicit API Gateway definition for CORS support. |
199
+ | [`sam-template-basic`](./examples/deploy-to-lambda/sam-template-basic.md) | Basic | Deploy a FrontMCP server to AWS Lambda with API Gateway using a SAM template. |
200
+
201
+ ### `deploy-to-node-dockerfile`
202
+
203
+ | Example | Level | Description |
204
+ | ---------------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------ |
205
+ | [`basic-multistage-dockerfile`](./examples/deploy-to-node-dockerfile/basic-multistage-dockerfile.md) | Basic | A minimal multi-stage Dockerfile for building and running a FrontMCP server in production. |
206
+ | [`secure-nonroot-dockerfile`](./examples/deploy-to-node-dockerfile/secure-nonroot-dockerfile.md) | Advanced | A production Dockerfile with a non-root user, proper ownership, and security hardening. |
207
+
208
+ ### `deploy-to-node`
209
+
210
+ | Example | Level | Description |
211
+ | ------------------------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------- |
212
+ | [`docker-compose-with-redis`](./examples/deploy-to-node/docker-compose-with-redis.md) | Basic | Deploy a FrontMCP server with Redis using Docker Compose for production. |
213
+ | [`pm2-with-nginx`](./examples/deploy-to-node/pm2-with-nginx.md) | Intermediate | Deploy a FrontMCP server on bare metal using PM2 for process management and NGINX for TLS termination. |
214
+ | [`resource-limits`](./examples/deploy-to-node/resource-limits.md) | Advanced | Configure resource limits, health checks, and environment variables for a production FrontMCP deployment. |
215
+
216
+ ### `deploy-to-vercel-config`
217
+
218
+ | Example | Level | Description |
219
+ | ------------------------------------------------------------------------------------------------------------------ | ------------ | -------------------------------------------------------------------------------------------------- |
220
+ | [`minimal-vercel-config`](./examples/deploy-to-vercel-config/minimal-vercel-config.md) | Basic | The minimum `vercel.json` needed to deploy a FrontMCP server to Vercel. |
221
+ | [`vercel-config-with-security-headers`](./examples/deploy-to-vercel-config/vercel-config-with-security-headers.md) | Intermediate | A complete `vercel.json` with per-route security headers for health, MCP, and all other endpoints. |
222
+
223
+ ### `deploy-to-vercel`
224
+
225
+ | Example | Level | Description |
226
+ | ------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------- |
227
+ | [`vercel-mcp-endpoint-test`](./examples/deploy-to-vercel/vercel-mcp-endpoint-test.md) | Advanced | Verify a Vercel-deployed FrontMCP server by testing health, tool listing, and tool invocation. |
228
+ | [`vercel-with-kv`](./examples/deploy-to-vercel/vercel-with-kv.md) | Basic | Deploy a FrontMCP server to Vercel serverless functions with Vercel KV for session persistence. |
229
+ | [`vercel-with-skills-cache`](./examples/deploy-to-vercel/vercel-with-skills-cache.md) | Intermediate | Deploy a FrontMCP server to Vercel with skills enabled and KV-backed skill caching. |
230
+
231
+ ### `mcp-client-integration`
232
+
233
+ | Example | Level | Description |
234
+ | ------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------ |
235
+ | [`stdio-npx`](./examples/mcp-client-integration/stdio-npx.md) | Basic | Publish a FrontMCP server to npm and configure MCP clients to use it with npx --stdio. |
236
+ | [`http-remote`](./examples/mcp-client-integration/http-remote.md) | Basic | Connect an MCP client to a FrontMCP server running as an HTTP server, locally or remotely. |
237
+ | [`stdio-binary-with-env`](./examples/mcp-client-integration/stdio-binary-with-env.md) | Intermediate | Configure a local FrontMCP CLI binary with environment variables and custom arguments in MCP client configs. |
238
+
239
+ ## Accessing This Skill
240
+
241
+ Skills are distributed as plain SKILL.md files plus a sibling `references/`
242
+ and `examples/` tree, so consumers can pick whichever access mode fits:
243
+
244
+ | Mode | How it works |
245
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
246
+ | **Filesystem** | Read `libs/skills/catalog/frontmcp-deployment/` directly from a clone of the catalog repo, or from a published `@frontmcp/skills` install. SKILL.md is the entry point. |
247
+ | **`frontmcp` CLI** | `frontmcp skills list`, `frontmcp skills read frontmcp-deployment`, `frontmcp skills read frontmcp-deployment:references/<file>.md`, `frontmcp skills install frontmcp-deployment` — no server required. |
248
+ | **MCP `skill://`** | When a developer mounts this skill into their own FrontMCP server (`@FrontMcp({ skills: [...] })`), the SDK exposes it via SEP-2640 resources: `skill://frontmcp-deployment/SKILL.md`, `skill://frontmcp-deployment/references/{file}.md`, etc. The server’s `skill://index.json` returns the SEP-2640 discovery document for everything mounted on it. |
249
+
250
+ The catalog itself is **not** an MCP server. The `skill://` URIs only resolve
251
+ when a server has been configured to host this skill.
252
+
150
253
  ## Reference
151
254
 
152
255
  - [Runtime Modes](https://docs.agentfront.dev/frontmcp/deployment/runtime-modes)