notion-arena について
notion-arenaは、Notionダッシュボード向けのウィジェットとネイティブレシピを収録した機械可読なカタログです。MCPサーバーを通じて、エージェントがコンポーネントを検索・設定し、インストールを計画できます。
主な機能
- 01コンポーネントの検索と閲覧
- 02ウィジェットスキーマの確認
- 03ウィジェット埋め込みURLの生成
- 04レシピのインストール計画
- 05カタログと手順の取得
活用シーン
- 01適切なNotionウィジェットの検索
- 02埋め込み用ウィジェットの設定
- 03ネイティブレシピのインストール計画の確認
MCP 対応
MCPサーバーは、Notion Arenaのコンポーネントを検索・確認・設定し、インストールを計画するツールをAIエージェントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの 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 向けの機械可読なコンポーネントレジストリです。あらゆる Notion ページに追加できる、あらかじめ構築された 203 個のコンポーネントを提供します。
| 192 個のウィジェット(埋め込み+HTML ブロック) | 11 個のネイティブレシピ(Notion API) | |
|---|---|---|
| 内容 | Notion 内で動作する自己完結型の HTML ファイル | API 経由でインストールするデータベーススキーマ、ビュー、数式、自動化 |
| 提供方法 | <iframe> で埋め込むか、HTML ファイルをアップロード | トークンを使って POST /api/install を実行 |
| ネットワーク | 必要(埋め込み)/不要(HTML ブロック) | 実行時には不要 |
| データ | ブラウザー内のみに保存 | Notion ワークスペースに保存 |
| チーム同期 | ❌ いいえ | ✅ はい |
| 更新 | 自動(埋め込み)/手動(HTML) | インストールを再実行 |
| 最低プラン | 無料 | 無料/Plus/Business |
Notion は Notion Labs Inc. の商標です。 本プロジェクトは独立したプロジェクトであり、Notion とは提携関係になく、推奨も受けていません。
🎨 人気ウィジェットのショーケース
📦 全192個のウィジェット(クリックして展開)
| カテゴリ | 件数 | 例 | |----------|-------|----------| |⚙️ ネイティブレシピ(11)
| レシピ | ティア | 作成内容 | プラン |
|---|---|---|---|
| CRM パイプライン | 3 DB、6 数式、5 ビュー、2 テンプレート、3 自動化 | Plus | |
| スプリントトラッカー | 2 DB、4 数式、4 ビュー、1 テンプレート | Plus | |
| OKR システム | 2 DB、5 数式、3 ビュー、1 テンプレート | Plus | |
| ミーティングノート OS | 2 DB、1 テンプレート、2 ボタン、4 ビュー、2 自動化 | Free | |
| コンテンツカレンダー | 2 DB、3 数式、5 ビュー、1 定期テンプレート | Plus | |
| 請求書ジェネレーター | 3 DB、6 数式、1 テンプレート、1 ボタン、3 ビュー | Plus | |
| PARA ライフ OS | 5 DB、7 リレーション、6 ビュー、3 テンプレート、1 ダッシュボード | Plus | |
| Habit OS(ネイティブ) | 2 DB、5 数式、4 ビュー、1 ボタン、1 定期設定 | Plus | |
| クライアントポータル | 3 DB、4 ビュー、1 同期ブロック、1 ページ、2 自動化 | Business | |
| 求人トラッカー | 2 DB、4 数式、4 ビュー、3 テンプレート | Free | |
| 自動化スターター | 2 DB、12 自動化、6 ボタン、3 定期設定、4 数式 | Plus |
🤖 AI エージェント向け — MCP + スキル
Notion Arena を AI エージェントに直接接続できます — Claude Code、Cursor、Windsurf、Claude Desktop。
MCP サーバー
すべての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
スキル
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 パイプラインを追加して」 「オフラインで使える習慣トラッカーが必要」
エージェントは 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
スキル:skills/notion-arena/SKILL.md + .claude/skills/notion-arena/SKILL.md + .claude-plugin/plugin.json + .claude-plugin/marketplace.json
MCP + スキルのセットアップについては docs/AGENT_SETUP.md を、無料デプロイ(Vercel)、MCP の npm およびレジストリへの公開、スキルの skills.sh およびプラグインマーケットプレイスへの公開については docs/DEPLOY_AND_PUBLISH.md を参照してください。
🏗️ 3 つの提供チャネル — 図解
| 埋め込み URL | HTML ブロック | ネイティブレシピ | |
|---|---|---|---|
| 概要 | ウィジェットは当社がホストし、Notion が iframe で埋め込みます | ファイルを Notion のストレージにアップロードします | Notion API を呼び出します |
| インストール | /embed → 貼り付け | /html → アップロード、または API を 3 回呼び出す | POST /api/install |
| レンダリング時のネットワーク | 必要 | 不要 | 不要 |
| Notion のデータを読み取る | いいえ | いいえ | それ自体がデータです |
| チームと共有する状態 | いいえ | いいえ | はい |
| 更新の取得 | 自動 | いいえ。固定されます | 該当なし |
| 最低プラン | Free | Free | Free |
どちらのウィジェットチャネルでも同じ HTML ファイルを使用するため、内容が食い違うことはありません。設定は、ホストされるパスではクエリ文字列から取得し、ダウンロードしたパスでは埋め込み済みの
<script id="bk-config">から取得します。サンドボックス化されたブロックには URL がないためです。
📋 ウィジェットの仕様 — 4 つのルール
public/widgets/ 内のすべてのウィジェットは、同じ 4 つのルールに従います。完全なガイドとチェックリストについては、/docs/authoring をご覧ください。
| ルール | 説明 |
|---|---|
| 1. 外部リクエストを一切行わない | CDN、ウェブフォント、fetch()、@import は使用しません。サンドボックスにはネットワークがないため、リモートアセットは空白のブロックになります。 |
| 2. 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 で囲みます。状態は 1 つのブラウザー内にとどまり、同期されません。共有トラッカーにはネイティブレシピを使用してください。 |
さらに、.wrap が独自にスクロールを管理する body { overflow: hidden }(スクロールバーは 1 つで、2 つにはなりません)、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)
本番環境では、レジストリマニフェストが正しいホストの絶対 URL を出力するよう、NEXT_PUBLIC_SITE_URL に https://notionarena.vercel.app を設定してください。設定しない場合、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" は意図的な仕様です。ワークスペースへの書き込みを許可する前に、リクエストの流れを確認できます。
⚠️ 知っておきたい2つのこと
ウィジェットからNotionのデータを読み書きすることはできません。 NotionのHTMLブロックのサンドボックスには、ネットワークアクセスも親ページとのブリッジもありません。ウィジェットはこのブラウザー内にユーザーが入力した個人用の状態を保持できますが、その状態はNotionのデータではなく、共有もされません。ワークスペースのレコード、コラボレーション、権限、監査証跡が必要なワークフローでは、ネイティブデータベースまたはレシピを使用してください。
リレーションの設定には2段階のインストールが必要です。 Notionではデータベースとデータソースが分離されたため、relationプロパティの参照先となるdata_source_idは、対象のデータベースを作成して読み戻すまで存在しません。そのため、planInstall()は次の順に処理を出力します。基本プロパティを指定してデータベースを作成 → 各データソースIDを読み戻す → リレーションを追加する → ロールアップを追加する → 数式を追加する → ビュー → 初期行 → ページ → 100件ずつブロック本文を追加する。
レシピには、できないことも記載されています。実際のAPIにある4つの制限(buttonブロックタイプがない、自動化エンドポイントがない、繰り返しテンプレートのエンドポイントがない、同期ブロックの複製ができない)は、それぞれ制限事項を明記したmanual[]の手順として表示されます。「手作業のほうが簡単」という理由の手動手順は認められません。
🤝 貢献
貢献を歓迎します!新しいウィジェット、ネイティブレシピ、バグ修正、ドキュメント、アイデアなど、貢献方法は次のとおりです。
貢献者向けクイックスタート
- Issueを作成する — まずアイデアについて話し合います。重複がないか確認し、メンテナーからフィードバックを受けます。
- フォークしてクローンする — ブランチを作成します:
git checkout -b feat/my-widget - 開発する — ウィジェットのコントラクトに従います(以下のチェックリストを参照)
- テストする — すべてのチェックをローカルで実行します
- プルリクエストを作成する — 明確なタイトル、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()とスキーマをエクスポートしますkind: "native"とrecipe: "my-recipe"を指定して、lib/catalog.tsにエントリーを追加しますnpm run generate:mcp-catalogとnpm run build:mcpを実行しますmode: "plan"、続いてmode: "api"を指定してテストします- PRを提出します
コードスタイル
- TypeScriptのstrictモード —
anyを使わず、型を明示します - Tailwind v4 — ユーティリティファーストとし、必要な場合を除きカスタムCSSは使いません
- React 19 — デフォルトではサーバーコンポーネントを使い、必要な場合にのみ
'use client'を使います - Conventional Commits —
feat:、fix:、docs:、chore:、refactor:
📜 誠実さに関する方針
- インストール数、スター数、顧客ロゴを捏造しません
- バッジは定性的なもので(
new、popular、staff-pick)、カタログのデータに基づいています - 市場の数値は、出典が記載されている場合にのみ掲載します
- 機能に関する主張はカタログ内の真偽値(
interactive、offlineSafe、persistsLocally、writesToNotion、needsNetwork)で表され、レジストリに公開されます。これにより、エージェントは説明文を読むのではなく、これらの値で絞り込めます
📄 ライセンス
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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。