browse_apps
Find public applications to fork and customize. Filter results by specific tags to locate relevant projects quickly.
Instructions
Browse public apps available for forking. Optionally filter by tags.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags to filter by (e.g. ['auth', 'rls']) |
Implementation Reference
- src/tools/browse-apps.ts:12-61 (handler)The handler function that executes the browse_apps tool logic. It fetches public apps from the API endpoint /v1/apps (optionally filtered by tags), formats the results as a markdown table showing app name, description, tags, and fork status, and returns formatted content for display.
export async function handleBrowseApps(args: { tags?: string[]; }): Promise<{ content: Array<{ type: "text"; text: string }>; isError?: boolean }> { let path = "/v1/apps"; if (args.tags && args.tags.length > 0) { const params = args.tags.map((t) => `tag=${encodeURIComponent(t)}`).join("&"); path = `/v1/apps?${params}`; } const res = await apiRequest(path, { method: "GET" }); if (!res.ok) return formatApiError(res, "browsing apps"); const body = res.body as { apps: Array<{ id: string; project_name: string; description: string | null; tags: string[]; fork_allowed: boolean; fork_pricing?: Record<string, string>; created_at: string; }>; total: number; }; if (body.apps.length === 0) { return { content: [{ type: "text", text: `## Public Apps\n\n_No public apps found._` }], }; } const lines = [ `## Public Apps (${body.total})`, ``, `| Name | Description | Tags | Forkable |`, `|------|-------------|------|----------|`, ]; for (const app of body.apps) { const tags = app.tags.length > 0 ? app.tags.join(", ") : "-"; const desc = app.description || "-"; lines.push(`| ${app.project_name} | ${desc} | ${tags} | ${app.fork_allowed ? "Yes" : "No"} |`); } lines.push(``); lines.push(`Use \`fork_app\` to fork any forkable app into your own project.`); return { content: [{ type: "text", text: lines.join("\n") }] }; } - src/tools/browse-apps.ts:5-10 (schema)Input schema definition for the browse_apps tool. Defines a single optional parameter 'tags' - an array of strings to filter apps by tags.
export const browseAppsSchema = { tags: z .array(z.string()) .optional() .describe("Optional tags to filter by (e.g. ['auth', 'rls'])"), }; - src/index.ts:236-241 (registration)Registration of the browse_apps tool with the MCP server. Associates the tool name 'browse_apps' with its schema and handler function.
server.tool( "browse_apps", "Browse public apps available for forking. Optionally filter by tags.", browseAppsSchema, async (args) => handleBrowseApps(args), );