Pexels MCP Server について
Pexels MCP Server は、AI アシスタントから Pexels の写真、動画、コレクションを検索・取得できるようにします。メディア情報をコンパクトに返し、写真のクレジットとライセンス案内も含みます。
主な機能
- 01写真の検索と取得
- 02動画の検索と取得
- 03コレクションと収録メディアの閲覧
- 04複数サイズのメディア URL
- 05写真クレジット付きの簡潔な結果
活用シーン
- 01コンテンツ用のテーマ写真探し
- 02向きやサイズによる動画の絞り込み
- 03注目コレクションと収録メディアの閲覧
- 04写真 URL とクレジット文の取得
MCP 対応
Pexels の写真、動画、コレクションの各 API に対応する読み取り専用ツール 9 件と、利用ガイドのリソースおよびタスク用プロンプトを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @hanoak/pexels-mcp-serverPEXELS_API_KEYシークレットYour Pexels API key (sent as the Authorization header, no prefix).LOG_LEVELLog verbosity; all logs go to stderr.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
9掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | ページ番号。1 から始まります。 |
| size | enum | いいえ | 写真の最小サイズ:large(24MP)、medium(12MP)、または small(4MP)。large | medium | small |
| color | string | いいえ | 希望する写真の色:色名(red、orange、yellow、green、turquoise、blue、violet、pink、brown、black、gray、white)、または "#ffffff" のような16進数コード。 |
| query | string | はい | 検索クエリ。例:"ocean"、"tigers"、"pears"。 |
| locale | string | いいえ | 検索に使用するロケール。例:"en-US"、"fr-FR"(28種類のロケールに対応)。 |
| per_page | integer | いいえ | 1ページあたりの項目数(最大80に制限されます)。 |
| orientation | enum | いいえ | 希望する写真の向き。landscape | portrait | square |
詳細
pexels-mcp-server
Pexels API 向けの、本番環境に対応した Model Context Protocol(MCP)サーバーです。Claude Desktop、Claude Code、Cursor、VS Code、Windsurf、およびあらゆる MCP クライアントなどの AI アシスタントに、Pexels の写真、動画、コレクションを検索・取得するツールを提供し、Pexels API がドキュメントで公開しているすべてのエンドポイントに対応します。
重要
非公式プロジェクトです。 Pexels との提携、承認、スポンサー関係はありません。「Pexels」はそれぞれの所有者の商標です。ご自身の Pexels API アカウントで本プロジェクトを利用し、Pexels License を遵守する責任は利用者にあります。
目次
- 機能
- クイックスタート
- 操作例
- 設定
- ツール
- プロンプト例
- ライセンスとコンプライアンス
- レート制限
- Pexels のテキストの取り扱い
- プライバシーとセキュリティ
- トラブルシューティング
- FAQ
- 要件
- 互換性
- ロードマップ
- コントリビューション
- お問い合わせとコミュニティ
- ライセンス
機能
- ドキュメントに記載されたすべての Pexels エンドポイントをカバーする 9 つのツール — 写真(検索、厳選、取得)、動画(検索、人気、取得)、コレクション(注目、メディア、自分のコレクション)に対応します。Pexels の API 認証は単一の API キー方式で、書き込みエンドポイントもないため、部分的な「読み取り専用 v1」ではなく、API の全機能を網羅しています。
- ライセンスを考慮した設計 — Pexels ではクレジット表記は必須ではありませんが、すべての写真について、すぐに使えるクレジット(テキストと HTML)を返します。また、サーバーの指示により、該当するライセンス制限(改変していないコンテンツの再販、他のストック素材プラットフォームへの再配布、商標やロゴの使用、推奨を暗示する表現の禁止)にモデルが従うよう促します。
- 実際の画像・動画 URL — 各写真は Pexels 独自のサイズ別
srcURL(original/large2x/large/medium/small/portrait/landscape/tiny)を返します。各動画はvideo_filesの各種データを返します(リスト結果では高解像度のものを数件に絞り、単一項目の取得ではすべて返します)。 - トークン効率の高い出力 — Pexels の完全なレスポンスをコンパクトな形式(URL とメタデータをテキストで出力し、base64 データは含めない)に整形し、モデルのコンテキストを小さく保ちます。
- 堅牢 — 型付きのエラーを MCP の
isError結果として返し、モデルが回復できるようにします。さらに、再試行とバックオフ、タイムアウト、レート制限を考慮したクォータの事前判定にも対応します(Pexels は429の場合にレート制限ヘッダーを省略するため、クライアントは推測せず、最後に確認したリセット時刻をキャッシュします)。 - 安全 — すべてのエラー出力で API キーを伏せ、間接的なプロンプトインジェクションを防ぐための信頼できないテキストの取り扱いガイダンスを備えています。
- 軽量でモダン — ESM、Node 20 以降、
npxによるインストール不要の実行、テレメトリーなし。
クイックスタート
1. Pexels API キーを取得する
pexels.com/api で無料アカウントを作成すると、アプリの審査や承認待ちなしで、すぐに API キーを取得できます。
2. MCP クライアントにサーバーを追加する
Claude Desktop — claude_desktop_config.jsonを編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"pexels": {
"command": "npx",
"args": ["-y", "@hanoak/pexels-mcp-server"],
"env": {
"PEXELS_API_KEY": "your_api_key"
}
}
}
}
クライアントを再起動します。サポートされているすべての変数については、設定を参照してください。
その他のクライアント(Claude Code、Cursor、VS Code、Windsurf、汎用 stdio)
Claude Code(CLI):
claude mcp add pexels \
--env PEXELS_API_KEY=your_api_key \
-- npx -y @hanoak/pexels-mcp-server
Cursor — ~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクトごと):上記のClaude Desktopとまったく同じmcpServersブロックを使用します。
Windsurf — ~/.codeium/windsurf/mcp_config.json:上記のClaude Desktopと同じmcpServersブロックを使用します。
VS Code — .vscode/mcp.json(トップレベルのキーはmcpServersではなくserversです):
{
"servers": {
"pexels": {
"command": "npx",
"args": ["-y", "@hanoak/pexels-mcp-server"],
"env": {
"PEXELS_API_KEY": "your_api_key"
}
}
}
}
その他のMCPクライアント — 以下を使って、サーバーをstdio経由で実行します。
PEXELS_API_KEY=your_api_key npx -y @hanoak/pexels-mcp-server
クライアントのstdioトランスポートをcommand: npx、args: ["-y", "@hanoak/pexels-mcp-server"]に設定し、env経由でキーを渡します。
3. 試してみる
クライアントを再起動して、次のように尋ねます。
「Pexelsで山の写真を探して。」
操作例
一般的な流れ:モデルがpexels_search_photosを呼び出して結果を選び、謝辞クレジットを添えて画像を表示します。
あなた: 霧に包まれた松林の風景写真を探してください。
アシスタント: (
query: "foggy pine forest"、orientation: "landscape"を指定してpexels_search_photosを呼び出し、最適な結果を選択) こちらがぴったりの写真です。PexelsのJane Doeによる写真で、画像URLとすぐに使えるクレジット表記も付いています。
各ツールは簡潔なJSONペイロードを返します。以下は、1件の写真結果の形式です(値は説明用です)。
ツール出力の例
{
"photo": {
"id": 1103970,
"alt": "Photography of Trees at Foggy Forest",
"width": 4000,
"height": 2667,
"avg_color": "#3E361F",
"url": "https://www.pexels.com/photo/photography-of-trees-at-foggy-forest-1103970/",
"src": {
"original": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg",
"large2x": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
"large": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
"medium": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=350",
"small": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=130",
"portrait": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&fit=crop&h=1200&w=800",
"landscape": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&fit=crop&h=627&w=1200",
"tiny": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&dpr=1&fit=crop&h=200&w=280"
},
"photographer": {
"name": "Jane Doe",
"url": "https://www.pexels.com/@janedoe",
"id": 42
},
"credit": {
"text": "Photo by Jane Doe on Pexels",
"html": "Photo by <a href=\"https://www.pexels.com/@janedoe\">Jane Doe</a> on <a href=\"https://www.pexels.com\">Pexels</a>"
}
},
"rate_limit": { "limit": 200, "remaining": 199, "resetEpoch": 1755000000 }
}
すべてのツール結果には、Pexelsのレスポンスヘッダーから読み取ったrate_limitオブジェクト(limit、remaining、resetEpoch)が含まれます。リスト/検索ツールは、ページネーションフィールド(total_results、page、per_page、has_next_page)とともに、結果をphotos/videos/collections/media配列に格納して返します。
設定
設定はすべて環境変数で行います。設定ファイルやシークレット用のフラグはありません。
| 環境変数 | 必須 | 説明 |
|---|---|---|
PEXELS_API_KEY | はい | Pexels APIキーです。値が設定されていないか空の場合、サーバーは起動時に明確なメッセージを表示して終了します。 |
LOG_LEVEL | いいえ | debug | info | warn | error(デフォルトはinfo)。すべてのログはstderrに出力され、stdoutにはMCPプロトコルのみが出力されます。 |
CLIフラグ:--versionと--helpを使用できます(例:npx @hanoak/pexels-mcp-server --version)。
ツール
すべてのツールはpexels_*名前空間に属し、すべて読み取り専用(readOnlyHint: true)です。PexelsのAPIには書き込みエンドポイントがないため、クライアントはサーバー全体を安全に自動承認できます。per_pageの最大値は80(Pexelsが公式に定めている上限)に制限され、pageは1から始まります。
| 分野 | ツール |
|---|---|
| 写真 | search_photos、curated_photos、get_photo |
| 動画 | search_videos、popular_videos、get_video |
| コレクション | list_featured_collections、list_my_collections、get_collection_media |
ツールリファレンス
写真
| ツール | パラメーター | 説明 |
|---|---|---|
pexels_search_photos | query (必須)、orientation?(landscape|portrait|square)、size?(large|medium|small)、color?(色名または16進コード)、locale?、page?、per_page? | フィルターを指定して、キーワードで写真を検索します。 |
pexels_curated_photos | page?、per_page? | Pexels が厳選した写真。1時間ごとに更新されます。 |
pexels_get_photo | id (必須) | 数値 ID で指定した写真1枚の詳細情報を取得します。 |
動画
| ツール | パラメーター | 説明 |
|---|---|---|
pexels_search_videos | query (必須)、orientation?、size?(large=4K|medium=Full HD|small=HD)、locale?、page?、per_page? | フィルターを指定して、キーワードで動画を検索します。 |
pexels_popular_videos | min_width?、min_height?、min_duration?、max_duration?、page?、per_page? | 現在人気の動画を、サイズや再生時間で絞り込んで取得できます。 |
pexels_get_video | id (必須) | 数値 ID で指定した動画1本を取得します。上位数件だけでなく、すべての形式を返します。 |
コレクション
| ツール | パラメーター | 説明 |
|---|---|---|
pexels_list_featured_collections | page?、per_page? | Pexels の注目コレクション(メタデータのみ)を取得します。 |
pexels_list_my_collections | page?、per_page? | 設定済み API キーを所有するアカウントのコレクションを取得します(FAQを参照)。 |
pexels_get_collection_media | id (必須)、type?(photos|videos)、sort?(asc|desc)、page?、per_page? | コレクション内の写真/動画を取得します。それぞれに media_type が付与されます。 |
ツールは、生の Pexels レスポンスではなく、トークン効率のよい形式にトリミングした JSON を返します。
- 写真 →
id、alt、width/height、avg_color、url、src(Pexels の全 8 サイズ)、photographer、および任意のクレジットを示すcreditオブジェクト。 - 動画 →
id、url、image、width/height、duration、user、video_files(リスト結果では解像度順の上位 5 件にトリミング。pexels_get_videoでは全件)、video_files_count、preview_picture、video_pictures_count。 - コレクション →
id、title、description、private、media_count、photos_count、videos_count。 - すべての結果に
rate_limit(limit、remaining、resetEpoch)が含まれます。リスト/検索結果にはページネーション用のフィールド(total_results、page、per_page、has_next_page)も追加されます。
リソースとプロンプト
ツールに加えて、サーバーは次のものも公開します。
-
リソース — クライアントがコンテキストとして取得できる、簡潔なガイドです。
pexels://guides/usage— 適用されるライセンス上の制限、任意のクレジット表記の慣習、安全性に関する注意事項。
-
プロンプト — クライアントがそのまま提示できる、すぐに使えるタスクです。それぞれが、ガイド付きの複数ステップからなるツール呼び出しタスクに展開されます。
プロンプト 引数 内容 find_photosubject(必須)、orientation?写真を 1 枚検索し、任意のクレジットを添えて提示します。 photo_gallerytheme(必須)、count?、orientation?、color?テーマに沿った写真のセット(最大 10 枚)を作成し、それぞれに任意のクレジットを添えます。 find_videosubject(必須)、orientation?動画を 1 件検索し、任意のクレジットを添えて提示します。 collection_tourtheme(必須)、count?テーマに合うおすすめコレクションを見つけ、そのメディアを紹介します。 media_brieftheme(必須)、photo_count?、video_count?テーマに沿った写真と動画の両方を集め、まとめて提示します。
プロンプトの例
ツールにそのまま対応させやすい、自然言語での依頼例です。
- 「日の出時の霧深い森の写真を探してください。」
- 「Pexels で、横向きのミニマルなワークスペースの写真を 5 枚検索してください。」
- 「岩に打ち寄せる波の動画を探してください。」
- 「都会の建築をテーマにした、おすすめの Pexels コレクションを見せてください。」
- 「秋の心地よい朝をテーマにした、写真と動画を組み合わせたメディア概要を作成してください。」
ライセンスとコンプライアンス
Pexels のライセンスは、多くのストックフォト API より制約が緩やかです。クレジット表記は必須ではありません(「していただけるとありがたいですが、必須ではありません」)。写真の各結果には、すぐに使える任意のクレジット用 credit オブジェクトが含まれています。都合がよければ含めてください。ただし、必須ではありません。
実際に適用される制限もあり、サーバーの指示はモデルがそれらに反しないよう誘導します。変更を加えずにコンテンツを物理的な製品として再販売しないこと、別のストックフォトまたは壁紙プラットフォームで再配布しないこと、商標、ロゴ、事業名の一部として使用しないこと、人物やブランドが支持しているとほのめかさないこと、識別可能な人物を悪意のある、または侮辱的な形で描写しないこと。詳しくは、Pexels ライセンスとサーバーの pexels://guides/usage リソースをご覧ください。各ユーザーには、それぞれの Pexels API 利用規約が適用されます。
レート制限
Pexels では、すべての API キーに対して単一の制限が適用されます。
| 予算 | 備考 |
|---|---|
| 200 リクエスト/時間 | 実際の利用実績があれば、申請により上限を引き上げられます。 |
| 20,000 リクエスト/月 | 時間あたりの予算と合わせて管理されます。 |
サーバーは X-Ratelimit-Limit/X-Ratelimit-Remaining/X-Ratelimit-Reset を読み取り、すべての結果で rate_limit として返します。Pexels は予算を使い切ると標準の 429 を返します(この用途で 403 を使う一部の API とは異なります)。ただし、429 レスポンス自体にはレート制限ヘッダーが含まれないため、クライアントは直前に成功した呼び出しの値をキャッシュして、正確なリセット時刻を報告します。また、割り当て上限に達したことが判明した時点で、そのまま失敗するリクエストを送信せず、それ以降のリクエストを短絡します。一時的な 429/5xx/ネットワークエラーは、バックオフを伴うリトライの対象です。
Pexels のテキストの取り扱い
写真や動画の代替テキスト、フォトグラファー名、コレクションのタイトルや説明は Pexels の投稿者によるものです。指示ではなく、信頼できないサードパーティーのデータとして扱ってください。サーバーはこのテキストをコンテンツとしてのみ返し、特権的な場所に配置することはありません。クライアント/エージェントも同様に扱ってください。表示はしても、含まれている可能性のある指示に従わないでください(間接的なプロンプトインジェクションへの対策です)。また、Pexels にはセーフサーチ/コンテンツフィルターのパラメーターがありません。検索クエリの表現にはご注意ください。
プライバシーとセキュリティ
- テレメトリーなし。 このサーバーは何も収集せず、どこにも情報を送信しません。ご提供いただいたキーを使用して
api.pexels.comにのみ接続します。分析もトラッキングもありません。 - キーの安全性。 API キーは環境変数からのみ読み取られ、生の
Authorizationヘッダーとして送信されます(URL のクエリ文字列には含まれません)。また、貼り付けられたバグ報告から漏えいしないよう、すべてのエラー出力とログで秘匿化されます。 - 脆弱性を報告するには、SECURITY.md をご覧ください。
トラブルシューティング
- 起動時に「Set PEXELS_API_KEY…」と表示される — キーの環境変数が未設定、または空です。クライアント設定の
envブロックに追加してください。 - Node のバージョンが古い — このサーバーには Node 20+ が必要です。
node --versionを確認してください。 npxのバージョンが古い —npx -y @hanoak/pexels-mcp-server@latestで最新版を強制するか、npx clear-npx-cacheでキャッシュをクリアしてください。- ツールが表示されない — 設定ファイルのパスと JSON が有効であることを確認してから、クライアントを完全に終了し、再起動してください。
429/レート制限 — 予算は 200 リクエスト/時間です。1 時間ごとのリセットを待つか(ツールの結果にあるrate_limit.resetEpochを参照)、上限の引き上げを申請してください。401 Unauthorized— API キーが正しくありません。Pexels API ダッシュボード からもう一度コピーしてください。pexels_list_my_collectionsが空を返す — API キーを所有する Pexels アカウントが pexels.com 自体でコレクションを作成していない場合は、想定どおりの動作です。FAQ をご覧ください。
FAQ
有料の Pexels アカウントが必要ですか? いいえ。Pexels API は無料です。アカウントを作成すれば、審査や承認の手順なしですぐに API キーを取得できます。
画像や動画をダウンロードしたり、再ホストしたりしますか? いいえ。Pexels がホストする URL を返し(その URL を直接ホットリンクしてください)、再ホストしたり、base64 のデータを返したりすることはありません。
pexels_list_my_collections が空なのはなぜですか?
Pexels には会話ごとのログイン機能がありません。このツールが反映するのは、チャットしている人ではなく、設定された API キーを所有する Pexels アカウントのコレクションです。その特定のアカウントが pexels.com でコレクションを作成していない場合、結果は空になります。
Claude 以外でも動作しますか? はい。標準的な stdio MCP サーバーです。Claude Code、Cursor、VS Code、Windsurf、汎用 stdio での設定については、クライアントのセットアップセクションをご覧ください。
要件
- Node.js >= 20(Node 18 はサポート終了です)。
- Pexels API キー。
互換性
| コンポーネント | 対応 |
|---|---|
| Node.js | 20 および 22。CI でテスト済みです。>=20 が必要です(engines と実行時チェックで強制されます)。 |
| OS | Linux、macOS、Windows(すべて CI でテスト済みです)。 |
| MCP SDK | @modelcontextprotocol/sdk ^1.30。プロトコルバージョンは接続時にクライアントとネゴシエーションされます。 |
| トランスポート | stdio(HTTP/SSE は今後のリリースで追加される可能性があります)。 |
ロードマップ
詳細は docs/ROADMAP.md をご覧ください。要約すると、v1 では、ドキュメント化されている Pexels API 全体を単一のリリースでカバーします。一部の他のストックフォト MCP サーバーとは異なり、v2 に分割するための OAuth 階層はありません。今後の対応候補には、動画の各レンディションに対する構造化ツール出力、クォータの逼迫が実際に発生した場合の短い TTL のレスポンスキャッシュ、追加のプロンプト/リソースが含まれます。
変更は CHANGELOG.md で追跡しており、プロジェクトでは セマンティック バージョニングに従っています。
コントリビューション
コントリビューションを歓迎します。CONTRIBUTING.md と 行動規範をご覧ください。ローカル環境のセットアップ、テストスイート、MCP Inspector を使った手動でのツールのテスト、バージョン管理/非推奨化ポリシーについて説明しています。脆弱性の報告については、SECURITY.md をご覧ください。
お問い合わせとコミュニティ
Hanoak S がメンテナンスしています。サポートを受けたり、機能を提案したりするには、issue を作成するのが最も迅速です。公開されており、検索できるため、コミュニティ全体の役に立ちます。
このプロジェクトがお役に立った場合は、GitHub で ⭐ を付けていただけると幸いです。Pexels MCP サーバーを探している方に見つけてもらいやすくなります。
ライセンス
MIT © Hanoak S。Pexels とは提携していません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。