zuplo 7.6.1 → 7.6.2
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/{introduction.mdx → overview.mdx} +2 -2
- package/docs/ai-gateway/policies/overview.mdx +1 -1
- package/docs/api-management/{introduction.md → overview.md} +7 -4
- package/docs/articles/api-key-administration.mdx +5 -6
- package/docs/articles/api-key-consumer-bucket-portal-ui.mdx +5 -5
- package/docs/articles/api-key-end-users.mdx +3 -3
- package/docs/articles/custom-domains.mdx +1 -1
- package/docs/articles/environment-variables.mdx +1 -1
- package/docs/articles/feature-flags.mdx +4 -4
- package/docs/articles/migrate-from-apigee.md +3 -3
- package/docs/articles/migrate-from-aws-api-gateway.md +1 -1
- package/docs/articles/migrate-from-azure-apim.md +2 -2
- package/docs/articles/migrate-from-kong.md +3 -3
- package/docs/articles/migration-overview.md +1 -1
- package/docs/articles/monetization-integrations.mdx +2 -2
- package/docs/articles/step-3-add-api-key-auth.mdx +1 -1
- package/docs/articles/step-5-dynamic-rate-limiting-local.mdx +1 -1
- package/docs/articles/step-5-dynamic-rate-limiting.mdx +1 -1
- package/docs/articles/version-support-policy.mdx +2 -2
- package/docs/cli/create-zuplo-api.mdx +2 -2
- package/docs/concepts/ai-gateway.mdx +69 -0
- package/docs/concepts/api-keys.md +3 -3
- package/docs/concepts/mcp.mdx +63 -0
- package/docs/concepts/project-structure.mdx +1 -1
- package/docs/dedicated/akamai/ai-powered-applications.mdx +3 -3
- package/docs/dev-portal/documenting-mcp-servers.mdx +3 -3
- package/docs/dev-portal/{introduction.mdx → overview.mdx} +5 -2
- package/docs/dev-portal/zudoku/configuration/api-reference.md +45 -0
- package/docs/dev-portal/zudoku/configuration/docs.md +56 -1
- package/docs/dev-portal/zudoku/configuration/llms.md +39 -4
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +4 -4
- package/docs/managed-edge/overview.md +1 -1
- package/docs/mcp-gateway/cross-app-access/quickstart.mdx +1 -1
- package/docs/mcp-gateway/{introduction.mdx → overview.mdx} +2 -2
- package/docs/mcp-gateway/policies/overview.mdx +13 -0
- package/docs/mcp-server/custom-tools.mdx +2 -2
- package/docs/mcp-server/graphql.mdx +1 -1
- package/docs/mcp-server/openai-apps-sdk.mdx +3 -4
- package/docs/mcp-server/{introduction.mdx → overview.mdx} +6 -3
- package/docs/programmable-api/mcp-sdk.mdx +3 -3
- package/package.json +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
3
|
-
sidebar_label:
|
|
2
|
+
title: AI Gateway overview
|
|
3
|
+
sidebar_label: Overview
|
|
4
4
|
description:
|
|
5
5
|
The Zuplo AI Gateway is a proxy between your apps and LLM providers, deployed
|
|
6
6
|
from your own Git repository, with per-app policy pipelines for cost control,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
3
|
-
sidebar_label:
|
|
2
|
+
title: API Management overview
|
|
3
|
+
sidebar_label: Overview
|
|
4
|
+
description:
|
|
5
|
+
Secure, transform, and operate APIs with Zuplo's programmable gateway,
|
|
6
|
+
built-in policies, analytics, and developer tooling.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
The Zuplo Gateway is a fully-managed, lightweight API management platform
|
|
@@ -11,8 +14,8 @@ engineering team, Zuplo makes it easy to:
|
|
|
11
14
|
- [Add authentication and access control](../articles/step-3-add-api-key-auth.mdx)
|
|
12
15
|
- [Implement rate limiting](../articles/step-2-add-rate-limiting.mdx)
|
|
13
16
|
- Write custom logic to run at the gateway layer
|
|
14
|
-
- Build a [rich developer portal](../dev-portal/
|
|
15
|
-
|
|
17
|
+
- Build a [rich developer portal](../dev-portal/overview.mdx) with self-serve
|
|
18
|
+
tools for auth and monetization
|
|
16
19
|
|
|
17
20
|
Zuplo delivers the core benefits of API management without the overhead of
|
|
18
21
|
legacy platforms. That means no expensive licensing, training requirements, or
|
|
@@ -28,12 +28,11 @@ Once a consumer is created, view or copy its API Key using the icons shown.
|
|
|
28
28
|
|
|
29
29
|

|
|
30
30
|
|
|
31
|
-
If you're using the Zuplo [Developer Portal](../dev-portal/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
optional if you aren't using the
|
|
36
|
-
[Developer Portal](../dev-portal/introduction.mdx).
|
|
31
|
+
If you're using the Zuplo [Developer Portal](../dev-portal/overview.mdx), we've
|
|
32
|
+
an integration with the API Key API that allows developers to access their API
|
|
33
|
+
keys, create new ones and delete them. To enable this, you must assign one or
|
|
34
|
+
more managers, via e-mail, to be a manager for your API Key Consumer. This is
|
|
35
|
+
optional if you aren't using the [Developer Portal](../dev-portal/overview.mdx).
|
|
37
36
|
|
|
38
37
|
You can assign managers from your project's
|
|
39
38
|
[Services](https://portal.zuplo.com/+/account/project/services) page in the
|
|
@@ -101,11 +101,11 @@ the API Key Authentication policy's `bucketId` option takes.
|
|
|
101
101
|
|
|
102
102
|
### Consumer form fields
|
|
103
103
|
|
|
104
|
-
| Field | Required | Runtime value | Notes
|
|
105
|
-
| ---------------- | -------- | ------------------- |
|
|
106
|
-
| **Subject** | Yes | `request.user.sub` | Unique within the bucket. Identifies the consumer in logs and policy code.
|
|
107
|
-
| **Key managers** | No | n/a | Comma-separated emails of users who can manage this consumer's keys via the [Developer Portal](../dev-portal/
|
|
108
|
-
| **Metadata** | No | `request.user.data` | Valid JSON object. Plan info, customer IDs, anything your policies need at runtime.
|
|
104
|
+
| Field | Required | Runtime value | Notes |
|
|
105
|
+
| ---------------- | -------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
106
|
+
| **Subject** | Yes | `request.user.sub` | Unique within the bucket. Identifies the consumer in logs and policy code. |
|
|
107
|
+
| **Key managers** | No | n/a | Comma-separated emails of users who can manage this consumer's keys via the [Developer Portal](../dev-portal/overview.mdx). |
|
|
108
|
+
| **Metadata** | No | `request.user.data` | Valid JSON object. Plan info, customer IDs, anything your policies need at runtime. |
|
|
109
109
|
|
|
110
110
|
:::tip
|
|
111
111
|
|
|
@@ -52,9 +52,9 @@ keys or create new keys for your consumers manually.
|
|
|
52
52
|
|
|
53
53
|
## Zuplo Developer Portal
|
|
54
54
|
|
|
55
|
-
If you publish a [Zuplo Developer Portal](../dev-portal/
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
If you publish a [Zuplo Developer Portal](../dev-portal/overview.mdx) for your
|
|
56
|
+
API consumers, you can let authenticated users manage their own keys without
|
|
57
|
+
contacting your team.
|
|
58
58
|
|
|
59
59
|
By default, a consumer's keys are visible to any signed-in user whose email
|
|
60
60
|
matches a manager email assigned to that consumer. Consumers can copy and rotate
|
|
@@ -20,7 +20,7 @@ Zuplo supports two types of custom domains that can be configured separately:
|
|
|
20
20
|
2. **Developer Portal Custom Domain**: For your developer documentation site
|
|
21
21
|
(for example, `docs.example.com`). This domain uses the CNAME
|
|
22
22
|
`cname.zuplodocs.com`. Learn more about the Developer Portal in the
|
|
23
|
-
[Developer Portal documentation](/docs/dev-portal/
|
|
23
|
+
[Developer Portal documentation](/docs/dev-portal/overview).
|
|
24
24
|
|
|
25
25
|
Both types of custom domains can be managed from the same Custom Domains section
|
|
26
26
|
in your project settings and follow a similar configuration process.
|
|
@@ -72,7 +72,7 @@ Environment variables can't start with `ZUPLO_` or `__ZUPLO`. The same
|
|
|
72
72
|
restriction applies to names beginning with `ZUDOKU_`.
|
|
73
73
|
|
|
74
74
|
If you need a variable that's exposed to the
|
|
75
|
-
[Developer Portal](../dev-portal/
|
|
75
|
+
[Developer Portal](../dev-portal/overview.mdx) build, prefix it with
|
|
76
76
|
`ZUPLO_PUBLIC_` (or `ZUDOKU_PUBLIC_`). Public-prefixed variables are bundled
|
|
77
77
|
into the portal's static output and **must not contain secrets**, as they're
|
|
78
78
|
visible to anyone who loads the page.
|
|
@@ -398,10 +398,10 @@ reads with the patterns above.
|
|
|
398
398
|
## Gate an MCP server with flags
|
|
399
399
|
|
|
400
400
|
If you're fronting an MCP server with the
|
|
401
|
-
[MCP Gateway](../mcp-gateway/
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
401
|
+
[MCP Gateway](../mcp-gateway/overview.mdx), the same policies apply — MCP routes
|
|
402
|
+
run the standard inbound policy chain before the handler. Add your feature-gate
|
|
403
|
+
policy to the MCP route to control access per user or plan, for example to make
|
|
404
|
+
MCP access a paid-tier feature or to turn off a beta server.
|
|
405
405
|
|
|
406
406
|
For curating _which tools_ a server exposes, start with the static
|
|
407
407
|
[capability filtering](../mcp-gateway/capability-filtering.mdx) policy, which
|
|
@@ -84,7 +84,7 @@ Zuplo has a video walkthrough of the Apigee to Zuplo migration process:
|
|
|
84
84
|
| Environment | [Environment](./environments.md) |
|
|
85
85
|
| API Product | API key with [metadata](./api-key-management.md) |
|
|
86
86
|
| Developer App | [API key consumer](./api-key-management.md) |
|
|
87
|
-
| Apigee Developer Portal | [Zuplo Developer Portal](../dev-portal/
|
|
87
|
+
| Apigee Developer Portal | [Zuplo Developer Portal](../dev-portal/overview.mdx) |
|
|
88
88
|
| VerifyAPIKey policy | [API Key Authentication](../policies/api-key-inbound.md) |
|
|
89
89
|
| OAuthV2 policy | [JWT authentication policies](../policies/open-id-jwt-auth-inbound.md) |
|
|
90
90
|
| SpikeArrest | [Rate Limiting](../policies/rate-limit-inbound.md) |
|
|
@@ -306,7 +306,7 @@ export default async function (
|
|
|
306
306
|
### Step 5: Migrate your developer portal
|
|
307
307
|
|
|
308
308
|
Apigee's Drupal-based developer portal requires significant setup and
|
|
309
|
-
maintenance. Zuplo's [Developer Portal](../dev-portal/
|
|
309
|
+
maintenance. Zuplo's [Developer Portal](../dev-portal/overview.mdx) is
|
|
310
310
|
automatically generated from your OpenAPI spec and includes:
|
|
311
311
|
|
|
312
312
|
- Interactive API reference documentation
|
|
@@ -404,5 +404,5 @@ between both gateways.
|
|
|
404
404
|
- [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
|
|
405
405
|
- [Add rate limiting](./step-2-add-rate-limiting.md)
|
|
406
406
|
- [Add API key authentication](./step-3-add-api-key-auth.md)
|
|
407
|
-
- [Configure your developer portal](../dev-portal/
|
|
407
|
+
- [Configure your developer portal](../dev-portal/overview.mdx)
|
|
408
408
|
- [Set up source control](./source-control.md)
|
|
@@ -244,5 +244,5 @@ secrets to secure the connection between Zuplo and your AWS backends.
|
|
|
244
244
|
- [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
|
|
245
245
|
- [Add rate limiting](./step-2-add-rate-limiting.md)
|
|
246
246
|
- [Add API key authentication](./step-3-add-api-key-auth.md)
|
|
247
|
-
- [Configure your developer portal](../dev-portal/
|
|
247
|
+
- [Configure your developer portal](../dev-portal/overview.mdx)
|
|
248
248
|
- [Set up source control](./source-control.md)
|
|
@@ -52,7 +52,7 @@ experience for their customers and improve their engineering team's workflow.
|
|
|
52
52
|
| Subscription key | [API Key Authentication](../policies/api-key-inbound.md) |
|
|
53
53
|
| Product | API key with [metadata](./api-key-management.md) |
|
|
54
54
|
| Service (APIM instance) | [Environment](./environments.md) |
|
|
55
|
-
| Developer portal | [Zuplo Developer Portal](../dev-portal/
|
|
55
|
+
| Developer portal | [Zuplo Developer Portal](../dev-portal/overview.mdx) |
|
|
56
56
|
| Application Insights | [Logging integrations](./logging.md) (Datadog, Splunk, etc.) |
|
|
57
57
|
| API revision | Git branch with [branch-based deployment](./branch-based-deployments.md) |
|
|
58
58
|
| Gateway (self-hosted) | [Self-hosted Zuplo](../self-hosted/overview.md) |
|
|
@@ -288,5 +288,5 @@ connection between Zuplo and your Azure backends.
|
|
|
288
288
|
- [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
|
|
289
289
|
- [Add rate limiting](./step-2-add-rate-limiting.md)
|
|
290
290
|
- [Add API key authentication](./step-3-add-api-key-auth.md)
|
|
291
|
-
- [Configure your developer portal](../dev-portal/
|
|
291
|
+
- [Configure your developer portal](../dev-portal/overview.mdx)
|
|
292
292
|
- [Set up source control](./source-control.md)
|
|
@@ -54,7 +54,7 @@ for a dedicated DevOps engineer to maintain the API gateway.
|
|
|
54
54
|
| Kong Manager / Konnect UI | [Zuplo Portal](./development-options.md) or local development with Git |
|
|
55
55
|
| DB-less declarative config | [OpenAPI route config](./openapi.md) in Git |
|
|
56
56
|
| Admin API | [Zuplo API](./accounts/zuplo-api-keys.md) or `git push` |
|
|
57
|
-
| Kong Dev Portal | [Zuplo Developer Portal](../dev-portal/
|
|
57
|
+
| Kong Dev Portal | [Zuplo Developer Portal](../dev-portal/overview.mdx) |
|
|
58
58
|
|
|
59
59
|
## Step-by-step migration
|
|
60
60
|
|
|
@@ -207,7 +207,7 @@ self-serve developer portal for key creation and rotation.
|
|
|
207
207
|
|
|
208
208
|
1. Add the `api-key-inbound` policy to your routes.
|
|
209
209
|
2. Create API key consumers through the Zuplo Portal or API.
|
|
210
|
-
3. Optionally, enable the [Developer Portal](../dev-portal/
|
|
210
|
+
3. Optionally, enable the [Developer Portal](../dev-portal/overview.mdx) for
|
|
211
211
|
self-serve key management.
|
|
212
212
|
|
|
213
213
|
**Kong `jwt` to Zuplo JWT Authentication:**
|
|
@@ -296,5 +296,5 @@ configuration-as-code. Zuplo takes this further with native GitOps:
|
|
|
296
296
|
- [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
|
|
297
297
|
- [Add rate limiting](./step-2-add-rate-limiting.md)
|
|
298
298
|
- [Add API key authentication](./step-3-add-api-key-auth.md)
|
|
299
|
-
- [Configure your developer portal](../dev-portal/
|
|
299
|
+
- [Configure your developer portal](../dev-portal/overview.mdx)
|
|
300
300
|
- [Set up source control](./source-control.md)
|
|
@@ -67,7 +67,7 @@ The following table maps common API gateway concepts to their Zuplo equivalents:
|
|
|
67
67
|
| Response policy | Plugin (Lua) | PostFlow (XML) | Response mapping | Outbound policy (XML) | [Outbound policy](./policies.md) (TypeScript) |
|
|
68
68
|
| Authentication | Plugin | VerifyAPIKey policy | API key / Authorizer | Subscription key | [API key](./api-key-authentication.md) or JWT policy |
|
|
69
69
|
| Rate limiting | Rate Limiting plugin | SpikeArrest / Quota | Usage plan | rate-limit policy | [Rate limit policy](../policies/rate-limit-inbound.md) |
|
|
70
|
-
| Developer portal | Kong Dev Portal | Drupal portal | N/A (self-build) | Built-in portal | [Developer Portal](../dev-portal/
|
|
70
|
+
| Developer portal | Kong Dev Portal | Drupal portal | N/A (self-build) | Built-in portal | [Developer Portal](../dev-portal/overview.mdx) |
|
|
71
71
|
| Environment | Workspace | Environment | Stage | Service | [Environment](./environments.md) |
|
|
72
72
|
| Deployment | Deck / Admin API | API deploy | CloudFormation / SAM | ARM / Bicep | `git push` with [GitOps](./source-control.md) |
|
|
73
73
|
|
|
@@ -95,8 +95,8 @@ Use Zuplo's [hooks system](../programmable-api/hooks.mdx) to:
|
|
|
95
95
|
|
|
96
96
|
### Developer Portal
|
|
97
97
|
|
|
98
|
-
The [Zuplo Developer Portal](../dev-portal/
|
|
99
|
-
|
|
98
|
+
The [Zuplo Developer Portal](../dev-portal/overview.mdx) supports custom pages
|
|
99
|
+
and plugins for billing UI:
|
|
100
100
|
|
|
101
101
|
- [Custom pages](../dev-portal/zudoku/guides/custom-pages.md) for pricing,
|
|
102
102
|
billing, and account management
|
|
@@ -138,7 +138,7 @@ Let's get started.
|
|
|
138
138
|
|
|
139
139
|
Whenever you deploy a new endpoint on Zuplo, it will automatically be added
|
|
140
140
|
to your
|
|
141
|
-
[autogenerated developer documentation portal](../dev-portal/
|
|
141
|
+
[autogenerated developer documentation portal](../dev-portal/overview.mdx).
|
|
142
142
|
|
|
143
143
|
To access your API's developer portal, click the **Gateway deployed** button
|
|
144
144
|
in your toolbar and click the link under Developer Portal.
|
|
@@ -172,7 +172,7 @@ less than an hour.
|
|
|
172
172
|
### Next Steps
|
|
173
173
|
|
|
174
174
|
- Continue exploring our docs to learn about customizing your
|
|
175
|
-
[Developer Portal](../dev-portal/
|
|
175
|
+
[Developer Portal](../dev-portal/overview.mdx), or explore our various
|
|
176
176
|
[Integrations](https://zuplo.com/integrations)
|
|
177
177
|
- [Grab time](https://zuplo.com/meeting) with the Zuplo team to have your
|
|
178
178
|
questions answered
|
|
@@ -160,7 +160,7 @@ less than an hour.
|
|
|
160
160
|
### Next Steps
|
|
161
161
|
|
|
162
162
|
- Continue exploring our docs to learn about customizing your
|
|
163
|
-
[Developer Portal](../dev-portal/
|
|
163
|
+
[Developer Portal](../dev-portal/overview.mdx), or explore our various
|
|
164
164
|
[Integrations](https://zuplo.com/integrations)
|
|
165
165
|
- [Grab time](https://zuplo.com/meeting) with the Zuplo team to have your
|
|
166
166
|
questions answered
|
|
@@ -112,8 +112,8 @@ Two consequences:
|
|
|
112
112
|
non-compliant implementation breaks interoperability with the clients and
|
|
113
113
|
servers customers need to work with, which is the larger break.
|
|
114
114
|
|
|
115
|
-
MCP moves fastest here. The [MCP Gateway](../mcp-gateway/
|
|
116
|
-
[MCP Server](../mcp-server/
|
|
115
|
+
MCP moves fastest here. The [MCP Gateway](../mcp-gateway/overview.mdx) and
|
|
116
|
+
[MCP Server](../mcp-server/overview.mdx) track protocol revisions as the
|
|
117
117
|
specification publishes them, and support for older revisions ends on the
|
|
118
118
|
specification's schedule.
|
|
119
119
|
|
|
@@ -88,7 +88,7 @@ flag you get the `default` template.
|
|
|
88
88
|
| --------------- | --------------------------------------------------------------------------------------------- |
|
|
89
89
|
| `default` | Sample `/todos` routes, a `hello-world` module, a dev portal in `docs/`, and VS Code settings |
|
|
90
90
|
| `default-empty` | The same project with no routes defined and no VS Code settings |
|
|
91
|
-
| `ai-gateway-v2` | An [AI Gateway](../ai-gateway/
|
|
91
|
+
| `ai-gateway-v2` | An [AI Gateway](../ai-gateway/overview.mdx) project, without a dev portal |
|
|
92
92
|
|
|
93
93
|
`--empty` is shorthand for `--template default-empty`.
|
|
94
94
|
|
|
@@ -96,7 +96,7 @@ The `ai-gateway-v2` template scaffolds `config/ai.oas.json`, which routes
|
|
|
96
96
|
`/:app_id/v1/*` to the AI Gateway handler, and `config/policies.json`, which
|
|
97
97
|
declares the policies an application's policy chain can select. It ships no
|
|
98
98
|
`docs/` directory, so the CLI skips the
|
|
99
|
-
[dev portal](../dev-portal/
|
|
99
|
+
[dev portal](../dev-portal/overview.mdx) workspace:
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
102
|
npx create-zuplo-api@latest my-gateway --template ai-gateway-v2
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: AI Gateway Concepts
|
|
3
|
+
sidebar_label: AI Gateway
|
|
4
|
+
description:
|
|
5
|
+
The mental model behind the Zuplo AI Gateway — providers, teams, apps, and
|
|
6
|
+
per-app policy chains — and how it relates to the rest of the platform.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
The Zuplo AI Gateway is a proxy that sits between your apps and LLM providers
|
|
10
|
+
like OpenAI, Anthropic, Google, Mistral, and xAI. Instead of each app holding
|
|
11
|
+
provider API keys and calling providers directly, every request flows through
|
|
12
|
+
the gateway, which applies policies, controls, and monitoring. This page
|
|
13
|
+
explains the concepts behind it. For the full feature tour, see the
|
|
14
|
+
[AI Gateway overview](../ai-gateway/overview.mdx).
|
|
15
|
+
|
|
16
|
+
## Providers, teams, and apps
|
|
17
|
+
|
|
18
|
+
Three building blocks organize an AI Gateway:
|
|
19
|
+
|
|
20
|
+
- **[Providers](../ai-gateway/providers.mdx)** are the LLM vendors your gateway
|
|
21
|
+
can route to. Administrators configure providers once, including any
|
|
22
|
+
[custom OpenAI-compatible providers](../ai-gateway/custom-providers.mdx), and
|
|
23
|
+
consumers never see the underlying credentials.
|
|
24
|
+
- **[Teams](../ai-gateway/teams.mdx)** group users and carry budget limits that
|
|
25
|
+
cascade down the hierarchy: gateway-wide limits, then team limits, then
|
|
26
|
+
per-app limits. See [Usage Limits](../ai-gateway/usage-limits.mdx).
|
|
27
|
+
- **[Apps](../ai-gateway/apps.mdx)** are the pieces of software that call the
|
|
28
|
+
gateway — a support chatbot is one app, an internal coding agent is another.
|
|
29
|
+
Each app gets its own gateway URL, its own Zuplo-managed API key, and its own
|
|
30
|
+
policy chain.
|
|
31
|
+
|
|
32
|
+
## Policy chains
|
|
33
|
+
|
|
34
|
+
Every app runs its own ordered [policy chain](../ai-gateway/policy-chains.mdx) —
|
|
35
|
+
model filtering, fallback models, budgets, semantic caching, guardrails,
|
|
36
|
+
tracing, and any [custom policies](../ai-gateway/custom-policies.mdx) written in
|
|
37
|
+
TypeScript. Team [policy templates](../ai-gateway/policy-templates.mdx) give new
|
|
38
|
+
apps a consistent starting pipeline, and chain changes apply within about a
|
|
39
|
+
minute with no redeploy.
|
|
40
|
+
|
|
41
|
+
App-level controls are opt-in: an app with an empty policy chain applies no
|
|
42
|
+
model restrictions, budgets, guardrails, or caching of its own — though gateway
|
|
43
|
+
and team usage limits still apply.
|
|
44
|
+
|
|
45
|
+
## The Universal API
|
|
46
|
+
|
|
47
|
+
Every app exposes an OpenAI-compatible
|
|
48
|
+
[Universal API](../ai-gateway/universal-api.mdx). Point any SDK that supports a
|
|
49
|
+
custom base URL at the app's gateway URL, send the app's API key as a bearer
|
|
50
|
+
token, and reference models as `providerName/model` (for example
|
|
51
|
+
`openai/gpt-5-mini`). One app can use models from several providers through the
|
|
52
|
+
same endpoint, so switching providers is a configuration change rather than a
|
|
53
|
+
code change.
|
|
54
|
+
|
|
55
|
+
## How it fits into Zuplo
|
|
56
|
+
|
|
57
|
+
An AI Gateway is a type of Zuplo project. Its routes and policy declarations
|
|
58
|
+
live in a [Git repository](../ai-gateway/source-control.mdx), so gateway changes
|
|
59
|
+
go through the same review workflow as the rest of your Zuplo configuration, and
|
|
60
|
+
the providers, teams, and apps you configure belong to that project. The
|
|
61
|
+
platform primitives — deployment model, environments, analytics — are the same
|
|
62
|
+
ones described in [How Zuplo Works](./how-zuplo-works.mdx).
|
|
63
|
+
|
|
64
|
+
## Next steps
|
|
65
|
+
|
|
66
|
+
- [Get started with the AI Gateway](../ai-gateway/getting-started.mdx)
|
|
67
|
+
- [Browse the SDK integrations](../ai-gateway/integrations/openai.mdx) for
|
|
68
|
+
OpenAI, the Vercel AI SDK, LangChain, Claude Code, Codex, and Goose
|
|
69
|
+
- Explore the [AI Gateway policies](../ai-gateway/policies/overview.mdx)
|
|
@@ -170,9 +170,9 @@ support leak detection.
|
|
|
170
170
|
|
|
171
171
|
## Self-serve key management
|
|
172
172
|
|
|
173
|
-
The [Developer Portal](../dev-portal/
|
|
174
|
-
|
|
175
|
-
|
|
173
|
+
The [Developer Portal](../dev-portal/overview.mdx) includes built-in self-serve
|
|
174
|
+
API key management. Your API consumers can sign in to the portal and create,
|
|
175
|
+
view, and delete their own keys without contacting your team.
|
|
176
176
|
|
|
177
177
|
To enable self-serve access, assign a **manager** to a consumer. Managers are
|
|
178
178
|
identified by email and identity provider subject. You can assign a manager in
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Model Context Protocol (MCP) Concepts
|
|
3
|
+
sidebar_label: MCP
|
|
4
|
+
description:
|
|
5
|
+
How Zuplo supports the Model Context Protocol — the MCP Server handler that
|
|
6
|
+
turns your APIs into tools, and the MCP Gateway that fronts upstream MCP
|
|
7
|
+
servers with one OAuth-protected endpoint.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
[Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) is
|
|
11
|
+
an open protocol that standardizes how AI applications — Claude Desktop, Claude
|
|
12
|
+
Code, ChatGPT, Cursor, VS Code, and others — connect to external tools and data
|
|
13
|
+
sources. Zuplo supports MCP in two directions, and this page explains both and
|
|
14
|
+
when to use each.
|
|
15
|
+
|
|
16
|
+
## Two ways to use MCP on Zuplo
|
|
17
|
+
|
|
18
|
+
| Feature | What it does | When to use it |
|
|
19
|
+
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
20
|
+
| **[MCP Gateway](../mcp-gateway/overview.mdx)** | Proxies traffic to one or more upstream MCP servers. Handles OAuth, capability curation, and analytics. | You want to expose existing MCP servers (Linear, Stripe, internal services, etc.) to AI clients through one endpoint. |
|
|
21
|
+
| **[MCP Server handler](../handlers/mcp-server.mdx)** | Turns your OpenAPI routes into an MCP server. Each route becomes an MCP tool, prompt, or resource. | You want to expose your own API as MCP so AI clients can call it as tools. |
|
|
22
|
+
|
|
23
|
+
The two features solve different problems and can live in the same project.
|
|
24
|
+
|
|
25
|
+
### MCP Gateway: one front door for upstream MCP servers
|
|
26
|
+
|
|
27
|
+
The [MCP Gateway](../mcp-gateway/overview.mdx) fronts one or more remote MCP
|
|
28
|
+
servers with a single, OAuth-protected endpoint. Users sign in once through your
|
|
29
|
+
identity provider, the gateway brokers credentials to each upstream server, and
|
|
30
|
+
every tool call lands in your analytics — without raw tokens ever reaching the
|
|
31
|
+
AI client. It solves five problems that appear as soon as a team uses more than
|
|
32
|
+
a couple of MCP servers: discovery, authentication, authorization,
|
|
33
|
+
observability, and guardrails. See
|
|
34
|
+
[How the MCP Gateway works](../mcp-gateway/how-it-works.mdx).
|
|
35
|
+
|
|
36
|
+
### MCP Server: turn your API into tools
|
|
37
|
+
|
|
38
|
+
The [MCP Server handler](../mcp-server/overview.mdx) transforms the routes in
|
|
39
|
+
your Zuplo project into MCP [tools](../mcp-server/tools.mdx),
|
|
40
|
+
[prompts](../mcp-server/prompts.mdx), and
|
|
41
|
+
[resources](../mcp-server/resources.mdx) that AI systems can discover and
|
|
42
|
+
invoke. It uses your existing OpenAPI specifications for tool descriptions and
|
|
43
|
+
composes with Zuplo's authentication, rate limiting, and audit logging policies.
|
|
44
|
+
|
|
45
|
+
## How MCP fits into Zuplo
|
|
46
|
+
|
|
47
|
+
Neither MCP feature is a separate runtime. Both are sets of policies and route
|
|
48
|
+
handlers that run inside the same Zuplo platform that runs your REST and GraphQL
|
|
49
|
+
APIs — the same OpenAPI-as-config model, deployment pipeline, and observability
|
|
50
|
+
primitives described in [How Zuplo Works](./how-zuplo-works.mdx). MCP traffic
|
|
51
|
+
flows through the same [request lifecycle](./request-lifecycle.mdx), so policies
|
|
52
|
+
like [rate limiting](../rate-limiting/getting-started.mdx) and
|
|
53
|
+
[audit logging](../policies/audit-log-inbound.mdx) apply to it the same way they
|
|
54
|
+
apply to any other route.
|
|
55
|
+
|
|
56
|
+
## Next steps
|
|
57
|
+
|
|
58
|
+
- [MCP Gateway quickstart](../mcp-gateway/quickstart.mdx) — expose an upstream
|
|
59
|
+
MCP server and connect Claude Desktop
|
|
60
|
+
- [MCP quickstart for the MCP Server handler](../articles/mcp-quickstart.mdx) —
|
|
61
|
+
turn an API into MCP tools
|
|
62
|
+
- [Connect MCP clients](../mcp-gateway/connect-clients/overview.mdx) — Claude,
|
|
63
|
+
ChatGPT, Cursor, VS Code, and others
|
|
@@ -132,7 +132,7 @@ are referenced from `routes.oas.json` and `policies.json` using
|
|
|
132
132
|
|
|
133
133
|
If you use the Zuplo Developer Portal, this directory contains the portal
|
|
134
134
|
configuration and custom pages. See
|
|
135
|
-
[Developer Portal](../dev-portal/
|
|
135
|
+
[Developer Portal](../dev-portal/overview.mdx) for details.
|
|
136
136
|
|
|
137
137
|
## How the files relate
|
|
138
138
|
|
|
@@ -142,7 +142,7 @@ every tool invocation, ensuring the model can only access data the requesting
|
|
|
142
142
|
user is authorized to see.
|
|
143
143
|
|
|
144
144
|
For more information, see the
|
|
145
|
-
[MCP Server documentation](../../mcp-server/
|
|
145
|
+
[MCP Server documentation](../../mcp-server/overview.mdx).
|
|
146
146
|
|
|
147
147
|
## AI Firewall Protection
|
|
148
148
|
|
|
@@ -219,5 +219,5 @@ Deployment options include:
|
|
|
219
219
|
for MCP server configuration
|
|
220
220
|
- [Akamai AI Firewall](../../policies/akamai-ai-firewall-v2-inbound.mdx) - AI
|
|
221
221
|
security policy configuration
|
|
222
|
-
- [Zuplo AI Gateway](../../ai-gateway/
|
|
223
|
-
|
|
222
|
+
- [Zuplo AI Gateway](../../ai-gateway/overview.mdx) - Overview of AI Gateway
|
|
223
|
+
capabilities
|
|
@@ -20,7 +20,7 @@ If your MCP server uses Zuplo's
|
|
|
20
20
|
[MCP Server Handler](/docs/handlers/mcp-server.mdx), the `x-mcp-server`
|
|
21
21
|
extension is added to your OpenAPI spec automatically. Skip this guide — there
|
|
22
22
|
is nothing to configure. See the
|
|
23
|
-
[MCP Server overview](/docs/mcp-server/
|
|
23
|
+
[MCP Server overview](/docs/mcp-server/overview.mdx) for the build path.
|
|
24
24
|
|
|
25
25
|
:::
|
|
26
26
|
|
|
@@ -219,5 +219,5 @@ hidden for MCP endpoints because they use a different interaction model.
|
|
|
219
219
|
— the underlying OpenAPI extension.
|
|
220
220
|
- [MCP Server Handler](/docs/handlers/mcp-server.mdx) — build an MCP server on
|
|
221
221
|
Zuplo (and skip this guide entirely).
|
|
222
|
-
- [MCP Server overview](/docs/mcp-server/
|
|
223
|
-
|
|
222
|
+
- [MCP Server overview](/docs/mcp-server/overview.mdx) — concepts, capabilities,
|
|
223
|
+
and the Zuplo-native build path.
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
3
|
-
|
|
2
|
+
title: Developer Portal overview
|
|
3
|
+
sidebar_label: Overview
|
|
4
|
+
description:
|
|
5
|
+
Build and publish an API developer portal with interactive documentation,
|
|
6
|
+
authentication, and API key self-service.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
Every API deserves beautiful and powerful documentation. The Zuplo Developer
|
|
@@ -30,6 +30,51 @@ const config = {
|
|
|
30
30
|
};
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
### Publish a canonical OpenAPI document
|
|
34
|
+
|
|
35
|
+
For agents, API clients, and discovery tools, you can opt a file-based API into a stable public
|
|
36
|
+
OpenAPI URL:
|
|
37
|
+
|
|
38
|
+
```ts title=zudoku.config.ts
|
|
39
|
+
const config = {
|
|
40
|
+
apis: {
|
|
41
|
+
type: "file",
|
|
42
|
+
input: "./openapi.json",
|
|
43
|
+
path: "/api",
|
|
44
|
+
publish: {
|
|
45
|
+
path: "/openapi.json",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The endpoint is available in development and is written into the production build. Its format and
|
|
52
|
+
media type follow the configured extension: use `.json` for `application/json`, or `.yaml`/`.yml`
|
|
53
|
+
for `application/yaml`. The path must be root-relative, cannot contain traversal, query, or fragment
|
|
54
|
+
components, and is relative to the Dev Portal site. For example, with `basePath: "/docs"`, the example
|
|
55
|
+
above is served at `/docs/openapi.json`.
|
|
56
|
+
|
|
57
|
+
Published documents use the processed schema, including bundled external references and configured
|
|
58
|
+
[schema processors](../guides/processors.mdx). If an API has multiple file versions, the first
|
|
59
|
+
`input` entry is the primary version published at the canonical URL. Publishing is intentionally
|
|
60
|
+
configured per API: Dev Portal will not choose an API automatically on multi-API sites, and a build
|
|
61
|
+
fails if two APIs configure the same publication path. The build also fails instead of overwriting
|
|
62
|
+
an existing `public/` file or generated artifact at that path.
|
|
63
|
+
|
|
64
|
+
To report schema authoring gaps that reduce LLM function-calling compatibility, enable the optional
|
|
65
|
+
agent-quality audit:
|
|
66
|
+
|
|
67
|
+
```ts title=zudoku.config.ts
|
|
68
|
+
publish: {
|
|
69
|
+
path: "/openapi.json",
|
|
70
|
+
agentQuality: true,
|
|
71
|
+
},
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The audit reports build warnings for missing or duplicate `operationId` values, missing operation
|
|
75
|
+
descriptions, untyped parameters, missing or untyped request bodies on write operations, and
|
|
76
|
+
responses without typed schemas. It does not modify the published document or fail the build.
|
|
77
|
+
|
|
33
78
|
## URL Reference
|
|
34
79
|
|
|
35
80
|
:::danger{title="Recommendation"}
|
|
@@ -246,6 +246,57 @@ The generated markdown files:
|
|
|
246
246
|
- Are required for the `copyPage` button functionality
|
|
247
247
|
- Are used by LLM features (see [llms.txt configuration](/dev-portal/zudoku/configuration/llms) for more details)
|
|
248
248
|
|
|
249
|
+
### `contentNegotiation`
|
|
250
|
+
|
|
251
|
+
**Type:** `boolean` **Default:** the value of `publishMarkdown`
|
|
252
|
+
|
|
253
|
+
When `publishMarkdown` is enabled, canonical documentation URLs honor the HTTP `Accept` header.
|
|
254
|
+
Requests that prefer `text/markdown` receive the same content as the page's `.md` URL with a
|
|
255
|
+
`Content-Type: text/markdown; charset=utf-8` response. HTML and Markdown variants include `Accept`
|
|
256
|
+
in the `Vary` header so shared caches do not mix representations, and advertise the `.md` URL with a
|
|
257
|
+
`Link` header. Vercel responses use `Vary: Accept, Accept-Encoding`. Content negotiation is
|
|
258
|
+
therefore enabled by default whenever `publishMarkdown` is enabled. Set it to `false` to opt out.
|
|
259
|
+
|
|
260
|
+
Canonical URL negotiation is built into the SSR-backed development server, SSR deployments, and
|
|
261
|
+
Zudoku's Vercel static output. Other static hosts, and development with `--no-ssr`, must configure
|
|
262
|
+
equivalent `Accept`-aware routing from each canonical URL to its generated `.md` sibling. The
|
|
263
|
+
explicit `.md` files remain portable to every static host.
|
|
264
|
+
|
|
265
|
+
```tsx title="zudoku.config.tsx"
|
|
266
|
+
docs: {
|
|
267
|
+
publishMarkdown: true,
|
|
268
|
+
contentNegotiation: true,
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
On those supported runtimes, Dev Portal also returns a concise Markdown recovery response with status
|
|
273
|
+
`404` when an agent prefers Markdown for a missing canonical path. Vercel provides the same recovery
|
|
274
|
+
response for missing explicit `.md` and `.mdx` paths. It links to the documentation root and, when
|
|
275
|
+
those generated files are present, `llms.txt` and the sitemap. Set `contentNegotiation: false` to
|
|
276
|
+
retain HTML-only canonical URLs while continuing to publish the explicit `.md` files.
|
|
277
|
+
|
|
278
|
+
#### Other hosting providers
|
|
279
|
+
|
|
280
|
+
When `publishMarkdown` is enabled, Dev Portal emits the `.md` files, so other hosting providers can
|
|
281
|
+
implement the same behavior in their CDN, reverse proxy, edge worker, or web server. Configure the
|
|
282
|
+
hosting layer to:
|
|
283
|
+
|
|
284
|
+
1. Apply the rule only to known documentation routes within the configured `basePath`; leave assets
|
|
285
|
+
and non-document routes unchanged.
|
|
286
|
+
2. Inspect `Accept` on `GET` and `HEAD` requests, honoring media-range specificity and `q` values.
|
|
287
|
+
When Markdown is the preferred acceptable representation, internally rewrite the canonical page
|
|
288
|
+
URL to its `.md` sibling rather than redirecting the client.
|
|
289
|
+
3. Return `406 Not Acceptable` when the request explicitly accepts neither HTML nor Markdown.
|
|
290
|
+
4. Serve the rewritten response as `text/markdown; charset=utf-8`, and add `Accept` to any existing
|
|
291
|
+
`Vary` header on both the Markdown and HTML variants.
|
|
292
|
+
5. Preserve the query string and return no body for `HEAD` requests.
|
|
293
|
+
6. Keep real `404` status codes for unknown paths. If returning a Markdown 404 body, include useful
|
|
294
|
+
recovery links instead of serving the HTML application shell with status `200`.
|
|
295
|
+
|
|
296
|
+
The exact rule syntax depends on the provider. The important contract is that caches vary on
|
|
297
|
+
`Accept`, canonical URLs resolve to the correct representation, and missing resources remain
|
|
298
|
+
missing.
|
|
299
|
+
|
|
249
300
|
### `llms`
|
|
250
301
|
|
|
251
302
|
**Type:** `object` **Default:** `undefined`
|
|
@@ -258,7 +309,11 @@ docs: {
|
|
|
258
309
|
llms: {
|
|
259
310
|
llmsTxt: true, // Generate llms.txt summary file
|
|
260
311
|
llmsTxtFull: true, // Generate llms-full.txt with complete content
|
|
261
|
-
includeProtected: false
|
|
312
|
+
includeProtected: false,
|
|
313
|
+
title: "Acme API",
|
|
314
|
+
description: "Build and operate integrations with the Acme API.",
|
|
315
|
+
instructions:
|
|
316
|
+
"Use these docs when creating or debugging an Acme integration. Start with the quickstart, then use the API reference for request and response schemas."
|
|
262
317
|
}
|
|
263
318
|
}
|
|
264
319
|
```
|
|
@@ -13,7 +13,7 @@ During build, you can optionally generate:
|
|
|
13
13
|
- **`llms.txt`** - Summary with links to all pages
|
|
14
14
|
- **`llms-full.txt`** - Complete documentation in one file
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Per-page `.md` export is enabled by default. The two aggregate `llms.txt` files are opt-in.
|
|
17
17
|
|
|
18
18
|
## Configuration
|
|
19
19
|
|
|
@@ -28,13 +28,15 @@ export default {
|
|
|
28
28
|
llmsTxt: true, // Generate llms.txt
|
|
29
29
|
llmsTxtFull: true, // Generate llms-full.txt
|
|
30
30
|
includeProtected: false, // Exclude protected routes
|
|
31
|
+
title: "Acme API",
|
|
32
|
+
description: "Build and operate integrations with the Acme API.",
|
|
33
|
+
instructions:
|
|
34
|
+
"Use these docs when creating or debugging an Acme integration. Start with the quickstart, then consult the API reference for request and response schemas.",
|
|
31
35
|
},
|
|
32
36
|
},
|
|
33
37
|
};
|
|
34
38
|
```
|
|
35
39
|
|
|
36
|
-
All options are disabled by default.
|
|
37
|
-
|
|
38
40
|
:::tip
|
|
39
41
|
|
|
40
42
|
When enabled, markdown files are generated during build and deleted after creating the `llms.txt`
|
|
@@ -50,11 +52,40 @@ files unless `publishMarkdown: true` is set (see
|
|
|
50
52
|
Generates an `llms.txt` file with links to all documentation pages:
|
|
51
53
|
|
|
52
54
|
```markdown title="llms.txt"
|
|
53
|
-
#
|
|
55
|
+
# Acme API
|
|
56
|
+
|
|
57
|
+
> Build and operate integrations with the Acme API.
|
|
58
|
+
|
|
59
|
+
Use these docs when creating or debugging an Acme integration. Start with the quickstart, then
|
|
60
|
+
consult the API reference for request and response schemas.
|
|
61
|
+
|
|
62
|
+
## Documentation
|
|
54
63
|
|
|
55
64
|
- [Quickstart](/dev-portal/zudoku/quickstart.md): Get started with Dev Portal - [Writing](/dev-portal/zudoku/writing.md): A guide to writing documentation
|
|
56
65
|
```
|
|
57
66
|
|
|
67
|
+
### `title`
|
|
68
|
+
|
|
69
|
+
**Type:** `string` **Default:** the configured site title, or `"Documentation"`
|
|
70
|
+
|
|
71
|
+
Sets the project or site name in the required H1 at the top of `llms.txt`. It also sets the H1 in
|
|
72
|
+
`llms-full.txt` when that file is enabled.
|
|
73
|
+
|
|
74
|
+
### `description`
|
|
75
|
+
|
|
76
|
+
**Type:** `string` **Default:** `"Documentation files for Large Language Models"`
|
|
77
|
+
|
|
78
|
+
Sets the short summary in the blockquote immediately after the H1.
|
|
79
|
+
|
|
80
|
+
### `instructions`
|
|
81
|
+
|
|
82
|
+
**Type:** `string` **Default:** `undefined`
|
|
83
|
+
|
|
84
|
+
Adds optional guidance between the blockquote and the documentation link section. Use it to tell
|
|
85
|
+
agents which concrete jobs the documentation is best suited for and how to navigate or call the
|
|
86
|
+
product. The value can contain Markdown paragraphs and lists, but should not contain headings;
|
|
87
|
+
headings in `llms.txt` are reserved for sections containing link lists.
|
|
88
|
+
|
|
58
89
|
### `llmsTxtFull`
|
|
59
90
|
|
|
60
91
|
**Type:** `boolean` **Default:** `false`
|
|
@@ -81,6 +112,10 @@ dist/
|
|
|
81
112
|
└── ...
|
|
82
113
|
```
|
|
83
114
|
|
|
115
|
+
On Vercel builds, this tree is written beneath `.vercel/output/static/` instead of `dist/`. The
|
|
116
|
+
deployed public URLs remain the same. See the [Vercel deployment guide](/dev-portal/zudoku/deploy/vercel) for the
|
|
117
|
+
generated routing and Markdown content-negotiation behavior.
|
|
118
|
+
|
|
84
119
|
**Important:** Individual `.md` files are only kept in the final build if `publishMarkdown: true`.
|
|
85
120
|
If only `llmsTxt` or `llmsTxtFull` is enabled, the `.md` files are generated temporarily during the
|
|
86
121
|
build but deleted after the `llms.txt` files are created.
|
|
@@ -328,10 +328,10 @@ details.
|
|
|
328
328
|
|
|
329
329
|
:::note
|
|
330
330
|
|
|
331
|
-
Avoid naming files `index.md` or `index.mdx` and relying on their default path.
|
|
332
|
-
|
|
333
|
-
routing issues. Instead, give files descriptive names and use the `path` property to
|
|
334
|
-
the desired URL.
|
|
331
|
+
Avoid naming files `index.md` or `index.mdx` and relying on their default path. Zudoku's generated
|
|
332
|
+
Vercel clean-URL routes strip `/index` with a redirect, and other hosting providers may do the same.
|
|
333
|
+
This can cause routing issues. Instead, give files descriptive names and use the `path` property to
|
|
334
|
+
serve them at the desired URL.
|
|
335
335
|
|
|
336
336
|
:::
|
|
337
337
|
|
|
@@ -74,5 +74,5 @@ deployment. You can start building your API immediately—no additional
|
|
|
74
74
|
configuration is required.
|
|
75
75
|
|
|
76
76
|
For more information about getting started with Zuplo, see the
|
|
77
|
-
[API Management
|
|
77
|
+
[API Management overview](/docs/api-management/overview) or
|
|
78
78
|
[sign up](https://portal.zuplo.com/signup?utm_source=docs) for free.
|
|
@@ -238,7 +238,7 @@ The XAA exchange happens entirely on the gateway's outbound side. See
|
|
|
238
238
|
|
|
239
239
|
// Registers the MCP Gateway, which adds the OAuth and upstream-connection
|
|
240
240
|
// routes used to expose and secure MCP servers through your gateway.
|
|
241
|
-
// Docs: https://zuplo.com/docs/mcp-
|
|
241
|
+
// Docs: https://zuplo.com/docs/mcp-gateway/overview
|
|
242
242
|
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
243
243
|
runtime.addPlugin(new McpGatewayPlugin());
|
|
244
244
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "MCP Gateway"
|
|
3
|
-
sidebar_label: "
|
|
2
|
+
title: "MCP Gateway overview"
|
|
3
|
+
sidebar_label: "Overview"
|
|
4
4
|
description:
|
|
5
5
|
Overview of the Zuplo MCP Gateway — a single OAuth-protected MCP endpoint that
|
|
6
6
|
fronts multiple upstream MCP servers with curated tools and per-call
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: MCP Gateway policies overview
|
|
3
|
+
sidebar_label: Overview
|
|
4
|
+
description: Every policy available to an MCP Gateway and what each one does.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
import policies from "../../../policies.ui.json";
|
|
8
|
+
|
|
9
|
+
MCP Gateway policies secure client access, authorize requests, control exposed
|
|
10
|
+
capabilities, and protect upstream MCP servers. See
|
|
11
|
+
[How the MCP Gateway works](../how-it-works.mdx) for the request flow.
|
|
12
|
+
|
|
13
|
+
<PolicyOverview policies={policies} products={["mcp-gateway"]} />
|
|
@@ -513,7 +513,7 @@ independently. For the full API reference, see
|
|
|
513
513
|
tool results
|
|
514
514
|
- [MCP Server Handler](../handlers/mcp-server.mdx) - For simple route-to-tool
|
|
515
515
|
mapping
|
|
516
|
-
- [Model Context Protocol Overview](../mcp-server/
|
|
517
|
-
|
|
516
|
+
- [Model Context Protocol Overview](../mcp-server/overview.mdx) - Understanding
|
|
517
|
+
MCP concepts
|
|
518
518
|
- [MCP Specification](https://modelcontextprotocol.io/specification/) - Official
|
|
519
519
|
protocol documentation
|
|
@@ -228,7 +228,7 @@ workflows, see the [Custom Tools documentation](./custom-tools.mdx).
|
|
|
228
228
|
|
|
229
229
|
## See Also
|
|
230
230
|
|
|
231
|
-
- [MCP Server
|
|
231
|
+
- [MCP Server overview](./overview.mdx) - Main MCP Server documentation
|
|
232
232
|
- [Custom Tools](./custom-tools.mdx) - Build custom MCP tools with complex logic
|
|
233
233
|
- [GraphQL Best Practices](https://graphql.org/learn/best-practices/) -
|
|
234
234
|
GraphQL.org recommendations
|
|
@@ -14,10 +14,9 @@ metadata and set response metadata required for ChatGPT widget rendering.
|
|
|
14
14
|
This page covers the **MCP Server handler**, which turns your own OpenAPI routes
|
|
15
15
|
into an MCP server. If you're proxying to upstream MCP servers (Linear, Stripe,
|
|
16
16
|
Notion, internal services, etc.) through Zuplo's
|
|
17
|
-
[MCP Gateway](../mcp-gateway/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
emits the UI.
|
|
17
|
+
[MCP Gateway](../mcp-gateway/overview.mdx), Apps SDK UI surfaces pass through
|
|
18
|
+
the gateway as ordinary MCP resources — no extra configuration is required on
|
|
19
|
+
the gateway side. Build the Apps SDK app on whichever MCP server emits the UI.
|
|
21
20
|
|
|
22
21
|
:::
|
|
23
22
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
3
|
-
sidebar_label:
|
|
2
|
+
title: MCP Server overview
|
|
3
|
+
sidebar_label: Overview
|
|
4
|
+
description:
|
|
5
|
+
Expose OpenAPI operations to AI clients as MCP tools, prompts, and resources
|
|
6
|
+
with Zuplo's MCP Server handler.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is
|
|
@@ -17,7 +20,7 @@ The **MCP Server handler** described on this page turns your own OpenAPI routes
|
|
|
17
20
|
into an MCP server. If you want to put a single OAuth-protected endpoint in
|
|
18
21
|
front of one or more existing upstream MCP servers (Linear, Stripe, Notion,
|
|
19
22
|
internal services, etc.), see the
|
|
20
|
-
[MCP Gateway
|
|
23
|
+
[MCP Gateway overview](../mcp-gateway/overview.mdx) instead.
|
|
21
24
|
|
|
22
25
|
:::
|
|
23
26
|
|
|
@@ -36,7 +36,7 @@ export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
|
36
36
|
|
|
37
37
|
`ZuploMcpSdk` is available in custom tool handlers for both the
|
|
38
38
|
[MCP Server handler](../handlers/mcp-server.mdx) and the
|
|
39
|
-
[MCP Gateway](../mcp-gateway/
|
|
39
|
+
[MCP Gateway](../mcp-gateway/overview.mdx). It is exported from
|
|
40
40
|
`@zuplo/runtime`.
|
|
41
41
|
|
|
42
42
|
## Methods
|
|
@@ -234,7 +234,7 @@ The subset of a `tools/call` result that a module author may override via
|
|
|
234
234
|
custom MCP tool handlers with TypeScript
|
|
235
235
|
- [MCP Server handler](../handlers/mcp-server.mdx) — handler configuration
|
|
236
236
|
reference including `includeOutputSchema` and `includeStructuredContent`
|
|
237
|
-
- [MCP Gateway
|
|
238
|
-
|
|
237
|
+
- [MCP Gateway overview](../mcp-gateway/overview.mdx) — overview of the MCP
|
|
238
|
+
Gateway product
|
|
239
239
|
- [MCP specification](https://modelcontextprotocol.io/specification/) — the
|
|
240
240
|
canonical protocol reference
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zuplo",
|
|
3
|
-
"version": "7.6.
|
|
3
|
+
"version": "7.6.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The official Zuplo CLI for local development and platform management",
|
|
6
6
|
"homepage": "https://zuplo.com/docs/cli/overview",
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"zuplo": "zuplo.js"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@zuplo/cli": "7.6.
|
|
36
|
-
"@zuplo/core": "7.6.
|
|
37
|
-
"@zuplo/runtime": "7.6.
|
|
38
|
-
"@zuplo/test": "7.6.
|
|
35
|
+
"@zuplo/cli": "7.6.2",
|
|
36
|
+
"@zuplo/core": "7.6.2",
|
|
37
|
+
"@zuplo/runtime": "7.6.2",
|
|
38
|
+
"@zuplo/test": "7.6.2"
|
|
39
39
|
}
|
|
40
40
|
}
|