zuplo 7.6.1 → 7.6.2

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 (41) hide show
  1. package/docs/ai-gateway/{introduction.mdx → overview.mdx} +2 -2
  2. package/docs/ai-gateway/policies/overview.mdx +1 -1
  3. package/docs/api-management/{introduction.md → overview.md} +7 -4
  4. package/docs/articles/api-key-administration.mdx +5 -6
  5. package/docs/articles/api-key-consumer-bucket-portal-ui.mdx +5 -5
  6. package/docs/articles/api-key-end-users.mdx +3 -3
  7. package/docs/articles/custom-domains.mdx +1 -1
  8. package/docs/articles/environment-variables.mdx +1 -1
  9. package/docs/articles/feature-flags.mdx +4 -4
  10. package/docs/articles/migrate-from-apigee.md +3 -3
  11. package/docs/articles/migrate-from-aws-api-gateway.md +1 -1
  12. package/docs/articles/migrate-from-azure-apim.md +2 -2
  13. package/docs/articles/migrate-from-kong.md +3 -3
  14. package/docs/articles/migration-overview.md +1 -1
  15. package/docs/articles/monetization-integrations.mdx +2 -2
  16. package/docs/articles/step-3-add-api-key-auth.mdx +1 -1
  17. package/docs/articles/step-5-dynamic-rate-limiting-local.mdx +1 -1
  18. package/docs/articles/step-5-dynamic-rate-limiting.mdx +1 -1
  19. package/docs/articles/version-support-policy.mdx +2 -2
  20. package/docs/cli/create-zuplo-api.mdx +2 -2
  21. package/docs/concepts/ai-gateway.mdx +69 -0
  22. package/docs/concepts/api-keys.md +3 -3
  23. package/docs/concepts/mcp.mdx +63 -0
  24. package/docs/concepts/project-structure.mdx +1 -1
  25. package/docs/dedicated/akamai/ai-powered-applications.mdx +3 -3
  26. package/docs/dev-portal/documenting-mcp-servers.mdx +3 -3
  27. package/docs/dev-portal/{introduction.mdx → overview.mdx} +5 -2
  28. package/docs/dev-portal/zudoku/configuration/api-reference.md +45 -0
  29. package/docs/dev-portal/zudoku/configuration/docs.md +56 -1
  30. package/docs/dev-portal/zudoku/configuration/llms.md +39 -4
  31. package/docs/dev-portal/zudoku/configuration/navigation.mdx +4 -4
  32. package/docs/managed-edge/overview.md +1 -1
  33. package/docs/mcp-gateway/cross-app-access/quickstart.mdx +1 -1
  34. package/docs/mcp-gateway/{introduction.mdx → overview.mdx} +2 -2
  35. package/docs/mcp-gateway/policies/overview.mdx +13 -0
  36. package/docs/mcp-server/custom-tools.mdx +2 -2
  37. package/docs/mcp-server/graphql.mdx +1 -1
  38. package/docs/mcp-server/openai-apps-sdk.mdx +3 -4
  39. package/docs/mcp-server/{introduction.mdx → overview.mdx} +6 -3
  40. package/docs/programmable-api/mcp-sdk.mdx +3 -3
  41. package/package.json +5 -5
@@ -1,6 +1,6 @@
1
1
  ---
2
- title: Zuplo AI Gateway
3
- sidebar_label: Introduction
2
+ title: AI Gateway overview
3
+ sidebar_label: Overview
4
4
  description:
5
5
  The Zuplo AI Gateway is a proxy between your apps and LLM providers, deployed
6
6
  from your own Git repository, with per-app policy pipelines for cost control,
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: AI Gateway policies
2
+ title: AI Gateway policies overview
3
3
  sidebar_label: Overview
4
4
  description: Every policy an AI Gateway app can run, and what each one does.
5
5
  ---
@@ -1,6 +1,9 @@
1
1
  ---
2
- title: Zuplo API Management
3
- sidebar_label: Introduction
2
+ title: API Management overview
3
+ sidebar_label: Overview
4
+ description:
5
+ Secure, transform, and operate APIs with Zuplo's programmable gateway,
6
+ built-in policies, analytics, and developer tooling.
4
7
  ---
5
8
 
6
9
  The Zuplo Gateway is a fully-managed, lightweight API management platform
@@ -11,8 +14,8 @@ engineering team, Zuplo makes it easy to:
11
14
  - [Add authentication and access control](../articles/step-3-add-api-key-auth.mdx)
12
15
  - [Implement rate limiting](../articles/step-2-add-rate-limiting.mdx)
13
16
  - Write custom logic to run at the gateway layer
14
- - Build a [rich developer portal](../dev-portal/introduction.mdx) with
15
- self-serve tools for auth and monetization
17
+ - Build a [rich developer portal](../dev-portal/overview.mdx) with self-serve
18
+ tools for auth and monetization
16
19
 
17
20
  Zuplo delivers the core benefits of API management without the overhead of
18
21
  legacy platforms. That means no expensive licensing, training requirements, or
@@ -28,12 +28,11 @@ Once a consumer is created, view or copy its API Key using the icons shown.
28
28
 
29
29
  ![A consumer row with icons to view and copy its API key](../../public/media/api-key-administration/image-5.png)
30
30
 
31
- If you're using the Zuplo [Developer Portal](../dev-portal/introduction.mdx),
32
- we've an integration with the API Key API that allows developers to access their
33
- API keys, create new ones and delete them. To enable this, you must assign one
34
- or more managers, via e-mail, to be a manager for your API Key Consumer. This is
35
- optional if you aren't using the
36
- [Developer Portal](../dev-portal/introduction.mdx).
31
+ If you're using the Zuplo [Developer Portal](../dev-portal/overview.mdx), we've
32
+ an integration with the API Key API that allows developers to access their API
33
+ keys, create new ones and delete them. To enable this, you must assign one or
34
+ more managers, via e-mail, to be a manager for your API Key Consumer. This is
35
+ optional if you aren't using the [Developer Portal](../dev-portal/overview.mdx).
37
36
 
38
37
  You can assign managers from your project's
