mcpField
E
eur-lex-mcp-server

eur-lex-mcp-server

リモート
github.com/cyanheads法務・行政112 日前に更新
リポジトリ

eur-lex-mcp-server について

eur-lex-mcp-serverは、法律・政策調査向けにEUR-LexのEU法令、CJEU判例、条約を提供します。引用の解決、文書間の関係の追跡、EuroVoc概念の参照も行えます。

主な機能

  1. 01法令、条約、立法準備文書の検索
  2. 02文書のメタデータと全文の取得
  3. 03CELEX、ELI、ECLI、OJ引用の解決
  4. 04CJEUと一般裁判所の事件検索
  5. 05CELLAR文書間の関係の追跡
  6. 06EuroVoc概念の参照

活用シーン

  1. 01日付、種類、主題でEU法令を検索
  2. 02引用文書から条文や判決を取得
  3. 03改正、廃止、法的引用のつながりを追跡
  4. 04裁判所や事件番号でEU判例を調査

MCP 対応

MCPクライアントに7つのツール、2つのリソース、比較分析用プロンプトを提供します。stdioとStreamable HTTPに対応し、Skills拡張を通じてスキルも提供します。

設定

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

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

パッケージ
npm@cyanheads/eur-lex-mcp-server0.20.0

ツール

7
パラメーター型必須説明
identifierstringはい解決する EU 法令引用:CELEX 番号(例:32016R0679)、文書レベルの ELI URI(例:http://data.europa.eu/eli/reg/2016/679。/oj サフィックスの有無は問いません)、ECLI(例:ECLI:EU:C:2014:317)、または法令の種類と年を示す OJ 引用。identifier_type "auto" では、次の引用が示す CELEX に解決されます:Regulation (EU) 2016/679、Regulation (EC) No 1049/2001、Directive 95/46/EC、Decision No 1313/2013/EU、Council Framework Decision 2002/584/JHA、Council Joint Action 2008/124/CFSP、Common Position 2003/444/CFSP。数字の前に "No" がある場合は番号/年、ない場合は年/番号です。2 桁の年は 19YY とみなします。法令の種類(95/46/EC)または年(Regulation No 17)がない引用は解析されません。CELEX は小文字でも認識され、CELEX: プレフィックスの後、uri=CELEX:… を含む EUR-Lex ページ URL(例:https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679)、または publications.europa.eu/resource/celex/ URI からも読み取られます。ELI は https、eur-lex.europa.eu ホスト上、スキームなし、末尾スラッシュ付き、または /oj の後に言語セグメント(…/oj/eng)や日付が続く形式にも対応します。事件番号(C-131/12)は単一の文書ではなく複数のレコードを示すため、found false と eurlex_get_cases への参照を返します。
identifier_typeenumいいえ識別子の形式です。"auto" は CELEX、ELI URI、ECLI(大文字・小文字を問わず ECLI: プレフィックスで判定)、または OJ 引用を検出します。"celex"、"eli"、"ecli" はそれぞれの検索を強制します。OJ 引用は "auto" の場合にのみ認識されます。celex | eli | ecli | auto

詳細

@cyanheads/eur-lex-mcp-server

EU 法令、CJEU の判例法、条約を検索し、CELLAR の関係グラフをたどり、MCP 経由で EuroVoc の概念を解決します。STDIO または Streamable HTTP に対応しています。

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

Version License Docker MCP Server npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

公開ホスト型サーバー: https://eur-lex.caseyjhand.com/mcp


概要

EUR-Lex の EU 法令、CJEU の判例法、条約を扱います。文書や判例法の検索、全文の取得、引用の解決、法令間の改正・引用関係の追跡、EuroVoc 件名シソーラスの閲覧ができます。

ツール
ツール説明
eurlex_search_documents種類、日付、EuroVoc の件名、作成機関、施行状況で EU 法令、条約、準備行為を検索します
eurlex_get_documentCELEX、ELI、または work URI を指定して、法令または判例のメタデータ(ELI、官報参照、発効日を含む)と全文(HTML、Markdown、または Formex4 XML)を取得します。いずれの場合も、セクションの概要を確認できます
eurlex_lookup_celexCELEX 番号、ELI URI、ECLI、官報引用(Regulation (EU) 2016/679)、または官報参照(OJ L 119, 4.5.2016, p. 1)を正規の CELLAR work に解決します
eurlex_get_cases事件番号、裁判所、事件の種類、日付範囲で CJEU および一般裁判所の判例法を検索します
eurlex_get_relationsCELLAR の関係グラフをたどります。改正、廃止、統合、法的根拠とその下で採択された work、法令が採択する提案、解釈判決(条文別)、引用、国内法化を確認できます
eurlex_browse_subjectsEuroVoc シソーラスを検索し、用語を概念 URI に解決します
eurlex_query_sparqlCELLAR エンドポイントに対して、読み取り専用の生の SPARQL SELECT を実行します
リソース
リソース説明
eurlex://document/{celexNumber}CELLAR の文書のメタデータスナップショット
eurlex://document/{celexNumber}/relationsCELLAR の文書の1ホップの関係性の概要

リソースのデータはすべて、ツールからも取得できます。

プロンプト
プロンプト説明
eurlex_comparative_analysis政策分野に関するEUと米国の法的分析の枠組みを作成します
スキル
スキル説明
eur-lex-guideツールを呼び出すエージェント向け:各種CELEX、ELI、ECLI、事件番号の形式の由来、ある法律が施行中、廃止済み、未解釈、または確定済みと結論付ける前に行うべき確認、および eurlex_query_sparql 用のCELLAR SPARQLとCDMのリファレンス

スキルは skills/ にあります。プラグインのインストール、.mcpb バンドル、npm パッケージ、Docker イメージに含まれており、サーバーはSkills拡張機能(skills/list、skill:// リソース)を通じてMCPクライアントに提供します。


機能リファレンス

eurlex_search_documents ツール
  • 次のフィルターから少なくとも1つを指定します:keyword(英語のタイトル、CELEX番号または 2016R0679 などの一部。R(01) のように数字を含まない文字列を指定すると、すべてのCELEXを検索するため数十秒かかる場合があります。本文は検索しません)、document_type(REG、DIR、DEC、TREATY、JUDG、OPIN_AG、PROP、REC)、date_from/date_to、eurovoc_concept(eurlex_browse_subjects から取得)、author_institution、または in_force(true/false。false は廃止済み、失効済み、未施行の法律を対象とします)
  • offset/limit で最大100件ずつページングします(limit が100を超える場合は100件で処理され、limit_clamp に報告されます)。新しい順に並び、各行には is_consolidated と is_corrigendum のフラグが付きます。正誤表と統合版の文書は、それぞれ include_corrigenda と include_consolidated を指定した場合にのみ表示されます。ページングは10,000行で終了します。最終ページには next_offset がなく、その先に続く date_from/date_to の期間を示す notice が含まれます
  • 該当なしの場合は、フィルターを広げる方法を示す notice を含む空のページが返されます。型付きエラー:no_filters、invalid_date_range、invalid_author_institution、invalid_keyword(文字または数字を含まない)、offset_past_window(offset が10,000以上)
  • author_institution は、eurlex_get_document が返す英語の当局名ラベルや国内裁判所名(European Parliament、Supremo Tribunal de Justiça など)に一致します。日付範囲を指定してもしなくても検索できます

eurlex_get_document ツール
  • celex_number、eli_uri、work_uriのいずれか1つだけを指定します(CELEX:プレフィックスやEUR-Lex URLなど、貼り付けた形式も受け付けます)。本文は、24のEUR-Lex言語のいずれかでhtml(デフォルト)、markdown、またはxml(Formex4)として取得でき、該当言語がない場合は英語にフォールバックします。判例にはecli、formation、referring_court、subject_matter、case_referenceも含まれます。統合版のテキストでは、基本法令がbase_act_celexとして示されます
  • content_modeは"paged"(デフォルト)、"full"、または"metadata_only"です。呼び出しあたりの上限は100,000文字で、より大きなlimitを指定した場合はlimit_clampに示されます。content_chars_total/has_moreを使ってページを続けられます。outline: trueはオフセット付きの見出しを一覧表示し、select(例:{ articles: "1,5,17" })を指定すると該当するセクションのみを返します。判決と法務官意見では、アウトラインにセクション見出しが一覧表示され、select: { operative_part: true }を指定すると主文のみが返されます
  • is_supersededは、より新しい統合版があることを示します(current_consolidated_celex、consolidated_as_of)。resolve: "current_consolidated"を指定すると、その統合版が返されます。in_force: falseの場合、CELLARに記録があればrepealed_by、end_of_validity、またはentry_into_forceが含まれます。型付きエラー:invalid_identifier_args、not_found、content_challenge(テキストの代わりにWAFのボットチャレンジが返された場合)
  • 引用情報。CELLARに記録がない項目は含まれません。eli(統合版のテキストには、その時点の固有のELIが保持されます)。oj_referenceは官報の参照情報です(OJ L 119, 4.5.2016, p. 1–88。1968年より前はシリーズ記号なし、OJ L 42Iのようにクラス記号付きの場合あり、法令ごとに公表される場合はOJ L, 2024/1689, 12.7.2024)。ページ番号は英語版から取得され、1973年より前は原語版から取得されます。再版された法令については、最も早い号が示されます。dates_of_effectは、記録されているすべての日付を{ date, type? }として示し、typeはentry_into_force、application、partial_application、provisional_application、takes_effect、takes_partial_effectのいずれかです。未施行の法令で施行日が将来の場合も、entry_into_forceはその意味を保ちます。統合版のテキストでは、基本法令のoj_reference、dates_of_effect、transposition_deadlinesが示されます。transposition_deadlinesは指令に適用されます
  • 利用可能な従来形式のHTML/Markdown本文には、content_omissions: { tables }が含まれることがあります。これは、返された範囲外も含むソース全体を対象に、欠落した表のマーカーを数えたものです。ページを続けても、これらの表は取得できません。alternative_representationsは、探索に成功した場合、提供された文書と言語について告知されているPDFストリームを一覧表示します。XMLの利用可否はこれとは独立しています。メタデータのみを取得する呼び出しでは、ソースの欠落箇所は確認されません
  • 国内実施措置には、引用情報の項目が限られたnational_measureが含まれます。項目はjournal、number、pages、publication_date、notification_dateで、メタデータのみを取得する呼び出しでも含まれます。番号とページはソースの表記を維持します。公表日、通知日、文書の日付はそれぞれ異なります。本文が利用できない場合は、官報の引用情報を使って取得してください。国内ポータルのURLは推定されず、通知があっても完全な国内法化を証明するものではありません
eurlex_lookup_celex ツール
  • CELEX 番号、ELI URI、ECLI、または法令の種類と年を示す官報引用(Regulation (EU) 2016/679、Directive 95/46/EC、任意で括弧内の官報参照を続けたもの(Directive 95/46/EC (OJ L 281, 23.11.1995, p. 31))を指定します。貼り付けられた形式(CELEX: プレフィックス、EUR-Lex ページ URL、スキームや言語セグメントの有無を問わない ELI)は正規化され、celex_number に返されます。法令の種類を含まない引用(95/46/EC)や年を含まない引用(Regulation No 17)は解析されません
  • 官報参照から、引用されたページで始まる法令を特定します。号、発行日、最初のページ(OJ L 281, 23.11.1995, p. 31、of 23.11.1995、ページ範囲、OJ L 42I や OJ C のようなクラス記号、および1968年より前のシリーズ記号のない形式 OJ 13, 21.2.1962, p. 204/62)に対応します。また、年を先に記す形式の OJ 1995 L 281, p. 31 と OJ 1995 L 281/31、法令ごとの形式の OJ L, 2024/1689, 12.7.2024 と OJ C, C/2024/2664, 29.4.2024 にも対応します。指定された日付は号の発行日と一致する必要があります。ページは英語版で照合されます。ただし、号に英語のページがない場合、1973年より前は任意の言語で照合されます。年または最初のページを含まない参照(OJ L 281、OJ L 119/1)は解析されません。auto の場合のみ認識されます
  • identifier_type は形式を自動検出するか、形式を指定します。自動検出で入力を分類できない場合(年または最初のページを含まない官報参照など)は ambiguous_identifier が発生します。事件番号(C-131/12)を指定すると、found: false と、eurlex_get_cases を案内する notice が返されます
  • 法令 URI、確認済みの CELEX 番号、リソースの種類、日付、および事件の ECLI を返します。適切な形式の識別子に一致する法令がない場合、官報参照の日付またはページに一致するものがない場合、および最初のページで複数の法令が始まる場合は、found: false と notice が返されます(notice には各 CELEX が示されます)

eurlex_get_cases ツール
  • フィルター:case_number(C-131/12、T-22/20、F-12/05、または1989年より前の 26/62。その番号で登録されたすべての判決、命令、法務官意見を取得します)、court(CJEU または GC)、case_type(judgment、order、ag_opinion)、keyword(英語のタイトル、CELEX 番号、または 2013CJ0131 のような一部の文字列)、および date_from/date_to。include_derivative を指定して通知、抄録、要約、正誤表を追加しない限り、一次記録のみを対象とします
  • offset/limit を使って最大100件ずつページを取得します(limit が100を超える場合は100件で返され、limit_clamp にその旨が示されます)。新しい順に並びます。各事件には、記録されている場合は ECLI が含まれ、さらに formation、advocate_general、display_title、parties、referring_court、subject_matter、case_reference が含まれます。これらのフィールドでタイトルの一部が欠ける場合に限り、元の title も含まれます。ページ取得は10,000行で終了します。最終ページには next_offset は含まれず、その先まで続く date_from/date_to の期間を示す notice が含まれます
  • 該当なしの場合は、フィルターを広げる方法を示す notice とともに空のページが返されます。型指定エラー:invalid_case_number、invalid_date_range、invalid_keyword(文字または数字が含まれていない)、offset_past_window(offset が10,000以上)
  • case_type: "ag_opinion" には法務官意見(OPIN_AG)と見解(VIEW_AG)が含まれます。resource_type によって AG Opinion と AG View が区別されます

eurlex_get_relations ツール
  • celex_numberまたはwork_uriのいずれか一方のみを指定します。relation_typesでcites、amends、amended_by、repeals、repealed_by、implicitly_repeals、implicitly_repealed_by、legal_basis、basis_for、interprets、interpreted_by、consolidated_version、national_transposition、adopts、adopted_byのいずれかに絞り込めます(省略すると全15種類が対象です)
  • basis_forは、その法令を法的根拠として挙げる文書を一覧表示します。interpreted_byは、その法令を解釈するCJEUおよび一般裁判所の判決を、interpretsは判決が解釈する対象を一覧表示します。adoptsは、法令が採択する文書(通常は欧州委員会の提案)を、adopted_byは文書を採択した法令を一覧表示します。member_statesを指定すると、national_transpositionを指定した加盟国(ISO 3166-1 alpha-3または2文字コード。alpha-3として返されます)に絞り込めます。national_transpositionなしで使用すると、member_states_not_applicableエラーになります
  • articleを指定すると、法令の1つの記事に記録された規定がある判決にinterpreted_byを絞り込みます(17、6a、Article 17、Art. 17など、大文字・小文字は問いません。空欄は省略され、段落、範囲、ローマ数字は拒否されます)。階層の深さを問わず照合し、先頭のゼロは無視します。また、文字を指定すると対応するラテン語の序数にも一致します(28cはArticle 28 quaterにも一致します)。CELLARに規定が記録されていない判決は除外され、その旨はnoticeに記載されます。返されるarticleは正規化された形式です。interpreted_byなしで使用すると、article_not_applicableエラーになります
  • 改正、廃止、解釈、採択の各行には、CELLARが関係の対象として記録した規定をprovisionsとして含みます。規定はコンパクトコード(A17P1LCはArticle 17(1)(c))または権限トークンコード(AR 43 PA 4)で表されます。規定のない行は、規定が記録されていないことを示すものであり、関係が法令全体に及ぶことを意味するものではありません。深さ1でも予算内に収まらないページでは、規定を全件まとめて、サイズの大きい順に省略し、各行の省略件数をprovisions_withheldとして報告します。規定の取得に失敗した場合、CELLARは規定を除いた行を返し、その内容はnoticeに記載されます
  • 関係の種類と方向ごとにoffset/limitを使用してページ分割される1ホップの関係です(最大100、デフォルト100。より大きなlimitはlimit_clampで報告されます)。新しいものから順に並びます。種類と方向ごとのページは行数10,000件までで、それ以降の古い文書については、実行可能なクエリとともにnoticeでeurlex_query_sparqlに案内します
  • 各レスポンスの全体は、JSONとエンリッチメントを含め、UTF-8で64,000バイトを上限として個別に予算管理されます。ページが上限を超える場合、収まる範囲で種類と方向ごとに共通の最大深度まで保持し、行とタイトルは全体を含めます。noticeには要求された上限、適用された上限、省略された行数が記載されます。next_offset(現在のoffsetに適用された深度を加えた値)から続けてください。深度1のページは上限を超えていても全件返され、その旨が明示されます。上限内に収まるページは変更されません。relation_typesを省略することは、全15種類を列挙することと同じです
  • 各関係にはrelation_type、direction(outgoing/incoming)、related_work_uriが含まれます。判明している場合は、related_celex_number、related_date、related_title(英語のみ)、およびnational_transpositionの行にはrelated_member_stateも含まれます。empty_relation_typesにより、「この種類の関係がない」場合と「ページ分割で除外された」場合を区別できます。型付きエラー:invalid_identifier_args、member_states_not_applicable、article_not_applicable、not_found、offset_past_window

eurlex_browse_subjects ツール
  • 優先ラベルと代替ラベルの両方を照合するため、一般的な同義語からも該当する概念を解決できます。EUの公用語のいずれかをlanguageで指定します(デフォルトは英語)。offset/limitによるページ分割に対応します(最大50。より大きなlimitは50で処理され、limit_clampに報告されます)。行数は10,000件までです(それを超えるoffsetではoffset_past_window)
  • 概念URI、優先ラベル、コード、上位(親)ラベル、および一致した場合は一致した代替ラベルを返します。一致がない場合は、notice付きの空のページを返します
  • 完全一致のラベルが最初に表示され、次にラベルまたは単語の先頭での一致、その後にその他の部分一致が表示されるため、"AI"では人工知能が先頭になります

eurlex_query_sparql ツール
  • 読み取り専用の SELECT のみ対応しています(更新形式および ASK/CONSTRUCT/DESCRIBE は拒否されます)。cdm:、skos:、xsd: のプレフィックスは自動的に挿入されます。timeout_hint は任意で指定できます(1000~55000 ms)。
  • 結果は MAX_SPARQL_RESULTS(デフォルトは 100)で上限が設定されています。結果が切り詰められた場合、notice には ORDER BY を追加し、OFFSET を大きくして繰り返すよう記載されます(最大 10,000 行)。型指定されていない文字列リテラルで結果が 0 件の場合、型を指定(^^xsd:string、ELI には ^^xsd:anyURI)するか、言語タグを付けるよう notice に記載されます。
  • 型付きエラー:not_read_only(SPARQL Update)、unsupported_query_form(ASK、CONSTRUCT、DESCRIBE、または SELECT がない場合)、sparql_error、sparql_timeout

eurlex://document/{celexNumber} リソース
  • application/json 形式のメタデータスナップショット — 文書種別、著者機関(eurlex_get_document によるラベル)、法務官、日付、英語のタイトル、現行法かどうかを示すフラグ、eli、oj_reference、dates_of_effect、transposition_deadlines、法的根拠、EuroVoc の主題(引用に関する 4 つのフィールドは eurlex_get_document と同じ)。統合版のテキストは独自の eli を保持し、base_act_celex を追加します。著者、現行法かどうかを示すフラグ、oj_reference、dates_of_effect、transposition_deadlines、法的根拠、主題は、その基礎となる法令から取得されます。
  • celexNumber は eurlex_search_documents、eurlex_get_cases、または eurlex_lookup_celex から取得します。

eurlex://document/{celexNumber}/relations リソース
  • eurlex_get_relations の 15 種類すべての関係を対象とした、1 階層分の関係概要です。provisions は含まれません。関連する各文書には、存在する場合、related_date と英語の related_title が含まれます。関係の種類および方向ごとに最大 25 件(新しいものを優先)です。
  • 関係がさらに存在する場合は、truncated と eurlex_get_relations への継続ポインターが含まれます。

eurlex_comparative_analysis プロンプト
  • 引数:domain は必須です。focus は任意で、該当する分析軸に組み込まれるか、独立したセクションとして追加されます。
  • EU 法の用語(「antitrust」→「competition law」など)で分野を言い換えた調査計画を返します。EU 側では eurlex_browse_subjects → eurlex_search_documents → eurlex_get_document → eurlex_get_relations の順に呼び出し、米国側では courtlistener_search_opinions を呼び出します。さらに、6 つの分析軸からなるフレームワークを提示します。

特長

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

EUR-Lex 固有の機能:

  • API キーは不要です。CELLAR SPARQL と EUR-Lex REST コンテンツエンドポイントはいずれも一般公開されています
  • SPARQL は CDM プレフィックス宣言を組み込んで POST されます。サーバー側で LIMIT(最大 100)を適用し、Virtuoso のタイムアウトを防ぎます
  • 法令本文は CELLAR のコンテンツネゴシエーションで取得します。HTML は提供された状態のまま返され、複数パートの Formex4 XML は 1 つのドキュメントにまとめられ、Markdown はサーバー側で変換されます
  • 構文、コンパイル、ソートウィンドウのエラーは即座に sparql_error として失敗します(ソートウィンドウエラー SR353 は、OFFSET を下げるかクエリの範囲を絞るよう示唆します)。タイムアウトは sparql_timeout として失敗し、どちらも再試行されません。ゲートウェイページなどの一時的な障害は、呼び出し全体で共有されるクエリ予算(SPARQL_QUERY_TIMEOUT_MS)の範囲内で再試行されます。予算によって打ち切られた再試行ラダーでは、最後の試行自体のエラーが報告されます
  • 要求された翻訳が利用できない場合は英語に自動フォールバックし、要求された言語と実際に使用された言語を報告します

エージェントに使いやすい出力:

  • サーバーレベルの指示に EuroVoc の前提条件に関する案内が含まれています。エージェントは概念で絞り込んだ検索の前に eurlex_browse_subjects を実行するよう指示されます
  • eurlex_lookup_celex は CELEX/ELI/ECLI の存在を事前に確認し、後続の文書取得や関連情報取得でのエラーを防ぎます
  • content_status、content_unavailability_reason、要求された言語と実際に使用された言語のフィールドにより、文字列の解析をせずに、スキップ済み、取得可能、存在しない、上流で失敗、不完全なコンテンツを区別できます
  • すべてのツールのエラーコントラクトに型付きの reason コードがあり、エージェントは結果に応じてプログラムから分岐できます

はじめに

インストールせずに、ホスト型インスタンスに接続します。

claude mcp add --transport http eur-lex-mcp-server https://eur-lex.caseyjhand.com/mcp

または、ローカルで実行します。

claude mcp add eur-lex-mcp-server -- npx -y @cyanheads/eur-lex-mcp-server

ほかのクライアントでは、MCP 設定ファイルに次を追加します。

{
  "mcpServers": {
    "eur-lex-mcp-server": {
      "command": "npx",
      "args": ["-y", "@cyanheads/eur-lex-mcp-server"]
    }
  }
}

API キーは不要です。Docker またはソースからのビルドについては、サーバーの実行を参照してください。


設定

すべての設定は、src/config/server-config.ts の Zod スキーマによって起動時に検証されます。

変数説明デフォルト
CELLAR_SPARQL_ENDPOINTCELLAR SPARQL エンドポイント URL の上書き(例:ローカルの Virtuoso ミラーを使用する場合)。http://publications.europa.eu/webapi/rdf/sparql
EURLEX_CONTENT_BASE_URLEU Publications Office CELLAR コンテンツリゾルバーのベース URL の上書き。http://publications.europa.eu
SPARQL_QUERY_TIMEOUT_MSミリ秒単位のクライアント側タイムアウト。1 から 2147483647 までの整数です。1 回の呼び出しで共有される CELLAR クエリの予算(クエリを連鎖させる呼び出しでは、クエリごとではなく 1 回だけ消費されます)であり、個々のクエリに対する上限でもあります。EUR-Lex コンテンツの取得には、この長さのタイムアウトが別途適用され、共有予算の対象外です。55000
MAX_SPARQL_RESULTS生成されるすべての SPARQL クエリの LIMIT に適用される上限。100
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポート。3010
MCP_AUTH_MODE認証モード:none、jwt、oauth のいずれか。none
MCP_SESSION_MODEセッション処理:stateful、stateless、auto のいずれか(auto は stateful に解決されます)。stateless
MCP_LOG_LEVELログレベル(RFC 5424)。info
LOGS_DIRログファイルのディレクトリ(Node.js のみ)。<project-root>/logs
LOG_TOOL_FAILURE_PAYLOADS失敗したツール呼び出しの引数と結果を、キー名で機密情報を伏せて記録します(自由形式の値は対象外です)。LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルト 16384)までに制限されます。false
OTEL_ENABLEDOpenTelemetry インストルメンテーションを有効にします。false

オプションの上書き設定の一覧は .env.example を参照してください。


サーバーの実行

ローカル開発

Bun v1.4.0 以上(または Node.js v24+)が必要です。

  • クローンしてインストールする:

    git clone https://github.com/cyanheads/eur-lex-mcp-server.git
    cd eur-lex-mcp-server && bun install
    cp .env.example .env   # optional: every variable has a default
    
  • ビルドして実行する:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http   # listens at http://localhost:3010/mcp
    
  • チェックとテストを実行する:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    
Docker
docker run --rm -p 3010:3010 ghcr.io/cyanheads/eur-lex-mcp-server:latest

イメージのデフォルト設定は、HTTP トランスポート、ステートレスセッションモードで、ログは /var/log/eur-lex-mcp-server に記録されます。MCP クライアントから stdio 経由で実行するには、"command": "docker" と "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/eur-lex-mcp-server:latest"] を使用します。ローカルでビルドするには、docker build -t eur-lex-mcp-server . を実行してから docker run --rm -p 3010:3010 eur-lex-mcp-server を実行します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドします。


プロジェクト構成

ディレクトリ用途
src/index.tscreateApp() のエントリーポイントです。ツール、リソース、プロンプト、公開済みスキルを登録し、サービスを初期化します。
src/configサーバー固有の環境変数の解析と、Zod による検証を行います。
src/services/cellar-sparqlCELLAR SPARQL サービスです。POST クライアント、バインディングマッパー、LIMIT の適用、CDM PREFIX 宣言を含みます。
src/services/eurlex-contentCELLAR コンテンツサービスです。英語へのフォールバックに対応した、/resource/celex/{CELEX} 用のコンテンツネゴシエーション GET クライアント(Accept / Accept-Language)と、ページ分割で法令を取得する際に一度だけ取得するための、配信済み本文のプロセス内キャッシュを含みます。
src/mcp-server/toolsツール定義(*.tool.ts)です。文書検索、取得、解決、判例法、関係、EuroVoc、未加工の SPARQL にまたがる 7 つのツールがあります。
src/mcp-server/resourcesリソース定義(*.resource.ts)です。メタデータリソースと関係リソースがあります。
src/mcp-server/promptsプロンプト定義(*.prompt.ts)です。比較分析プロンプトがあります。
skills/ツールを呼び出すエージェントに公開されるエージェントスキル(eur-lex-guide)です。
tests/src/ の構成に対応する単体テストと統合テストです。

開発ガイド

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

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

コントリビューション

Issue を歓迎します。提出する前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

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

コメント

MCP は初めてですか?

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

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