art-institute-chicago-mcp-server について
art-institute-chicago-mcp-serverは、シカゴ美術館のコレクション情報をMCPクライアントに提供します。作品、作家、展覧会に加え、音声ガイドを検索でき、結果には出典と権利情報が含まれます。
主な機能
- 01複数の条件による作品検索
- 02作品詳細、来歴、画像リンクの取得
- 03作家と展覧会の検索
- 04音声ガイドの文字起こし検索
- 05フィルター語彙と作品数の確認
活用シーン
- 01主題や年代から収蔵作品を探す
- 02作品の来歴と画像の権利を確認する
- 03作家の情報や代表作を調べる
- 04展覧会記録や音声ガイドを検索する
MCP 対応
作品、作家、展覧会、音声ガイド、フィルター語彙の検索ツールと、作品のJSONリソースをMCPクライアントに提供します。stdioとStreamable HTTPに対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://art-institute-chicago.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-art-institute-chicago https://art-institute-chicago.caseyjhand.com/mcp{"mcpServers":{"cyanheads-art-institute-chicago":{"type":"http","url":"https://art-institute-chicago.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-art-institute-chicago":{"type":"http","url":"https://art-institute-chicago.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-art-institute-chicago":{"type":"http","url":"https://art-institute-chicago.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-art-institute-chicago":{"serverUrl":"https://art-institute-chicago.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
6| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | 返すページ番号(1 始まり)。ページ番号と適用された limit の積は 1,000 以下である必要があります。 |
| sort | enum | いいえ | クエリテキストがある場合、relevance はクエリテキストとの関連度順に並べます。ない場合は美術館での人気順に並べます。date_asc と date_desc は開始年で並べ替えます。relevance | date_asc | date_desc |
| limit | integer | いいえ | ページごとの要求行数(0~1,000)。返されるのは最大 12 件です。0 にすると totalCount と facets のみを返します。 |
| query | string | いいえ | タイトル、アーティスト、説明、来歴、その他のカタログ項目に照合するテキスト。すべての語句が一致する必要があります。"exact phrase"、-exclude、a | b に対応しています。 |
| style | string | いいえ | スタイル名は artic_lookup_vocabulary の表記に合わせてください(大文字と小文字は区別しません)。例:Impressionism。優先スタイルまたは別のスタイルに一致します。 |
| theme | string | いいえ | テーマ名は artic_lookup_vocabulary の表記に合わせてください(大文字と小文字は区別しません)。例:Women artists。 |
| artist | string | いいえ | アーティスト名または文化名。クレジットされたすべてのアーティストに照合されます(すべての語句が一致する必要があります)。 |
| facets | array | いいえ | フィルター後の結果に対して計算するファセット件数(各項目の上位 15 件):department、artwork_type、style、subject、classification、place_of_origin、artist。配列またはカンマ区切りの文字列を指定します。 |
| gallery | string | いいえ | 作品が展示されているギャラリー。例:Gallery 240(240 のみを指定した場合も Gallery 240 として扱われます)。ギャラリー情報があるのは展示中の作品のみです。 |
| subject | string | いいえ | テーマ名は artic_lookup_vocabulary の表記に合わせてください(大文字と小文字は区別しません)。 |
| year_to | integer | いいえ | 最も遅い年。作品の年代範囲が year_from から year_to までの範囲と重なる場合に一致します。紀元前は負の値で指定します。 |
| material | string | いいえ | 素材名は artic_lookup_vocabulary の表記に合わせてください(大文字と小文字は区別しません)。例:ink、gold leaf。 |
| artist_id | integer | いいえ | artic_search_artists またはアーティストのファセット行にある Agent id。優先される署名とその他の署名に一致します。 |
| has_image | boolean | いいえ | 画像がある作品のみ。 |
| technique | string | いいえ | 技法名は artic_lookup_vocabulary に記載された名称を指定します(大文字と小文字は区別されません)。例:black-and-white photography、plain weaving。 |
| year_from | integer | いいえ | 最も早い年。作品の日付範囲が year_from から year_to までの範囲と重なる場合に一致します。紀元前は負の数で指定します。 |
| department | string | いいえ | 部門名は artic_lookup_vocabulary に記載された名称を指定します(大文字と小文字は区別されません)。例:Prints and Drawings。 |
| artwork_type | string | いいえ | 作品タイプ名は artic_lookup_vocabulary に記載された名称を指定します(大文字と小文字は区別されません)。例:Painting、Print。 |
| on_view_only | boolean | いいえ | 現在、館内で展示されている作品のみ。 |
| classification | string | いいえ | 分類名は artic_lookup_vocabulary に記載された名称を指定します(大文字と小文字は区別されません)。例:oil on canvas、etching。 |
| place_of_origin | string | いいえ | 原産地は artic_lookup_vocabulary に記載された名称を指定します(大文字と小文字は区別されません)。例:france。 |
| public_domain_only | boolean | いいえ | パブリックドメインの作品のみ。画像は CC0 です。 |
詳細
@cyanheads/art-institute-chicago-mcp-server
MCP を通じて、シカゴ美術館のコレクション(美術作品、アーティスト、展覧会、音声ガイド)を検索します。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://art-institute-chicago.caseyjhand.com/mcp
概要
シカゴ美術館のコレクションには、約 133,000 点の美術作品のほか、アーティスト、展覧会、音声ガイドのスポットが含まれています。フィルターとファセット件数を使って検索し、来歴や IIIF 画像 URL を含む完全なレコードを読み込み、音声ガイドの文字起こしを検索できます。API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
artic_search_artworks | テキストとフィルターで美術作品を検索します。ファセット件数と日付順の並べ替えに対応しています |
artic_get_artworks | 最大 10 点の美術作品について、説明、来歴、履歴、権利状況付きの画像 URL、関連メディアを含む完全なレコードを取得します |
artic_search_artists | 名前または ID でアーティスト、文化、組織を検索します。利用可能な Getty ULAN 識別子、生没年、美術作品数、代表作品を確認できます |
artic_search_exhibitions | テキスト、日付、美術作品 ID、アーティスト ID で、過去、開催中、今後の展覧会を検索します |
artic_search_audio_guide | テキストで音声ガイドのスポットを検索します。タイトル、MP3 URL、文字起こしを取得できます |
artic_lookup_vocabulary | 検索フィルターで使用できる値と、それぞれに該当する美術作品数を一覧表示します |
リソース
| リソース | 説明 |
|---|---|
artic://artworks/{id} | API のライセンス文と説明の帰属表示を含む、美術作品 1 点の JSON レコード |
artic_get_artworks は、リソースを表示しないクライアント向けに同じレコードを返します。
機能リファレンス
検索と語彙の検索では最大1,000件まで指定でき、適用された上限がレスポンスに記載されます。作品は12件、アーティスト検索と展覧会は25件、音声ガイドは2件、語彙は100件です。next_page を使って次のページを取得するときも、同じリクエスト上限を指定してください。ページ数と適用された件数の積は1,000以内にする必要があります。語彙が上限に達した場合は、contains で絞り込んでください。
artic_search_artworks tool
query(すべての単語が一致する必要があります。"exact phrase"、-exclude、a | bが使用できます)と、フィルターartist、artist_id、department、artwork_type、style、subject、classification、material、technique、theme、place_of_origin、gallery、year_from/year_to(期間の重複で照合。BCE は負の値)、public_domain_only、on_view_only、has_imageを指定できます。複数指定した場合は AND で結合されます- 1ページあたり最大12件(デフォルトは10件)で、最初の1,000件の一致結果が対象です。
sortはrelevance、date_asc、date_descのいずれかです。クエリ文字列なしで関連度順が指定された場合、sort_appliedにはpopularityと報告されます facetsを指定すると、最大7フィールドについて上位15件の値が追加されます(artistはクレジットされたアーティスト全員を集計し、各行にはartist_idが含まれます)。limit: 0を指定すると件数のみが返されます
artic_get_artworks tool
idsには最大1,000件を指定できます(カンマ区切りの文字列は最大100,000文字)。空欄と重複は除外され、作品ページのURLは ID として読み取られます。最初の10件が取得されます。sectionsでは、description と provenance(デフォルト)、exhibition_history、publication_history、catalogue から選択できます- レコードはリクエスト順に返されます。
missing_idsには美術館が所蔵していない ID が、deferred_idsにはレスポンスの予算の都合で保留されたレコードと未処理の ID が列挙されます。これらは同じツールに再度渡してください include_related_media(デフォルトで有効)を指定すると、関連する講演と音声ガイドのスポットが最大20件読み込まれます。CC BY の解説テキストが返される場合は、常にdescription_attributionが含まれます
artic_search_artists tool
query(名前のすべての単語が一致する必要があります)またはidsを指定します。両方は指定できません。idsには最大1,000件を指定でき(カンマ区切りの文字列は最大100,000文字)、最初の25件が取得されます。クエリモードではartists_only(デフォルトはtrue)、born_from/born_to、および1ページあたり最大25名のエージェントを指定できます- 各エージェントには
artwork_count、最大3件のsample_works(美術館の注目作品が先頭)、生没年、alt_namesが含まれます。ID モードではmissing_idsとdeferred_idsが報告されます。次回の呼び出しでは、これらを ID として渡してください ulan_idは、美術館が記録している場合の Getty ULAN 識別子です。該当する記録は限られており、他のツールで使用される美術館のidとは異なります
artic_search_exhibitions tool
query、when(current、upcoming、past、またはデフォルトのany)、date_from/date_to(YYYY-MM-DD。会期の重複で照合)、および完全一致のartwork_id/artist_idフィルターを指定できます。複数指定した場合は AND で結合されます。最初の1,000件の一致結果から、1ページあたり最大25件が返されます- 関連性フィルターが対象とするのは、美術館に記録されたリンクです。リンクがないからといって、作品やアーティストが展覧会に出品されたことが一度もないとは限りません
sortはrelevance、start_desc、start_ascのいずれかです。デフォルトでは、クエリがある場合はrelevance、ない場合はstart_descで並べ替えられます。statusは美術館によるラベルであり、展覧会が開催中かどうかを示すものではありません(開催状況はwhenで指定します)- 美術館が記録している場合、各行には日付、ギャラリー、概要、ウェブページ、画像、
artist_ids、および展示作品artworksが含まれます
artic_search_audio_guide tool
queryは必須で、スポットのタイトルと書き起こしが検索対象になります(すべての単語が一致する必要があります)。1ページあたり最大2件のスポット全体が返されます(デフォルトは2件)- 各スポットには
title、audio_url(MP3)、transcriptが含まれますが、作品 ID は含まれません。すべてのレスポンスにlicense_textとsource_citationが含まれます(コンテンツは非営利の教育目的および個人利用が対象です)
artic_lookup_vocabulary ツール
vocabularyはdepartment、artwork_type、style、subject、classification、material、technique、theme、place_of_origin、galleryのいずれかです。任意でcontains部分文字列(大文字・小文字とアクセント記号を区別しないため、appliqueでappliqué (technique)が見つかります)、public_domain_only、最大100件の値を指定できます(デフォルトは25件)- 値は
artwork_countとともに頻度の高い順で返され、同名のartic_search_artworksフィルターが受け付けるものと完全に同じ形式です。filter_paramはそのフィルター名を示します
artic://artworks/{id} リソース
application/jsonとして{ artwork, license_text, description_attribution?, notice? }を返します。artworkは、デフォルトのセクションと関連メディアを含むartic_get_artworksのレコードです- 不明な ID を指定すると
artwork_not_foundエラーになります。ID はartic_search_artworksから取得できます
機能
@cyanheads/mcp-ts-core を基盤とし、stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースに対応した構造化ログを備えています。
Art Institute 固有の機能:
- Art Institute of Chicago の公開 API(
api.artic.edu/api/v1)をキーなしで利用できます。IIIF 画像 URL は各レコードから構築され(すべての画像で843 px、パブリックドメインの作品では1686 px と IIIF マニフェスト)、画像の取得は行いません - API が公表している毎分60リクエストの上限を下回るよう、共有リクエストペーサーを使用します。20秒の期限内で一時的な障害を再試行し、レスポンスをプロセス内にキャッシュします(レコードは6時間、検索結果は15分、語彙は24時間)
- テキスト検索では、すべての単語が一致する必要があるため、合計件数は実数で、該当なしの場合はヒット数が0になります。結果は美術館の関連度順を維持します
- 美術館のデータにある仮の年(−8000から2100の範囲外)は、出力、年フィルター、日付順の並べ替えから除外されます。日付については
date_displayが常に正となります
エージェント向けの出力:
- 権利情報をデータとともに返します。すべての画像に
image.rights(public_domain/in_copyright)を含め、再利用が許可されている場合にのみ1686 pxの URL を返します。また、API のlicense_textをそのまま返し、CC BY のテキストが返される場合はdescription_attributionを、音声ガイドの結果にはsource_citationを含めます - 失敗ではなく部分的な結果を返します。
artic_get_artworksはmissing_idsとdeferred_idsを報告します。また、関連メディアやアーティスト件数などの二次検索に失敗した場合も、何が欠落しているかを示すnoticeとともにプライマリレコードを返します - 次に行う操作がわかるページネーションに対応します。
totalCount、has_more、next_pageに加え、次のページ、1,000件の上限、またはヒット数が0件の場合に緩和すべきフィルターを知らせるnoticeを返します
データとライセンス
Art Institute of Chicago は、提供する情報の種類ごとに API データのライセンスを定めており、サーバーはすべての作品、アーティスト、展覧会、音声ガイドの結果とともに、API 独自の license_text をそのまま渡します。
| コンテンツ | 利用条件 |
|---|---|
| 作品のメタデータ、アーティスト、展覧会、語彙の用語、関連メディア | CC0 |
作品の description テキスト | CC BY 4.0:Art Institute of Chicago をクレジットし、レコードの web_url を引用してください |
| 作品画像 | パブリックドメインの作品のみ再利用できます(image.rights: "public_domain"、CC0)。それ以外の画像については権利の確認が必要です |
| 音声ガイドのコンテンツ | 非商用の教育目的および個人利用に限ります。著作権表示を残し、出典を引用してください |
このサーバーは独立したプロジェクトであり、Art Institute of Chicago とは提携しておらず、同館からの推奨も受けていません。
既知の制限事項
- 認証済みキーがない場合、検索結果は先頭の1,000件までしか取得できません。範囲の広い質問には、フィルターやファセットが必要です。
- API のリクエスト上限は送信元 IP あたり毎分 60 件のため、同じ IP を使うすべてのクライアントで共有されます。20 秒の制限時間内に開始できない呼び出しは、
rate_limitedとして失敗します。 - 学芸員による解説は限られています。作品の約 10%にしか
descriptionがなく、一般的なサンプルでは 94%に来歴情報がありません。アーティストの約 1%にしか略歴がなく、国籍フィールドもありません。あるのはartist_displayの文章のみです。 - 約 15 点の作品にはプレースホルダーの年が設定されており、約 4,900 点には日付がありません。どちらも年フィルターには一致しません。
- 一部の用語のタイトルは、美術館のデータ内で 40 文字で切り詰められています(
gelatin silver (developing-out-paper) pr)。artic_lookup_vocabularyが一覧表示する値を渡してください。 - API のファイアウォールは、
<script>などのマークアップを含むテキストのリクエストを拒否します。この呼び出しはrequest_blockedとして失敗します。 - 展覧会の約 4%に作品が掲載されています。
- オーディオガイドの各スポットには作品へのリンクがありません。タイトルがファイル名になっているものや、スペイン語の文字起こしもあります。
- 美術館が画像を非公開にしたり、差し替えたりすると、画像 URL が解決できなくなることがあります。また、関連度順は美術館のランキングに従うため、変わる場合があります。
はじめに
公開ホストインスタンス
公開インスタンスは https://art-institute-chicago.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP で提供されており、クライアントごとに設定形式が異なります。
Claude Code の場合:
claude mcp add --transport http art-institute-chicago-mcp-server https://art-institute-chicago.caseyjhand.com/mcp
Cline の場合(cline_mcp_settings.json):
{
"mcpServers": {
"art-institute-chicago-mcp-server": {
"type": "streamableHttp",
"url": "https://art-institute-chicago.caseyjhand.com/mcp"
}
}
}
Cursor の場合(mcp.json):
{
"mcpServers": {
"art-institute-chicago-mcp-server": {
"url": "https://art-institute-chicago.caseyjhand.com/mcp"
}
}
}
Claude Desktop では、Settings → Connectors からリモートサーバーを追加します。
ホストインスタンスを呼び出すすべてのクライアントで、api.artic.edu へのリクエスト上限を毎分 50 件まで共有します。継続的に利用する場合は、ご自身のインスタンスを実行してください。
セルフホスト/ローカル
以下を MCP クライアントの設定ファイルに追加してください。API キーは不要です。AIC_CONTACT は美術館から連絡を取る方法を指定します(設定を参照)。
{
"mcpServers": {
"art-institute-chicago-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/art-institute-chicago-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"AIC_CONTACT": "[email protected]"
}
}
}
}
または npx を使用する場合(Bun は不要です):
{
"mcpServers": {
"art-institute-chicago-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/art-institute-chicago-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"AIC_CONTACT": "[email protected]"
}
}
}
}
または Docker を使用する場合:
{
"mcpServers": {
"art-institute-chicago-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "-e", "[email protected]", "ghcr.io/cyanheads/art-institute-chicago-mcp-server:latest"]
}
}
}
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以上(または Node.js v24+)。
- API キーやアカウントは不要です。Art Institute API は、クライアントに連絡先の提示を求めています。
AIC_CONTACTにメールアドレスまたは URL を設定してください。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/art-institute-chicago-mcp-server.git
- ディレクトリに移動します:
cd art-institute-chicago-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set AIC_CONTACT
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
AIC_CONTACT | 美術館から連絡を取るためのメールアドレスまたは URL。AIC-User-Agent ヘッダーで送信されます。印字可能な ASCII 文字のみ使用できます。これ以外の場合、サーバーは起動を拒否します。デプロイごとに独自の値を設定してください。 | https://github.com/cyanheads/art-institute-chicago-mcp-server |
AIC_REQUESTS_PER_MINUTE | api.artic.edu への 1 分あたりの送信リクエスト数。1~600 に設定できます。API が公表している上限の 60 件以内に収めてください。美術館からより高い上限が認められた場合にのみ引き上げてください。 | 50 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモード:stateless、stateful、または auto。サーバーが宣言する動作設定を上書きします。 | stateless |
MCP_AUTH_MODE | 認証:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、warning、error など)。 | info |
LOGS_DIR | ログファイルのディレクトリ(Node.js のみ)。 | <app-root>/logs |
STORAGE_PROVIDER_TYPE | ストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。 | in-memory |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
すべてのサーバー設定と共通フレームワークのオーバーライドについては、.env.example を参照してください。
サーバーの実行
ローカル開発
-
本番環境向けバージョンをビルドして実行する:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
チェックとテストを実行する:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツールとリソースを登録し、サーバーの指示を設定して、API サービスを起動および停止します。 |
src/config | Zod を使用して AIC_CONTACT と AIC_REQUESTS_PER_MINUTE を解析および検証します。 |
src/mcp-server/tools | ツール定義(*.tool.ts)と、ツール間で共有する作品の出力スキーマです。 |
src/mcp-server/resources | artic://artworks/{id} リソースです。 |
src/services/aic | Art Institute API クライアントです。アクセス間隔の調整、再試行、レスポンスキャッシュ、HTML からテキストへの変換、IIIF URL の構築、作品およびアーティストのレコード作成を行います。 |
tests/ | src/ の構成に対応する単体テストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャルールについては、CLAUDE.md を参照してください。概要は次のとおりです。
- ハンドラーは例外をスローし、フレームワークがキャッチします。ツールのロジックで
try/catchを使用しないでください。 - ログには
ctx.logを、ページングや通知にはctx.enrichを使用してください。 - 新しいツールとリソースは、
src/mcp-server/*/definitions/index.tsのバレルファイルに登録してください。 - 外部 API 呼び出しはラップしてください。生データを検証し、ドメイン型に正規化してから、出力スキーマに沿って返します。不足しているフィールドを捏造しないでください。
コントリビューション
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
このプロジェクトは Apache 2.0 License のもとでライセンスされています。詳細については、LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。