mcpField
U
Upload Post

Upload Post

リモート
upload-post.comAI・エージェント13今日更新
リポジトリ公式サイト

Upload Post について

Upload Postは、Upload-Postを通じてSNSへの投稿、予約、分析を行うMCPサーバーです。対応ネットワーク共通のツールをMCP対応AIクライアントに提供します。

主な機能

  1. 01テキスト、写真、動画、文書の投稿
  2. 02投稿の予約、編集、キャンセル
  3. 03投稿、アカウント、オーディエンス分析
  4. 04コメント、DM、自動返信の管理
  5. 05メディアの準備とアップロード状況の確認

活用シーン

  1. 01複数のSNSへの投稿や予約
  2. 02投稿の成果とオーディエンスデータの確認
  3. 03コメントのモデレーションと返信
  4. 04メディアを用意して処理状況を追跡

MCP 対応

対応するSNSでの投稿、予約、分析、アカウント管理のため、Upload-Post APIのツールをMCPクライアントに公開します。ローカルstdio接続とホスト型HTTP接続に対応します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.upload-post.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://mcp.upload-post.com/mcp認証が必要

ツール

詳細

@upload-post/mcp

Upload-Post の公式 Model Context Protocol (MCP) サーバーです。

smithery badge Glama npm

MCP 互換の AI エージェント(ChatGPT、Claude Desktop、Claude Code、Cursor、…)であれば、単一の API キーを使って、TikTok、Instagram、YouTube、LinkedIn、Facebook、Pinterest、Threads、Reddit、Bluesky、X、Google Business、Discord、Telegram などのソーシャルメディアへの投稿、予約、分析、管理ができます。

公式の upload-post SDK と、一般公開されている Upload-Post REST API を基盤として構築されています。


ChatGPT で使う(セットアップ不要)

Upload-Post は OpenAI の審査を受けたプラグインで、ChatGPT の Plugins(旧 Apps)に掲載されています。ChatGPT で Upload-Post を開くか、Plugins で Upload-Post を検索して、Install、次に Connect をクリックし、OAuth でサインインしてください。貼り付ける MCP URL は不要です。また、コンピューターから直接動画ファイル、写真、カルーセルを投稿できる Upload Studio ウィジェットを利用できます。OpenAI dots でも同じプラグインを使用します。dot の Customize → Plugins で選択し、アクセス許可を確認してください。

手動で接続する場合は、ウェブ版 ChatGPT で Plugins を開き、+ をクリックして Add custom MCP server を選択し、https://mcp.upload-post.com/mcp を指定して、認証方式を OAuth に設定してください。カスタム MCP サーバーでは、Business、Enterprise、Edu のワークスペースで書き込み操作が可能です。

Claude で使う

claude.ai または Claude Desktop で Customize → Connectors を開き、+ Add をクリックしてから Add custom connector を選択し、https://mcp.upload-post.com/mcp を貼り付けて、Continue をクリックし、OAuth でサインインしてください。カスタムコネクターはすべての Claude プランで利用できます(Free プランでは 1 つまで)。Claude Code では、次のコマンドを実行します:claude mcp add --transport http upload-post https://mcp.upload-post.com/mcp。

Perplexity Computer で使う

サイドバーの Plugins(または Customize → Connectors)を開き、Add custom → Connector → Add MCP connector → Remote を選択してください。Streamable HTTP トランスポートと OAuth(または Upload-Post API キー)を使って https://mcp.upload-post.com/mcp を指定し、Add をクリックしてから、Upload-Post のカードをクリックしてサインインしてください。

Gemini CLI で使う

拡張機能をインストールします。Gemini が初めてツールを呼び出すときに、OAuth でサインインしてください:

gemini extensions install https://github.com/Upload-Post/upload-post-mcp

自分で実行する 2 つの方法

A) ローカル stdio(単一ユーザー)— 最も簡単

サーバーはお使いのマシン上で実行され、MCP クライアントによって起動されます。~/.claude/mcp.json(または Cursor の設定など)に追加してください:

{
  "mcpServers": {
    "upload-post": {
      "command": "npx",
      "args": ["-y", "@upload-post/mcp"],
      "env": { "UPLOAD_POST_API_KEY": "YOUR_API_KEY" }
    }
  }
}

API キーは https://app.upload-post.com → API Keys で取得してください。クライアントを再起動すると、58 個の upload-post ツールが表示されます。

B) ホスト型 HTTP(マルチテナント)— 1 つのサーバーを複数ユーザーで共有

Docker を実行できる任意のホスト(Fly、Railway、Cloud Run、自分のサーバーなど)でサーバーを実行し、各ユーザーが自分専用の Upload-Post API キーで接続できるようにします。サーバーはユーザーごとのデータを保存しません。

{
  "mcpServers": {
    "upload-post": {
      "url": "https://mcp.your-domain.com/mcp",
      "headers": {
        "Authorization": "ApiKey YOUR_OWN_UPLOAD_POST_API_KEY"
      }
    }
  }
}

Bearer のみを許可するクライアント向けに、Authorization: Bearer <key> も使用できます。


エージェントには何ができますか?

サーバーは、Upload-Post API ツールと ChatGPT アプリ UI 起動ツールを 1 つ提供します。

グループツール
アップロードupload_video, upload_photos, upload_text, upload_document, open_upload_studio
メディアの準備create_media_upload, complete_media_upload, get_media_upload, delete_media_upload
ステータスget_status, get_job_status, get_history, get_media
スケジュールlist_scheduled, cancel_scheduled, edit_scheduled
分析get_analytics, get_total_impressions, get_post_analytics, get_cached_post_analytics, get_platform_metrics
オーディエンスget_audience, get_suggestions
ユーザーget_account_info, list_users, get_connect_link, create_user, delete_user, generate_jwt, validate_jwt
ページ/ボードget_facebook_pages, get_linkedin_pages, get_pinterest_boards, get_google_business_locations, get_google_business_reviews, reply_to_google_business_review, get_reddit_detailed_posts
投稿retry_post, unpublish_post
コメントget_post_comments, create_comment, delete_comment, reply_to_comment, public_reply_to_comment, hide_comment, like_comment, pin_comment, edit_comment, hold_comment, approve_comment, ignore_comment, set_post_comments, comment_action
TikToktiktok_music_trending, tiktok_music_search, tiktok_location_search, tiktok_publishing_settings
DMsend_dm, list_dm_conversations, start_autodm(Instagram の DM、または TikTok、YouTube、Facebook、Threads、Bluesky での公開自動返信)、list_autodms, get_autodm_logs, pause_autodm, resume_autodm, stop_autodm, delete_autodm, manage_autodms
FFmpegsubmit_ffmpeg_job, get_ffmpeg_job, download_ffmpeg_result, get_ffmpeg_consumption
キューget_queue_settings, update_queue_settings, preview_queue

非同期アップロードは request_id を返します。エージェントは success: true になるまで get_status をポーリングしてください。

ネットワークごとではなく、質問ごとに1つのツール