39
38
  [Services](https://portal.zuplo.com/+/account/project/services) page in the
@@ -101,11 +101,11 @@ the API Key Authentication policy's `bucketId` option takes.
101
101
 
102
102
  ### Consumer form fields
103
103
 
104
- | Field | Required | Runtime value | Notes |
105
- | ---------------- | -------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
106
- | **Subject** | Yes | `request.user.sub` | Unique within the bucket. Identifies the consumer in logs and policy code. |
107
- | **Key managers** | No | n/a | Comma-separated emails of users who can manage this consumer's keys via the [Developer Portal](../dev-portal/introduction.mdx). |
108
- | **Metadata** | No | `request.user.data` | Valid JSON object. Plan info, customer IDs, anything your policies need at runtime. |
104
+ | Field | Required | Runtime value | Notes |
105
+ | ---------------- | -------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------- |
106
+ | **Subject** | Yes | `request.user.sub` | Unique within the bucket. Identifies the consumer in logs and policy code. |
107
+ | **Key managers** | No | n/a | Comma-separated emails of users who can manage this consumer's keys via the [Developer Portal](../dev-portal/overview.mdx). |
108
+ | **Metadata** | No | `request.user.data` | Valid JSON object. Plan info, customer IDs, anything your policies need at runtime. |
109
109
 
110
110
  :::tip
111
111
 
@@ -52,9 +52,9 @@ keys or create new keys for your consumers manually.
52
52
 
53
53
  ## Zuplo Developer Portal
54
54
 
55
- If you publish a [Zuplo Developer Portal](../dev-portal/introduction.mdx) for
56
- your API consumers, you can let authenticated users manage their own keys
57
- without contacting your team.
55
+ If you publish a [Zuplo Developer Portal](../dev-portal/overview.mdx) for your
56
+ API consumers, you can let authenticated users manage their own keys without
57
+ contacting your team.
58
58
 
59
59
  By default, a consumer's keys are visible to any signed-in user whose email
60
60
  matches a manager email assigned to that consumer. Consumers can copy and rotate
@@ -20,7 +20,7 @@ Zuplo supports two types of custom domains that can be configured separately:
20
20
  2. **Developer Portal Custom Domain**: For your developer documentation site
21
21
  (for example, `docs.example.com`). This domain uses the CNAME
22
22
  `cname.zuplodocs.com`. Learn more about the Developer Portal in the
23
- [Developer Portal documentation](/docs/dev-portal/introduction).
23
+ [Developer Portal documentation](/docs/dev-portal/overview).
24
24
 
25
25
  Both types of custom domains can be managed from the same Custom Domains section
26
26
  in your project settings and follow a similar configuration process.
@@ -72,7 +72,7 @@ Environment variables can't start with `ZUPLO_` or `__ZUPLO`. The same
72
72
  restriction applies to names beginning with `ZUDOKU_`.
73
73
 
74
74
  If you need a variable that's exposed to the
75
- [Developer Portal](../dev-portal/introduction.mdx) build, prefix it with
75
+ [Developer Portal](../dev-portal/overview.mdx) build, prefix it with
76
76
  `ZUPLO_PUBLIC_` (or `ZUDOKU_PUBLIC_`). Public-prefixed variables are bundled
77
77
  into the portal's static output and **must not contain secrets**, as they're
78
78
  visible to anyone who loads the page.
@@ -398,10 +398,10 @@ reads with the patterns above.
398
398
  ## Gate an MCP server with flags
399
399
 
400
400
  If you're fronting an MCP server with the
401
- [MCP Gateway](../mcp-gateway/introduction.mdx), the same policies apply — MCP
402
- routes run the standard inbound policy chain before the handler. Add your
403
- feature-gate policy to the MCP route to control access per user or plan, for
404
- example to make MCP access a paid-tier feature or to turn off a beta server.
401
+ [MCP Gateway](../mcp-gateway/overview.mdx), the same policies apply — MCP routes
402
+ run the standard inbound policy chain before the handler. Add your feature-gate
403
+ policy to the MCP route to control access per user or plan, for example to make
404
+ MCP access a paid-tier feature or to turn off a beta server.
405
405
 
406
406
  For curating _which tools_ a server exposes, start with the static
407
407
  [capability filtering](../mcp-gateway/capability-filtering.mdx) policy, which
@@ -84,7 +84,7 @@ Zuplo has a video walkthrough of the Apigee to Zuplo migration process:
84
84
  | Environment | [Environment](./environments.md) |
85
85
  | API Product | API key with [metadata](./api-key-management.md) |
86
86
  | Developer App | [API key consumer](./api-key-management.md) |
87
- | Apigee Developer Portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
87
+ | Apigee Developer Portal | [Zuplo Developer Portal](../dev-portal/overview.mdx) |
88
88
  | VerifyAPIKey policy | [API Key Authentication](../policies/api-key-inbound.md) |
89
89
  | OAuthV2 policy | [JWT authentication policies](../policies/open-id-jwt-auth-inbound.md) |
90
90
  | SpikeArrest | [Rate Limiting](../policies/rate-limit-inbound.md) |
@@ -306,7 +306,7 @@ export default async function (
306
306
  ### Step 5: Migrate your developer portal
307
307
 
308
308
  Apigee's Drupal-based developer portal requires significant setup and
309
- maintenance. Zuplo's [Developer Portal](../dev-portal/introduction.md) is
309
+ maintenance. Zuplo's [Developer Portal](../dev-portal/overview.mdx) is
310
310
  automatically generated from your OpenAPI spec and includes:
311
311
 
312
312
  - Interactive API reference documentation
@@ -404,5 +404,5 @@ between both gateways.
404
404
  - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
405
405
  - [Add rate limiting](./step-2-add-rate-limiting.md)
406
406
  - [Add API key authentication](./step-3-add-api-key-auth.md)
407
- - [Configure your developer portal](../dev-portal/introduction.md)
407
+ - [Configure your developer portal](../dev-portal/overview.mdx)
408
408
  - [Set up source control](./source-control.md)
@@ -244,5 +244,5 @@ secrets to secure the connection between Zuplo and your AWS backends.
244
244
  - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
245
245
  - [Add rate limiting](./step-2-add-rate-limiting.md)
246
246
  - [Add API key authentication](./step-3-add-api-key-auth.md)
247
- - [Configure your developer portal](../dev-portal/introduction.md)
247
+ - [Configure your developer portal](../dev-portal/overview.mdx)
248
248
  - [Set up source control](./source-control.md)
@@ -52,7 +52,7 @@ experience for their customers and improve their engineering team's workflow.
52
52
  | Subscription key | [API Key Authentication](../policies/api-key-inbound.md) |
53
53
  | Product | API key with [metadata](./api-key-management.md) |
54
54
  | Service (APIM instance) | [Environment](./environments.md) |
55
- | Developer portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
55
+ | Developer portal | [Zuplo Developer Portal](../dev-portal/overview.mdx) |
56
56
  | Application Insights | [Logging integrations](./logging.md) (Datadog, Splunk, etc.) |
57
57
  | API revision | Git branch with [branch-based deployment](./branch-based-deployments.md) |
58
58
  | Gateway (self-hosted) | [Self-hosted Zuplo](../self-hosted/overview.md) |
@@ -288,5 +288,5 @@ connection between Zuplo and your Azure backends.
288
288
  - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
289
289
  - [Add rate limiting](./step-2-add-rate-limiting.md)
290
290
  - [Add API key authentication](./step-3-add-api-key-auth.md)
291
- - [Configure your developer portal](../dev-portal/introduction.md)
291
+ - [Configure your developer portal](../dev-portal/overview.mdx)
292
292
  - [Set up source control](./source-control.md)
@@ -54,7 +54,7 @@ for a dedicated DevOps engineer to maintain the API gateway.
54
54
  | Kong Manager / Konnect UI | [Zuplo Portal](./development-options.md) or local development with Git |
55
55
  | DB-less declarative config | [OpenAPI route config](./openapi.md) in Git |
56
56
  | Admin API | [Zuplo API](./accounts/zuplo-api-keys.md) or `git push` |
57
- | Kong Dev Portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
57
+ | Kong Dev Portal | [Zuplo Developer Portal](../dev-portal/overview.mdx) |
58
58
 
59
59
  ## Step-by-step migration
60
60
 
@@ -207,7 +207,7 @@ self-serve developer portal for key creation and rotation.
207
207
 
208
208
  1. Add the `api-key-inbound` policy to your routes.
209
209
  2. Create API key consumers through the Zuplo Portal or API.
210
- 3. Optionally, enable the [Developer Portal](../dev-portal/introduction.md) for
210
+ 3. Optionally, enable the [Developer Portal](../dev-portal/overview.mdx) for
211
211
  self-serve key management.
212
212
 
213
213
  **Kong `jwt` to Zuplo JWT Authentication:**
@@ -296,5 +296,5 @@ configuration-as-code. Zuplo takes this further with native GitOps:
296
296
  - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
297
297
  - [Add rate limiting](./step-2-add-rate-limiting.md)
298
298
  - [Add API key authentication](./step-3-add-api-key-auth.md)
299
- - [Configure your developer portal](../dev-portal/introduction.md)
299
+ - [Configure your developer portal](../dev-portal/overview.mdx)
300
300
  - [Set up source control](./source-control.md)
@@ -67,7 +67,7 @@ The following table maps common API gateway concepts to their Zuplo equivalents:
67
67
  | Response policy | Plugin (Lua) | PostFlow (XML) | Response mapping | Outbound policy (XML) | [Outbound policy](./policies.md) (TypeScript) |
68
68
  | Authentication | Plugin | VerifyAPIKey policy | API key / Authorizer | Subscription key | [API key](./api-key-authentication.md) or JWT policy |
69
69
  | Rate limiting | Rate Limiting plugin | SpikeArrest / Quota | Usage plan | rate-limit policy | [Rate limit policy](../policies/rate-limit-inbound.md) |
70
- | Developer portal | Kong Dev Portal | Drupal portal | N/A (self-build) | Built-in portal | [Developer Portal](../dev-portal/introduction.md) |
70
+ | Developer portal | Kong Dev Portal | Drupal portal | N/A (self-build) | Built-in portal | [Developer Portal](../dev-portal/overview.mdx) |
71
71
  | Environment | Workspace | Environment | Stage | Service | [Environment](./environments.md) |
72
72
  | Deployment | Deck / Admin API | API deploy | CloudFormation / SAM | ARM / Bicep | `git push` with [GitOps](./source-control.md) |
73
73
 
@@ -95,8 +95,8 @@ Use Zuplo's [hooks system](../programmable-api/hooks.mdx) to:
95
95
 
96
96
  ### Developer Portal
97
97
 
98
- The [Zuplo Developer Portal](../dev-portal/introduction.mdx) supports custom
99
- pages and plugins for billing UI:
98
+ The [Zuplo Developer Portal](../dev-portal/overview.mdx) supports custom pages
99
+ and plugins for billing UI:
100
100
 
101
101
  - [Custom pages](../dev-portal/zudoku/guides/custom-pages.md) for pricing,
102
102
  billing, and account management
@@ -138,7 +138,7 @@ Let's get started.
138
138
 
139
139
  Whenever you deploy a new endpoint on Zuplo, it will automatically be added
140
140
  to your
141
- [autogenerated developer documentation portal](../dev-portal/introduction.mdx).
141
+ [autogenerated developer documentation portal](../dev-portal/overview.mdx).
142
142
 
143
143
  To access your API's developer portal, click the **Gateway deployed** button
144
144
  in your toolbar and click the link under Developer Portal.
@@ -172,7 +172,7 @@ less than an hour.
172
172
  ### Next Steps
173
173
 
174
174
  - Continue exploring our docs to learn about customizing your
175
- [Developer Portal](../dev-portal/introduction.mdx), or explore our various
175
+ [Developer Portal](../dev-portal/overview.mdx), or explore our various
176
176
  [Integrations](https://zuplo.com/integrations)
177
177
  - [Grab time](https://zuplo.com/meeting) with the Zuplo team to have your
178
178
  questions answered
@@ -160,7 +160,7 @@ less than an hour.
160
160
  ### Next Steps
161
161
 
162
162
  - Continue exploring our docs to learn about customizing your
163
- [Developer Portal](../dev-portal/introduction.mdx), or explore our various
163
+ [Developer Portal](../dev-portal/overview.mdx), or explore our various
164
164
  [Integrations](https://zuplo.com/integrations)
165
165
  - [Grab time](https://zuplo.com/meeting) with the Zuplo team to have your
166
166
  questions answered
@@ -112,8 +112,8 @@ Two consequences:
112
112
  non-compliant implementation breaks interoperability with the clients and
113
113
  servers customers need to work with, which is the larger break.
114
114
 
115
- MCP moves fastest here. The [MCP Gateway](../mcp-gateway/introduction.mdx) and
116
- [MCP Server](../mcp-server/introduction.mdx) track protocol revisions as the
115
+ MCP moves fastest here. The [MCP Gateway](../mcp-gateway/overview.mdx) and
116
+ [MCP Server](../mcp-server/overview.mdx) track protocol revisions as the
117
117
  specification publishes them, and support for older revisions ends on the
118
118
  specification's schedule.
119
119
 
@@ -88,7 +88,7 @@ flag you get the `default` template.
88
88
  | --------------- | --------------------------------------------------------------------------------------------- |
89
89
  | `default` | Sample `/todos` routes, a `hello-world` module, a dev portal in `docs/`, and VS Code settings |
90
90
  | `default-empty` | The same project with no routes defined and no VS Code settings |
91
- | `ai-gateway-v2` | An [AI Gateway](../ai-gateway/introduction.mdx) project, without a dev portal |
91
+ | `ai-gateway-v2` | An [AI Gateway](../ai-gateway/overview.mdx) project, without a dev portal |
92
92
 
93
93
  `--empty` is shorthand for `--template default-empty`.
94
94
 
@@ -96,7 +96,7 @@ The `ai-gateway-v2` template scaffolds `config/ai.oas.json`, which routes
96
96
  `/:app_id/v1/*` to the AI Gateway handler, and `config/policies.json`, which
97
97
  declares the policies an application's policy chain can select. It ships no
98
98
  `docs/` directory, so the CLI skips the
99
- [dev portal](../dev-portal/introduction.mdx) workspace:
99
+ [dev portal](../dev-portal/overview.mdx) workspace:
100
100
 
101
101
  ```bash
102
102
  npx create-zuplo-api@latest my-gateway --template ai-gateway-v2
@@ -0,0 +1,69 @@
1
+ ---
2
+ title: AI Gateway Concepts
3
+ sidebar_label: AI Gateway
4
+ description:
5
+ The mental model behind the Zuplo AI Gateway — providers, teams, apps, and
6
+ per-app policy chains — and how it relates to the rest of the platform.
7
+ ---
8
+
9
+ The Zuplo AI Gateway is a proxy that sits between your apps and LLM providers
10
+ like OpenAI, Anthropic, Google, Mistral, and xAI. Instead of each app holding
11
+ provider API keys and calling providers directly, every request flows through
12
+ the gateway, which applies policies, controls, and monitoring. This page
13
+ explains the concepts behind it. For the full feature tour, see the
14
+ [AI Gateway overview](../ai-gateway/overview.mdx).
15
+
16
+ ## Providers, teams, and apps
17
+
18
+ Three building blocks organize an AI Gateway:
19
+
20
+ - **[Providers](../ai-gateway/providers.mdx)** are the LLM vendors your gateway
21
+ can route to. Administrators configure providers once, including any
22
+ [custom OpenAI-compatible providers](../ai-gateway/custom-providers.mdx), and
23
+ consumers never see the underlying credentials.
24
+ - **[Teams](../ai-gateway/teams.mdx)** group users and carry budget limits that
25
+ cascade down the hierarchy: gateway-wide limits, then team limits, then
26
+ per-app limits. See [Usage Limits](../ai-gateway/usage-limits.mdx).
27
+ - **[Apps](../ai-gateway/apps.mdx)** are the pieces of software that call the
28
+ gateway — a support chatbot is one app, an internal coding agent is another.
29
+ Each app gets its own gateway URL, its own Zuplo-managed API key, and its own
30
+ policy chain.
31
+
32
+ ## Policy chains
33
+
34
+ Every app runs its own ordered [policy chain](../ai-gateway/policy-chains.mdx) —
35
+ model filtering, fallback models, budgets, semantic caching, guardrails,
36
+ tracing, and any [custom policies](../ai-gateway/custom-policies.mdx) written in
37
+ TypeScript. Team [policy templates](../ai-gateway/policy-templates.mdx) give new
38
+ apps a consistent starting pipeline, and chain changes apply within about a
39
+ minute with no redeploy.
40
+
41
+ App-level controls are opt-in: an app with an empty policy chain applies no
42
+ model restrictions, budgets, guardrails, or caching of its own — though gateway
43
+ and team usage limits still apply.
44
+
45
+ ## The Universal API
46
+
47
+ Every app exposes an OpenAI-compatible
48
+ [Universal API](../ai-gateway/universal-api.mdx). Point any SDK that supports a
49
+ custom base URL at the app's gateway URL, send the app's API key as a bearer
50
+ token, and reference models as `providerName/model` (for example
51
+ `openai/gpt-5-mini`). One app can use models from several providers through the
52
+ same endpoint, so switching providers is a configuration change rather than a
53
+ code change.
54
+
55
+ ## How it fits into Zuplo
56
+
57
+ An AI Gateway is a type of Zuplo project. Its routes and policy declarations
58
+ live in a [Git repository](../ai-gateway/source-control.mdx), so gateway changes
59
+ go through the same review workflow as the rest of your Zuplo configuration, and
60
+ the providers, teams, and apps you configure belong to that project. The
61
+ platform primitives — deployment model, environments, analytics — are the same
62
+ ones described in [How Zuplo Works](./how-zuplo-works.mdx).
63
+
64
+ ## Next steps
65
+
66
+ - [Get started with the AI Gateway](../ai-gateway/getting-started.mdx)
67
+ - [Browse the SDK integrations](../ai-gateway/integrations/openai.mdx) for
68
+ OpenAI, the Vercel AI SDK, LangChain, Claude Code, Codex, and Goose
69
+ - Explore the [AI Gateway policies](../ai-gateway/policies/overview.mdx)
@@ -170,9 +170,9 @@ support leak detection.
170
170
 
171
171
  ## Self-serve key management
172
172
 
173
- The [Developer Portal](../dev-portal/introduction.mdx) includes built-in
174
- self-serve API key management. Your API consumers can sign in to the portal and
175
- create, view, and delete their own keys without contacting your team.
173
+ The [Developer Portal](../dev-portal/overview.mdx) includes built-in self-serve
174
+ API key management. Your API consumers can sign in to the portal and create,
175
+ view, and delete their own keys without contacting your team.
176
176
 
177
177
  To enable self-serve access, assign a **manager** to a consumer. Managers are
178
178
  identified by email and identity provider subject. You can assign a manager in
@@ -0,0 +1,63 @@
1
+ ---
2
+ title: Model Context Protocol (MCP) Concepts
3
+ sidebar_label: MCP
4
+ description:
5
+ How Zuplo supports the Model Context Protocol — the MCP Server handler that
6
+ turns your APIs into tools, and the MCP Gateway that fronts upstream MCP
7
+ servers with one OAuth-protected endpoint.
8
+ ---
9
+
10
+ [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) is
11
+ an open protocol that standardizes how AI applications — Claude Desktop, Claude
12
+ Code, ChatGPT, Cursor, VS Code, and others — connect to external tools and data
13
+ sources. Zuplo supports MCP in two directions, and this page explains both and
14
+ when to use each.
15
+
16
+ ## Two ways to use MCP on Zuplo
17
+
18
+ | Feature | What it does | When to use it |
19
+ | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
20
+ | **[MCP Gateway](../mcp-gateway/overview.mdx)** | Proxies traffic to one or more upstream MCP servers. Handles OAuth, capability curation, and analytics. | You want to expose existing MCP servers (Linear, Stripe, internal services, etc.) to AI clients through one endpoint. |
21
+ | **[MCP Server handler](../handlers/mcp-server.mdx)** | Turns your OpenAPI routes into an MCP server. Each route becomes an MCP tool, prompt, or resource. | You want to expose your own API as MCP so AI clients can call it as tools. |
22
+
23
+ The two features solve different problems and can live in the same project.
24
+
25
+ ### MCP Gateway: one front door for upstream MCP servers
26
+
27
+ The [MCP Gateway](../mcp-gateway/overview.mdx) fronts one or more remote MCP
28
+ servers with a single, OAuth-protected endpoint. Users sign in once through your
29
+ identity provider, the gateway brokers credentials to each upstream server, and
30
+ every tool call lands in your analytics — without raw tokens ever reaching the
31
+ AI client. It solves five problems that appear as soon as a team uses more than
32
+ a couple of MCP servers: discovery, authentication, authorization,
33
+ observability, and guardrails. See
34
+ [How the MCP Gateway works](../mcp-gateway/how-it-works.mdx).
35
+
36
+ ### MCP Server: turn your API into tools
37
+
38
+ The [MCP Server handler](../mcp-server/overview.mdx) transforms the routes in
39
+ your Zuplo project into MCP [tools](../mcp-server/tools.mdx),
40
+ [prompts](../mcp-server/prompts.mdx), and
41
+ [resources](../mcp-server/resources.mdx) that AI systems can discover and
42
+ invoke. It uses your existing OpenAPI specifications for tool descriptions and
43
+ composes with Zuplo's authentication, rate limiting, and audit logging policies.
44
+
45
+ ## How MCP fits into Zuplo
46
+
47
+ Neither MCP feature is a separate runtime. Both are sets of policies and route
48
+ handlers that run inside the same Zuplo platform that runs your REST and GraphQL
49
+ APIs — the same OpenAPI-as-config model, deployment pipeline, and observability
50
+ primitives described in [How Zuplo Works](./how-zuplo-works.mdx). MCP traffic
51
+ flows through the same [request lifecycle](./request-lifecycle.mdx), so policies
52
+ like [rate limiting](../rate-limiting/getting-started.mdx) and
53
+ [audit logging](../policies/audit-log-inbound.mdx) apply to it the same way they
54
+ apply to any other route.
55
+
56
+ ## Next steps
57
+
58
+ - [MCP Gateway quickstart](../mcp-gateway/quickstart.mdx) — expose an upstream
59
+ MCP server and connect Claude Desktop
60
+ - [MCP quickstart for the MCP Server handler](../articles/mcp-quickstart.mdx) —
61
+ turn an API into MCP tools
62
+ - [Connect MCP clients](../mcp-gateway/connect-clients/overview.mdx) — Claude,
63
+ ChatGPT, Cursor, VS Code, and others
@@ -132,7 +132,7 @@ are referenced from `routes.oas.json` and `policies.json` using
132
132
 
133
133
  If you use the Zuplo Developer Portal, this directory contains the portal
134
134
  configuration and custom pages. See
135
- [Developer Portal](../dev-portal/introduction.mdx) for details.
135
+ [Developer Portal](../dev-portal/overview.mdx) for details.
136
136
 
137
137
  ## How the files relate
138
138
 
@@ -142,7 +142,7 @@ every tool invocation, ensuring the model can only access data the requesting
142
142
  user is authorized to see.
143
143
 
144
144
  For more information, see the
145
- [MCP Server documentation](../../mcp-server/introduction.mdx).
145
+ [MCP Server documentation](../../mcp-server/overview.mdx).
146
146
 
147
147
  ## AI Firewall Protection
148
148
 
@@ -219,5 +219,5 @@ Deployment options include:
219
219
  for MCP server configuration
220
220
  - [Akamai AI Firewall](../../policies/akamai-ai-firewall-v2-inbound.mdx) - AI
221
221
  security policy configuration
222
- - [Zuplo AI Gateway](../../ai-gateway/introduction.mdx) - Introduction to AI
223
- Gateway capabilities
222
+ - [Zuplo AI Gateway](../../ai-gateway/overview.mdx) - Overview of AI Gateway
223
+ capabilities
@@ -20,7 +20,7 @@ If your MCP server uses Zuplo's
20
20
  [MCP Server Handler](/docs/handlers/mcp-server.mdx), the `x-mcp-server`
21
21
  extension is added to your OpenAPI spec automatically. Skip this guide — there
22
22
  is nothing to configure. See the
23
- [MCP Server overview](/docs/mcp-server/introduction.mdx) for the build path.
23
+ [MCP Server overview](/docs/mcp-server/overview.mdx) for the build path.
24
24
 
25
25
  :::
26
26
 
@@ -219,5 +219,5 @@ hidden for MCP endpoints because they use a different interaction model.
219
219
  — the underlying OpenAPI extension.
220
220
  - [MCP Server Handler](/docs/handlers/mcp-server.mdx) — build an MCP server on
221
221
  Zuplo (and skip this guide entirely).
222
- - [MCP Server overview](/docs/mcp-server/introduction.mdx) — concepts,
223
- capabilities, and the Zuplo-native build path.
222
+ - [MCP Server overview](/docs/mcp-server/overview.mdx) — concepts, capabilities,
223
+ and the Zuplo-native build path.
@@ -1,6 +1,9 @@
1
1
  ---
2
- title: Introduction
3
- description: Introduction to Zuplo's beautiful, auto-generated developer portal.
2
+ title: Developer Portal overview
3
+ sidebar_label: Overview
4
+ description:
5
+ Build and publish an API developer portal with interactive documentation,
6
+ authentication, and API key self-service.
4
7
  ---
5
8
 
6
9
  Every API deserves beautiful and powerful documentation. The Zuplo Developer
@@ -30,6 +30,51 @@ const config = {
30
30
  };
31
31
  ```
32
32
 
33
+ ### Publish a canonical OpenAPI document
34
+
35
+ For agents, API clients, and discovery tools, you can opt a file-based API into a stable public
36
+ OpenAPI URL:
37
+
38
+ ```ts title=zudoku.config.ts
39
+ const config = {
40
+ apis: {
41
+ type: "file",
42
+ input: "./openapi.json",
43
+ path: "/api",
44
+ publish: {
45
+ path: "/openapi.json",
46
+ },
47
+ },
48
+ };
49
+ ```
50
+
51
+ The endpoint is available in development and is written into the production build. Its format and
52
+ media type follow the configured extension: use `.json` for `application/json`, or `.yaml`/`.yml`
53
+ for `application/yaml`. The path must be root-relative, cannot contain traversal, query, or fragment
54
+ components, and is relative to the Dev Portal site. For example, with `basePath: "/docs"`, the example
55
+ above is served at `/docs/openapi.json`.
56
+
57
+ Published documents use the processed schema, including bundled external references and configured
58
+ [schema processors](../guides/processors.mdx). If an API has multiple file versions, the first
59
+ `input` entry is the primary version published at the canonical URL. Publishing is intentionally
60
+ configured per API: Dev Portal will not choose an API automatically on multi-API sites, and a build
61
+ fails if two APIs configure the same publication path. The build also fails instead of overwriting
62
+ an existing `public/` file or generated artifact at that path.
63
+
64
+ To report schema authoring gaps that reduce LLM function-calling compatibility, enable the optional
65
+ agent-quality audit:
66
+
67
+ ```ts title=zudoku.config.ts
68
+ publish: {
69
+ path: "/openapi.json",
70
+ agentQuality: true,
71
+ },
72
+ ```
73
+
74
+ The audit reports build warnings for missing or duplicate `operationId` values, missing operation
75
+ descriptions, untyped parameters, missing or untyped request bodies on write operations, and
76
+ responses without typed schemas. It does not modify the published document or fail the build.
77
+
33
78
  ## URL Reference
34
79
 
35
80
  :::danger{title="Recommendation"}
@@ -246,6 +246,57 @@ The generated markdown files:
246
246
  - Are required for the `copyPage` button functionality
247
247
  - Are used by LLM features (see [llms.txt configuration](/dev-portal/zudoku/configuration/llms) for more details)
248
248
 
249
+ ### `contentNegotiation`
250
+
251
+ **Type:** `boolean` **Default:** the value of `publishMarkdown`
252
+
253
+ When `publishMarkdown` is enabled, canonical documentation URLs honor the HTTP `Accept` header.
254
+ Requests that prefer `text/markdown` receive the same content as the page's `.md` URL with a
255
+ `Content-Type: text/markdown; charset=utf-8` response. HTML and Markdown variants include `Accept`
256
+ in the `Vary` header so shared caches do not mix representations, and advertise the `.md` URL with a
257
+ `Link` header. Vercel responses use `Vary: Accept, Accept-Encoding`. Content negotiation is
258
+ therefore enabled by default whenever `publishMarkdown` is enabled. Set it to `false` to opt out.
259
+
260
+ Canonical URL negotiation is built into the SSR-backed development server, SSR deployments, and
261
+ Zudoku's Vercel static output. Other static hosts, and development with `--no-ssr`, must configure
262
+ equivalent `Accept`-aware routing from each canonical URL to its generated `.md` sibling. The
263
+ explicit `.md` files remain portable to every static host.
264
+
265
+ ```tsx title="zudoku.config.tsx"
266
+ docs: {
267
+ publishMarkdown: true,
268
+ contentNegotiation: true,
269
+ }
270
+ ```
271
+
272
+ On those supported runtimes, Dev Portal also returns a concise Markdown recovery response with status
273
+ `404` when an agent prefers Markdown for a missing canonical path. Vercel provides the same recovery
274
+ response for missing explicit `.md` and `.mdx` paths. It links to the documentation root and, when
275
+ those generated files are present, `llms.txt` and the sitemap. Set `contentNegotiation: false` to
276
+ retain HTML-only canonical URLs while continuing to publish the explicit `.md` files.
277
+
278
+ #### Other hosting providers
279
+
280
+ When `publishMarkdown` is enabled, Dev Portal emits the `.md` files, so other hosting providers can
281
+ implement the same behavior in their CDN, reverse proxy, edge worker, or web server. Configure the
282
+ hosting layer to:
283
+
284
+ 1. Apply the rule only to known documentation routes within the configured `basePath`; leave assets
285
+ and non-document routes unchanged.
286
+ 2. Inspect `Accept` on `GET` and `HEAD` requests, honoring media-range specificity and `q` values.
287
+ When Markdown is the preferred acceptable representation, internally rewrite the canonical page
288
+ URL to its `.md` sibling rather than redirecting the client.
289
+ 3. Return `406 Not Acceptable` when the request explicitly accepts neither HTML nor Markdown.
290
+ 4. Serve the rewritten response as `text/markdown; charset=utf-8`, and add `Accept` to any existing
291
+ `Vary` header on both the Markdown and HTML variants.
292
+ 5. Preserve the query string and return no body for `HEAD` requests.
293
+ 6. Keep real `404` status codes for unknown paths. If returning a Markdown 404 body, include useful
294
+ recovery links instead of serving the HTML application shell with status `200`.
295
+
296
+ The exact rule syntax depends on the provider. The important contract is that caches vary on
297
+ `Accept`, canonical URLs resolve to the correct representation, and missing resources remain
298
+ missing.
299
+
249
300
  ### `llms`
250
301
 
251
302
  **Type:** `object` **Default:** `undefined`
@@ -258,7 +309,11 @@ docs: {
258
309
  llms: {
259
310
  llmsTxt: true, // Generate llms.txt summary file
260
311
  llmsTxtFull: true, // Generate llms-full.txt with complete content
261
- includeProtected: false
312
+ includeProtected: false,
313
+ title: "Acme API",
314
+ description: "Build and operate integrations with the Acme API.",
315
+ instructions:
316
+ "Use these docs when creating or debugging an Acme integration. Start with the quickstart, then use the API reference for request and response schemas."
262
317
  }
263
318
  }
264
319
  ```
@@ -13,7 +13,7 @@ During build, you can optionally generate:
13
13
  - **`llms.txt`** - Summary with links to all pages
14
14
  - **`llms-full.txt`** - Complete documentation in one file
15
15
 
16
- All options are disabled by default.
16
+ Per-page `.md` export is enabled by default. The two aggregate `llms.txt` files are opt-in.
17
17
 
18
18
  ## Configuration
19
19
 
@@ -28,13 +28,15 @@ export default {
28
28
  llmsTxt: true, // Generate llms.txt
29
29
  llmsTxtFull: true, // Generate llms-full.txt
30
30
  includeProtected: false, // Exclude protected routes
31
+ title: "Acme API",
32
+ description: "Build and operate integrations with the Acme API.",
33
+ instructions:
34
+ "Use these docs when creating or debugging an Acme integration. Start with the quickstart, then consult the API reference for request and response schemas.",
31
35
  },
32
36
  },
33
37
  };
34
38
  ```
35
39
 
36
- All options are disabled by default.
37
-
38
40
  :::tip
39
41
 
40
42
  When enabled, markdown files are generated during build and deleted after creating the `llms.txt`
@@ -50,11 +52,40 @@ files unless `publishMarkdown: true` is set (see
50
52
  Generates an `llms.txt` file with links to all documentation pages:
51
53
 
52
54
  ```markdown title="llms.txt"
53
- # Documentation
55
+ # Acme API
56
+
57
+ > Build and operate integrations with the Acme API.
58
+
59
+ Use these docs when creating or debugging an Acme integration. Start with the quickstart, then
60
+ consult the API reference for request and response schemas.
61
+
62
+ ## Documentation
54
63
 
55
64
  - [Quickstart](/dev-portal/zudoku/quickstart.md): Get started with Dev Portal - [Writing](/dev-portal/zudoku/writing.md): A guide to writing documentation
56
65
  ```
57
66
 
67
+ ### `title`
68
+
69
+ **Type:** `string` **Default:** the configured site title, or `"Documentation"`
70
+
71
+ Sets the project or site name in the required H1 at the top of `llms.txt`. It also sets the H1 in
72
+ `llms-full.txt` when that file is enabled.
73
+
74
+ ### `description`
75
+
76
+ **Type:** `string` **Default:** `"Documentation files for Large Language Models"`
77
+
78
+ Sets the short summary in the blockquote immediately after the H1.
79
+
80
+ ### `instructions`
81
+
82
+ **Type:** `string` **Default:** `undefined`
83
+
84
+ Adds optional guidance between the blockquote and the documentation link section. Use it to tell
85
+ agents which concrete jobs the documentation is best suited for and how to navigate or call the
86
+ product. The value can contain Markdown paragraphs and lists, but should not contain headings;
87
+ headings in `llms.txt` are reserved for sections containing link lists.
88
+
58
89
  ### `llmsTxtFull`
59
90
 
60
91
  **Type:** `boolean` **Default:** `false`
@@ -81,6 +112,10 @@ dist/
81
112
  └── ...
82
113
  ```
83
114
 
115
+ On Vercel builds, this tree is written beneath `.vercel/output/static/` instead of `dist/`. The
116
+ deployed public URLs remain the same. See the [Vercel deployment guide](/dev-portal/zudoku/deploy/vercel) for the
117
+ generated routing and Markdown content-negotiation behavior.
118
+
84
119
  **Important:** Individual `.md` files are only kept in the final build if `publishMarkdown: true`.
85
120
  If only `llmsTxt` or `llmsTxtFull` is enabled, the `.md` files are generated temporarily during the
86
121
  build but deleted after the `llms.txt` files are created.
@@ -328,10 +328,10 @@ details.
328
328
 
329
329
  :::note
330
330
 
331
- Avoid naming files `index.md` or `index.mdx` and relying on their default path. Some hosting
332
- providers (e.g. Vercel) automatically strip `/index` from URLs with a redirect, which can cause
333
- routing issues. Instead, give files descriptive names and use the `path` property to serve them at
334
- the desired URL.
331
+ Avoid naming files `index.md` or `index.mdx` and relying on their default path. Zudoku's generated
332
+ Vercel clean-URL routes strip `/index` with a redirect, and other hosting providers may do the same.
333
+ This can cause routing issues. Instead, give files descriptive names and use the `path` property to
334
+ serve them at the desired URL.
335
335
 
336
336
  :::
337
337
 
@@ -74,5 +74,5 @@ deployment. You can start building your API immediately—no additional
74
74
  configuration is required.
75
75
 
76
76
  For more information about getting started with Zuplo, see the
77
- [API Management introduction](/docs/api-management/introduction) or
77
+ [API Management overview](/docs/api-management/overview) or
78
78
  [sign up](https://portal.zuplo.com/signup?utm_source=docs) for free.
@@ -238,7 +238,7 @@ The XAA exchange happens entirely on the gateway's outbound side. See
238
238
 
239
239
  // Registers the MCP Gateway, which adds the OAuth and upstream-connection
240
240
  // routes used to expose and secure MCP servers through your gateway.
241
- // Docs: https://zuplo.com/docs/mcp-server/introduction
241
+ // Docs: https://zuplo.com/docs/mcp-gateway/overview
242
242
  export function runtimeInit(runtime: RuntimeExtensions) {
243
243
  runtime.addPlugin(new McpGatewayPlugin());
244
244
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
- title: "MCP Gateway"
3
- sidebar_label: "Introduction"
2
+ title: "MCP Gateway overview"
3
+ sidebar_label: "Overview"
4
4
  description:
5
5
  Overview of the Zuplo MCP Gateway — a single OAuth-protected MCP endpoint that
6
6
  fronts multiple upstream MCP servers with curated tools and per-call
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: MCP Gateway policies overview
3
+ sidebar_label: Overview
4
+ description: Every policy available to an MCP Gateway and what each one does.
5
+ ---
6
+
7
+ import policies from "../../../policies.ui.json";
8
+
9
+ MCP Gateway policies secure client access, authorize requests, control exposed
10
+ capabilities, and protect upstream MCP servers. See
11
+ [How the MCP Gateway works](../how-it-works.mdx) for the request flow.
12
+
13
+ <PolicyOverview policies={policies} products={["mcp-gateway"]} />
@@ -513,7 +513,7 @@ independently. For the full API reference, see
513
513
  tool results
514
514
  - [MCP Server Handler](../handlers/mcp-server.mdx) - For simple route-to-tool
515
515
  mapping
516
- - [Model Context Protocol Overview](../mcp-server/introduction.mdx) -
517
- Understanding MCP concepts
516
+ - [Model Context Protocol Overview](../mcp-server/overview.mdx) - Understanding
517
+ MCP concepts
518
518
  - [MCP Specification](https://modelcontextprotocol.io/specification/) - Official
519
519
  protocol documentation
@@ -228,7 +228,7 @@ workflows, see the [Custom Tools documentation](./custom-tools.mdx).
228
228
 
229
229
  ## See Also
230
230
 
231
- - [MCP Server Handler](./introduction.mdx) - Main MCP Server documentation
231
+ - [MCP Server overview](./overview.mdx) - Main MCP Server documentation
232
232
  - [Custom Tools](./custom-tools.mdx) - Build custom MCP tools with complex logic
233
233
  - [GraphQL Best Practices](https://graphql.org/learn/best-practices/) -
234
234
  GraphQL.org recommendations
@@ -14,10 +14,9 @@ metadata and set response metadata required for ChatGPT widget rendering.
14
14
  This page covers the **MCP Server handler**, which turns your own OpenAPI routes
15
15
  into an MCP server. If you're proxying to upstream MCP servers (Linear, Stripe,
16
16
  Notion, internal services, etc.) through Zuplo's
17
- [MCP Gateway](../mcp-gateway/introduction.mdx), Apps SDK UI surfaces pass
18
- through the gateway as ordinary MCP resources — no extra configuration is
19
- required on the gateway side. Build the Apps SDK app on whichever MCP server
20
- emits the UI.
17
+ [MCP Gateway](../mcp-gateway/overview.mdx), Apps SDK UI surfaces pass through
18
+ the gateway as ordinary MCP resources — no extra configuration is required on
19
+ the gateway side. Build the Apps SDK app on whichever MCP server emits the UI.
21
20
 
22
21
  :::
23
22
 
@@ -1,6 +1,9 @@
1
1
  ---
2
- title: Model Context Protocol (MCP)
3
- sidebar_label: Introduction
2
+ title: MCP Server overview
3
+ sidebar_label: Overview
4
+ description:
5
+ Expose OpenAPI operations to AI clients as MCP tools, prompts, and resources
6
+ with Zuplo's MCP Server handler.
4
7
  ---
5
8
 
6
9
  [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is
@@ -17,7 +20,7 @@ The **MCP Server handler** described on this page turns your own OpenAPI routes
17
20
  into an MCP server. If you want to put a single OAuth-protected endpoint in
18
21
  front of one or more existing upstream MCP servers (Linear, Stripe, Notion,
19
22
  internal services, etc.), see the
20
- [MCP Gateway introduction](../mcp-gateway/introduction.mdx) instead.
23
+ [MCP Gateway overview](../mcp-gateway/overview.mdx) instead.
21
24
 
22
25
  :::
23
26
 
@@ -36,7 +36,7 @@ export default async function (request: ZuploRequest, context: ZuploContext) {
36
36
 
37
37
  `ZuploMcpSdk` is available in custom tool handlers for both the
38
38
  [MCP Server handler](../handlers/mcp-server.mdx) and the
39
- [MCP Gateway](../mcp-gateway/introduction.mdx). It is exported from
39
+ [MCP Gateway](../mcp-gateway/overview.mdx). It is exported from
40
40
  `@zuplo/runtime`.
41
41
 
42
42
  ## Methods
@@ -234,7 +234,7 @@ The subset of a `tools/call` result that a module author may override via
234
234
  custom MCP tool handlers with TypeScript
235
235
  - [MCP Server handler](../handlers/mcp-server.mdx) — handler configuration
236
236
  reference including `includeOutputSchema` and `includeStructuredContent`
237
- - [MCP Gateway introduction](../mcp-gateway/introduction.mdx) — overview of the
238
- MCP Gateway product
237
+ - [MCP Gateway overview](../mcp-gateway/overview.mdx) — overview of the MCP
238
+ Gateway product
239
239
  - [MCP specification](https://modelcontextprotocol.io/specification/) — the
240
240
  canonical protocol reference
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zuplo",
3
- "version": "7.6.1",
3
+ "version": "7.6.2",
4
4
  "type": "module",
5
5
  "description": "The official Zuplo CLI for local development and platform management",
6
6
  "homepage": "https://zuplo.com/docs/cli/overview",
@@ -32,9 +32,9 @@
32
32
  "zuplo": "zuplo.js"
33
33
  },
34
34
  "dependencies": {
35
- "@zuplo/cli": "7.6.1",
36
- "@zuplo/core": "7.6.1",
37
- "@zuplo/runtime": "7.6.1",
38
- "@zuplo/test": "7.6.1"
35
+ "@zuplo/cli": "7.6.2",
36
+ "@zuplo/core": "7.6.2",
37
+ "@zuplo/runtime": "7.6.2",
38
+ "@zuplo/test": "7.6.2"
39
39
  }
40
40
  }