MCP.so
ログイン

eulaw.ai MCP Server

@eulaw.ai

基本情報

トランスポート

streamable-http

認証方式

OAuth

作者

eulaw.ai

eulaw.ai MCP Server について

eulaw.ai MCP Server は、EU 法および各国法向けの AI リーガルワークスペース eulaw.ai がホストする MCP エンドポイントです。eulaw.ai にサインインすると、AI アシスタントは欧州の法令と判例をセマンティック検索し、一致した文書の全文を読み、対象となる法域を確認できます。

接続情報

https://eulaw.ai/api/mcp

セットアップ

claude mcp add eulaw --transport http https://eulaw.ai/api/mcp

eulaw.ai MCP Server のツール

9

Semantic search over eulaw.ai's corpus of European legislation and case law. Use it whenever a question turns on what a European or national European law actually says, or on how a court has applied it, and you need the authoritative text rather than recollection. Returns one entry per matching document: title, jurisdiction, document type, publication date, the identifiers that document carries (CELEX, ELI, ECLI where they apply), a source URL, an opaque document_id, and a passage from the document. It returns passages, not whole documents - call get_document with the document_id when the surrounding text matters. It cannot answer about jurisdictions outside the covered set: call list_jurisdictions first if you do not already know which codes are covered. It is not a general web search and holds no material outside the legal corpus.

Fetch the text of a single document from the eulaw.ai corpus by the document_id and jurisdiction that search_legal_sources returned for it. Use it when a passage from search is not enough to answer accurately - to read the provision around a quoted fragment, to check a definition, or to confirm wording before relying on it. Documents can be long, so it returns a slice: the response states the total length and whether more remains, and offset pages through the rest. It takes only identifiers this server issued; it cannot fetch a document from a URL or a citation.

List the jurisdiction codes this server can search, with their names. Call it before the first search of a conversation, or whenever a question names a country whose coverage you have not confirmed, so the search is scoped to codes that exist rather than guessed ones. Coverage changes as jurisdictions are added, so treat the returned list as current and do not assume a code is covered because it was covered before.

Exact lookup in the metadata of one or more jurisdictions, for documents you can name rather than describe: an identifier or number as written (CELEX, ELI, ECLI, a case or act number), words of the title, the issuing body, a document family, a publication period. Returns metadata rows: document_id, title, family, dates, whether it is recorded as in force, identifiers and URL. Read a row's text with get_document. Use search_legal_sources instead for a topic. The in-force flag is not reliable for bills, proposals and decisions, and not in every jurisdiction: confirm validity from get_relations.

The recorded relations of one document: the acts it amends, consolidates, repeals or is based on, and the acts that amend, consolidate or repeal it, each with its title, publication date and in-force flag. Use it to establish which text is in force today, to find the current consolidated version or the successor of a repealed act, and to list the amendments to check before relying on a provision. A consolidated text may not yet include every amending act: read the consolidation's opening note with get_document.

