MCP.so
登录

eulaw.ai MCP Server

@eulaw.ai

基本信息

传输方式

streamable-http

认证方式

OAuth

作者

eulaw.ai

关于 eulaw.ai MCP Server

eulaw.ai MCP Server 是 eulaw.ai 托管的 MCP 端点。eulaw.ai 是面向欧盟法和各国法律的 AI 法律工作台。登录 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 是 eulaw.ai 官方托管的 MCP 端点。eulaw.ai 是一个面向欧盟及各国法律的 AI 法律工作台;使用 eulaw.ai 账号登录后,Claude 等 MCP 客户端即可检索欧洲立法和判例法,并引用确切的原文段落。

eulaw.ai 面向需要就欧盟法和各国法律获得可追溯答案的律师、合规团队及其他专业人士,每个答案都能追溯到具体条款、判决或指南文件。它的 MCP 服务器把这一法律语料库接入你的 AI 助手:助手不再依赖模型对 GDPR、AI Act 或 DORA 的记忆,而是先检索权威文本、阅读相关段落再作答。eulaw.ai 将其 MCP 服务器标注为 Beta。

如何使用 eulaw.ai MCP Server?

你需要一个 eulaw.ai 账号。eulaw.ai 提供 7 天试用,其网站称可免费开始、无需绑定银行卡。远程服务器地址:

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。网页版、桌面版和移动端均可使用,无需安装任何东西。

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 页面,覆盖欧盟法以及丹麦、德国、法国、荷兰、比利时、奥地利、波兰、西班牙和意大利的国内法。
  • 根据 eulaw.ai 的平台条款,数据存储在欧盟境内,且不会用你的数据训练模型。

eulaw.ai MCP Server 工具

远程端点提供三个工具,组合起来构成一个完整的检索流程:

  • 确认覆盖范围: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 增值税机制?"
  • 查找判例:"查找欧盟法院关于将合法利益作为 GDPR 合法性基础的判决。"
  • 确认措辞:在备忘录中引用某段文字之前,让助手打开该段落所在的完整文档进行核对。

eulaw.ai MCP Server 常见问题排查

  • 工具调用报 invalid token 错误:说明你尚未登录。请在客户端中完成 eulaw.ai 登录(在 Claude Code 中运行 /mcp 并认证)。
  • 某个国家没有结果:先调用 list_jurisdictions;只有列出的代码才在覆盖范围内。
  • 需要使用自己的文档:文档上传、文件夹和文档库功能在本地 @eulaw.ai/mcp 服务器中,而不在远程 URL 中。
  • 长文档看起来被截断: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 列出的范围是欧盟法以及丹麦、德国、法国、荷兰、比利时、奥地利、波兰、西班牙和意大利的国内法。最新列表请使用 `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 服务器是一个托管的 Model Context Protocol 端点,地址是 https://eulaw.ai/api/mcp,AI 助手无需在本地安装或运行任何东西即可连接。

8

怎么连接 eulaw.ai 的 MCP 服务器?

把端点 https://eulaw.ai/api/mcp 添加到任意支持 MCP 的客户端,比如 Claude Code、Cursor 或 VS Code。本页的接入代码块可以一步配置好每个客户端。

9

eulaw.ai 的 MCP 服务器需要认证吗?

需要。eulaw.ai 使用 OAuth——第一次连接时,你的 MCP 客户端会打开浏览器窗口登录并授权,之后会复用这个凭证。

10

eulaw.ai 的 MCP 服务器用的是哪种传输方式?

eulaw.ai 暴露的是 streamable-http 端点,这是远程 MCP 服务器普遍使用、主流客户端都支持的传输方式。

评论