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

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.

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" }{# noqa: public-leak — "entity_domains" is the tool's public API method value in real responses, not an internal table reference #} 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.

lint_app_profile( activities=["crawls_web", "generates_content"], jurisdictions=["us", "de", "eu", "kr"] )
WARNeuTDM opt-outs are enforceable rights reservations: honor machine-readable reservations when crawlingDSM Directive Art. 4(3) · as of 2026-07-27
WARNeuSynthetic content transparency: AI-generated text must 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

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. 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 →