mcpField
C
clinicaltrialsgov-mcp-server

clinicaltrialsgov-mcp-server

リモート
github.com/cyanheadsヘルスケア993 日前に更新
リポジトリ

clinicaltrialsgov-mcp-server について

clinicaltrialsgov-mcp-serverは、ClinicalTrials.govの検索、試験詳細・結果の取得、患者情報に基づく候補試験の照合をMCP経由で提供します。試験検索や動向分析向けで、フィールド探索と簡潔な一覧・詳細レコードに対応します。

主な機能

  1. 01条件やフィルターによる試験検索
  2. 02プロトコル記録と公開結果の取得
  3. 03フィールド定義と値の確認
  4. 04患者情報と募集中試験の照合
  5. 05地理条件による実施施設の検索

活用シーン

  1. 01疾患、フェーズ、場所による試験検索
  2. 02完了試験の結果と有害事象の確認
  3. 03試験数と登録フィールドの分析
  4. 04患者情報に合う候補試験の特定

MCP 対応

MCPクライアントに7つのツール、1つのJSONリソース、分析用プロンプトを提供します。stdioとStreamable HTTPに対応します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://clinicaltrials.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npmclinicaltrialsgov-mcp-server2.10.2

ツール

7
パラメーター型必須説明
sortstringいいえ並べ替え順。形式:FieldName:asc または FieldName:desc。例:"LastUpdatePostDate:desc"、"EnrollmentCount:desc"。カンマ区切りで最大 2 フィールドを指定できます。「最大規模の試験」を検索する場合は、EnrollmentCount:desc と高度なフィルター "AREA[StudyType]INTERVENTIONAL" を組み合わせてください。入 enroll 数の上位には、数千万人を登録する観察レジストリ/請求データ研究が含まれます。入 enroll 数はスポンサーによる報告であり、不明な入 enroll 数を示すセンチネル値の除外を除き、上流では検証されません。並べ替え可能なフィールド名は clinicaltrials_get_field_definitions で確認してください。
querystringいいえ全フィールドを対象とする一般的なフリーテキスト検索。このパラメーター向けに ClinicalTrials.gov が公開している 57 フィールドの関連性検索を実行します。対象は NCTId、NCTIdAlias、OrgStudyId、SecondaryId、Acronym、BriefTitle、OfficialTitle、Condition、InterventionName、InterventionOtherName、Phase、StdAge、StudyType、BriefSummary、アウトカム指標とその説明、LeadSponsorName、CollaboratorName、Location* フィールド、Design* フィールド、および ConditionAncestorTerm/InterventionAncestorTerm の MeSH 上位概念です。そのため、検索語が想定したフィールドに含まれない結果もヒットする場合があります。通常の単語に加え、AND、OR、NOT を使用できます。`[ ]` は AREA[FieldName]value または RANGE[min, max] 式の中でのみ有効です。これらの式は advancedFilter と同様にここでも使えるため、AREA[Phase]PHASE2 はこのパラメーターで受け付けられます。単独の角括弧はエラーになります。`( )` は部分式をグループ化し、マッチした場合に機能します。`,` は AND として扱われます。専用の *Query パラメーター(conditionQuery、interventionQuery など)は、検索対象を 1 つのフィールドに限定します。
fieldsarrayいいえ返す PascalCase のリーフ名。完全なレコードは約 70KB のため、指定を強く推奨します。省略すると簡潔なインデックス投影が返されます。空のリストは省略として扱われず、拒否されます。カンマまたはパイプで連結された項目("NCTId,BriefTitle")は個別の名前に分割されます。一般的なリーフ:NCTId、BriefTitle、BriefSummary、OverallStatus、Phase、LeadSponsorName、Condition。概念に対応する正確なリーフを見つけるには、概念クエリ(例:"adverse events"、"eligibility")を指定して clinicaltrials_get_field_definitions を呼び出してください。
nctIdsanyいいえ一括検索する特定の NCT ID に絞り込みます。省略するとすべての研究を検索します。空のリストは「フィルターなし」として扱われず、拒否されます。この値を指定すると、デフォルトの不明な入 enroll 数の除外が解除されるため、指定した ID が自身の検索から除外されることはありません。
pageSizeintegerいいえ1 ページあたりの結果数。1~200。
geoFilterstringいいえ地理的な近接フィルター。形式:distance(lat,lon,radius)。radius には `mi` または `km` の接尾辞が必要です。例:シアトルから 50 マイル以内の研究を検索する場合は "distance(47.6062,-122.3321,50mi)"。接尾辞は必須です。単位のない半径、0 以下の半径、[-90, 90] の範囲外の緯度、[-180, 180] の範囲外の経度は拒否されます。設定すると、各研究のロケーションが中心点からの距離順に並べ替えられ、最も近い該当施設が先頭になり、距離がマイル単位で注記されます。ロケーションの全リストは保持されます。
pageTokenstringいいえページネーションカーソル:前回のレスポンスの nextPageToken を変更せずに、同じ条件で渡します。ClinicalTrials.gov がデータを更新すると、トークンは期限切れになります。
countTotalbooleanいいえレスポンスに研究総数を含めます。最初のページでのみ計算されます。
titleQuerystringいいえ研究のタイトルと略称のみを検索します。Acronym、BriefTitle、OfficialTitle にマッチします。通常の単語に加え、AND/OR/NOT を使用できます。`[ ]` は AREA[FieldName]value または RANGE[min, max] 式の中でのみ有効で、このパラメーターではこれらの式を使用できます。単独の角括弧はエラーになります。`( )` はマッチした場合に部分式をグループ化します。`,` は AND として扱われます。
phaseFilteranyいいえ試験フェーズで絞り込みます。省略するとすべてのフェーズを検索します。空のリストは拒否され、「フィルターなし」とは扱われません。値:EARLY_PHASE1、PHASE1、PHASE2、PHASE3、PHASE4、NA。大文字小文字や空白の異なる形式(「Phase 3」、「early phase 1」、「Not Applicable」)も受け付けます。リスト、またはカンマやパイプで連結した文字列は、いずれかのフェーズに一致します。各項目にはフェーズ名を指定してください。検索式(OR、NOT、AREA[…])は advancedFilter に記述します。
outcomeQuerystringいいえアウトカム指標フィールドを検索します。PrimaryOutcomeMeasure、SecondaryOutcomeMeasure、OtherOutcomeMeasure、OutcomeMeasureTitle、および対応する説明フィールド PrimaryOutcomeDescription、SecondaryOutcomeDescription、OtherOutcomeDescription、OutcomeMeasureDescription、OutcomeMeasurePopulationDescription に一致します。そのため、検索語がアウトカムの説明文にのみ含まれていても一致します。通常の単語と AND/OR/NOT を使用できます。`[ ]` は AREA[FieldName]value または RANGE[min, max] 式の内部でのみ有効です。このパラメーターではこれらの式を使用でき、単独の角括弧はエラーになります。`( )` は一致時に部分式をグループ化し、`,` は AND として扱われます。
sponsorQuerystringいいえスポンサー/共同研究者名を検索します。LeadSponsorName、CollaboratorName、OrgFullName に一致します。通常の単語と AND/OR/NOT を使用できます。`[ ]` は AREA[FieldName]value または RANGE[min, max] 式の内部でのみ有効です。このパラメーターではこれらの式を使用でき、単独の角括弧はエラーになります。`( )` は一致時に部分式をグループ化し、`,` は AND として扱われます。
statusFilteranyいいえ試験のステータスで絞り込みます。省略するとすべてのステータスを検索します。空のリストは拒否され、「フィルターなし」とは扱われません。値:RECRUITING、COMPLETED、ACTIVE_NOT_RECRUITING、NOT_YET_RECRUITING、ENROLLING_BY_INVITATION、SUSPENDED、TERMINATED、WITHDRAWN、UNKNOWN、WITHHELD、NO_LONGER_AVAILABLE、AVAILABLE、APPROVED_FOR_MARKETING、TEMPORARILY_NOT_AVAILABLE。
locationQuerystringいいえ所在地を検索します。都市、州、国、施設名が対象です。LocationCity、LocationState、LocationCountry、LocationFacility、LocationZip に一致し、試験のいずれかの施設が一致すれば対象になります。通常の単語と AND/OR/NOT を使用できます。`[ ]` は AREA[FieldName]value または RANGE[min, max] 式の内部でのみ有効です。このパラメーターではこれらの式を使用でき、単独の角括弧はエラーになります。`( )` は一致時に部分式をグループ化し、`,` は AND として扱われます。
advancedFilterstringいいえAREA[FieldName]value 構文を使用して高度な絞り込みを行います。例:「AREA[StudyType]INTERVENTIONAL」、「AREA[EnrollmentCount]RANGE[100, 1000]」、「AREA[Phase]PHASE2 AND AREA[StudyType]INTERVENTIONAL」、「(AREA[Phase]PHASE3 OR AREA[Phase]PHASE4) AND AREA[StudyType]INTERVENTIONAL」。「AREA[HasResults]true」は結果が公開されている試験に限定します。AND/OR/NOT で完全な AREA[FieldName]value 式をつなぎ、括弧でグループ化します。AREA[] に対応するフィールド名を調べるには clinicaltrials_get_field_definitions を呼び出してください。
conditionQuerystringいいえ病状/疾患に関する検索です。例:「Type 2 Diabetes」、「non-small cell lung cancer」。Condition、BriefTitle、OfficialTitle、ConditionMeshTerm、ConditionAncestorTerm、Keyword、NCTId に一致します。ConditionAncestorTerm は、試験自体が列挙する病状の上位 MeSH 概念です。そのため、列挙された病状より広い結果が得られ、試験が名称を挙げていない上位概念にも一致することがあります。通常の単語と AND/OR/NOT を使用できます。`[ ]` は AREA[FieldName]value または RANGE[min, max] 式の内部でのみ有効です。このパラメーターではこれらの式を使用でき、単独の角括弧はエラーになります。`( )` は一致時に部分式をグループ化し、`,` は AND として扱われます。
interventionQuerystringいいえ介入/治療を検索します。例:「pembrolizumab」、「cognitive behavioral therapy」。InterventionName、InterventionType、ArmGroupType、InterventionOtherName、BriefTitle、OfficialTitle、ArmGroupLabel、InterventionMeshTerm、Keyword、InterventionAncestorTerm、InterventionDescription、ArmGroupDescription に一致します。InterventionAncestorTerm は、試験自体が列挙する介入の上位 MeSH 概念です。そのため、列挙された介入より広い結果が得られます。通常の単語と AND/OR/NOT を使用できます。`[ ]` は AREA[FieldName]value または RANGE[min, max] 式の内部でのみ有効です。このパラメーターではこれらの式を使用でき、単独の角括弧はエラーになります。`( )` は一致時に部分式をグループ化し、`,` は AND として扱われます。
includeUnknownEnrollmentbooleanいいえEnrollmentCount が上流の「unknown」センチネル値(99999999)である試験を含めます。既定では除外されます。このセンチネル値は RANGE[N, MAX] クエリや EnrollmentCount:desc の並べ替えに影響します。データ品質の監査や、登録数が不明な試験を対象にする場合は true に設定してください。