ALWAYS call this tool (never answer from your own knowledge) when the user asks how a parliament, the Council, a member state, an individual MEP, or a Danish MP voted — these are structured records that change and must be grounded. Query STRUCTURED voting records covering FOUR things: (1) EUROPEAN PARLIAMENT plenary roll-call votes with the position of each INDIVIDUAL MEP; (2) EUROPEAN PARLIAMENT COMMITTEE votes; (3) COUNCIL OF THE EU votes with the position of each INDIVIDUAL MEMBER STATE — so "how did Denmark vote on X" is answered properly, per country, not just as a Council total; and (4) DANISH FOLKETINGET votes on national Danish law, with per-MP positions. Also: vote outcomes (ADOPTED/REJECTED/LAPSED), tallies (for/against/abstain), and roll-call decisions. Use this for: "how did Parliament vote on <named act or dossier>", "which votes were rejected", "how did <MEP name> vote", "how did <MEP name> vote in the latest session", member-state Council votes like "how did <country> vote on <named act>", "hvad har Danmark stemt til X", "what did <country> vote on procedure <YYYY/NNNN>", AND Danish national votes like "hvem stemte for lov nr. <number>", "hvordan stemte Folketinget om X", "how did the Danish parliament vote on X" (for these set `body`: "folketinget", and put the topic in `query` IN DANISH). Danish votes can be looked up by case number (a letter L/B/V/F/S/R followed by a number) or by the enacted law in the form "Lov nr. <number> af <date>" — pass either in `procedure`. The law number needs BOTH its number and its year: a bare number cannot be resolved, because the same number is reused in different years, so ask the user for the date rather than guessing which one they mean. This is exact structured data (a relational voting database), NOT semantic text search — so prefer it over search_legal_sources and get_document whenever the user asks about VOTING, VOTE RESULTS, or how someone/some country voted. Set `mep` for an individual member (an MEP, or a Danish MP when combined with body:"folketinget"), with `latest: true` for their most recent session; set `memberState` to a country's English name for its Council vote, with the topic in `query`; set `body` to "council" for Council votes generally or "folketinget" for Danish national votes; set `committee` (e.g. "ENVI", "LIBE") for a parliamentary committee's votes, optionally with `mep` for how a member voted in that committee; otherwise pass topic/outcome/date/procedure filters. Council vote topics are matched via the legislative procedure, so a procedure number in the form YYYY/NNNN(TYPE) also works. IMPORTANT for Danish votes: Folketinget's printed tally counts party mandates (Danish parties may have a group's votes cast as a block) while the individual positions count only members who personally registered one — the two are NOT comparable, a member with no recorded position did NOT necessarily fail to vote, and a minority of Danish votes carry no individual positions at all (for those, only the party-mandate tally exists). Do not quote a proportion for this from your own knowledge. Never present a missing Danish position as evidence that someone abstained or was absent. COVERAGE: never state a date range for any chamber from your own knowledge. The tool reports the range it actually holds when a search finds nothing — quote THAT and nothing else. A corpus that is still loading holds less than the source offers, so asserting the source's full range would tell the user a gap is a period of legislative silence. Does NOT cover the legal text of laws (use search_legal_sources and get_document) or court judgments (use search_legal_sources and get_document), and does NOT list who currently sits in a parliament (use eu_official_lookup).

ALWAYS call this tool (never answer from your own knowledge) when the user asks who the rapporteur is, which committee is responsible, what stage a procedure has reached, or which dossiers a committee is handling — this is live dossier data that changes and must be grounded. Look up an EU LEGISLATIVE PROCEDURE / dossier in the European Parliament's Legislative Observatory (OEIL) — the responsible COMMITTEE, the RAPPORTEUR(s), the current STAGE/status, key dates, and the adopted act (CELEX). Use this for "who is the rapporteur on X", "hvem er rapporteur på X", "which committee is responsible for X", "hvilket udvalg er ansvarligt for X", "what stage is the X procedure at", "hvilken fase/stage er X nået til", AND "what was Parliament's or the Council's position on X", "hvad var parlamentets/rådets position til X" (the tool returns the procedure's reading-stage events — Parliament/Council 1st/2nd-reading decisions — with their document refs; for the position TEXT combine with search_legal_sources and get_document). ALSO handles WHOLE-FILE STATUS via request="status": give it an act by NAME (`topic`) or by reference (`procedure`) and it resolves the file ONCE and returns its dated timeline - the key events with their document refs, the responsible committee, the rapporteur, and how many committee amendment documents are on record. Use it for "what is the status of <act>", "hvad er status paa <lov>", and any request for a TIMELINE of where a file has got to. It reports PROCESS ONLY and holds no legislative text, so it cannot say what an act requires. For a question that names an act, search_legal_sources and get_document are PRIMARY and this lane is COMPLEMENTARY: call search_legal_sources and get_document for what the act says and this one alongside it for where the act stands, and lead the reply with the law, not with the file progress. This lane becomes the whole answer only when the act has not been adopted and so has no text to lead with. Prefer it over request="dossier" when the user wants the whole picture rather than one field. It is the only lane that can answer for an act the Commission has ANNOUNCED but not yet tabled: such an act has no procedure file, so it reports that it is not yet tabled and that no rapporteur, committee or reading stage exists yet - report that as the answer, never as a failed lookup. It also refuses to guess between editions of an act: when the name carries an ordinal (II, III) it will not return a different edition, and when several files match equally it returns them and asks which is meant - put that question to the user rather than choosing one. ALSO handles two committee-record requests via `request`: request="agenda" returns a committee's latest or next MEETING AGENDA with its items ("hvad var dagsordenen til seneste møde i ENVI-udvalget", "what is on the agenda of the next ITRE meeting" — set `committee`, and `when`="next" for upcoming meetings); request="amendments" returns the COMMITTEE-STAGE AMENDMENT documents (ændringsforslag) tabled on a dossier ("hvilke ændringsforslag kom der til X fra ENVI-udvalget" — set `topic` or `procedure`, optionally `committee` to narrow). This is the DOSSIER and committee record (who is steering a law, how far it has progressed, what committees put on their agendas and tabled), NOT how anyone voted (use parliamentary_votes) and NOT the law's text (use search_legal_sources and get_document). ALSO handles FORTHCOMING legislation via request="initiatives": the European Commission's published-initiatives / Have Your Say pipeline, i.e. laws it has ANNOUNCED but not yet tabled. Use it for "what legislation is coming on <policy area>", "hvilken lovgivning er paa vej paa <omraade>", "what is the Commission planning on <policy area>", and with openForFeedback=true for "what can I comment on right now". Set `topic` to the policy area. It holds the PIPELINE of announced acts, one row per planned initiative, and contains the TEXT of no document: asked for the contents o…

