zuplo 7.8.7 → 7.8.8

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 (63) hide show
  1. package/docs/ai-gateway/custom-policies.mdx +2 -1
  2. package/docs/ai-gateway/usage-limits.mdx +2 -2
  3. package/docs/api-management/overview.md +2 -2
  4. package/docs/articles/add-api-to-backstage.mdx +4 -3
  5. package/docs/articles/api-key-consumer-bucket-portal-ui.mdx +1 -1
  6. package/docs/articles/api-key-management.mdx +1 -1
  7. package/docs/articles/migrate-from-apigee.md +3 -3
  8. package/docs/articles/migrate-from-aws-api-gateway.md +3 -3
  9. package/docs/articles/migrate-from-azure-apim.md +3 -3
  10. package/docs/articles/migrate-from-kong.md +3 -3
  11. package/docs/articles/source-control-setup-github.mdx +2 -2
  12. package/docs/cli/create-zuplo-api.mdx +4 -4
  13. package/docs/cli/openapi-merge.mdx +1 -1
  14. package/docs/cli/openapi-merge.partial.mdx +1 -1
  15. package/docs/concepts/ai-gateway.mdx +1 -1
  16. package/docs/concepts/mcp.mdx +4 -4
  17. package/docs/dedicated/architecture.mdx +1 -1
  18. package/docs/errors/not-found.mdx +1 -1
  19. package/docs/getting-started/ai-gateway/portal.mdx +181 -0
  20. package/docs/getting-started/dev-portal/agent.mdx +148 -0
  21. package/docs/getting-started/dev-portal/index.mdx +26 -0
  22. package/docs/getting-started/dev-portal/local.mdx +213 -0
  23. package/docs/getting-started/dev-portal/portal.mdx +146 -0
  24. package/docs/{articles/step-3-add-api-key-auth.mdx → getting-started/gateway/add-api-key-auth/index.mdx} +30 -24
  25. package/docs/{articles/step-3-add-api-key-auth-local.mdx → getting-started/gateway/add-api-key-auth/local.mdx} +26 -21
  26. package/docs/{articles/step-2-add-rate-limiting.mdx → getting-started/gateway/add-rate-limiting/index.mdx} +20 -14
  27. package/docs/{articles/step-2-add-rate-limiting-local.mdx → getting-started/gateway/add-rate-limiting/local.mdx} +22 -15
  28. package/docs/getting-started/gateway/agent.mdx +198 -0
  29. package/docs/{articles/step-4-deploying-to-the-edge.mdx → getting-started/gateway/deploy-to-the-edge/index.mdx} +36 -27
  30. package/docs/{articles/step-4-deploying-to-the-edge-local.mdx → getting-started/gateway/deploy-to-the-edge/local.mdx} +46 -18
  31. package/docs/{articles/step-5-dynamic-rate-limiting.mdx → getting-started/gateway/dynamic-rate-limiting/index.mdx} +21 -12
  32. package/docs/{articles/step-5-dynamic-rate-limiting-local.mdx → getting-started/gateway/dynamic-rate-limiting/local.mdx} +21 -12
  33. package/docs/getting-started/gateway/index.mdx +24 -0
  34. package/docs/{articles/step-1-setup-basic-gateway.mdx → getting-started/gateway/setup-a-basic-gateway/index.mdx} +31 -22
  35. package/docs/{articles/step-1-setup-basic-gateway-local.mdx → getting-started/gateway/setup-a-basic-gateway/local.mdx} +22 -16
  36. package/docs/getting-started/index.mdx +25 -0
  37. package/docs/getting-started/mcp-gateway/agent.mdx +161 -0
  38. package/docs/getting-started/mcp-gateway/index.mdx +25 -0
  39. package/docs/{mcp-gateway/quickstart-local.mdx → getting-started/mcp-gateway/local.mdx} +35 -31
  40. package/docs/{mcp-gateway/quickstart.mdx → getting-started/mcp-gateway/portal.mdx} +64 -48
  41. package/docs/getting-started/mcp-server/agent.mdx +152 -0
  42. package/docs/getting-started/mcp-server/index.mdx +25 -0
  43. package/docs/{articles/mcp-quickstart-local.mdx → getting-started/mcp-server/local.mdx} +24 -13
  44. package/docs/{articles/mcp-quickstart.mdx → getting-started/mcp-server/portal.mdx} +35 -15
  45. package/docs/getting-started/migrate/agent.mdx +129 -0
  46. package/docs/getting-started/migrate/index.mdx +25 -0
  47. package/docs/getting-started/migrate/local.mdx +141 -0
  48. package/docs/getting-started/migrate/portal.mdx +129 -0
  49. package/docs/home.mdx +6 -0
  50. package/docs/mcp-gateway/connect-clients/chatgpt.mdx +2 -1
  51. package/docs/mcp-gateway/connect-clients/claude-code.mdx +2 -1
  52. package/docs/mcp-gateway/connect-clients/claude-desktop.mdx +2 -1
  53. package/docs/mcp-gateway/connect-clients/cursor.mdx +2 -1
  54. package/docs/mcp-gateway/connect-clients/vs-code.mdx +2 -1
  55. package/docs/mcp-gateway/how-it-works.mdx +2 -2
  56. package/docs/mcp-gateway/how-to/connect-upstream-api-key.mdx +4 -3
  57. package/docs/mcp-gateway/how-to/curate-tools.mdx +3 -2
  58. package/docs/mcp-gateway/overview.mdx +3 -3
  59. package/docs/policies/ai-gateway-smart-router-inbound/doc.md +14 -0
  60. package/docs/policies/akamai-ai-firewall-v2-inbound/doc.md +7 -0
  61. package/package.json +5 -5
  62. package/docs/ai-gateway/getting-started.mdx +0 -307
  63. package/docs/dev-portal/local-development.mdx +0 -72
