关于 notion-arena
notion-arena 是面向 Notion 仪表板的机器可读组件目录,包含小组件和原生配方。其 MCP 服务让 Agent 能搜索、配置组件并规划安装。
主要功能
- 01搜索和浏览组件
- 02查看小组件架构
- 03生成小组件嵌入 URL
- 04规划配方安装
- 05获取目录和安装信息
适用场景
- 01查找合适的 Notion 小组件
- 02配置小组件嵌入内容
- 03预览原生配方安装计划
MCP 相关
MCP 服务向 AI Agent 提供工具,用于搜索、查看、配置 Notion Arena 组件并规划安装。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
10收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| kind | enum | 否 | 按类型筛选:widget(HTML 嵌入)或 native(Notion API 配方)widget | native |
| tier | enum | 否 | 按 tier 筛选free | pro |
| limit | number | 否 | 最大结果数,默认值为 50 |
| offset | number | 否 | 分页偏移量 |
| category | string | 否 | 按类别筛选:仪表板、时间、追踪器、规划、业务、可视化、文档、自动化 |
| delivery | enum | 否 | 按交付渠道筛选embed | html-block | download | api |
详细介绍
Notion Arena
Notion 的组件注册表。
将 shadcn/ui 的模式应用于 Notion 仪表板:浏览、配置、复制、拥有,并通过代码安装。
🎯 什么是 Notion Arena?
Notion Arena 是一个面向 Notion 的机器可读组件注册表,包含 203 个预构建组件,可添加到任意 Notion 页面中:
| 192 个小组件(嵌入 + HTML 块) | 11 个原生配方(Notion API) | |
|---|---|---|
| 内容 | 可独立运行于 Notion 内的 HTML 文件 | 通过 API 安装的数据库架构、视图、公式和自动化 |
| 交付方式 | <iframe> 嵌入或上传 HTML 文件 | 使用你的令牌调用 POST /api/install |
| 网络 | 需要(嵌入)/不需要(HTML 块) | 运行时不需要 |
| 数据 | 仅保存在浏览器本地 | 保存在你的 Notion 工作区中 |
| 团队同步 | ❌ 否 | ✅ 是 |
| 更新 | 自动(嵌入)/手动(HTML) | 重新运行安装 |
| 最低套餐 | 免费 | 免费/Plus/Business |
Notion 是 Notion Labs Inc. 的商标。 本项目为独立项目,与 Notion 无关联,也未获 Notion 背书。
🎨 热门小组件展示
📦 全部 192 个小组件(点击展开)
| 类别 | 数量 | 示例 | |----------|-------|----------| |⚙️ 原生方案(11 个)
| 方案 | 等级 | 创建内容 | 套餐 |
|---|---|---|---|
| CRM Pipeline | 3 个数据库、6 个公式、5 个视图、2 个模板、3 个自动化 | Plus | |
| Sprint Tracker | 2 个数据库、4 个公式、4 个视图、1 个模板 | Plus | |
| OKR System | 2 个数据库、5 个公式、3 个视图、1 个模板 | Plus | |
| Meeting Notes OS | 2 个数据库、1 个模板、2 个按钮、4 个视图、2 个自动化 | 免费 | |
| Content Calendar | 2 个数据库、3 个公式、5 个视图、1 个循环模板 | Plus | |
| Invoice Generator | 3 个数据库、6 个公式、1 个模板、1 个按钮、3 个视图 | Plus | |
| PARA Life OS | 5 个数据库、7 个关联、6 个视图、3 个模板、1 个仪表板 | Plus | |
| Habit OS (native) | 2 个数据库、5 个公式、4 个视图、1 个按钮、1 个循环模板 | Plus | |
| Client Portal | 3 个数据库、4 个视图、1 个同步块、1 个页面、2 个自动化 | Business | |
| Job Tracker | 2 个数据库、4 个公式、4 个视图、3 个模板 | 免费 | |
| Automation Starter | 2 个数据库、12 个自动化、6 个按钮、3 个循环模板、4 个公式 | Plus |
🤖 面向 AI Agent — MCP + Skill
将 Notion Arena 直接接入你的 AI Agent——Claude Code、Cursor、Windsurf、Claude Desktop。
MCP 服务
为你的 Agent 提供用于列出、搜索、配置和规划安装全部 203 个组件的工具:
# Claude Code (project scope)
claude mcp add --scope project notion-arena -- npx -y notion-arena-mcp
# Or pinned version
npx -y [email protected]
# Cursor — .cursor/mcp.json
# Claude Desktop — claude_desktop_config.json
# See docs/AGENT_SETUP.md for all clients
Skill
帮助你的 Agent 了解 Notion Arena 工作流、交付渠道和小组件契约:
# Via skills.sh (Vercel) — cross-agent
npx skills add SynergyFlowLabs/notion-arena --skill notion-arena
# Via Claude Code plugin marketplace
/plugin marketplace add SynergyFlowLabs/notion-arena
/plugin install notion-arena@notion-arena-marketplace
# Manual
cp -r skills/notion-arena .claude/skills/notion-arena
两者安装完成后,只需提出需求:
“帮我找一个适用于 Notion 的番茄钟” “在我的 Notion 中添加一个 CRM Pipeline” “我需要一个可离线使用的习惯追踪器”
你的 Agent 将自动使用 search_components、get_component、build_embed_url、plan_install。
MCP 工具:list_components、search_components、get_component、get_widget_schema、build_embed_url、plan_install、get_registry_item、get_install_guide、get_categories、get_site_info
Skill:skills/notion-arena/SKILL.md + .claude/skills/notion-arena/SKILL.md + .claude-plugin/plugin.json + .claude-plugin/marketplace.json
有关 MCP + Skill 设置,请参阅 docs/AGENT_SETUP.md;有关免费部署(Vercel),以及将 MCP 发布到 npm 和注册表、将 Skill 发布到 skills.sh 和插件市场,请参阅 docs/DEPLOY_AND_PUBLISH.md。
🏗️ 三种交付渠道——可视化
| 嵌入 URL | HTML 块 | 原生 Recipe | |
|---|---|---|---|
| 内容 | 我们托管小组件,Notion 通过 iframe 嵌入 | 你将文件上传到 Notion 的存储空间 | 我们调用 Notion API |
| 安装 | /embed → 粘贴 | /html → 上传,或调用 3 次 API | POST /api/install |
| 渲染时需要网络 | 需要 | 不需要 | 不需要 |
| 读取你的 Notion 数据 | 否 | 否 | 数据本身就是它 |
| 与团队共享状态 | 否 | 否 | 是 |
| 获取我们的更新 | 自动 | 否。固定不变 | 不适用 |
| 最低套餐 | 免费 | 免费 | 免费 |
一个 HTML 文件同时服务于两种小组件渠道,因此它们不会出现差异。托管路径的配置来自查询字符串,下载路径的配置来自内置的
<script id="bk-config">,因为沙盒块没有 URL。
📋 小组件规范——4 条规则
public/widgets/ 中的每个小组件都遵循相同的 4 条规则。完整指南和检查清单请参阅 /docs/authoring。
| 规则 | 说明 |
|---|---|
| 1. 零外部请求 | 不使用 CDN、网络字体、fetch() 或 @import。沙盒没有网络——远程资源会显示为空白块。 |
| 2. 两种配置来源 | 内置的 bk-config 脚本标签(优先级 1),然后是 URLSearchParams(优先级 2)。只保留已声明的参数;buildConfig() 会丢弃未知键。 |
| 3. 每个小组件都支持主题和强调色 | theme=auto|light|dark 会在 <html> 上设置 data-theme,并在设置为 auto 时遵循 prefers-color-scheme;accent 会设置 --accent,并通过 color-mix(in oklab, …) 派生色调。 |
| 4. 命名空间状态 | 保存浏览器状态的小组件使用 notion-arena.<slug>.v1,并在 try/catch 中封装存储访问。状态仅保存在单个浏览器中,不会同步——共享追踪器应使用原生 Recipe。 |
此外:设置 body { overflow: hidden },由 .wrap 管理自身滚动(只显示一个滚动条,而非两个);提供 prefers-reduced-motion 选项;剪贴板导出时始终也会通过 console.log 输出载荷,作为备用方案。
🏃 在本地运行
# Install dependencies
npm install
# Restore 13 design/dev skills into .agents/skills/
npx skills experimental_install -y
# Start dev server
npm run dev # http://localhost:3000
要求:Node 22+、Next.js 16(Turbopack)、React 19、Tailwind v4、TypeScript。
# Type-check
npx tsc --noEmit
# Widget contract checks (offline HTML validation)
npm run check:widgets
# Contrast audit
npm run audit:contrast
# Production build
npm run build
# MCP server
npm run generate:mcp-catalog # 143 components → mcp/src/data/catalog.json
npm run build:mcp # build notion-arena-mcp
npm run dev:mcp # run MCP server with tsx (stdio)
在生产环境中设置 NEXT_PUBLIC_SITE_URL 为 https://notionarena.vercel.app,以便注册表清单为正确的主机生成绝对 URL。如果未设置,URL 将根据请求转发的主机生成;若无法获取,则回退到 https://notionarena.vercel.app(本地开发时为 http://localhost:3000)。
📁 项目结构
public/widgets/*.html the products: 192 self-contained HTML files
lib/catalog.ts source of truth for all 203 components
lib/types.ts component/param types + the 8 categories
lib/widget.ts config coercion, injection, HTML rendering (server)
lib/widget-url.ts URL builders (browser-safe)
lib/notion/schema.ts Notion API payload builders
lib/notion/installer.ts executes plans against @notionhq/client
lib/recipes/ 11 recipe declarations + planInstall()
lib/registry.ts shadcn-compatible manifest generation
components/ site UI, catalog browser, configurator, docs prose
app/embed/[slug]/ framed, configured widget HTML
app/api/widget/[slug]/ the same HTML as a download
app/r/[name]/ registry: index.json, schema.json, {name}.json
app/api/install/ plan | embed | html-block | api
docs/RESEARCH.md the research behind all of it
skills/notion-arena/ AI agent skill (workflow, channels, contract)
mcp/ MCP server (tools for agents)
📦 注册表(兼容 shadcn)
GET /r/index.json the whole catalog
GET /r/{name}.json one item, HTML or recipe JSON inline
GET /r/schema.json JSON Schema of every widget's parameters
// mcp config / components.json
{ "registries": { "@notion-arena": "https://notionarena.vercel.app/r/{name}.json" } }
# see exactly what an install will do: no credentials, touches nothing
curl -X POST localhost:3000/api/install \
-H 'content-type: application/json' \
-d '{"component":"crm-pipeline","mode":"plan"}'
# then run it
curl -X POST localhost:3000/api/install \
-H 'content-type: application/json' \
-d '{"component":"crm-pipeline","mode":"api",
"token":"'"$NOTION_TOKEN"'","parentPageId":"'"$PAGE_ID"'"}'
mode: "plan" 无需令牌是有意为之:在授权对工作区进行任何写入之前,先检查请求序列。
⚠️ 两件值得了解的事
小组件无法读取或写入你的 Notion 数据。 Notion 的 HTML 块沙盒无法访问网络,也无法与其父页面通信。小组件可以在此浏览器中保留用户输入的个人状态,但该状态不是 Notion 数据,也不会共享。如果工作流需要工作区记录、协作、权限或审计跟踪,请使用原生数据库或配方。
关联属性需要分两步安装。 由于 Notion 将数据库与数据源拆分,relation 属性需要指向一个 data_source_id,而该 ID 只有在目标数据库创建并读回后才会存在。因此,planInstall() 会依次执行:创建包含基础属性的数据库 → 读回每个数据源 ID → 补入关联属性 → 补入汇总属性 → 补入公式 → 视图 → 初始行 → 页面 → 分批添加每批 100 个的块内容。
配方也会声明自己无法实现的功能。4 个真实的 API 缺口(没有 button 块类型、没有自动化端点、没有定期模板端点、无法复制同步块)会作为 manual[] 步骤列出,并各自注明限制。理由是“手动操作更简单”的手动步骤会被拒绝。
🤝 参与贡献
欢迎贡献!无论是新小组件、原生配方、错误修复、文档还是想法,都可以通过以下方式参与贡献。
贡献者快速入门
- 提交 Issue — 先讨论你的想法。检查是否有重复提案,并获取维护者的反馈。
- Fork 并克隆 — 创建你的分支:
git checkout -b feat/my-widget - 开发 — 遵循小组件约定(见下方检查清单)
- 测试 — 在本地运行所有检查
- 提交 Pull Request — 标题清晰,关联 Issue,附上截图/GIF,并更新 CHANGELOG
- 审核 — 维护者审核、CI 检查、小组件约定审计
- 合并 — 自动部署到 Vercel,重新生成 MCP 目录,即刻可用
小组件编写检查清单
每个小组件都必须通过所有检查后才能合并 — 详见 scripts/check-widgets.mjs。
添加新小组件
- 创建
public/widgets/my-widget.html(单个 HTML 文件,内容自包含) - 在
lib/catalog.ts中添加条目,并包含所有必需字段:{ slug: "my-widget", name: "My Widget", emoji: "🎯", tagline: "One-line hook", description: "Full paragraph explaining what it does and why.", category: "time", // time | dashboards | trackers | planning | business | docs | visuals | automations kind: "widget", tier: "free", // free | pro tags: ["tag1", "tag2"], color: "blue", // red | orange | yellow | green | blue | purple | pink | brown | gray params: [ { key: "param1", label: "Label", type: "number", default: 10, min: 1, max: 100 }, { key: "theme", label: "Theme", type: "select", default: "auto", options: [...] }, { key: "accent", label: "Accent", type: "color", default: "#2383e2" }, ], features: ["Feature 1", "Feature 2"], useCases: ["Use case 1", "Use case 2"], capabilities: { interactive: true, offlineSafe: true, persistsLocally: false, writesToNotion: false, needsNetwork: false, }, } - 运行
npm run check:widgets和npm run typecheck - 在 Notion 中测试(嵌入 + HTML 块)
- 提交 PR
添加原生配方
- 在
lib/recipes/my-recipe.ts中创建配方,并导出planInstall()和 schema - 在
lib/catalog.ts中添加条目,并设置kind: "native"和recipe: "my-recipe" - 运行
npm run generate:mcp-catalog和npm run build:mcp - 先使用
mode: "plan",再使用mode: "api"进行测试 - 提交 PR
代码风格
- TypeScript 严格模式 — 不使用
any,显式声明类型 - Tailwind v4 — 优先使用工具类,除非必要,否则不写自定义 CSS
- React 19 — 默认使用服务端组件,仅在需要时使用
'use client' - Conventional Commits —
feat:、fix:、docs:、chore:、refactor:
📜 诚信政策
- 不捏造安装量、星标数或客户 Logo
- 徽章仅表示定性信息(
new、popular、staff-pick),并根据目录生成 - 仅在注明来源的地方展示市场数据
- 功能声明以目录中的布尔值形式提供(
interactive、offlineSafe、persistsLocally、writesToNotion、needsNetwork),并在注册表中公开,方便 Agent 按这些值筛选,而无需阅读文字说明
📄 许可证
MIT License — 详见 LICENSE。
下载的组件归你所有:你可以修改、托管,也可以将其打包到你出售的模板中。免费组件无需注明出处。详见 /legal/terms。
🔗 Links
- Live Site: https://notionarena.vercel.app
- MCP Package: https://www.npmjs.com/package/notion-arena-mcp
- MCP Registry: https://registry.modelcontextprotocol.io
- Documentation: https://notionarena.vercel.app/docs
- Research:
docs/RESEARCH.md - Agent Setup:
docs/AGENT_SETUP.md - Deploy & Publish:
docs/DEPLOY_AND_PUBLISH.md - Contributing:
CONTRIBUTING.md - Changelog:
CHANGELOG.md
Made with ❤️ by SynergyFlow Labs and contributors
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。