mcpField
E
Ema Article57

Ema Article57

リモート
pipeworx.ioヘルスケア05 週間前に更新
リポジトリ公式サイト

Ema Article57 について

Ema Article57は、EEA各国の医薬品販売承認を調べる規制情報向けMCPサーバーです。製品と承認国ごとの記録を検索でき、EMAの事前処理済みデータセットを使って製品情報やスナップショット間の変更を確認します。

主な機能

  1. 01製品、成分、保有者、国で検索
  2. 02製品の国別承認記録を取得
  3. 03日付付きスナップショット間の追加・削除を比較
  4. 04項目、国名、スナップショット情報を確認
  5. 05EMAの公式資料URLを返却

活用シーン

  1. 01医薬品が承認されているEEA諸国の確認
  2. 02国ごとの販売承認保有者の特定
  3. 03企業が保有するEEA製品の確認
  4. 04比較可能なスナップショットがある場合の登録変更追跡

MCP 対応

Pipeworxゲートウェイ経由、またはローカルのstdio MCPサーバーとして、EMA Article 57の製品検索、記録、データセット情報、スナップショット変更ツールをMCPクライアントに提供します。

設定

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

エンドポイントhttps://gateway.pipeworx.io/ema-article57/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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

@pipeworx/ema-article57

EMA Article 57 製品データ — 欧州経済領域内のいずれかの国で有効な販売承認を受けているすべての医薬品(中央審査方式、相互承認方式、分散審査方式、および各国独自の承認を含む)。製品と承認国の組み合わせごとに1行で、各製品の販売承認保有者とファーマコビジランスシステムの所在地を記載しています。キー不要です。

Pipeworx の一部です — AI エージェントを1683以上のライブデータソースに接続するMCPゲートウェイです。

これはEMAのワイドな登録情報です。関連パックの ema-medicines が対象とするのはEUの中央審査方式で承認された医薬品のみで(医薬品ごとに約1行、ステータス、適応症、承認日などのより詳しい項目を収録)、Article 57はその反対のトレードオフです。項目は少ないものの、ema-medicines が明示的に対象外としている、EEA各国で独自に承認された製品もすべて網羅しています。

ツール

  • ema_article57_search(query?, active_substance?, holder?, country?, route?, limit?, offset?) — 全文検索/条件付き検索に対応し、実際のoffset+limitページネーションとtotal_matches件数を返します。「XはEEAのどの国で承認されているか」「国YでのXの販売承認保有者は誰か」「会社ZがEEAで保有する製品はどれか」といった質問に回答します。
  • ema_article57_product(name, country?) — 製品名から、1製品に関するすべての承認国レコードを返します(完全一致を優先し、一致しない場合は部分一致にフォールバックしてmatch_typeにその旨を示します)。Article 57には適応症のテキストも製品ごとのURLもないため、言い換えた適応症ではなく、権威あるEMAのソース文書URLを返します。
  • ema_article57_recent_changes(since) — このパック独自の過去の日付付きスナップショットを差分比較して、指定日以降に登録情報へ追加/登録情報から削除された製品を返します(ソースには変更日列がありません。「注意点」を参照)。指定期間を対象とするスナップショットがない場合、推測による空の差分ではなく、理由を明記してcomparable: falseを返します。
  • ema_article57_dataset_info() — EMAの公式一括ダウンロードURL、現在の行数、このパックで記録されているスナップショットの日付、承認国の値の重複のない全リストを返します(countryで絞り込む前に正確な表記を確認できます)。

認証

キー不要です。

データソース

  • https://www.ema.europa.eu/en/documents/other/article-57-product-data_en.xlsx — EMAの「Article 57データベースの公開データ」ページからリンクされているArticle 57データベースのエクスポートファイルです("Article 57データベースの公開データ")。2026-09-25にライブで確認済み:HTTP 200、Last-Modified: Thu, 24 Sep 2026 13:38:24 GMT、7,870,020バイト、データ行数164,314。ページには、ファイルに「EMA/518502/2018 Rev. 88」が記載され、「定期的に」更新されるとあります。公表された更新頻度はないため、Last-Modifiedが唯一の実際の鮮度指標です。