@@ -1,20 +1,40 @@
1
1
  ---
2
- title: Dynamic MCP Server - Quickstart
3
- sidebar_label: "Dynamic MCP Server - Quickstart"
2
+ category: MCP Server
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ title: Getting Started with MCP Server - Portal
6
+ description:
7
+ Turn an OpenAPI-described API into a managed MCP server in the Zuplo Portal,
8
+ then connect an MCP client and call your first tool.
4
9
  ---
5
10
 
11
+ <WizardSteps build="mcp-server" method="portal" />
12
+
13
+ <MethodTabs build="mcp-server" method="portal" />
14
+
15
+ Turn an OpenAPI-described API into a managed MCP server. This path builds it in
16
+ the Zuplo Portal.
17
+
6
18
  Zuplo allows you to instantly add a managed MCP Server to your existing API,
7
19
  powered by OpenAPI.
8
20
 
9
21
  If you're not familiar with Zuplo, it's recommended to go through the
10
- [Step 1](./step-1-setup-basic-gateway.mdx) first.
22
+ [Step 1](../gateway/setup-a-basic-gateway/index.mdx) first.
11
23
 
12
24
  <Stepper>
13
25
 
14
26
  1. Create a **new project**
15
27
 
16
- Sign in to the Zuplo Portal and
17
- [create a new project](https://portal.zuplo.com/+/account/projects/new).
28
+ In the Zuplo Portal, open
29
+ [**Projects**](https://portal.zuplo.com/+/account/projects), click **New
30
+ Project**, select **API & MCP Gateway**, enter a project name, and click
31
+ **Create Project**.
32
+
33
+ <ModalScreenshot>
34
+
35
+ ![New Zuplo project dialog with API & MCP Gateway selected](/media/mcp-gateway-portal-quickstart/new-project.png)
36
+
37
+ </ModalScreenshot>
18
38
 
19
39
  1. **Import** an **OpenAPI** document
20
40
 
@@ -23,7 +43,7 @@ If you're not familiar with Zuplo, it's recommended to go through the
23
43
 
24
44
  <ModalScreenshot size="sm">
25
45
 
26
- ![Import OpenAPI](../../public/media/mcp-quickstart/import-openapi.png)
46
+ ![Import OpenAPI](../../../public/media/mcp-quickstart/import-openapi.png)
27
47
 
28
48
  </ModalScreenshot>
29
49
 
@@ -32,7 +52,7 @@ If you're not familiar with Zuplo, it's recommended to go through the
32
52
 
33
53
  <ModalScreenshot size="sm">
34
54
 
35
- ![Complete Import](../../public/media/mcp-quickstart/complete-import.png)
55
+ ![Complete Import](../../../public/media/mcp-quickstart/complete-import.png)
36
56
 
37
57
  </ModalScreenshot>
38
58
 
@@ -56,7 +76,7 @@ If you're not familiar with Zuplo, it's recommended to go through the
56
76
  On your `routes.oas.json` file, choose **Add** and then **Dynamic OpenAPI to
57
77
  MCP Server** (3)
58
78
 
59
- ![Add Route](../../public/media/mcp-quickstart/add-mcp-route.png)
79
+ ![Add Route](../../../public/media/mcp-quickstart/add-mcp-route.png)
60
80
 
61
81
  A new route will appear. Confirm the following values:
62
82
  - **Summary**: enter `MCP Server`
@@ -65,12 +85,12 @@ If you're not familiar with Zuplo, it's recommended to go through the
65
85
 
66
86
  Click the **Select Tools** option for your new MCP Server endpoint (1).
67
87
 
68
- ![Select Tools](../../public/media/mcp-quickstart/select-mcp-tools.png)
88
+ ![Select Tools](../../../public/media/mcp-quickstart/select-mcp-tools.png)
69
89
 
70
90
  You should see the MCP tools dialog. Check the tools from your `*.oas.json`
71
91
  files, that you want to surface in your MCP Server.
72
92
 
73
- ![MCP Server](../../public/media/mcp-quickstart/mcp-tools-dialog.png)
93
+ ![MCP Server](../../../public/media/mcp-quickstart/mcp-tools-dialog.png)
74
94
 
75
95
  Click **Update Tools** (1)
76
96
 
@@ -86,7 +106,7 @@ If you're not familiar with Zuplo, it's recommended to go through the
86
106
  [platform.openai.com/playground](https://platform.openai.com/playground)
87
107
  (you'll need an OpenAI account).
88
108
 
89
- ![Add tool](../../public/media/mcp-quickstart/openai-add-tool.png)
109
+ ![Add tool](../../../public/media/mcp-quickstart/openai-add-tool.png)
90
110
 
91
111
  Click `Create...` next to the **Tools** label and choose **MCP Server**.
92
112
 
@@ -96,13 +116,13 @@ If you're not familiar with Zuplo, it's recommended to go through the
96
116
  Zuplo, clicking on your MCP Server route and then clicking **Test**. At the
97
117
  top you'll see a button to copy the URL to your clipboard.
98
118
 
99
- ![Copy MCP Server URL](../../public/media/mcp-quickstart/copy-mcp-server-url.png)
119
+ ![Copy MCP Server URL](../../../public/media/mcp-quickstart/copy-mcp-server-url.png)
100
120
 
101
121
  Back to the OpenAI playground...
102
122
 
103
123
  <ModalScreenshot size="sm">
104
124
 
105
- ![Connect MCP Server](../../public/media/mcp-quickstart/connect-mcp-server.png)
125
+ ![Connect MCP Server](../../../public/media/mcp-quickstart/connect-mcp-server.png)
106
126
 
107
127
  </ModalScreenshot>
108
128
 
@@ -115,7 +135,7 @@ If you're not familiar with Zuplo, it's recommended to go through the
115
135
 
116
136
  <ModalScreenshot size="sm">
117
137
 
118
- ![Add tools](../../public/media/mcp-quickstart/add-tools.png)
138
+ ![Add tools](../../../public/media/mcp-quickstart/add-tools.png)
119
139
 
120
140
  </ModalScreenshot>
121
141
 
@@ -132,7 +152,7 @@ If you're not familiar with Zuplo, it's recommended to go through the
132
152
 
133
153
  Click **Approve** and you should see the todos listed 👏
134
154
 
135
- ![The prompt](../../public/media/mcp-quickstart/the-prompt.png)
155
+ ![The prompt](../../../public/media/mcp-quickstart/the-prompt.png)
136
156
 
137
157
  </Stepper>
138
158
 
@@ -0,0 +1,129 @@
1
+ ---
2
+ category: Migration Guides
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ sidebar_label: Agent
6
+ title: Getting Started with API Migration - Agent
7
+ description:
8
+ Use a coding agent to import an OpenAPI document and configure upstream
9
+ forwarding, then review and test the API before migrating clients.
10
+ ---
11
+
12
+ <WizardSteps build="migrate" method="agent" />
13
+
14
+ <MethodTabs build="migrate" method="agent" />
15
+
16
+ Have a coding agent import an existing API and configure Zuplo to forward its
17
+ requests. You'll review the route changes and verify responses before moving any
18
+ clients.
19
+
20
+ ## Prerequisites
21
+
22
+ - [Node.js](https://nodejs.org/en/download) 24 or later and Git.
23
+ - A [Zuplo account](https://portal.zuplo.com) and an installed coding agent.
24
+ - Your API's OpenAPI document and upstream URL, or the Petstore document linked
25
+ below.
26
+
27
+ ## Migrate your API with an agent
28
+
29
+ <Stepper>
30
+
31
+ 1. **Create the migration project**
32
+
33
+ Run:
34
+
35
+ ```bash
36
+ npx create-zuplo-api@latest migrated-api
37
+ cd migrated-api
38
+ ```
39
+
40
+ When prompted, choose **Yes** to create a matching Portal project, complete
41
+ sign-in, and select your Zuplo account. Select the coding agent you use when
42
+ asked. The CLI creates and links the hosted project. See
43
+ [`create-zuplo-api`](../../cli/create-zuplo-api.mdx).
44
+
45
+ :::tip{title="Zuplo skills"}
46
+
47
+ The scaffold installs Zuplo skills in this project for Codex and Cursor and
48
+ configures the Claude Code plugin. If setup fails, follow
49
+ [Agent Skills](../../build-with-ai.mdx#agent-skills) from this directory
50
+ before starting your agent.
51
+
52
+ :::
53
+
54
+ 2. **Get your existing OpenAPI document**
55
+
56
+ Get your API's OpenAPI document from its repository, API documentation, or
57
+ current gateway and save a copy in the project root. The prompt below uses
58
+ `openapi.json`; substitute your file's name if it differs.
59
+
60
+ <p>
61
+ If you don't have an OpenAPI document, download the{" "}
62
+ <a href="/docs/downloads/petstore-openapi.json" download="openapi.json">
63
+ Swagger Petstore OpenAPI document
64
+ </a>
65
+ .
66
+ </p>
67
+
68
+ Give the agent your upstream URL and current authentication requirements.
69
+ Choose a read-only operation to verify. For Petstore, use
70
+ `https://petstore3.swagger.io/api/v3/pet/findByStatus?status=available`.
71
+
72
+ 3. **Give the agent a bounded migration task**
73
+
74
+ Open the agent in the project directory. Provide the upstream URL and
75
+ operation you chose, then use this prompt:
76
+
77
+ ```text
78
+ Read the project instructions and bundled Zuplo docs. Import ./openapi.json
79
+ into ./config/routes.oas.json with:
80
+ npx zuplo openapi merge --source ./openapi.json --destination ./config/routes.oas.json
81
+
82
+ For the read-only operation I selected, configure x-zuplo-route with a
83
+ urlForwardHandler from $import(@zuplo/runtime). Set options.baseUrl to my
84
+ original API's base URL. Check imported paths so server URL prefixes are
85
+ not duplicated. Preserve the operationId and unrelated route configuration.
86
+
87
+ Start npm run dev. Call the original API and the matching localhost:9000
88
+ route with the same query parameters and required headers. Compare their
89
+ status codes and response structure, allowing for changes in live data.
90
+ Show the diff and report actual test results, including failures.
91
+
92
+ Do not delete other routes, change client URLs or DNS, add credentials to
93
+ source files, or deploy. Identify any imported paths, security declarations,
94
+ or server URL prefixes that need manual review. For private APIs, OpenAPI
95
+ security metadata is not a substitute for gateway authentication policies.
96
+ ```
97
+
98
+ Ask the agent to preserve your existing authentication, rate limits, and
99
+ transformations explicitly; don't infer them from the OpenAPI file alone.
100
+
101
+ 4. **Review and verify the migration**
102
+
103
+ Check that the handler points to the original API, that server-path prefixes
104
+ aren't duplicated, and that unrelated routes remain intact. Review `git diff`
105
+ before accepting the agent's changes.
106
+
107
+ With `npm run dev` running, call your chosen operation directly and through
108
+ the local gateway. Use the same headers and query parameters in both
109
+ requests, and compare the status and response structure. For a private API,
110
+ also test invalid or missing credentials and the request bodies and error
111
+ responses that clients depend on.
112
+
113
+ 5. **Deploy and move traffic gradually**
114
+
115
+ Follow [Deploy to the edge](../gateway/deploy-to-the-edge/local.mdx). Repeat
116
+ the tests against the deployed gateway URL, then point one test client at it.
117
+ Keep the original endpoint available while migrating clients in stages so you
118
+ can restore their previous base URL if needed.
119
+
120
+ </Stepper>
121
+
122
+ ## Next steps
123
+
124
+ - [Editor tutorial](./local.mdx) for the exact route configuration and update
125
+ workflow.
126
+ - [Migration overview](../../articles/migration-overview.md) for translating
127
+ another gateway's configuration.
128
+ - [API key authentication](../gateway/add-api-key-auth/local.mdx) to protect
129
+ routes with managed keys.
@@ -0,0 +1,25 @@
1
+ ---
2
+ category: Migration Guides
3
+ fullWidth: true
4
+ disablePager: true
5
+ showLastModified: false
6
+ suggestEdit: false
7
+ centered: false
8
+ toc: false
9
+ title: Getting Started with API Migration
10
+ description:
11
+ Import an OpenAPI document and put Zuplo in front of what you have with Zuplo,
12
+ in the Portal, locally with the CLI, or with an AI agent.
13
+ ---
14
+
15
+ <WizardSteps build="migrate" />
16
+
17
+ Put Zuplo in front of your existing API by importing its OpenAPI document and
18
+ forwarding requests to your backend. This tutorial helps you verify the gateway
19
+ before you change where your clients send traffic.
20
+
21
+ Bring your OpenAPI document and backend URL, or use the included Petstore
22
+ example. Choose a workflow to import the API and compare a read-only request
23
+ through Zuplo with the same request sent directly to your backend.
24
+
25
+ <MethodPicker build="migrate" />
@@ -0,0 +1,141 @@
1
+ ---
2
+ category: Migration Guides
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ sidebar_label: Editor
6
+ title: Getting Started with API Migration - Editor
7
+ description:
8
+ Import an existing API into a local Zuplo project, configure upstream
9
+ forwarding, compare responses, and deploy for a gradual migration.
10
+ ---
11
+
12
+ <WizardSteps build="migrate" method="local" />
13
+
14
+ <MethodTabs build="migrate" method="local" />
15
+
16
+ Import an existing API into a local Zuplo project, add its upstream handler, and
17
+ compare responses before moving client traffic.
18
+
19
+ ## Prerequisites
20
+
21
+ - [Node.js](https://nodejs.org/en/download) 24 or later and Git.
22
+ - A terminal and an editor.
23
+ - A [Zuplo account](https://portal.zuplo.com) for linking and deployment.
24
+
25
+ ## Import and test your API
26
+
27
+ <Stepper>
28
+
29
+ 1. **Create a project**
30
+
31
+ Run:
32
+
33
+ ```bash
34
+ npx create-zuplo-api@latest migrated-api
35
+ cd migrated-api
36
+ ```
37
+
38
+ When prompted, choose **Yes** to create a matching Portal project, then
39
+ complete sign-in and account selection to link your local copy. For an
40
+ existing project, work on a new Git branch before importing routes.
41
+
42
+ 2. **Get your existing OpenAPI document**
43
+
44
+ Get your API's OpenAPI document from its repository, API documentation, or
45
+ current gateway. Save a copy in the project root. The commands below use
46
+ `openapi.json`; substitute your file's name if it differs.
47
+
48
+ <p>
49
+ If you don't have an OpenAPI document, download the{" "}
50
+ <a href="/docs/downloads/petstore-openapi.json" download="openapi.json">
51
+ Swagger Petstore OpenAPI document
52
+ </a>
53
+ .
54
+ </p>
55
+
56
+ Choose a read-only operation and call it directly on the original API. Record
57
+ its URL, required headers, query parameters, and response. For Petstore, try:
58
+
59
+ ```bash
60
+ curl -i "https://petstore3.swagger.io/api/v3/pet/findByStatus?status=available"
61
+ ```
62
+
63
+ 3. **Import the routes**
64
+
65
+ Run:
66
+
67
+ ```bash
68
+ npx zuplo openapi merge --source ./openapi.json --destination ./config/routes.oas.json
69
+ ```
70
+
71
+ Open `config/routes.oas.json` and find the operation you chose. The
72
+ destination must end in `.oas.json`. See
73
+ [`openapi merge`](../../cli/openapi-merge.mdx) for importing from URLs and
74
+ controlling server paths.
75
+
76
+ 4. **Configure forwarding**
77
+
78
+ On the operation you chose, set `x-zuplo-route` to the following, replacing
79
+ `YOUR_UPSTREAM_BASE_URL` with your original API's base URL:
80
+
81
+ ```json
82
+ "x-zuplo-route": {
83
+ "corsPolicy": "none",
84
+ "handler": {
85
+ "module": "$import(@zuplo/runtime)",
86
+ "export": "urlForwardHandler",
87
+ "options": { "baseUrl": "YOUR_UPSTREAM_BASE_URL" }
88
+ },
89
+ "policies": { "inbound": [] }
90
+ }
91
+ ```
92
+
93
+ Importing OpenAPI describes the route; this handler makes it forward to the
94
+ upstream. See [URL Forward](../../handlers/url-forward.mdx). Check the
95
+ imported path so any server prefix appears only once. For Petstore, use
96
+ `https://petstore3.swagger.io/api/v3` if the route path is
97
+ `/pet/findByStatus`, or `https://petstore3.swagger.io` if it already starts
98
+ with `/api/v3`.
99
+
100
+ 5. **Compare local and upstream responses**
101
+
102
+ Start `npm run dev`. In a second terminal, run:
103
+
104
+ ```bash
105
+ curl -i "http://localhost:9000/YOUR_ROUTE"
106
+ ```
107
+
108
+ Replace `YOUR_ROUTE` with the imported route path. Include the same headers
109
+ and query parameters as your original request, such as `status=available` for
110
+ Petstore. Compare the status and response structure with the original API;
111
+ live data can change between requests. Check the gateway logs if you get an
112
+ error.
113
+
114
+ 6. **Preserve behavior when importing updates**
115
+
116
+ Before re-importing a changed OpenAPI file, commit your work. Run the same
117
+ merge command and review `git diff`. The importer merges routes by path and
118
+ method and preserves Zuplo route configuration. Routes absent from the new
119
+ document aren't automatically deleted; review them explicitly.
120
+
121
+ For your own API, translate authentication, rate limits, and transformations
122
+ into Zuplo policies. OpenAPI security declarations don't enforce access
123
+ control. Test both allowed and rejected requests, plus the headers, query
124
+ parameters, and bodies your clients send. The
125
+ [migration overview](../../articles/migration-overview.md) covers existing
126
+ gateway configurations.
127
+
128
+ 7. **Deploy and move a test client**
129
+
130
+ Follow [Deploy to the edge](../gateway/deploy-to-the-edge/local.mdx), then
131
+ repeat your tests against the deployed gateway URL. Change one test client's
132
+ base URL to that gateway and verify its workflow before moving more clients.
133
+ Keep the original endpoint available for rollback.
134
+
135
+ </Stepper>
136
+
137
+ ## Next steps
138
+
139
+ - [Add API key authentication](../gateway/add-api-key-auth/local.mdx).
140
+ - [Configure upstream AWS authentication](../../articles/upstream-iam-auth.mdx).
141
+ - [Plan your full migration](../../articles/migration-overview.md).
@@ -0,0 +1,129 @@
1
+ ---
2
+ category: Migration Guides
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ sidebar_label: Portal
6
+ title: Getting Started with API Migration - Portal
7
+ description:
8
+ Import an OpenAPI document in the Portal, forward requests to your existing
9
+ API, and verify a route before moving client traffic.
10
+ ---
11
+
12
+ <WizardSteps build="migrate" method="portal" />
13
+
14
+ <MethodTabs build="migrate" method="portal" />
15
+
16
+ Put Zuplo in front of an existing API by importing its OpenAPI document and
17
+ forwarding requests to the original backend. You'll test one read-only route
18
+ before changing any client traffic.
19
+
20
+ ## Prerequisites
21
+
22
+ - A [Zuplo account](https://portal.zuplo.com).
23
+ - Your existing API's OpenAPI document in JSON or YAML and its upstream URL.
24
+
25
+ ## Get your existing OpenAPI document
26
+
27
+ Get the OpenAPI document for the API you want to migrate from its repository,
28
+ API documentation, or current gateway. Download or export the existing file; you
29
+ don't need to write a new one for this tutorial.
30
+
31
+ <p>
32
+ If you don't have an OpenAPI document, download the{" "}
33
+ <a href="/docs/downloads/petstore-openapi.json" download="openapi.json">
34
+ Swagger Petstore OpenAPI document
35
+ </a>
36
+ .
37
+ </p>
38
+
39
+ Choose a read-only operation and call it directly on the original API. You'll
40
+ compare that response with the gateway's response. For Petstore, you can use
41
+ [`GET /pet/findByStatus?status=available`](https://petstore3.swagger.io/api/v3/pet/findByStatus?status=available).
42
+
43
+ ## Import and test a route
44
+
45
+ <Stepper>
46
+
47
+ 1. **Create the gateway**
48
+
49
+ In [**Projects**](https://portal.zuplo.com/+/account/projects), click **New
50
+ Project**, select **API & MCP Gateway**, enter `migrated-api`, and click
51
+ **Create Project**.
52
+
53
+ 2. **Import the document**
54
+
55
+ Open **Code → config/routes.oas.json** and click **Import OpenAPI**. Upload
56
+ your OpenAPI file, review the routes, and click **Complete Import**.
57
+
58
+ <ModalScreenshot>
59
+
60
+ ![Import an OpenAPI file in the Route Designer](/media/mcp-quickstart/import-openapi.png)
61
+
62
+ </ModalScreenshot>
63
+
64
+ The Route Designer should now list your API's routes. Importing an API
65
+ description doesn't configure its forwarding behavior or enforce its security
66
+ requirements; configure those next.
67
+
68
+ 3. **Set the upstream handler**
69
+
70
+ Select the read-only route you chose. Under **Request Handler**, select **URL
71
+ Forward** and set **Forward to** to your original API's base URL. Save your
72
+ changes.
73
+
74
+ The [URL Forward handler](../../handlers/url-forward.mdx) appends the request
75
+ path. Check the imported path before setting the base URL so that any server
76
+ prefix appears only once. For Petstore, use
77
+ `https://petstore3.swagger.io/api/v3` if the route path is
78
+ `/pet/findByStatus`, or `https://petstore3.swagger.io` if the imported path
79
+ already starts with `/api/v3`.
80
+
81
+ 4. **Compare the response**
82
+
83
+ Click **Test** next to the route's path, then send a GET request. Expect the
84
+ same status and response structure as the original API. Include the same
85
+ query parameters, such as `status=available` for the Petstore example.
86
+
87
+ Copy the gateway request URL from the test dialog and call it from a terminal
88
+ too:
89
+
90
+ ```bash
91
+ curl -i "https://YOUR_GATEWAY.zuplo.app/YOUR_ROUTE"
92
+ ```
93
+
94
+ Replace `YOUR_ROUTE` with the imported route path and include its query
95
+ parameters and any required headers. A `404` usually means the route or
96
+ upstream path differs from the imported path. If forwarding fails, recheck
97
+ the handler's upstream URL.
98
+
99
+ 5. **Preserve your API's behavior**
100
+
101
+ For a private API, add the
102
+ [authentication policies](../../articles/api-key-authentication.mdx) your
103
+ clients require and configure any credentials the upstream requires. OpenAPI
104
+ `security` metadata alone doesn't enforce authentication in Zuplo.
105
+
106
+ Before migrating real traffic, verify successful and failed requests, query
107
+ parameters, headers, request bodies, and status codes. Recreate any rate
108
+ limits or transformations currently handled by your old gateway. See the
109
+ [migration overview](../../articles/migration-overview.md) for
110
+ platform-specific migration guides.
111
+
112
+ 6. **Deploy and move a test client**
113
+
114
+ Follow [Deploy to the edge](../gateway/deploy-to-the-edge/index.mdx) to
115
+ connect source control and deploy. Repeat your tests using the deployed
116
+ gateway URL.
117
+
118
+ Change one test client's base URL to the gateway and verify its normal
119
+ workflow. Keep the old endpoint available while you move clients in stages;
120
+ roll that client back to its previous base URL if checks fail. Move your
121
+ production domain only after the gateway passes your migration checks.
122
+
123
+ </Stepper>
124
+
125
+ ## Next steps
126
+
127
+ - [Add API key authentication](../gateway/add-api-key-auth/index.mdx).
128
+ - [Import updated OpenAPI documents](../../articles/openapi.mdx).
129
+ - [Plan a migration from another gateway](../../articles/migration-overview.md).
package/docs/home.mdx CHANGED
@@ -1,6 +1,12 @@
1
1
  ---
2
2
  title: Zuplo Documentation
3
3
  sidebar_label: Home
4
+ fullWidth: true
5
+ centered: false
6
+ toc: false
7
+ disablePager: true
8
+ showLastModified: false
9
+ suggestEdit: false
4
10
  ---
5
11
 
6
12
  <DocsHome />
@@ -30,7 +30,8 @@ article for the latest plan availability.
30
30
  ## Prerequisites
31
31
 
32
32
  - A Zuplo project with the MCP Gateway plugin configured and at least one MCP
33
- route. See the [quickstart](../quickstart.mdx) if you haven't set one up yet.
33
+ route. See the [quickstart](../../getting-started/mcp-gateway/portal.mdx) if
34
+ you haven't set one up yet.
34
35
  - A ChatGPT Business, Enterprise, or Edu workspace for full MCP apps. Pro users
35
36
  can use read/fetch MCP servers only.
36
37
  - Developer Mode enabled for the ChatGPT account or workspace. OpenAI's current
@@ -14,7 +14,8 @@ OAuth flow against the gateway in your browser.
14
14
  ## Prerequisites
15
15
 
16
16
  - A Zuplo project with the MCP Gateway plugin configured and at least one MCP
17
- route. See the [quickstart](../quickstart.mdx) if you haven't set one up yet.
17
+ route. See the [quickstart](../../getting-started/mcp-gateway/portal.mdx) if
18
+ you haven't set one up yet.
18
19
  - Claude Code installed and signed in. Install instructions are at
19
20
  [code.claude.com](https://code.claude.com/).
20
21
 
@@ -13,7 +13,8 @@ Claude's connector settings, then complete the browser-based OAuth flow.
13
13
  ## Prerequisites
14
14
 
15
15
  - A Zuplo project with the MCP Gateway plugin configured and at least one MCP
16
- route. See the [quickstart](../quickstart.mdx) if you haven't set one up yet.
16
+ route. See the [quickstart](../../getting-started/mcp-gateway/portal.mdx) if
17
+ you haven't set one up yet.
17
18
  - Claude Desktop installed, or access to Claude.ai in your browser.
18
19
  - A Claude plan that supports custom connectors. Per
19
20
  [Anthropic's documentation](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp),
@@ -17,7 +17,8 @@ or by using a deeplink that opens Cursor and adds the entry.
17
17
  ## Prerequisites
18
18
 
19
19
  - A Zuplo project with the MCP Gateway plugin configured and at least one MCP
20
- route. See the [quickstart](../quickstart.mdx) if you haven't set one up yet.
20
+ route. See the [quickstart](../../getting-started/mcp-gateway/portal.mdx) if
21
+ you haven't set one up yet.
21
22
  - Cursor installed and signed in.
22
23
 
23
24
  ## Get the route URL
@@ -15,7 +15,8 @@ view.
15
15
  ## Prerequisites
16
16
 
17
17
  - A Zuplo project with the MCP Gateway plugin configured and at least one MCP
18
- route. See the [quickstart](../quickstart.mdx) if you haven't set one up yet.
18
+ route. See the [quickstart](../../getting-started/mcp-gateway/portal.mdx) if
19
+ you haven't set one up yet.
19
20
  - VS Code installed.
20
21
  - The GitHub Copilot extension installed and signed in.
21
22
 
@@ -256,8 +256,8 @@ A few capabilities are intentionally out of scope, at least today:
256
256
 
257
257
  - [Set up an MCP Gateway](./code-config/overview.mdx) — the how-to that puts
258
258
  this conceptual model into practice.
259
- - [Quickstart](./quickstart.mdx) — add the MCP Gateway plugin to a Zuplo project
260
- and front your first upstream.
259
+ - [Quickstart](../getting-started/mcp-gateway/portal.mdx) — add the MCP Gateway
260
+ plugin to a Zuplo project and front your first upstream.
261
261
  - [Authentication overview](./auth/overview.mdx) — the two OAuth layers expanded
262
262
  with the full standards table.
263
263
  - [Reference](./reference.mdx) — the full URL catalog, default TTLs,
@@ -32,8 +32,8 @@ MCP server and add it to any client you like.
32
32
 
33
33
  ## Run the wizard with a custom upstream
34
34
 
35
- Follow the [Portal quickstart](../quickstart.mdx) to start an **MCP Gateway
36
- Virtual Server**, with these choices:
35
+ Follow the [Portal quickstart](../../getting-started/mcp-gateway/portal.mdx) to
36
+ start an **MCP Gateway Virtual Server**, with these choices:
37
37
 
38
38
  1. **Upstream**: select the **Custom** tab instead of a library server. Set a
39
39
  **Name**, the **MCP Server URL** (the upstream provides this), and the
@@ -135,7 +135,8 @@ gateway presents the upstream's API key on their behalf.
135
135
 
136
136
  ## Related
137
137
 
138
- - [MCP Gateway quickstart](../quickstart.mdx): the full wizard walkthrough.
138
+ - [MCP Gateway quickstart](../../getting-started/mcp-gateway/portal.mdx): the
139
+ full wizard walkthrough.
139
140
  - [Connect an upstream OAuth provider](./connect-upstream-oauth.mdx): the OAuth
140
141
  equivalent of this guide.
141
142
  - [`set-headers-inbound` policy](../../policies/set-headers-inbound.mdx): the
@@ -30,7 +30,7 @@ the same policy directly in your project files.
30
30
 
31
31
  The **Tools** step appears while you add or edit an MCP Gateway Virtual Server.
32
32
  For a full walkthrough of creating one, see the
33
- [Portal quickstart](../quickstart.mdx).
33
+ [Portal quickstart](../../getting-started/mcp-gateway/portal.mdx).
34
34
 
35
35
  1. **Open the Virtual Server wizard.** On the **Code** tab, click **Add Route**
36
36
  and choose **MCP Gateway Virtual Server**, then work through the wizard to
@@ -119,6 +119,7 @@ is selected.
119
119
  directly, with description and annotation overrides.
120
120
  - [Capability filtering](../capability-filtering.mdx): the conceptual model
121
121
  behind curation.
122
- - [Portal quickstart](../quickstart.mdx): create a Virtual Server end to end.
122
+ - [Portal quickstart](../../getting-started/mcp-gateway/portal.mdx): create a
123
+ Virtual Server end to end.
123
124
  - [Connect a gateway to an upstream OAuth provider](./connect-upstream-oauth.mdx):
124
125
  pair curation with per-user upstream OAuth.