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.
Files changed (73) hide show
  1. package/docs/ai-gateway/custom-policies.mdx +2 -1
  2. package/docs/ai-gateway/integrations/claude-code.mdx +82 -180
  3. package/docs/ai-gateway/integrations/claude-desktop.mdx +61 -99
  4. package/docs/ai-gateway/integrations/codex.mdx +63 -57
  5. package/docs/ai-gateway/usage-limits.mdx +2 -2
  6. package/docs/api-management/overview.md +2 -2
  7. package/docs/articles/add-api-to-backstage.mdx +4 -3
  8. package/docs/articles/api-key-consumer-bucket-portal-ui.mdx +1 -1
  9. package/docs/articles/api-key-management.mdx +1 -1
  10. package/docs/articles/custom-domains.mdx +3 -2
  11. package/docs/articles/migrate-from-apigee.md +3 -3
  12. package/docs/articles/migrate-from-aws-api-gateway.md +3 -3
  13. package/docs/articles/migrate-from-azure-apim.md +3 -3
  14. package/docs/articles/migrate-from-kong.md +3 -3
  15. package/docs/articles/source-control-setup-github.mdx +2 -2
  16. package/docs/articles/source-control.mdx +4 -3
  17. package/docs/articles/testing.mdx +5 -5
  18. package/docs/articles/upstream-iam-auth.mdx +2 -2
  19. package/docs/cli/create-zuplo-api.mdx +4 -4
  20. package/docs/cli/openapi-merge.mdx +1 -1
  21. package/docs/cli/openapi-merge.partial.mdx +1 -1
  22. package/docs/concepts/ai-gateway.mdx +1 -1
  23. package/docs/concepts/how-zuplo-works.mdx +2 -1
  24. package/docs/concepts/mcp.mdx +4 -4
  25. package/docs/dedicated/architecture.mdx +1 -1
  26. package/docs/dev-portal/migration.mdx +2 -2
  27. package/docs/errors/not-found.mdx +1 -1
  28. package/docs/getting-started/ai-gateway/portal.mdx +181 -0
  29. package/docs/getting-started/dev-portal/agent.mdx +148 -0
  30. package/docs/getting-started/dev-portal/index.mdx +26 -0
  31. package/docs/getting-started/dev-portal/local.mdx +213 -0
  32. package/docs/getting-started/dev-portal/portal.mdx +146 -0
  33. package/docs/{articles/step-3-add-api-key-auth.mdx → getting-started/gateway/add-api-key-auth/index.mdx} +32 -23
  34. package/docs/{articles/step-3-add-api-key-auth-local.mdx → getting-started/gateway/add-api-key-auth/local.mdx} +28 -20
  35. package/docs/{articles/step-2-add-rate-limiting.mdx → getting-started/gateway/add-rate-limiting/index.mdx} +22 -13
  36. package/docs/{articles/step-2-add-rate-limiting-local.mdx → getting-started/gateway/add-rate-limiting/local.mdx} +24 -14
  37. package/docs/getting-started/gateway/agent.mdx +199 -0
  38. package/docs/{articles/step-4-deploying-to-the-edge.mdx → getting-started/gateway/deploy-to-the-edge/index.mdx} +39 -27
  39. package/docs/{articles/step-4-deploying-to-the-edge-local.mdx → getting-started/gateway/deploy-to-the-edge/local.mdx} +48 -17
  40. package/docs/{articles/step-5-dynamic-rate-limiting.mdx → getting-started/gateway/dynamic-rate-limiting/index.mdx} +24 -12
  41. package/docs/{articles/step-5-dynamic-rate-limiting-local.mdx → getting-started/gateway/dynamic-rate-limiting/local.mdx} +24 -12
  42. package/docs/getting-started/gateway/index.mdx +24 -0
  43. package/docs/{articles/step-1-setup-basic-gateway.mdx → getting-started/gateway/setup-a-basic-gateway/index.mdx} +33 -21
  44. package/docs/{articles/step-1-setup-basic-gateway-local.mdx → getting-started/gateway/setup-a-basic-gateway/local.mdx} +24 -15
  45. package/docs/getting-started/index.mdx +25 -0
  46. package/docs/getting-started/mcp-gateway/agent.mdx +161 -0
  47. package/docs/getting-started/mcp-gateway/index.mdx +25 -0
  48. package/docs/{mcp-gateway/quickstart-local.mdx → getting-started/mcp-gateway/local.mdx} +64 -38
  49. package/docs/{mcp-gateway/quickstart.mdx → getting-started/mcp-gateway/portal.mdx} +71 -54
  50. package/docs/getting-started/mcp-server/agent.mdx +152 -0
  51. package/docs/getting-started/mcp-server/index.mdx +25 -0
  52. package/docs/{articles/mcp-quickstart-local.mdx → getting-started/mcp-server/local.mdx} +24 -13
  53. package/docs/{articles/mcp-quickstart.mdx → getting-started/mcp-server/portal.mdx} +35 -15
  54. package/docs/getting-started/migrate/agent.mdx +129 -0
  55. package/docs/getting-started/migrate/index.mdx +25 -0
  56. package/docs/getting-started/migrate/local.mdx +141 -0
  57. package/docs/getting-started/migrate/portal.mdx +129 -0
  58. package/docs/home.mdx +6 -0
  59. package/docs/mcp-gateway/connect-clients/chatgpt.mdx +2 -1
  60. package/docs/mcp-gateway/connect-clients/claude-code.mdx +2 -1
  61. package/docs/mcp-gateway/connect-clients/claude-desktop.mdx +23 -20
  62. package/docs/mcp-gateway/connect-clients/cursor.mdx +2 -1
  63. package/docs/mcp-gateway/connect-clients/overview.mdx +2 -1
  64. package/docs/mcp-gateway/connect-clients/vs-code.mdx +2 -1
  65. package/docs/mcp-gateway/how-it-works.mdx +2 -2
  66. package/docs/mcp-gateway/how-to/connect-upstream-api-key.mdx +4 -3
  67. package/docs/mcp-gateway/how-to/curate-tools.mdx +3 -2
  68. package/docs/mcp-gateway/overview.mdx +3 -3
  69. package/docs/policies/ai-gateway-smart-router-inbound/doc.md +14 -0
  70. package/docs/policies/akamai-ai-firewall-v2-inbound/doc.md +7 -0
  71. package/package.json +5 -5
  72. package/docs/ai-gateway/getting-started.mdx +0 -307
  73. package/docs/dev-portal/local-development.mdx +0 -72