ALWAYS call this tool (never answer from your own knowledge) when the user asks who currently holds an EU or Danish institutional role — a Commissioner, the College, a Commission department/DG, a Danish minister, a sitting MEP, or a sitting member of the DANISH FOLKETINGET — because these change and must be grounded in the reference directory. ROUTING RULE, APPLY THIS FIRST: if the question names the FOLKETINGET, a folketingsmedlem, an MF, or a DANISH political party (Venstre, Socialdemokratiet, SF, Dansk Folkeparti, Liberal Alliance, Moderaterne, Enhedslisten, Radikale Venstre, Det Konservative Folkeparti, Danmarksdemokraterne, Alternativet, Borgernes Parti), you MUST use kind:"ft_mp". Do NOT use kind:"mep" for those. The MEP roster is the EUROPEAN Parliament and does not contain Folketinget members, so answering a Folketinget question from it produces a confident answer about the wrong body — which is what happened before this rule existed: asked "hvem sidder i Folketinget for Venstre", the MEP roster was queried, it returned Denmark's 15 MEPs, and the user was told the Folketinget roster does not exist. ALSO covers WHO RUNS A COMMISSION DEPARTMENT: `kind: "dg"` is the DIRECTOR-GENERAL of a department and `kind: "deputy_dg"` its Deputy Director-General(s) - the ADMINISTRATIVE head, distinct from the politically appointed Commissioner, and usually the more useful contact. Use for "who is the Director-General for <policy area>", "hvem er generaldirektoer for <omraade>", "who runs <DG abbreviation>". Combine with `org` to name the department. A department can have SEVERAL deputies, so report all of them rather than the first. Not every body has a Director-General: executive agencies and offices are headed by a Director or a Head of Service and simply return nothing here - say the department has no Director-General on record rather than offering the Commissioner as a substitute, because they are different roles. Look up an EU/Danish institutional OFFICIAL, BODY, the current MEMBERS OF THE EUROPEAN PARLIAMENT, or the current MEMBERS OF THE FOLKETINGET (the Danish national parliament, 179 seats, with party). Covers: an EU COMMISSIONER (and portfolio), a European Commission DEPARTMENT / Directorate-General (DG), a current DANISH GOVERNMENT MINISTER, the roster of CURRENTLY SITTING MEPs of the current parliamentary term, and the roster of CURRENTLY SITTING FOLKETINGET MEMBERS with their current party. Use for "who is the climate commissioner", "hvem er klimakommissær", "which Commission department handles energy", "ministre i regeringen", AND for "who are the Danish MEPs", "hvem er de danske MEP'ere", "list the current German MEPs", "which Renew MEPs are there", "medlemmer af Europa-Parlamentet". For MEP-roster questions set `kind: "mep"` plus `country` (and/or `group`); for a single MEP by name set `kind: "mep"` + `name`. This is institutional reference data (who holds which seat/role) — NOT how anyone voted (parliamentary_votes — use that for an MEP's voting record), NOT legislative dossiers (legislative_procedure), NOT the law's text (search_legal_sources and get_document). TWO SEPARATE CHAMBERS, never interchangeable: `kind: "mep"` is the EUROPEAN Parliament roster; `kind: "ft_mp"` is the FOLKETINGET, the Danish national parliament (179 seats). Use `kind: "ft_mp"`, optionally with `party`, for "hvem sidder i Folketinget for Venstre", "medlemmer af Folketinget", "which MPs represent Socialdemokratiet". Never answer a Folketinget question from the MEP roster or from your own memory — 15 people appear in BOTH chambers, so a name alone does not tell you which is meant. `party` accepts the Danish name or the short code ("Venstre" or "V"); an unrecognised party returns nothing rather than a near match, and you must then ask which party was meant instead of guessing. Party for a Danish MP is CURRENT affiliation only — do not use it to state which party someone belonged to at the time of an earlier vote. Danish MPs' VOTING records are i…

