SkillsBoard
Skills Board is a free, open-source (MIT) shared library for the AI skills a team recommends, with every skill kept connected to its original source. Agents connect through an authenticated remote MCP server (browser sign-in, no API key to copy) to search team skills and collections, retrieve install commands, and save new skills.
README
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/header/surface.svg?title=Skills%20Board&subtitle=Your%20team%27s%20skills.%20All%20in%20one%20place.&size=wide&align=left&font=space-grotesk&border=true&radius=18&watermark=false&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI%2BPHBhdGggZmlsbD0iIzZiZDU4ZiIgZD0iTTMgM2gyNnY3SDExdjRoMTRsNCA0djExSDN2LTdoMTh2LTRIN2wtNC00VjNaIi8%2BPC9zdmc%2B&logoColor=6bd58f&bg=111a14&accent=6bd58f&titleColor=f7f8f4&subtitleColor=aab5aa&mode=dark" /> <img alt="Skills Board — Your team's skills. All in one place." src="https://shieldcn.dev/header/surface.svg?title=Skills%20Board&subtitle=Your%20team%27s%20skills.%20All%20in%20one%20place.&size=wide&align=left&font=space-grotesk&border=true&radius=18&watermark=false&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI%2BPHBhdGggZmlsbD0iIzAwODQzZCIgZD0iTTMgM2gyNnY3SDExdjRoMTRsNCA0djExSDN2LTdoMTh2LTRIN2wtNC00VjNaIi8%2BPC9zdmc%2B&logoColor=00843d&bg=f7f8f4&accent=00843d&titleColor=17231b&subtitleColor=5e6b61&mode=light" /> </picture> </p>
<p align="center"> Keep your team’s recommended AI skills in one place, so everyone knows where to find and use them. </p>
<p align="center"> <a href="https://github.com/TommyBez/skillsboard/stargazers"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/stars/TommyBez/skillsboard.svg?variant=outline&size=xs&theme=zinc&font=geist&mode=dark" /> <img alt="GitHub stars" src="https://shieldcn.dev/github/stars/TommyBez/skillsboard.svg?variant=outline&size=xs&theme=zinc&font=geist&mode=light" /> </picture> </a> <a href="./LICENSE"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/badge/license-MIT-27272a.svg?variant=outline&size=xs&theme=zinc&font=geist&mode=dark&logo=false" /> <img alt="MIT license" src="https://shieldcn.dev/badge/license-MIT-27272a.svg?variant=outline&size=xs&theme=zinc&font=geist&mode=light&logo=false" /> </picture> </a> <a href="https://github.com/TommyBez/skillsboard/actions/workflows/ci.yml"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/ci/TommyBez/skillsboard.svg?workflow=ci.yml&branch=main&variant=outline&size=xs&theme=zinc&font=geist&mode=dark" /> <img alt="CI status" src="https://shieldcn.dev/github/ci/TommyBez/skillsboard.svg?workflow=ci.yml&branch=main&variant=outline&size=xs&theme=zinc&font=geist&mode=light" /> </picture> </a> </p>
<p align="center"> <a href="https://www.skillsboard.sh"><strong>Try the hosted app</strong></a> · <a href="#run-locally">Run it locally</a> · <a href="./CONTRIBUTING.md">Contribute</a> </p>
Why Skills Board
Useful skill recommendations tend to disappear into chats, bookmarks, and personal agent setups. Skills Board gives a team one searchable place to collect the skills it recommends and lets every teammate choose how to use them.
- One team library. Save useful skills once, organize them with team-specific tags, and make them easy to find again.
- Different agents welcome. Share the same recommendation across Claude, Codex, Cursor, and other agent setups.
- A choice of handoff. Open the original source, copy a compatible install command, or download the latest skill files as a ZIP.
- Organization-scoped access. Create a team, invite members, and keep each library available to its members.
- Optional MCP access. Connect compatible agents to authenticated, scope-controlled tools for finding and organizing team skills and collections.
[!IMPORTANT] A saved skill is a team recommendation, not a security review, compatibility certification, or pinned release. Skills Board reads the latest available source; inspect that source before using it in an agent.
How it works
- Create a team library and add a skill from its GitHub repository.
- Skills Board keeps the original source visible and records the recommendation for the team.
- Teammates search by task, description, repository, or tag.
- Each teammate opens the source, copies a compatible command, or downloads the latest files as a ZIP.
The public catalog can help with discovery when the deployment has Vercel OIDC available. The team library and direct GitHub flow remain the core product.
Run locally
Prerequisites
- Node.js 20.9 or newer
- pnpm 10
- PostgreSQL 15 or newer
1. Install the app
git clone https://github.com/TommyBez/skillsboard.git
cd skillsboard
corepack enable
pnpm install
cp .env.example .env.local
Generate a Better Auth secret with openssl rand -base64 32, then add it and your PostgreSQL connection string to .env.local.
2. Prepare the database
Apply the committed Drizzle migrations to a new database. This creates both the Better Auth tables and the application-specific tables from the versioned SQL in drizzle/.
pnpm db:migrate
3. Start developing
pnpm dev
Open http://localhost:3000. Restart the server after changing DATABASE_URL, because the PostgreSQL pool is created when the module loads.
Environment variables
| Variable | Required | Purpose |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string used by the application; Neon may use the pooled URL here. |
DATABASE_URL_UNPOOLED |
For migrations on Neon | Direct PostgreSQL connection used by Drizzle migrations. It can match DATABASE_URL for local, non-pooled Postgres. |
BETTER_AUTH_SECRET |
Yes | Secret used to sign and encrypt authentication data. |
BETTER_AUTH_URL |
Recommended | Public application origin; use http://localhost:3000 locally. |
RESEND_API_KEY |
Yes outside development | Sends sign-in OTP and team invitation emails through Resend. |
EMAIL_FROM |
Yes outside development | Verified Resend sender for OTP and invitation emails (e.g. Skills Board <login@your-verified-domain.com>). |
RESEND_WEBHOOK_SECRET |
Yes for hosted email delivery | Verifies Resend bounce, complaint, suppression, and unsubscribe webhooks. |
EMAIL_PRIVACY_SECRET |
Yes in Vercel Production | At least 32 random bytes encoded as base64 or hex; the dedicated root for email hashes and encrypted unsubscribe links. Local/self-hosted environments can fall back to a domain-separated key derived from BETTER_AUTH_SECRET. |
EMAIL_PRIVACY_SECRET_PREVIOUS |
Only during key rotation | JSON array of retained base64/hex roots used for dual-hash suppression lookup and unsubscribe-token decryption. A prior root cannot be removed while retained records still depend on it. |
GITHUB_TOKEN |
No | Raises GitHub API rate limits for metadata and ZIP downloads. |
VERCEL_OIDC_TOKEN |
No | Supplied automatically by Vercel for the optional skills.sh catalog. |
Sign-in and sign-up use email one-time codes (no passwords). Outside development, configure both RESEND_API_KEY and a domain-verified EMAIL_FROM; the fallback Resend test sender only works for Resend’s own test recipients. In development, OTP emails are skipped and any 6-digit code works. Without Vercel OIDC, the Discover catalog degrades gracefully while team libraries continue to work.
Product communications are separate from transactional OTP and invitation email. Signup consent is optional and off by default, can be changed under Settings → Email, and is enforced with local consent history, suppression records, signed unsubscribe links, and verified Resend delivery webhooks. See docs/email-compliance.md before configuring a product broadcast.
MCP access
Skills Board exposes an OAuth-protected MCP endpoint at /api/mcp. After signing in, open Settings → MCP to connect it. The tools can search team skills and collections, retrieve install commands, and discover public or repository skills. With skills:write, they can save new skills and organize collections. They cannot edit or delete saved team skills, install them in an agent, or execute them.
Tech stack
| Layer | Technology |
|---|---|
| Application | Next.js 16 App Router, React 19, TypeScript |
| UI | Tailwind CSS 4, shadcn/ui, Base UI |
| Authentication | Better Auth (email OTP) with organizations and OAuth provider support |
| Data | PostgreSQL, Drizzle ORM |
| Resend and React Email | |
| Agent access | Model Context Protocol via mcp-handler |
| Hosting | Vercel and Neon in the hosted deployment; self-hosting is supported |
Project commands
| Command | What it does |
|---|---|
pnpm dev |
Start the Turbopack development server. |
pnpm typecheck |
Run the TypeScript compiler without emitting files. |
pnpm check |
Run the repository's required local checks. |
pnpm db:generate --name <description> |
Generate a versioned migration after changing the schema. |
pnpm db:check |
Check that the schema and committed migration snapshots match. |
pnpm db:migrate |
Apply pending migrations to the configured database. |
pnpm db:push |
Push the schema only to a throwaway database used for prototyping. |
pnpm build |
Create a production build. |
pnpm start |
Start the production server. |
pnpm email |
Preview React Email templates on port 3001. |
Contributing
Issues and pull requests are welcome. Read CONTRIBUTING.md before making a substantial change, follow the Code of Conduct, and report vulnerabilities through the process in SECURITY.md.
See the people who have helped build Skills Board on the contributors page.
License
Skills Board is available under the MIT License.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.