phototology について
phototology は、静止画の分析結果を再利用したいエージェント向けの MCP サーバーです。レンズの結果を永続レジストリに保存し、以後の検索やキャッシュ済み分析を無料にします。
主な機能
- 01写真をレンズ別の構造化データに分析
- 02最大 200 枚の写真を一括分析
- 03完全一致と類似画像の照合
- 04EXIF、IPTC、XMP メタデータへの結果書き込み
- 05レンズカタログとアカウント残高の確認
活用シーン
- 01エージェントが再び扱う写真の分析結果を再利用
- 02日付、状態、テキスト、場所を構造化項目で確認
- 03写真分析のバッチ実行前に費用を確認
MCP 対応
写真分析、検索、一括処理、メタデータ付与、アカウント操作のツールと、レンズおよび写真レジストリのリソースを提供します。stdio で動作し、分析リクエストをホスト型の Phototology API に送ります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @phototology/mcpPHOTOTOLOGY_API_KEYシークレットYour Phototology API key (pt_live_... for production, pt_test_... for the free fixture sandbox). Get one at https://phototology.com/dashboard. New accounts include 1,000 free credits on email verification.PHOTOTOLOGY_BASE_URLOverride the API base URL. Defaults to https://api.phototology.com. Used for local development against phototology-api.PHOTOTOLOGY_MCP_NO_TELEMETRYSet to 1 to disable anonymous telemetry: the editor name and version, the package version, and per tool call the tool name, success, duration, error code and counts. Never image content, file paths, tool inputs or outputs, or conversation text.DO_NOT_TRACKSet to 1 to disable telemetry. Same effect as PHOTOTOLOGY_MCP_NO_TELEMETRY; follows the cross-tool convention many CLIs honor.PHOTOTOLOGY_MCP_ALLOWED_DIRSFolders the server may read photos from and write enriched copies to, separated by : (; on Windows). Unset means any local path. Paths are checked after symlinks are resolved.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
7掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| stack | enum | いいえ | まとめて実行する lens の名前付きセット(スタック)。スタックによって規模と価格は大きく異なります。大量処理でスタックを使用する前に、`list_lenses` を呼び出して、各スタックの lens、`credits`、`usdPerPhoto` を確認してください。ワークフローがスタック名に合致する場合に使用します(例:車両の写真には `automobile`、追悼写真には `memorial`)。`lenses` が指定されている場合は無視されます。(以前の名称は `preset` で、非推奨の別名として引き続き受け付けられます。)full-analysis | quick-scan | automobile | claims | property | ecommerce | memorial | vehicle-condition |
| lenses | array | いいえ | 実行する lens の明示的なリスト。少数の lens のみが必要な場合は、`stack` よりこちらを優先してください。選択した lens のみ課金されます。各 lens の説明を確認するには `list_lenses` を呼び出してください。(以前のパラメーター名は `modules` で、名称変更中も別名として引き続き受け付けられます。) |
| preset | enum | いいえ | `stack` の非推奨の別名です。新しいコードでは `stack` を優先してください。full-analysis | quick-scan | automobile | claims | property | ecommerce | memorial | vehicle-condition |
| modules | array | いいえ | `lenses` の非推奨の別名です。新しいコードでは `lenses` を優先してください。後方互換性のため、この名称も引き続き使用できます。 |
| refresh | boolean | いいえ | アカウント単位の投影キャッシュを回避し、要求されたすべての lens を LLM に強制的に再実行させます。ユーザーが明示的に「再分析」または「更新」を求めた場合にのみ `true` を渡してください。デフォルトではキャッシュを再利用してクレジットを節約します。 |
| imageUrl | string | いいえ | 公開取得可能な画像 URL。JPEG、PNG、GIF、WebP、AVIF、TIFF に対応します(HEIC はまだデコードできないため、先に JPEG に変換してください)。サーバー側で取得します。URL がある場合に使用します。 |
| imagePath | string | いいえ | MCP サーバーを実行しているマシン上のローカルファイルシステムの絶対パス。MCP はディスクからファイルを読み取り、バイト列を API に転送します。この MCP プロセスからアクセスできるユーザーのローカルディスクに写真がある場合に使用します。Agent のサンドボックスにアップロードされた写真(例:Claude の /mnt/user-data/uploads/...)には使用しないでください。ローカルにインストールされた MCP からは、そのサンドボックスを参照できません。Agent のサンドボックスにアップロードされたファイルには、`imageBase64`(小さい画像)または `imageUrl`(ホスト可能な任意サイズの画像)を優先してください。絶対パス(/Users/...)または ~/- で始まるパスを受け付けます。相対パスは拒否されます。 |
| imageBase64 | string | いいえ | Base64 エンコードされた画像バイト列(data: URL プレフィックスなし)。小さい画像(JPEG で約 150KB 未満/base64 文字数で約 200K 未満)に適しています。大きいファイルには `imageUrl` または `imagePath` を優先してください。大きな base64 文字列では、LLM 駆動のクライアントは MCP がペイロードを受信する前に出力トークンの予算を使い切ります。3.4MB の JPEG は約 4.57M 文字になります。 |
| includeEmbedding | boolean | いいえ | 類似度検索用の 1408 次元の埋め込みベクトルを含めます。レスポンスのトークン数が増えるため、必要な場合を除き false のままにしてください。 |
詳細
@phototology/mcp
ビジュアルインテリジェンスの永続メモリー。一度分析すれば、いつまでも記憶します。
インストールボタンをクリックすると、MCP サーバーをワンステップで追加できます。インストール後、
PHOTOTOLOGY_API_KEYの入力を求められます。その他のエディターについては、以下のセットアップセクションをご覧ください。
Phototology の MCP サーバーです。Phototology はビジュアルインテリジェンスのレジストリです。MCP に対応するエージェント(Claude Code、Cursor、VS Code Copilot、Claude Desktop)は、Phototology をツールとして呼び出します。写真は一度分析され、知覚ハッシュをキーとして登録されるため、同じアカウントの将来の呼び出しでは、いつでも無料で結果が返されます。
npx @phototology/mcp
対話型ウィザードで API キーを入力すると、選択したエディターの設定が書き込まれます。
Phototology を使わない場合と使う場合
使わない場合: 写真を理解する必要があるエージェントは、そのたびにビジョンモデルの料金を一から支払います。同じ画像、同じ質問でも、毎回全額がかかります。
使う場合: 初回の呼び出しでは、レンズごとに 1 クレジットが課金されます。その写真への以降の呼び出しでは、キャッシュされたレンズの結果が無料で返されます。レジストリは使うほどに価値が高まります。
Phototology を利用する場面
次のような場合に利用してください。
- エージェントが同じ写真を複数回理解する必要がある場合。レジストリにより、読み直しはすべて無料になります。
- 自由形式の文章ではなく、構造化フィールド(日付、状態、テキスト、場所など)が必要な場合。
- コストの予測可能性が重要な場合。すべてのツールとレンズで、クレジットコストが事前に開示されます。
次のような場合は、別のものをお探しください。
- ライブ動画やストリーミングカメラの映像が必要な場合。Phototology が分析するのは静止画像です。
- 特定の名前の人物を特定する必要がある場合。Phototology は人物を描写しますが、個人の身元照合は行いません。
- 画像についてモデルと会話したい場合。Phototology が返すのは対話ではなく、構造化データです。
Phototology とステートレスなビジョンラッパーの比較
| 機能 | ステートレスなビジョンラッパー | Phototology |
|---|---|---|
| 同じ写真への再度の呼び出し | 毎回、ビジョンモデルの料金がかかる | 知覚ハッシュをキーとしてキャッシュされ、いつまでも無料 |
| 呼び出しをまたいだメモリー | なし | 永続レジストリ(sha256 + pHash) |
| 出力 | 自由形式のテキスト | 構造化 JSON、レンズごとに 1 つのフィールドセット |
| エージェントのコスト | 不透明 | ツールごと、レンズごとのクレジットコストを開示 |
| 類似画像の検出 | なし | 完全一致(sha256)および知覚的(pHash)マッチング |
永続レジストリ、知覚ハッシュによる重複排除、そして無料での再読み込みが、両者の違いです。
Phototology が行わないこと
エージェントが適切に振り分けられるよう、明確に記載します。
- 本人確認は行いません。
peopleレンズが報告するのは身体的な観察結果と人数のみで、名前や顔の照合結果は報告しません。 - MCP 内での決済は行いません。
purchase_creditsはウォレットへのディープリンクを返します。Stripe での決済にはブラウザーが必要です。 - C2PA 署名にはまだ対応していません。
enrich_photoは EXIF、IPTC、XMP を書き込みます。formats: ["c2pa"]は拒否されます。 - リモートエンドポイントにはまだ対応していません。 サーバーは stdio 経由で動作します。ホスト型トランスポートは今後の対応項目です。
- ローカルモデルはありません。 すべての分析呼び出しは、ホストされている Phototology API に到達します。API キーとネットワーク接続が必要です。
7 つのツールの概要
| ツール | 機能 | コスト |
|---|---|---|
analyze_photo | 1 枚の画像に対して AI ビジョンを実行し、レンズごとの構造化された事実を返します。imageUrl、imageBase64、imagePath を受け付けます。 | レンズごとに 1 クレジット。同じ写真のキャッシュ済みレンズを再実行する場合は 0。 |
analyze_batch | 1 回の呼び出しで 1~200 枚の写真を分析します。内部では、URL ごとにまず検索を行い(同時実行 20 件)、その後、キャッシュにない写真を同時実行数に上限を設けて分析します(同時実行 5 件。API のユーザーごとの上限と一致します)。数千枚を処理する場合は、200 枚ずつに分けて繰り返します。imageUrls、imagesBase64、imagePaths(glob に対応)を受け付けます。{ summary, results } を返します。dryRun: true を渡すと、クレジットを消費せずにバッチのコストを確認できます。 | キャッシュにない写真 1 枚につき、レンズごとに 1 クレジット。キャッシュヒットは無料です。ドライランは無料です。 |
lookup_photo | 1 枚の写真がすでに分析済みかどうかを確認し、キャッシュにあるすべてのレンズの結果を返します。sha256、pHash、imageUrl、imageBase64、imagePath(順次検索)を受け付けます。 | 無料。 |
enrich_photo | キャッシュ済みのレンズ出力を写真の EXIF/IPTC/XMP メタデータに書き込み、構造化された情報をファイルとともに保持します。imageUrl、imageBase64、imagePath に加え、拡張版を新しいファイルとして保存する任意の outputPath を受け付けます(元のファイルには書き込みません。既存のファイルは overwrite: true でない限り拒否されます)。拡張した写真の小さな JPEG プレビューを返します。有効なコンテンツ認証情報を持つ写真は変更されません。分析結果は写真と同じ場所に <imagePath>.xmp として保存され(sidecarSavedTo)、または sidecar.xmp として返されます。この場合、mode: 'sidecar'、reason、credentials、および平易な説明の note も返されます。代わりにコピーへ書き込むには、breakCredentials: true を渡します。 | 呼び出しごとに 5 クレジット。 |
list_lenses | 説明と出力フィールドを含む、利用可能なレンズとスタックの一覧を返します。 | 無料。 |
get_credits | アカウントのクレジット残高を読み取ります。使用可能なクレジットの合計 total とそのドル換算額 usd に加え、保留中の処理がある場合は処理中に確保されている reserved も返します。 | 無料。 |
purchase_credits | ユーザーが開いてクレジットを追加購入できる、ウォレットへのディープリンクを返します。 | 無料。 |
呼び出しの流れ。 まず無料で確認します。1 枚の画像なら lookup_photo、バッチ処理の前なら get_credits を使います。キャッシュにないものだけを、1 枚なら analyze_photo、2 枚以上なら analyze_batch で分析します。enrich_photo で結果をファイルに書き込みます。list_lenses と purchase_credits は、いつでも呼び出せる無料の補助ツールです。
リソース
| URI | 提供する内容 |
|---|---|
phototology://lenses | レンズとスタックのカタログです。list_lenses が返すものと同じデータです。 |
phototology://photo/{sha256} | 1 件のレジストリレコードです。ハッシュ、すでに実行済みのレンズ、およびそのレシートを確認できます。読み取りは無料です。レジストリにない写真を読み取ると、PHOTO_NOT_IN_REGISTRY が返されます。 |
analyze_photo、analyze_batch、lookup_photo は、それぞれの呼び出しで指定した写真を phototology://photo/{sha256} リソースにリンクします。
レシート
分析結果と検索結果には receipts が含まれます。これは、どの写真に対して、どのモデルで、いつ、どのレンズが実行されたかを記録した署名付きレコードです。API が写真のコンテンツ認証情報を読み取った場合、結果には credentials も含まれます。レシートを確認するには、@phototology/sdk の verifyReceiptSignature(オフライン)または client.verifyReceipt(サーバーサイド、無料)を使用します。
現在レシートを受け取れるユーザー。 現時点でレシートを受け取れるのは pt_test_ キーのみです。これらのレシートは公開済みのサンドボックスキーで署名されます。このキーはライブデータを証明することはありません。確認できるのは連携であり、写真ではありません。本番環境ではライブ署名キーはまだ公開されていません。そのため、公開されるまでは、pt_live_ キーを使用した新規の分析では receipts: [] と警告 RECEIPT_UNAVAILABLE が返され、レジストリから提供された結果では(ライブレシートがまだ保存されていないため)RECEIPT_NONE_STORED が返されます。分析とその課金には影響しません。
分析結果の receipts が空の場合、warnings にその理由が示されます(新規の分析でレンズが何も出力しなかった場合、レシートも警告も発行されません)。
| コード | 意味 |
|---|---|
RECEIPT_UNAVAILABLE | この呼び出しのレシートに署名できませんでした。ライブ署名キーが設定・公開されていないか、署名に失敗したか、タイムアウトしました。分析自体は完了しています。 |
RECEIPT_NONE_STORED | 結果はレジストリから取得されましたが、要求されたレンズを対象とする保存済みレシートがありません(分析がレシート導入前に実行されたか、レシートなしで発行されました)。 |
RECEIPT_NOT_ISSUED_MULTI_IMAGE | 呼び出しで複数の画像が送信されました。レシートは画像1枚の呼び出しにのみ発行されます。 |
RECEIPT_NOT_ISSUED_BESPOKE | 呼び出しでカスタム抽出スキーマが使用されました。この種の呼び出しにはレシートは発行されません。 |
RECEIPT_NOT_ISSUED_NO_ACCOUNT | キーがアカウントにリンクされていないため、レシートに記載するレジストリレコードがありません。 |
analyze_photo の結果と、分析済みの analyze_batch の行には、これらの警告が含まれます。lookup_photo と、レジストリから提供されたバッチの行には、写真の保存済みレシートが含まれ、レシートに関する警告はありません。ここでリストが空の場合、その写真を対象とする保存済みレシートがないことを意味します。
enrich_photo の認証情報。 エンリッチ結果の credentials ブロックは、書き込み前に読み取られた入力写真について記述しています。breakCredentials: true の場合、入力に認証情報があると報告されていても、書き込まれたコピーには有効なコンテンツ認証情報が付与されなくなります。
料金
- 1クレジット = $0.01 = 写真1枚に対するレンズ1回の実行。 写真1枚にレンズを5つ重ねると、5クレジット = $0.05 です。
- サインアップ時に無料クレジット1,000を付与: メールアドレスの認証後に付与されます。1回限りで、定期付与ではありません。
- 検索、レンズの検出、残高の確認、購入リンクは常に無料です。
- キャッシュヒットは無料です。 同じ写真に対して同じレンズを再実行すると、キャッシュ済みの出力が無料で返されます。レジストリにより、セッションをまたいでも再実行は無料です。
- カスタムスキーマによる抽出は画像1枚につき5クレジット(追加で重ねるレンズ1つにつき1クレジット)。
- モデレーションは無料で、常時有効です。 これは安全性を支えるインフラであり、課金対象にはなりません。
クレジットパック(すべて1クレジットあたり$0.01、ボリューム割引なし)
| パック | クレジット | 価格 |
|---|---|---|
| Starter | 1,000 | $10 |
| Pro | 10,000 | $100 |
| Business | 100,000 | $1,000 |
初回購入は2倍になります。 初めて購入するパックでは、クレジットが2倍付与されます。Starterを$10で購入すると、初回は2,000クレジットを受け取れます。サブスクリプションはなく、パックによる従量課金のみです。
ローカルファイル
画像を受け付ける3つのツール(analyze_photo、analyze_batch、lookup_photo)は、いずれも3種類の入力方法に対応しています。写真を受け取った方法に合ったものを選んでください。
| 入力フィールド | 使用する場面 |
|---|---|
imageUrl | 写真が誰でも取得できるURLにある場合。 |
imagePath | 写真がユーザーのローカルディスク上にあり、MCP サーバーを実行しているマシンから見える場合(通常はユーザーのノートパソコン)。絶対パス(/Users/...)または ~/ で始まるパス(~/photos/...)を渡します。MCP がファイルを読み込み、検証して、バイト列を転送します。エージェントのサンドボックス内のパス(例:Claude の /mnt/user-data/uploads/...)には使用できません。このサンドボックスはローカルにインストールされた MCP からは見えません。エージェントのサンドボックスにアップロードした画像には、imageBase64(小さな画像)または imageUrl(サイズを問わずホスト可能な画像)を使用してください。 |
imageBase64 | 画像のバイト列がすでに base64 文字列としてメモリ上にある場合。実用的な目安は約50〜150KBのJPEG/base64で約70〜200K文字です。これを超えると、MCP がペイロード全体を受け取る前に、LLM駆動のクライアントが出力トークンの予算を使い果たすことがあります(3.4MBのJPEGは約4.57M文字になります)。大きな画像には imageUrl または imagePath をおすすめします。 |
一括処理では、ローカルパスに imagePaths: string[](~/vacation/*.jpg のようなグロブに対応)、base64の配列に imagesBase64: string[] を使用し、imageUrls と自由に組み合わせられます。
imagePath または imageBase64 を指定した lookup_photo は、sha256→pHashのカスケードを透過的に実行します。常に無料で、完全一致と知覚的に類似した一致の両方を確認します。
レジストリは次の順序で照合します。まず sha256(同一バイト列)、次にデコード済みピクセル(同じ画像でメタデータが異なるもの)、次にPDQ(再エンコード、回転、反転などによる近似重複。距離31以内で、PDQ品質が50以上の画像)、最後にpHashです。これらの照合に先立ち、lookup_photo は enrich_photo がファイルの IPTC Extension(RegistryID)に書き込んだレジストリIDを試します。そのため、加工済みのコピーからでも元のレコードを見つけられます。一致した場合は matchedBy: "registryId" と表示されます。enrich_photo は、書き込んだ場合に結果で registryId を報告します。
画像1枚あたりの上限:生データで10MB。一括処理の上限:1回につき合計200件。対応形式:JPEG、PNG、GIF、WebP、AVIF、TIFF。APIでデコードできるようになるまで、HEIC/HEIFは変換方法のヒントとともに拒否されます。
セットアップ:エディターを選択
Claude Code
ターミナルで次のコマンドを一度だけ実行します。
claude mcp add phototology --scope user -e PHOTOTOLOGY_API_KEY=pt_live_... -- npx -y @phototology/mcp
これによりサーバーが ~/.claude.json に書き込まれ、すべてのプロジェクトから利用できるようになります。代わりに --scope project を指定すると、プロジェクトのルートに .mcp.json が書き込まれ、リポジトリと共有されます。手動で編集する場合、どちらのファイルも次の形式です。
{
"mcpServers": {
"phototology": {
"command": "npx",
"args": ["-y", "@phototology/mcp"],
"env": { "PHOTOTOLOGY_API_KEY": "pt_live_..." }
}
}
}
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"phototology": {
"command": "npx",
"args": ["-y", "@phototology/mcp"],
"env": { "PHOTOTOLOGY_API_KEY": "pt_live_..." }
}
}
}
Cursor
プロジェクト内の .cursor/mcp.json(またはグローバル設定の ~/.cursor/mcp.json):
{
"mcpServers": {
"phototology": {
"command": "npx",
"args": ["-y", "@phototology/mcp"],
"env": { "PHOTOTOLOGY_API_KEY": "pt_live_..." }
}
}
}
VS Code Copilot
.vscode/mcp.json:
{
"servers": {
"phototology": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@phototology/mcp"],
"env": { "PHOTOTOLOGY_API_KEY": "pt_live_..." }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"phototology": {
"command": "npx",
"args": ["-y", "@phototology/mcp"],
"env": { "PHOTOTOLOGY_API_KEY": "pt_live_..." }
}
}
}
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"phototology": {
"command": "npx",
"args": ["-y", "@phototology/mcp"],
"env": { "PHOTOTOLOGY_API_KEY": "pt_live_..." }
}
}
}
Codex CLI
~/.codex/config.toml:
[mcp_servers.phototology]
command = "npx"
args = ["-y", "@phototology/mcp"]
[mcp_servers.phototology.env]
PHOTOTOLOGY_API_KEY = "pt_live_..."
設定を編集したら、エディターを再起動してください。phototology の下に7つのツールが登録されているはずです。
最初の5分
次のプロンプトを順番に試してください。
- 確認する。 「phototology MCPを使って、利用できるレンズを見せてください。」 エージェントは
list_lensesを呼び出し、利用可能なすべてのレンズとスタックを表示します。 - 残高を確認する。 「phototologyのクレジットはいくつ残っていますか?」 エージェントは
get_creditsを呼び出し、利用可能なクレジット残高を報告します。 - 低コストで分析する。 「この写真をdatingレンズだけで分析してください:
<url>。」 エージェントはlenses: ["dating"]を選び、カタログ全体を実行する代わりに1クレジットを使用します。 - 無料で再検索する。 キャッシュ済みのレンズがすでに回答できる別の質問を指定して、同じURLを再度使います。クレジットはかかりません。
- クレジット切れ。 クレジットを使い切って、別の分析を試します。エージェントはウォレットへのディープリンクを含む構造化エラーを受け取り、適切に表示します。
連携スキル
5 つのオプションスキルがパッケージ内の node_modules/@phototology/mcp/skills/ に含まれています。インストールするには、いずれかを Claude のスキルディレクトリ(~/.claude/skills/<skill-name>/)にコピーしてください。
phototology:lookup-first:クレジットを消費する前に、必ずレジストリを確認します(写真 1 枚の場合)。phototology:check-credits:大規模なバッチ処理の前に残高を確認します。phototology:smart-stack:特定の質問に対して、最も低コストなレンズの組み合わせを選びます。phototology:photo-shared:ユーザーが画像を共有、添付、ドロップ、または参照したときに有効になります。写真を Phototology に渡し、最も低コストで正確な回答を得ます。phototology:batch-analyze:写真が 2 枚以上あるすべてのジョブに適用されます。analyze_photoを繰り返し呼び出す代わりにanalyze_batchを呼び出します。最初に検索し、未登録の写真のみを分析して、クレジットの節約額を表示します。
インストールすると、コンテキストが一致したときにエージェントがこれらを呼び出します。
オプション:画像添付時の自動トリガー(Claude Code)
画像を添付した瞬間に Claude Code が Phototology を自動的に提案するようにしたい場合(モデルの判断に任せる必要はありません)は、次のフックを ~/.claude/settings.json に追加してください。
{
"hooks": {
"UserPromptSubmit": [
{
"matcher": "image",
"command": "echo 'User shared an image. Consider phototology:photo-shared to route it through the registry-first analysis path.'"
}
]
}
}
このフックは、画像を含むすべてのプロンプトにシステムヒントを挿入し、モデルがほかのものを選ぶ前に phototology:photo-shared スキルを使うよう促します。モデル自身に判断させたい場合は、フックを追加しないでください。
レンズリファレンス
| レンズ | 対応する出力フィールド |
|---|---|
dating | estimatedDate、techAnchors、temporalMarkers、title、genre、caption、dateAnchors、season、holiday、event、visibleDates、reproduction |
people | physicalObservations、collectionDynamics、peopleCount |
location | location |
atmosphere | atmosphere、emotions、warmCaption、semanticDescription |
entities | entities |
accessibility | accessibility |
photo-quality | quality、visualFaults、rotation、documentClassification、scan |
text-content | textContent |
composition | composition |
moderation | moderation |
describe | describe |
condition | condition |
authenticity | authenticity |
color-palette | colorPalette |
automobile | automobile |
vehicle-condition | overallCondition、componentGrades、observations、accidentIndicators、photoQuality、missingViews、vehicleContext、photos、sellerSummary |
これらは analyze_photo の lenses: [...] として渡すか、スタック(full-analysis、quick-scan、automobile、claims、property、ecommerce、memorial、vehicle-condition)を使って複数をまとめて指定できます。ツールスキーマのスタック列挙型が正式な一覧です。新しいレンズは公開時にここへ自動的に追加されます。
命名に関する注意。 以前のツール名は
list_modulesで、以前の引数名はmodules/presetでした。現在の名前はlist_lenses/lenses/stackです。名称変更期間中は、analyze_photoで旧名称も非推奨のエイリアスとして引き続き使用できます。新しいコードでは新名称を使用してください。
差分課金
Phototology は、知覚ハッシュをキーとして、アカウントごとにすべての写真を記憶します。同じ画像に対する 2 回目の呼び出しでは、すでに実行済みのレンズにクレジットはかかりません。LLM を呼び出すのは新しいレンズのみです。キャッシュを回避して再実行するには、refresh: true を渡してください。
環境変数
| 変数 | 必須 | 説明 |
|---|---|---|
PHOTOTOLOGY_API_KEY | はい | API キー(pt_live_... または pt_test_...)です。アカウントキーは https://phototology.com/signup で登録してください。 |
PHOTOTOLOGY_BASE_URL | いいえ | API のベース URL です。デフォルト:https://api.phototology.com。 |
PHOTOTOLOGY_MCP_NO_TELEMETRY | いいえ | 匿名のクライアント検出テレメトリを無効にするには、1 を設定します(以下を参照)。 |
DO_NOT_TRACK | いいえ | テレメトリを無効にするには、1 を設定します。PHOTOTOLOGY_MCP_NO_TELEMETRY と同じ効果があり、多くの CLI が採用しているツール横断的な慣例に従っています。 |
PHOTOTOLOGY_MCP_ALLOWED_DIRS | いいえ | サーバーが写真の読み取り元および補完したコピーの書き込み先として使用できるフォルダーです。区切り文字は :(Windows では ;)です。例:/Users/me/Pictures:/Volumes/Archive。未設定の場合、ローカルのすべてのパスが対象になります。パスはシンボリックリンクの解決後にチェックされるため、許可フォルダー内のリンクが別の場所を指している場合は、PATH_OUTSIDE_ALLOWED_DIRS で拒否されます。 |
pt_test_ で始まるキーはテスト用サンドボックスを使用します(即時応答、費用ゼロ、ゴールデンフィクスチャ)。サンドボックスでは、IP ごとに 1 分あたり 2 件、1 日あたり 10 件のリクエストが許可されます。上限を超えると、ツールは待機せずに retryAfterSeconds を含む RATE_LIMITED エラーを返します。API からのすべてのツールエラーは、1 行の JSON(code、retryable、および retryAfterSeconds や actionUrl などのフィールド)に続いて文で構成されます。エラー結果に structuredContent は含まれません。サンドボックスキーではレジストリや残高を読み取ったり、写真にメタデータを書き込んだりできません。lookup_photo、get_credits、enrich_photo は SANDBOX_KEY エラーを返します。これらの操作には、https://phototology.com/signup でアカウントキーを登録してください。
匿名テレメトリ
MCP サーバーがエディターとの初期化ハンドシェイクを完了すると、エディターが申告した名前とバージョン(例:claude-desktop 0.7.0、cursor 0.42)に加えて、MCP パッケージのバージョンを api.phototology.com に送信し、どのクライアントが接続しているかを確認できるようにします。各ツール呼び出しの後には、ツール名、呼び出しの成否、所要時間、失敗した場合のエラーコード、クレジット消費数、実行したレンズ数、送信した写真の数、キャッシュヒット数、および analyze_photo の呼び出しがキャッシュに完全一致したかどうかを含むイベントを 1 件送信します。これは、ツール呼び出しがすでに使用しているものと同じドメインです。サードパーティの SDK は同梱されておらず、使用する認証情報は API キーのみです。画像の内容、ファイルパス、プロンプト、会話テキスト、ツールの入力や出力は送信されません。
無効にするには、PHOTOTOLOGY_API_KEY と同じ環境変数ブロックに PHOTOTOLOGY_MCP_NO_TELEMETRY=1 または DO_NOT_TRACK=1 を設定します。プロセスの実行時に NODE_ENV=test が設定されている場合も、テレメトリは無効になります。
セキュリティモデル
ポリシーの全文は SECURITY.md にあります。概要は次のとおりです。
- 読み取るもの。 絶対パス(または
~/パス)で指定したファイルのみです。PHOTOTOLOGY_MCP_ALLOWED_DIRSが設定されている場合は、シンボリックリンクの解決後にチェックしたうえで、そのフォルダー内のファイルのみが対象です。enrich_photoは、指定したoutputPath、または有効なコンテンツ認証情報を持つ写真と同じ場所にある<imagePath>.xmpにのみ書き込みます。設定されている場合は、これらのフォルダー内に限られます。 - 送信するもの。 画像のバイトデータ(または指定した URL やハッシュ)を
api.phototology.comに送信します。また、匿名テレメトリ に記載されたテレメトリペイロードも送信します。 - 決して送信しないもの。 ファイルパス、テレメトリ内のツール入力や出力、会話テキストです。
- 境界として機能しないもの。
readOnlyHintなどのツール注釈はエディターへのヒントであり、強制されるものではありません。サーバー自体はユーザーの権限で実行され、サンドボックスではありません。エディターのツール確認を有効にしておいてください。 - 脆弱性の報告。 [email protected] にメールしてください。公開イシューは作成しないでください。
よくある質問
analyze_photo が lenses と modules の両方を受け付けるのはなぜですか?
ブランド名は 2026-04 に「module」から「lens」に統一されました。名称変更中は MCP のインターフェースで両方の名前を受け付けています。SDK では引き続き modules を使用します。新しいコードでは lenses を使用してください。
モデレーションが課金対象にならないのはなぜですか? モデレーションは、安全性を確保するためのインフラであり、任意で利用する機能ではありません。CSAM と違法コンテンツの検出は、すべての分析で実行されます。これを料金項目にすると、望ましくないインセンティブが生まれます。
get_credits と lookup_photo の違いは何ですか?
get_credits はアカウント残高を確認します。lookup_photo は特定の画像が以前に分析されたことがあるかを確認します。どちらも無料ですが、確認する内容は異なります。
purchase_credits がチェックアウトを完了せず、「ディープリンク」を返すのはなぜですか?
Stripe のチェックアウトにはブラウザーが必要です。MCP は決済を完了できないため、ユーザーがツールの返す URL を開く必要があります。
リンク
- TypeScript SDK:
npm install @phototology/sdk - API ドキュメント
- OpenAPI 仕様
- GitHub
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。