note-post-mcp

note-post-mcp

MCP server for automating article posting to note.com from Markdown files using Playwright.

Category
访问服务器

README

Note Post MCP

GitHub

note.comへの記事投稿を自動化するMCPサーバーです。Markdownファイルからタイトル、本文、タグ、価格設定を読み取り、Playwrightを使用してnote.comに投稿します。

⚠️ 免責事項: 本ツールは自己責任でご利用ください。note.comの利用規約やサービス変更により、予告なく動作しなくなる可能性があります。詳細は「利用規約に関する注意事項」をご確認ください。

主な機能

  • MCP経由での単体投稿 - Claude等のAIアシスタントから直接記事を投稿
  • バッチ投稿スクリプト - 複数の記事を連続して自動投稿
  • 有料記事対応 - 価格設定と有料ラインの位置指定(<!-- paid -->
  • 画像対応 - サムネイル画像と本文中の画像挿入
  • 下書き保存 - 公開せずに下書きとして保存
  • タグ設定 - Front Matterで指定したタグを自動入力

クイックスタート

# 1. Playwrightブラウザをインストール
npx playwright install chromium

# 2. ログインして認証状態を取得
npx note-post-mcp-login

# 3. Claude Desktopの設定ファイルに追加(後述)

インストール

必要要件

  • Node.js 18+
  • note.comアカウント
  • 認証状態ファイル note-state.json(後述の手順で取得)

npmからインストール(推奨)

npm install -g @gonuts555/note-post-mcp

GitHubからインストール

git clone https://github.com/nullponull/note-post-mcp.git
cd note-post-mcp
npm install
npm run build

Playwrightブラウザのインストール

重要: Playwrightはブラウザを別途インストールする必要があります。

# GitHubからクローンした場合
npm run install-browser

# または直接実行
npx playwright install chromium

注意: npx note-post-mcp でMCPサーバーとして使用する場合も、事前に上記コマンドでChromiumをインストールしてください。Playwrightのブラウザはシステムグローバルにインストールされるため、一度インストールすれば再インストールは不要です。

認証状態ファイルの取得

note.comの認証状態を取得するには、ログインスクリプトを実行します。

GitHubからクローンした場合

npm run login

npmでグローバルインストールした場合

# ログインスクリプトを実行
npx note-post-mcp-login

注意: 事前に npx playwright install chromium でブラウザをインストールしてください。

保存場所

ブラウザが開くので、note.comにログインしてからターミナルでEnterを押してください。認証状態は以下に保存されます:

OS パス
macOS/Linux ~/.note-state.json
Windows %USERPROFILE%\.note-state.json

環境変数 NOTE_POST_MCP_STATE_PATH で保存先を変更できます。

MCPサーバーとして使用

Claude Code (CLI)

claude mcp add note-post-mcp -s user -e NOTE_POST_MCP_STATE_PATH="/path/to/note-state.json" -- npx note-post-mcp

Cursor

.cursor/mcp.jsonを作成:

{
  "mcpServers": {
    "note-post-mcp": {
      "command": "npx",
      "args": ["note-post-mcp"],
      "env": {
        "NOTE_POST_MCP_STATE_PATH": "/path/to/note-state.json"
      },
      "autoStart": true
    }
  }
}

Claude Desktop

claude_desktop_config.jsonに追加:

{
  "mcpServers": {
    "note-post-mcp": {
      "command": "npx",
      "args": ["note-post-mcp"],
      "env": {
        "NOTE_POST_MCP_STATE_PATH": "/path/to/note-state.json"
      }
    }
  }
}

MCPツール

publish_note

Markdownファイルからnote.comに記事を公開します。

パラメータ:

  • markdown_path (string, 必須): Markdownファイルのパス
  • thumbnail_path (string, 任意): サムネイル画像のパス
  • state_path (string, 任意): 認証状態ファイルのパス
  • price (number, 任意): 有料記事の価格(100〜50000円)
  • post_to_twitter (boolean, 任意): Twitter(X)に投稿するか
  • magazine (string, 任意): 追加するマガジン名
  • timeout (number, 任意): タイムアウト(ミリ秒)

save_draft

Markdownファイルから下書きを保存します。

パラメータ:

  • markdown_path (string, 必須): Markdownファイルのパス
  • thumbnail_path (string, 任意): サムネイル画像のパス
  • state_path (string, 任意): 認証状態ファイルのパス
  • timeout (number, 任意): タイムアウト(ミリ秒)

Markdownファイル形式

テンプレートファイルは templates/ ディレクトリにあります。

基本形式(無料記事)

---
title: 記事タイトル
tags:
  - タグ1
  - タグ2
---

本文をここに書きます。

![画像の説明](./images/sample.png)

画像も挿入できます。

有料記事

---
title: 有料記事タイトル
price: 300
tags: [AI, 機械学習, 論文解説]
---

ここは無料部分です。

![無料部分の画像](./images/preview.png)

<!-- paid -->

ここから有料部分です。

![有料部分の画像](./images/main.png)

画像の挿入

本文中に画像を挿入するには、Markdown形式で記述します:

![代替テキスト](./相対パス/画像.png)

対応フォーマット: PNG, JPEG, GIF, WebP

注意事項:

  • 画像パスはMarkdownファイルからの相対パスで指定
  • URLの画像(http://https://)はそのまま表示されます
  • ローカル画像は自動的にnote.comにアップロードされます

ディレクトリ構成例

my-article/
├── article.md          # 記事ファイル
├── images/
│   ├── thumbnail.png   # サムネイル画像
│   ├── image1.png      # 本文中の画像
│   └── image2.jpg

Front Matterオプション

オプション 説明
title string 記事タイトル
price number 価格(100〜50000円)。設定すると有料記事
tags array タグ(- tag 形式または [tag1, tag2] 形式)
twitter boolean Twitter(X)に投稿するか
magazine string 追加するマガジン名
membership boolean メンバーシップ限定にするか

バッチ投稿スクリプト

複数の記事を連続して投稿するためのスクリプトです。

使い方

# 環境変数で設定
export NOTE_POST_MCP_STATE_PATH="~/.note-state.json"
export NOTE_ARTICLES_DIR="/path/to/articles"
export NOTE_LOG_FILE="./publish_log.txt"

node batch-publish.cjs [開始番号] [終了番号] [デフォルト価格]

例:

# 記事0〜10を300円で投稿
node batch-publish.cjs 0 10 300

# 記事20〜30を500円で投稿
node batch-publish.cjs 20 30 500

バッチスクリプトの環境変数

環境変数 説明 デフォルト
NOTE_POST_MCP_STATE_PATH 認証状態ファイルのパス ~/.note-state.json
NOTE_ARTICLES_DIR 記事ディレクトリ ./articles
NOTE_LOG_FILE ログファイル ./publish_log.txt

記事ファイルの命名規則

バッチスクリプトは以下の形式のファイル名を想定しています:

0_ファイル名.md
1_ファイル名.md
2_ファイル名.md
...

ファイル名の先頭の数字でソート・処理されます。

記事ディレクトリ構成

バッチスクリプトは以下のディレクトリ構成に対応しています:

articles/
├── 01_記事タイトル/
│   ├── article.md          # 記事ファイル
│   └── images/
│       ├── thumbnail.png   # サムネイル画像(自動検出)
│       ├── 01.png          # 本文中の画像(番号順に挿入)
│       └── 02.png
├── 02_別の記事/
│   ├── article.md
│   └── images/
│       └── thumbnail.jpg
└── ...

フラット構成も対応:

articles/
├── 01_記事.md
├── 02_記事.md
└── ...

画像の自動アップロード

バッチスクリプトは画像を自動的に検出・アップロードします:

画像タイプ ファイル名 処理
サムネイル thumbnail.png/jpg/gif/webp 公開設定画面でアップロード
本文画像 01.png, 02.png エディタで番号順に挿入

画像検出パス(優先順):

  1. {markdownファイルのディレクトリ}/images/
  2. {記事ディレクトリ}/images/
  3. {親ディレクトリ}/note/{記事名}/images/

バッチ投稿の流れ

  1. タイトルと本文を入力
  2. 本文中の画像をアップロード(images/内の番号付き画像)
  3. 「公開に進む」をクリック
  4. タグを入力
  5. サムネイル画像をアップロード(thumbnail.*)
  6. 「有料」ラベルをクリック
  7. 価格を入力
  8. 「有料エリア設定」をクリック
  9. 「このラインより先を有料にする」をクリック(有料ラインの設定)
  10. 「投稿する」をクリック
  11. 確認モーダルのOKをクリック

有料ラインの位置指定

概要

<!-- paid --> コメントを本文中に挿入することで、有料部分の開始位置を正確に指定できます。

使い方

---
title: 有料記事のサンプル
price: 300
tags: [AI, 機械学習]
---

# 記事タイトル

この部分は無料で読めます。

導入部分や概要をここに書きます。

<!-- paid -->

ここから有料部分です。

詳細な解説や本編をここに書きます。

動作の仕組み(検索テキスト方式)

  1. <!-- paid --> コメントの直前の段落テキストを検索キーとして記録
  2. 「有料エリア設定」画面で、note.com上の段落から検索テキストを含む段落を特定
  3. 対応する「ラインをこの場所に変更」ボタンをクリックして正確な位置に設定

この方式により、画像や特殊要素があっても正確な位置に有料ラインを設定できます。

注意事項

  • <!-- paid --> がない場合は、記事の先頭に有料ラインが設定されます(記事全体が有料)
  • <!-- paid --> の直前には5文字以上のテキストを含む段落を置くことを推奨
  • <!-- paid --> マーカー自体は本文に含まれません(自動的に除去されます)
  • 検索テキストが見つからない場合は、段落インデックスにフォールバックします

実装で使用するセレクター

機能 セレクター
有料ライン移動 button:has-text("ラインをこの場所に変更")

既知の制限事項

有料ラインの設定について

有料記事を投稿する際、note.comの「有料エリア設定」画面で有料ライン(境界線)を設定する必要があります。

  • 「このラインより先を有料にする」ボタンをクリックして境界を設定
  • これをスキップすると「投稿する」ボタンが機能しません

確認モーダル

「投稿する」ボタンをクリックした後、確認モーダルが表示されます。

  • モーダルは[role="dialog"]要素として表示される
  • 「OK」ボタンをクリックして投稿を完了
  • モーダルが表示されるまで最大5秒待機

レート制限

連続投稿時にnote.comのレート制限に引っかかる可能性があります。

実測データ(2026-01)

項目
安全な連続投稿数 30記事以下
推奨待機時間 記事間30秒
1記事あたり所要時間 約43秒(待機含む)
30記事の所要時間 約22分

症状

31記事目以降で以下の症状が発生:

  • 「確認モーダルが見つかりませんでした」警告
  • URLが /publish/ のままで landing ページに遷移しない
  • 記事が下書き状態になる

推奨設定

// 記事間の待機時間(30秒推奨)
await page.waitForTimeout(30000);

// 確認モーダルの待機(最大15秒)
for (let attempt = 0; attempt < 30; attempt++) { // 30 × 500ms
  await page.waitForTimeout(500);
  // モーダル検出処理
}

対策

  1. バッチサイズ: 30記事以下で一旦停止
  2. バッチ間休憩: 5〜10分の休憩を挟む
  3. 記事間待機: 30秒以上(現在のスクリプトは対応済み)

note.com公式の制限情報(参考)

note.comは投稿数制限を非公開としています。以下は他のアクションの制限:

アクション 1日の上限 1時間の上限
スキ 200回 49回
フォロー 100人 15人
コメント 不明 短時間で一定数以上でロック

注意: note.comは自動投稿を推奨していません。サーバーに負荷をかけないよう節度ある利用を心がけてください。

下書きになってしまう場合

投稿が下書きになる主な原因:

  1. 確認モーダルをクリックできていない - モーダルの表示待機時間を増やす
  2. 有料ラインが設定されていない - 「このラインより先を有料にする」をクリック
  3. セッション切れ - npm run loginで再認証

環境変数

  • NOTE_POST_MCP_STATE_PATH: 認証状態ファイルのパス(デフォルト: ~/.note-state.json
  • NOTE_POST_MCP_TIMEOUT: タイムアウト(ミリ秒、デフォルト: 180000

ユーティリティスクリプト

マガジン一括登録(add-to-magazine.cjs)

記事をタイトルのパターンマッチでマガジンに自動振り分け:

# 2026年1月の記事をマガジンに振り分け
node add-to-magazine.cjs 2026 1

# 特定マガジンのみ
node add-to-magazine.cjs 2026 1 --magazine "AI論文読み放題"

# 全記事を強制的に指定マガジンに登録
node add-to-magazine.cjs 2026 1 --magazine "副業×AI" --force-all

# 全期間対象
node add-to-magazine.cjs 2026 1 --all

# ドライラン
node add-to-magazine.cjs 2026 1 --dry-run

マガジン判定ルール:

マガジン パターン
AI論文読み放題 論文, 翻訳, Paper, Research, GPT-SoVITS, 音声合成 等
副業×AI 副業, ニュース×AI, 株, 経済, 投資, DMM, 楽天

メンバーシップ特典一括追加(add-membership-benefit.cjs)

記事をメンバーシップ特典として一括登録:

node add-membership-benefit.cjs 2026 1
node add-membership-benefit.cjs 2026 1 --dry-run
node add-membership-benefit.cjs 2026 1 --limit 10

ディレクトリ構造

note-post-mcp/
├── src/
│   └── index.ts                   # MCPサーバーのメインコード
├── build/                         # ビルド出力(gitignore)
├── scripts/
│   └── login.mjs                  # ログインスクリプト
├── templates/
│   ├── article-template.md        # 有料記事テンプレート
│   ├── free-article-template.md   # 無料記事テンプレート
│   └── batch-article-template.md  # バッチ投稿用テンプレート
├── batch-publish.cjs              # バッチ投稿スクリプト(汎用)
├── batch-publish-october.cjs      # 10月版バッチ(成功パターン)
├── batch-publish-november.cjs     # 11月版バッチ
├── batch-publish-december.cjs     # 12月版バッチ
├── add-to-magazine.cjs            # マガジン一括登録
├── add-membership-benefit.cjs     # メンバーシップ特典一括追加
├── package.json
├── tsconfig.json
└── README.md

トラブルシューティング

認証エラー

npm run login

で認証状態ファイルを再生成してください。

ブラウザが起動しない / Playwrightブラウザがインストールされていない

Playwrightはブラウザを別途ダウンロードする必要があります。

# Chromiumをインストール
npx playwright install chromium

# システム依存関係もインストールする場合(Linux)
npx playwright install-deps chromium

エラー例:

Executable doesn't exist at /home/user/.cache/ms-playwright/chromium-xxx/chrome-linux/chrome

解決方法:

  1. 上記コマンドでChromiumをインストール
  2. Claude Desktopを再起動

macOS/Windows: 通常は npx playwright install chromium だけで動作します。 Linux: システムライブラリが不足している場合は npx playwright install-deps chromium も実行してください。

タイムアウトエラー

NOTE_POST_MCP_TIMEOUTを増やすか、timeoutパラメータを指定してください。

投稿が下書きになる

  1. ログを確認して「確認モーダルをクリック」が出ているか確認
  2. 有料記事の場合、「有料ラインを設定」が出ているか確認
  3. セッションが切れていないか確認

ページ読み込みエラー(2026-01以降)

note.comのUI変更により、ページ読み込みが遅くなる場合があります。

症状:

  • textarea[placeholder*="タイトル"]が見つからない
  • 「投稿する」ボタンが見つからない

対処法: batch-publish.cjsは以下の対策済みです:

  • waitUntil: 'networkidle''domcontentloaded' に変更
  • ページ遷移後に5秒の追加待機
  • セレクターを汎用的なもの(textarea)に変更

開発

ビルド

npm run build

ローカルテスト

npx note-post-mcp

利用規約に関する注意事項

免責事項

本ツールは自己責任でご利用ください。以下の点にご注意ください:

  • note.comは公式の投稿APIを提供しておらず、本ツールはブラウザ自動化による非公式な方法を使用しています
  • note.comの利用規約やUI変更により、予告なく動作しなくなる可能性があります
  • 本ツールの使用によって生じたいかなる損害(アカウント停止等を含む)についても、開発者は責任を負いません

note.comの利用規約について

2026年1月時点の調査結果:

項目 状況
公式API 未提供(将来の公開予定も未定)
自動投稿の明示的禁止 利用規約に直接的な禁止条項なし
スクレイピングの禁止 明確な記載なし(robots.txtでは記事ページへの制限なし)
スパム行為 明確に禁止(自動スキ、自動フォロー、自動コメント等)

禁止されている行為

以下の行為は明確に禁止されています:

  • 自動スキ、自動フォロー、自動コメント(スパム行為)
  • 短時間での大量リクエスト(サーバー負荷)
  • 他者への迷惑行為

推奨される使い方

  • 自分の記事の投稿補助として使用する
  • 適切な間隔を空けて投稿する(記事間30秒以上推奨)
  • 1日の投稿数は節度ある範囲に抑える
  • スパム目的や大量投稿には使用しない

参考リンク

ライセンス

MIT

謝辞

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选