pubchem-mcp-server について
pubchem-mcp-serverは、PubChemの化合物やバイオアッセイデータを研究者や化学情報ワークフローに提供します。多様な構造検索に加え、安全性、生物活性、相互参照、分子構造を取得できます。
主な機能
- 01名称、識別子、構造による化合物検索
- 02物理化学的性質と薬物類似性の取得
- 03GHS危険有害性分類の照会
- 04生物活性と標的データの絞り込み
- 05バイオアッセイとエンティティ概要の検索
活用シーン
- 01候補化合物の検索と性質の確認
- 02化学物質の危険有害性情報の確認
- 03アッセイ結果と分子標的の調査
- 04化合物の構造図や三次元構造の取得
MCP 対応
STDIOまたはStreamable HTTP経由で、PubChem検索用の10個のツールと6個のリソースを公開し、公開ホスト型サーバーも提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://pubchem.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-pubchem https://pubchem.caseyjhand.com/mcp{"mcpServers":{"cyanheads-pubchem":{"type":"http","url":"https://pubchem.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-pubchem":{"type":"http","url":"https://pubchem.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-pubchem":{"type":"http","url":"https://pubchem.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-pubchem":{"serverUrl":"https://pubchem.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
10| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| aid | integer | いいえ | アッセイ検索では必須です。化合物一覧を取得する PubChem アッセイ ID(AID)。範囲は 1~2147483647(例:1000)。生物学的標的の AID は pubchem_search_assays で検索してください。 |
| query | string | いいえ | 部分構造/上位構造/類似性検索では必須です。SMILES 文字列(例:"CC(=O)O")、または文字列形式の PubChem CID(1~2147483647、例:"2244")。 |
| offset | integer | いいえ | 返す最初の CID の 0 始まりインデックスです。前回の呼び出しで返された nextOffset を渡すと、次のページを読み取れます。識別子検索ではすべての一致結果を事前に解決するため、ページ分割の追加コストはありません。アッセイ検索では要求されたページのみを取得します。一方、分子式、部分構造、上位構造、類似性検索では、目的のページに到達するために PubChem から offset + maxResults 件のレコードを取得する必要があり、深いページほど上流の処理コストが増加します。そのため上限は 10000 です。デフォルト:0。 |
| formula | string | いいえ | 分子式検索では必須です。Hill 表記の分子式(例:"C6H12O6"、"CaH2O2")。 |
| queryType | enum | いいえ | 構造/類似性検索では必須です。クエリ形式:"smiles" または "cid"。smiles | cid |
| threshold | number | いいえ | 類似性検索専用です。最小 Tanimoto 類似度(70~100)。類似度の高い類縁体には 90 以上、骨格ホッピングには 70~80 を指定します。デフォルト:90。 |
| activeOnly | boolean | いいえ | アッセイ検索専用です。true(デフォルト)の場合、アッセイで活性ありと判定された化合物のみを一覧表示します。false の場合、試験されたすべての化合物を一覧表示します。 |
| maxResults | integer | いいえ | ページごとに返す CID の最大数です。1 回の呼び出しの上限は 200 です。より大きい値(最大 1000)を指定しても、1 ページ 200 件が返され、cappedInputs に報告されます。offset を使用すると、このページ以降の一致結果を取得できます。デフォルト:20。 |
| properties | array | いいえ | 任意:各結果についてこれらのプロパティを取得し、後続の詳細取得呼び出しを省略します。例:["MolecularFormula", "MolecularWeight", "CanonicalSMILES"]。 |
| searchType | enum | はい | 検索戦略です。各モードにはそれぞれ必要なフィールドがあります。"identifier":名前/SMILES/InChIKey による検索 — identifierType と identifiers が必要です。"formula":分子式による検索 — formula が必要です。"substructure":クエリを部分構造として含む化合物を検索します。"superstructure":クエリの部分構造に該当する化合物を検索します。"similarity":クエリとの 2D Tanimoto 類似度を検索します。substructure、superstructure、similarity には query と queryType が必要です。"assay":PubChem のバイオアッセイで試験された化合物を検索します — aid が必要です。activeOnly(デフォルトは true)を指定すると、アッセイで活性ありと判定された化合物のみが対象になります。identifier | formula | substructure | superstructure | similarity | assay |
| identifiers | array | いいえ | 識別子検索で必須です。解決する識別子の配列です。1 回の呼び出しの上限は 25 件です。最初の 25 件が検索され、それを超える項目(合計最大 1000 件)は入力順に unprocessed で返され、cappedInputs に報告されます。例:名前の場合は ["aspirin", "ibuprofen"]、SMILES の場合は ["CC(=O)OC1=CC=CC=C1C(=O)O"]、inchikey の場合は ["BSYNRYMUTXBXSQ-UHFFFAOYSA-N"](27 文字のブロック形式。検索前に大文字に変換され、大文字・小文字は問いません)。 |
| identifierType | enum | いいえ | 識別子検索で必須です。化学識別子の種類:「name」、「smiles」、「inchikey」のいずれかです。name | smiles | inchikey |
| allowOtherElements | boolean | いいえ | 分子式検索専用です。true の場合、分子式に記載された元素以外の元素も含む化合物を対象に含めます。 |
詳細
@cyanheads/pubchem-mcp-server
MCP を介して PubChem 化学データベースを検索し、化合物、物性、安全性データ、生物活性、相互参照、エンティティの概要を取得します。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://pubchem.caseyjhand.com/mcp
概要
PubChem の化合物および生物活性試験を利用できます。化合物を名前、分子式、または構造で検索し、物性、安全性データ、生物活性、医薬品と食品の相互作用、分子標的、3D 構造を取得できます。また、生物学的標的を基に生物活性試験を検索できます。
ツール
| ツール | 説明 |
|---|---|
pubchem_search_compounds | 名前、SMILES、InChI、InChIKey、分子式、部分構造、上位構造、または2D類似性で化合物を検索するか、バイオアッセイで活性ありと判定された化合物を一覧表示します。 |
pubchem_get_compound_details | CIDを指定して化合物の物理化学的性質、説明、同義語、医薬品適性、分類を取得します。 |
pubchem_get_compound_image | CIDを指定して化合物の2D構造図(PNG)を取得します。 |
pubchem_get_compound_3d_structure | CIDを指定して化合物の3D配座(原子座標と結合)を、解析済みJSONまたは生のSDFとして取得します。 |
pubchem_get_compound_xrefs | 外部データベースへの相互参照(PubMed、特許、遺伝子、CAS番号、EC番号など)を取得します。 |
pubchem_get_compound_safety | CIDを指定して、1つ以上の化合物のGHS危険有害性分類と安全性データを一括取得します。 |
pubchem_get_bioactivity | 化合物の生物活性プロファイル(アッセイ結果、標的、活性値、アッセイ種別、引用されたPubMed ID)を取得します。結果、分子標的、アッセイ種別で絞り込めます。 |
pubchem_get_compound_interactions | 化合物の飲食物との相互作用と、アッセイで名称が挙げられている分子標的を取得します。それぞれについてアッセイ数と最も強力な活性値も取得します。 |
pubchem_search_assays | 生物学的標的(遺伝子記号、タンパク質、Gene ID、UniProtアクセッション)からバイオアッセイを検索します。 |
pubchem_get_summary | PubChemエンティティ(アッセイ、遺伝子、タンパク質、分類群)の概要を取得します。 |
リソース
化合物とアッセイのレコードは、ツールと同じクライアントメソッドを使用するURIテンプレート形式のリソースとしても公開されています。ただし、多くのMCPクライアントはツールのみを扱い、リソースを表示しません。
| リソース | 説明 |
|---|---|
pubchem://compound/{cid} | 基本的な物理化学的性質(JSON)。 |
pubchem://compound/{cid}/safety | GHS危険有害性分類(JSON)。 |
pubchem://compound/{cid}/image | 2D構造図(PNG)。 |
pubchem://compound/{cid}/xrefs | 外部相互参照(JSON)。 |
pubchem://compound/{cid}/bioactivity | バイオアッセイ活性プロファイル(JSON)。 |
pubchem://assay/{aid} | BioAssayの概要(JSON)。 |
機能リファレンス
pubchem_search_compounds ツール
- 6種類の検索方法:識別子(
identifierType+identifiers。名前/SMILES/InChI/InChIKey、1回の呼び出しにつき25件。残りはunprocessedで返されます)、分子式(formula、Hill表記法、任意のallowOtherElements)、部分構造/上位構造と2D類似性(query+queryType。類似性のしきい値は70~100、デフォルトは90)、またはアッセイ(aid。バイオアッセイで活性ありと判定された化合物、またはactiveOnly: falseの場合は検査対象の全化合物) - 1ページあたり最大200件のCID(デフォルトは20件。より大きな
maxResultsを指定しても200件まで提供され、cappedInputsで報告されます)。offsetを使うと、識別子とアッセイの検索では一致する結果の末尾まで、分子式、部分構造、上位構造、類似性の検索では10,000件までページを指定できます(それ以上はoffset_ceiling_exceededで失敗します)。任意のpropertiesを指定すると、後続のpubchem_get_compound_details呼び出しを省略できます。 totalFound、または上流の検索結果が上限に達した場合は下限値としてのtotalFoundAtLeastを報告します。CIDが見つからなかった入力はunresolvedIdentifiersで報告します。不明なAIDの場合はaid_not_found、PubChemで検索できないクエリの場合はヒント付きのsearch_query_rejectedで失敗します。
pubchem_get_compound_details ツール
- 1回の呼び出しにつき最大100件のCID(残りは
unprocessedで返されます)。利用可能なプロパティは27種類で、デフォルトでは基本的な14種類が対象です。 - 任意の説明(
descriptionOffset/maxDescriptions、デフォルトは3件、最大20件)と分類(FDA、MeSH、ATC)は先頭の10件のCIDのみを対象とし、残りはskippedCidsに記載されます。任意の同義語(synonymOffset/maxSynonyms、デフォルトは20件、最大100件)とLipinski/Veberの医薬品適性チェックは、見つかったすべてのCIDを対象とします。 - CIDごとの
found: falseにより、存在しないCIDとデータのない化合物を区別できます。
pubchem_get_compound_image tool
- CID は 1 つです。
sizeは"small"(100x100)または"large"(300x300、デフォルト)です - Base64 エンコードされた PNG と幅・高さを返します
- PubChem に CID のレコードがない場合は、型付きエラー
cid_not_foundを返します
pubchem_get_compound_3d_structure tool
- CID は 1 つです。
format="json"(デフォルト)では解析済みの原子(元素+x/y/z)と結合を返し、format="sdf"では未加工の V2000 SDF テキストを返します maxAtoms/maxBondsは JSON プレビューの上限を設定します(デフォルトは各 200)。atomCount/bondCountは常に全体の合計を報告し、上限による省略がある場合はエンリッチメントで明示しますincludeRawSdfを指定すると、未加工の SDF テキストに対するデフォルトの 500 行上限を適用しません- オプションの
includeAlternateConformerIdsは、デフォルト以外の配座 ID を一覧表示します - PubChem に計算済みの 3D 座標がない場合(大きな分子、混合物、一部の塩)は、型付きエラー
no_3d_structureを返します
pubchem_get_compound_xrefs tool
- CID は 1 つです。1 つ以上の
xrefTypesを指定します:CAS、EC、RN、RegistryID、PatentID、PubMedID、GeneID、ProteinGI、TaxonomyID CASとECは、その化合物について登録された番号です。異なる値をすべて、登録したソースレコード数の多い順に返し、その件数をsourceCountsに含めます。RNは PubChem が順位付けせずに提供する登録番号の一覧です。CAS 番号のほか、廃止済みおよび関連する CAS RN と EC 番号も含まれますProteinGIは現在 PubChem からデータを返しません。遺伝子/タンパク質との関連にはGeneIDを使用してくださいmaxPerTypeは最大 500(デフォルトは 50)で、1 つのoffsetがすべてのタイプに適用されます。各タイプはtotalAvailableとtruncatedを報告します。PubMedIDは新しいものから順に返されます- 読み込みに失敗したタイプは
failedTypesに記載され、ほかのタイプは引き続き返されます。呼び出しが失敗するのは、タイプの読み込みに失敗し、かつ PubChem が現在提供していないProteinGI以外のタイプを読み込めなかった場合のみです。結果が空の場合は、要求したタイプのデータが化合物にないのか、CID の入力が誤っている可能性があるのかを示します
pubchem_get_compound_safety tool
- 1 回の呼び出しにつき最大 25 個の CID を処理します(残りは
unprocessedで返されます) - ソース間で統合した GHS の注意喚起語、絵表示、H コード、P コードと、各ソース独自のラベルを含む
classifications[]を返します。注意書きにはdecodedフラグが付きます - CID ごとの
statusはok、not_classified(届出者が GHS ハザードを見つけなかった)、no_ghs_data(分類情報の登録がない)、またはcid_not_foundです。そのため、誤った CID が「ハザード情報なし」と誤認されることはありません
pubchem_get_bioactivity tool
- CID は 1 つです。
outcomeFilter(active/inactive/all、デフォルトはall)、targetGeneId/targetAccession、およびassayType(confirmatory/screening/summary/otherのいずれか)で絞り込みます。アッセイは設定されたすべてのフィルターを通過する必要があります - ターゲットのフィルターは、同じターゲットに関連付けられた任意の識別子に一致します。そのため、Gene ID 5742、UniProt P23219、RefSeq NP_542158 のいずれでも、同じ COX-1 アッセイが対象になります
- 各結果には、アッセイの
assayTypeと、引用されている PubMed ID(pmids、新しいものから順)が含まれます - 1 ページあたり最大 100 件(デフォルトは 20 件)で、
offsetを指定すると続きの結果を取得できます。複数のターゲットを対象とするアッセイでは、一致したターゲットを報告し、ほかのターゲットをotherTargetsに一覧表示します - 化合物全体の
totalAssays/activeCount/inactiveCountと、ページのfilteredCount/returnedCountを報告します。通知には、データがない場合、フィルターですべて除外された場合、またはoffsetが末尾を超えている場合が示されます
pubchem_get_compound_interactions tool
- 単一の CID。
kindsは 1 つ以上指定します。指定できる値はdrug-food(PUG View)、target、drug-drug(DrugBank)です。デフォルトは["drug-food"]で、drug-food ページが空の場合はtargetを参照します targetは、化合物のアッセイ概要に記載された標的ごとに 1 件を返します。Gene ID と、その表で組み合わされているアクセッション、または同じ行で組み合わされていない識別子です。同じタンパク質を示す場合でも、どの行でも組み合わされていない Gene ID とアクセッションは別々の項目になります(エルロチニブの ERBB2 はaccession:P04626とGeneID:2064として表示されます)。各項目には、遺伝子またはタンパク質の一括概要検索で取得した標的名、pubchem_get_bioactivityがフィルタリングに使用するGeneID:またはaccession:の値、結果別のアッセイ件数、および AID とともに最も強力な Active 値が記載されます。Active の標的は、最も強力なものから順に表示されます。名前の検索に失敗した場合、または数秒以内に結果が返らない場合は、項目には識別子が保持され、その旨が通知されます- ページあたり、種類ごとの
maxEntries(最大 50、デフォルト 10)を指定します。offsetはレコード(targetの場合は標的)の件数で指定し、上限は 2,147,483,646 です。種類ごとに独立してページ分割され、結果はpaging[](totalRecords/nextOffset/truncated)に報告されます - 取得に失敗した種類は
failedKindsに記載され、ほかの種類の結果は引き続き返されます。drug-drugは PubChem の SDQ サービスから取得されますが、このサービスは自動リクエストを拒否するため、failedKindsに含まれます。再試行しても解決しません
pubchem_search_assays tool
targetTypeで検索します。genesymbol/proteinname(テキスト)、geneid(NCBI Gene ID)、proteinaccession(UniProt)を指定します- 1 ページあたり最大 200 件の AID を返します(デフォルト 50)。
offsetで結果をページ移動します - 空の
targetQueryと、数値以外のgeneidは拒否されます totalFoundを報告し、「一致なし」と「終端を超える offset」を区別します
pubchem_get_summary tool
entityTypeはassay(AID)、gene(NCBI Gene ID)、protein(UniProt アクセッション)、またはtaxonomy(Tax ID)を指定します。1 回の呼び出しで最大 10 件の識別子を指定できます- カンマ区切りの文字列は識別子に分割されます。先頭から 10 件を超える分は
unprocessedで返され、1000 件を超えるとtoo_many_identifiersとして失敗します - AID、Gene ID、Tax ID は、2147483647 以下の正の整数である必要があります。それ以外の要素は
invalid: trueの行として返され、使用可能な識別子が 1 件もない場合に限り、呼び出しはinvalid_identifierとして失敗します - 識別子ごとの
foundフラグを返します。フィールドはentityTypeによって異なります(taxonomy:順序付きのlineage、gene:symbol/taxonomy、assay:method、先頭 25 件のtargetsとtargetCount、試験済み/活性化合物の件数、lastDataChange)
pubchem://compound/{cid} resource
- 主要な物理化学的特性を
application/jsonで返します(pubchem_get_compound_detailsと同じデフォルトの 14 特性セット) - CID が PubChem に存在しない場合は、型付きの Not Found エラーをスローします
- 特定の特性を選択する場合や、説明、同義語、薬剤類似性、分類を追加する場合は
pubchem_get_compound_detailsを使用します
pubchem://compound/{cid}/safety resource
- GHS 危険有害性分類を
application/jsonで返します。ソースごとのghs.classificationsと、提供者のsourceリストを含みます - PubChem に登録された分類のない化合物と、無効な CID を区別する唯一の手掛かりは
status(ok/not_classified/no_ghs_data/cid_not_found)です。リソースの読み取りには通知を表示する仕組みがありません
pubchem://compound/{cid}/image resource
- 2D 構造図を 300x300 の PNG として、base64 blob で返します
- 100x100 のサイズを指定する場合は
pubchem_get_compound_imageを使用します
pubchem://compound/{cid}/xrefs resource
- デフォルトでは対象を絞ったセット(
RN、RegistryID、PubMedID、CAS。sourceCountsを含む)を、種類ごとに最大 25 件、application/jsonで返します。PubMed ID は割り当て日時が新しいものから 25 件を返します。読み込みに失敗した種類はfailedTypesに記載されます - すべての xref 種類、種類ごとの上限数の引き上げ、offset によるページ分割には
pubchem_get_compound_xrefsを使用します
pubchem://compound/{cid}/bioactivity リソース
application/json形式で最大25件のアッセイを返します。各アッセイにはassayTypeとpmidsが含まれ、化合物全体のtotalAssays/activeCountも含まれます。複数の標的を持つアッセイでは、追加の標的がotherTargetsに列挙されます。pubchem_get_bioactivityを使用すると、結果や標的、アッセイの種類で絞り込んだり、上限を引き上げたり、オフセットを指定してページングしたりできます。
pubchem://assay/{aid} リソース
application/json形式のBioAssay概要です。名前、説明、ソース、プロトコル、物質数が含まれます。- AIDが存在しない場合は、型付きの「見つかりません」エラーが発生します。
機能
@cyanheads/mcp-ts-coreを基盤とし、stdioおよびStreamable HTTPトランスポート、切り替え可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションのOpenTelemetryトレースを備えた構造化ログに対応しています。
PubChem固有の機能:
- PUG RESTとPUG Viewのエンドポイントに加え、薬物間相互作用用のSDQにも対応しています。
- レート制限付きクライアント(5 req/s)を備え、リクエストをキューに登録し、一時的な障害時には1回再試行します。
- 呼び出しごとに50秒の制限時間を設けており、上流処理が遅い場合は
Timeoutとして失敗します。キャンセルされた呼び出しはRequestCancelledとして失敗します。 - 3Dコンフォマー用のV2000 SDFパーサーを内蔵しています。薬物類似性は取得済みのプロパティから計算されます。
- すべてのツールは読み取り専用かつ冪等で、APIキーは不要です。
エージェント向けの出力:
- CIDごとの
statusとfoundフラグにより、エラー文字列を照合せずにデータに基づいて呼び出し元が処理を分岐できます。 - バッチツールは、呼び出し全体を失敗させるのではなく、
unresolvedIdentifiers、skippedCids、failedKinds、failedTypesとともに項目ごとの結果を返します。 - 上限のあるリストでは
truncated、shown/cap、nextOffsetを示します。サイズが上限を超えるバッチは上限まで処理され、残りはcappedInputsとunprocessedで報告されます。 - 失敗には型付きの
reason(例:cid_not_found、missing_identifier_args、invalid_cid_query)と、復旧方法を示すテキストが含まれます。
はじめに
公開ホストインスタンス
公開インスタンスはhttps://pubchem.caseyjhand.com/mcpで利用できます。インストールは不要です。Streamable HTTPを介して、任意のMCPクライアントから接続できます。
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "streamable-http",
"url": "https://pubchem.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
MCPクライアントの設定ファイルに以下を追加します。
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/pubchem-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio"
}
}
}
}
または、npxを使用します(Bunは不要です)。
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/pubchem-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio"
}
}
}
}
または、Dockerを使用します。
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/pubchem-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キーは不要です。PubChemのAPIは無料で利用できます。
インストール
- リポジトリをクローンします。
git clone https://github.com/cyanheads/pubchem-mcp-server.git
- ディレクトリに移動します。
cd pubchem-mcp-server
- 依存関係をインストールします。
bun install
- 環境を設定します(任意)。
cp .env.example .env
# edit .env to override transport, session mode, storage, or logging defaults
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
MCP_TRANSPORT_TYPE | トランスポート:stdioまたはhttp。 | stdio |
MCP_HTTP_PORT | HTTPサーバーのポート。 | 3010 |
MCP_HTTP_HOST | HTTPサーバーのホスト。 | 127.0.0.1 |
MCP_SESSION_MODE | stateless、stateful、またはauto。 | stateless |
MCP_AUTH_MODE | 認証モード:none、jwt、またはoauth。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)。 | info |
STORAGE_PROVIDER_TYPE | ストレージのバックエンド。 | in-memory |
OTEL_ENABLED | OpenTelemetryを有効にします。 | false |
オプションで指定できる上書き設定の全一覧は.env.exampleを参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行します。
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行します。
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t pubchem-mcp-server .
docker run --rm -p 3010:3010 pubchem-mcp-server
Dockerfileでは、デフォルトでHTTPトランスポート、ステートレスセッションモードを使用し、ログを/var/log/pubchem-mcp-serverに出力します。OpenTelemetryのピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=falseを指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツールとリソースを登録し、PubChem クライアントを初期化します。 |
src/mcp-server/tools/definitions/ | ツールの定義(*.tool.ts)です。 |
src/mcp-server/resources/definitions/ | リソースの定義(*.resource.ts)です。 |
src/services/pubchem/ | PubChem API クライアントです。レート制限、再試行、レスポンス/SDF の解析を行います。 |
scripts/ | ビルド、クリーンアップ、開発チェック、ツリー生成用のスクリプトです。 |
tests/ | 単体テストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は以下のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで
try/catchを使用しないでください - リクエスト単位のログ記録には
ctx.logを使用してください - 外部 API の呼び出しはラップしてください。PubChem の生レスポンスを検証し、ドメイン型に正規化してから、出力スキーマを返します。不足しているフィールドを捏造してはいけません
- 新しいツールとリソースは、
index.tsのバレルファイルに登録してください
コントリビューション
Issue を歓迎します。提出前にチェックを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細については LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。