Ortexo
com.ortexo/mcpVersion 1.0.0Romanian and EU legislation and case law, with exact article citations and point-in-time text.
Status
Responds105 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:08 UTC
- Latency
- 105 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 21:12 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://mcp.ortexo.com/mcpResponds105 msNo sign-in
Claude Code
claude mcp add --transport http ortexo https://mcp.ortexo.com/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: ortexo
Remote MCP server URL: https://mcp.ortexo.com/mcpCursor
{
"mcpServers": {
"ortexo": {
"url": "https://mcp.ortexo.com/mcp"
}
}
}VS Code
code --add-mcp '{"name":"ortexo","type":"http","url":"https://mcp.ortexo.com/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
41 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
check_statusSTILL-GOOD-LAW CHECK — is this article still in force, when was it last amended, what amended it, and how many of the decisions interpreting it cite a version older than that amendment. Short and cheap ON PURPOSE: run it before citing an article, every time. A decision reasoning about a superseded version may no longer support the point you are citing it for. Use get_related instead when you want the full neighbourhood. | No | Yes | Yes | No |
compare_articleWhat CHANGED in an article between two dates — returns only the delta, not both full versions. Use for 'what changed in the VAT rules between 2023 and 2025' or to check whether a provision a case relied on has since been rewritten. Dates are YYYY-MM-DD; the reply reports the ACTUAL consolidated version dates found, which may differ from the dates asked for. One article at a time; works for repealed laws too (it says when the act was repealed). ACROSS A CHANGE OF LAW ("Codul fiscal" in 2008 vs 2024: Legea 571/2003, then Legea 227/2015) each date is read from the act of its day; the articles are numbered differently, so pass the second act's number as `article2`. Without it the reply shows the likeliest counterparts and the call to repeat. | No | Yes | Yes | No |
compare_eu_articleWHAT CHANGED in an EU article between two dates — the delta, not both full texts. The EU twin of compare_article. Use it to check whether a provision a judgment relied on has since been rewritten, or what a reform actually altered. Says plainly when NOTHING changed, which is the answer to 'has this been amended since', and reports honestly when no consolidated version covers one of the dates rather than comparing against a text that did not exist. | No | Yes | Yes | No |
connection_guideHow to connect Ortexo to an AI assistant and how to sign back in, step by step for Claude, Claude Code, ChatGPT and other assistants: the server address, the page where each one is connected and the exact commands. Needs no sign-in, reads no data and costs nothing. The server address is https://mcp.ortexo.com/mcp. Claude connects it at https://claude.ai/customize/connectors. Claude Code adds it with: claude mcp add --transport http --scope user ortexo https://mcp.ortexo.com/mcp, and the person signs in with /mcp (Authenticate) or claude mcp login ortexo. The guide also gives the steps for an agent with a shell and the fixes for a step that fails (a server held for one project folder that awaits approval, the server address opened in a browser). Other assistants: https://ortexo.com/mcp. | No | Yes | Yes | No |
describe_corpusWhat Ortexo actually contains: how many acts by category, which jurisprudence sources and the date range each covers, how far back point-in-time snapshots go for the major codes, and when the corpus was last updated. Worth calling once per session before planning a research path: it reports what this database can and cannot answer, so coverage is known rather than assumed. Takes no arguments. | No | Yes | Yes | No |
eu_check_statusSTILL-GOOD-LAW CHECK for EU law — the EU twin of check_status. Answers at BOTH levels, because either alone misleads: whether the ACT is in force, expired or repealed (and by what), and whether the ARTICLE's own text has been rewritten and when. An act can be repealed while the article's text sits unchanged in the corpus, and an article can have been rewritten while the act is perfectly in force. Short and cheap on purpose: run it before citing an EU provision. It also warns when the consolidated series stops before today, so coverage is never mistaken for currency, and when a future version of the act already exists. | No | Yes | Yes | No |
eu_cited_in_romaniaWHICH ROMANIAN ACTS AND COURT DECISIONS CITE THIS EU ACT — the bridge between the two corpora. Use it to see how a regulation or directive has actually landed in Romanian law and practice: which statutes reference it, and which Romanian courts (including the ÎCCJ and the Constitutional Court) have relied on it. Pass `article` to narrow to one article of the EU act. For a directive, pair this with eu_transposition — transposition is not the same as citation. | No | Yes | Yes | No |
eu_transpositionGiven an EU DIRECTIVE's CELEX, return the Romanian act or acts that transpose it, with the Monitorul Oficial number and date, from the EU's own implementing-measures register. A directive does not apply directly in Romania — it applies through the transposing act, so citing the directive alone is an incomplete answer. | No | Yes | Yes | No |
find_actDOES THIS ACT EXIST, and what are its official details — number, issuing body, publication date, Monitorul Oficial number, the date it entered into force, how many articles it has, whether it is still in force. Searches the CATALOG of acts, not their text: use it for 'was Legea 141/2025 published', 'which government decision set the minimum wage', 'the norms of the trade register'. `subject` is what the act is about, in Romanian, in any wording: title and subject line are both searched, in any word order and inflection; when no act has every word, those with all but one follow, then acts by meaning — each fallback labelled. Every act carries a law="…" handle for lookup_article and get_act_structure, and an approving order is shown with the act it approves. For provisions ON a topic use search_semantic instead; this returns acts, not articles. `pending` reaches versions already published that do not apply yet. | No | Yes | Yes | No |
get_act_case_lawThe Romanian court decisions linked to ONE act, as a paged list: the High Court's binding decisions (RIL, HP) first, then the newest, each with its court, kind, number, date, recorded outcome and the articles it cites. Use it for 'what case law is there on this act', which includes the decisions that cite the act as a whole and that get_related (one article) does not list. Read a listed decision with lookup_decision. | No | Yes | Yes | No |
get_act_case_law_mapWHERE the case law of an act is: each article with the number of decisions linked to it, and how many of them are RIL/HP, by division, the numbers of the app's table of contents. Use it to see which articles carry much case law, which carry binding practice and which none, before reading an article or a list. A large act is shown by divisions; `part` opens one. | No | Yes | Yes | No |
get_act_structureWHAT IS IN THIS ACT — its table of contents: books, titles, chapters and sections, each with the range of articles it holds. Use this when you need an article but do NOT know its number: guessing an article number is how a citation gets fabricated. Pass `part` with a division's name to list that division's articles individually with their opening words, then lookup_article for the text of the one you want. An act made of numbered POINTS instead of articles (the norms of a code, instructions, procedures) is listed the same way, by title, with its point ranges. | No | Yes | Yes | No |
get_cellONE CELL, by its id (printed by read_table and search_tables) or by table, row and column: its text, its whole row under the column names, the rows above and below, the cells to its left and right, its table and its act. Ids change when an act is parsed again: search again rather than reuse an old id. | No | Yes | Yes | No |
get_eu_act_structureWHAT IS IN THIS EU ACT — its table of contents: the titles, chapters and sections, each with the range of articles it holds. The EU twin of get_act_structure. Use it when you need an article of a long act but do not know its number — guessing an article number is how a citation gets fabricated. Pass `part` with a division's name (e.g. 'TITLUL VIII' or 'Secțiunea 2') to list that division's articles with their opening words; EU articles carry no headings, so the opening words are what tell them apart. Then use lookup_eu_article for the text of the one you want. | No | Yes | Yes | No |
get_eu_cellONE CELL of an EU table, by its id (printed by read_eu_table and search_eu_tables) or by table, row and column: its text, its whole row under the column names, the rows above and below, the cells to its left and right, its table and its act. Ids change when an act is parsed again: search again rather than reuse an old id. | No | Yes | Yes | No |
get_eu_relatedCONNECTIONS of one EU act, in both directions: what amended, repealed or replaced it, and what IT amended or rests on, plus the CJEU judgments that interpret it. Direction matters — 'what changed this regulation' and 'what did this regulation change' are opposite questions and this separates them. Use before relying on an act, to see whether it still says what you think. | No | Yes | Yes | No |
get_relatedCONNECTIONS: the depth-1 neighbourhood of an article — what it REFERS TO and what legislation INVOKES it (cross-references), what AMENDED it, and which court DECISIONS interpret it. Each decision is tagged with the version of the article the court cited (a still-good-law signal) and says how it was resolved. Use to map how a provision connects before drafting, or to find leading cases on it. For the decisions of a PERIOD ("court decisions of the last 12 months on art. 169 and how each was resolved") pass date_from / date_to: they come newest first, with how many fall in the window out of how many interpret the article in all. Pair with lookup_decision (a listed decision → full text) and lookup_article (a listed reference → its text). | No | Yes | Yes | No |
get_related_batchBatch form of get_related — the connections of SEVERAL articles in one call (max 8). Use when mapping a whole legal institution rather than a single provision. Pass a list of {law, article}. | No | Yes | Yes | No |
list_eu_tablesTHE TABLES OF ONE EU ACT: for each, its handle, the title the act stores for it, its size, its column names and its first rows. Use it when a regulation, directive or decision keeps its substance in a table: the CN codes of a list of goods, a list of persons under restrictive measures, a quota or a limit-value table, an annex of a classification of substances. lookup_eu_article and get_eu_act_structure read articles and the text of annexes and do not carry the cells of a table. Give the act's CELEX (a base CELEX is followed to the consolidated version in force, and the answer says so). Then read a table with read_eu_table or search inside it with search_eu_tables. The answer says how many tables of the act have no cells in the database, and when a table is tied to no annex or article. | No | Yes | Yes | No |
list_tablesTHE TABLES OF ONE ACT: for each, its handle, title, where it sits in the act, how many rows and columns it has, its column names and its first rows. Use it first when an act holds a classification, a chart of accounts, a tariff, a list of products or any annex that is a table: get_act_structure lists articles and divisions, not tables. Then read a table with read_table or search inside it with search_tables. It also says what the act holds that cannot be read here: pictures (no text in the database) and the PRE blocks (diagrams, ASCII tables) whose exact text is not kept; those whose text is kept are listed and read like tables. | No | Yes | Yes | No |
lookup_articleFetch the exact, in-force text of one specific article by number from a named Romanian law or code (e.g. article 291 of 'codul fiscal', article 5 of 'codul penal'). Use this when you need a precise article verbatim, with its citation. Amendment history is returned separately under '— Modificări —', not mixed into the text. Set `paragraph` to fetch just one alineat (e.g. "1" → alin. (1)) instead of the whole article; a whole citation written into `article` ("7 alin. (19)", "art. 169 alin. (1) lit. d)", several letters at once: "art. 291 alin. (2) lit. a) și c)" or "lit. a)-c)") is read correctly too. An act with no articles — the norms of a code (law="normele de aplicare a Codului fiscal"), an instruction, a procedure — is made of numbered POINTS: pass `article` as "Titlul II pct. 3", "pct. 3.1" or "Anexa nr. 2 pct. 1"; a bare "291" returns the points that CITE art. 291 of the code. Returns the IN-FORCE version; to read it as it stood on a past date pass `date` (the same result as lookup_article_at_date); for repealed/old law pass `include_repealed: true` (the same as lookup_article_historical). | No | Yes | Yes | No |
lookup_article_at_datePOINT-IN-TIME: fetch an article AS IT STOOD on a specific date, not the current version. Resolves the consolidated snapshot of `law` in force on `date` (format YYYY-MM-DD) and returns that article's text, tagged with the actual version date. USE THIS whenever the question is about a past moment ("ce cotă de TVA se aplica în iunie 2025", a transaction/deadline in a given year) — lookup_article returns TODAY's text and would answer a dated question wrong. Works for repealed laws too (the reply says when the act was repealed and by what). A common NAME is read from the act that held it on the date ("Codul fiscal" on 2010-01-01 is Legea 571/2003, and the reply says so); a numbered citation is never swapped for another act. Returns an honest not-found when no version covers the date, with the reason and the versions that do exist; never a wrong value. | No | Yes | Yes | No |
lookup_article_historicalOPT-IN: fetch an article from an OLD / REPEALED Romanian law (e.g. the former Cod fiscal, Legea 571/2003, for a dispute over a pre-2016 transaction). Unlike lookup_article, this is NOT restricted to in-force acts, so it can return abrogated text (tagged [ABROGATED]). Use ONLY when you deliberately need historical/repealed law — the normal tools return current law only. | No | Yes | Yes | No |
lookup_articlesFetch SEVERAL specific articles in ONE call — use this instead of many lookup_article calls when an answer cites multiple provisions (common in law: 15–20). Pass a list of {law, article, paragraph?, point?}. Returns each article's exact in-force text with its citation. | No | Yes | Yes | No |
lookup_decisionFetch the FULL text and a formal citation of one Romanian court decision by its number (e.g. "170/2019"). Turns a jurisprudence search hit — which carries only a bare number — into a citable decision: 'Instituție, Tip nr. N/AAAA din DATA'. Pass `court` and/or `year` to disambiguate. Use after search_semantic/search_lexical with sources=["jurisprudence"] finds a relevant decision you want to quote in full. Pass `section` to avoid pulling 30 pages: "dispozitiv" for the operative ruling, "considerente" for the reasoning, or a keyword (returns the dispozitiv + only the considerente that mention it). | No | Yes | Yes | No |
lookup_eu_articleFetch one article of one EU act by CELEX and article number, with its full text including paragraphs and points. Given a base CELEX it follows the act's family to the CONSOLIDATED version in force and says so — the base text is history and usually not the law that applies today. Example: celex '32016R0679', article '17'. | No | Yes | Yes | No |
lookup_eu_article_at_datePOINT-IN-TIME for EU law: what an article of a regulation or directive SAID on a given date, not what it says today. The EU twin of lookup_article_at_date. Consolidated versions are collapsed by text, so an article consolidated thirty times with two actual wordings reports two versions rather than thirty — you see when the text really changed. Omit `date` to get the version in force now plus the list of versions. USE THIS whenever the question is about a past moment: a transaction, a deadline, a rate as it stood in some year. Reports honestly when no consolidated version covers the date rather than handing back the earliest text, which would claim a provision applied before it existed. | No | Yes | Yes | No |
lookup_eu_article_historicalOPT-IN: read an article of a REPEALED or superseded EU act — the EU twin of lookup_article_historical. Every other EU tool resolves forward to the version in force, which is right for ordinary questions and wrong for a dispute about a transaction under the old regime. The other tools say when an act is repealed and point here; this reads it and labels it ABROGAT with the act that repealed it. Says so if the act turns out to be in force after all. | No | Yes | Yes | No |
lookup_eu_articlesFetch SEVERAL EU articles in ONE call — the EU twin of lookup_articles. An answer on EU law rests on as many provisions as one on Romanian law, so use this instead of repeated lookup_eu_article calls. Pass a list of {celex, article}; each comes back with its own text and citation. A base CELEX is followed forward to the consolidated version in force. | No | Yes | Yes | No |
lookup_eu_decisionFetch the FULL text of one CJEU or ECHR decision. Use it after search_eu_jurisprudence finds a ruling you want to quote — the search returns only the matching passage, this returns the judgment. Accepts whatever identifier you are holding: a CJEU case number (C-131/12, T-604/18 — the judgment, or the Advocate General's opinion if you say "concluzii"/"opinion"), a CELEX (62013CJ0438), an ECLI (ECLI:EU:C:2014:317), a HUDOC itemid (001-251188), an ECHR application number (74061/17), or the case name. Judgments are long, so pass `section` to get only the part you need: "dispozitiv" for the operative ruling, "fapte" for the facts, "drept" for the legal reasoning, or any keyword. | No | Yes | Yes | No |
read_eu_tableREAD AN EU TABLE, rows under their column names («NC: 84141081 | Produsul: Pompe criogenice»), with the id of every cell, the row's place in the table and the title and act of the table. A page is bounded and the answer states the total and the exact call for the next page; nothing is cut in silence. Pick rows by number (`rows`), a window around a cell or a row (`around`), the rows that contain a text (`find`), only some columns (`columns`), and a format (`rows`, `markdown`, `csv`, `json`). The header is the one the act marks as a header when it marks one. The largest tables of the corpus run to hundreds of thousands of cells and are read by range. | No | Yes | Yes | No |
read_tableREAD A TABLE, rows under their column names («Clasa: 2110 | CAEN Rev. 2: Fabricarea produselor farmaceutice de bază»), with the id of every cell, the row's place in the table (section, parent codes) and the title and act of the table. A page is bounded and the answer states the total and the exact call for the next page; nothing is cut in silence. Pick rows by number (`rows`), a window around a cell or a row (`around`), the rows that contain a text (`find`), only some columns (`columns`), and a format (`rows`, `markdown`, `csv`, `json`). A table of tens of thousands of cells is read by range. | No | Yes | Yes | No |
scan_act_for_termsEVERY article of ONE act containing a literal term — exhaustive, not ranked. Use this for 'which articles of this law mention X', 'find everything in this act about Y', or to establish that a term does NOT appear in an act. search_semantic and search_lexical cannot answer this: they rank by relevance across the whole corpus, and an article that mentions a term in passing does not score as being ABOUT it. This reads every node of the act with no relevance threshold and reports how many it read, so the answer can be cited as complete. It reads the cells of the act's tables as well and lists the rows that hold a term. Romanian inflects: pass the declined forms too ('patrimoniul mondial' does not match 'Lista patrimoniului mondial'). | No | Yes | Yes | No |
search_amending_actsWHICH ACT DID THE AMENDING. An act whose only purpose is to amend another one is hidden from search on purpose (its text is already folded into the consolidated version), so 'care ordin a modificat anexa 6?' or 'ce lege a completat Legea 95/2006 în 2024?' found nothing. Give `law` — the amended act — to list every act that amended it, newest first, visible or hidden, each with whether it is still in force and how many changes it made; give `query` to search the hidden amending acts by title or subject. Each act is labelled — about the amended act, or one that changed it in passing (an omnibus act) — and says which provisions it changed. Works for a repealed act too: its history, headed by its repeal. Use lookup_article for the current text: it already contains the amendments. | No | Yes | Yes | No |
search_eu_jurisprudenceSearch European case law: CJEU and General Court rulings, Advocate General opinions, AND European Court of Human Rights judgments and decisions (74,909 of them, 5,041 against Romania). One row per case; with court='toate' the two courts are interleaved. LANGUAGES: write `query` in Romanian, and ALSO pass the same question in English as `query_en` and in French as `query_fr` — CJEU case law is held in Romanian, English or French (19,383 of 41,307 rulings only in English or French) and ECHR judgments only in English or French, and the renderings are what reach them. Use against_romania=true for Strasbourg cases against Romania, and convention_article for a specific Convention article. | No | Yes | Yes | No |
search_eu_lawSearch EU legislation — regulations, directives, decisions — held in Ortexo (32,490 acts, each in its applicable version) in their ROMANIAN versions. Write the query in Romanian: the search is semantic plus full-text, and the full-text half matches Romanian words only, so an English query is matched by meaning alone and ranks lower. Naming the act ("GDPR", "Regulamentul 2016/679") or an article of it ("articolul 17 din GDPR") puts it first. Returns the article text with its CELEX. When the answer turns on a DIRECTIVE, follow up with eu_transposition to find the Romanian act that implements it — a directive applies in Romania through that act, so the directive alone is an incomplete answer. | No | Yes | Yes | No |
search_eu_tablesSEARCH THE ROWS OF AN EU ACT'S TABLES for the words of a question or for a code. A row matches when EVERY word is in it, in whichever of its cells («criogenice GNL» finds the row whose product and code sit in two cells); diacritics and case are ignored. Each match comes with the ids of its cells, the row under the column names, its place in the table, the rows above and below, and the table's title. Use mode 'exact' for a code (a CN code, an EC number): the word must be a whole cell, and a trailing * makes it a prefix (8414*). It searches ONE act or ONE table (celex or table is required), by words: it does not search by meaning. The answer says when the act has tables with no cells in the database, which were not searched. | No | Yes | Yes | No |
search_lexicalEXACT keyword / phrase search over the Ortexo Romanian legal database (codes, laws, Fiscal Code, OMFP accounting norms, and case law). Matches precise wording, ranked by how many of your words a passage holds and searched in full inside the principal codes — use it ONLY when you know the exact term, phrase, defined name (e.g. an account name), article number or figure. For a described concept or a natural-language question use search_semantic instead — lexical returns noise for prose. For court decisions set `sources` to ["jurisprudence"] (with both corpora the results are ranked together and may all be legislation): disputes, deductibility challenges or 'has a court ruled'. The two searches rank differently and find different passages: on 103 questions with a known answer (measured 2026-10-28), the answer was among the first 5 results of search_semantic for 67% of them, of search_lexical for 45%, of both for 41% and of at least one of the two for 71%. | No | Yes | Yes | No |
search_semanticMeaning-based (vector) search over the Ortexo database of Romanian law — codes, laws, the Fiscal Code (tax and VAT/TVA), accounting norms (OMFP) and, when requested, case law. Returns the current, in-force text with a citation for each result, one result per article. Best when the query describes a concept or situation rather than exact wording; for a known term or figure use search_lexical. For court decisions set `sources` to ["jurisprudence"] (with both corpora the results are ranked together and may all be legislation) — relevant to disputes, deductibility challenges, penalties, and whether a court has already decided a point, since Romanian case law on the same facts is persuasive. Accounting questions (OMFP, chart of accounts) are answered from this corpus, not by lookup_article. The two searches rank differently and find different passages: on 103 questions with a known answer (measured 2026-10-28), the answer was among the first 5 results of search_semantic for 67% of them, of search_lexical for 45%, of both for 41% and of at least one of the two for 71%. | No | Yes | Yes | No |
search_tablesSEARCH THE ROWS OF AN ACT'S TABLES for the words of a question or for a code. A row matches when EVERY word is in it, in whichever of its cells («ADENURIC 120» finds the row whose name and strength sit in two cells); diacritics and case are ignored. Each match comes with the ids of its cells, the row under the column names, its place in the table, the rows above and below, and the table's title. Use mode 'exact' for a code (4426, 2110, W57781001): the word must be a whole cell, and a trailing * makes it a prefix (442*). It searches ONE act or ONE table (law or table is required), by words: it does not search by meaning. Pictures have no text and are not searched; PRE blocks (diagrams, ASCII tables) are searched where their exact text is kept; the answer says what the act holds that was not read. | No | Yes | Yes | No |
verify_citationsCHECK A DRAFT BEFORE IT GOES OUT. Paste any text that cites Romanian law — your own draft, a client's contract, an opinion someone else wrote — and every article reference in it, down to the alineat, letter or point, is checked against the corpus. Each reference comes back as one of: ÎN VIGOARE (with the date it was last amended), ABROGAT, ARTICOL INEXISTENT (the act is real but has no such article — a fabricated citation), SUBDIVIZIUNE INEXISTENTĂ (the article is real but not the alineat, letter or point cited), or NEVERIFICAT (could not be checked, which is NOT the same as correct). A mention whose act cannot be read is listed as NEVERIFICAT, not skipped. RUN THIS ON ANY LEGAL TEXT YOU PRODUCE: article numbers move, articles are repealed, and a citation that was right when you learned it may not be right today. Extraction is deterministic — no guessing about which references exist. | No | Yes | Yes | No |
Details
- Registry status
- Active
- Published
- Oct 4, 2026
- Updated
- Oct 4, 2026
- Repository
- Not given
- Categories
- Uncategorized
- GDPR
- Not declared