zuplo 7.8.7 → 7.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/docs/ai-gateway/custom-policies.mdx +2 -1
  2. package/docs/ai-gateway/usage-limits.mdx +2 -2
  3. package/docs/api-management/overview.md +2 -2
  4. package/docs/articles/add-api-to-backstage.mdx +4 -3
  5. package/docs/articles/api-key-consumer-bucket-portal-ui.mdx +1 -1
  6. package/docs/articles/api-key-management.mdx +1 -1
  7. package/docs/articles/migrate-from-apigee.md +3 -3
  8. package/docs/articles/migrate-from-aws-api-gateway.md +3 -3
  9. package/docs/articles/migrate-from-azure-apim.md +3 -3
  10. package/docs/articles/migrate-from-kong.md +3 -3
  11. package/docs/articles/source-control-setup-github.mdx +2 -2
  12. package/docs/cli/create-zuplo-api.mdx +4 -4
  13. package/docs/cli/openapi-merge.mdx +1 -1
  14. package/docs/cli/openapi-merge.partial.mdx +1 -1
  15. package/docs/concepts/ai-gateway.mdx +1 -1
  16. package/docs/concepts/mcp.mdx +4 -4
  17. package/docs/dedicated/architecture.mdx +1 -1
  18. package/docs/errors/not-found.mdx +1 -1
  19. package/docs/getting-started/ai-gateway/portal.mdx +181 -0
  20. package/docs/getting-started/dev-portal/agent.mdx +148 -0
  21. package/docs/getting-started/dev-portal/index.mdx +26 -0
  22. package/docs/getting-started/dev-portal/local.mdx +213 -0
  23. package/docs/getting-started/dev-portal/portal.mdx +146 -0
  24. package/docs/{articles/step-3-add-api-key-auth.mdx → getting-started/gateway/add-api-key-auth/index.mdx} +30 -24
  25. package/docs/{articles/step-3-add-api-key-auth-local.mdx → getting-started/gateway/add-api-key-auth/local.mdx} +26 -21
  26. package/docs/{articles/step-2-add-rate-limiting.mdx → getting-started/gateway/add-rate-limiting/index.mdx} +20 -14
  27. package/docs/{articles/step-2-add-rate-limiting-local.mdx → getting-started/gateway/add-rate-limiting/local.mdx} +22 -15
  28. package/docs/getting-started/gateway/agent.mdx +198 -0
  29. package/docs/{articles/step-4-deploying-to-the-edge.mdx → getting-started/gateway/deploy-to-the-edge/index.mdx} +36 -27
  30. package/docs/{articles/step-4-deploying-to-the-edge-local.mdx → getting-started/gateway/deploy-to-the-edge/local.mdx} +46 -18
  31. package/docs/{articles/step-5-dynamic-rate-limiting.mdx → getting-started/gateway/dynamic-rate-limiting/index.mdx} +21 -12
  32. package/docs/{articles/step-5-dynamic-rate-limiting-local.mdx → getting-started/gateway/dynamic-rate-limiting/local.mdx} +21 -12
  33. package/docs/getting-started/gateway/index.mdx +24 -0
  34. package/docs/{articles/step-1-setup-basic-gateway.mdx → getting-started/gateway/setup-a-basic-gateway/index.mdx} +31 -22
  35. package/docs/{articles/step-1-setup-basic-gateway-local.mdx → getting-started/gateway/setup-a-basic-gateway/local.mdx} +22 -16
  36. package/docs/getting-started/index.mdx +25 -0
  37. package/docs/getting-started/mcp-gateway/agent.mdx +161 -0
  38. package/docs/getting-started/mcp-gateway/index.mdx +25 -0
  39. package/docs/{mcp-gateway/quickstart-local.mdx → getting-started/mcp-gateway/local.mdx} +35 -31
  40. package/docs/{mcp-gateway/quickstart.mdx → getting-started/mcp-gateway/portal.mdx} +64 -48
  41. package/docs/getting-started/mcp-server/agent.mdx +152 -0
  42. package/docs/getting-started/mcp-server/index.mdx +25 -0
  43. package/docs/{articles/mcp-quickstart-local.mdx → getting-started/mcp-server/local.mdx} +24 -13
  44. package/docs/{articles/mcp-quickstart.mdx → getting-started/mcp-server/portal.mdx} +35 -15
  45. package/docs/getting-started/migrate/agent.mdx +129 -0
  46. package/docs/getting-started/migrate/index.mdx +25 -0
  47. package/docs/getting-started/migrate/local.mdx +141 -0
  48. package/docs/getting-started/migrate/portal.mdx +129 -0
  49. package/docs/home.mdx +6 -0
  50. package/docs/mcp-gateway/connect-clients/chatgpt.mdx +2 -1
  51. package/docs/mcp-gateway/connect-clients/claude-code.mdx +2 -1
  52. package/docs/mcp-gateway/connect-clients/claude-desktop.mdx +2 -1
  53. package/docs/mcp-gateway/connect-clients/cursor.mdx +2 -1
  54. package/docs/mcp-gateway/connect-clients/vs-code.mdx +2 -1
  55. package/docs/mcp-gateway/how-it-works.mdx +2 -2
  56. package/docs/mcp-gateway/how-to/connect-upstream-api-key.mdx +4 -3
  57. package/docs/mcp-gateway/how-to/curate-tools.mdx +3 -2
  58. package/docs/mcp-gateway/overview.mdx +3 -3
  59. package/docs/policies/ai-gateway-smart-router-inbound/doc.md +14 -0
  60. package/docs/policies/akamai-ai-firewall-v2-inbound/doc.md +7 -0
  61. package/package.json +5 -5
  62. package/docs/ai-gateway/getting-started.mdx +0 -307
  63. package/docs/dev-portal/local-development.mdx +0 -72
