v1.3.0

alpic-ai/skybridgev1.3.0Jul 22, 2026by fredericbarthelet

AI Summary

Introduces 'Drop In' with mixed authentication support, a deploy button in DevTools, Skills over MCP, and console logging in the terminal.

Key Highlights

  • Mixed auth allows enabling both public and signed-in tools on the same app
  • Deploy button in DevTools for one-click shipping to Alpic
  • Skills over MCP allows serving Skills as MCP resources
  • View logs stream to the terminal via Vite's `forwardConsole`

New Features

  • Mixed authentication (per-tool auth)
  • Deploy button in DevTools
  • Skills over MCP (experimental)
  • Forward console logs to terminal

Full Release Notes

You're clipped in, the season pass is in your pocket, and the whole mountain is open. Only one thing left to do: point it downhill and drop in 🏂

`v1.2.0` was about where your apps are allowed to ride. `v1.3.0` is about *committing to the run*. You'll be getting an app from your editor to production in one click, teaching the model new tricks, and finally seeing what your view is doing when it's running somewhere you can't open a console.

- **Mixed auth, the easy way**: one `auth` field per tool to enable both public and signed-in tools on the same app
- **Deploy button**: ship straight to Alpic from the DevTools, one click, live URL in seconds
- **Skills over MCP**: serve Skills from your server as first-class MCP resources
- **View logs in terminal**: stream a view's console straight to your dev-server terminal, particularly useful when debugging issues on mobile 📱

Point your tips down the fall line. Here's what's new 🏔️

---

## Mixed auth, the easy way

`v1.1.0` gave you mixed auth by hand: `mcpAuthMetadataRouter`, `optionalBearerAuth`, and a guard written into every protected handler. `v1.2.0` gave you one-line branded providers, but they were all-or-nothing: point a server at an IdP and *every* tool sat behind sign-in.

Now the two meet. On any server with an `oauth` provider, each tool declares its own requirements with a single **`auth`** field, and the framework enforces it:

```ts
import { McpServer, descopeProvider } from "skybridge/server";
import * as z from "zod";

const server = new McpServer(
  { name: "my-app", version: "0.0.1" },
  { capabilities: {} },
  { oauth: await descopeProvider({ url: env.DESCOPE_MCP_SERVER_URL }) },
);

// Callable signed out — uses the token when one is present.
server.registerTool(
  {
    name: "search_public_docs",
    description: "Search public documents. No sign-in required.",
    inputSchema: { q: z.string() },
    auth: { allowsAnonymous: true },
  },
  async ({ q }) => ({ content: await search(q) }),
);

// Requires sign-in with the listed scopes.
server.registerTool(
  {
    name: "search_private_docs",
    description: "Search the user's private workspace.",
    inputSchema: { q: z.string() },
    auth: { scopes: ["search.read"] },
  },
  async ({ q }, extra) => ({ content: await search(q, { user: extra.authInfo }) }),
);
```

See the new `auth-descope-mixed` example for a full walkthrough.

## Deploy button

Until now, going from `skybridge dev` to a live URL meant leaving the DevTools and deploying from the CLI. We've made deploy accessible from the DevTools instead!

Hit it, sign in, and you're a few seconds away from a live deployed URL.

## Skills over MCP

