Legalithm
OfficialThis server provides an offline MCP interface for EU AI Act compliance, offering four read-only tools that integrate into coding workflows.
Classify AI Risk (
classify) — Analyze an AI use case (role, domain, audience, description) to determine its risk tier (unacceptable, high, limited, minimal) under Regulation (EU) 2024/1689. Returns cited rationale, confidence score, and applicable deadlines. Fully offline.Explain Obligations (
explain_obligation) — List all EU AI Act obligations for a given role (provider/deployer) and risk tier, each with Article citations. Designed to be used afterclassifyfor accurate results. Fully offline.Generate Article 50 Disclosure (
generate_disclosure) — Produce a ready-to-use transparency disclosure snippet for chatbot, AI-generated content, deepfake, or emotion recognition scenarios. Supports English and German. Fully offline.Check Public Record (
check_record) — Fetch a published Legalithm Trust Center compliance record by organization slug via a public API. The only tool that makes an online network call; no API key required.
Provides a GitHub Action for continuous compliance verification, failing builds when the compliance record drifts or the law changes.
Legalithm — EU AI Act compliance in your coding loop
Shipping an AI feature to EU users? Article 50 transparency duties have applied since 2 August 2026. Content marking for systems placed before that date is due 2 December 2026, and Annex III high-risk obligations follow on 2 December 2027. Catch it where you code, in seconds.
This image is AI-generated, and it is marked as such with our own tool: legalithm mark --watermark added a C2PA content credential and a pixel watermark, which is what Article 50(2) asks for. Download it and run legalithm verify on it. The credential is signed with the CLI's test certificate, so it is valid but not trust-listed.
Quickstart
Install the offline server in your editor. No API key, and nothing leaves your machine.
claude plugin marketplace add legalithm-org/legalithm
claude plugin install legalithm@legalithmCodex:
codex plugin marketplace add legalithm-org/legalithm
codex plugin add legalithm@legalithmCursor: use the Add to Cursor badge above.
Then ask your agent "does the EU AI Act apply to this feature, and what tier?"
{
"risk": "high",
"confidence": "high",
"rationale": "This AI system is classified as high-risk under Article 6(2) as it falls into the category of Employment, Workers Management and Access to Self-employment as specified in Annex III...",
"citations": [
{
"article": "6(2)",
"annex": "III",
"label": "Article 6(2) & Annex III - High-Risk AI Systems",
"url": "https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=OJ:L_202401689#article-6",
"asOf": "2026-08-03",
"appliesFrom": "2027-12-02"
}
],
"matchedRules": ["high_risk_employment", "high_risk_domain_selected"],
"applicableDeadline": "2027-12-02",
"obligationsHint": {
"count": 10,
"topTitles": [
"Quality Management System (Article 17)",
"Data Governance (Article 10)",
"Technical Documentation (Article 11)",
"Human Oversight (Article 14)"
]
},
"confidenceScore": 0.72,
"reviewRequired": false
}Note matchedRules, asOf and confidenceScore. You can see which rule fired, how old the corpus is, and how sure the engine was. Below the abstention threshold it sets reviewRequired and tells you to get a human instead of guessing.
Content marking for Article 50(2), also no key:
npm i -g legalithm
legalithm mark ./out.png --watermark # writes out.signed.png
legalithm verify ./out.signed.png # detect both layersInstall it rather than using npx for these two: C2PA and the watermark come from c2pa-node and sharp, which are optional native dependencies that npx does not reliably fetch. Without them mark warns and marks nothing. Everything else in this README works fine under npx.
The compliance record (needs a free key)
npx legalithm setup # wires hooks, editor rule and MCP config
npx legalithm init # writes a dated, cited compliance/legalithm.json
npx legalithm check # re-verify; non-zero exit on drift (for CI)init and check talk to the hosted record service, so they need a free API key. Everything above this line does not.
Related MCP server: mcp-eu-ai-act
Three surfaces
Editor — an offline MCP server (
legalithm-mcp-server) exposing 4 tools (classify,explain_obligation,generate_disclosure,check_record). No API key. The first three run fully offline;check_recordreads a public API.Repo —
legalithm initwrites a dated, citedcompliance/legalithm.jsonthat records your AI system's risk tier and the obligations behind it.CI —
legalithm checkand the GitHub Action fail the build when the committed record drifts — because your app changed or the law changed under you.
MCP config
Add the offline server to Claude Code, Cursor or Codex manually:
{
"mcpServers": {
"legalithm": {
"command": "npx",
"args": ["-y", "legalithm-mcp-server"]
}
}
}GitHub Action
# .github/workflows/ai-act.yml
name: AI Act
on: [pull_request]
jobs:
ai-act:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: legalithm-org/legalithm/packages/action@v1
with:
api-key: ${{ secrets.LEGALITHM_API_KEY }}Honest framing
A cited starting point that tells you when to get a human — not legal advice. When unsure, it flags the result for review instead of guessing. Every output is checked against Regulation (EU) 2024/1689; it is not a certification.
Links
Full docs: https://www.legalithm.com/en/developers/docs
License
MIT
Available Tools
7 toolsagent_disclosure_taxonomyWhat an AI agent must disclose, and what it need notARead-only
The six disclosure dimensions an AI agent owes under Article 50(1), plus the negative scope: what the Commission Guidelines confirm is NOT covered, including chain-of-thought, backend machine-to-machine calls and agent-to-agent traffic. Offline.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, non-destructive, and closed-world. The description adds a useful behavioral signal, 'Offline,' indicating no live retrieval, and clarifies the scope includes both positive dimensions and negative exclusions. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense, front-loaded sentence with useful exclusion examples and no filler. The standalone 'Offline' fragment could be integrated more smoothly, but the overall length and organization are efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only reference tool, the description adequately conveys what the taxonomy contains: six disclosure dimensions, negative scope, and illustrative excluded items. It does not state the return format, but the static, offline nature makes this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there is nothing for the description to add about parameter meaning. Per the baseline for zero-parameter tools, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names concrete content: the six Article 50(1) disclosure dimensions and the negative scope of what is not covered, with specific examples. It is clearly a taxonomy/reference tool, distinguishable from siblings like classify or explain_obligation, though it lacks an explicit action verb like 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus the sibling tools such as explain_obligation, generate_disclosure, or discover_ai_surfaces. The content implies a reference lookup, but no conditions, exclusions, or alternatives are stated, leaving the agent to infer the appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_recordCheck a public Trust Center recordARead-only
Fetch a published Legalithm Trust Center compliance record by org slug. Online (reads the public API).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The organisation slug of a published Trust Center record, as it appears in the record URL, for example "acme-gmbh". Not a company display name and not a domain. This is the only tool that makes a network call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond annotations by stating the tool is 'Online' and performs a network read, and it restricts to 'published' records, which gives helpful operational expectations. There is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core purpose and followed by a useful behavioral note. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with strong annotations and full schema coverage, the description is nearly complete. It communicates the resource, the input, and the network behavior. It does not detail the return format, but that is not strictly necessary given the simplicity and the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documentation covers 100% of the parameter meaning, with detailed description for 'slug' including format and example. The main description merely repeats 'by org slug', adding no additional semantic value beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Fetch') and a specific resource ('published Legalithm Trust Center compliance record') with the required input ('by org slug'). This clearly distinguishes it from sibling tools like classify or generate_disclosure, which imply different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context ('Online (reads the public API)') and implies this is for retrieving published records, but does not explicitly state when to use this tool versus alternatives or when not to use it. No exclusions or alternative tool names are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classifyClassify AI risk (EU AI Act)ARead-only
Classify an AI use case under the EU AI Act — risk tier + cited rationale. Offline; checked against Regulation (EU) 2024/1689, not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Who the caller is for this system. "provider" develops or places it on the EU market under its own name and carries the Article 8 to 17 duties. "deployer" uses it under its own authority and carries Article 26. If the caller both builds and uses it, answer as provider. | |
| domain | Yes | The Annex III area the use case falls in, which is what drives the high-risk determination. Read these broadly: "employment" covers recruitment, CV screening, task allocation, promotion and termination. "essential-services" covers creditworthiness, insurance pricing, and access to public benefits. "biometrics" covers identification, categorisation and emotion inference. Use "other" only when none genuinely applies, since that usually yields a lower tier. "credit" is a deprecated alias kept for older clients and is normalised to essential-services. | |
| audience | Yes | Who is subject to or affected by the system, not who buys it. Choose "workers" for employees and candidates, "children" for under-18s, and "vulnerable-groups" where age, disability or social situation impairs the ability to object. These raise obligations, so pick the most specific one that applies rather than defaulting to "general". | |
| use_case | Yes | One or two plain sentences describing what the system actually does to or about a person, and what decision it influences. Say "screens and ranks job applicants from their CVs to shortlist candidates", not "HR tool" or a product name. Whether a human reviews the output before it takes effect matters, so state it if known. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context: 'Offline' (no network calls), 'checked against Regulation (EU) 2024/1689' (authoritative source), 'not legal advice' (limitation disclaimer), and it describes the output as 'risk tier + cited rationale'. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence starting with the verb and resource, followed by two terse context clauses. Every element earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema, the description covers the return contract (risk tier + rationale), the legal basis, offline behavior, and disclaimer. Combined with the comprehensive schema descriptions, it is largely complete; the only gap is explicit sibling differentiation, which is covered under usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having thorough meaning including enum semantics and special guidance (e.g., domain breadth, audience selection, use_case phrasing). The tool description itself adds no further parameter information, but the schema carries the full burden, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'classify' with a clear resource ('an AI use case under the EU AI Act') and outcome ('risk tier + cited rationale'). It is immediately clear what the tool does and is distinct from sibling tools like explain_obligation or generate_disclosure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage whenever classification under the EU AI Act is needed, but does not explicitly state when to use this tool instead of siblings like explain_obligation or check_record. The 'Offline' and 'checked against Regulation' context hints at behavior, but there are no exclusions or alternative references, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_ai_surfacesDiscover the AI in a codebase, and which Article 50 limbs could attachARead-only
Reads file CONTENT you pass in (a package.json, source files) and proposes which AI capabilities the code could ship, with the evidence for each, then resolves those into Article 50 limbs with their dates and duty-bearers. Returns HYPOTHESES, never findings: a dependency proves what code could do, never what it ships. Offline, no network, nothing stored.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | A map of path to file content. Read the files yourself and pass their contents; the tool never touches the filesystem. A package.json yields "possible" capabilities; a source file containing a real call site raises one to "likely". Passing both is best. | |
| deploys | No | Whether the user also runs the system themselves. Articles 50(3) and 50(4) bind the deployer, so if they only supply it to customers those duties land downstream. Defaults to false. | |
| own_brand | No | Article 3(3): is this placed on the market under the user's own name or trademark? Ask them; do not infer it from the repository or the git author. If true they are the provider whatever model sits underneath, and a provider duty cannot be contracted back upstream. Defaults to true. | |
| on_market_before_2_aug_2026 | No | Article 111(4): was it on the market before 2 August 2026? If yes, the 50(2) marking duty moves to 2 December 2026. If no, it applied the day it shipped, with no transition. Defaults to false, which is the stricter reading. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/destructive annotations by disclosing that outputs are hypotheses, not findings, and that the tool is offline with nothing stored. This is valuable behavioral context that prevents misuse and over-interpretation of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The most important behavioral caveat (hypotheses, never findings) is prominent, and the operational constraints (offline, no storage) are packed efficiently into a short closing phrase.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input expectations, analysis flow, evidence logic, output status, and operational constraints at a high level. Since there is no output schema, a bit more detail on the shape of returned limbs/dates/duty-bearers would improve completeness, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so the schema carries the parameter meaning. The description reinforces the files parameter and the possible-vs-likely evidence distinction, but does not add new semantic information about deploys, own_brand, or the date flag beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states a specific action (read file contents, propose AI capabilities, resolve into Article 50 limbs) and names the concrete input types. It does not explicitly differentiate itself from siblings like classify or explain_obligation, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: when the user can supply file contents and wants AI-capability analysis mapped to Article 50 obligations. It does not mention alternative sibling tools or exclusion cases, so guidance on choosing among siblings is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_obligationExplain EU AI Act obligationsARead-only
List the EU AI Act obligations for a role + risk tier, each with its Article citation. Pass country (and sector) to also get the competent national authority. Offline.
| Name | Required | Description | Default |
|---|---|---|---|
| risk | Yes | The risk tier, as returned by the classify tool. Do not guess it: call classify first and pass its "risk" value through, or the obligations returned will be confidently wrong. | |
| role | Yes | Who the caller is for this system. "provider" develops or places it on the EU market under its own name and carries the Article 8 to 17 duties. "deployer" uses it under its own authority and carries Article 26. If the caller both builds and uses it, answer as provider. | |
| sector | No | Sector of the deployer, where it changes which authority is competent. Use "financial_services" for a company under financial-services supervision, "media" for broadcasting and press, "general" otherwise. Defaults to "general". Getting this wrong names the wrong regulator: in Germany a bank answers to BaFin and a broadcaster to its Bundesland, not to the default federal authority. | |
| country | No | ISO 3166-1 alpha-2 code of the member state the system is placed on the market in, e.g. "DE". Optional. Supply it to get the competent national authority alongside the obligations. Only states with a recorded primary source are mapped; for any other the response says so explicitly rather than guessing, and the EU-wide obligations are unaffected either way. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/destructive annotations, the description adds that every obligation is returned with its Article citation and that the tool is offline. There is no contradiction with annotations, and no destructive or open-world behavior is hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the core purpose, optional-data behavior, and the offline constraint, with no filler. The most important information is front-loaded before the optional parameter note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description states the response shape (obligations with Article citations, plus competent authority when country is passed). Combined with the richly documented input schema and read-only annotations, nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents role, risk, sector, and country in detail. The description's mention of passing country/sector to get the regulator restates the schema rather than adding new parameter meaning; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a precise resource ('EU AI Act obligations for a role + risk tier'), and explicitly notes the Article citations and optional competent-authority output. This clearly differentiates it from siblings like classify (risk scoring) and generate_disclosure (document generation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditional usage for country and sector ('Pass country (and sector) to also get the competent national authority') and notes the tool is offline. It does not explicitly state when not to use it or name a sibling alternative, but the required role + risk inputs and optional extensions give a usable selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_agent_disclosureGenerate an AI agent disclosure (Article 50)ARead-only
Draft the Article 50(1) disclosure an AI agent owes: what it is, who it acts for, and the limits of its delegated authority. Follows the Commission Article 50 Guidelines adopted 20 July 2026. Refuses rather than inventing a principal. Offline.
| Name | Required | Description | Default |
|---|---|---|---|
| composition | No | Set when this agent orchestrates or is orchestrated by other agents. The Guidelines cover multi-agent architectures explicitly, and composition changes what has to be disclosed at architecture level. | |
| autonomy_level | No | How much human involvement there is, for example "supervised" where a person approves actions, or "autonomous" where it acts without review. Affects how the re-disclosure triggers read. | |
| principal_name | Yes | The natural or legal person the agent acts on behalf of, exactly as it should appear to the person interacting with it, for example "Acme GmbH". Ask the user; do not infer it from the repository, the git author or the domain. Pass null if genuinely unknown and the tool will tell you what is missing rather than guess. | |
| principal_type | Yes | Whether the principal is a "legal_person" (a company or other organisation) or a "natural_person" (an individual). This distinction drives who bears accountability for the agent's actions. | |
| authority_scope | Yes | What the agent is actually authorised to do on the principal's behalf, in plain words, for example "schedule meetings and send calendar invitations to Acme staff". The Guidelines frame this as delegation of authority and accountability for consequences, so state the limits, not the capabilities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and destructiveHint, so the description adds real value by disclosing three behavioral traits: conformity to the Article 50 Guidelines, refusing rather than fabricating a principal, and operating offline. These go beyond what annotations or the schema express, though the description does not detail refusal output or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the core purpose, the second establishes regulatory provenance, and the final fragments add decisive behavioral constraints without filler. Every sentence earns its place, and no content unnecessarily duplicates schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed schema for all five parameters and annotations that establish a read-only, non-destructive profile, the description supplies enough contextual behavior for an agent to call the tool correctly. The main gap is the absence of an output schema combined with no explicit statement about what the returned disclosure artifact looks like, but for a drafting tool this is a modest omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without additional parameter prose. The description loosely aligns with parameters via 'what it is, who it acts for, and limits of delegated authority,' but it does not add parameter-level detail beyond the schema, which already covers ask-the-user behavior and null handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('Draft'), a precise regulated artifact ('Article 50(1) disclosure an AI agent owes'), and the three core content elements: what it is, who it acts for, and the limits of delegated authority. It is clearly not a tautology, and its legal specificity helps separate it from generic disclosure tools, though it does not explicitly contrast with the sibling 'generate_disclosure'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the intended scenario: use this when drafting an AI agent's Article 50(1) disclosure. It also communicates an important boundary through 'Refuses rather than inventing a principal.' However, it does not explicitly state when not to use the tool or how to choose between this and sibling tools such as 'generate_disclosure'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_disclosureGenerate an Article 50 disclosureARead-only
Generate an Article 50 transparency disclosure snippet (chatbot / genai-content / deepfake / emotion), EN or DE. Offline.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language of the generated disclosure text. Defaults to "en". Use "de" when the system is placed on the German market, since the disclosure must be intelligible to the person seeing it. | |
| scenario | Yes | Which Article 50 duty applies. "chatbot" for a system a person interacts with directly, Article 50(1). "genai-content" for synthetic text, image, audio or video that must be machine-readably marked, Article 50(2). "emotion" for emotion recognition or biometric categorisation, Article 50(3). "deepfake" for content resembling real people, places or events, Article 50(4). Pick by the duty, not by the underlying model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is known. The description adds the 'Offline' trait, which is useful context, but it does not describe the output format, any prerequisites, or other behavioral details. With annotations covering safety, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core action, the categories, the languages, and a key behavioral trait ('Offline'). Every element earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with only two parameters, both fully described in the schema. The description succinctly states the tool's purpose and adds the 'Offline' detail. It does not explicitly mention the return format, but for a 'snippet' generator this is largely implied and not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (locale and scenario) have enums with detailed descriptions explaining the relevant Article 50 duties. The tool description itself adds no parameter-specific meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') and specifies the exact resource ('Article 50 transparency disclosure snippet'), plus the relevant categories (chatbot, genai-content, deepfake, emotion) and languages (EN/DE). This clearly distinguishes it from sibling tools like classify or explain_obligation, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case by naming the disclosure types and languages, and the parameter schema further clarifies when each scenario applies. However, it does not explicitly contrast with sibling tools (e.g., explain_obligation) or state when not to use it, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v1.0.0- Added
agent_disclosure_taxonomy - Added
discover_ai_surfaces - Changed
explain_obligation2 fields changed- added
Input schema / properties / countryAdded value: +{ + "description": "ISO 3166-1 alpha-2 code of the member state the system is placed on the market in, e.g. \"DE\". Optional. Supply it to get the competent national authority alongside the obligations. Only states with a recorded primary source are mapped; for any other the response says so explicitly rather than guessing, and the EU-wide obligations are unaffected either way.", + "maxLength": 2, + "minLength": 2, + "type": "string" +} - added
Input schema / properties / sectorAdded value: +{ + "description": "Sector of the deployer, where it changes which authority is competent. Use \"financial_services\" for a company under financial-services supervision, \"media\" for broadcasting and press, \"general\" otherwise. Defaults to \"general\". Getting this wrong names the wrong regulator: in Germany a bank answers to BaFin and a broadcaster to its Bundesland, not to the default federal authority.", + "enum": [ + "general", + "financial_services", + "media" + ], + "type": "string" +}
- Added
generate_agent_disclosure
4 tool updates
v0.2.2- Changed
check_record1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"The organisation slug of a published Trust Center record, as it appears in the record URL, for example \"acme-gmbh\". Not a company display name and not a domain. This is the only tool that makes a network call."
- Changed
classify4 fields changed- added
Input schema / properties / audience / descriptionAdded value: +"Who is subject to or affected by the system, not who buys it. Choose \"workers\" for employees and candidates, \"children\" for under-18s, and \"vulnerable-groups\" where age, disability or social situation impairs the ability to object. These raise obligations, so pick the most specific one that applies rather than defaulting to \"general\"." - added
Input schema / properties / domain / descriptionAdded value: +"The Annex III area the use case falls in, which is what drives the high-risk determination. Read these broadly: \"employment\" covers recruitment, CV screening, task allocation, promotion and termination. \"essential-services\" covers creditworthiness, insurance pricing, and access to public benefits. \"biometrics\" covers identification, categorisation and emotion inference. Use \"other\" only when none genuinely applies, since that usually yields a lower tier. \"credit\" is a deprecated alias kept for older clients and is normalised to essential-services." - added
Input schema / properties / role / descriptionAdded value: +"Who the caller is for this system. \"provider\" develops or places it on the EU market under its own name and carries the Article 8 to 17 duties. \"deployer\" uses it under its own authority and carries Article 26. If the caller both builds and uses it, answer as provider." - added
Input schema / properties / use_case / descriptionAdded value: +"One or two plain sentences describing what the system actually does to or about a person, and what decision it influences. Say \"screens and ranks job applicants from their CVs to shortlist candidates\", not \"HR tool\" or a product name. Whether a human reviews the output before it takes effect matters, so state it if known."
- Changed
explain_obligation2 fields changed- added
Input schema / properties / risk / descriptionAdded value: +"The risk tier, as returned by the classify tool. Do not guess it: call classify first and pass its \"risk\" value through, or the obligations returned will be confidently wrong." - added
Input schema / properties / role / descriptionAdded value: +"Who the caller is for this system. \"provider\" develops or places it on the EU market under its own name and carries the Article 8 to 17 duties. \"deployer\" uses it under its own authority and carries Article 26. If the caller both builds and uses it, answer as provider."
- Changed
generate_disclosure2 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Language of the generated disclosure text. Defaults to \"en\". Use \"de\" when the system is placed on the German market, since the disclosure must be intelligible to the person seeing it." - added
Input schema / properties / scenario / descriptionAdded value: +"Which Article 50 duty applies. \"chatbot\" for a system a person interacts with directly, Article 50(1). \"genai-content\" for synthetic text, image, audio or video that must be machine-readably marked, Article 50(2). \"emotion\" for emotion recognition or biometric categorisation, Article 50(3). \"deepfake\" for content resembling real people, places or events, Article 50(4). Pick by the duty, not by the underlying model."
1 tool update
v0.2.1- Changed
classify1 field changed- changed
Input schema / properties / domain / enumPrevious value: -[ - "biometrics", - "employment", - "credit", - "medical", - "education", - "law-enforcement", - "other" -]New value: +[ + "biometrics", + "employment", + "essential-services", + "medical", + "education", + "law-enforcement", + "critical-infrastructure", + "migration-asylum", + "justice-democratic", + "other", + "credit" +]
4 tool updates
- First observed
check_record - First observed
classify - First observed
explain_obligation - First observed
generate_disclosure
TDQS
Each tool has a clear, distinct purpose: classification, obligation explanation, disclosure generation, and record retrieval. There is no overlap in functionality, and an agent can easily select the right tool based on the action needed.
Tool names are primarily lowercase with underscores, following a verb-object pattern (e.g., explain_obligation, generate_disclosure, check_record). The only exception is 'classify', which is a single verb without an object, but it still fits the overall verb-led style.
With 4 tools, this server is well-scoped for its purpose of EU AI Act compliance assistance. Each tool addresses a core aspect of the domain without redundancy or bloat.
The tool set covers the essential workflows: classifying risk, explaining obligations, generating disclosures, and verifying compliance records. This provides a complete lifecycle for an EU AI Act compliance assistant, with no obvious dead ends.
Maintenance
Related MCP Connectors
Compliance lint for AI, scraping, and privacy law. Cited findings in 200 or more jurisdictions.
Pre-action allow/deny for AI agents. 24 statutes, 13 jurisdictions: EU AI Act, GDPR, DPDP.
One-step legal compliance for vibe-coded apps: privacy, terms, cookie banner and EU AI Act check.
AI legal compliance: contract review, risk scoring, EU/CN AI act, watermark check. 8 MCP tools.
Related MCP Servers
- AlicenseAqualityFmaintenanceQuery 37 EU regulations — from GDPR and AI Act to DORA, MiFID II, eIDAS, Medical Device Regulation, and more — directly from Claude, Cursor, or any MCP-compatible client.1417325Apache 2.0
- AlicenseAqualityDmaintenanceMCP server for EU AI Act compliance classification with multi-jurisdiction overlay across 8 frameworks (NIST AI RMF, ISO 42001, GDPR, HIPAA, Colorado SB 24-205). Provides deterministic risk classifier (quick_risk_class) and Claude-powered Annex III deep classifier (classify_annex3) with remediation actions.223MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first AI compliance scanner via Model Context Protocol, scanning codebases for violations of DPDPA 2023, RBI FREE-AI, SEBI AI/ML, and the EU AI Act.1Apache 2.0
- AlicenseAqualityDmaintenanceEnables EU AI Act compliance assessment by classifying AI systems, listing obligations, computing deadlines, and scanning repos for required documentation, all running locally.42MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/legalithm-org/legalithm'
If you have feedback or need assistance with the MCP directory API, please join our Discord server