アーキテクチャ — このパックはEMAのデータをリアルタイムで取得しません

2026-09-25に実ファイルを測定したところ、圧縮時に7.87 MBのファイルを展開すると、sheet1.xmlが63.0 MB、sharedStrings.xmlが4.7 MB(164,314行×8列)になりました。同じ正規表現スキャン方式で、はるかに小さいEMAエクスポート(ema-medicinesの約0.9 MBのレポート)を解析しただけでも、V8ヒープの使用量はすでに123 MBと測定されています。このファイルは約9倍大きく、Cloudflare Workerの128 MBの上限には収まりません。そのため、このパックはリクエストごとにEMAを呼び出すのではなく、共有のpipeworx-datasets R2バケットにある、事前構築・事前圧縮済みのデータセットを読み込みます。scripts/ingest-ema-article57.mjsが実際の取得とXLSX解析を(オフラインで、Worker内ではなく)行い、次のファイルを書き出します。

  • ema-article57/latest.json.gz — 164,314行すべてを辞書エンコードしたファイル(スキーマ2:各列は一意な文字列のテーブルと、行ごとに1つの整数インデックスで構成)。非圧縮時は6.35 MB、gzip圧縮時は1.42 MBで、各アイソレートにつき1回読み込まれます。

    行オブジェクトではなく列を使う理由: スキーマ1では行ごとに1つのオブジェクトを保存していました(JSONで29 MB)。2026-09-25、ゲートウェイのアイソレート内で4つのツールのうち3つがCloudflareエラー1102(リソース制限)で停止しました。列の値は大きく重複しています。値は合計1,590万文字で、一意な値は280万件、国は32か国、保有者は約4,000件です。そのため、フィルターは一意な値ごとに一度判定し、行ごとにインデックスで参照します。実ファイルを使ってローカルで測定したところ、searchはベースラインより最大約33 MB、recent_changes(2つのスナップショット)は約59 MB使用し、キャッシュ後に保持するデータは15 MBでした。パックは、誤読を防ぐため、ほかのスキーマをすべて拒否します。

  • ema-article57/snapshots/YYYY-MM-DD.json.gz — 取り込みを実行するたびに作成される日付付きコピー。ema_article57_recent_changesで差分を比較するために保持されます。

  • ema-article57/snapshots-index.json — 記録されているスナップショットの日付を列挙した、小さな非圧縮ファイルです。

  • ema-article57/meta.json — 生成メタデータです。

定期的に取り込みを再実行してください(node scripts/ingest-ema-article57.mjs)。EMAによる更新を追跡でき、ema_article57_recent_changesで比較できるスナップショットが増えます。配布時点で記録されているのは2026-09-25のスナップショットだけなので、recent_changesはそれ以前の日付をsinceに指定した場合、まだ回答できません。そのことを明示し、推測でゼロと回答することはありません。

ゲートウェイの_r2バインディングがない場合(このパッケージをnpm installしただけの場合)、すべてのツールは、直接取得すべき上流URLを示す{reason: "dataset_unavailable", hint: ...}を返します。リアルタイムのフォールバックはありません。リクエストごとにリアルタイム取得と解析を行う方法が実行不可能であることこそ、このアーキテクチャの説明で述べている内容だからです。

ライセンス — EMAの法的通知で明示的に許可されています

EMAの法的通知:"EMAのウェブページで公開されている情報および文書は公開情報であり、EMAが常に資料の出典として明記されることを条件に、利用する手段や形式を問わず、非営利および営利目的で、全体または一部を複製および/または配布できます。" 明示的な再利用許可であり、黙認ではありません。ここでコピーを構築しても、mirror-needs-grant-proxy-does-notのプロキシ限定フォールバックには依存しません。

