smithery-ai-cli
Find, connect, and use MCP tools and skills via the Smithery CLI. Use when the user searches for new tools or skills, wants to discover integrations, connect…
Build and edit the Smithery homepage app -- a TanStack Start + shadcn/ui web app at ~/.smithery/homepage that connects to MCP servers through the Smithery Connect API. Use this skill whenever the user wants to create, modify, or add features to the Smithery homepage, build pages
$ npx -y skills add smithery-ai/cli --skill smithery-homepage --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/smithery-homepageContext preview
The summary Claude sees to decide when to auto-load this skill.
Build and edit the Smithery homepage app -- a TanStack Start + shadcn/ui web app at ~/.smithery/homepage that connects to MCP servers through the Smithery Connect API. Use this skill whenever the user wants to create, modify, or add features to the Smithery homepage, build pages
name: smithery-homepage description: "Build and edit the Smithery homepage app -- a TanStack Start + shadcn/ui web app at ~/.smithery/homepage that connects to MCP servers through the Smithery Connect API. Use this skill whenever the user wants to create, modify, or add features to the Smithery homepage, build pages that display data from MCP tools (Linear issues, Gmail, Notion, etc.), or asks about editing anything in ~/.smithery/homepage. Also triggers for requests like 'add a page to the homepage', 'show my Linear issues on the homepage', 'update the homepage UI', or any task involving the ~/.smithery/homepage project."
The Smithery homepage is a TanStack Start app at `~/.smithery/homepage` that serves as a personal dashboard connecting to MCP servers via the Smithery Connect API.
If `~/.smithery/homepage` does not exist, scaffold it from scratch:
1. Create the directory if needed and scaffold the app in place:
mkdir -p ~/.smithery cd ~/.smithery && npx shadcn@latest init --preset b1FSjVe3E --template start --name homepage
2. Install additional dependencies:
cd ~/.smithery/homepage npm install @smithery/api @modelcontextprotocol/sdk @tanstack/react-query @tanstack/react-query-devtools
3. Initialize git: `git init && git add -A && git commit -m "feat: initial commit"` 4. Create `.env` with the user's Smithery API key and namespace (read from `~/Library/Application Support/smithery/settings.json` on macOS — fields `apiKey` and `namespace`)
If `~/.smithery/homepage` already exists, work within the existing project — read the current code before making changes.
**Every API request in the app MUST use React Query (`@tanstack/react-query`).** Do not use raw `fetch`, `useEffect` + `useState`, or route loaders alone for data fetching. React Query provides caching, background refetching, loading/error states, and stale-while-revalidate — all of which are essential for a good dashboard UX.
The `QueryClient` must be configured in the router and provided at the root layout. The scaffold generates `getRouter()` — update it to add the QueryClient:
// src/router.tsx
import { QueryClient } from "@tanstack/react-query"
import { createRouter as createTanStackRouter } from "@tanstack/react-router"
import { routeTree } from "./routeTree.gen"
export function getRouter() {
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 1000 * 60, // 1 minute
refetchOnWindowFocus: true,
},
},
})
return createTanStackRouter({
routeTree,
context: { queryClient },
scrollRestoration: true,
defaultPreload: "intent",
defaultPreloadStaleTime: 0,
})
}
declare module "@tanstack/react-router" {
interface Register {
router: ReturnType<typeof getRouter>
}
}The scaffold generates `__root.tsx` with `createRootRoute` and a `shellComponent` for the HTML document wrapper. Replace `createRootRoute` with `createRootRouteWithContext` to pass QueryClient, keep the `shellComponent`, and add a `component` with QueryClientProvider:
// src/routes/__root.tsx
import {
HeadContent,
Outlet,
Scripts,
createRootRouteWithContext,
} from "@tanstack/react-router"
import { QueryClientProvider } from "@tanstack/react-query"
import { ReactQueryDevtools } from "@tanstack/react-query-devtools"
import type { QueryClient } from "@tanstack/react-query"
import appCss from "../styles.css?url"
export const Route = createRootRouteWithContext<{
queryClient: QueryClient
}>()({
head: () => ({
meta: [
{ charSet: "utf-8" },
{ name: "viewport", content: "width=device-width, initial-scale=1" },
{ title: "Dashboard" },
],
links: [{ rel: "stylesheet", href: appCss }],
}),
component: RootComponent,
shellComponent: RootDocument,
})
function RootComponent() {
const { queryClient } = Route.useRouteContext()
return (
<QueryClientProvider client={queryClient}>
<Outlet />
<ReactQueryDevtools />
</QueryClientProvider>
)
}
function RootDocument({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<head>
<HeadContent />
</head>
<body>
{children}
<Scripts />
</body>
</html>
)
}~/.smithery/homepage/ ├── src/ │ ├── routes/ # File-based routes (TanStack Router) │ │ ├── __root.tsx # Root layout with QueryClientProvider │ │ └── index.tsx # Home page │ ├── components/ui/ # shadcn components │ ├── lib/ # Server-side helpers (MCP tool callers) │ │ └── schemas/ # Cached Zod schemas copied from ~/.smithery/ │ ├── router.tsx # Router setup with QueryClient │ ├── routeTree.gen.ts # Auto-generated route tree │ └── styles.css # Tailwind + shadcn theme ├── .env # SMITHERY_API_KEY ├── components.json # shadcn config ├── package.json ├── tsconfig.json └── vite.config.ts # (if present)
The app uses `@smithery/api/mcp` to create MCP connections through Smithery Connect. This runs server-side via TanStack Start
Smithery CLI connects your agents to thousands of skills and MCP servers directly from the command line. To get started, simply run npx skills add smithery/cli.
Repo: smithery-ai/cli
Find, connect, and use MCP tools and skills via the Smithery CLI. Use when the user searches for new tools or skills, wants to discover integrations, connect…