notion について
AI エージェントが `curl` と `jq` で Notion API を使うためのスキルです。ワークスペースの検索・読み取り、データベース照会、ページの作成・更新例に加え、共有権限と API バージョンの要件も示します。
主な機能
- 01API 認証の確認
- 02ワークスペースコンテンツの検索
- 03ページのメタデータとブロックの読み取り
- 04データベースの照会
- 05コンテンツの追加とページ作成
活用シーン
- 01共有済みワークスペースページの検索
- 02ページ全体の内容の読み取り
- 03データベース項目の絞り込みと並べ替え
- 04段落の追加またはデータベースページの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill notionインストール後、Claude Code で/notionを入力して読み込まれたか確認します。
詳細
Notion API を
curl + jq で操作します。ユーザーの OAuth ベアラートークンは $NOTION_TOKEN に格納されています。すべての呼び出しで、このトークンと Notion-Version ヘッダーが必要です。
現在の Notion-Version は 2022-06-28(最新の安定版)です。Notion が新しいバージョンをリリースしたら、このヘッダーを更新してください。
ユーザーの接続から参照できるのは、ユーザーが認可時にインテグレーションと明示的に共有したページとデータベースのみです。検索やページの読み取りで何も返されない場合、最も可能性が高い原因は「そのページがインテグレーションと共有されていないこと」です。このヒントをユーザーに伝えてください。
レシピ
認証を確認する(必ず最初に実行)
curl -sS https://api.notion.com/v1/users/me \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
| jq '{id, name, type, bot: (.bot != null)}'
ワークスペースを検索する
curl -sS https://api.notion.com/v1/search \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d '{"query": "Q1 budget", "page_size": 10}' \
| jq '.results[] | {id, type: .object, url, title: (.properties.title // .properties.Name)?.title?[0]?.plain_text // .child_page?.title}'
ページを読み取る(メタデータのみ)
curl -sS "https://api.notion.com/v1/pages/PAGE_ID" \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28"
ページの全コンテンツを読み取る
curl -sS "https://api.notion.com/v1/blocks/PAGE_ID/children?page_size=100" \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
| jq '.results[] | {type, content: (.[.type] // {})}'
ページに段落を追加する
curl -sS -X PATCH "https://api.notion.com/v1/blocks/PAGE_ID/children" \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d "$(jq -nc --arg text "Appended via the assistant." '
{children: [{
object: "block",
type: "paragraph",
paragraph: {rich_text: [{type:"text", text:{content:$text}}]}
}]}')"
データベースをクエリする
curl -sS -X POST "https://api.notion.com/v1/databases/DATABASE_ID/query" \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d '{
"filter": {"property": "Status", "select": {"equals": "Open"}},
"sorts": [{"property": "Updated", "direction": "descending"}],
"page_size": 25
}'
データベースにページを作成する
curl -sS -X POST "https://api.notion.com/v1/pages" \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d "$(jq -nc \
--arg db "DATABASE_ID" \
--arg title "New entry" \
'{
parent: {database_id: $db},
properties: {
Name: {title: [{text: {content: $title}}]},
Status: {select: {name: "Open"}}
}
}')"
注意事項
- Notion のページネーションはカーソルベースです。ページを続けて取得するには、各レスポンスの
next_cursorを使ってstart_cursor=$cursorを追加します。has_moreがfalseになったら終了します。 - 書き込みの失敗(400/404)の多くは、プロパティ型の不一致が原因です。たとえば、
{"select": {"name": "Open"}}ではなく{"select": "Open"}を送信している場合です。不明な場合は、GET /v1/databases/<id>を使ってデータベースのスキーマを一度読み取ってください。
出力を記録する
公開が成功し、公開結果の URL を取得したら、組み込みの
publish_artifact ツールを 1 回だけ呼び出して、ユーザーがこの成果物を My Outputs で確認できるようにします。
publish_artifact(kind="document", channel="notion", title="<title>", url="<the REAL returned URL>", status="delivered")
実際に返された URL を使用し、決して捏造しないでください。公開済みの項目ごとに、配信が確認された後で 1 回だけ呼び出します。公開に失敗した場合は呼び出さないか、status="failed" を使用してください。_shared/artifacts.md を参照してください。