关于 Skills Board
Skills Board 是面向团队的 AI 技能库,可集中保存和搜索技能,并提供安装命令或 ZIP 文件。团队成员可将同一条目用于不同 Agent;认证保护的 MCP 工具可搜索、整理技能及集合。
主要功能
- 01集中保存团队技能
- 02按任务、描述、仓库或标签搜索
- 03提供安装命令和 ZIP 下载
- 04按组织管理成员访问
- 05支持带权限范围的 MCP 工具
适用场景
- 01为团队整理共享的 AI 技能
- 02为不同 Agent 查找兼容技能
- 03让 Agent 搜索并整理技能集合
MCP 相关
Skills Board 在 `/api/mcp` 提供受 OAuth 保护的端点。工具可搜索技能和集合、获取安装命令;具备 `skills:write` 权限时,还可保存技能并整理集合。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://www.skillsboard.sh/api/mcpclaude mcp add --transport http tommybez-skillsboard https://www.skillsboard.sh/api/mcp{"mcpServers":{"tommybez-skillsboard":{"type":"http","url":"https://www.skillsboard.sh/api/mcp"}}}在 Cursor 中打开{"servers":{"tommybez-skillsboard":{"type":"http","url":"https://www.skillsboard.sh/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"tommybez-skillsboard":{"type":"http","url":"https://www.skillsboard.sh/api/mcp"}}}{"mcpServers":{"tommybez-skillsboard":{"serverUrl":"https://www.skillsboard.sh/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Skills Board 是面向团队的 Agent 原生技能注册库。将团队的 AI 技能集中管理,让每个人都知道去哪里查找和使用它们。
## 为什么选择 Skills Board实用的技能往往会散落在聊天记录、书签和个人 Agent 配置中。Skills Board 为团队提供一个可搜索的集中空间来收集技能,并让每位队友选择自己的使用方式。
- 团队共享库。 只需保存一次实用技能,使用团队专属标签进行整理,方便日后查找。
- 欢迎使用不同的 Agent。 在 Claude、Codex、Cursor 和其他 Agent 配置中共享同一条目。
- 多种交接方式。 打开原始来源、复制兼容的安装命令,或将最新技能文件下载为 ZIP。
- 按组织范围控制访问。 创建团队、邀请成员,并让每个库仅对其成员开放。
- 可选的 MCP 访问。 将兼容的 Agent 连接到经过身份验证且受范围控制的工具,用于查找和整理团队技能与集合。
重要
保存某项技能代表团队自行选择,并不意味着经过安全审查、兼容性认证或固定版本。Skills Board 会读取最新可用来源;在 Agent 中使用前,请先检查该来源。
工作原理
- 创建团队库,并从其 GitHub 仓库添加技能。
- Skills Board 会显示原始来源,并为团队记录该条目。
- 队友可以按任务、描述、仓库或标签搜索。
- 每位队友都可以打开来源、复制兼容的命令,或将最新文件下载为 ZIP。
如果部署环境支持 Vercel OIDC,公共目录可以帮助发现技能。团队库和直接通过 GitHub 添加技能仍是产品的核心功能。
在本地运行
前置条件
- Node.js 20.9 或更高版本
- pnpm 10
- PostgreSQL 15 或更高版本
1. 安装应用
git clone https://github.com/TommyBez/skillsboard.git
cd skillsboard
corepack enable
pnpm install
cp .env.example .env.local
使用 openssl rand -base64 32 生成 Better Auth 密钥,然后将其和 PostgreSQL 连接字符串添加到 .env.local。
2. 准备数据库
将已提交的 Drizzle 迁移应用到新数据库。此操作会根据 drizzle/ 中的版本化 SQL,创建 Better Auth 表和应用专用表。
pnpm db:migrate
3. 开始开发
pnpm dev
打开 http://localhost:3000。更改 DATABASE_URL 后,请重启服务器,因为 PostgreSQL 连接池会在模块加载时创建。
环境变量
| 变量 | 必填 | 用途 |
|---|---|---|
DATABASE_URL | 是 | 应用使用的 PostgreSQL 连接字符串;Neon 可在此使用连接池 URL。 |
DATABASE_URL_UNPOOLED | 在 Neon 上执行迁移时必填 | Drizzle 迁移使用的直接 PostgreSQL 连接。对于本地的非连接池 Postgres,可与 DATABASE_URL 相同。 |
BETTER_AUTH_SECRET | 是 | 用于签名和加密身份验证数据的密钥。 |
BETTER_AUTH_URL | 建议 | 应用的公开源地址;在本地使用 http://localhost:3000。 |
CRON_SECRET | 托管版本清理时必填 | 专用随机密钥,用于验证 vercel.json 中配置的每日过期合集版本清理任务。 |
RESEND_API_KEY | 在开发环境之外必填 | 通过 Resend 发送登录 OTP 和团队邀请邮件。 |
EMAIL_FROM | 在开发环境之外必填 | 用于 OTP 和邀请邮件的已验证 Resend 发件人(例如 Skills Board <[email protected]>)。 |
RESEND_WEBHOOK_SECRET | 托管邮件投递时必填 | 验证 Resend 的退信、投诉、抑制和取消订阅 Webhook。 |
EMAIL_PRIVACY_SECRET | 在 Vercel Production 中必填 | 至少 32 个随机字节,以 base64 或 hex 编码;用于生成邮件哈希和加密取消订阅链接的专用根密钥。本地/可自托管环境可回退到由 BETTER_AUTH_SECRET 派生的域分隔密钥。 |
EMAIL_PRIVACY_SECRET_PREVIOUS | 仅在密钥轮换期间需要 | 保留的 base64/hex 根密钥 JSON 数组,用于双哈希抑制查找和取消订阅令牌解密。只要保留的记录仍依赖某个旧根密钥,就不能移除它。 |
KV_REST_API_URL | 在开发环境之外必填 | Upstash Redis 数据库的 REST 端点,用于统计每个客户端地址提交的邮件捕获次数。在 Vercel 上,Marketplace 集成会自动将其写入项目。 |
KV_REST_API_TOKEN | 在开发环境之外必填 | 该数据库的 REST 令牌,由同一集成写入。集成同时写入的只读令牌不会使用。 |
UPSTASH_REDIS_REST_URL | 可自托管的替代项 | 使用规范 Upstash 名称的同一端点,适用于手动创建的数据库。Upstash 客户端会优先读取此变量,而非 KV_REST_API_URL,因此 Vercel 项目应将其留空。 |
UPSTASH_REDIS_REST_TOKEN | 可自托管的替代项 | 使用规范 Upstash 名称的同一令牌,读取优先级高于 KV_REST_API_TOKEN。若两组变量都未完整设置,捕获表单仍可正常工作,但不会进行速率限制。 |
GITHUB_TOKEN | 否 | 提高用于元数据和 ZIP 下载的 GitHub API 速率限制。 |
VERCEL_OIDC_TOKEN | 否 | Vercel 会自动提供,用于可选的 skills.sh 目录。 |
登录和注册使用电子邮件一次性验证码(无需密码)。在开发环境之外,请配置 RESEND_API_KEY 和经过域名验证的 EMAIL_FROM;Resend 的备用测试发件人仅适用于 Resend 自己的测试收件人。在开发环境中会跳过 OTP 邮件,且任意 6 位验证码均可使用。没有 Vercel OIDC 时,发现目录会优雅降级,团队库仍可正常使用。
托管部署每天运行一次合集版本保留清理任务。部署前,请在 Vercel Production 环境中设置 CRON_SECRET;未设置该密钥时,端点会拒绝所有请求。可自托管部署可通过调度器调用 /api/cron/collection-release-retention,并附带 Authorization: Bearer <CRON_SECRET>。
公开邮箱收集表单按客户端地址进行速率限制,每小时最多提交 5 次,并在 Upstash Redis 中按哈希地址计数。在 Vercel 上,从 Marketplace 添加一个靠近部署区域的 Upstash Redis 数据库,并将其连接到项目:该集成会将 KV_REST_API_URL 和 KV_REST_API_TOKEN 写入 Production 和 Preview,无需设置其他内容。可自托管的部署需使用在 console.upstash.com 创建的数据库,并改为设置 UPSTASH_REDIS_REST_URL 和 UPSTASH_REDIS_REST_TOKEN。Upstash 客户端会优先读取规范的一对变量,并在缺失时回退到 KV_REST_API_ 变量,因此两者都存在时,以规范的一对为准。无论哪种情况,表单都会采用开放失败策略:没有凭据或 Redis 无法访问时,提交仍会被接受,但不计数,并记录这一情况。
产品通信与事务性 OTP 和邀请邮件相互独立。注册时的同意为可选项,默认关闭,可在 Settings → Email 下更改;系统通过本地同意历史记录、抑制记录、已签名的退订链接和已验证的 Resend 投递 Webhook 来强制执行相关要求。配置产品广播前,请参阅 docs/email-compliance.md。
MCP 接入
Skills Board 在 /api/mcp 提供受 OAuth 保护的 MCP 端点。登录后,打开 Settings → MCP 进行连接。工具可搜索团队技能和集合、获取安装命令,以及发现公开技能或仓库技能。拥有 skills:write 权限时,还可保存新技能并整理集合。它们无法编辑或删除已保存的团队技能、在 Agent 中安装技能,也无法执行技能。
完整规范见 skillsboard.sh/developers(Markdown 版本见 /developers.md):其中包括公开端点、OAuth 流程、每个工具及其所需的权限范围,以及 HTTP 接口遵循的版本、错误和速率限制约定。机器可读的完整索引见 /llms.txt。
官方插件
此仓库同时也是官方 Skills Board 插件的市场。该插件包含上述 MCP 服务配置,以及一项介绍如何通过 Agent 使用团队技能库的技能。它不绑定某个特定客户端:plugin/ 目录中包含符合 Agent Plugins 1.0.0 规范的清单,以及配套的 Claude Code 清单。安装此插件是上述手动配置 MCP 的替代方案,而不是后续步骤。
在 Claude Code 中:
/plugin marketplace add TommyBez/skillsboard
/plugin install skills-board@skills-board
在任何支持 plugins CLI 的客户端中:
npx plugins add TommyBez/skillsboard
安装插件会配置 MCP 服务。要连接 MCP 服务,仍需登录 Skills Board,并在客户端中批准所请求的权限范围。
技术栈
| 层 | 技术 |
|---|---|
| 应用 | Next.js 16 App Router、React 19、TypeScript |
| UI | Tailwind CSS 4、shadcn/ui、Base UI |
| 身份验证 | Better Auth(邮箱 OTP),支持组织和 OAuth 提供商 |
| 数据 | PostgreSQL、Drizzle ORM |
| 邮件 | Resend 和 React Email |
| Agent 接入 | 通过 mcp-handler 使用 Model Context Protocol |
| 托管 | 托管部署使用 Vercel 和 Neon;支持自托管 |
项目命令
| 命令 | 功能 |
|---|---|
pnpm dev | 启动 Turbopack 开发服务器。 |
pnpm typecheck | 运行 TypeScript 编译器,但不生成文件。 |
pnpm check | 运行仓库要求的本地检查。 |
pnpm db:generate --name <description> | 更改架构后生成带版本号的迁移。 |
pnpm db:check | 检查架构是否与已提交的迁移快照一致。 |
pnpm db:migrate | 将待处理的迁移应用到已配置的数据库。 |
pnpm db:push | 仅将架构推送到用于原型开发的一次性数据库。 |
pnpm build | 创建生产构建。 |
pnpm start | 启动生产服务器。 |
pnpm email | 在端口 3001 上预览 React Email 模板。 |
贡献
欢迎提交问题和拉取请求。进行重大更改前,请阅读 CONTRIBUTING.md,遵守行为准则,并按照 SECURITY.md 中的流程报告漏洞。
在贡献者页面查看帮助构建 Skills Board 的贡献者。
许可证
Skills Board 采用 MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。