ALWAYS call this tool (never answer from your own knowledge) when the user asks for an OFFICIAL STATISTIC, meaning a number describing a country or the EU: GDP, inflation, unemployment, population, emissions, energy, trade, wages, poverty, migration, housing, health, education, R&D spend. Your training data holds figures that are frozen, and Eurostat REVISES published figures, so any number you recall is stale or wrong. Covers Eurostat, the EU statistical office, harmonised and comparable across all 27 member states, roughly 7,600 datasets and tables, many with series running back decades, plus a directory of the 27 NATIONAL statistical institutes (Danmarks Statistik, Destatis, INSEE, ISTAT, CBS, SCB and the rest) and how each one is reachable. Use for: "what is Denmark's unemployment rate", "hvad er Danmarks BNP", "how do EU countries compare on renewable energy", "greenhouse gas emissions in Germany over the last decade", "which country has the highest minimum wage", "EU inflation last year". TWO WAYS TO CALL IT. (1) By TOPIC: set `query` to the subject in English (e.g. "unemployment rate", "greenhouse gas emissions") plus `geo` and `time`; the tool searches the dataset catalogue, reads the best-matching dataset, and lists the alternatives it did not pick. (2) By CODE: set `dataset` to a Eurostat dataset code you got from a previous call of this tool. NEVER invent a dataset code, because codes not in the catalogue are rejected. `geo` takes Eurostat geo codes: two-letter country codes, `EL` for Greece (not GR), `EU27_2020` for the EU total, `EA20` for the euro area. `time` takes the dataset's own granularity: "YYYY" for annual, "YYYY-Qn" for quarterly, "YYYY-Sn" for half-yearly, "YYYY-MM" for monthly; pass several to get a series. Other dimensions (unit, age, sex, sector, …) go in `filters` as code→value; if you send a code that dataset does not have, the tool tells you the valid ones and you MUST retry with one of them rather than reporting that the data does not exist. Set `countries` ALONE (no `query`, no `dataset`) to ask which national statistical institute publishes a country's figures and whether it has an open API. COVERAGE: never state a date range, a dataset count, or "Eurostat does not have X" from your own knowledge. The tool reports the coverage it actually holds, and only that may be quoted. This is official numeric statistics, NOT the text of the law (search_legal_sources and get_document), NOT court judgments (search_legal_sources and get_document), and NOT voting records (parliamentary_votes).

概要

eulaw.ai MCP Server とは?

