zuplo 6.69.10 → 6.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/docs/ai-gateway/apps.mdx +5 -5
  2. package/docs/ai-gateway/custom-providers.mdx +6 -5
  3. package/docs/ai-gateway/getting-started.mdx +2 -1
  4. package/docs/ai-gateway/guardrails.mdx +2 -2
  5. package/docs/ai-gateway/managing-apps.mdx +10 -8
  6. package/docs/ai-gateway/managing-providers.mdx +9 -7
  7. package/docs/ai-gateway/managing-teams.mdx +4 -4
  8. package/docs/ai-gateway/usage-limits.mdx +8 -5
  9. package/docs/articles/accounts/audit-logs.mdx +3 -5
  10. package/docs/articles/accounts/billing.mdx +9 -5
  11. package/docs/articles/accounts/default-api-key.mdx +4 -5
  12. package/docs/articles/accounts/delete-account.mdx +11 -11
  13. package/docs/articles/accounts/enterprise-sso.mdx +5 -3
  14. package/docs/articles/accounts/managing-account-members.mdx +3 -3
  15. package/docs/articles/accounts/zuplo-api-keys.mdx +8 -6
  16. package/docs/articles/api-key-administration.mdx +8 -5
  17. package/docs/articles/api-key-end-users.mdx +4 -3
  18. package/docs/articles/api-key-self-serve-integration.mdx +8 -4
  19. package/docs/articles/branch-based-deployments.mdx +7 -4
  20. package/docs/articles/custom-ci-cd-azure.mdx +3 -2
  21. package/docs/articles/custom-ci-cd-bitbucket.mdx +3 -2
  22. package/docs/articles/custom-ci-cd-circleci.mdx +4 -2
  23. package/docs/articles/custom-ci-cd-github.mdx +5 -3
  24. package/docs/articles/custom-ci-cd-gitlab.mdx +3 -2
  25. package/docs/articles/custom-ci-cd.mdx +6 -8
  26. package/docs/articles/custom-domains.mdx +8 -6
  27. package/docs/articles/environments.mdx +5 -2
  28. package/docs/articles/mcp-quickstart.mdx +2 -2
  29. package/docs/articles/migrate-from-kong.md +2 -2
  30. package/docs/articles/monetization/api-access.mdx +3 -2
  31. package/docs/articles/monetization/billing-models.md +137 -31
  32. package/docs/articles/monetization/developer-portal.md +7 -3
  33. package/docs/articles/monetization/features.mdx +0 -28
  34. package/docs/articles/monetization/plans.mdx +0 -1
  35. package/docs/articles/monetization/pricing-models.mdx +21 -7
  36. package/docs/articles/monetization/private-plans.md +0 -1
  37. package/docs/articles/monetization/quickstart.md +4 -2
  38. package/docs/articles/monetization/rate-cards.mdx +4 -4
  39. package/docs/articles/monetization/stripe-integration.md +16 -12
  40. package/docs/articles/monetization/subscription-lifecycle.md +4 -4
  41. package/docs/articles/monorepo-deployment.mdx +2 -3
  42. package/docs/articles/source-control-setup-github.mdx +6 -4
  43. package/docs/articles/step-1-setup-basic-gateway.mdx +3 -3
  44. package/docs/articles/step-3-add-api-key-auth-local.mdx +4 -3
  45. package/docs/articles/step-3-add-api-key-auth.mdx +3 -2
  46. package/docs/articles/step-4-deploying-to-the-edge.mdx +6 -4
  47. package/docs/articles/testing.mdx +4 -3
  48. package/docs/articles/troubleshooting.md +7 -4
  49. package/docs/cli/authentication.mdx +4 -2
  50. package/docs/cli/deploy.mdx +2 -1
  51. package/docs/cli/deploy.partial.mdx +2 -1
  52. package/docs/concepts/api-keys.md +9 -8
  53. package/docs/concepts/authentication.mdx +3 -2
  54. package/docs/concepts/source-control-and-deployment.mdx +3 -1
  55. package/docs/dev-portal/documenting-mcp-servers.mdx +223 -0
  56. package/docs/dev-portal/zudoku/openapi-extensions/x-mcp-server.md +1 -1
  57. package/docs/guides/canary-routing-for-employees.mdx +3 -1
  58. package/docs/guides/user-based-backend-routing.mdx +3 -2
  59. package/docs/programmable-api/environment.mdx +6 -5
  60. package/docs/programmable-api/zuplo-context.mdx +3 -3
  61. package/package.json +4 -4