@@ -0,0 +1,24 @@
1
+ ---
2
+ category: API Management
3
+ fullWidth: true
4
+ disablePager: true
5
+ showLastModified: false
6
+ suggestEdit: false
7
+ centered: false
8
+ toc: false
9
+ title: Getting Started with API Gateway
10
+ description:
11
+ Put a managed gateway in front of any REST API with Zuplo, in the Portal,
12
+ locally with the CLI, or with an AI agent.
13
+ ---
14
+
15
+ <WizardSteps build="gateway" />
16
+
17
+ An API gateway sits between your clients and your backend. Use it to
18
+ authenticate requests and apply rate limits before traffic reaches your API.
19
+
20
+ This tutorial starts with a sample backend and takes you through routing,
21
+ policies, and deployment. Choose a workflow to begin. You need a GitHub account
22
+ when you reach the deployment step.
23
+
24
+ <MethodPicker build="gateway" />
@@ -1,33 +1,46 @@
1
1
  ---
2
- title: Step 1 - Setup a Basic Gateway
3
- sidebar_label: "1 - Setup Your Gateway"
2
+ category: API Management
3
+ disablePager: true
4
+ showLastModified: false
5
+ suggestEdit: false
6
+ title: Set up a basic gateway - Portal
7
+ description:
8
+ Proxy an origin API through a managed Zuplo gateway, add your first route, and
9
+ see traffic flowing end to end in the Zuplo Portal.
4
10
  ---
5
11
 
6
- <QuickstartPicker
7
- mode="portal"
8
- alternateLink="/articles/step-1-setup-basic-gateway-local"
9
- />
12
+ <WizardSteps build="gateway" method="portal" step="setup-a-basic-gateway" />
13
+
14
+ <MethodTabs build="gateway" method="portal" step="setup-a-basic-gateway" />
10
15
 
11
16
  In this tutorial we'll set up a simple gateway. We'll use a simple origin API at