スキーマ — 8 列のみ

20 行目がヘッダーです(1〜19 行目は、medicines-output-* レポートと同じ形式の出典情報バナーと空行です)。21 行目以降がデータです。列の順序は、製品名、有効成分、投与経路、承認国、販売承認取得者、安全性監視システムマスターファイルの所在地、安全性監視に関する問い合わせ先メールアドレス、安全性監視に関する問い合わせ先電話番号です。

最初の 6 列を残し、安全性監視に関する問い合わせ先メールアドレスと電話番号は、保存する前に削除します。 これらは連絡先情報であり、小規模な承認取得者の場合、個人名が含まれる本人の連絡先であることもよくあります。また、このパックが提供するのはコピーであり、ライブプロキシではないため、CLAUDE.md の個人データに関する例外が適用されます。ema_article57_dataset_info では、これらを fields_withheld に列挙しています。判断が下されない限り、これらを再び追加しないでください。

日付フィールド、製品ごとの ID、製品ごとの URL はありません。 第 57 条は規制上の簡易的な参照情報(誰が何を保有し、どこにあるか)であり、臨床登録簿ではありません。適応症の説明、承認日、ステータスフィールドはありません。ema_article57_dataset_info に、存在するものと存在しないものが正確に記載されています(fields / fields_not_present)。

粒度 — 設計上、製品 × 国ごとに 1 行

同じ製品名が、承認されている各 EEA 加盟国につき 1 回ずつ繰り返されるのは正しい動作です(例:「Helixor A」はラトビアとリトアニアで別々の行があり、それぞれに承認取得者と安全性監視の連絡先があります。この例では同じ承認取得者ですが、すべての製品で同じとは限りません)。ema_article57_product は一致するすべての行を返し、1 つのレコードに集約することはありません。また、countries_found に該当国が列挙されます。

国名は EMA 独自の英語表記であり、ISO コードではありません

country の値は、EMA が公開している自由記述のテキストです。例は "Germany"、"United Kingdom (Northern Ireland)"、"Czech Republic"、"European Union"(はい、これは実際の値で、EEA の範囲に含まれる "Iceland"、"Liechtenstein"、"Norway" と並んで国の列に記載されています)です。ema_article57_search の country フィルターは、大文字と小文字を区別せず、完全一致で検索します。そのため、ISO コードや略称を推測せず、まず ema_article57_dataset_info の distinct_countries で表記を確認してください。

ema_article57_recent_changes は少なくとも 2 つのスナップショットを必要としますが、出荷時点では 1 つしかありません

ソースには行ごとの変更日が一切公開されていないため、「何が変わったか」に答えるには、このパック自身の日付付きスナップショット 2 つを比較するしかありません。出荷時点では 1 つ(2026-09-25)しかないため、現在、すべての since リクエストは comparable: false, reason: "no_snapshot_at_or_before_since" を返します。これは正しい動作であり、バグではありません。ツールは作り物の空の差分を返すのではなく、その旨を伝えます。このツールが実際に回答できるようにするには、取り込みスクリプトを定期実行する必要があります。上記の「アーキテクチャ」を参照してください。

R2 バックエンドのパックに対する add-pack.mjs の自動スモークテストの既知の不足

scripts/lib/pack-smoke.mjs(scripts/add-pack.mjs のステップ 3 で使用)は、smoke.json にある引数だけで各ツールを呼び出します。_r2 バインディングを注入する仕組みがないため、このパック(およびほかのすべての injectR2 パックである court-listener、crs-reports、esef-filings、fda-drug-competition)の記録済みスモークテスト結果は、実データではなく、正直に「バインディングなし」と回答します(dataset_unavailable)。そのペイロードは payload-emptiness.mjs のヒューリスティック上、文字どおりの空ではありません(配列以外のキーを含む)ので、自動ゲートは実データの経路を一度も実行せずに機械的に通過します。このパックのツールは、出荷前に手作りのバインディングシムを使い、本番稼働中の R2 データセットに対して独立に検証済みです(164,314 件の実データ行を使った検索/製品/dataset_info/recent_changes の呼び出し)。記録については、fleet #2421 のクローズノートを参照してください。これはいずれ pack-smoke.mjs 全般で修正する価値がありますが、このパック単独の範囲外です。

