Substack Publisher MCP について
Substack Publisher MCPは、MCPクライアントからSubstack公式Publisher APIの出版物・購読者データを読み取り専用で参照するサーバーです。複数の出版物に対応し、投稿検索や内容、反応指標、購読者情報を取得できます。
主な機能
- 01出版物と公開済み投稿の一覧表示
- 02投稿の検索と本文の取得
- 03投稿の反応統計の確認
- 04購読者数と購読者情報の取得
- 05設定済み出版物の選択
活用シーン
- 01テーマや日付で投稿を検索
- 02開封数、クリック数、閲覧数の確認
- 03購読者数の推移を追跡
- 04メールアドレスで購読者を検索
MCP 対応
ClaudeやCursorなどのMCPクライアントに、Substack公式Publisher APIを参照する読み取り専用ツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
substack-publisher-mcp
Substack の公式 Publisher API 用 MCP サーバー
注記: これは非公式のコミュニティ開発ツールであり、Substack, Inc. との提携、同社による推奨またはサポートはありません。
Substack の公式 Publisher API 用 MCP サーバーです。Claude、Cursor、または任意の MCP クライアントから、投稿の検索や閲覧、投稿の分析データと購読者数の取得、購読者の検索ができます。すべてのツールは読み取り専用です。

このサーバーを選ぶ理由
| substack-publisher-mcp | その他の Substack MCP サーバー | |
|---|---|---|
| API | 公式 Publisher API | 非公式の内部 API |
| 認証 | API キー(安定) | ブラウザー Cookie(不安定) |
| 安定性 | 公式の文書化された API | Substack が内部仕様を変更すると動作しなくなる |
| 複数出版物への対応 | 標準搭載 | 利用不可 |
前提条件
- Node.js 22 以降。
node --versionで確認してください。インストールされていない場合は、nodejs.org からインストールしてください。 - Substack Publisher API キー。 出版物の Substack ダッシュボードから生成してください。Publisher API の項目が表示されない場合は、出版物でまだ有効になっていない可能性があります。利用可能かどうかは Publisher API のドキュメント をご覧ください。
クイックスタート
1. インストール
git clone https://github.com/dkships/substack-publisher-mcp.git
cd substack-publisher-mcp
npm install && npm run build
2. MCP クライアントを設定する
クライアントの MCP 設定ファイルに追加します(ファイルがない場合は作成してください)。
| クライアント | 設定ファイル |
|---|---|
| Claude Desktop(macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop(Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Claude Code | プロジェクトディレクトリの .mcp.json |
| Cursor | .cursor/mcp.json |
{
"mcpServers": {
"substack": {
"command": "node",
"args": ["/path/to/substack-publisher-mcp/dist/index.js"],
"env": {
"SUBSTACK_API_KEY": "your-api-key-here"
}
}
}
}
Claude Code のユーザーへ: サーバー設定に
"type": "stdio"を追加してください。
設定ファイルを編集した後、MCP クライアントを再起動してください。サーバーは起動時に読み込まれます。
3. 使い始める
Claude(または MCP クライアント)に次のように尋ねます。
- 「設定している Substack の出版物はどれですか?」
- 「先月の投稿を表示して」
- 「価格設定についての投稿を探して」
- 「スラッグが my-latest-post の投稿を表示して」
- 「最新の投稿の開封数とクリック数はいくつですか?」
- 「過去 30 日間の購読者数を教えて」
- 「[email protected] の購読者情報を検索して」
AI エージェントやレジストリを通じてインストールしますか?簡潔で機械可読なセットアップガイドについては、llms-install.md をご覧ください。
ツール
| ツール | 説明 | 主なパラメーター |
|---|---|---|
list_publications | 設定済みの出版物を一覧表示します | なし |
list_posts | 公開済みの投稿を一覧表示します | startDate、endDate、sortBy、type、maxResults、next |
search_posts | 公開済みの投稿を全文検索します | query(必須)、maxResults(1~100) |
get_post | URL スラッグで投稿と本文を取得します | urlSlug(必須)、bodyFormat |
get_post_stats | 投稿のエンゲージメント統計を取得します | urlSlug(必須) |
get_subscriber_counts | 種類別の日次購読者数を取得します | startDate、endDate |
get_subscriber | メールアドレスで購読者を検索します | email(必須) |
複数の出版物を設定している場合、list_publications 以外のすべてのツールで、任意の publication パラメーターを指定できます。
get_post は、デフォルトで投稿本文を Markdown として返します。Substack は本文を JSON エンコードされた ProseMirror ドキュメントとして送信するため、通常は約 2 倍のサイズになります。生のドキュメントを取得するには bodyFormat: "prosemirror" を、メタデータのみを取得するには "none" を指定してください。
日付フィルターには YYYY-MM-DD を指定します。list_posts では endDate は範囲に含まれませんが、get_subscriber_counts では含まれます。
レスポンス例
get_subscriber_counts
[
{
"date": "2025-01-15",
"total_email_subscribers": 25000,
"paid_subscribers": 500,
"free_trial_subscribers": 10,
"comp_subscribers": 50,
"gift_subscribers": 15,
"lifetime_subscribers": 0,
"founding_subscribers": 25
}
]
get_post_stats
{
"clicks": 320,
"opens": 5400,
"post_id": 12345678,
"recipients": 10000,
"views": 6100,
"new_free_subscriptions": 80,
"new_paid_subscriptions": 5,
"estimated_revenue_increase": 400
}
list_posts
{
"posts": [
{
"post_id": 12345678,
"title": "My Latest Post",
"audience": "only_paid",
"subtitle": "A deep dive into the topic",
"postDate": "2025-01-15T12:00:00.000Z",
"urlSlug": "my-latest-post",
"coverImage": "https://substackcdn.com/image/..."
}
],
"next": "abc123cursor"
}
最終ページでは、next は null になります。
複数の出版物
複数のSubstack出版物を管理している場合は、SUBSTACK_API_KEY_<NAME> の形式でそれぞれに個別のAPIキーを設定します。
{
"mcpServers": {
"substack": {
"command": "node",
"args": ["/path/to/substack-publisher-mcp/dist/index.js"],
"env": {
"SUBSTACK_API_KEY_MAIN": "your-main-blog-key",
"SUBSTACK_API_KEY_TECH": "your-tech-newsletter-key",
"SUBSTACK_API_KEY_COMPANY": "your-company-updates-key"
}
}
}
}
次に、クエリ対象の出版物を指定します。
「mainの購読者数を表示して」 「tech出版物の最近の投稿を一覧表示して」
設定済みの出版物名をすべて確認するには、list_publications を使用します。
トラブルシューティング
| 問題 | 解決策 |
|---|---|
Unauthorized エラー | APIキーが正しいことを確認してください。キーは Bearer プレフィックスを付けずに、authorization ヘッダーに直接指定します。 |
起動時に ... duplicates publication ... または ... ignoring it が表示される | 2つの環境変数が同じ出版物名に対応している(名前の大文字・小文字は区別されず、SUBSTACK_API_KEY は default です)か、キーの形式が正しくありません。重複する環境変数の名前を変更するか、削除してください。 |
| サーバーが起動しない | クローンした後に npm run build を実行したことを確認してください。サーバーは src/ ではなく、dist/ から実行されます。 |
No API keys configured | MCP クライアントの設定で SUBSTACK_API_KEY または SUBSTACK_API_KEY_<NAME> を設定してください。 |
| クライアントにサーバーが表示されない | 設定ファイルが有効なJSONであること(末尾にカンマがないこと)を確認してから、クライアントを再起動してください。 |
command not found / spawn node ENOENT | Node.jsがインストールされていないか、PATHに含まれていません。node --version を確認してください。 |
| それでも解決しない場合 | クライアントのMCPログを確認してください。macOS版Claude Desktopの場合:~/Library/Logs/Claude/mcp*.log。 |
APIリファレンス
このサーバーはSubstack Publisher APIをラップしています。利用可能なデータやレート制限の詳細については、Substackのドキュメントを参照してください。
コントリビューション
ガイドラインについては、CONTRIBUTING.mdを参照してください。
ライセンス
MIT Licenseです。詳細については、LICENSEを参照してください。
SubstackはSubstack, Inc.の商標です。このプロジェクトはSubstack, Inc.とは提携していません。Substackの名称は説明を目的としてのみ使用しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。