Files
supabase/apps/ui-library/config/library.ts
Saxon FletcherandClaude Opus 5.5 a9c594a820 chore(library): rename mcp-server block to mcp (#50999)
Renames the `mcp-server` Library block to `mcp`. Installing it now
creates `supabase/functions/mcp`, so the server is served at
`/functions/v1/mcp`.

- Block, Edge Function folder, and docs page renamed
(`/docs/headless/mcp`)
- Headless App block now installs its tools into
`supabase/functions/mcp` and configures `[functions.mcp]`
- Links in the BYO MCP and MCP authentication guides updated
- Permanent redirects keep `/r/mcp-server.json` and
`/docs/headless/mcp-server` working
- `public/r` rebuilt


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Updates**
* The MCP Server block is now named `mcp` across its documentation,
installation links, and setup instructions.
  * Updated function endpoints and deployment commands to use `/mcp`.
* Added permanent redirects from the previous `mcp-server` documentation
and install URLs to their new locations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:46:35 +10:00

212 lines
6.0 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { componentPages, mcpBlocks, oauthBlocks, platformBlocks } from './docs'
export const libraryCategories = [
{
name: 'Starter apps',
slug: 'starter-apps',
description: 'Complete starting points for your next product.',
},
{
name: 'Authentication',
slug: 'authentication',
description: 'Sign-in, sessions, and account management.',
},
{ name: 'Database', slug: 'database', description: 'Connect your interface to Postgres data.' },
{ name: 'Storage', slug: 'storage', description: 'Upload files with Supabase Storage.' },
{ name: 'Realtime', slug: 'realtime', description: 'Build experiences that stay in sync.' },
{
name: 'Messaging',
slug: 'messaging',
description: 'Bring conversations into your application.',
},
{ name: 'AI & APIs', slug: 'ai-apis', description: 'Connect agents to your application.' },
{
name: 'Application foundations',
slug: 'application-foundations',
description: 'Connect and extend your Supabase project.',
},
] as const
export type LibraryCategory = (typeof libraryCategories)[number]['name']
export type CatalogPreviewKind =
| 'auth'
| 'social'
| 'consent'
| 'avatar'
| 'table'
| 'storage'
| 'cursors'
| 'editor'
| 'flow'
| 'avatars'
| 'chat'
| 'mcp'
| 'agents'
| 'dashboard'
| 'client'
export type LibraryBlock = {
slug: string
title: string
description: string
category: LibraryCategory
preview: CatalogPreviewKind
tags: string[]
href: string
supportedFrameworks?: string[]
frameworkLabel?: string
external?: boolean
}
const blockMetadata: Record<string, Pick<LibraryBlock, 'description' | 'category' | 'preview'>> = {
'password-based-auth': {
description: 'Sign in and sign up with email and password.',
category: 'Authentication',
preview: 'auth',
},
'social-auth': {
description: 'OAuth sign-in flows for popular providers.',
category: 'Authentication',
preview: 'social',
},
'oauth-consent': {
description: 'Let users review and approve application access.',
category: 'Authentication',
preview: 'consent',
},
'current-user-avatar': {
description: 'Display the signed-in user’s avatar and profile.',
category: 'Authentication',
preview: 'avatar',
},
'infinite-query': {
description: 'Fetch and paginate Supabase data as users scroll.',
category: 'Database',
preview: 'table',
},
dropzone: {
description: 'Drag-and-drop file uploads with progress tracking.',
category: 'Storage',
preview: 'storage',
},
'realtime-cursor': {
description: 'Share live cursor positions across your application.',
category: 'Realtime',
preview: 'cursors',
},
'realtime-monaco': {
description: 'Edit code together with a collaborative Monaco editor.',
category: 'Realtime',
preview: 'editor',
},
'realtime-flow': {
description: 'Build collaborative diagrams with React Flow.',
category: 'Realtime',
preview: 'flow',
},
'realtime-avatar-stack': {
description: 'Show who is online with a live avatar stack.',
category: 'Realtime',
preview: 'avatars',
},
'realtime-chat': {
description: 'Send and receive messages in realtime.',
category: 'Messaging',
preview: 'chat',
},
mcp: {
description: 'Add a user-scoped MCP server to your product.',
category: 'AI & APIs',
preview: 'mcp',
},
'headless-app': {
description: 'Combine auth, consent, and MCP tools into an agent-driven app.',
category: 'AI & APIs',
preview: 'agents',
},
client: {
description: 'Set up a Supabase client for your framework.',
category: 'Application foundations',
preview: 'client',
},
'platform-kit': {
description: 'Embed Supabase project management in your platform.',
category: 'Application foundations',
preview: 'dashboard',
},
}
// Starter guides share the same documentation routes and layout as individual blocks.
const starterApps: LibraryBlock[] = [
{
title: 'Next.js starter',
slug: 'nextjs-starter',
description: 'A Next.js app with cookie-based authentication, TypeScript, and Tailwind CSS.',
category: 'Starter apps',
preview: 'auth',
tags: ['Next.js', 'Authentication', 'TypeScript'],
href: '/docs/starters/nextjs-starter',
frameworkLabel: 'Next.js',
},
{
title: 'SaaS starter',
slug: 'saas-starter',
description: 'Subscription payments with Stripe, Supabase, and Next.js.',
category: 'Starter apps',
preview: 'dashboard',
tags: ['Next.js', 'Stripe', 'Subscriptions'],
href: '/docs/starters/saas-starter',
frameworkLabel: 'Next.js',
},
{
title: 'AI chat app',
slug: 'ai-chat-app',
description: 'A conversational app with Next.js, the Vercel AI SDK, and Supabase.',
category: 'Starter apps',
preview: 'chat',
tags: ['Next.js', 'AI', 'Messaging'],
href: '/docs/starters/ai-chat-app',
frameworkLabel: 'Next.js',
},
{
title: 'Flutter starter',
slug: 'flutter-starter',
description: 'A user management app with authentication, profiles, and file storage.',
category: 'Starter apps',
preview: 'avatar',
tags: ['Flutter', 'Authentication', 'Storage'],
href: '/docs/starters/flutter-starter',
frameworkLabel: 'Flutter',
},
]
export const libraryBlocks: LibraryBlock[] = [
...starterApps,
...[
...componentPages.items,
...oauthBlocks.items,
...mcpBlocks.items,
...platformBlocks.items,
].map((item) => {
const slug = item.href!.split('/').pop()!
return {
slug,
title: item.title,
href: item.href!,
supportedFrameworks: item.supportedFrameworks,
tags: item.supportedFrameworks ?? [],
...blockMetadata[slug],
}
}),
]
export function getLibraryBlockHref(block: LibraryBlock, framework?: string) {
return framework && block.supportedFrameworks?.includes(framework)
? `/docs/${framework}/${block.slug}`
: block.href
}
export function getLibraryCategoryHref(category: LibraryCategory) {
return `/?category=${encodeURIComponent(category)}`
}