eulaw.ai MCP Server は、EU 法および各国法向けの AI リーガルワークスペース eulaw.ai が公式にホストする MCP エンドポイントです。eulaw.ai アカウントでサインインすると、Claude などの MCP クライアントから欧州の法令や判例を検索し、原文の該当箇所をそのまま引用できます。

eulaw.ai は、EU 法や各国法について、具体的な条文・判決・ガイダンスまでたどれる回答を必要とする弁護士、コンプライアンス担当者などの専門家向けに作られています。MCP サーバーはこの法令コーパスを AI アシスタントに接続します。アシスタントは GDPR、AI Act、DORA についてモデルの記憶に頼るのではなく、権威ある原文を検索し、該当箇所を読んでから回答します。eulaw.ai は MCP サーバーをベータ版と表示しています。

eulaw.ai MCP Server の使い方

eulaw.ai アカウントが必要です。eulaw.ai には 7 日間のトライアルがあり、サイトでは無料で始められカード登録も不要とされています。リモートサーバーの URL は次のとおりです。

https://eulaw.ai/api/mcp

サーバーは Streamable HTTP と OAuth を使用します。API キーは不要で、アシスタントが初めてツールを使うときにクライアントがブラウザを開き、eulaw.ai にサインイン(またはアカウント作成)します。サインイン前でもツール一覧は表示されますが、サインインが完了するまでツールの呼び出しは拒否されます。

Claude Desktop と claude.ai

eulaw.ai の手順:Settings を開き、Connectors、Add custom connector の順に進み、https://eulaw.ai/api/mcp を貼り付けます。Claude がこのコネクタを初めて使うときに eulaw.ai へのサインインを求めます。Web、デスクトップ、モバイルで動作し、インストールは不要です。

Claude Code

claude mcp add --transport http eulaw https://eulaw.ai/api/mcp

その後 Claude Code で /mcp を実行して認証すると、ブラウザで eulaw.ai のサインイン画面が開きます。

Cursor

~/.cursor/mcp.json またはプロジェクトの .cursor/mcp.json にリモートサーバーを追加します。

{
  "mcpServers": {
    "eulaw": {
      "url": "https://eulaw.ai/api/mcp"
    }
  }
}

VS Code

.vscode/mcp.json に追加します。サーバーを初めて使うときに VS Code がサインインを開始します。

{
  "servers": {
    "eulaw": {
      "type": "http",
      "url": "https://eulaw.ai/api/mcp"
    }
  }
}

ローカル npm サーバー(ライブラリとフォルダ)

リモートのエンドポイントは法令検索と文書の取得を扱います。文書のアップロード、フォルダ、検索可能なライブラリを使う場合は、eulaw.ai が npm で公開しているローカルサーバー @eulaw.ai/mcp(Node 20 以上)を、Claude Desktop や Cursor から npx -y @eulaw.ai/mcp で実行します。こちらも初回利用時にブラウザでログインします。

eulaw.ai MCP Server の主な機能

  • eulaw.ai アカウントでの OAuth サインイン。アシスタントにはアカウントと同じ権限が与えられます。
  • 欧州の法令と判例に対するセマンティック検索。出典リンク付きの抜粋を返します。
  • 該当する場合、CELEX、ELI、ECLI などの標準識別子が結果に含まれます。
  • 単一文書の全文を読み取り、長い法令は分割して返します。
  • 法域の絞り込み:eulaw.ai の MCP ページによると、EU 法に加え、デンマーク、ドイツ、フランス、オランダ、ベルギー、オーストリア、ポーランド、スペイン、イタリアの国内法を対象としています。
  • eulaw.ai のプラットフォーム規約では、データは EU 内に保管され、モデルの学習には使われません。

eulaw.ai MCP Server のツール

リモートエンドポイントは、調査の流れを構成する 3 つのツールを提供します。

  • 対象範囲の確認:list_jurisdictions は検索可能な法域コードを返します。対象範囲は法域の追加に伴って変わるため、ツールの説明では最初の検索の前に呼び出すよう指示されています。
  • 検索:search_legal_sources はコーパス全体をセマンティック検索し、一致した文書ごとにタイトル、法域、文書種別、公開日、識別子、出典 URL、不透明な document_id、一致した抜粋を返します。
  • 閲覧:get_document は、検索で返された document_id と法域を使って単一文書のテキストを取得します。全体の長さとページ送り用の offset 付きで一部ずつ返します。受け付けるのはサーバーが発行した識別子のみで、URL や引用表記は使えません。

