Skip to content
    Changelog

    What shipped, and when.

    New sources, gateway capabilities and product changes, dated as they ship.

    Latest

    The 5 most recent changes, in full.

    A stable endpoint for clients that snapshot tool definitions

    Some agent platforms, Salesforce Agentforce among them, save a copy of every tool definition when you register an MCP server. When we improve a tool description on our side, the platform marks the server out of sync and blocks your agent until you register it again, and registering again can clear your agent's configuration.

    For those platforms, connect to https://gateway.ansvar.eu/stable/mcp. It runs on the same servers as https://gateway.ansvar.eu/mcp, with the same sign-in, credentials, plans and tool behaviour. The difference is the tool list. On the stable endpoint, tool names, descriptions and input schemas are frozen. We change them only in a deliberate refresh, announced to you before it happens. A tool we add after a freeze does not appear on the stable endpoint until the next refresh.

    The stable endpoint checks each call against the frozen schema, the one your platform saved. Plan limits and the usual argument checks still apply. If your client reloads the tool list on its own, keep using /mcp: it gets every improvement the day we ship it.

    Microsoft 365 Copilot shows Ansvar sources as clickable citations

    Microsoft 365 Copilot builds its citations from fields it recognises on each result row: a url, a title and a subtitle. Our rows carried the link only inside citation.source_url, and the tool result ended with a Markdown table after the JSON, so Copilot could not parse it. Answers from Ansvar showed in Copilot without clickable sources.

    Rows from search and get_provision now carry up to three more fields:

    • url: the row's citation.source_url, when it is a web address. A row without one gets no url; we never make one up.
    • title: the source and article reference, followed by the provision's title when the row has one.
    • subtitle: the publisher, when the row names one.

    The tool result is now one JSON document. The "Sources used" table your agent renders sits inside it as evidence_summary, with the same text as before. The citation object is unchanged, so clients that read it keep working. Other MCP clients see the same shape.

    EU case law: judgments of the Court of Justice and the General Court

    The gateway served EU legislation, but not the court that interprets it. An agent asked how the Court of Justice reads an unfair-terms clause or the GDPR's legitimate-interest test could quote the article and none of the case law behind it.

    Your agent can now search the judgments, orders and Advocate General opinions of the Court of Justice and the General Court, full text in English, and fetch a decision back by its ECLI with get_decision. The text comes from Cellar, the Publications Office's repository, and every row cites the Court of Justice of the European Union as publisher.

    We screened the collection for personal data before serving it. We serve decisions that name no private person or in which the Court anonymised the parties. We left out criminal matters, the European arrest warrant, asylum, sanctions cases brought by individuals and cases about special categories of personal data, and where our read found a private person's details we either removed the passage or withheld the decision.

    Try it:

    Using Ansvar, find Court of Justice judgments on unfair terms in consumer contracts under Directive 93/13 and cite each one by ECLI.

    EU case law is available from Premium. Scope with sources=['eu-court-judgments'].

    Which laws apply to your product: the law map and new EU product acts

    Ask an agent which laws apply to EV chargers sold in Germany and it tends to answer from memory. When we tested that question across product types, agents left out many of the acts they should have found and cited.

    describe_capabilities(section='law_map', query=<product type>, jurisdiction=<country>) now hands your agent the map. For a product type it lists the EU acts to check, each with its frameworks= key and a scope note, and for the country it lists the national instruments with their legal state and, for each one we serve, the exact get_provision call. Where we do not serve a text, the map says so and tells your agent not to answer from memory. The law map is free on every plan.

    The EU legislation corpus also grew to carry the product rules those maps point at:

    • REACH, Regulation (EC) No 1907/2006, in its current consolidated version;
    • the Packaging and Packaging Waste Regulation, (EU) 2025/40;
    • the F-gas Regulation, (EU) 2024/573, with its English corrigendum;
    • the ecodesign rules for electric motors, (EU) 2019/1781, and for transformers, (EU) No 548/2014;
    • delegated and implementing acts under AFIR, the Radio Equipment Directive (including the cyber security application date), the Energy Performance of Buildings Directive and the Measuring Instruments Directive, and Directive (EU) 2026/470, the first CSRD Omnibus.

    Try it:

    Using Ansvar, which EU and Dutch laws apply to switchgear we place on the Dutch market? Use the law map and cite each act.

    CAPEC, CWE and D3FEND on every plan

    A free threat-model run could cite MITRE ATT&CK and ATLAS, but CAPEC, CWE and D3FEND sat on Premium and above. A free threat model named the attack and stopped short of the weakness behind it and the defence against it.

    The catalogues are now on every plan. Search them with sources=['capec'], sources=['cwe'] or sources=['d3fend'], and fetch an entry by its id, for example get_provision(law='capec', article='CAPEC-94'). Each row cites The MITRE Corporation under that catalogue's terms of use. The threat-model workflow searches them on every plan.

    Try it:

    Using Ansvar, what is CAPEC-94, which CWE weaknesses does it exploit, and which D3FEND techniques counter it?

    Earlier changes

    Austrian case law is back, without criminal matters

    Austrian court decisions from the RIS serve again: the Rechtssätze of the Supreme Court, the Supreme Administrative Court, the Constitutional Court and the courts of appeal. We removed criminal and administrative-offence decisions before the return.

    Read the full entry

    We took Austrian case law offline on 1 October while we removed criminal decisions from the general service. It is back.

    Your agent can search the Rechtssätze, the courts' own condensed statements of the legal principle each decision settled, from the Oberster Gerichtshof, the Verwaltungsgerichtshof, the Verfassungsgerichtshof and the ordinary courts of appeal. The text comes from the Rechtsinformationssystem of the Bundeskanzleramt. We removed criminal, administrative-offence and criminal-derived decisions using the RIS's own metadata, and screened the rest for personal data before serving it.

    Try it:

    Using Ansvar, what has the Oberster Gerichtshof held on the duty to warn under Austrian contract law?

    Austrian case law is available from Premium. Scope with sources=['austrian-court-decisions'], or let an Austrian search reach it.

    Bulgaria: Supreme Court of Cassation case law, civil and commercial

    Bulgarian case law joins the gateway: civil and commercial decisions of the Върховен касационен съд, from vks.bg. We read every decision for personal data before serving it and mark each removal in the text.

    Read the full entry

    Bulgarian searches reached the statutes only. A litigator asking how the Supreme Court of Cassation reads unjust enrichment or a contract term got the act and no court.

    Your agent can now search the civil and commercial decisions of the Върховен касационен съд as the court publishes them on vks.bg, and fetch any decision back by its reference. Criminal decisions are excluded.

    We read each decision for personal data before we serve it. The court names its judges, prosecutors and secretaries, and we keep them, as the court's own publication rules do. Where a decision names a private person, we remove that passage and leave the marker "[заличено]" in its place, so you can see that text was taken out. A decision we cannot clear that way we do not serve. verify_citations refuses a quotation that runs across a removed passage, so a quote never stitches the text on both sides together.

    Try it:

    Using Ansvar, how has the Bulgarian Supreme Court of Cassation ruled on неоснователно обогатяване between companies?

    Bulgarian case law is available from Premium. Scope with sources=['bulgarian-court-decisions'].

    EU legislation in Dutch, German and Bulgarian, side by side with English

    get_provision takes a list of up to three languages for EU legislation and returns each language version with its own citation. Dutch, German and Bulgarian editions sit beside English.

    Read the full entry

    Your agent could read EU legislation in English only. A Dutch lawyer quoting the AVG, or a German team checking the wording of the NIS2 Richtlinie, had to translate back from English or leave the gateway to find the official language version.

    get_provision now accepts language for EU legislation, as one code or a list of up to three: en, nl, de or bg. A list returns the versions side by side under editions[]. Each version has its own rows, its own citation and its own language_served, so your agent can quote the German text and cite the German edition. Where an instrument has no edition in the language you asked for, the answer falls back to English and says so in language_fallback.

    Search stays in English: search in English, then fetch the hits in the language you need. In verify_citations, each citation subject takes a language code, so a quote checks against the edition it came from.

    Try it:

    Using Ansvar, show me Article 17 of the GDPR in English and Dutch side by side.

    describe_capabilities(section='sources') lists which editions each corpus holds.

    Luxembourg: CSSF regulations and the core financial statutes

    The financial regulation layer now serves CSSF regulations from the CSSF's own published files, and the CSSF's coordinated texts of Luxembourg's core financial statutes in French and English, each statute labelled as the CSSF's unofficial consolidation.

    Read the full entry

    A Luxembourg search reached the CSSF's circulars, but the circulars point at CSSF regulations and at statutes we served only as their amending acts. Your agent could read a circular on fund delegation and not the law it applies.

    Your agent can now search and cite CSSF regulations, taken from the CSSF's own published files, and the CSSF's coordinated versions of these statutes in French and English:

    • the Law of 5 April 1993 on the financial sector;
    • the Law of 12 November 2004 on the fight against money laundering and terrorist financing;
    • the Law of 17 December 2010 relating to undertakings for collective investment;
    • the Law of 13 February 2007 relating to specialised investment funds;
    • the Law of 12 July 2013 on alternative investment fund managers;
    • the Law of 23 July 2016 on reserved alternative investment funds.

    The CSSF drew up these consolidations for information. Every statute row says so: "CSSF coordinated text (unofficial); official text: Mémorial A / Legilux". Cite the Mémorial A for a filing; use these texts to find and read the rule.

    Try it:

    Using Ansvar, what does the Luxembourg Law of 17 December 2010 require of a UCITS management company on delegation?

    Scope with jurisdictions=['LU'].

    Premium workflow reports come as HTML, PDF and Word

    generate_report on the Premium plan now renders a workflow report as HTML, PDF or DOCX, without a watermark. Before, Premium received the report as JSON only.

    Read the full entry

    A Premium run of a threat model or a DPIA ended in a JSON report. The free trial run got a watermarked HTML or PDF. That put a paying Premium customer behind a free one, and we fixed it.

    On Premium, generate_report now takes format html, pdf, docx or all and returns the rendered report without a watermark, the same report Team receives. Nothing else on Premium changes: document upload stays on Team and above, and the monthly run allowance is unchanged.

    Ask your agent at the end of a run:

    Using Ansvar, generate the report for this DPIA as a Word document.

    Canada: OSFI's technology, third-party and operational resilience guidelines

    The financial regulation layer now carries guidelines B-13, B-10 and E-21 from Canada's Office of the Superintendent of Financial Institutions, on technology and cyber risk, third-party risk, and operational risk and resilience. OSFI gave us written permission to reproduce them.

    Read the full entry

    Federally regulated banks and insurers in Canada work to these OSFI guidelines when they assess technology and supplier risk: B-13, Technology and Cyber Risk Management; B-10, Third-Party Risk Management; and E-21, Operational Risk Management and Resilience. Your agent can now search and cite them through the same financial regulation layer that serves the European regulators.

    OSFI's guidelines are Crown copyright, so we asked before we fetched. OSFI granted written permission to reproduce the guidelines as published on the date of the grant. Every row carries OSFI's credit line, and we serve the text as OSFI published it. When OSFI issues a new edition of a guideline, we withdraw that guideline and ask again before we serve the new text.

    Try it:

    Using Ansvar, what does OSFI Guideline B-10 expect a bank to do before it outsources a critical service?

    Scope a search to Canada with jurisdictions=['CA']. The guidelines are available on every plan.

    Search refuses an over-long query and tells your agent how to split it

    search and search_guidance now refuse a query longer than 500 characters before any source is searched. The refusal is a typed error that tells the agent to split the matter into short issue queries. Before, a pasted case description failed inside the corpus and read as a source outage.

    Read the full entry

    Agents sometimes paste a whole case description into search: the parties, the facts, the dispute, a paragraph or more. The corpora behind search refuse a query longer than 500 characters. Until today that refusal came back from inside the corpus as an untyped error, and the gateway counted it as a source failure. The agent saw "all resolved MCP endpoints failed", or a case-law leg reported as unavailable, and had every reason to read it as an outage. Repeated refusals could also hold that corpus back from other searches for a short while.

    The gateway now checks the length itself. A search or search_guidance query over 500 characters is refused before any source is searched, so no corpus is called and none is marked as failing. The tool result has isError: true and carries this body:

    {
      "error": "validation_error",
      "code": "query_too_long",
      "max_chars": 500,
      "query_chars": 712,
      "message": "query is 712 characters; search accepts at most 500, so nothing was searched. Split the matter into separate issue queries of 2-5 legal terms, one call per issue, and merge the results. Do not send a truncated copy of the text: a cut-down description does not search better.",
      "dispatched": false,
      "automatic_retry": false
    }
    

    The query parameter of both tools now states the limit, so an agent that reads tools/list knows it before the first call. If your client caches tool definitions, refresh the connector to pick up the new wording.

    What your agent should do with a case description: list the legal issues it raises and search each one in its own call, with 2 to 5 legal terms in the language of the corpus, then merge the answers. Do not send a shortened copy of the description. We tested that on Dutch case law: the opening of an intake text names the parties and the setting, the search ranks on those words, and the decisions that matter rarely come back. Short issue queries were the only approach we tested that found them in useful numbers.

    Hand your agent the pattern with the case:

    Using Ansvar, list the legal issues this case description raises and search Dutch case law for each one separately with a few legal terms, such as "ontslag op staande voet" or "dringende reden". Merge the results and cite each decision.

    The limit and the error are on the tool reference.

    Ansvar Compliance Skills is in Anthropic's plugin directory

    The ansvar-compliance-skills plugin is listed in Anthropic's plugin directory. One install adds our task skills and the Ansvar gateway connector to Claude, Cowork and Claude Code.

    Read the full entry

    The ansvar-compliance-skills plugin passed Anthropic's directory review and is now listed there. Until now you installed our agent skills one file at a time. Now one step adds the task skills listed below, together with the connector they need.

    In claude.ai or the Claude desktop app, open Customize, then Plugins, find Ansvar Compliance Skills under Discover and select Add. The plugin is saved to your account, so Cowork loads it in your next task and Claude Code picks it up when you sign in with the same account. Directory plugins show on the Pro, Max, Team and Enterprise plans. In Claude Code you can also install it straight from its own repository, which doubles as a marketplace: /plugin marketplace add Ansvar-Systems/ansvar-compliance-skills, then /plugin install ansvar-compliance-skills@ansvar-compliance-skills.

    The plugin bundles the Regulatory Threat Model, Incident Reporting Navigator, CRA Vulnerability Obligations and ISO Standards Expert skills, each vendored unchanged from its own published repository. A new release that also carries the workflow family skills is in preparation.

    The skills do not answer from model memory. Each one calls the Ansvar gateway for the law it cites, so the plugin needs the connector signed in to your Ansvar account: open the plugin's Connectors tab and connect it. The incident and CRA skills run fully on a free account. The threat-model and ISO skills have plan notes, listed per skill in the guide.

    Try it after connecting: "Using Ansvar, we have an incident. Who must we notify, in which member state, and by when?" Install steps for every client are in the agent skills guide.

    Slovenian law: the core statutes, consolidated and in force

    The Slovenian statutes corpus now carries the acts a company, its lawyers and its compliance team work with every week: the civil and commercial codes, labour, tax, procurement, procedure, data protection and cyber security, each in its current consolidated text from PISRS, the state's legal information system.

    Read the full entry

    The Slovenian statutes corpus grew from a small starter set into the core of the country's in-force legislation. You can now query the Obligations Code (OZ), the Companies Act (ZGD-1), the Employment Relationships Act (ZDR-1), the Public Procurement Act (ZJN-3), the income tax and VAT acts, civil, criminal, enforcement and administrative procedure, the insolvency act, the Personal Data Protection Act (ZVOP-2), the Information Security Act (ZInfV-1), consumer protection and electronic communications, alongside the Constitution. Each act comes from PISRS, the legal information system run by the Government Legislation Office, in its current consolidated version.

    We read the licence first. Slovenian copyright law excludes official legislative texts from protection, and the Government Legislation Office publishes the consolidated collection on the national open-data portal under CC BY 4.0. Every row names the office as licensor, carries the licence notice and records that we split each act into provisions. We serve the Slovenian original only. We fetch act by act from a fixed, reviewed list, and we have asked the office for a key to its developer API.

    Try it: "Using Ansvar, what does the Slovenian Employment Relationships Act say about the notice period for dismissal?" or in Slovenian: "Using Ansvar, kaj Zakon o gospodarskih družbah določa o odgovornosti članov uprave?" You can also look up an article directly, for example Article 131 of the Obligations Code, the general rule on liability for damage.

    Consolidated texts in PISRS are unofficial; the Official Gazette (Uradni list) remains the authentic source, and each answer links back to the act's PISRS page. Two new judiciary acts, the Courts Act (ZS-1) and the Judges Act (ZSod), apply from 1 January 2027. We serve the acts they replace until then and add the new ones before that date.

    Claim check: validate_claim tests a legal conclusion against the text it cites

    Your agent hands the gateway its reasoning as a graph: the provisions it cites, the quotes it took, the facts and assumptions it relies on, and the conclusions it draws. The gateway refetches each provision under your own access, compares the quotes with the served text, and reports what each conclusion rests on. It never answers "passed".

    Read the full entry

    An agent can cite a real article and still misquote it, or draw a firm conclusion from an assumption it never named. validate_claim catches both before the conclusion reaches your report.

    Your agent sends its reasoning as a claim graph. A clause node carries the article it rests on and the quote taken from it. A fact node records something you told the agent about your organisation. An assumption node records something the agent assumed. Interpretations and conclusions point at the nodes they depend on and say whether the text settles them or whether they are a reading.

    The gateway refetches every cited provision under your own tier and add-ons, so a source you cannot reach comes back as withheld, never as content. It compares each quote with the served text and marks the clause bound or not. Strength then flows through the graph: a conclusion carries the strength its weakest input allows, and a conclusion that rests on a fact or an assumption names that dependency. Every response lists what it checked and what it did not.

    A quote in a different language from the served text counts as a reading at best, and a row served without language metadata stays unverified rather than assumed to match. Send the prose answer alongside the graph and the gateway compares its quotations too. Leave it out and the response says so under not_checked.

    The response opens with a summary the gateway writes itself: one line per conclusion saying what it rests on (your input, an assumption, matched provisions, resolved evidence whose support is not assessed, or nothing this check could establish), a flag when a conclusion declared settled came back weaker, an attention list carrying every finding whether or not it changed a conclusion, and a relay text your agent is asked to pass on unchanged. The word "unverified" does not appear in it: the summary names the operation performed, never a verdict on the claim.

    Every response also states what the check cannot do. It does not prove a row was served to you in an earlier call. It does not judge whether the logic translates the law correctly, since a wrong reading can bind to real text. It does not verify that a provision is in force today. Read the output as evidence for your review, not as a verdict.

    The tool is available on every tier. A large graph citing one corpus takes tens of seconds. When the refetch budget runs out, the response is marked bounded, names how many clauses it did not reach, and leaves them unverified.

    Try it once your agent has fetched the statute text: "Using Ansvar, build a claim graph for that conclusion and run validate_claim on it before you state it."

    Showing 10 of 50