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.
- package/docs/articles/limits.mdx +1 -1
- package/docs/articles/mcp-quickstart-local.mdx +99 -0
- package/docs/articles/mcp-quickstart.mdx +2 -2
- package/docs/articles/step-1-setup-basic-gateway-local.mdx +60 -84
- package/docs/articles/step-2-add-rate-limiting-local.mdx +46 -77
- package/docs/articles/step-2-add-rate-limiting.mdx +0 -5
- package/docs/articles/step-3-add-api-key-auth-local.mdx +80 -130
- package/docs/articles/step-3-add-api-key-auth.mdx +0 -5
- package/docs/articles/step-4-deploying-to-the-edge-local.mdx +106 -0
- package/docs/articles/step-5-dynamic-rate-limiting-local.mdx +180 -0
- package/docs/articles/support.mdx +8 -8
- package/docs/dev-portal/zudoku/components/callout.mdx +126 -8
- package/docs/dev-portal/zudoku/components/head.mdx +2 -12
- package/docs/dev-portal/zudoku/customization/colors-theme.mdx +19 -0
- package/docs/dev-portal/zudoku/markdown/admonitions.md +79 -0
- package/docs/mcp-gateway/code-config/overview.mdx +13 -28
- package/docs/mcp-gateway/how-to/connect-upstream-api-key.mdx +146 -0
- package/docs/mcp-gateway/how-to/curate-tools-local.mdx +288 -0
- package/docs/mcp-gateway/how-to/curate-tools.mdx +103 -257
- package/docs/mcp-gateway/quickstart-local.mdx +291 -0
- package/docs/mcp-gateway/quickstart.mdx +208 -189
- package/docs/policies/monetization-inbound/schema.json +11 -1
- package/package.json +4 -4
package/docs/articles/limits.mdx
CHANGED
|
@@ -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:
|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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).
|
|
@@ -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
|
-
|
|
13
|
-
|
|
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
|
|
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
|
|
26
|
+
npx create-zuplo-api@latest
|
|
29
27
|
```
|
|
30
28
|
|
|
31
|
-
The
|
|
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
|
-
|
|
40
|
-
npm run dev
|
|
32
|
+
✔ What is your project named? … example-project
|
|
41
33
|
```
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
47
|
+
Finally, select any AI coding agents you'd like to configure, or choose
|
|
48
|
+
**None**:
|
|
58
49
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
62
|
+
Change into your new project directory and start the development server:
|
|
76
63
|
|
|
77
|
-
|
|
64
|
+
```bash
|
|
65
|
+
cd example-project
|
|
66
|
+
npm run dev
|
|
67
|
+
```
|
|
78
68
|
|
|
79
|
-
|
|
69
|
+
The terminal prints links to your local gateway, Route Designer, and a local
|
|
70
|
+
Docs Server:
|
|
80
71
|
|
|
81
|
-
|
|
82
|
-
|
|
72
|
+
```bash
|
|
73
|
+
Started local development setup
|
|
74
|
+
Ctrl+C to exit
|
|
83
75
|
|
|
84
|
-
|
|
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
|
-
|
|
87
|
-
example Postman, HTTPie, curl, etc).
|
|
83
|
+
1. **Explore your API**
|
|
88
84
|
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
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
|
-
|
|
118
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
131
|
-
|
|
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
|
|
23
|
+
how rate limiting is applied for each customer or request.
|
|
29
24
|
|
|
30
|
-
In this example, we'll add a simple IP
|
|
31
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
section.
|
|
37
|
+
Select your route and click **Add Policy** on the incoming request policies
|
|
38
|
+
section.
|
|
69
39
|
|
|
70
|
-
|
|
40
|
+
<BrowserScreenshot url="http://localhost:9100/?path=routes.oas.json">
|
|
71
41
|
|
|
72
|
-
|
|
42
|
+

|
|
73
43
|
|
|
74
|
-
|
|
44
|
+
</BrowserScreenshot>
|
|
75
45
|
|
|
76
|
-
|
|
46
|
+
Search for the Rate Limiting policy (not the "Complex" one) and click it.
|
|
77
47
|
|
|
78
|
-
|
|
48
|
+
<ModalScreenshot>
|
|
79
49
|
|
|
80
|
-
|
|
50
|
+

|
|
81
51
|
|
|
82
|
-
|
|
52
|
+
</ModalScreenshot>
|
|
83
53
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
59
|
+

|
|
90
60
|
|
|
91
|
-
|
|
92
|
-
redeploy.
|
|
61
|
+
To apply the policy, click **Create Policy**, then save your changes.
|
|
93
62
|
|
|
94
|
-
1.
|
|
63
|
+
1. Testing your Policy
|
|
95
64
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
69
|
+
```bash
|
|
70
|
+
curl http://localhost:9000/todos
|
|
71
|
+
```
|
|
103
72
|
|
|
104
|
-
|
|
73
|
+
After you make the request 3 times you will see a response similar to:
|
|
105
74
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
121
|
-
|
|
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
|
|