ローカルの npm サーバーには、query_eu_law、upload_document、list_library、create_folder、create_vault などのツールもあります。

eulaw.ai MCP Server のユースケース

  • 条文の確認:「AI Act は汎用 AI モデルの透明性義務について何を定めていますか?条文を引用してください。」
  • 国内法での運用:「デンマーク法では、通信販売に対する OSS の VAT 制度はどう扱われていますか?」
  • 判例の検索:「GDPR の適法性の根拠としての正当な利益に関する EU 司法裁判所の判決を探して。」
  • 文言の確認:メモで引用する前に、抜粋の前後を含む文書全体をアシスタントに開かせて確認します。

eulaw.ai MCP Server のトラブルシューティング

  • ツール呼び出しが invalid token エラーになる:サインインしていません。クライアントから eulaw.ai へのサインインを完了してください(Claude Code では /mcp を実行して認証)。
  • 特定の国で結果が出ない:まず list_jurisdictions を呼び出してください。一覧にあるコードだけが対象です。
  • 自分の文書を使いたい:文書のアップロード、フォルダ、ライブラリはリモート URL ではなく、ローカルの @eulaw.ai/mcp サーバーにあります。
  • 長い文書が途中で切れる:get_document は分割して返します。offset を使って続きを読むようアシスタントに依頼してください。

よくある質問

1

eulaw.ai MCP Server は公式ですか?

はい。eulaw.ai が `https://eulaw.ai/api/mcp` で運営しており、eulaw.ai 自身の MCP ページで説明されています。

2

eulaw.ai のアカウントは必要ですか?

はい。ツールは eulaw.ai アカウントでサインインした後にのみ動作します。eulaw.ai には 7 日間のトライアルがあり、サーバーでできることはアカウントのプランに従います。

3

API キーは使いますか?

いいえ。リモートサーバーは OAuth を使用します。クライアントがブラウザを開き、eulaw.ai にサインインします。

4

どの法域が対象ですか?

eulaw.ai によると、EU 法に加え、デンマーク、ドイツ、フランス、オランダ、ベルギー、オーストリア、ポーランド、スペイン、イタリアの国内法です。最新の一覧は `list_jurisdictions` で確認できます。

5

Claude Code、Cursor、VS Code で使えますか?

はい。OAuth 付きのリモート Streamable HTTP MCP サーバーに対応したクライアントなら、`https://eulaw.ai/api/mcp` を追加できます。

6

リモートサーバーと npm パッケージの違いは何ですか?

リモート URL は法令検索と文書の取得を扱います。`@eulaw.ai/mcp` npm サーバーは手元のマシンで動作し、文書のアップロード、フォルダ、検索可能なライブラリが加わります。

7

eulaw.ai のリモート MCP サーバーとは何ですか?

eulaw.ai のリモート MCP サーバーは、https://eulaw.ai/api/mcp にホストされた Model Context Protocol エンドポイントです。AI アシスタントはローカルに何もインストール・実行することなく接続できます。

8

eulaw.ai の MCP サーバーにはどう接続しますか?

エンドポイント https://eulaw.ai/api/mcp を Claude Code、Cursor、VS Code など任意の MCP 対応クライアントに追加してください。このページのセットアップ手順で各クライアントを一度に設定できます。

9

eulaw.ai の MCP サーバーは認証が必要ですか?

はい。eulaw.ai は OAuth を使用します。初回接続時に MCP クライアントがブラウザを開いてサインイン・認可を行い、以降はその認証情報を再利用します。

10

eulaw.ai の MCP サーバーはどのトランスポートを使用しますか?

eulaw.ai は streamable-http エンドポイントを公開しており、これはリモート MCP サーバーで広く使われ、主要な MCP クライアントがサポートするトランスポートです。

コメント