Upload-Post APIには、ソーシャルネットワークごとのエンドポイントはありません。質問ごとにエンドポイントがあり、誰に問い合わせるかを指定するplatformパラメーターがあります。get_post_comments、get_post_analytics、get_audience、get_suggestions、comment_actionはすべてこの方式で動作するため、エージェントは1つの形式を学べば、すべてのネットワークで再利用できます。ネットワーク固有なのは4つのtiktok_*ツールのみです。これらが返すCommercial Music Library、TikTokの場所、TikTokのアカウントごとの公開設定は、TikTokにしか存在しないためです。

  • get_audience — プロフィールをフォローしているユーザー、居住地、オンラインになる時間、タップする対象を取得します。また、benchmark_categoriesと、benchmarkCategoryが設定されている場合に比較対象となるニッチの平均値も取得します。サーバーは期間を、今日より前に終了する最大60日間に制限します。そのため、より広い範囲を指定すると拒否されるのではなく、期間が短縮されます。レスポンスのrangeには、使用された期間が示されます。
  • get_suggestions — ハッシュタグ(view_countを含む)または関連キーワード検索を取得します。ツールを分けるのではなく、typeで区別します。
  • get_post_comments — 投稿のトップレベルのコメント、またはcommentIdを指定した場合は、そのコメントへの返信を取得します。
  • hide_comment、like_comment、pin_comment、edit_comment、hold_comment、approve_comment、ignore_comment、set_post_comments — モデレーション操作ごとに1つのツールを使います。comment_actionは単一のaction引数を通じて同じ操作を行い、ChatGPT以外のすべての環境で利用できます。ChatGPTでは、操作ごとのツールのみが利用できます(manage_autodmsも同様です)。
  • comment_action — TikTok(非表示/いいね/ピン留め)、Facebook(非表示/いいね/編集)、Instagram(非表示、または投稿のコメントの有効化/無効化)、YouTube(非表示/保留)、Threads(非表示/承認/無視)でコメントをモデレーションします。各操作にはそれぞれ取り消し操作があるため、元に戻せない操作はありません。
  • get_post_analytics — 投稿ごとの指標を取得します。post_metricsはプラットフォームから報告される内容で、その形式はプラットフォームによって異なります。TikTokでは、retention、impression_sources、audience_types、new_followers、reach、視聴時間(average_time_watched、total_time_watched、full_video_watched_rate)が追加されます。

エラーも共通です。platform_not_supported(400。応答可能なネットワークの一覧を含む)、invalid_parameter(400)、tiktok_reconnect_required(400)、reauth_required(409)、および上流のネットワークで障害が発生した場合の502です。

TikTok の機能

get_post_comments、create_comment、delete_comment、comment_action は platform: "tiktok" を受け付けます。また、firstComment は他のすべてのネットワークと同様に TikTok でも機能します。

TikTok アカウントでできることは、接続方法によって異なります。list_users は各 TikTok アカウントに capabilities 配列を返します。配列に含まれるのは music、location、cover_image、cover_timestamp、draft、video_privacy、photo_privacy、profile_analytics、comments、trend_search です。各ツールの説明には、そのツールに必要な機能が記載されています。これらの機能はユーザーが TikTok に接続したときに付与されます。そのため、機能が追加される前に接続したアカウントでは、対応するツールを使用する前に再接続する必要があります。tiktok_reconnect_required エラーはそのことを意味します。

get_media と get_cached_post_analytics はカーソルページネーションに対応しています。レスポンスの next_cursor を cursor として渡し、has_more が false になるまで繰り返してください。LinkedIn、Discord、Telegram はメディアのカーソルに対応しておらず、limit のみを受け付けます。多くの投稿をスキャンする場合は、get_post_analytics より get_cached_post_analytics を優先してください。以前に取得した結果を再利用するため、ライブ分析のレート制限である 5 分あたり 100 リクエストを回避できます。ここに含まれるのは、ライブの投稿単位のエンドポイントを通じて以前に取得した投稿のみです。バックグラウンドでの更新は行われないため、captured_at はその投稿を最後にライブで読み取った時刻です。

FFmpeg ジョブでは、input_url を使って公開 URL を 1 つ指定するか、files を使って複数の URL を指定できます。ジョブは Upload-Post のエンコードサーバー上で実行され、それぞれ専用の作業ディレクトリを使用します。full_command は {input}(または {input0}、{input1}…)と {output} のプレースホルダーを使う単一の ffmpeg 呼び出しであり、シェルを介さずに実行されます。ffmpeg で始める必要があり、シェルのメタ文字、..、file:、およびジョブディレクトリ外の絶対パスは拒否されます。完了するまで get_ffmpeg_job をポーリングし、その後 download_ffmpeg_result を呼び出してください。処理済みのバイナリを MCP 経由でストリーミングすることなく、結果の URL が返されます。その URL をアップロードツールに渡すまでは、何も投稿されません。