@@ -69,8 +69,9 @@ Let's get started.
69
69
 
70
70
  2. Set up an API Key
71
71
 
72
- In order to call your API, you need to configure an API consumer. Go to
73
- **Services**, then click **Configure** on the "API Key Service".
72
+ In order to call your API, you need to configure an API consumer. Open the
73
+ [**Services**](https://portal.zuplo.com/+/account/project/services) tab in
74
+ your project, then click **Configure** on the "API Key Service".
74
75
 
75
76
  ![API Key Service](../../public/media/step-3-add-api-key-auth/image-2.png)
76
77
 
@@ -30,10 +30,12 @@ Let's get started:
30
30
 
31
31
  1. Authorize to GitHub
32
32
 
33
- Next, go to your project in the Zuplo portal, click **Settings**, then select
34
- **Source Control**. If your project isn't already connected to GitHub click
35
- the **Connect to GitHub** button and follow the auth flow. You'll need to
36
- grant permissions for any GitHub organizations you want to work with.
33
+ Next, open your
34
+ [project settings](https://portal.zuplo.com/+/account/project/settings/general)
35
+ in the Zuplo Portal, then select **Source Control**. If your project isn't
36
+ already connected to GitHub click the **Connect to GitHub** button and follow
37
+ the auth flow. You'll need to grant permissions for any GitHub organizations
38
+ you want to work with.
37
39
 
38
40
  ![Connect GitHub](../../public/media/step-4-deploying-to-the-edge/image-1.png)
39
41
 
@@ -78,9 +78,10 @@ The `.env.zuplo` file can contain sensitive information. Add it to your
78
78
  :::
79
79
 
80
80
  Once linked, services like the API Key Authentication policy work locally using
81
- the same API key bucket as the linked environment. You can create API key
82
- consumers in the [Zuplo Portal](https://portal.zuplo.com) under **Services > API
83
- Key Service**, then call your local gateway with the generated key:
81
+ the same API key bucket as the linked environment. In the Zuplo Portal, open the
82
+ [**Services**](https://portal.zuplo.com/+/account/project/services) tab in your
83
+ project and select **API Key Service** to create API key consumers, then call
84
+ your local gateway with the generated key:
84
85
 
85
86
  ```bash
86
87
  curl http://localhost:9000/your-route \
@@ -79,7 +79,9 @@ arrays.
79
79
  The gateway returns this error when the project has a critical configuration
80
80
  issue that prevents it from starting.
81
81
 
82
- **Fix:** Check the deployment logs in the Zuplo Portal for the specific error
82
+ **Fix:** Check the deployment logs in the Zuplo Portal open the
83
+ [**Environments**](https://portal.zuplo.com/+/account/project/environments) tab
84
+ in your project and select the failing environment to see the specific error
83
85
  message. Common causes include invalid `zuplo.runtime.ts` configuration or
84
86
  broken runtime extensions.
85
87
 
@@ -174,9 +176,10 @@ const response = await fetch("https://api.example.com/data", {
174
176
 
175
177
  ### Portal live logs
176
178
 
177
- The Zuplo Portal provides real-time log viewing for deployed environments.
178
- Navigate to your project in the portal and open the logs tab to see live request
179
- logs and any messages logged with `context.log`.
179
+ The Zuplo Portal provides real-time log viewing for deployed environments. Open
180
+ the [**Environments**](https://portal.zuplo.com/+/account/project/environments)
181
+ tab in your project, select the deployed environment, and open the logs tab to
182
+ see live request logs and any messages logged with `context.log`.
180
183
 
181
184
  ### Using context.log
182
185
 
@@ -37,8 +37,10 @@ following these steps:
37
37
 
38
38
  1. Navigate to [portal.zuplo.com](https://portal.zuplo.com) and log in.
39
39
  2. Select the account that you want to work on.
40
- 3. Click the **Settings** tab and navigate to the "API Keys" section. Select an
41
- existing API Key or create a new one to use with the CLI.
40
+ 3. Navigate to
41
+ [**Settings API Keys**](https://portal.zuplo.com/+/account/settings/api-keys)
42
+ in your account. Select an existing API Key or create a new one to use with
43
+ the CLI.
42
44
 
43
45
  Most commands take an `--api-key` argument. For example, to list your available
44
46
  Zuplo API Gateways, run:
@@ -140,7 +140,8 @@ POLL_INTERVAL=5000 MAX_POLL_RETRIES=300 zuplo deploy
140
140
  ```
141
141
 
142
142
  Note, that even if the CLI times out, the deployment will continue. You can
143
- check the status of the deployment in the Zuplo portal.
143
+ check the status of the deployment in your
144
+ [project](https://portal.zuplo.com/+/account/project/) in the Zuplo Portal.
144
145
 
145
146
  </CliCommand>
146
147
 
@@ -43,4 +43,5 @@ POLL_INTERVAL=5000 MAX_POLL_RETRIES=300 zuplo deploy
43
43
  ```
44
44
 
45
45
  Note, that even if the CLI times out, the deployment will continue. You can
46
- check the status of the deployment in the Zuplo portal.
46
+ check the status of the deployment in your
47
+ [project](https://portal.zuplo.com/+/account/project/) in the Zuplo Portal.
@@ -23,7 +23,8 @@ The API key system has three core objects:
23
23
  See [API Key Management](../articles/api-key-management.mdx) for a full
24
24
  overview, and
25
25
  [Manage Keys in the Portal](../articles/api-key-administration.mdx) for managing
26
- consumers in the portal.
26
+ consumers under [Services](https://portal.zuplo.com/+/account/project/services)
27
+ in your project.
27
28
 
28
29
  ## How validation works
29
30
 
@@ -76,8 +77,8 @@ when the consumer's key is used. Common uses:
76
77
  backend
77
78
  - **Organization**: `{"orgId": 456}` for multi-tenant routing
78
79
 
79
- Metadata is set when creating a consumer via the
80
- [portal](../articles/api-key-administration.mdx),
80
+ Set metadata when creating a consumer via the
81
+ [portal](https://portal.zuplo.com/+/account/project/services),
81
82
  [Developer API](../articles/api-key-api.mdx), or
82
83
  [developer portal self-serve](#self-serve-key-management).
83
84
 
@@ -173,11 +174,11 @@ self-serve API key management. Your API consumers can sign in to the portal and
173
174
  create, view, and delete their own keys without contacting your team.
174
175
 
175
176
  To enable self-serve access, assign a **manager** to a consumer. Managers are
176
- identified by email and identity provider subject. This can be done in the
177
- portal, via the [Developer API](../articles/api-key-api.mdx), or automatically
178
- when a user signs in using
179
- [Auth0](../dev-portal/dev-portal-create-consumer-on-auth.mdx) or another
180
- identity provider.
177
+ identified by email and identity provider subject. You can assign a manager in
178
+ the [portal](https://portal.zuplo.com/+/account/project/services), via the
179
+ [Developer API](../articles/api-key-api.mdx), or automatically when a user signs
180
+ in using [Auth0](../dev-portal/dev-portal-create-consumer-on-auth.mdx) or
181
+ another identity provider.
181
182
 
182
183
  ## Buckets and environments
183
184
 
@@ -48,8 +48,9 @@ reference.
48
48
 
49
49
  Zuplo's built-in [API key management](../articles/api-key-management.mdx)
50
50
  provides a complete system for issuing, managing, and validating API keys.
51
- Consumers (API key holders) can be created via the portal, API, or developer
52
- portal self-serve.
51
+ Create consumers (API key holders) under
52
+ [**Services**](https://portal.zuplo.com/+/account/project/services) in your
53
+ project, via the API, or via developer portal self-serve.
53
54
 
54
55
  Best for: B2B APIs, developer platforms, and any API where you manage consumer
55
56
  access.
@@ -210,7 +210,9 @@ The typical workflow from development to production looks like this:
210
210
  <DiagramEdge from="merge" to="production" />
211
211
  </Diagram>
212
212
 
213
- 1. **Develop** locally with `zuplo dev` or in the portal working copy.
213
+ 1. **Develop** locally with `zuplo dev` or in your
214
+ [project's working copy](https://portal.zuplo.com/+/account/project/) in the
215
+ Zuplo Portal.
214
216
  2. **Push** your changes to a feature branch. If using GitHub, a Preview
215
217
  environment deploys automatically. If using another provider, your CI/CD
216
218
  pipeline runs `zuplo deploy`.
@@ -0,0 +1,223 @@
1
+ ---
2
+ title: Documenting MCP Servers
3
+ sidebar_label: Documenting MCP Servers
4
+ navigation_icon: bot
5
+ description:
6
+ Use the x-mcp-server OpenAPI extension to render an MCP setup card in the Dev
7
+ Portal for external or proxied MCP servers.
8
+ ---
9
+
10
+ The Dev Portal renders a dedicated
11
+ [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) setup UI for
12
+ any OpenAPI operation that includes the `x-mcp-server` extension. The card
13
+ replaces the standard request/response view with the MCP endpoint URL, a copy
14
+ button, and tabbed installation instructions for Claude, ChatGPT, Cursor, VS
15
+ Code, and a generic config.
16
+
17
+ :::tip{title="Building an MCP server on Zuplo?"}
18
+
19
+ If your MCP server uses Zuplo's
20
+ [MCP Server Handler](/docs/handlers/mcp-server.mdx), the `x-mcp-server`
21
+ extension is added to your OpenAPI spec automatically. Skip this guide — there
22
+ is nothing to configure. See the
23
+ [MCP Server overview](/docs/mcp-server/introduction.mdx) for the build path.
24
+
25
+ :::
26
+
27
+ ## When to use this guide
28
+
29
+ Use this guide when you want to surface an MCP server in your Dev Portal that
30
+ you are **not** building with Zuplo's MCP Server Handler. Common scenarios:
31
+
32
+ - You proxy a third-party MCP server through a Zuplo route (for example, with a
33
+ [URL forward](/docs/handlers/url-forward.mdx) or
34
+ [custom handler](/docs/handlers/custom-handler.mdx)) and want to publish setup
35
+ instructions for it.
36
+ - You hand-author an OpenAPI spec for an MCP server hosted outside Zuplo.
37
+ - You catalog multiple MCP servers — some yours, some external — in a single Dev
38
+ Portal.
39
+
40
+ In every case, this guide covers only the **documentation** side: how the Dev
41
+ Portal renders the MCP card. Authentication, rate limiting, and any other
42
+ gateway behavior is configured on the underlying route as usual.
43
+
44
+ ## Adding the extension
45
+
46
+ Add `x-mcp-server` to the operation that represents the MCP endpoint. MCP
47
+ servers typically use `POST`, but the extension works on any HTTP method.
48
+
49
+ ```json title="openapi.json"
50
+ {
51
+ "paths": {
52
+ "/mcp": {
53
+ "post": {
54
+ "summary": "Acme Docs MCP",
55
+ "description": "MCP endpoint for searching Acme's documentation.",
56
+ "operationId": "acmeDocsMcp",
57
+ "x-mcp-server": {
58
+ "name": "acme-docs",
59
+ "version": "1.0.0",
60
+ "tools": [
61
+ {
62
+ "name": "search_docs",
63
+ "description": "Search the documentation"
64
+ },
65
+ {
66
+ "name": "get_page",
67
+ "description": "Retrieve a specific documentation page"
68
+ }
69
+ ]
70
+ },
71
+ "responses": {
72
+ "200": {
73
+ "description": "MCP response"
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ For a quick setup with no metadata, use the shorthand `"x-mcp-server": true`.
83
+ The operation `summary` is then used as the server name.
84
+
85
+ ## Extension properties
86
+
87
+ | Property | Type | Required | Description |
88
+ | --------- | -------- | -------- | -------------------------------------------------------------------------------------------------------------------- |
89
+ | `name` | `string` | No | Display name used in the generated client config snippets. Falls back to the operation `summary`, then `mcp-server`. |
90
+ | `version` | `string` | No | Version metadata. Included for completeness; not currently rendered in the UI. |
91
+ | `tools` | `array` | No | Tool metadata. Used by Zuplo enrichment; not currently rendered in the UI. |
92
+
93
+ Each entry in `tools` accepts:
94
+
95
+ | Property | Type | Required | Description |
96
+ | ------------- | -------- | -------- | ------------------------------- |
97
+ | `name` | `string` | Yes | Tool name |
98
+ | `description` | `string` | No | Human-readable tool description |
99
+
100
+ ## MCP URL resolution
101
+
102
+ The displayed MCP URL is constructed from the **server URL** of the API plus the
103
+ **path** of the operation. The server URL comes from the OpenAPI `servers` array
104
+ (or the operation-level `servers` override, when present).
105
+
106
+ For example:
107
+
108
+ ```json
109
+ {
110
+ "servers": [{ "url": "https://api.example.com" }],
111
+ "paths": {
112
+ "/mcp/docs": {
113
+ "post": {
114
+ "x-mcp-server": { "name": "docs-mcp" },
115
+ "responses": { "200": { "description": "OK" } }
116
+ }
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ The displayed MCP URL is `https://api.example.com/mcp/docs`. Make sure the
123
+ server URL points to wherever the MCP server actually accepts requests — for
124
+ proxied servers, that is typically your Zuplo gateway URL.
125
+
126
+ ## Complete example
127
+
128
+ This minimal but complete OpenAPI spec produces an MCP endpoint page in the Dev
129
+ Portal:
130
+
131
+ ```json title="mcp-api.json"
132
+ {
133
+ "openapi": "3.0.3",
134
+ "info": {
135
+ "title": "Acme Docs MCP",
136
+ "version": "1.0.0"
137
+ },
138
+ "servers": [
139
+ {
140
+ "url": "https://api.example.com",
141
+ "description": "Production"
142
+ }
143
+ ],
144
+ "paths": {
145
+ "/mcp": {
146
+ "post": {
147
+ "tags": ["MCP"],
148
+ "summary": "Acme Docs MCP",
149
+ "description": "MCP endpoint for searching Acme's documentation.",
150
+ "operationId": "acmeDocsMcp",
151
+ "x-mcp-server": {
152
+ "name": "acme-docs",
153
+ "version": "1.0.0",
154
+ "tools": [
155
+ {
156
+ "name": "search_docs",
157
+ "description": "Search the documentation"
158
+ }
159
+ ]
160
+ },
161
+ "responses": {
162
+ "200": {
163
+ "description": "MCP response"
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ ```
171
+
172
+ Reference the spec from your Dev Portal config (see
173
+ [API Reference](./zudoku/configuration/api-reference.md) for the full `apis`
174
+ configuration):
175
+
176
+ ```tsx title="zudoku.config.tsx"
177
+ import type { ZudokuConfig } from "zudoku";
178
+
179
+ const config: ZudokuConfig = {
180
+ apis: [
181
+ {
182
+ type: "file",
183
+ input: "./mcp-api.json",
184
+ path: "mcp",
185
+ },
186
+ ],
187
+ navigation: [
188
+ {
189
+ type: "link",
190
+ label: "MCP Server",
191
+ to: "/mcp",
192
+ icon: "bot",
193
+ },
194
+ ],
195
+ };
196
+
197
+ export default config;
198
+ ```
199
+
200
+ ## Generated UI
201
+
202
+ When the Dev Portal detects `x-mcp-server` on an operation, the page renders:
203
+
204
+ - **MCP Endpoint card** — the full URL with a copy button.
205
+ - **AI Tool Configuration** tabs with setup instructions for:
206
+ - **Claude** — add via the Connectors UI or the `claude mcp add` CLI command.
207
+ - **ChatGPT** — app setup via Settings → Apps → Advanced Settings.
208
+ - **Cursor** — `mcp.json` configuration (global or project-level).
209
+ - **VS Code** — `.vscode/mcp.json` with native HTTP transport for GitHub
210
+ Copilot.
211
+ - **Generic** — standard `mcp.json` format compatible with most MCP clients.
212
+
213
+ The standard method badge, request body, parameters, and sidecar panels are
214
+ hidden for MCP endpoints because they use a different interaction model.
215
+
216
+ ## Related
217
+
218
+ - [`x-mcp-server` extension reference](./zudoku/openapi-extensions/x-mcp-server.md)
219
+ — the underlying OpenAPI extension.
220
+ - [MCP Server Handler](/docs/handlers/mcp-server.mdx) — build an MCP server on
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.
@@ -101,4 +101,4 @@ The standard method badge, request body, parameters, and sidecar panels are hidd
101
101
  endpoints.
102
102
 
103
103
  For a full walkthrough including Dev Portal configuration, see the
104
- [Documenting MCP Servers guide](/dev-portal/zudoku/guides/mcp-servers).
104
+ [Documenting MCP Servers guide](/docs/dev-portal/documenting-mcp-servers).
@@ -203,7 +203,9 @@ export const percentageCanaryRoutingPolicy: InboundPolicyHandler = async (
203
203
 
204
204
  ### Environment Variables
205
205
 
206
- Configure your environment variables in the Zuplo dashboard:
206
+ Configure environment variables under the
207
+ [**Environments**](https://portal.zuplo.com/+/account/project/environments) tab
208
+ of your project in the Zuplo Portal:
207
209
 
208
210
  ```bash
209
211
  # List of employee emails or user IDs
@@ -77,8 +77,9 @@ export default async function policy(
77
77
  }
78
78
  ```
79
79
 
80
- When creating API keys in the Zuplo portal, set the metadata to include the
81
- environment:
80
+ When creating API keys under
81
+ [Services](https://portal.zuplo.com/+/account/project/services) in the Zuplo
82
+ Portal, set the metadata to include the environment:
82
83
 
83
84
  ```json
84
85
  {
@@ -313,12 +313,13 @@ context.log.info("Config loaded", {
313
313
 
314
314
  ## Setting Environment Variables
315
315
 
316
- Environment variables are set in the Zuplo Portal:
316
+ Set environment variables in the Zuplo Portal:
317
317
 
318
- 1. Navigate to your project
319
- 2. Go to Settings → Environment Variables
320
- 3. Add variables for each environment (production, preview, development)
321
- 4. Variables are encrypted at rest and in transit
318
+ 1. Open the
319
+ [**Environments**](https://portal.zuplo.com/+/account/project/environments)
320
+ tab of your project.
321
+ 2. Select an environment and add variables under **Environment Variables**.
322
+ 3. Zuplo encrypts variables at rest and in transit.
322
323
 
323
324
  ## See Also
324
325
 
@@ -89,9 +89,9 @@ context.log.info({
89
89
  ### `log`
90
90
 
91
91
  A logger instance for debugging and monitoring. Logs appear in your log tail in
92
- the portal and in your integrated log solution (for example Datadog).
93
- Pre-production environments are typically set to **Info** log level, while
94
- production is set to **Error**.
92
+ the [Zuplo Portal](https://portal.zuplo.com/+/account/project/) and in your
93
+ integrated log solution (for example Datadog). Pre-production environments are
94
+ typically set to **Info** log level, while production is set to **Error**.
95
95
 
96
96
  :::tip
97
97
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zuplo",
3
- "version": "6.69.10",
3
+ "version": "6.70.0",
4
4
  "type": "module",
5
5
  "description": "The programmable API Gateway",
6
6
  "author": "Zuplo, Inc.",
@@ -19,9 +19,9 @@
19
19
  "zuplo": "zuplo.js"
20
20
  },
21
21
  "dependencies": {
22
- "@zuplo/cli": "6.69.10",
23
- "@zuplo/core": "6.69.10",
24
- "@zuplo/runtime": "6.69.10",
22
+ "@zuplo/cli": "6.70.0",
23
+ "@zuplo/core": "6.70.0",
24
+ "@zuplo/runtime": "6.70.0",
25
25
  "@zuplo/test": "1.4.0"
26
26
  }
27
27
  }