クイックスタート

MCP クライアント(Claude Desktop、Cursor、Windsurf など)に追加します。

{
  "mcpServers": {
    "ema-article57": {
      "url": "https://gateway.pipeworx.io/ema-article57/mcp"
    }
  }
}
このエンドポイントが実際に提供するもの

https://gateway.pipeworx.io/ema-article57/mcp の tools/list は、上の表にあるツールに加えて、共有の Pipeworx メタツール(ask_pipeworx、 discover_tools、search_within、remember/recall など、ゲートウェイ全体で使えるツール一式)も返します。そのため、表示されるツール数はこの表より多くなります。現在、単一パックのエンドポイントには、そのパック独自のツールに加えて、共有ツールがおよそ30個表示されます。接続の initialize レスポンスには正確な対象範囲が記載されており、その日の状況を知るための正式な情報源です。

これは意図的な仕様であり、意図せず多重化されているわけではありません。メタツールを使うと、このパックが対象としていない質問にも対応できます。ask_pipeworx がカタログ全体にわたってルーティングするため、MCP サーバーをもう1つ追加する必要はありません。現在、メタツールなしでパックのエンドポイントをマウントする方法はありません。追加のスキーマによるコンテキストの消費が、ルーティングの利点を上回る場合は、複数のパックエンドポイントではなく、フルゲートウェイに一度だけ接続してください。

または、フル Pipeworx ゲートウェイに接続すると、このパックのものだけでなく、すべてのパックのツールが直接一覧表示されます。

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://gateway.pipeworx.io/mcp"
    }
  }
}

どちらの URL も、同じゲートウェイと同じ1683以上のデータソースに接続します。違いは、どのパックのツールが直接一覧表示されるかだけです。どちらからでも、ask_pipeworx を使ってすべてのツールにアクセスできます。

MCP クライアントをお持ちでない場合:HTTP で呼び出す

curl -X POST https://gateway.pipeworx.io/v1/tools/ema_article57_search \
  -H 'Content-Type: application/json' \
  -d '{"query":"Helixor","limit":5}'

最初の呼び出しにはアカウントは不要です。任意のツールを確認するには、GET https://gateway.pipeworx.io/v1/tools/ema_article57_search を実行します。ツールを探すには、{"query":"..."} を指定して POST https://gateway.pipeworx.io/v1/tools/search_packs を実行します。

スタンドアロン(ゲートウェイアカウント不要)

このパッケージはローカルの stdio MCP サーバーとしても実行できます。Pipeworx アカウントも、ゲートウェイとの往復通信も不要です。

{
  "mcpServers": {
    "ema-article57": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-ema-article57"]
    }
  }
}

または、直接実行して起動を確認します。

npx -y @pipeworx/mcp-ema-article57

stdin/stdout 経由で MCP をやり取りし、このパックのツールのみを対象に initialize/tools/list/tools/call に応答します。上記のゲートウェイ接続で追加される共有メタツールは含まれません。同じソース、同じツールで、ask_pipeworx によるルーティングはありません。

ask_pipeworx を使用する

ツールを直接呼び出す代わりに、自然な英語で質問できます。これは、上記のパックエンドポイントでもフルゲートウェイでも利用できます。

ask_pipeworx({ question: "your question about Ema Article57 data" })

ゲートウェイが適切なツールを選択し、引数を自動的に設定します。

詳細

ライセンス

MIT

コメント

MCP は初めてですか?

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

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