詳細

clinicaltrialsgov-mcp-server

MCP を介して ClinicalTrials.gov の試験を検索し、試験の詳細と結果を取得して、患者に適した候補試験を見つけます。STDIO または Streamable HTTP に対応しています。

7 個のツール • 1 個のリソース • 1 個のプロンプト

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

公開ホストサーバー: https://clinicaltrials.caseyjhand.com/mcp


概要

米国国立医学図書館の試験登録サイトである ClinicalTrials.gov に登録された 60 万件以上の試験を検索します。試験の完全な記録と公開済みの結果を取得し、フィールドや有効な値を調べ、患者のプロフィールに適した募集中の試験を見つけられます。API キーは不要です。

ツール
ツール説明
clinicaltrials_search_studies全文検索やフィールド指定検索、ステータス/フェーズ/地域フィルター、ページネーション、並べ替え、フィールド選択を使って試験を検索します
clinicaltrials_get_study_recordNCT ID を指定して単一の試験を取得します。任意で施設、アウトカム、参照情報の上限を指定できる、完全なプロトコル記録です
clinicaltrials_get_study_countデータを取得せず、クエリに一致する試験の総数をすばやく取得します
clinicaltrials_get_field_valuesAPI フィールドの有効な値と、値ごとの試験数を調べます
clinicaltrials_get_field_definitionsキーワード検索、パスの詳細表示、またはトップレベルの概要によって、有効なフィールド名を特定します
clinicaltrials_get_study_results完了した試験の公開済み結果(アウトカム、有害事象、参加者の推移、ベースライン)を取得します
clinicaltrials_find_eligible患者の人口統計情報と疾患を照合し、候補となる募集中の試験を見つけます。組み入れ/除外基準は確認しません
リソース
リソース説明
clinicaltrials://{nctId}NCT ID を指定して単一の臨床試験を JSON で取得します。リストには上限を設定し、結果は件数に置き換えます
プロンプト
プロンプト説明
analyze_trial_landscape件数取得ツールと検索ツールを使用し、データに基づく臨床試験の概況分析を行います

