zuplo 7.8.7 → 7.8.9
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/integrations/claude-code.mdx +82 -180
- package/docs/ai-gateway/integrations/claude-desktop.mdx +61 -99
- package/docs/ai-gateway/integrations/codex.mdx +63 -57
- 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/custom-domains.mdx +3 -2
- 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/articles/source-control.mdx +4 -3
- package/docs/articles/testing.mdx +5 -5
- package/docs/articles/upstream-iam-auth.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/how-zuplo-works.mdx +2 -1
- package/docs/concepts/mcp.mdx +4 -4
- package/docs/dedicated/architecture.mdx +1 -1
- package/docs/dev-portal/migration.mdx +2 -2
- 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} +32 -23
- package/docs/{articles/step-3-add-api-key-auth-local.mdx → getting-started/gateway/add-api-key-auth/local.mdx} +28 -20
- package/docs/{articles/step-2-add-rate-limiting.mdx → getting-started/gateway/add-rate-limiting/index.mdx} +22 -13
- package/docs/{articles/step-2-add-rate-limiting-local.mdx → getting-started/gateway/add-rate-limiting/local.mdx} +24 -14
- package/docs/getting-started/gateway/agent.mdx +199 -0
- package/docs/{articles/step-4-deploying-to-the-edge.mdx → getting-started/gateway/deploy-to-the-edge/index.mdx} +39 -27
- package/docs/{articles/step-4-deploying-to-the-edge-local.mdx → getting-started/gateway/deploy-to-the-edge/local.mdx} +48 -17
- package/docs/{articles/step-5-dynamic-rate-limiting.mdx → getting-started/gateway/dynamic-rate-limiting/index.mdx} +24 -12
- package/docs/{articles/step-5-dynamic-rate-limiting-local.mdx → getting-started/gateway/dynamic-rate-limiting/local.mdx} +24 -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} +33 -21
- package/docs/{articles/step-1-setup-basic-gateway-local.mdx → getting-started/gateway/setup-a-basic-gateway/local.mdx} +24 -15
- 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} +64 -38
- package/docs/{mcp-gateway/quickstart.mdx → getting-started/mcp-gateway/portal.mdx} +71 -54
- 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 +23 -20
- package/docs/mcp-gateway/connect-clients/cursor.mdx +2 -1
- package/docs/mcp-gateway/connect-clients/overview.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 - Portal
|
|
4
6
|
description:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
environment variables, and connect Claude Desktop. No local setup required.
|
|
7
|
+
Connect an MCP client to Linear through a Zuplo MCP Gateway in the Portal,
|
|
8
|
+
then sign in and call a Linear tool through the gateway.
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
<
|
|
11
|
+
<WizardSteps build="mcp-gateway" method="portal" />
|
|
12
|
+
|
|
13
|
+
<MethodTabs build="mcp-gateway" method="portal" />
|
|
11
14
|
|
|
12
15
|
Build a Zuplo MCP Gateway fronting Linear at
|
|
13
16
|
`https://<your-gateway>/mcp/linear-v1`, entirely in the browser. By the end,
|
|
@@ -21,40 +24,53 @@ authenticate upstream. This guide uses Linear and Auth0, but the wizard supports
|
|
|
21
24
|
any upstream in its library (plus custom servers) and every identity provider
|
|
22
25
|
Zuplo wraps.
|
|
23
26
|
|
|
24
|
-
Prefer the CLI? The [local quickstart](./
|
|
25
|
-
|
|
27
|
+
Prefer the CLI? The [local quickstart](./local.mdx) reaches the same result on
|
|
28
|
+
your machine.
|
|
26
29
|
|
|
27
30
|
## Prerequisites
|
|
28
31
|
|
|
29
32
|
- A free [Zuplo account](https://portal.zuplo.com).
|
|
30
33
|
- An account with your identity provider. For the Auth0 example, that's an Auth0
|
|
31
34
|
tenant with a Regular Web Application configured. The
|
|
32
|
-
[Configuring Auth0](
|
|
35
|
+
[Configuring Auth0](../../mcp-gateway/auth/configuring-auth0.mdx#set-up-the-auth0-tenant)
|
|
33
36
|
guide covers the dashboard side. From it you'll need the **domain**, **client
|
|
34
37
|
ID**, and **client secret**.
|
|
35
38
|
|
|
39
|
+
## Create and test your MCP Gateway
|
|
40
|
+
|
|
36
41
|
<Stepper>
|
|
37
42
|
|
|
38
|
-
1. **Create a project
|
|
43
|
+
1. **Create a Zuplo project**
|
|
44
|
+
|
|
45
|
+
In the Zuplo Portal, open
|
|
46
|
+
[**Projects**](https://portal.zuplo.com/+/account/projects), click **New
|
|
47
|
+
Project**, and select **API & MCP Gateway**. Name the project
|
|
48
|
+
`my-mcp-gateway`, choose a blank project rather than importing one, and click
|
|
49
|
+
**Create Project**. The project opens on the **Project** tab.
|
|
50
|
+
|
|
51
|
+
<ModalScreenshot>
|
|
52
|
+
|
|
53
|
+

|
|
54
|
+
|
|
55
|
+
</ModalScreenshot>
|
|
56
|
+
|
|
57
|
+
2. **Start an MCP Gateway Virtual Server**
|
|
39
58
|
|
|
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.
|
|
59
|
+
Open the **Code** tab in the project you created.
|
|
44
60
|
|
|
45
|
-
Click **Add
|
|
46
|
-
menu.
|
|
61
|
+
Click **Add to Gateway** (or **Add Route** if the project already has
|
|
62
|
+
routes), then choose **MCP Gateway Virtual Server** from the menu.
|
|
47
63
|
|
|
48
64
|
<ModalScreenshot size="md">
|
|
49
65
|
|
|
50
|
-

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

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

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

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

|
|
137
154
|
|
|
138
155
|
</ModalScreenshot>
|
|
139
156
|
|
|
140
157
|
:::tip{title="Upstream doesn't use OAuth?"}
|
|
141
158
|
|
|
142
|
-
Pick **None**
|
|
143
|
-
|
|
144
|
-
|
|
159
|
+
Pick **None** when the upstream doesn't require authentication. If gateway
|
|
160
|
+
OAuth is enabled, the gateway validates and removes its access token before
|
|
161
|
+
forwarding the request. It doesn't use that token to authenticate upstream.
|
|
145
162
|
|
|
146
163
|
:::
|
|
147
164
|
|
|
148
165
|
The wizard adds the new MCP route to `config/routes.oas.json` and scaffolds
|
|
149
166
|
the inbound auth and token-exchange policies. **Save** the project.
|
|
150
167
|
|
|
151
|
-
|
|
168
|
+
7. **Set your identity provider's environment variables**
|
|
152
169
|
|
|
153
170
|
In `config/policies.json`, set the Auth0 policy's environment variable
|
|
154
171
|
references to match these names, then save the file:
|
|
@@ -195,7 +212,7 @@ result on your machine.
|
|
|
195
212
|
|
|
196
213
|
:::
|
|
197
214
|
|
|
198
|
-
|
|
215
|
+
8. **Verify the OAuth policy is wired up**
|
|
199
216
|
|
|
200
217
|
Click the **Test** button next to the route's path and send a `POST` with no
|
|
201
218
|
`Authorization` header. You should get a `401 Unauthorized` whose
|
|
@@ -219,13 +236,13 @@ result on your machine.
|
|
|
219
236
|
|
|
220
237
|
:::
|
|
221
238
|
|
|
222
|
-
|
|
239
|
+
9. **Connect Claude Desktop**
|
|
223
240
|
|
|
224
241
|
Your route is live at `https://<your-gateway>/mcp/linear-v1`. Find the public
|
|
225
242
|
URL via the **Gateway deployed** button in the toolbar.
|
|
226
243
|
|
|
227
|
-
Open Claude Desktop, go to **
|
|
228
|
-
|
|
244
|
+
Open Claude Desktop, go to **Customize → Connectors**, click **+**, then
|
|
245
|
+
**Add custom connector**. Paste the route URL and click **Add**.
|
|
229
246
|
|
|
230
247
|
Claude Desktop opens the gateway's OAuth flow in a browser:
|
|
231
248
|
1. Sign in with your identity provider (Auth0 in this example).
|
|
@@ -235,26 +252,26 @@ result on your machine.
|
|
|
235
252
|
|
|
236
253
|
:::tip{title="Checkpoint: Claude is connected"}
|
|
237
254
|
|
|
238
|
-
Back in Claude Desktop, the new connector appears in **
|
|
255
|
+
Back in Claude Desktop, the new connector appears in **Customize →
|
|
239
256
|
Connectors** marked as connected. Subsequent requests reuse the tokens the
|
|
240
257
|
gateway just issued.
|
|
241
258
|
|
|
242
259
|
:::
|
|
243
260
|
|
|
244
261
|
For per-client setup details, see
|
|
245
|
-
[Connect MCP clients](
|
|
262
|
+
[Connect MCP clients](../../mcp-gateway/connect-clients/overview.mdx).
|
|
246
263
|
|
|
247
|
-
|
|
264
|
+
10. **Test it**
|
|
248
265
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
266
|
+
In Claude Desktop, prompt the model with something that requires Linear.
|
|
267
|
+
"list my open issues" works well. Claude asks for permission to call the
|
|
268
|
+
tool, then returns results proxied through the gateway.
|
|
252
269
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
270
|
+
Open the project's
|
|
271
|
+
[**Observability → Analytics**](https://portal.zuplo.com/+/account/project/analytics)
|
|
272
|
+
view and select the **MCP** section to see the call appear in the events
|
|
273
|
+
timeline, the success rate, the top capabilities table, and the user
|
|
274
|
+
breakdown.
|
|
258
275
|
|
|
259
276
|
</Stepper>
|
|
260
277
|
|
|
@@ -267,7 +284,7 @@ again for each additional upstream you want to front.
|
|
|
267
284
|
|
|
268
285
|
The Working Copy (Development) URLs are fine for testing everything above. Once
|
|
269
286
|
you've confirmed the virtual server works, set up a production deployment via
|
|
270
|
-
[environments](
|
|
287
|
+
[environments](../../articles/environments.mdx) before giving others access. The
|
|
271
288
|
development URL is tied to your working copy and isn't meant for shared or
|
|
272
289
|
production traffic.
|
|
273
290
|
|
|
@@ -275,12 +292,12 @@ production traffic.
|
|
|
275
292
|
|
|
276
293
|
## Next steps
|
|
277
294
|
|
|
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
|
|
295
|
+
- [Connect more clients](../../mcp-gateway/connect-clients/overview.mdx): Claude
|
|
296
|
+
Code, Cursor, VS Code, ChatGPT, and any other MCP client.
|
|
297
|
+
- [How it works](../../mcp-gateway/how-it-works.mdx): the request lifecycle and
|
|
298
|
+
the two OAuth surfaces.
|
|
299
|
+
- [Capability filtering](../../mcp-gateway/capability-filtering.mdx): go deeper
|
|
300
|
+
on the Curate option, overriding tool descriptions and annotations, not just
|
|
284
301
|
include/exclude.
|
|
285
|
-
- [Add more upstreams](
|
|
286
|
-
MCP servers from one Zuplo project.
|
|
302
|
+
- [Add more upstreams](../../mcp-gateway/code-config/multi-upstream.mdx): front
|
|
303
|
+
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
|
+
Expose a sample API as an MCP server with the Zuplo CLI and your editor, then
|
|
8
|
+
connect an MCP client and call a tool locally.
|
|
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
|
|
|
@@ -1,20 +1,40 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
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](
|
|
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
|
-
|
|
17
|
-
[
|
|
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
|
+

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

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

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

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

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

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

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

|
|
100
120
|
|
|
101
121
|
Back to the OpenAI playground...
|
|
102
122
|
|
|
103
123
|
<ModalScreenshot size="sm">
|
|
104
124
|
|
|
105
|
-

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

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

|
|
136
156
|
|
|
137
157
|
</Stepper>
|
|
138
158
|
|