zuplo 6.70.57 → 6.70.60

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.
@@ -69,7 +69,7 @@ limits please contact sales to discuss pricing plans.
69
69
 
70
70
  Our general guidelines for what constitutes fair use are as follows:
71
71
 
72
- - Free Plan: 500 consumers or keys
72
+ - Free Plan: 100 consumers or keys
73
73
  - Builder Plan: 1,000 consumers or keys
74
74
  - Enterprise Plan: Custom
75
75
 
@@ -0,0 +1,99 @@
1
+ ---
2
+ title: Dynamic MCP Server - Quickstart
3
+ sidebar_label: "Dynamic MCP Server - Quickstart"
4
+ ---
5
+
6
+ Zuplo allows you to instantly add a managed MCP Server to your existing API,
7
+ powered by OpenAPI. In this guide we'll build one locally using the
8
+ [Zuplo CLI](../cli/overview.mdx).
9
+
10
+ If you're not familiar with Zuplo, it's recommended to go through
11
+ [Step 1](./step-1-setup-basic-gateway-local.mdx) first.
12
+
13
+ <Stepper>
14
+
15
+ 1. Create a **new project**
16
+
17
+ Create a new project and start the local development server:
18
+
19
+ ```bash
20
+ npx create-zuplo-api@latest
21
+ cd example-project
22
+ npm run dev
23
+ ```
24
+
25
+ See [Step 1](./step-1-setup-basic-gateway-local.mdx) for a walkthrough of the
26
+ `create-zuplo-api` prompts.
27
+
28
+ 1. Test the **Get all todos** route
29
+
30
+ The default template ships with a working todo API. Open the local **Route
31
+ Designer** at http://localhost:9100, select the **Get all todos** route, and
32
+ click the **Test** button next to the **Path** field.
33
+
34
+ A test dialog will open, click **Test** and you should see a `200 OK`
35
+ response with a few todos.
36
+
37
+ This is the basic API we're going to turn into a fully functioning MCP
38
+ Server.
39
+
40
+ 1. Create an **MCP Server**
41
+
42
+ On your `routes.oas.json` file, choose **Add** and then **MCP Server**.
43
+
44
+ ![Add Route](../../public/media/mcp-quickstart/add-mcp-route.png)
45
+
46
+ A new route will appear. Confirm the following values:
47
+ - **Summary**: enter `MCP Server`
48
+ - **Method**: choose `POST`
49
+ - **Path**: enter `/mcp` (the path can be anything, but /mcp is common)
50
+
51
+ Click the **Select Tools** option for your new MCP Server endpoint.
52
+
53
+ ![Select Tools](../../public/media/mcp-quickstart/select-mcp-tools.png)
54
+
55
+ You should see the MCP tools dialog. Check the tools from your `*.oas.json`
56
+ files that you want to surface in your MCP Server.
57
+
58
+ ![MCP Server](../../public/media/mcp-quickstart/mcp-tools-dialog.png)
59
+
60
+ Click **Update Tools**, then click **Save** at the bottom left.
61
+ Congratulations, you just published your first MCP Server! It's now available
62
+ locally at `http://localhost:9000/mcp`.
63
+
64
+ 1. Connect an **MCP Client**
65
+
66
+ You can connect any MCP client that can reach your local gateway. The AI
67
+ coding agent you configured in
68
+ [Step 1](./step-1-setup-basic-gateway-local.mdx) (such as Claude Code or
69
+ Cursor) is a great option — point it at your local MCP server URL:
70
+
71
+ ```
72
+ http://localhost:9000/mcp
73
+ ```
74
+
75
+ Since we didn't add authentication to our API, no credentials are required.
76
+
77
+ :::tip{title="Using a cloud MCP client"}
78
+
79
+ Cloud clients like the
80
+ [OpenAI playground](https://platform.openai.com/playground) can't reach
81
+ `localhost`. To use one, deploy your project first — see
82
+ [Step 4](./step-4-deploying-to-the-edge-local.mdx) — and use your deployed
83
+ MCP server URL instead.
84
+
85
+ :::
86
+
87
+ 1. Test your MCP Server
88
+
89
+ Prompt your MCP client to:
90
+
91
+ `list out all the todos`
92
+
93
+ The client should recognize that it needs to call the todos MCP Server.
94
+ Approve the tool call and you should see the todos listed 👏
95
+
96
+ </Stepper>
97
+
98
+ Congratulations! Now go read more about the
99
+ [MCP Server handler](/docs/handlers/mcp-server).
@@ -1,6 +1,6 @@
1
1
  ---
2
- title: MCP - Quick Start Guide
3
- sidebar_label: "MCP - Quick start"
2
+ title: Dynamic MCP Server - Quickstart
3
+ sidebar_label: "Dynamic MCP Server - Quickstart"
4
4
  ---
5
5
 
6
6
  Zuplo allows you to instantly add a managed MCP Server to your existing API,
@@ -8,127 +8,103 @@ sidebar_label: "1 - Setup Your Gateway"
8
8
  alternateLink="/articles/step-1-setup-basic-gateway"
9
9
  />
10
10
 
11
- In this tutorial we'll set up a simple gateway using Zuplo's local development.
12
- We'll use a simple origin API at [echo.zuplo.io](https://echo.zuplo.io). In
13
- later steps, we'll set up a Zuplo project and deploy it to the cloud.
11
+ In this tutorial we'll set up a simple gateway using Zuplo's local development,
12
+ powered by the [Zuplo CLI](../cli/overview.mdx). We'll use the default project
13
+ template, which ships with a working todo API.
14
14
 
15
15
  ## Requirements
16
16
 
17
17
  - [Node.js](https://nodejs.org/en/download) 20.0.0 or higher
18
18
 
19
- ## Getting Started
20
-
21
- ### Create a new project from scratch
22
-
23
19
  <Stepper>
24
20
 
25
- 1. Create a new project using
21
+ 1. **Create your project**
22
+
23
+ Create a new project with [create-zuplo-api](../cli/create-zuplo-api.mdx):
26
24
 
27
25
  ```bash
28
- npx create-zuplo-api@latest --empty
26
+ npx create-zuplo-api@latest
29
27
  ```
30
28
 
31
- The [create-zuplo-api](../cli/create-zuplo-api.mdx) tool supports creating
32
- projects from templates. This tutorial creates an empty project, but you can
33
- use other [templates](https://zuplo.com/examples) by specifying the
34
- `--example` flag.
35
-
36
- 1. Start your local gateway
29
+ The CLI walks you through a few prompts. First, name your project:
37
30
 
38
31
  ```bash
39
- cd <your-new-project-directory>
40
- npm run dev
32
+ What is your project named? … example-project
41
33
  ```
42
34
 
43
- 1. Use the [local Route Designer](./local-development-routes-designer.mdx) to
44
- create your first route. You can open the Route Designer by clicking the link
45
- in the terminal after you run `npm run dev`.
35
+ Next, the CLI offers to create a matching project on the Zuplo Portal. Answer
36
+ **Yes** this opens your browser to sign in (or create a free account) and
37
+ creates a Zuplo project to pair with your local one. If you already have an
38
+ account, you'll be asked which one to use.
46
39
 
47
40
  ```bash
48
- Started local development setup
49
- Ctrl+C to exit
50
-
51
- 🚀 Zuplo Gateway: http://localhost:9000
52
- 📘 Route Designer: http://localhost:9100 # <-- Your local route designer
41
+ ? Create a matching project on portal.zuplo.com? › No / Yes
53
42
  ```
54
43
 
55
- 1. Add your first **Route**
44
+ Creating the matching project automatically **links** your local project to
45
+ Zuplo, so features like API keys work in later steps without any extra setup.
56
46
 
57
- Inside of the Route Designer, click the **Add Route** button.
47
+ Finally, select any AI coding agents you'd like to configure, or choose
48
+ **None**:
58
49
 
59
- ![Add Route](../../public/media/step-1-setup-basic-gateway-local/image.png)
60
-
61
- Your API's first route will appear, with many options. First we'll configure
62
- the route to match specific incoming requests to the gateway:
63
- - **Summary**: Enter a summary, for example `Example Endpoint`.
64
- - **Method**: Leave as `GET`.
65
- - **Path**: The path will be pre-configured as `path-1`.
66
- - **Operation ID**: Pre-configured based on the path summary.
50
+ ```bash
51
+ ? Which AI coding agents would you like to configure? › - Space to select. Return to submit
52
+ ◯ Claude Code - CLAUDE.md, .claude/, .mcp.json
53
+ ◯ GitHub Copilot
54
+ ◯ Cursor
55
+ ◯ Windsurf
56
+ ◯ OpenAI Codex
57
+ ◯ None
58
+ ```
67
59
 
68
- Then we'll specify how the route will invoke the backend origin API, using a
69
- forward handler:
70
- - **Request Handler**: We'll use the
71
- [URL Forward Handler](../handlers/url-forward.mdx) which proxies requests
72
- by "Forwarding to" the same path on specified URL. In this case, enter
73
- `https://echo.zuplo.io`
60
+ 1. **Start your local gateway**
74
61
 
75
- ![Your First Route](../../public/media/step-1-setup-basic-gateway-local/image-1.png)
62
+ Change into your new project directory and start the development server:
76
63
 
77
- **Save your changes** - click **Save** in the bottom left, or press **CMD+S**
64
+ ```bash
65
+ cd example-project
66
+ npm run dev
67
+ ```
78
68
 
79
- 1. **Test** your route
69
+ The terminal prints links to your local gateway, Route Designer, and a local
70
+ Docs Server:
80
71
 
81
- You can test this route by clicking the **Test Route** button in the route
82
- designer.
72
+ ```bash
73
+ Started local development setup
74
+ Ctrl+C to exit
83
75
 
84
- ![Testing in the Route Designer](../../public/media/step-1-setup-basic-gateway-local/test.png)
76
+ 🚀 Zuplo Gateway: http://localhost:9000
77
+ 📘 Route Designer: http://localhost:9100
78
+ 📄 Docs Server: http://localhost:9200
79
+ ⚙️ Loaded env files:
80
+ - .env.zuplo
81
+ ```
85
82
 
86
- Alternatively, you can test the route in your favorite HTTP Client (for
87
- example Postman, HTTPie, curl, etc).
83
+ 1. **Explore your API**
88
84
 
89
- ```bash
90
- curl http://localhost:9000/0
91
-
92
- {
93
- "url": "https://echo.zuplo.io/path-1",
94
- "method": "GET",
95
- "query": {},
96
- "headers": {
97
- "accept-encoding": "gzip, br",
98
- "connection": "Keep-Alive",
99
- "host": "echo.zuplo.io",
100
- "true-client-ip": "2a06:98c0:3600::103",
101
- "x-forwarded-proto": "https",
102
- "x-real-ip": "2a06:98c0:3600::103",
103
- "zp-rid": "b9822e0f-af32-4002-a6ba-3a899c7f2669",
104
- "zuplo-request-id": "b9822e0f-af32-4002-a6ba-3a899c7f2669"
105
- }
106
- }
107
- ```
85
+ The default template ships with a working **todo API** — four routes
86
+ (`GET /todos`, `POST /todos`, `PUT /todos/{id}`, `DELETE /todos/{id}`)
87
+ defined in `config/routes.oas.json`.
108
88
 
109
- 1. Now that you have a simple gateway running, we can deploy it to the cloud
110
- using the [Zuplo CLI](../cli/overview.mdx). When you run this command, you
111
- will be prompted to login if you haven't already.
89
+ Open the [local Route Designer](./local-development-routes-designer.mdx) at
90
+ http://localhost:9100 you can also click the link printed in the terminal —
91
+ to see the routes. Select **Get all todos** to inspect how it's configured;
92
+ you can change the path, method, request handler, and add policies from here.
112
93
 
113
- If you haven't already created a Zuplo project, you will be prompted to do
114
- so. If you do have a project, you can choose to deploy to it or you can
115
- specify the `--project` flag to specify the project you want to deploy to.
94
+ 1. **Test the API**
116
95
 
117
- ```bash
118
- npx zuplo deploy
119
- ```
96
+ Test the **Get all todos** route by clicking the **Test** button next to the
97
+ **Path** field in the Route Designer.
120
98
 
121
- You should see output similar to this:
99
+ You can also call it directly with your favorite HTTP client (for example
100
+ Postman, HTTPie, or curl):
122
101
 
123
102
  ```bash
124
- ? You don't have any projects configured for this account.
125
- Enter the name of the new project: my-tutorial
126
- ✔ Project my-tutorial created successfully.
127
- ✔ Deployed to https://my-tutorial-main-11686c3.zuplo.app (93/150)
103
+ curl http://localhost:9000/todos
128
104
  ```
129
105
 
130
- Your project is now deployed to the cloud and you can access it at the URL
131
- provided in the output.
106
+ You should receive a `200 OK` response with a JSON list of todos. Your
107
+ gateway is now serving traffic locally.
132
108
 
133
109
  </Stepper>
134
110
 
@@ -3,11 +3,6 @@ title: Step 2 - Add Rate Limiting
3
3
  sidebar_label: "2 - Rate Limiting"
4
4
  ---
5
5
 
6
- <QuickstartPicker
7
- mode="local"
8
- alternateLink="/articles/step-2-add-rate-limiting"
9
- />
10
-
11
6
  In this guide we'll add simple Rate Limiting to a route. If you don't have one
12
7
  ready, complete [Step 1](./step-1-setup-basic-gateway-local.mdx) first.
13
8
 
@@ -25,100 +20,74 @@ built-in (including rate limiting) to save you time. You can check out
25
20
  :::
26
21
 
27
22
  Zuplo offers a programmable approach to rate limiting that allows you to vary
28
- how rate limiting is applied for each customer, or request.s
23
+ how rate limiting is applied for each customer or request.
29
24
 
30
- In this example, we'll add a simple IP based rate limiter, but you should look
31
- into dynamic rate limiting to see the full power of the world's best rate
32
- limiter.
25
+ In this example, we'll add a simple IP-based rate limiter, but you should also
26
+ explore [dynamic rate limiting](./step-5-dynamic-rate-limiting-local.mdx) to see
27
+ the full power of the world's best rate limiter.
33
28
 
34
29
  <Stepper>
35
30
 
36
- 1. Link your Local Project
37
-
38
- When developing locally with Zuplo, you can "link" your local project to
39
- your Zuplo project using the `zuplo link` command. This allows you to test
40
- your changes in a real environment.
41
-
42
- When you run the command you will be prompted to select your Zuplo account,
43
- project, and environment. You can pick any environment.
44
-
45
- ```bash
46
- npx zuplo link
47
- ```
48
-
49
- After your project is linked, environment variables and other configuration
50
- from your Zuplo project will be available in your local development
51
- environment.
52
-
53
- 1. Start your Project
54
-
55
- You can start your project using the following command:
56
-
57
- ```bash
58
- npx zuplo dev
59
- ```
60
-
61
- After your project is started, you can open the local route designer at
62
- http://localhost:9100.
31
+ 1. Add the rate-limiting Policy
63
32
 
64
- 1. Add the rate-limiting Policy
33
+ Open the local **Route Designer** at http://localhost:9100. If your gateway
34
+ isn't already running, start it from your project directory with
35
+ `npm run dev`.
65
36
 
66
- Open the local **Route Designer** by navigating to http://localhost:9100/.
67
- Select your route and click **Add Policy** on the incoming Request policies
68
- section.
37
+ Select your route and click **Add Policy** on the incoming request policies
38
+ section.
69
39
 
70
- <BrowserScreenshot url="http://localhost:9100/?path=routes.oas.json">
40
+ <BrowserScreenshot url="http://localhost:9100/?path=routes.oas.json">
71
41
 
72
- ![Add Policy](../../public/media/step-2-add-rate-limiting-local/image.png)
42
+ ![Add Policy](../../public/media/step-2-add-rate-limiting-local/image.png)
73
43
 
74
- </BrowserScreenshot>
44
+ </BrowserScreenshot>
75
45
 
76
- Search for the Rate Limiting policy (not the "Complex" one) and click it.
46
+ Search for the Rate Limiting policy (not the "Complex" one) and click it.
77
47
 
78
- <ModalScreenshot>
48
+ <ModalScreenshot>
79
49
 
80
- ![Add rate-limiting policy](../../public/media/step-2-add-rate-limiting/choose-rate-limiter.png)
50
+ ![Add rate-limiting policy](../../public/media/step-2-add-rate-limiting/choose-rate-limiter.png)
81
51
 
82
- </ModalScreenshot>
52
+ </ModalScreenshot>
83
53
 
84
- By default, the policy will rate limit based on the caller's IP address (as
85
- indicated by the `rateLimitBy` field). It will allow 2 requests
86
- (`requestsAllowed`) every 1 minute (`timeWindowMinutes`). You can explore
87
- the rest of the policy's documentation and configuration in the right panel.
54
+ By default, the policy will rate limit based on the caller's IP address (as
55
+ indicated by the `rateLimitBy` field). It will allow 2 requests
56
+ (`requestsAllowed`) every 1 minute (`timeWindowMinutes`). You can explore the
57
+ rest of the policy's documentation and configuration in the right panel.
88
58
 
89
- ![Rate limiting policy](../../public/media/step-2-add-rate-limiting/create-policy.png)
59
+ ![Rate limiting policy](../../public/media/step-2-add-rate-limiting/create-policy.png)
90
60
 
91
- To apply the policy, click **Create Policy**. Then, save your changes to
92
- redeploy.
61
+ To apply the policy, click **Create Policy**, then save your changes.
93
62
 
94
- 1. Testing your Policy
63
+ 1. Testing your Policy
95
64
 
96
- Now try firing some requests against your API. You should receive a **429
97
- Too many requests** on your 3rd request. You can use any API test tool you
98
- prefer, such as Postman, HTTPie, or curl.
65
+ Now try firing some requests against your API. You should receive a **429 Too
66
+ many requests** on your 3rd request. You can use any API test tool you
67
+ prefer, such as Postman, HTTPie, or curl.
99
68
 
100
- ```bash
101
- curl http://localhost:9000/path-1
102
- ```
69
+ ```bash
70
+ curl http://localhost:9000/todos
71
+ ```
103
72
 
104
- After you make the request 3 times you will see a response similar to:
73
+ After you make the request 3 times you will see a response similar to:
105
74
 
106
- ```json
107
- {
108
- "type": "https://httpproblems.com/http-status/429",
109
- "title": "Too Many Requests",
110
- "status": 429,
111
- "instance": "/path-1",
112
- "trace": {
113
- "timestamp": "2025-08-26T21:50:40.220Z",
114
- "requestId": "4c62d425-2cb0-4a6c-9ac0-8d04a5f10c57",
115
- "buildId": "f49c4070-7c0a-441b-a5fd-4e35b5fe41b7"
116
- }
117
- }
118
- ```
75
+ ```json
76
+ {
77
+ "type": "https://httpproblems.com/http-status/429",
78
+ "title": "Too Many Requests",
79
+ "status": 429,
80
+ "instance": "/todos",
81
+ "trace": {
82
+ "timestamp": "2025-08-26T21:50:40.220Z",
83
+ "requestId": "4c62d425-2cb0-4a6c-9ac0-8d04a5f10c57",
84
+ "buildId": "f49c4070-7c0a-441b-a5fd-4e35b5fe41b7"
85
+ }
86
+ }
87
+ ```
119
88
 
120
- Your rate limiting policy is now intercepting excess requests, protecting
121
- your API.
89
+ Your rate limiting policy is now intercepting excess requests, protecting
90
+ your API.
122
91
 
123
92
  </Stepper>
124
93
 
@@ -3,11 +3,6 @@ title: Step 2 - Add Rate Limiting
3
3
  sidebar_label: "2 - Rate Limiting"
4
4
  ---
5
5
 
6
- <QuickstartPicker
7
- mode="portal"
8
- alternateLink="/articles/step-2-add-rate-limiting-local"
9
- />
10
-
11
6
  In this guide we'll add simple Rate Limiting to a route. If you don't have one
12
7
  ready, complete [Step 1](./step-1-setup-basic-gateway.mdx) first.
13
8