実行前の確認

ユーザーとして投稿したり、他の人に連絡したりするツールは、2 段階で実行されます。confirmed: true を指定せずに呼び出すと、送信される内容(テキスト、メディア、プラットフォームまたは宛先、ボタン、キーワード、タイミング)が正確に示されたプレビューとともに status: "confirmation_required" を返し、何も実行しません。モデルはその内容をユーザーに表示し、承認されたら confirmed: true を指定して呼び出しを繰り返します。対象となるのは、upload_video、upload_photos、upload_text、upload_document、send_dm、reply_to_comment、public_reply_to_comment、create_comment、reply_to_google_business_review、edit_comment、unpublish_post、start_autodm、および action: "start" を指定した manage_autodms です。また、コメントの編集や投稿者のブロックを行う comment_action/hide_comment も対象です。delete_user は、confirm_username にプロフィール名を再入力した場合にのみ削除します。すべての書き込みツールの実行前にユーザーに確認する ChatGPT では、1 段階で実行するツールが維持されます。

Reddit アプリを利用できない間、Reddit への投稿は無効になっています。reddit はプラットフォームとして提供されず、指定すると reddit_unavailable エラーになります。Reddit が再び利用可能になったら、セルフホスト環境では UPLOAD_POST_REDDIT_ENABLED=true を設定できます。

ChatGPT 動画アップロード UI

open_upload_studio は、ファイルベースでの投稿に使う ChatGPT Apps コンポーネントを表示します。動画 1 本、または画像 1 枚以上(カルーセル用に最大 10 枚。mediaType: "photos" を指定)に対応します。ウィジェットは各ファイルについて、有効期限の短い Upload-Post/R2 ステージングアップロードを作成し、ファイルを R2 に直接 PUT してアップロードを完了します。これを一度に 1 ファイルずつ行った後、返された一時的なメディア URL を順番どおりに指定して upload_video または upload_photos を呼び出します。写真の場合は、ステージング URL を ChatGPT に返すこともできます(「ChatGPT に送信」)。その後、ChatGPT が upload_photos を呼び出します。たとえば、プラットフォームごとに異なるキャプションを指定できます。upload_video と upload_photos は /mnt/data とサンドボックスの添付ファイルパスを拒否し、モデルに Studio を案内します。

このウィジェットは ChatGPT Apps SDK ブリッジを使用するため、ChatGPT にのみ公開されます(initialize 時に clientInfo から判定します。一致条件は UPLOAD_POST_STUDIO_CLIENTS=<regex> で上書きできます)。それ以外のすべてのホスト(claude.ai、Claude Desktop、Claude Code、Cursor、…)では、このツールや ui:// リソースは表示されません。代わりに、create_media_upload と complete_media_upload が手順ごとのガイダンスとともにモデルに公開されます。また、クライアントがファイルを直接 PUT できない場合、upload_video はアシスタントに公開 URL を尋ねるか、ユーザーをダッシュボードに案内するよう伝えます。

ステージングされたオブジェクトは、使用の有無にかかわらず 24 時間後に削除されます。スケジュール済み/キューに入った投稿は、実行前に upload_video が一時 URL を既存の永続的なスケジューラーストレージにコピーするため、安全です。

Claude やその他の MCP クライアントでは、ChatGPT UI を使わずに同じフローを利用できます。create_media_upload を呼び出し、upload_url にファイルを PUT し、complete_media_upload を呼び出した後、media_url を upload_video に渡します。