機能リファレンス

clinicaltrials_search_studies ツール
  • フリーテキストの query に加え、フィールド固有の conditionQuery / interventionQuery / locationQuery / sponsorQuery / titleQuery / outcomeQuery、statusFilter / phaseFilter 列挙型(大文字・小文字やスペースの違いを許容)、advancedFilter(AREA[FieldName]value / RANGE[min, max])、geoFilter(mi / km 接尾辞付きの distance(lat,lon,radius))を指定できます。pageSize は 1~1000(デフォルトは 10。サーバーのページあたりの上限(デフォルトは 200)を超える場合、上限に合わせてページが返され、truncated / shown / cap が設定されます)、pageToken はカーソル、sort は最大 2 フィールドでのソートです。
  • デフォルトでは、試験ごとの簡潔なインデックス(nctId、briefTitle、overallStatus、phases、enrollmentCount、hasResults、…)を返します。fields(PascalCase のリーフ)を指定すると、完全な忠実度の投影を選択できます。完全なレコードは約 70KB になります。
  • 型付きエラー:blank_value、ids_not_found、field_invalid、enum_invalid、query_parse_error、geo_invalid、sort_invalid、page_token_invalid、rate_limited

clinicaltrials_get_study_record ツール
  • nctId でプロトコルの完全なレコードを取得します。任意で locationLimit、outcomeLimit / referenceLimit、および所在地の範囲指定と並べ替えに使う nearLocation(lat、lon、radiusMi)を指定できます。いずれにも上限はなく、リストの件数を超える値を指定するとリスト全体が返されます。
  • 上限によってリストが切り詰められた場合、filtersApplied に上流の合計件数が示されます。resultsSection は件数を示す resultsSummary に置き換えられます。型付きエラー:study_not_found、rate_limited

