presscart について
Presscart公式のMCPサーバーです。Presscartのメディア掲載マーケットプレイスで、媒体の検索やキャンペーン、注文、記事の管理を行うチーム向けです。Presscart APIを利用し、OAuthまたはトークン認証によるホスト型HTTP接続に対応します。
主な機能
- 01出版物と掲載商品の検索
- 02キャンペーンの作成と管理
- 03注文と注文明細の管理
- 04記事のアップロード、提出、差し替え
- 05キャンペーン記事の状況確認
活用シーン
- 01メディア掲載候補の媒体選定
- 02キャンペーンの注文と記事の管理
- 03記事提出や掲載の進捗確認
MCP 対応
MCPクライアントに、Presscartのカタログ、キャンペーン、注文、記事管理ツールを公開します。ホスト型エンドポイントはStreamable HTTPを使い、MCP OAuthまたはPresscart APIトークン認証に対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.presscart.com/mcpclaude mcp add --transport http com-presscart-presscart https://mcp.presscart.com/mcp{"mcpServers":{"com-presscart-presscart":{"type":"http","url":"https://mcp.presscart.com/mcp"}}}Cursor で開く{"servers":{"com-presscart-presscart":{"type":"http","url":"https://mcp.presscart.com/mcp"}}}VS Code で開く{"mcpServers":{"com-presscart-presscart":{"type":"http","url":"https://mcp.presscart.com/mcp"}}}{"mcpServers":{"com-presscart-presscart":{"serverUrl":"https://mcp.presscart.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Presscart MCP
Presscartの公式Model Context Protocolサーバーです。Presscartは、1,700以上の媒体で公開されている有料記事掲載のマーケットプレイスです。AI アシスタントやエージェントは、Presscart APIを通じて、媒体カタログの閲覧、キャンペーンと注文の管理、記事のステータスの追跡を行えます。
ホスト型エンドポイント:https://mcp.presscart.com/mcp — Claude、Cursor、VS Code、ChatGPT、その他の MCP クライアントから接続する方法については、クライアントのセットアップをご覧ください。Presscart アカウントが必要です。
以下をサポートしています:
- ホスト型 Streamable HTTP モード
ホスト型 HTTP モードでは、次の2種類の認証方式をサポートしています:
- MCP OAuth モード:Supabase/Auth が OAuth トークンを発行し、クライアントは
Authorization: Bearer <oauth_access_token>を指定して/mcpに接続します。 - レガシー直接トークンモード:呼び出し元が
X-Presscart-API-Tokenを使って Presscart API トークンを提供し、サーバーはそのトークンを上流の Presscart 認証情報として使用します。
環境
必須:
export PRESSCART_API_URL="http://api.presscart.com/"
任意のアプリリンク設定:
export PRESSCART_APP_URL="https://app.presscart.com"
任意のホスト型モード設定:
export MCP_HOST="0.0.0.0"
export MCP_PORT="8787"
export MCP_SERVER_URL="https://mcp.presscart.com/mcp"
export MCP_SESSION_IDLE_TTL_MS="43200000"
リバースプロキシや複数ドメイン向けの任意のホスト/オリジンのオーバーライド:
export MCP_ALLOWED_HOSTS="mcp.presscart.com"
export MCP_ALLOWED_ORIGINS="https://mcp.presscart.com,https://claude.ai,https://claude.com"
MCP_ALLOWED_ORIGINS が設定されていない場合、ホスト型モードでは、設定された MCP サーバーのオリジンと Claude のリモートコネクターのオリジンが許可されます。
任意の OAuth 設定:
export MCP_OAUTH_ENABLED="true"
export MCP_OAUTH_ISSUER_URL="https://<project-ref>.supabase.co/auth/v1"
export MCP_OAUTH_AUDIENCE="https://mcp.presscart.com/mcp"
export MCP_OAUTH_TRANSLATOR_ENABLED="false"
export MCP_OAUTH_LEGACY_AUDIENCE="https://mcp.presscart.com"
export MCP_OAUTH_UPSTREAM_TIMEOUT_MS="10000"
任意のディレクトリ統合設定:
export MCP_DIRECTORY_PROFILES="openai,claude-directory"
任意の OpenAI プラグインのドメイン検証:
export OPENAI_APPS_CHALLENGE_TOKEN="<challenge_token_from_openai_portal>"
注:
PRESSCART_API_URLは、公開 API のみを提供するベース URLではなく、/teams/*ルートを公開するアプリ API のベース URLを指定する必要があります。PRESSCART_APP_URLは、list_publisher_articlesなどのツールが返すアプリへの直接リンクを制御します。ステージングの MCP リンクからステージング環境が開くよう、環境ごとに設定してください。- 注文やキャンペーンを作成するツール、およびプロフィールの注文を読み取るツールには、明示的な
profile_idが必要です。プロフィールが不明な場合は、list_teamsを呼び出してからlist_profilesを呼び出してください。 - MCP OAuth モードでは、アプリの Supabase OAuth Server が認可と同意を処理します。この MCP ランタイムは、発行されたアクセストークンを Supabase JWKS と委任された権限に照らして検証します。
MCP_OAUTH_TRANSLATOR_ENABLEDのデフォルトはfalseです。有効にすると、MCP オリジンは標準準拠の OAuth ファサードを公開し、クライアント、コード、トークン、ローテーション、署名、同意は引き続き Supabase が管理します。MCP_OAUTH_ISSUER_URLには HTTPS を使用する必要があります。ループバックの HTTP 発行者は、ローカル開発の場合にのみ使用できます。MCP_OAUTH_LEGACY_AUDIENCEは検証専用の任意の移行値で、設定された MCP サーバーのオリジン(例:https://mcp.presscart.com)と一致する必要があります。正規の/mcpリソースと重複させたり、別のサービスを指定したりすることはできません。また、クライアントに通知される保護対象リソースが変更されることはありません。- MCP クライアントは独自のリフレッシュトークンを保存し、自動でリフレッシュを開始して、ローテーションされたリフレッシュトークンとアクセストークンに置き換えます。このサーバーはリフレッシュ要求をステートレスに処理し、リフレッシュトークンを保存しません。
- トランスレーターが変更するのは MCP OAuth のみです。通常の Presscart ブラウザーセッションやアプリセッションには影響せず、MCP OAuth を無効にしてもレガシー直接トークンモードは引き続き使用できます。
- レガシー直接トークンモードでは、アクティブなセッション認証情報の確認が必要な
initializeと後続のリクエストで、X-Presscart-API-Token: <presscart_api_token>を送信してください。 OPENAI_APPS_CHALLENGE_TOKENは、OpenAI のプラグインポータルに表示されるドメイン検証トークンです。設定すると、GET /.well-known/openai-apps-challengeは MCP ホスト名のオリジンで認証なしのtext/plainとしてこの値を返します(ポータルは/mcp/openaiのパスを無視します)。前後の空白は削除されます。未設定または空白のみの場合、ルートは 404 を返します。MCP_ALLOWED_HOSTSが設定されている場合は、公開 MCP ホスト名を含める必要があります。
インストール
cd presscart-mcp
npm install
実行
開発:
npm run dev:http
ビルドして実行:
npm run build
npm start
ホスト型 HTTP をビルドして実行:
npm run build
npm run start:http
リリース
リリースは、Conventional Commits に基づいて semantic-release により自動化されます。
fix:はパッチリリースを作成します。feat:はマイナーリリースを作成します。!またはBREAKING CHANGE:はメジャーリリースを作成します。docs:、test:、chore:、その他のリリース対象ではないコミットは、デフォルトでは新しいバージョンを公開しません。
Release ワークフローは、main および staging へのプッシュ時に実行されます。チェック、テスト、ビルドを実行した後、semantic-release がリリースタグを作成し、GitHub リリースを公開します。
mainは安定版リリースを公開し、生成されたリリースファイル(CHANGELOG.md、package.json、package-lock.json、src/version.ts)をコミットします。stagingはrcプレリリースチャネルでリリース候補を公開しますが、生成されたリリースファイルはコミットしません。これにより、staging から main への昇格マージでプレリリースメタデータが競合するのを防ぎます。
リリースをローカルでドライランできます。
npm run release:dry-run
npm run release:staging:dry-run
リポジトリに既存のリリースタグがない場合は、最初の semantic-release の実行前にベースラインタグを作成してください。これにより、次のリリースは現在のバージョンから引き継がれます。
git tag v0.2.0
git push origin v0.2.0
ツール
get_userlist_teamsget_teamlist_profilesupload_fileslist_outletsget_outletcreate_outletupdate_outletlist_outlet_channelscreate_outlet_channelupdate_outlet_channeldelete_outlet_channellist_product_typeslist_product_listingslist_countrieslist_stateslist_citiesget_product_listinglist_productsget_productcreate_productupdate_productcreate_orderget_orderlist_order_itemslist_profile_orderscreate_campaignlist_campaignsget_campaignupdate_campaignlist_campaign_articleslist_publisher_articlesadd_order_items_to_campaignget_campaign_article_statusupload_campaign_questionnaireupload_articlereplace_article_filesubmit_articlerequest_article_writing
ディレクトリルート
/mcp ではすべてのツールセットを引き続き利用できます。OpenAI と Claude のディレクトリ連携は、サーバー設定によって公開するツールが固定された別々の URL に接続します。
| プロファイル | MCP パス | 保護リソースのメタデータ |
|---|---|---|
openai | /mcp/openai | /.well-known/oauth-protected-resource/mcp/openai |
claude-directory | /mcp/claude-directory | /.well-known/oauth-protected-resource/mcp/claude-directory |
- ルートは、その ID が
MCP_DIRECTORY_PROFILES(カンマ区切り、デフォルトは空)に記載されている場合にのみマウントされます。不明な ID または重複した ID があると、起動が中断されます。記載されていないプロファイルのパスは404を返します。 - どちらのプロファイルでも、読み取り専用の同じ 10 個のツールを公開します:
get_user、list_teams、get_team、list_profiles、list_profile_orders、get_order、list_campaigns、get_campaign、list_campaign_articles、get_campaign_article_status。それ以外のツールはこれらのルートに登録されないため、呼び出すと Presscart API リクエストの前に失敗します。 - ディレクトリツールは明示的なフィールド許可リストを返し(価格、決済またはチェックアウトのフィールド、メールアドレス、ライター名、内部ドキュメントへのリンク、アドオンは含みません)、厳格な出力スキーマを提示し、
limitの上限を 25 に設定します。 - セッションは、初期化されたルートに属します。そのセッションの
Mcp-Session-Idを別の MCP ルートに送信すると、404 Session not foundが返されます。 - 公開範囲の制限は認可ではありません。Presscart API は引き続きすべてのリクエストを認可します。
MCP_OAUTH_ENABLED=trueの場合、各ディレクトリルートには独自の保護リソースメタデータとWWW-Authenticateチャレンジがあり、OAuth ファサードは/oauth/authorizeと/oauth/tokenでそのリソースを受け入れ、検証機能はそのルートのリソースのみをトークンのオーディエンスとして受け入れます。オーディエンスが正規の/mcpリソース(または旧形式のオリジン)であるトークンはそのルートで拒否され、ディレクトリトークンは/mcpで拒否されます。MCP_OAUTH_ENABLED=falseの場合、ディレクトリルートでは/mcpと同様にX-Presscart-API-Tokenを使用します。これはローカルおよびステージング環境でのテストにのみ使用してください。- ロールバックするには、
MCP_DIRECTORY_PROFILESからプロファイルを削除して再デプロイします。/mcpには影響しません。
ディレクトリに申請する前に:
- ステージング環境で、Supabase OAuth が転送されたディレクトリの
resource値を受け入れることを確認します。 - Presscart API が、ディレクトリからのサインインで取得したトークンにそのルートのオーディエンスを設定します(presscart-app #910)。申請前にステージング環境でこれを確認してください。
ホステッドデプロイの構成
MCP OAuth モード
OAuth を有効にします:
PRESSCART_API_URL=http://api.presscart.com/
MCP_HOST=0.0.0.0
MCP_PORT=8787
MCP_SERVER_URL=https://mcp.presscart.com/mcp
MCP_SESSION_IDLE_TTL_MS=43200000
MCP_OAUTH_ENABLED=true
MCP_OAUTH_ISSUER_URL=https://<project-ref>.supabase.co/auth/v1
MCP_OAUTH_AUDIENCE=https://mcp.presscart.com/mcp
MCP_OAUTH_TRANSLATOR_ENABLED=false
MCP_OAUTH_LEGACY_AUDIENCE=https://mcp.presscart.com
MCP_OAUTH_UPSTREAM_TIMEOUT_MS=10000
正規リソースと JWT オーディエンスは MCP_SERVER_URL と一致している必要があり、末尾のスラッシュの違いのみ許容されます。パブリック OAuth URL と上流の発行者は、ループバックのみのローカル開発を除き、HTTPS を使用する必要があります。MCP_OAUTH_LEGACY_AUDIENCE は移行期間中のみ必要であり、MCP サーバーのオリジンと完全に一致させ、それ以外では設定を解除してください。
トランスレーターが無効の場合、サーバーは Supabase 直結の保護リソースメタデータを公開します(Presscart のアクセストークンフックは openid を要求するコード交換を拒否するため、profile スコープのみを通知します)。公開先は次のとおりです。
/.well-known/oauth-protected-resource/.well-known/oauth-protected-resource/mcp
トランスレーターが有効の場合、これらのルートは認可サーバーとして https://mcp.presscart.com を通知し、サーバーは次も公開します。
/.well-known/oauth-authorization-server/oauth/authorize/oauth/register/oauth/token
ファサードは標準の認可コードフローとリフレッシュトークンフローを受け付け、設定済みの Supabase 発行者にのみプロキシします。リクエストホスト、転送ヘッダー、クエリパラメーター、またはクライアントが指定した URL から上流の宛先を導出することはありません。
ファサードは RFC のトークン失効エンドポイントを公開も通知もしません。失効は既存の Presscart アプリ/管理者フローで行います。Presscart OAuth グラントを失効させると、次のリフレッシュが失敗します。すでに発行されたアクセストークンは、この MCP 検証機構によって積極的に失効されることはなく、通常の有効期限までは暗号学的に有効な状態が続く可能性があります。有効期限が切れると、クライアントは代替トークンを取得できなくなり、アクセスが終了し、ユーザーは再認可する必要があります。
ホスト型 MCP クライアントは https://mcp.presscart.com/mcp に接続し、通常の MCP OAuth ディスカバリーを使用してください。ブラウザーフローの完了後、Authorization: Bearer <oauth_access_token> を /mcp に送信します。クライアントはリフレッシュトークンを保管し、自動的にリフレッシュを開始して、ファサード経由で Supabase から返されたローテーション済みのリフレッシュトークンを毎回保存します。
ChatGPT、Claude、Cursor、Codex は、同じ MCP および OAuth 標準を使用します。サーバーにベンダー固有の認証分岐はありません。Connect や Authenticate などのラベルやプロンプトは、サーバーではなく各クライアントプラットフォームが制御します。
OAuth の段階的導入とロールバック
次の順序でオーディエンスの移行とトランスレーターをデプロイします。
MCP_OAUTH_TRANSLATOR_ENABLED=false、正規のMCP_OAUTH_AUDIENCE=https://mcp.presscart.com/mcp、および一時的なMCP_OAUTH_LEGACY_AUDIENCE=https://mcp.presscart.comによるデュアルオーディエンス検証を設定して、この MCP サーバーをデプロイします。- Presscart アプリのアクセストークンフックをデプロイし、新規発行およびリフレッシュ後の MCP トークンが正規の
/mcpオーディエンスを使用するようにします。 - アクセストークンの有効期間が丸一回分経過するまで待ち、その後、レガシーオーディエンスの使用がなくなったことを確認します。
- 本番以外の環境で
MCP_OAUTH_TRANSLATOR_ENABLED=trueに設定し、ディスカバリー、認可コード、リフレッシュのスモークテストを実施します。既存のアプリ/管理者フローを使って Presscart OAuth グラントを失効させ、次のリフレッシュが失敗することを確認します。すでに発行されたアクセストークンが直ちに失敗することは想定しないでください。通常の有効期限まで待ち、その後、クライアントがトークンを更新できず、再認可が必要になることを確認してから、本番環境でトランスレーターを有効にします。 - ChatGPT のワークスペースアプリを新たに作成して公開します。再接続期間中は、古いアプリも利用可能な状態にしておきます。
- アクセストークンの有効期限が切れる前と後に ChatGPT、Claude、Cursor、Codex を検証し、テレメトリで使用されていないことが確認できてから、古いアプリと
MCP_OAUTH_LEGACY_AUDIENCEを削除します。
ファサードをロールバックするには、MCP_OAUTH_TRANSLATOR_ENABLED=false に設定します。これにより、レガシーな直接トークン方式の MCP や通常の Presscart セッションを変更することなく、Supabase 直結のメタデータが再び返されます。ロールバック期間が終了するまでは、正規のオーディエンスによる発行と一時的なレガシー検証を維持してください。ファサードに登録されたクライアントは、Supabase 直結フローで再接続が必要になる場合があります。
レガシーの直接トークンモード
MCP_OAUTH_ENABLED が未設定または false の場合、ホスト型クライアントは引き続き /mcp に直接接続し、X-Presscart-API-Token を介してユーザーの Presscart API トークンを提供できます。
Railway の場合:
PRESSCART_API_URL=http://api.presscart.com/
MCP_HOST=0.0.0.0
MCP_PORT=8787
MCP_SERVER_URL=https://mcp.presscart.com/mcp
起動コマンド:
npm run start:http
レガシーの直接トークンモードでの初期化リクエストの例:
curl -X POST https://mcp.presscart.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'X-Presscart-API-Token: pc_...' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"example","version":"1.0.0"}}}'
クライアントの設定
Claude と Claude Desktop
Claude と Claude Desktop のリモート MCP サーバーは、claude_desktop_config.json ではなく、製品の UI から追加します。
Settings > Connectorsを開きます。- カスタムのリモート MCP コネクターを追加します。
- MCP サーバーの URL を入力します。
https://mcp.presscart.com/mcp
- プロンプトが表示されたら、OAuth フローを開始します。
- Presscart の同意 UI で委任アクセスのリクエストを許可または拒否します。
Claude Code
CLI からリモートサーバーを追加します。
claude mcp add --transport http presscart https://mcp.presscart.com/mcp
次に Claude Code を実行し、OAuth 認証を完了するよう求められた場合は /mcp を使用します。
Codex
CLI からリモートサーバーを追加します。
codex mcp add presscart --url https://mcp.presscart.com/mcp
codex mcp login presscart
Codex は、OAuth を使用するリモート Streamable HTTP MCP サーバーに対応しています。設定する MCP URL と WWW-Authenticate の resource_metadata URL の両方に、MCP の公開ホスト名を使用してください。MCP_OAUTH_TRANSLATOR_ENABLED=true の場合、保護されたリソースのメタデータは、MCP をオリジンとするファサードを認可サーバーとして通知します。トランスレーターが無効の場合は、Supabase/Auth の直接発行者を通知します。
簡単な確認方法:
curl -i https://mcp.presscart.com/mcp
curl -s https://mcp.presscart.com/.well-known/oauth-protected-resource/mcp | jq
Cursor
プロジェクトの場合は .cursor/mcp.json に、ユーザープロファイルの場合は ~/.cursor/mcp.json にサーバーを追加します。
{
"mcpServers": {
"presscart": {
"url": "https://mcp.presscart.com/mcp"
}
}
}
Cursor はリモート HTTP MCP サーバーの OAuth に対応しています。追加したら、Cursor の MCP UI から接続して認証します。
VS Code / GitHub Copilot Chat
ワークスペースの場合は .vscode/mcp.json に、ユーザー用の場合は mcp.json にサーバーを追加します。
{
"servers": {
"presscart": {
"type": "http",
"url": "https://mcp.presscart.com/mcp"
}
}
}
次に、Copilot Chat を Agent モードで開き、VS Code のプロンプトに従って OAuth フローを完了します。
GitHub.com の GitHub Copilot Coding Agent
GitHub のコーディングエージェントは現在、OAuth を使用するリモート MCP サーバーに対応していません。今すぐ GitHub ホストの Copilot 統合が必要な場合は、MCP_OAUTH_ENABLED=true を使わずにレガシーの直接トークンモードを使用するか、ローカルで VS Code/Copilot Chat を使用してください。
ChatGPT
ChatGPT では、ローカルの設定ファイルではなく、Developer Mode と Apps の設定からリモート MCP サーバーを使用します。
- ChatGPT で Developer Mode を有効にします。
Settings > Appsに移動し、リモート MCP サーバー用の新しいアプリを作成します。- 次を入力します。
https://mcp.presscart.com/mcp
- 認証方式として OAuth を選択します。
- OAuth フローを完了し、Presscart で委任アクセスのリクエストを許可します。
注:
- ChatGPT は現在、リモートサーバーのみに対応しており、ローカル MCP サーバーには対応していません。
- Business と Enterprise/Edu では、最も充実した MCP アプリのサポートを利用できます。利用可否はプランによって異なります。
OpenAI プラグイン
plugins/openai/ には、OpenAI プラグインディレクトリ向けのスキルのみを含む Presscart Placement Advisor 0.1.1 パッケージがあります。MCP 接続にはまだ対応していません。
cd plugins/openai && npm test && npm run package でテストとパッケージ作成を行います(出力先は Git で無視される dist/ です)。再作成するには、rm -rf dist && npm run package を実行します。パッケージャーは既存のアーカイブの上書きを意図的に拒否します。
リリースを妨げる項目とポータルへの提出に関する注記は plugins/openai/SUBMISSION.md にあります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。