| WorkOS AuthKit | Full OAuth authentication with WorkOS AuthKit and personalized coffee shop search. | [View code](https://github.com/alpic-ai/skybridge/tree/main/examples/auth-workos) |
|
| Stytch | Full OAuth authentication with Stytch and personalized coffee shop search. | [View code](https://github.com/alpic-ai/skybridge/tree/main/examples/auth-stytch) |
|
| Auth0 | Full OAuth authentication with Auth0 and personalized coffee shop search. | [View code](https://github.com/alpic-ai/skybridge/tree/main/examples/auth-auth0) |
+|
| Authplane | Full OAuth authentication with Authplane and personalized coffee shop search. | [View code](https://github.com/alpic-ai/skybridge/tree/main/examples/auth-authplane) |
### UI and component libraries
diff --git a/docs/api-reference/authplane-provider.mdx b/docs/api-reference/authplane-provider.mdx
new file mode 100644
index 000000000..5cca13909
--- /dev/null
+++ b/docs/api-reference/authplane-provider.mdx
@@ -0,0 +1,85 @@
+---
+title: authplaneProvider
+sidebarTitle: "Authplane"
+description: "Wire OAuth from an Authplane authorization server"
+---
+
+`authplaneProvider` wires authentication through [Authplane](https://authplane.ai), so your tools receive a signed-in user.
+
+## Example
+
+```ts server.ts highlight={1,7-10}
+import { authplaneProvider, McpServer } from "skybridge/server";
+
+const server = new McpServer(
+ { name: "personal-shopper", version: "0.0.1" },
+ { capabilities: {} },
+ {
+ oauth: await authplaneProvider({
+ issuer: process.env.AUTHPLANE_ISSUER,
+ resource: process.env.SERVER_URL,
+ }),
+ },
+);
+```
+
+## Signature
+
+```ts
+authplaneProvider(opts: AuthplaneProviderOptions): Promise{hint}
; +} +``` + +## Returns + +### `name` + +```tsx +name: Host | (string & {}) | undefined; +``` + +The host's reported name. It resolves to a [`Host`](#host) slug for recognized hosts, a raw string for hosts not yet mapped, and `undefined` until the handshake completes — the view renders first and re-renders once the host responds. The `(string & {})` keeps the known slugs in autocomplete while still accepting any string. + +### `version` + +```tsx +version: string | undefined; +``` + +The host's version string, or `undefined` until the handshake completes. + +## Host + +The recognized hosts, as normalized slugs. An unrecognized host surfaces its raw reported name instead. + +```tsx +type Host = + | "chatgpt" + | "claude" + | "cursor" + | "goose" + | "mistral-vibe" + | "alpic"; +``` + +| Slug | Reported `hostInfo.name` | +| --- | --- | +| `chatgpt` | `chatgpt` | +| `claude` | `Claude` | +| `cursor` | `Cursor` | +| `goose` | `MCP-UI Host` | +| `mistral-vibe` | `Le Chat` | +| `alpic` | `alpic-playground` | + +Searching coffee shops...
+No results found
+{shop.specialty}
+