clinicaltrials_get_study_count ツール
  • clinicaltrials_search_studies と同じクエリおよびフィルターを指定でき、totalCount のみを返します。試験データは取得されません。
  • 型付きエラー:blank_value、field_invalid、enum_invalid、query_parse_error、rate_limited

clinicaltrials_get_field_values ツール
  • 1 つ以上の PascalCase の fields(例:OverallStatus、Phase)を指定します。各フィールドの型と、試験件数付きの上位値(API により 250 件を上限とする)、または数値・日付フィールドの min / max / avg、真偽値フィールドの trueCount / falseCount を返します。
  • STRING フィールドには longest 値が追加されます。2,000 文字を超える場合は、truncated フラグ付きのプレビューとなり、完全な length と、テキスト全体を返す clinicaltrials_search_studies 呼び出しを示す通知が含まれます。API が個別の値の件数を数えないフリーテキストフィールドには uniqueValuesCounted: false が設定され、uniqueValuesCount の 0 は件数を数えていないことを示します。
  • multiValued は、値ごとの件数の合計が試験総数を上回る場合があるフィールドを示します。型付きエラー:blank_value、field_invalid、rate_limited

clinicaltrials_get_field_definitions ツール
  • mode:search(キーワード query、デフォルトの limit は 20、上限なし)、drill(ドット記法の path)、または overview を指定します。fields、advancedFilter、sort、clinicaltrials_get_field_values で使用できる PascalCase の名前を解決します。
  • 型付きエラー:blank_value、mode_mismatch、mode_requires、path_not_found、rate_limited

