zuplo 7.8.6 → 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.
- package/docs/ai-gateway/custom-policies.mdx +2 -1
- package/docs/ai-gateway/usage-limits.mdx +2 -2
- package/docs/api-management/overview.md +2 -2
- package/docs/articles/add-api-to-backstage.mdx +4 -3
- package/docs/articles/api-key-consumer-bucket-portal-ui.mdx +1 -1
- package/docs/articles/api-key-management.mdx +1 -1
- package/docs/articles/migrate-from-apigee.md +3 -3
- package/docs/articles/migrate-from-aws-api-gateway.md +3 -3
- package/docs/articles/migrate-from-azure-apim.md +3 -3
- package/docs/articles/migrate-from-kong.md +3 -3
- package/docs/articles/source-control-setup-github.mdx +2 -2
- package/docs/cli/create-zuplo-api.mdx +4 -4
- package/docs/cli/openapi-merge.mdx +1 -1
- package/docs/cli/openapi-merge.partial.mdx +1 -1
- package/docs/concepts/ai-gateway.mdx +1 -1
- package/docs/concepts/mcp.mdx +4 -4
- package/docs/dedicated/architecture.mdx +1 -1
- package/docs/errors/not-found.mdx +1 -1
- package/docs/getting-started/ai-gateway/portal.mdx +181 -0
- package/docs/getting-started/dev-portal/agent.mdx +148 -0
- package/docs/getting-started/dev-portal/index.mdx +26 -0
- package/docs/getting-started/dev-portal/local.mdx +213 -0
- package/docs/getting-started/dev-portal/portal.mdx +146 -0
- package/docs/{articles/step-3-add-api-key-auth.mdx → getting-started/gateway/add-api-key-auth/index.mdx} +30 -24
- package/docs/{articles/step-3-add-api-key-auth-local.mdx → getting-started/gateway/add-api-key-auth/local.mdx} +26 -21
- package/docs/{articles/step-2-add-rate-limiting.mdx → getting-started/gateway/add-rate-limiting/index.mdx} +20 -14
- package/docs/{articles/step-2-add-rate-limiting-local.mdx → getting-started/gateway/add-rate-limiting/local.mdx} +22 -15
- package/docs/getting-started/gateway/agent.mdx +198 -0
- package/docs/{articles/step-4-deploying-to-the-edge.mdx → getting-started/gateway/deploy-to-the-edge/index.mdx} +36 -27
- package/docs/{articles/step-4-deploying-to-the-edge-local.mdx → getting-started/gateway/deploy-to-the-edge/local.mdx} +46 -18
- package/docs/{articles/step-5-dynamic-rate-limiting.mdx → getting-started/gateway/dynamic-rate-limiting/index.mdx} +21 -12
- package/docs/{articles/step-5-dynamic-rate-limiting-local.mdx → getting-started/gateway/dynamic-rate-limiting/local.mdx} +21 -12
- package/docs/getting-started/gateway/index.mdx +24 -0
- package/docs/{articles/step-1-setup-basic-gateway.mdx → getting-started/gateway/setup-a-basic-gateway/index.mdx} +31 -22
- package/docs/{articles/step-1-setup-basic-gateway-local.mdx → getting-started/gateway/setup-a-basic-gateway/local.mdx} +22 -16
- package/docs/getting-started/index.mdx +25 -0
- package/docs/getting-started/mcp-gateway/agent.mdx +161 -0
- package/docs/getting-started/mcp-gateway/index.mdx +25 -0
- package/docs/{mcp-gateway/quickstart-local.mdx → getting-started/mcp-gateway/local.mdx} +35 -31
- package/docs/{mcp-gateway/quickstart.mdx → getting-started/mcp-gateway/portal.mdx} +64 -48
- package/docs/getting-started/mcp-server/agent.mdx +152 -0
- package/docs/getting-started/mcp-server/index.mdx +25 -0
- package/docs/{articles/mcp-quickstart-local.mdx → getting-started/mcp-server/local.mdx} +24 -13
- package/docs/{articles/mcp-quickstart.mdx → getting-started/mcp-server/portal.mdx} +35 -15
- package/docs/getting-started/migrate/agent.mdx +129 -0
- package/docs/getting-started/migrate/index.mdx +25 -0
- package/docs/getting-started/migrate/local.mdx +141 -0
- package/docs/getting-started/migrate/portal.mdx +129 -0
- package/docs/home.mdx +6 -0
- package/docs/mcp-gateway/connect-clients/chatgpt.mdx +2 -1
- package/docs/mcp-gateway/connect-clients/claude-code.mdx +2 -1
- package/docs/mcp-gateway/connect-clients/claude-desktop.mdx +2 -1
- package/docs/mcp-gateway/connect-clients/cursor.mdx +2 -1
- package/docs/mcp-gateway/connect-clients/vs-code.mdx +2 -1
- package/docs/mcp-gateway/how-it-works.mdx +2 -2
- package/docs/mcp-gateway/how-to/connect-upstream-api-key.mdx +4 -3
- package/docs/mcp-gateway/how-to/curate-tools.mdx +3 -2
- package/docs/mcp-gateway/overview.mdx +3 -3
- package/docs/policies/ai-gateway-smart-router-inbound/doc.md +14 -0
- package/docs/policies/akamai-ai-firewall-v2-inbound/doc.md +7 -0
- package/package.json +5 -5
- package/docs/ai-gateway/getting-started.mdx +0 -307
- package/docs/dev-portal/local-development.mdx +0 -72
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
category: MCP Gateway
|
|
3
|
+
showLastModified: false
|
|
4
|
+
suggestEdit: false
|
|
5
|
+
title: Getting Started with MCP Gateway - Editor
|
|
4
6
|
description:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Claude Desktop. No identity provider setup required to start.
|
|
7
|
+
A step-by-step guide to building a mcp gateway with Zuplo using local
|
|
8
|
+
development.
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
<
|
|
11
|
+
<WizardSteps build="mcp-gateway" method="local" />
|
|
12
|
+
|
|
13
|
+
<MethodTabs build="mcp-gateway" method="local" />
|
|
11
14
|
|
|
12
15
|
Build a Zuplo MCP Gateway fronting Linear, running locally at
|
|
13
16
|
`http://127.0.0.1:9000/mcp/linear-v1`. By the end, Claude Desktop connects over
|
|
@@ -20,24 +23,23 @@ and a route. This guide uses Linear as the upstream and the built-in
|
|
|
20
23
|
it out. For production, swap in your provider: the gateway wraps Auth0, Okta,
|
|
21
24
|
Microsoft Entra, Google, Clerk, Cognito, Keycloak, Logto, OneLogin, PingOne, and
|
|
22
25
|
WorkOS, plus a generic OIDC fallback. See the
|
|
23
|
-
[provider catalog](
|
|
26
|
+
[provider catalog](../../mcp-gateway/auth/overview.mdx#identity-providers).
|
|
24
27
|
|
|
25
|
-
Prefer the browser with no local setup? The
|
|
26
|
-
|
|
27
|
-
Portal UI.
|
|
28
|
+
Prefer the browser with no local setup? The [Portal quickstart](./portal.mdx)
|
|
29
|
+
reaches the same result through the Zuplo Portal UI.
|
|
28
30
|
|
|
29
31
|
## Prerequisites
|
|
30
32
|
|
|
31
33
|
- [Node.js](https://nodejs.org/en/download) 24 or higher.
|
|
32
|
-
- A local Zuplo project. Create
|
|
34
|
+
- A local Zuplo project. Create one with:
|
|
33
35
|
|
|
34
36
|
```bash
|
|
35
|
-
npx create-zuplo-api@latest
|
|
37
|
+
npx create-zuplo-api@latest my-api-project
|
|
36
38
|
```
|
|
37
39
|
|
|
38
40
|
Then `cd` into the new directory. See
|
|
39
|
-
[`create-zuplo-api`](
|
|
40
|
-
[import an existing portal project](
|
|
41
|
+
[`create-zuplo-api`](../../cli/create-zuplo-api.mdx) for other options, or
|
|
42
|
+
[import an existing portal project](../../articles/local-development.mdx#import-your-existing-project)
|
|
41
43
|
by connecting it to Git and cloning it.
|
|
42
44
|
|
|
43
45
|
:::note
|
|
@@ -45,10 +47,12 @@ Portal UI.
|
|
|
45
47
|
New projects created with `create-zuplo-api` ship a recent `compatibilityDate`,
|
|
46
48
|
so MCP Gateway features work out of the box. If you're adding the gateway to an
|
|
47
49
|
older project and the build complains about the compatibility date, see
|
|
48
|
-
[Compatibility dates](
|
|
50
|
+
[Compatibility dates](../../mcp-gateway/code-config/compatibility-dates.mdx).
|
|
49
51
|
|
|
50
52
|
:::
|
|
51
53
|
|
|
54
|
+
## Run your MCP Gateway locally
|
|
55
|
+
|
|
52
56
|
<Stepper>
|
|
53
57
|
|
|
54
58
|
1. **Register the MCP Gateway plugin**
|
|
@@ -105,7 +109,7 @@ older project and the build complains about the compatibility date, see
|
|
|
105
109
|
Before deploying, configure an OIDC identity provider. The dev-login endpoint
|
|
106
110
|
only accepts requests from loopback origins and returns `403 Forbidden` for
|
|
107
111
|
other origins. See
|
|
108
|
-
[Configure local and deployed environments](
|
|
112
|
+
[Configure local and deployed environments](../../mcp-gateway/code-config/local-development.mdx#configure-local-and-deployed-environments)
|
|
109
113
|
to use one policy with different environment variables for each environment.
|
|
110
114
|
|
|
111
115
|
:::
|
|
@@ -212,7 +216,7 @@ older project and the build complains about the compatibility date, see
|
|
|
212
216
|
Use `127.0.0.1` in your MCP client URL to match the policy in this tutorial.
|
|
213
217
|
You can use `localhost` instead, but update both URLs to avoid a callback
|
|
214
218
|
mismatch. See
|
|
215
|
-
[Local development](
|
|
219
|
+
[Local development](../../mcp-gateway/code-config/local-development.mdx#use-one-loopback-origin-everywhere).
|
|
216
220
|
|
|
217
221
|
:::
|
|
218
222
|
|
|
@@ -237,7 +241,7 @@ older project and the build complains about the compatibility date, see
|
|
|
237
241
|
:::
|
|
238
242
|
|
|
239
243
|
For per-client setup details, see
|
|
240
|
-
[Connect MCP clients](
|
|
244
|
+
[Connect MCP clients](../../mcp-gateway/connect-clients/overview.mdx).
|
|
241
245
|
|
|
242
246
|
7. **Test it**
|
|
243
247
|
|
|
@@ -258,22 +262,22 @@ scales out to as many upstream MCP servers as you want to front.
|
|
|
258
262
|
The local gateway on `127.0.0.1` is for development only, and the dev-login
|
|
259
263
|
shortcut works over loopback alone. Before giving others access, swap in a real
|
|
260
264
|
identity provider and ship the gateway through the Zuplo Portal. See
|
|
261
|
-
[environments](
|
|
265
|
+
[environments](../../articles/environments.mdx) for setting up a production
|
|
262
266
|
deployment.
|
|
263
267
|
|
|
264
268
|
:::
|
|
265
269
|
|
|
266
270
|
## Next steps
|
|
267
271
|
|
|
268
|
-
- [Deploy from the Portal](./
|
|
269
|
-
|
|
270
|
-
- [Local development](
|
|
271
|
-
shortcut in depth, environment variables, and local-only quirks.
|
|
272
|
-
- [Connect more clients](
|
|
273
|
-
VS Code, ChatGPT, and any other MCP client.
|
|
274
|
-
- [How it works](
|
|
275
|
-
surfaces.
|
|
276
|
-
- [Add more upstreams](
|
|
277
|
-
MCP servers from one Zuplo project.
|
|
278
|
-
- [Capability filtering](
|
|
279
|
-
and resources each route exposes.
|
|
272
|
+
- [Deploy from the Portal](./portal.mdx): swap the dev-login shortcut for a real
|
|
273
|
+
identity provider and ship the gateway through the Zuplo Portal.
|
|
274
|
+
- [Local development](../../mcp-gateway/code-config/local-development.mdx): the
|
|
275
|
+
dev-login shortcut in depth, environment variables, and local-only quirks.
|
|
276
|
+
- [Connect more clients](../../mcp-gateway/connect-clients/overview.mdx): Claude
|
|
277
|
+
Code, Cursor, VS Code, ChatGPT, and any other MCP client.
|
|
278
|
+
- [How it works](../../mcp-gateway/how-it-works.mdx): the request lifecycle and
|
|
279
|
+
the two OAuth surfaces.
|
|
280
|
+
- [Add more upstreams](../../mcp-gateway/code-config/multi-upstream.mdx): front
|
|
281
|
+
several upstream MCP servers from one Zuplo project.
|
|
282
|
+
- [Capability filtering](../../mcp-gateway/capability-filtering.mdx): curate the
|
|
283
|
+
tools, prompts, and resources each route exposes.
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
category: MCP Gateway
|
|
3
|
+
showLastModified: false
|
|
4
|
+
suggestEdit: false
|
|
5
|
+
title: Getting Started with MCP Gateway - Portal
|
|
4
6
|
description:
|
|
5
|
-
|
|
6
|
-
Virtual Server with the guided wizard, set your identity provider's
|
|
7
|
-
environment variables, and connect Claude Desktop. No local setup required.
|
|
7
|
+
A step-by-step guide to building a mcp gateway with Zuplo using Zuplo Portal.
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
<
|
|
10
|
+
<WizardSteps build="mcp-gateway" method="portal" />
|
|
11
|
+
|
|
12
|
+
<MethodTabs build="mcp-gateway" method="portal" />
|
|
11
13
|
|
|
12
14
|
Build a Zuplo MCP Gateway fronting Linear at
|
|
13
15
|
`https://<your-gateway>/mcp/linear-v1`, entirely in the browser. By the end,
|
|
@@ -21,40 +23,53 @@ authenticate upstream. This guide uses Linear and Auth0, but the wizard supports
|
|
|
21
23
|
any upstream in its library (plus custom servers) and every identity provider
|
|
22
24
|
Zuplo wraps.
|
|
23
25
|
|
|
24
|
-
Prefer the CLI? The [local quickstart](./
|
|
25
|
-
|
|
26
|
+
Prefer the CLI? The [local quickstart](./local.mdx) reaches the same result on
|
|
27
|
+
your machine.
|
|
26
28
|
|
|
27
29
|
## Prerequisites
|
|
28
30
|
|
|
29
31
|
- A free [Zuplo account](https://portal.zuplo.com).
|
|
30
32
|
- An account with your identity provider. For the Auth0 example, that's an Auth0
|
|
31
33
|
tenant with a Regular Web Application configured. The
|
|
32
|
-
[Configuring Auth0](
|
|
34
|
+
[Configuring Auth0](../../mcp-gateway/auth/configuring-auth0.mdx#set-up-the-auth0-tenant)
|
|
33
35
|
guide covers the dashboard side. From it you'll need the **domain**, **client
|
|
34
36
|
ID**, and **client secret**.
|
|
35
37
|
|
|
38
|
+
## Create and test your MCP Gateway
|
|
39
|
+
|
|
36
40
|
<Stepper>
|
|
37
41
|
|
|
38
|
-
1. **Create a project
|
|
42
|
+
1. **Create a Zuplo project**
|
|
43
|
+
|
|
44
|
+
In the Zuplo Portal, open
|
|
45
|
+
[**Projects**](https://portal.zuplo.com/+/account/projects), click **New
|
|
46
|
+
Project**, and select **API & MCP Gateway**. Name the project
|
|
47
|
+
`my-mcp-gateway`, choose a blank project rather than importing one, and click
|
|
48
|
+
**Create Project**. The project opens on the **Project** tab.
|
|
49
|
+
|
|
50
|
+
<ModalScreenshot>
|
|
51
|
+
|
|
52
|
+

|
|
53
|
+
|
|
54
|
+
</ModalScreenshot>
|
|
55
|
+
|
|
56
|
+
2. **Start an MCP Gateway Virtual Server**
|
|
39
57
|
|
|
40
|
-
|
|
41
|
-
[create a new empty project](https://portal.zuplo.com/+/account/projects/new)
|
|
42
|
-
(choose a blank project rather than importing one). The project opens on the
|
|
43
|
-
**Project** tab; click the **Code** tab.
|
|
58
|
+
Open the **Code** tab in the project you created.
|
|
44
59
|
|
|
45
|
-
Click **Add
|
|
46
|
-
menu.
|
|
60
|
+
Click **Add to Gateway** (or **Add Route** if the project already has
|
|
61
|
+
routes), then choose **MCP Gateway Virtual Server** from the menu.
|
|
47
62
|
|
|
48
63
|
<ModalScreenshot size="md">
|
|
49
64
|
|
|
50
|
-

|
|
51
66
|
|
|
52
67
|
</ModalScreenshot>
|
|
53
68
|
|
|
54
69
|
The **New MCP Gateway Virtual Server** wizard opens and walks through four
|
|
55
70
|
steps: the upstream server, inbound auth, tools, and outbound auth.
|
|
56
71
|
|
|
57
|
-
|
|
72
|
+
3. **Choose the upstream MCP server**
|
|
58
73
|
|
|
59
74
|
On the **Upstream** step, pick the MCP server this virtual server fronts.
|
|
60
75
|
Select **Linear** from the **Library** of pre-configured servers. The
|
|
@@ -65,7 +80,7 @@ result on your machine.
|
|
|
65
80
|
|
|
66
81
|
<ModalScreenshot size="md">
|
|
67
82
|
|
|
68
|
-

|
|
69
84
|
|
|
70
85
|
</ModalScreenshot>
|
|
71
86
|
|
|
@@ -76,7 +91,7 @@ result on your machine.
|
|
|
76
91
|
|
|
77
92
|
:::
|
|
78
93
|
|
|
79
|
-
|
|
94
|
+
4. **Choose an identity provider**
|
|
80
95
|
|
|
81
96
|
The **Inbound Auth** step controls how MCP clients authenticate _to_ the
|
|
82
97
|
gateway. Pick your identity provider; this guide uses **Auth0**. The wizard
|
|
@@ -84,7 +99,7 @@ result on your machine.
|
|
|
84
99
|
|
|
85
100
|
<ModalScreenshot size="md">
|
|
86
101
|
|
|
87
|
-

|
|
88
103
|
|
|
89
104
|
</ModalScreenshot>
|
|
90
105
|
|
|
@@ -93,11 +108,12 @@ result on your machine.
|
|
|
93
108
|
The catalog includes WorkOS, Google, Okta, Microsoft Entra, Cognito, Clerk,
|
|
94
109
|
Keycloak, Logto, OneLogin, and PingOne. You can also select an existing
|
|
95
110
|
inbound policy, or pick **None** if this route doesn't need gateway OAuth.
|
|
96
|
-
See the
|
|
111
|
+
See the
|
|
112
|
+
[provider catalog](../../mcp-gateway/auth/overview.mdx#identity-providers).
|
|
97
113
|
|
|
98
114
|
:::
|
|
99
115
|
|
|
100
|
-
|
|
116
|
+
5. **Decide what the virtual server exposes**
|
|
101
117
|
|
|
102
118
|
The **Tools** step controls which tools, prompts, and resources the virtual
|
|
103
119
|
server exposes to its clients:
|
|
@@ -111,7 +127,7 @@ result on your machine.
|
|
|
111
127
|
|
|
112
128
|
<ModalScreenshot size="md">
|
|
113
129
|
|
|
114
|
-

|
|
115
131
|
|
|
116
132
|
</ModalScreenshot>
|
|
117
133
|
|
|
@@ -122,7 +138,7 @@ result on your machine.
|
|
|
122
138
|
|
|
123
139
|
:::
|
|
124
140
|
|
|
125
|
-
|
|
141
|
+
6. **Configure upstream authentication**
|
|
126
142
|
|
|
127
143
|
On **Outbound Auth**, leave **User OAuth** selected so each user connects
|
|
128
144
|
their own Linear account. Click **Next**.
|
|
@@ -133,7 +149,7 @@ result on your machine.
|
|
|
133
149
|
|
|
134
150
|
<ModalScreenshot size="md">
|
|
135
151
|
|
|
136
|
-

|
|
137
153
|
|
|
138
154
|
</ModalScreenshot>
|
|
139
155
|
|
|
@@ -148,7 +164,7 @@ result on your machine.
|
|
|
148
164
|
The wizard adds the new MCP route to `config/routes.oas.json` and scaffolds
|
|
149
165
|
the inbound auth and token-exchange policies. **Save** the project.
|
|
150
166
|
|
|
151
|
-
|
|
167
|
+
7. **Set your identity provider's environment variables**
|
|
152
168
|
|
|
153
169
|
In `config/policies.json`, set the Auth0 policy's environment variable
|
|
154
170
|
references to match these names, then save the file:
|
|
@@ -195,7 +211,7 @@ result on your machine.
|
|
|
195
211
|
|
|
196
212
|
:::
|
|
197
213
|
|
|
198
|
-
|
|
214
|
+
8. **Verify the OAuth policy is wired up**
|
|
199
215
|
|
|
200
216
|
Click the **Test** button next to the route's path and send a `POST` with no
|
|
201
217
|
`Authorization` header. You should get a `401 Unauthorized` whose
|
|
@@ -219,7 +235,7 @@ result on your machine.
|
|
|
219
235
|
|
|
220
236
|
:::
|
|
221
237
|
|
|
222
|
-
|
|
238
|
+
9. **Connect Claude Desktop**
|
|
223
239
|
|
|
224
240
|
Your route is live at `https://<your-gateway>/mcp/linear-v1`. Find the public
|
|
225
241
|
URL via the **Gateway deployed** button in the toolbar.
|
|
@@ -242,19 +258,19 @@ result on your machine.
|
|
|
242
258
|
:::
|
|
243
259
|
|
|
244
260
|
For per-client setup details, see
|
|
245
|
-
[Connect MCP clients](
|
|
261
|
+
[Connect MCP clients](../../mcp-gateway/connect-clients/overview.mdx).
|
|
246
262
|
|
|
247
|
-
|
|
263
|
+
10. **Test it**
|
|
248
264
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
265
|
+
In Claude Desktop, prompt the model with something that requires Linear.
|
|
266
|
+
"list my open issues" works well. Claude asks for permission to call the
|
|
267
|
+
tool, then returns results proxied through the gateway.
|
|
252
268
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
269
|
+
Open the project's
|
|
270
|
+
[**Observability → Analytics**](https://portal.zuplo.com/+/account/project/analytics)
|
|
271
|
+
view and select the **MCP** section to see the call appear in the events
|
|
272
|
+
timeline, the success rate, the top capabilities table, and the user
|
|
273
|
+
breakdown.
|
|
258
274
|
|
|
259
275
|
</Stepper>
|
|
260
276
|
|
|
@@ -267,7 +283,7 @@ again for each additional upstream you want to front.
|
|
|
267
283
|
|
|
268
284
|
The Working Copy (Development) URLs are fine for testing everything above. Once
|
|
269
285
|
you've confirmed the virtual server works, set up a production deployment via
|
|
270
|
-
[environments](
|
|
286
|
+
[environments](../../articles/environments.mdx) before giving others access. The
|
|
271
287
|
development URL is tied to your working copy and isn't meant for shared or
|
|
272
288
|
production traffic.
|
|
273
289
|
|
|
@@ -275,12 +291,12 @@ production traffic.
|
|
|
275
291
|
|
|
276
292
|
## Next steps
|
|
277
293
|
|
|
278
|
-
- [Connect more clients](
|
|
279
|
-
VS Code, ChatGPT, and any other MCP client.
|
|
280
|
-
- [How it works](
|
|
281
|
-
surfaces.
|
|
282
|
-
- [Capability filtering](
|
|
283
|
-
option, overriding tool descriptions and annotations, not just
|
|
294
|
+
- [Connect more clients](../../mcp-gateway/connect-clients/overview.mdx): Claude
|
|
295
|
+
Code, Cursor, VS Code, ChatGPT, and any other MCP client.
|
|
296
|
+
- [How it works](../../mcp-gateway/how-it-works.mdx): the request lifecycle and
|
|
297
|
+
the two OAuth surfaces.
|
|
298
|
+
- [Capability filtering](../../mcp-gateway/capability-filtering.mdx): go deeper
|
|
299
|
+
on the Curate option, overriding tool descriptions and annotations, not just
|
|
284
300
|
include/exclude.
|
|
285
|
-
- [Add more upstreams](
|
|
286
|
-
MCP servers from one Zuplo project.
|
|
301
|
+
- [Add more upstreams](../../mcp-gateway/code-config/multi-upstream.mdx): front
|
|
302
|
+
several upstream MCP servers from one Zuplo project.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
category: MCP Server
|
|
3
|
+
showLastModified: false
|
|
4
|
+
suggestEdit: false
|
|
5
|
+
sidebar_label: Agent
|
|
6
|
+
title: Getting Started with MCP Server - Agent
|
|
7
|
+
description:
|
|
8
|
+
Use a coding agent to expose a Todo API as an MCP server, review its single
|
|
9
|
+
read-only tool, and verify it with MCP Inspector.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<WizardSteps build="mcp-server" method="agent" />
|
|
13
|
+
|
|
14
|
+
<MethodTabs build="mcp-server" method="agent" />
|
|
15
|
+
|
|
16
|
+
Use a coding agent to turn a Todo API into an MCP server. The finished server
|
|
17
|
+
exposes one read-only tool, which you'll call from MCP Inspector before using it
|
|
18
|
+
with your agent.
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
- [Node.js](https://nodejs.org/en/download) 24 or later.
|
|
23
|
+
- An installed coding agent, such as Codex, Claude Code, or Cursor.
|
|
24
|
+
- A [Zuplo account](https://portal.zuplo.com).
|
|
25
|
+
|
|
26
|
+
## Build your MCP server with an agent
|
|
27
|
+
|
|
28
|
+
<Stepper>
|
|
29
|
+
|
|
30
|
+
1. **Create the project**
|
|
31
|
+
|
|
32
|
+
Run:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx create-zuplo-api@latest todo-mcp
|
|
36
|
+
cd todo-mcp
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
When prompted, choose **Yes** to create a matching Portal project, complete
|
|
40
|
+
sign-in, and select your Zuplo account. Select the coding agent you use when
|
|
41
|
+
asked. The CLI creates and links the hosted project. See
|
|
42
|
+
[`create-zuplo-api`](../../cli/create-zuplo-api.mdx).
|
|
43
|
+
|
|
44
|
+
:::tip{title="Zuplo skills"}
|
|
45
|
+
|
|
46
|
+
The scaffold installs Zuplo skills in this project for Codex and Cursor and
|
|
47
|
+
configures the Claude Code plugin. If setup fails, follow
|
|
48
|
+
[Agent Skills](../../build-with-ai.mdx#agent-skills) from this directory
|
|
49
|
+
before starting your agent.
|
|
50
|
+
|
|
51
|
+
:::
|
|
52
|
+
|
|
53
|
+
2. **Ask the agent to expose one tool**
|
|
54
|
+
|
|
55
|
+
Open your agent in the project directory and use this prompt:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
Read the project instructions and bundled Zuplo docs. Turn the default Todo
|
|
59
|
+
API into an MCP server with exactly one read-only tool.
|
|
60
|
+
|
|
61
|
+
In config/routes.oas.json, keep the existing GET /todos URL forward handler
|
|
62
|
+
pointing to https://todo.zuplo.io. Set its operationId to getTodos. Add an
|
|
63
|
+
x-zuplo-route.mcp object with type "tool", name "getTodos", and annotations
|
|
64
|
+
{ "readOnlyHint": true }.
|
|
65
|
+
|
|
66
|
+
Add a POST-only /mcp operation with operationId todo-mcp-server, a 200
|
|
67
|
+
response description, and x-zuplo-route with corsPolicy "none" and handler:
|
|
68
|
+
{
|
|
69
|
+
"module": "$import(@zuplo/runtime)",
|
|
70
|
+
"export": "mcpServerHandler",
|
|
71
|
+
"options": {
|
|
72
|
+
"name": "Todo MCP server",
|
|
73
|
+
"version": "1.0.0",
|
|
74
|
+
"operations": [{ "file": "./config/routes.oas.json", "id": "getTodos" }]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
Do not expose create, update, or delete operations as MCP tools. Keep the
|
|
79
|
+
sample unauthenticated for this local exercise; don't claim it is ready
|
|
80
|
+
for private data. Preserve unrelated files and routes.
|
|
81
|
+
|
|
82
|
+
Run npm run dev and confirm GET /todos returns 200. Use an MCP client to
|
|
83
|
+
check that tools/list exposes exactly getTodos and tools/call returns todos.
|
|
84
|
+
If you cannot run an MCP client, say which checks remain for me. Do not
|
|
85
|
+
deploy. Show the diff and explain how to test with MCP Inspector.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
For the underlying configuration, see the
|
|
89
|
+
[MCP Server handler](../../handlers/mcp-server.mdx).
|
|
90
|
+
|
|
91
|
+
3. **Review the route and start the server**
|
|
92
|
+
|
|
93
|
+
Check the diff before running the agent's code. The `/mcp` handler's
|
|
94
|
+
`operations` list should contain only `getTodos`, and that ID must match
|
|
95
|
+
`GET /todos`.
|
|
96
|
+
|
|
97
|
+
Start `npm run dev` if the agent hasn't left it running. In another terminal,
|
|
98
|
+
run:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
curl -i http://localhost:9000/todos
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Expect `200 OK` and a JSON response containing todos.
|
|
105
|
+
|
|
106
|
+
4. **Test the MCP tool**
|
|
107
|
+
|
|
108
|
+
Start MCP Inspector in another terminal:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npx @modelcontextprotocol/inspector
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Open the URL printed by Inspector. Select **Streamable HTTP**, enter
|
|
115
|
+
`http://localhost:9000/mcp`, and connect. List tools: there should be exactly
|
|
116
|
+
one, `getTodos`. Run it with an empty arguments object `{}`. The result
|
|
117
|
+
should contain the Todo API response without a tool error.
|
|
118
|
+
|
|
119
|
+
A missing tool usually means the `operationId` and handler's `id` don't
|
|
120
|
+
match. If the tool errors, test `/todos` directly to distinguish an upstream
|
|
121
|
+
problem from an MCP configuration problem.
|
|
122
|
+
|
|
123
|
+
5. **Connect your coding agent**
|
|
124
|
+
|
|
125
|
+
For Codex, register the HTTP MCP server from your terminal:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
codex mcp add todo-api --url http://localhost:9000/mcp
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Start a new Codex session so it loads the server. For another client, use its
|
|
132
|
+
HTTP MCP configuration with the same URL. Keep the gateway running, then ask
|
|
133
|
+
the agent to `Use getTodos to list the todos`. Approve the tool call and
|
|
134
|
+
check that the response matches the Inspector result.
|
|
135
|
+
|
|
136
|
+
Cloud-hosted clients can't reach your computer's `localhost`. To use one,
|
|
137
|
+
[deploy the project](../gateway/deploy-to-the-edge/local.mdx) and provide its
|
|
138
|
+
hosted `/mcp` URL.
|
|
139
|
+
|
|
140
|
+
</Stepper>
|
|
141
|
+
|
|
142
|
+
This local sample has no authentication. Before exposing private operations,
|
|
143
|
+
configure
|
|
144
|
+
[MCP server authentication](../../articles/configuring-auth0-for-mcp-auth.mdx).
|
|
145
|
+
|
|
146
|
+
## Next steps
|
|
147
|
+
|
|
148
|
+
- [Choose tools in the Route Designer](./local.mdx) to add more operations.
|
|
149
|
+
- [Configure the MCP Server handler](../../handlers/mcp-server.mdx) for your
|
|
150
|
+
API's tools.
|
|
151
|
+
- [Add authentication](../../articles/configuring-auth0-for-mcp-auth.mdx) before
|
|
152
|
+
sharing a server that accesses private data.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
category: MCP Server
|
|
3
|
+
fullWidth: true
|
|
4
|
+
disablePager: true
|
|
5
|
+
showLastModified: false
|
|
6
|
+
suggestEdit: false
|
|
7
|
+
centered: false
|
|
8
|
+
toc: false
|
|
9
|
+
title: Getting Started with MCP Server
|
|
10
|
+
description:
|
|
11
|
+
Turn an OpenAPI-described API into a managed MCP server with Zuplo, in the
|
|
12
|
+
Portal, locally with the CLI, or with an AI agent.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<WizardSteps build="mcp-server" />
|
|
16
|
+
|
|
17
|
+
An MCP server makes API operations available as tools for AI assistants through
|
|
18
|
+
the Model Context Protocol (MCP). This tutorial adds an MCP interface to a
|
|
19
|
+
sample Todo API using its OpenAPI document.
|
|
20
|
+
|
|
21
|
+
Choose a workflow to create the server, select its tools, and test a tool call.
|
|
22
|
+
The sample API is provided. Use an MCP client, such as MCP Inspector, to test
|
|
23
|
+
the result. For the local guides, use a client that can reach your machine.
|
|
24
|
+
|
|
25
|
+
<MethodPicker build="mcp-server" />
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
category: MCP Server
|
|
3
|
+
showLastModified: false
|
|
4
|
+
suggestEdit: false
|
|
5
|
+
title: Getting Started with MCP Server - Editor
|
|
6
|
+
description:
|
|
7
|
+
A step-by-step guide to building a mcp server with Zuplo using local
|
|
8
|
+
development.
|
|
4
9
|
---
|
|
5
10
|
|
|
11
|
+
<WizardSteps build="mcp-server" method="local" />
|
|
12
|
+
|
|
13
|
+
<MethodTabs build="mcp-server" method="local" />
|
|
14
|
+
|
|
15
|
+
Turn an OpenAPI-described API into a managed MCP server. This path builds it
|
|
16
|
+
with the Zuplo CLI and your editor.
|
|
17
|
+
|
|
6
18
|
Zuplo allows you to instantly add a managed MCP Server to your existing API,
|
|
7
|
-
powered by OpenAPI.
|
|
8
|
-
[Zuplo CLI](../cli/overview.mdx).
|
|
19
|
+
powered by OpenAPI.
|
|
9
20
|
|
|
10
21
|
If you're not familiar with Zuplo, it's recommended to go through
|
|
11
|
-
[Step 1](
|
|
22
|
+
[Step 1](../gateway/setup-a-basic-gateway/local.mdx) first.
|
|
12
23
|
|
|
13
24
|
<Stepper>
|
|
14
25
|
|
|
@@ -22,8 +33,8 @@ If you're not familiar with Zuplo, it's recommended to go through
|
|
|
22
33
|
npm run dev
|
|
23
34
|
```
|
|
24
35
|
|
|
25
|
-
See [Step 1](
|
|
26
|
-
`create-zuplo-api` prompts.
|
|
36
|
+
See [Step 1](../gateway/setup-a-basic-gateway/local.mdx) for a walkthrough of
|
|
37
|
+
the `create-zuplo-api` prompts.
|
|
27
38
|
|
|
28
39
|
1. Test the **Get all todos** route
|
|
29
40
|
|
|
@@ -42,7 +53,7 @@ If you're not familiar with Zuplo, it's recommended to go through
|
|
|
42
53
|
On your `routes.oas.json` file, choose **Add** and then **Dynamic OpenAPI to
|
|
43
54
|
MCP Server**.
|
|
44
55
|
|
|
45
|
-

|
|
46
57
|
|
|
47
58
|
A new route will appear. Confirm the following values:
|
|
48
59
|
- **Summary**: enter `MCP Server`
|
|
@@ -51,12 +62,12 @@ If you're not familiar with Zuplo, it's recommended to go through
|
|
|
51
62
|
|
|
52
63
|
Click the **Select Tools** option for your new MCP Server endpoint.
|
|
53
64
|
|
|
54
|
-

|
|
55
66
|
|
|
56
67
|
You should see the MCP tools dialog. Check the tools from your `*.oas.json`
|
|
57
68
|
files that you want to surface in your MCP Server.
|
|
58
69
|
|
|
59
|
-

|
|
60
71
|
|
|
61
72
|
Click **Update Tools**, then click **Save** at the bottom left.
|
|
62
73
|
Congratulations, you just published your first MCP Server! It's now available
|
|
@@ -66,7 +77,7 @@ If you're not familiar with Zuplo, it's recommended to go through
|
|
|
66
77
|
|
|
67
78
|
You can connect any MCP client that can reach your local gateway. The AI
|
|
68
79
|
coding agent you configured in
|
|
69
|
-
[Step 1](
|
|
80
|
+
[Step 1](../gateway/setup-a-basic-gateway/local.mdx) (such as Claude Code or
|
|
70
81
|
Cursor) is a great option — point it at your local MCP server URL:
|
|
71
82
|
|
|
72
83
|
```
|
|
@@ -80,8 +91,8 @@ If you're not familiar with Zuplo, it's recommended to go through
|
|
|
80
91
|
Cloud clients like the
|
|
81
92
|
[OpenAI playground](https://platform.openai.com/playground) can't reach
|
|
82
93
|
`localhost`. To use one, deploy your project first — see
|
|
83
|
-
[Step 4](
|
|
84
|
-
|
|
94
|
+
[Step 4](../gateway/deploy-to-the-edge/local.mdx) — and use your deployed MCP
|
|
95
|
+
server URL instead.
|
|
85
96
|
|
|
86
97
|
:::
|
|
87
98
|
|