@@ -1,13 +1,16 @@
1
1
  ---
2
- title: "MCP Gateway quickstart (Local Dev)"
3
- sidebar_label: "Quickstart (Local Dev)"
2
+ category: MCP Gateway
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ title: Getting Started with MCP Gateway - Editor
4
6
  description:
5
- Build an MCP Gateway locally with the Zuplo CLI. Register the plugin, add one
6
- upstream MCP server, run it with the loopback dev-login shortcut, and connect
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
- <QuickstartPicker mode="local" alternateLink="/mcp-gateway/quickstart" />
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](./auth/overview.mdx#identity-providers).
26
+ [provider catalog](../../mcp-gateway/auth/overview.mdx#identity-providers).
24
27
 
25
- Prefer the browser with no local setup? The
26
- [Portal quickstart](./quickstart.mdx) reaches the same result through the Zuplo
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 an empty one with:
34
+ - A local Zuplo project. Create one with:
33
35
 
34
36
  ```bash
35
- npx create-zuplo-api@latest --empty
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`](../cli/create-zuplo-api.mdx) for other options, or
40
- [import an existing portal project](../articles/local-development.mdx#import-your-existing-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](./code-config/compatibility-dates.mdx).
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](./code-config/local-development.mdx#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](./code-config/local-development.mdx#use-one-loopback-origin-everywhere).
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](./connect-clients/overview.mdx).
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](../articles/environments.mdx) for setting up a production
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](./quickstart.mdx): swap the dev-login shortcut for a
269
- real identity provider and ship the gateway through the Zuplo Portal.
270
- - [Local development](./code-config/local-development.mdx): the dev-login
271
- shortcut in depth, environment variables, and local-only quirks.
272
- - [Connect more clients](./connect-clients/overview.mdx): Claude Code, Cursor,
273
- VS Code, ChatGPT, and any other MCP client.
274
- - [How it works](./how-it-works.mdx): the request lifecycle and the two OAuth
275
- surfaces.
276
- - [Add more upstreams](./code-config/multi-upstream.mdx): front several upstream
277
- MCP servers from one Zuplo project.
278
- - [Capability filtering](./capability-filtering.mdx): curate the tools, prompts,
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
- title: "MCP Gateway quickstart (Portal)"
3
- sidebar_label: "Quickstart"
2
+ category: MCP Gateway
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ title: Getting Started with MCP Gateway - Portal
4
6
  description:
5
- Build an MCP Gateway in the Zuplo Portal. Create a project, add an MCP Gateway
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
- <QuickstartPicker mode="portal" alternateLink="/mcp-gateway/quickstart-local" />
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](./quickstart-local.mdx) reaches the same
25
- result on your machine.
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](./auth/configuring-auth0.mdx#set-up-the-auth0-tenant)
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 and start a Virtual Server**
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
+ ![New Zuplo project dialog with API & MCP Gateway selected](/media/mcp-gateway-portal-quickstart/new-project.png)
53
+
54
+ </ModalScreenshot>
55
+
56
+ 2. **Start an MCP Gateway Virtual Server**
39
57
 
40
- Sign in to the Zuplo Portal and
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 Route**, then choose **MCP Gateway Virtual Server** from the
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
- ![Add an MCP Gateway Virtual Server from the Add Route menu](../../public/media/mcp-gateway-quickstart/01-add-route.png)
65
+ ![Add an MCP Gateway Virtual Server from the Add Route menu](../../../public/media/mcp-gateway-quickstart/01-add-route.png)
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
- 2. **Choose the upstream MCP server**
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
- ![Select Linear from the upstream server library](../../public/media/mcp-gateway-quickstart/02-upstream.png)
83
+ ![Select Linear from the upstream server library](../../../public/media/mcp-gateway-quickstart/02-upstream.png)
69
84
 
70
85
  </ModalScreenshot>
71
86
 
@@ -76,7 +91,7 @@ result on your machine.
76
91
 
77
92
  :::
78
93
 
79
- 3. **Choose an identity provider**
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
- ![Choose Auth0 as the identity provider](../../public/media/mcp-gateway-quickstart/03-inbound-auth.png)
102
+ ![Choose Auth0 as the identity provider](../../../public/media/mcp-gateway-quickstart/03-inbound-auth.png)
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 [provider catalog](./auth/overview.mdx#identity-providers).
111
+ See the
112
+ [provider catalog](../../mcp-gateway/auth/overview.mdx#identity-providers).
97
113
 
98
114
  :::
99
115
 
100
- 4. **Decide what the virtual server exposes**
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
- ![Choose Filter & curate or Passthrough for the exposed catalog](../../public/media/mcp-gateway-quickstart/04-tools.png)
130
+ ![Choose Filter & curate or Passthrough for the exposed catalog](../../../public/media/mcp-gateway-quickstart/04-tools.png)
115
131
 
116
132
  </ModalScreenshot>
117
133
 
@@ -122,7 +138,7 @@ result on your machine.
122
138
 
123
139
  :::
124
140
 
125
- 5. **Configure upstream authentication**
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
- ![Choose User OAuth and Dynamic client registration](../../public/media/mcp-gateway-quickstart/05-outbound-auth.png)
152
+ ![Choose User OAuth and Dynamic client registration](../../../public/media/mcp-gateway-quickstart/05-outbound-auth.png)
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
- 6. **Set your identity provider's environment variables**
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
- 7. **Verify the OAuth policy is wired up**
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
- 8. **Connect Claude Desktop**
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](./connect-clients/overview.mdx).
261
+ [Connect MCP clients](../../mcp-gateway/connect-clients/overview.mdx).
246
262
 
247
- 9. **Test it**
263
+ 10. **Test it**
248
264
 
249
- In Claude Desktop, prompt the model with something that requires Linear.
250
- "list my open issues" works well. Claude asks for permission to call the
251
- tool, then returns results proxied through the gateway.
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
- Open the project's
254
- [**Observability → Analytics**](https://portal.zuplo.com/+/account/project/analytics)
255
- view and select the **MCP** section to see the call appear in the events
256
- timeline, the success rate, the top capabilities table, and the user
257
- breakdown.
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](../articles/environments.mdx) before giving others access. The
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](./connect-clients/overview.mdx): Claude Code, Cursor,
279
- VS Code, ChatGPT, and any other MCP client.
280
- - [How it works](./how-it-works.mdx): the request lifecycle and the two OAuth
281
- surfaces.
282
- - [Capability filtering](./capability-filtering.mdx): go deeper on the Curate
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](./code-config/multi-upstream.mdx): front several upstream
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
- title: Dynamic MCP Server - Quickstart
3
- sidebar_label: "Dynamic MCP Server - Quickstart"
2
+ category: MCP Server
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ title: Getting Started with MCP Server - 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. In this guide we'll build one locally using the
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](./step-1-setup-basic-gateway-local.mdx) first.
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](./step-1-setup-basic-gateway-local.mdx) for a walkthrough of the
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
- ![Add Route](../../public/media/mcp-quickstart/add-mcp-route.png)
56
+ ![Add Route](../../../public/media/mcp-quickstart/add-mcp-route.png)
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
- ![Select Tools](../../public/media/mcp-quickstart/select-mcp-tools.png)
65
+ ![Select Tools](../../../public/media/mcp-quickstart/select-mcp-tools.png)
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
- ![MCP Server](../../public/media/mcp-quickstart/mcp-tools-dialog.png)
70
+ ![MCP Server](../../../public/media/mcp-quickstart/mcp-tools-dialog.png)
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](./step-1-setup-basic-gateway-local.mdx) (such as Claude Code or
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](./step-4-deploying-to-the-edge-local.mdx) — and use your deployed
84
- MCP server URL instead.
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