clinicaltrials_get_study_results ツール
  • 1 回の呼び出しで取得できる個別の nctIds は最大 20 件です。さらに多くの ID(最大 500 件)は deferredNctIds として返されます。sections(outcomes、adverseEvents、participantFlow、baseline、moreInfo)、1 試験あたり 500KB を超える場合がある結果セットを簡潔にまとめる summary、および再開可能な outcomeOffset / seriousEventOffset / otherEventOffset と組み合わせて使う outcomeLimit / adverseEventLimit を指定できます。
  • バッチ全体の失敗ではなく、試験ごとの fetchErrors / studiesWithoutResults が返されます。また、別名 ID が別の試験に解決された場合は canonicalNctId が返されます。型付きエラー:blank_value、offset_not_applicable、rate_limited

clinicaltrials_find_eligible ツール
  • age(整数、0~120)。乳児や幼児の場合は、任意で ageUnit(デフォルトは years、months、weeks、days)を指定できます。sex(FEMALE / MALE / ALL)、conditions[]、location(country は必須、state / city は任意)、healthyVolunteer、recruitingOnly(デフォルトは true)、maxResults(最大 1000。各呼び出しで返されるのは最大 50 件で、残りは truncated / shown / cap と、再実行可能な searchCriteria で示されます)、locationLimit(上限なし。一致した施設数を超える値を指定すると、すべて返されます)
  • 年齢、性別、場所、募集状況、あいまい検索による疾患条件で一致を判定します。funnel はフィルターの各段階での一致件数を示し、notice は組み入れ基準/除外基準が確認されていないことを伝えます(確認するには clinicaltrials_get_study_record を使用してください)
  • 型付きエラー:blank_value、rate_limited

clinicaltrials://{nctId} リソース
  • application/json 形式の完全なプロトコル記録です。所在地、副次評価項目/その他の評価項目、参考文献はそれぞれ最大 50 件に制限されます。サーバー側で固定されており、引数はありません
  • 結果データは resultsSummary の件数に置き換えられます。truncated と filtersApplied で制限された内容が示され、完全なデータを取得するツールは retrieval に記載されます
  • 型付きエラー:study_not_found、rate_limited

analyze_trial_landscape プロンプト
  • 引数:topic は必須、focusAreas(カンマ区切り)は任意
  • データに基づく状況分析のために、件数取得、検索、フィールド検出、結果取得の各ツールをエージェントに案内するユーザーメッセージを 1 件返します

特徴

@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、OpenTelemetry トレースに対応した構造化ロギングを備えています。

ClinicalTrials.gov 固有の機能:

  • ClinicalTrials.gov REST API v2 用の型安全なクライアント — 一般公開されており、認証や API キーは不要です
  • ClinicalTrials.gov の約 1 リクエスト/秒のレート制限を適用するシリアライズ済みリクエストキュー。429/5xx 応答や HTML エラーページに対する再試行と指数バックオフを備えています
  • fields / sort に渡されたフィールド名を自動修正します(大文字小文字、空白、RecruitmentStatus → OverallStatus などの旧エイリアス)。修正内容はその都度ログに記録されます
  • ジオコーディングへの依存なしで、地理的な近接検索と最寄り施設の再ランキングに対応します
  • デフォルトでは、検索と件数取得から登録数の「不明」を表すセンチネル値(99999999)を除外します。includeUnknownEnrollment を指定すると含められます

エージェントに適した出力:

  • 出典情報 — 検索、件数取得、適格性判定の各ツールは searchCriteria を返します。clinicaltrials_get_study_results では、エイリアス ID が別の試験に解決される場合に canonicalNctId を示します
  • 部分的な失敗への対応 — clinicaltrials_get_study_results は、バッチ全体を失敗させる代わりに、試験ごとの fetchErrors / studiesWithoutResults を返します
  • 型付きエラー — 各ツールは reason コード(study_not_found、blank_value など)を返し、件数に上限のあるリストでは、残りがある場合に限り next*Offset を含めます
  • 応答の整形 — 検索と適格性判定では、約 70KB の完全な記録ではなく、デフォルトで簡潔なインデックスを返します

はじめに

公開ホストインスタンス

公開インスタンスを https://clinicaltrials.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP 経由で、任意の MCP クライアントから接続してください。

