mcp.lexlint.io beta the LexLint MCP server, and the docs for it lexlint.io →

Example

One full run, end to end

A developer has vibe-coded a research assistant: it crawls public pages for context and drafts articles with an LLM. Before shipping to users in the US, Germany, and South Korea, they ask their coding agent to lint it: to surface exposure before shipping, not to certify the app.

1 · The agent works out whose law applies

The app crawls two sources the developer named. Server location is noise; what matters is each operator's jurisdiction, so the agent resolves the domains first.

resolve_domain_jurisdiction(domain="stadt-koeln.de") { jurisdiction: "de", method: "entity_domains" } resolve_domain_jurisdiction(domain="cool-startup.ai") { jurisdiction: null, method: "unknown" } # .ai is a vanity TLD: LexLint refuses to guess. The agent checks the # operator's terms page and finds a Delaware company: lint "us".

2 · Declare the profile, run the lint

The agent declares what the app actually does. It crawls, and it generates content; it does not train models on the crawled text, so it declares only what is true.

set_profile( activities=["crawls_web", "generates_content"], jurisdictions=["us", "de", "eu", "kr"] ) profile accepted · 4 of 4 jurisdictions held us 19 · de 8 · eu 12 · kr 3 instruments # run_lint is a fixed, rule-based match of the declaration against the corpus. # No model reasons about the law here: the same lists, corpus build and instant # always give the same findings. run_lint( activities=["crawls_web", "generates_content"], jurisdictions=["us", "de", "eu", "kr"] )
WARNeuTDM opt-outs are enforceable rights reservations under Article 4(3), which requires honoring machine-readable reservations when crawlingDSM Directive Art. 4(3) · as of 2026-07-27
WARNeuSynthetic content transparency: Article 50 requires AI-generated text to be identifiable as such in some contextsAI Act Art. 50 · as of 2026-07-27
INFOkrGenerated-content labeling duties phase inAI Framework Act · as of 2026-06-30
0 errors, 2 warnings, 1 info: review the warnings below

3 · The agent reads the findings back into its plan

Steps 1 and 3 are the agent's judgment, and so is the declaration at the top of step 2. The match under it is not: which law comes back for that declaration is a fixed, rule-based match against the corpus, never a model reasoning about the law, so the agent's reading starts from findings that would be the same whoever declared those two lists.

This is where a lint earns its keep with an LLM at the keyboard: the findings are structured, cited, and specific enough for the agent to map each one onto the code it just wrote.

# the agent, reasoning over the lint output Agent: Two findings implicate code in this repo. The TDM warning lands on fetcher.py: I crawl stadt-koeln.de but never check for machine-readable opt-out signals before fetching. The two labeling entries land on render.py: drafts ship with no indication they are AI-assisted, and the KR duties phase in on dates I should record next to the label logic. The two coverage notes implicate nothing here: this app neither gates by age nor aggregates news, so I record that I read them and move on. Were either true, run_lint would not have told me, and I would call get_law for those topics by hand. Agent: Fixing both files now, while the change is cheap.

4 · ...and fixes the app

# fetcher.py: honor machine-readable TDM reservations (DSM Art. 4(3)) - html = fetch(url).html + resp = fetch(url) + if tdm_opt_out(resp.headers, resp.html): + return skip(url, reason="TDM rights reserved") + html = resp.html # render.py: label synthetic content (AI Act Art. 50; KR phase-in) + draft.badge = "AI-assisted draft" + # KR labeling duties phase in: AI Framework Act + draft.meta["generator"] = APP_NAME

The crawler now checks reservation signals before every fetch, and drafts carry a visible label with the phase-in duty recorded where the next developer will see it.

5 · What the run means, and what it does not

The findings do not disappear on re-run: obligations apply whether or not you have met them, and LexLint reports what applies. What changed is that every finding now maps to a shipped mitigation, each with a citation for counsel to start from. The app is not "compliant": LexLint cannot know that, and says so. What the team has is the basics caught early, at the moment they were cheapest to fix.

Connect your agent →