12
17
  [echo.zuplo.io](https://echo.zuplo.io).
13
18
 
14
19
  Note - Zuplo also supports building and running your API locally. To learn more
15
- [see the documentation](./local-development.mdx).
20
+ [see the documentation](../../../articles/local-development.mdx).
16
21
 
17
22
  <Stepper>
18
23
 
19
24
  1. **Sign-in**
20
25
 
21
- Sign in to the Zuplo Portal and create a free account. Then
22
- [create a new empty project](https://portal.zuplo.com/+/account/projects/new)
23
- (don't import an existing project, we'll set up git later). Then...
26
+ Sign in to the Zuplo Portal and create a free account. Open
27
+ [**Projects**](https://portal.zuplo.com/+/account/projects), click **New
28
+ Project**, select **API & MCP Gateway**, enter `example-project`, and click
29
+ **Create Project**. Choose a blank project rather than importing one; this
30
+ tutorial connects Git later.
31
+
32
+ <ModalScreenshot>
33
+
34
+ ![New Zuplo project dialog with API & MCP Gateway selected](/media/mcp-gateway-portal-quickstart/new-project.png)
35
+
36
+ </ModalScreenshot>
24
37
 
25
38
  1. Add your first **Route**
26
39
 
27
40
  Inside your new project, select the **Code** tab (1), choose the
28
41
  `routes.oas.json` file (2) and click **Add Route** (3)
29
42
 
30
- ![Add Route](../../public/media/step-1-setup-basic-gateway/add-route.png)
43
+ ![Add Route](../../../../public/media/step-1-setup-basic-gateway/add-route.png)
31
44
 
32
45
  Your API's first route will appear, with many options. First we'll configure
33
46
  the route to match specific incoming requests to the gateway:
@@ -38,11 +51,11 @@ Note - Zuplo also supports building and running your API locally. To learn more
38
51
  Then we'll specify how the route will invoke the backend origin API, using a
39
52
  forward handler:
40
53
  - **Request Handler**: We'll use the
41
- [URL Forward Handler](../handlers/url-forward.mdx) which proxies requests
42
- by "Forwarding to" the same path on specified URL. In this case, enter
43
- `https://echo.zuplo.io`
54
+ [URL Forward Handler](../../../handlers/url-forward.mdx) which proxies
55
+ requests by "Forwarding to" the same path on specified URL. In this case,
56
+ enter `https://echo.zuplo.io`
44
57
 
45
- ![Your First Route](../../public/media/step-1-setup-basic-gateway/image-14.png)
58
+ ![Your First Route](../../../../public/media/step-1-setup-basic-gateway/image-14.png)
46
59
 
47
60
  **Save your changes** - click **Save** at the bottom left, or press **CMD+S**
48
61
 
@@ -54,7 +67,7 @@ Note - Zuplo also supports building and running your API locally. To learn more
54
67
 
55
68
  <ModalScreenshot>
56
69
 
57
- ![Test your API](../../public/media/step-1-setup-basic-gateway/image-15.png)
70
+ ![Test your API](../../../../public/media/step-1-setup-basic-gateway/image-15.png)
58
71
 
59
72
  </ModalScreenshot>
60
73
 
@@ -89,12 +102,12 @@ Note - Zuplo also supports building and running your API locally. To learn more
89
102
  setting the value to `${env.BASE_URL}`. We will set the value for `BASE_URL`
90
103
  next.
91
104
 
92
- ![BASE_URL from Environment](../../public/media/step-1-setup-basic-gateway/image-8.png)
105
+ ![BASE_URL from Environment](../../../../public/media/step-1-setup-basic-gateway/image-8.png)
93
106
 
94
107
  Navigate to your project's **Settings** (1) via the navigation bar. Next,
95
108
  click **Environment Variables** (2) under Project Settings.
96
109
 
97
- ![Click Environment Variables](../../public/media/step-1-setup-basic-gateway/set-env-var.png)
110
+ ![Click Environment Variables](../../../../public/media/step-1-setup-basic-gateway/set-env-var.png)
98
111
 
99
112
  Add an Environment Variable (3) called `BASE_URL`. Leave the "Secret"
100
113
  checkbox unchecked. This is typically not a secret, so there's no need to
@@ -102,7 +115,7 @@ Note - Zuplo also supports building and running your API locally. To learn more
102
115
 
103
116
  <ModalScreenshot>
104
117
 
105
- ![BASE_URL Environment Variable](../../public/media/step-1-setup-basic-gateway/env-var.png)
118
+ ![BASE_URL Environment Variable](../../../../public/media/step-1-setup-basic-gateway/env-var.png)
106
119
 
107
120
  </ModalScreenshot>
108
121
 
@@ -112,5 +125,4 @@ Note - Zuplo also supports building and running your API locally. To learn more
112
125
 
113
126
  </Stepper>
114
127
 
115
- **NEXT** Try
116
- [Step 2 - Add Rate Limiting to your API](./step-2-add-rate-limiting.mdx).
128
+ <TutorialPager build="gateway" method="portal" step="setup-a-basic-gateway" />
@@ -1,26 +1,34 @@
1
1
  ---
2
- title: Step 1 - Setup a Basic Gateway
3
- sidebar_label: "1 - Setup Your Gateway"
2
+ category: API Management
3
+ disablePager: true
4
+ showLastModified: false
5
+ suggestEdit: false
6
+ title: Set up a basic gateway - Editor
7
+ description:
8
+ Proxy an origin API through a managed Zuplo gateway, add your first route, and
9
+ see traffic flowing end to end with the Zuplo CLI and your editor.
4
10
  ---
5
11
 
6
- <QuickstartPicker
7
- mode="local"
8
- alternateLink="/articles/step-1-setup-basic-gateway"
9
- />
12
+ <WizardSteps build="gateway" method="local" step="setup-a-basic-gateway" />
13
+
14
+ <MethodTabs build="gateway" method="local" step="setup-a-basic-gateway" />
10
15
 
11
16
  In this tutorial we'll set up a simple gateway using Zuplo's local development,
12
- powered by the [Zuplo CLI](../cli/overview.mdx). We'll use the default project
13
- template, which ships with a working todo API.
17
+ powered by the [Zuplo CLI](../../../cli/overview.mdx). We'll use the default
18
+ project template, which ships with a working todo API.
14
19
 
15
20
  ## Requirements
16
21
 
17
22
  - [Node.js](https://nodejs.org/en/download) 24.0.0 or higher
18
23
 
24
+ ## Create and test your gateway
25
+
19
26
  <Stepper>
20
27
 
21
28
  1. **Create your project**
22
29
 
23
- Create a new project with [create-zuplo-api](../cli/create-zuplo-api.mdx):
30
+ Create a new project with
31
+ [create-zuplo-api](../../../cli/create-zuplo-api.mdx):
24
32
 
25
33
  ```bash
26
34
  npx create-zuplo-api@latest
@@ -86,10 +94,12 @@ template, which ships with a working todo API.
86
94
  (`GET /todos`, `POST /todos`, `PUT /todos/{id}`, `DELETE /todos/{id}`)
87
95
  defined in `config/routes.oas.json`.
88
96
 
89
- Open the [local Route Designer](./local-development-routes-designer.mdx) at
90
- http://localhost:9100 — you can also click the link printed in the terminal —
91
- to see the routes. Select **Get all todos** to inspect how it's configured;
92
- you can change the path, method, request handler, and add policies from here.
97
+ Open the
98
+ [local Route Designer](../../../articles/local-development-routes-designer.mdx)
99
+ at http://localhost:9100 — you can also click the link printed in the
100
+ terminal — to see the routes. Select **Get all todos** to inspect how it's
101
+ configured; you can change the path, method, request handler, and add
102
+ policies from here.
93
103
 
94
104
  1. **Test the API**
95
105
 
@@ -108,5 +118,4 @@ template, which ships with a working todo API.
108
118
 
109
119
  </Stepper>
110
120
 
111
- **NEXT** Try
112
- [Step 2 - Add Rate Limiting to your API](./step-2-add-rate-limiting-local.mdx).
121
+ <TutorialPager build="gateway" method="local" step="setup-a-basic-gateway" />
@@ -0,0 +1,25 @@
1
+ ---
2
+ category: Getting Started
3
+ fullWidth: true
4
+ disablePager: true
5
+ showLastModified: false
6
+ suggestEdit: false
7
+ centered: false
8
+ toc: false
9
+ title: What do you want to build?
10
+ description:
11
+ Pick what to build with Zuplo, choose how you want to build it, and follow a
12
+ step-by-step tutorial.
13
+ ---
14
+
15
+ <WizardSteps />
16
+
17
+ Create your first working project with Zuplo. Choose what you want to build,
18
+ then select a workflow and follow a guided tutorial with a sample API or
19
+ service.
20
+
21
+ Start with the product that fits your task. Most tutorials offer the Zuplo
22
+ Portal, a local editor, or an AI coding agent. The AI Gateway tutorial takes you
23
+ directly to setup in the Portal.
24
+
25
+ <BuildPicker />
@@ -0,0 +1,161 @@
1
+ ---
2
+ category: MCP Gateway
3
+ showLastModified: false
4
+ suggestEdit: false
5
+ sidebar_label: Agent
6
+ title: Getting Started with MCP Gateway - Agent
7
+ description:
8
+ Build a local MCP Gateway with a coding agent, authorize Linear through OAuth,
9
+ and verify a real tool call before deploying.
10
+ ---
11
+
12
+ <WizardSteps build="mcp-gateway" method="agent" />
13
+
14
+ <MethodTabs build="mcp-gateway" method="agent" />
15
+
16
+ Have a coding agent build a local MCP Gateway in front of Linear. You'll
17
+ complete the browser authorization yourself and verify a real Linear tool call.
18
+
19
+ ## Prerequisites
20
+
21
+ - [Node.js](https://nodejs.org/en/download) 24 or later.
22
+ - A [Zuplo account](https://portal.zuplo.com).
23
+ - An installed coding agent and a Linear account with access to a workspace.
24
+ - An MCP client that can connect to a local HTTP server and complete OAuth.
25
+
26
+ This tutorial uses Zuplo's local `dev-login` shortcut. For a hosted gateway with
27
+ your identity provider, use the [Portal tutorial](./portal.mdx).
28
+
29
+ ## Build your MCP Gateway with an agent
30
+
31
+ <Stepper>
32
+
33
+ 1. **Create your project**
34
+
35
+ Run:
36
+
37
+ ```bash
38
+ npx create-zuplo-api@latest linear-mcp-gateway
39
+ cd linear-mcp-gateway
40
+ ```
41
+
42
+ When prompted, choose **Yes** to create a matching Portal project, complete
43
+ sign-in, and select your Zuplo account. Select the coding agent you use when
44
+ asked. The CLI creates and links the hosted project. See
45
+ [`create-zuplo-api`](../../cli/create-zuplo-api.mdx).
46
+
47
+ :::tip{title="Zuplo skills"}
48
+
49
+ The scaffold installs Zuplo skills in this project for Codex and Cursor and
50
+ configures the Claude Code plugin. If setup fails, follow
51
+ [Agent Skills](../../build-with-ai.mdx#agent-skills) from this directory
52
+ before starting your agent.
53
+
54
+ :::
55
+
56
+ 2. **Give the agent the gateway configuration task**
57
+
58
+ Open your agent in the project directory and use this prompt:
59
+
60
+ ```text
61
+ Read the project instructions and bundled Zuplo MCP Gateway docs. Build a
62
+ local gateway in front of Linear using the dev-login shortcut. Use
63
+ http://127.0.0.1:9000 consistently for local URLs.
64
+
65
+ In modules/zuplo.runtime.ts, export runtimeInit(runtime: RuntimeExtensions),
66
+ import RuntimeExtensions from @zuplo/runtime and McpGatewayPlugin from
67
+ @zuplo/runtime/mcp-gateway, and register new McpGatewayPlugin().
68
+
69
+ config/policies.json must be an object containing a policies array. Add:
70
+
71
+ 1. name "dev-oauth", policyType "mcp-oauth-inbound", handler module
72
+ "$import(@zuplo/runtime/mcp-gateway)", export "McpOAuthInboundPolicy".
73
+ options.oidc has issuer "http://127.0.0.1:9000" and jwksUrl
74
+ "http://127.0.0.1:9000/jwks". options.browserLogin.url is
75
+ "http://127.0.0.1:9000/__zuplo/oauth/dev-login".
76
+ The OIDC values are placeholders required for local dev-login; don't
77
+ create a JWKS route or claim that /jwks exists.
78
+
79
+ 2. name "mcp-token-exchange-linear", policyType "mcp-token-exchange-inbound",
80
+ handler module "$import(@zuplo/runtime/mcp-gateway)", export
81
+ "McpTokenExchangeInboundPolicy". Its options are:
82
+ {
83
+ "displayName": "Linear",
84
+ "protectedResourceMetadataUrl": "https://mcp.linear.app/.well-known/oauth-protected-resource",
85
+ "authMode": "user-oauth",
86
+ "scopes": [],
87
+ "clientRegistration": { "mode": "auto" }
88
+ }
89
+
90
+ In config/routes.oas.json, add /mcp/linear-v1 with method key "get,post",
91
+ operationId "linear-mcp-server", and x-zuplo-route.corsPolicy "none".
92
+ Use McpProxyHandler from $import(@zuplo/runtime/mcp-gateway), with options
93
+ { "rewritePattern": "https://mcp.linear.app/mcp" }.
94
+ Attach inbound policies in this order: dev-oauth, mcp-token-exchange-linear.
95
+
96
+ Run npm run dev and send an unauthenticated tools/list POST to the route.
97
+ Verify 401 and a WWW-Authenticate header identifying the protected-resource
98
+ metadata URL. This is only the first check; do not claim Linear works until
99
+ I complete browser OAuth and run a real tool. Do not deploy dev-login.
100
+ Show me the diff and the client URL.
101
+ ```
102
+
103
+ The [Editor tutorial](./local.mdx) shows these files as copyable examples.
104
+ See [How it works](../../mcp-gateway/how-it-works.mdx) for the gateway's
105
+ sign-in and upstream authorization flows.
106
+
107
+ 3. **Verify authentication is attached**
108
+
109
+ Review the diff, then run `npm run dev` if it isn't already running. In
110
+ another terminal, send:
111
+
112
+ ```bash
113
+ curl -i -X POST http://127.0.0.1:9000/mcp/linear-v1 \
114
+ -H "Content-Type: application/json" \
115
+ -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
116
+ ```
117
+
118
+ Expect `401 Unauthorized` and a `WWW-Authenticate` header pointing to
119
+ `/.well-known/oauth-protected-resource/mcp/linear-v1`. A `404` suggests a
120
+ route mismatch; for a `500`, inspect the gateway's terminal output.
121
+
122
+ 4. **Authorize Linear in your MCP client**
123
+
124
+ Add `http://127.0.0.1:9000/mcp/linear-v1` as an HTTP MCP server in your
125
+ client. See
126
+ [Connect MCP clients](../../mcp-gateway/connect-clients/overview.mdx) for
127
+ client-specific setup.
128
+
129
+ Keep `127.0.0.1` in the client URL to match the policy. During the browser
130
+ OAuth flow, dev-login signs you in locally. On the gateway's consent page,
131
+ click **Connect** for Linear, authorize your Linear account, then click
132
+ **Authorize** to complete the gateway connection.
133
+
134
+ Complete these actions yourself; the coding agent doesn't need your Linear
135
+ password or tokens.
136
+
137
+ 5. **Run a real tool**
138
+
139
+ Ask your client to `List my open Linear issues`. Approve the tool call. Check
140
+ that it returns your issues, or an empty result if you have none, without an
141
+ authentication error.
142
+
143
+ If connection fails, check that the local server is running and the client
144
+ uses `127.0.0.1` throughout. See
145
+ [Local development](../../mcp-gateway/code-config/local-development.mdx).
146
+
147
+ </Stepper>
148
+
149
+ ## Deploy with your identity provider
150
+
151
+ Dev-login works only on loopback origins. Before sharing the gateway, replace it
152
+ with your identity provider using
153
+ [Configure local and deployed environments](../../mcp-gateway/code-config/local-development.mdx#configure-local-and-deployed-environments),
154
+ then follow [Deploy to the edge](../gateway/deploy-to-the-edge/local.mdx).
155
+ Repeat the full browser authorization and tool call against the hosted URL.
156
+
157
+ ## Next steps
158
+
159
+ - [Front more upstream servers](../../mcp-gateway/code-config/multi-upstream.mdx).
160
+ - [Filter tools and other capabilities](../../mcp-gateway/capability-filtering.mdx).
161
+ - [Choose an identity provider](../../mcp-gateway/auth/overview.mdx).
@@ -0,0 +1,25 @@
1
+ ---
2
+ category: MCP Gateway
3
+ fullWidth: true
4
+ disablePager: true
5
+ showLastModified: false
6
+ suggestEdit: false
7
+ centered: false
8
+ toc: false
9
+ title: Getting Started with MCP Gateway
10
+ description:
11
+ Govern remote MCP servers with auth, tool curation and policies with Zuplo, in
12
+ the Portal, locally with the CLI, or with an AI agent.
13
+ ---
14
+
15
+ <WizardSteps build="mcp-gateway" />
16
+
17
+ An MCP Gateway controls access to an existing Model Context Protocol (MCP)
18
+ server. This tutorial connects Linear through Zuplo so an AI assistant can call
19
+ its tools after you sign in.
20
+
21
+ You need a Linear workspace and an MCP client, such as Claude Desktop. The
22
+ Portal guide uses Auth0 for sign-in; the local guides use development sign-in to
23
+ test on your machine. Choose the workflow that fits your setup.
24
+
25
+ <MethodPicker build="mcp-gateway" />
@@ -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
+ Build an MCP Gateway locally with the Zuplo CLI, connect an upstream MCP
8
+ server, and test its tools with a local MCP client.
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,17 +216,39 @@ 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
 
219
223
  6. **Connect Claude Desktop**
220
224
 
221
- Open Claude Desktop, go to **Settings → Connectors**, scroll to the bottom,
222
- and click **Add custom connector**. Paste
223
- `http://127.0.0.1:9000/mcp/linear-v1` and click **Add**.
225
+ Use a local stdio bridge so Claude Desktop can reach your local gateway.
226
+ Native remote connectors connect from Anthropic's servers and cannot reach
227
+ `127.0.0.1` on your computer.
228
+
229
+ In Claude Desktop, open **Settings → Developer → Edit Config** and add this
230
+ entry to `claude_desktop_config.json`, preserving any existing servers:
231
+
232
+ ```json title="claude_desktop_config.json"
233
+ {
234
+ "mcpServers": {
235
+ "Zuplo MCP": {
236
+ "command": "npx",
237
+ "args": [
238
+ "-y",
239
+ "mcp-remote",
240
+ "http://127.0.0.1:9000/mcp/linear-v1",
241
+ "--allow-http"
242
+ ]
243
+ }
244
+ }
245
+ }
246
+ ```
247
+
248
+ Save the file and restart Claude Desktop. The bridge opens the gateway's
249
+ OAuth flow on first connection.
224
250
 
225
- Claude Desktop opens the gateway's OAuth flow in a browser:
251
+ In the browser:
226
252
  1. The dev-login shortcut signs you in without any IdP prompt.
227
253
  2. The gateway's consent page lists Linear with a **Connect** button.
228
254
  3. Click **Connect**, complete Linear's OAuth flow, then click **Authorize**
@@ -230,14 +256,14 @@ older project and the build complains about the compatibility date, see
230
256
 
231
257
  :::tip{title="Checkpoint: Claude is connected"}
232
258
 
233
- Back in Claude Desktop, the new connector appears in **Settings →
234
- Connectors** marked as connected. Subsequent requests reuse the tokens the
235
- gateway just issued.
259
+ Back in Claude Desktop, the **Zuplo MCP** server appears under **Settings →
260
+ Developer**. Its tools are available in chat. Subsequent requests reuse the
261
+ tokens the gateway just issued.
236
262
 
237
263
  :::
238
264
 
239
265
  For per-client setup details, see
240
- [Connect MCP clients](./connect-clients/overview.mdx).
266
+ [Connect MCP clients](../../mcp-gateway/connect-clients/overview.mdx).
241
267
 
242
268
  7. **Test it**
243
269
 
@@ -258,22 +284,22 @@ scales out to as many upstream MCP servers as you want to front.
258
284
  The local gateway on `127.0.0.1` is for development only, and the dev-login
259
285
  shortcut works over loopback alone. Before giving others access, swap in a real
260
286
  identity provider and ship the gateway through the Zuplo Portal. See
261
- [environments](../articles/environments.mdx) for setting up a production
287
+ [environments](../../articles/environments.mdx) for setting up a production
262
288
  deployment.
263
289
 
264
290
  :::
265
291
 
266
292
  ## Next steps
267
293
 
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.
294
+ - [Deploy from the Portal](./portal.mdx): swap the dev-login shortcut for a real
295
+ identity provider and ship the gateway through the Zuplo Portal.
296
+ - [Local development](../../mcp-gateway/code-config/local-development.mdx): the
297
+ dev-login shortcut in depth, environment variables, and local-only quirks.
298
+ - [Connect more clients](../../mcp-gateway/connect-clients/overview.mdx): Claude
299
+ Code, Cursor, VS Code, ChatGPT, and any other MCP client.
300
+ - [How it works](../../mcp-gateway/how-it-works.mdx): the request lifecycle and
301
+ the two OAuth surfaces.
302
+ - [Add more upstreams](../../mcp-gateway/code-config/multi-upstream.mdx): front
303
+ several upstream MCP servers from one Zuplo project.
304
+ - [Capability filtering](../../mcp-gateway/capability-filtering.mdx): curate the
305
+ tools, prompts, and resources each route exposes.