デフォルトと異なるバックエンドの R2 署名付き URL のオリジンをカンマ区切りで指定するには、MCP ホストで UPLOAD_POST_R2_CONNECT_DOMAINS を設定します(例:https://<account>.r2.cloudflarestorage.com,https://<bucket>.<account>.r2.cloudflarestorage.com)。これにより、ChatGPT コンポーネントの CSP でブラウザーからの PUT が許可されます。

R2 バケットの CORS ポリシーでは、ブラウザーからのアップロードを許可する必要があります。制限の厳しいポリシーでは、実際のウィジェットのオリジンを指定できます。最も手早く検証するには、次を使用してください。

[
  {
    "AllowedOrigins": ["*"],
    "AllowedMethods": ["PUT", "GET", "HEAD"],
    "AllowedHeaders": ["*"],
    "ExposeHeaders": ["ETag"],
    "MaxAgeSeconds": 3600
  }
]

ローカル/開発

git clone https://github.com/Upload-Post/upload-post-mcp.git
cd upload-post-mcp
npm install
npm run build

# stdio (default — used by Claude Desktop, Cursor)
UPLOAD_POST_API_KEY=... node dist/index.js

# HTTP streamable (for hosted deployments)
UPLOAD_POST_API_KEY=... node dist/index.js --http --port 8080

公式インスペクターを使って、現在のツール構成を確認します。

npx @modelcontextprotocol/inspector node dist/index.js

設定

環境変数モードデフォルト説明
UPLOAD_POST_API_KEYstdio—(必須)1 人のユーザーの Upload-Post API キーです。--http モードでは無視されます — キーはリクエストごとに渡されます。
UPLOAD_POST_BASE_URL両方https://api.upload-post.com/apiセルフホスト/ステージング向けの上書き設定です。
UPLOAD_POST_MCP_PORThttp8080--http モードのポートです。
UPLOAD_POST_MCP_MAX_BODY_MBhttp10許可される /mcp リクエスト本文の最大サイズです。これを超えると 413 が返されます。
UPLOAD_POST_MCP_VALIDATE_API_KEYShttptrueセッションを開く前に、貼り付けられた API キーを GET /uploadposts/me で 1 回検証します(結果はキャッシュされます)。無効なキーには 401 が返されます。
UPLOAD_POST_MCP_KEY_CHECK_TTL_MShttp600000受け入れられたキーを再検証するまでの信頼期間です。
UPLOAD_POST_MCP_MAX_SESSIONShttp2000メモリに保持するアクティブセッション数です。上限を超えると、最もアイドル状態が長いセッションが閉じられます。
UPLOAD_POST_MCP_MAX_SESSIONS_PER_KEYhttp200認証情報ごとのアクティブセッション数です。上限を超えると、その認証情報のセッションのうち最もアイドル状態が長いものが閉じられます。
UPLOAD_POST_MCP_SESSION_TTL_MShttp1800000セッションが閉じられるまでのアイドル時間です。
UPLOAD_POST_MCP_ALLOW_LOCAL_FILEShttpfalseツールがサーバーのディスク上のファイルパスからメディアを読み取れるようにします。共有ホストでは無効です(http(s) URL のみ受け付けます)。HTTP サーバーが自分のファイルと同じ場所で実行されている場合にのみ有効にしてください。stdio では常にパスが許可されます。
OPENAI_APPS_CHALLENGE_TOKENhttp現在の Upload-Post チャレンジトークン/.well-known/openai-apps-challenge での ChatGPT Apps ドメイン検証に使用する、任意の上書き設定です。

CLI フラグ:

  • --http — stdio の代わりにストリーミング可能な HTTP トランスポートを起動します
  • --port <n> — HTTP モードのポートです

HTTP エンドポイント:

  • POST /mcp — MCP のストリーミング可能な HTTP を介した JSON-RPC です。すべてのリクエストで Authorization: ApiKey <key>(または Bearer <key>)が必要です。キーはユーザー自身の Upload-Post API キーです。サーバーはそのセッションでのみ使用し、何も保存しません。
  • GET /healthz — 常に公開されている死活監視プローブです。{"ok":true} を返します。

--http モードの認証モデルは、Resend、Tavily、Brave Search など、API キーを標準とするサービスがホスト型 MCP で採用しているものと同じです。上流のキー自体が認証情報になります。


Docker でデプロイする

このリポジトリには、マルチステージの Dockerfile と .dockerignore が含まれています。Docker を利用できる PaaS(Fly.io、Railway、Render、Cloud Run、fly machines、ご自身のサーバーなど)では、次の手順で設定します。

  1. PaaS にこのリポジトリを指定し、ビルドパックとして Dockerfile を選択します。
  2. ポート:8080(EXPOSE 8080 に一致します)。
  3. 環境変数:必須のものはありません。ステージングを指定する場合は、任意で UPLOAD_POST_BASE_URL を設定します。
  4. ヘルスチェックパス:/healthz(HTTP、ポート 8080)。
  5. ドメイン:mcp.your-domain.com などのドメインを割り当て、TLS を設定します(ほとんどの PaaS では Let's Encrypt 経由で自動設定されます)。

デプロイすると、サーバーは任意の数のユーザーが利用できる状態になります。各ユーザーは、自身の Upload-Post API キーを使って、エンドポイントを MCP クライアントの設定に追加します。

{
  "mcpServers": {
    "upload-post": {
      "url": "https://mcp.your-domain.com/mcp",
      "headers": {
        "Authorization": "ApiKey USER_OWN_UPLOAD_POST_API_KEY"
      }
    }
  }
}

Authorization ヘッダーがない場合、サーバーは 401 を返します。このヘッダーが唯一の認証情報です。無効な Upload-Post キーは、最初のツール呼び出し時に上流エラーとして表示されます。

本番用イメージをローカルでテストする場合:

docker build -t upload-post-mcp .
docker run --rm -p 8080:8080 upload-post-mcp
curl http://localhost:8080/healthz   # → {"ok":true}
curl -i -X POST http://localhost:8080/mcp \
  -H "content-type: application/json" \
  -d '{}'                               # → 401 (no Authorization)

エージェントにプロンプトを入力する際のヒント

  • アップロード時はローカルパスよりも公開 URLを優先してください。ローカルパスが使えるのは、MCP サーバーがユーザーのマシン上で実行されている場合のみです。
  • ChatGPT Apps では、ユーザーが選択した動画や画像ファイルには open_upload_studio を優先して使用してください。短時間だけ有効な Upload-Post/R2 のステージング先にアップロードしてから、一時的なメディア URL を upload_video / upload_photos に渡すことで、ローカルパスの受け渡しに関する問題を回避できます。
  • ローカルファイルを扱うその他のクライアントで、HTTP リクエストを実行できる場合(Claude Code、Cursor、スクリプトなど)は、create_media_upload → バイトデータを upload_url に PUT → complete_media_upload の順に実行してステージングし、返された media_url を upload_video に渡してください。その機能がないホスト型チャット(claude.ai)では、公開 HTTPS URL または https://app.upload-post.com のダッシュボードが必要です。
  • 動画のバイトデータを直接送信する場合(URL ではなくファイルを保持しているクライアントの場合)は、videoPathOrUrl の代わりに videoBase64 を upload_video に渡してください。サーバーはデータを一時ファイルに書き込み、アップロードしてから削除します。インラインのバイトデータは UPLOAD_POST_MAX_INLINE_MB(デフォルト 100 MB)に制限されます。また、--http モードではリクエスト全体が UPLOAD_POST_MCP_MAX_BODY_MB(デフォルト 10 MB。base64 エンコード後の動画で約 7 MB)に制限されます。これより大きな動画には公開 URL を使用してください。
  • 公開前に、必ず最初にプロフィールを作成(create_user)し、Upload-Post ダッシュボードでソーシャルアカウントを接続してください。
  • 予約投稿では、タイムゾーンを含む ISO 8601 形式の日付を渡してください。例:"2026-12-25T10:00:00Z" + "timezone": "Europe/Madrid"。

プライバシーとデータの取り扱い

このサーバーは Upload-Post API へのステートレスプロキシです。各リクエストで処理するデータは、ユーザーの API キー(または OAuth アクセストークンを解決したもの)と、実行中のツール呼び出しの引数のみです。MCP コンテナ自体にユーザーデータが永続化されることはありません。

  • リクエストごとに受信するもの:Authorization ヘッダー、MCP ツール名と引数、エージェントが渡すメディア URL/パス。
  • 転送するもの:認証済みユーザーに代わって Upload-Post API に送信するツールの引数。
  • 保存するもの:ユーザーごとのデータはありません。OAuth トークンは Upload-Post のバックエンドに SHA-256 でハッシュ化して保存されるため、トークンストレージが侵害されてもユーザーになりすますことはできません。
  • ログに記録するもの:HTTP メソッド、パス、ステータスコード、不透明なリクエスト ID。ツールの引数、API キー、トークンは記録しません。

Upload-Post のプライバシーポリシー全文(データの収集、保持、第三者との共有、お問い合わせ先、GDPR/CCPA):https://upload-post.com/privacy

コネクターのアクセス権をいつでも取り消すには、app.upload-post.com で Connected Apps を開いてください。


セキュリティ

  • すべてのトラフィックはエッジで TLS 終端されます(HTTPS のみ)。
  • /mcp へのすべてのリクエストには、有効な Authorization ヘッダーが必要です。OAuth アクセストークンの有効期間は短く、RFC 6749 §10.4 に従ってローテーションされる 1 時間のアクセストークンと 90 日間のリフレッシュトークンです。
  • サーバーは Origin ヘッダーを許可リスト(claude.ai、claude.com、chatgpt.com、chat.openai.com、app.upload-post.com、localhost)と照合し、ブラウザベースのクライアントによる DNS リバインディング攻撃を軽減します。カスタムダッシュボードの背後でセルフホストする場合は、OAUTH_EXTRA_ALLOWED_ORIGINS(カンマ区切り)で許可リストを拡張してください。
  • OAuth メタデータは /.well-known/oauth-protected-resource とパス挿入形式の /.well-known/oauth-protected-resource/mcp(RFC 9728 §3.1)の両方で提供されます。oauth-authorization-server についても同様です。
  • --http モードでは、リクエストの失敗時および OAuth/well-known リクエストごとに、サーバーは stderr に 1 行を書き込みます(メソッド、パス、ステータス、認証スキーム、ユーザーエージェント。クエリ文字列や認証情報は記録されません)。すべてのリクエストを記録するには UPLOAD_POST_MCP_ACCESS_LOG=all を、記録を無効にするには off を設定してください。
  • OAuth 中に ChatGPT に redirect_uri not on allow-list と表示された場合は、失敗した authorize リクエストの正確な redirect_uri を Upload-Post バックエンドの OAuth リダイレクト許可リストに追加してください。ChatGPT クライアントの場合、通常は https://chatgpt.com/.../oauth/callback または https://chat.openai.com/.../oauth/callback です。
  • OAuth リダイレクトコールバックは、Claude(claude.ai/claude.com)、ChatGPT、Cursor、VS Code(stable + Insiders)、Smithery、Glama、Toolhouse、Perplexity(standard + Enterprise)、Mistral Studio debugger、Postman に加え、すべての http://localhost/ループバックリダイレクト(RFC 8252)で事前に許可されています。これにより、Claude Code、Windsurf、Cline、Continue、Goose、Gemini CLI、その他の mcp-remote 型クライアントにも対応します。固定コールバックが文書化されていないプラットフォーム(例:Grok、Le Chat production)は、リクエストに応じて追加されます。
  • すべてのツールは MCP の readOnlyHint/destructiveHint アノテーションを宣言しているため、クライアントは破壊的操作に対する確認プロンプトを表示できます。また、情報を公開したり人にメッセージを送ったりするツールでは、明示的に confirmed: true を指定する必要があります(操作前の確認を参照)。

セキュリティ上の問題の報告先:[email protected](ご要望に応じて暗号化 PGP を利用できます)。


ライセンス

MIT © Upload-Post

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。