Skybridge can now serve [Skills](https://agentskills.io/) straight from your server as `skill://` MCP resources. Drop a `SKILL.md` (plus any supporting files) under `src/skills/`, flip one option, and the server advertises the skills capability and serves each file over MCP:

```ts
const server = new McpServer(
  { name: "my-app", version: "0.0.1" },
  { capabilities: {} },
  { skills: true },
);
```

> **Experimental** while [SEP-2640](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2640) is under review. Host support for Skills over MCP isn't widely available, as this feature hasn't officially landed in the MCP spec yet. We recommend experimenting with the feature on the Alpic playground, which supports Skills over MCP out of the box.

## View logs in terminal

When your app runs inside the ChatGPT or Claude desktop or mobile app, there's no console to pop open, so your view's logs have been out of reach. Not anymore.

Skybridge now wires Vite's [`forwardConsole`](https://vite.dev/config/server-options#server-forwardconsole) into the scaffold, so a view's console prints in the terminal running your dev server. Run through the [tunnel](https://docs.skybridge.tech/test/tunnel), and the logs from an app running on your phone show up on your laptop.

No more guessing why a view breaks!

---

## Changes
* feat(docs): add cursor and goose by @paulleseute in https://github.com/alpic-ai/skybridge/pull/911
* feat: add conformance app by @paulleseute in https://github.com/alpic-ai/skybridge/pull/889
* feat: enable workflow_dispatch on deploy-infra by @paulleseute in https://github.com/alpic-ai/skybridge/pull/914
* fix(build): skip vite build for view-less MCP servers by @syf2211 in https://github.com/alpic-ai/skybridge/pull/913
* feat(sky-440): Deploy button in devtools by @harijoe in https://github.com/alpic-ai/skybridge/pull/907
* Fix broken lockfile during merge by @harijoe in https://github.com/alpic-ai/skybridge/pull/915
* feat(core): add a --plain flag to dev for piping logs to a formatter by @pldesch-chift in https://github.com/alpic-ai/skybridge/pull/830
* chore(deps): bump all non-major dependencies + esbuild ^0.28 by @harijoe in https://github.com/alpic-ai/skybridge/pull/917
* chore(deps): enable renovate automerge, reduce release-age window to 3 days by @harijoe in https://github.com/alpic-ai/skybridge/pull/918
* Listed Descope as an auth provider to README by @mrunankpawar in https://github.com/alpic-ai/skybridge/pull/919
* docs: add Supabase Triplog example by @rodincave in https://github.com/alpic-ai/skybridge/pull/882
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/635
* chore: rebase renovate PRs when behind main so automerge can arm by @harijoe in https://github.com/alpic-ai/skybridge/pull/922
* chore(deps): update actions/upload-pages-artifact action to v5 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/926
* chore(deps): update actions/configure-pages action to v6 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/925
* chore(deps): update actions/cache action to v6 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/920
* chore(deps): update actions/checkout action to v7 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/921
* chore: stop renovate bumping engines.node in published packages by @harijoe in https://github.com/alpic-ai/skybridge/pull/927
* chore(deps): update node.js to v24 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/753
* chore(deps): update dependency typescript to v6 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/928
* Added the token warning threshold of 4000 tokens by @Aayan-Ali-Hashim in https://github.com/alpic-ai/skybridge/pull/930
* feat(examples): add chatgpt-files by @paulleseute in https://github.com/alpic-ai/skybridge/pull/916
* fix(docs): dark mode example by @paulleseute in https://github.com/alpic-ai/skybridge/pull/933
* fix(devtools): stop widget e2e flake and surface flakes in CI by @harijoe in https://github.com/alpic-ai/skybridge/pull/931
* chore(deps): update all non-major dependencies to ^4.1.10 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/940
* fix(deps): update all non-major dependencies to ^1.148.0 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/944
* ci: run on v0 and v1 branches by @harijoe in https://github.com/alpic-ai/skybridge/pull/945
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/946
* fix(devtools): deploy button QA fixes by @harijoe in https://github.com/alpic-ai/skybridge/pull/951
* feat: add descope.skybridge.tech CNAME for auth-descope example by @thleonard in https://github.com/alpic-ai/skybridge/pull/952
* chore(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/948
* feat: add automation to conformance by @paulleseute in https://github.com/alpic-ai/skybridge/pull/932
* fix: conformance useRequestModal by @paulleseute in https://github.com/alpic-ai/skybridge/pull/959
* chore(deps): update actions/upload-artifact action to v7 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/955
* chore(deps): update actions/checkout action to v7 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/954
* chore(deps): replace dependency framer-motion with motion ^12.42.2 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/958
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/956
* chore(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/961
* feat(core): serve Agent Skills over MCP (SEP-2640) by @harijoe in https://github.com/alpic-ai/skybridge/pull/939
* fix(deps): update all non-major dependencies to ^1.152.0 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/962
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/966
* chore(deps): update dependency postcss to ^8.5.17 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/969
* fix: disable conformance by @paulleseute in https://github.com/alpic-ai/skybridge/pull/970
* feat(landing): add changelog page generated from github releases by @harijoe in https://github.com/alpic-ai/skybridge/pull/814
* docs(auth-workos): Fix README drift from example code by @gjtorikian in https://github.com/alpic-ai/skybridge/pull/968
* chore(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/972
* chore(deps): update dependency tsx to ^4.23.1 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/973
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/975
* chore(deps): update dependency mintlify to ^4.2.694 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/977
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/980
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/981
* feat(docs): add webmcp devtools setup by @paulleseute in https://github.com/alpic-ai/skybridge/pull/984
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/982
* chore(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/989
* feat: enable forwardConsole by @paulleseute in https://github.com/alpic-ai/skybridge/pull/990
* feat: mixed-auth on branded/custom providers by @harijoe in https://github.com/alpic-ai/skybridge/pull/938

## Contributors
@Aayan-Ali-Hashim, @gjtorikian, @harijoe, @mrunankpawar, @paulleseute, @pldesch-chift, @renovate[bot], @rodincave, @syf2211, @thleonard