{
  "mcpServers": {
    "clinicaltrialsgov-mcp-server": {
      "type": "streamable-http",
      "url": "https://clinicaltrials.caseyjhand.com/mcp"
    }
  }
}
セルフホスト/ローカル

以下を MCP クライアントの設定ファイルに追加してください。

{
  "mcpServers": {
    "clinicaltrialsgov-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["clinicaltrialsgov-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または npx を使用します(Bun は不要です)。

{
  "mcpServers": {
    "clinicaltrialsgov-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "clinicaltrialsgov-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または Docker を使用します。

{
  "mcpServers": {
    "clinicaltrialsgov-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/clinicaltrialsgov-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 以上)。
インストール
  1. リポジトリをクローンします。
git clone https://github.com/cyanheads/clinicaltrialsgov-mcp-server.git
  1. ディレクトリに移動します。
cd clinicaltrialsgov-mcp-server
  1. 依存関係をインストールします。
bun install

設定

すべての設定は任意です。サーバーはデフォルト設定で動作し、API キーも不要です。

変数説明デフォルト
CT_API_BASE_URLClinicalTrials.gov API のベース URL です。https://clinicaltrials.gov/api/v2
CT_REQUEST_TIMEOUT_MSリクエストごとのタイムアウト(ミリ秒)です。正の整数を指定します。30000
CT_MAX_PAGE_SIZEclinicaltrials_search_studies の 1 ページで返す試験数です。1 以上の整数を指定します。1000 を超える値は 1000 に制限されます。200
MCP_TRANSPORT_TYPEトランスポートです。stdio または http を指定します。stdio
MCP_HTTP_PORTHTTP サーバーのポートです。3010
MCP_SESSION_MODEHTTP セッションモードです。stateless、stateful、または auto を指定します。stateless
MCP_AUTH_MODE認証モードです。none、jwt、または oauth を指定します。none
MCP_LOG_LEVELログレベル(RFC 5424)です。info
LOGS_DIRログファイルの保存ディレクトリです(Node.js のみ)。<project-root>/logs
OTEL_ENABLEDOpenTelemetry トレーシングを有効にします。false
OTEL_EXPORTER_OTLP_ENDPOINTトレースとメトリクス用の OTLP ベース URL です。—
OTEL_EXPORTER_OTLP_LOGS_ENDPOINTログエクスポート用の OTLP エンドポイントです。—
LOG_TOOL_FAILURE_PAYLOADS失敗したツール呼び出しの引数と結果を、キー名で機密情報をマスキングし、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)で指定したサイズを上限として記録します。自由形式の値に含まれる秘密情報はマスキングされません。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   # Lint, format, typecheck, and security audit
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    
Docker
docker build -t clinicaltrialsgov-mcp-server .
docker run --rm -p 3010:3010 clinicaltrialsgov-mcp-server

Dockerfile は、デフォルトで HTTP トランスポート、ステートレスセッションモードを使用し、/var/log/clinicaltrialsgov-mcp-server にログを記録します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。

プロジェクト構成

ディレクトリ目的
src/index.tscreateApp() のエントリーポイントです。ツール、リソース、プロンプトを登録し、ClinicalTrials.gov サービスを初期化します。
src/configサーバー固有の環境変数を解析し、Zod で検証します。
src/mcp-server/toolsツール定義(*.tool.ts)です。
src/mcp-server/resourcesリソース定義(*.resource.ts)です。
src/mcp-server/promptsプロンプト定義(*.prompt.ts)です。
src/services/clinical-trialsClinicalTrials.gov REST API v2 クライアントです。リトライ、レート制限、フィールド検索、型を扱います。
tests/単体テストと統合テストです。

開発ガイド

開発ガイドラインとアーキテクチャルールについては、CLAUDE.md を参照してください。要点は次のとおりです。

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで try/catch は使用しません。
  • リクエストスコープのログ記録には ctx.log を使い、console は呼び出しません。
  • 新しいツールとリソースは、src/mcp-server/*/definitions/index.ts のバレル経由で登録します。
  • 生の API レスポンスを検証し、ドメイン型に正規化します。不足しているフィールドを捏造してはいけません。

コントリビューション

問題の報告を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。