ai-act-mcp
Enables fully offline risk classification using a local small language model via Ollama, keeping the AI system description on the user's machine for privacy.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ai-act-mcpClassify my CV screening tool for EU AI Act compliance."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ai-act-mcp
Lint your AI system for EU AI Act compliance — before the regulators do.
A local Model Context Protocol server that classifies any AI system under the EU AI Act, lists the obligations that apply to you with article citations, tells you your actual deadline, and scans your repo for missing compliance artifacts.
Runs entirely on your machine. Supports fully offline classification via a local small model — your system description never leaves your laptop.
Quick start · Offline with Ollama · All four tools · Contributing

Why this exists
The EU AI Act is live and has teeth:
Feb 2025 — prohibited practices enforceable. €35M or 7% of global turnover.
Aug 2025 — GPAI model obligations active.
Aug 2026 — transparency requirements apply.
Dec 2027 — high-risk (Annex III) obligations due.
Most teams have no idea which tier they're in. This gives you a grounded first pass in seconds, inside the agent you already use — with a citation for every claim so you can verify it.
⚠️ Informational triage, not legal advice. Confirm classifications with qualified counsel.
Related MCP server: Legalithm
Tools
Four tools exposed to any MCP-compatible agent (Claude Code, Cursor, Claude Desktop, Windsurf, Cline, …):
Tool | What it answers |
| "Is my system prohibited / high-risk / limited / minimal?" — with Annex III category + article citations |
| "Given my tier and role (provider or deployer), what must I do?" — obligation by obligation, with the specific deadline |
| "When does this apply to me?" — the staggered 2025–2028 enforcement timeline |
| "Which compliance artifacts am I missing?" — pass / warn / fail checklist against your actual repo |
The rules live in a single versioned, citation-backed file: rules/ruleset.json. It reflects Regulation (EU) 2024/1689 as amended by the May 2026 Digital Omnibus agreement, and is date-stamped so you always know how current it is.
Install
Option A — npx (zero install, once published to npm)
{
"mcpServers": {
"ai-act": {
"command": "npx",
"args": ["-y", "ai-act-mcp"]
}
}
}Option B — clone and build
git clone https://github.com/a2welt/ai-act-mcp
cd ai-act-mcp
npm install && npm run build{
"mcpServers": {
"ai-act": {
"command": "node",
"args": ["/absolute/path/to/ai-act-mcp/dist/index.js"]
}
}
}Client config locations:
Client | File |
Claude Desktop |
|
Claude Code |
|
Cursor |
|
Windsurf |
|
Restart your agent and ask: "Classify my hiring tool under the EU AI Act."
Fully offline — Ollama
Your AI-system description is exactly the kind of proprietary text you should not send to a cloud service. Run classification on a small local model instead — nothing leaves your machine:
# 1. Pull a model (any small instruct model works)
ollama pull llama3.2
# 2. Test it from your terminal (builds a vivid picture of what the tool does)
node demo/test-local.mjs
# 3. Register with your agent using the local backend{
"mcpServers": {
"ai-act": {
"command": "node",
"args": ["/absolute/path/to/ai-act-mcp/dist/index.js"],
"env": {
"AI_ACT_CLASSIFIER": "local",
"AI_ACT_SLM_MODEL": "llama3.2"
}
}
}
}The model only ever picks among the ruleset's enumerated, cited categories — it never invents law. This is what makes a small model reliable: you've constrained its job to classification-against-known-rules, not open-ended legal reasoning. If the model is unreachable for any reason, the server falls back to the deterministic keyword screen automatically.
Backend options
| Where the description goes | Quality | Notes |
| Nowhere — pure local logic | Good | Instant, zero dependencies, deterministic |
| Stays on your machine (Ollama) | Better | Privacy-first; requires Ollama running |
| Your agent's model via MCP sampling | Best | Requires client sampling support |
Extra env vars for local mode:
Variable | Default | Description |
|
| Any model name Ollama has pulled |
|
| Ollama server URL |
|
| Timeout before falling back to keyword |
Example
Prompt: I'm building a tool that screens job applicants' CVs and ranks them. Classify it under the EU AI Act.
# AI Act risk classification
**Likely tier: High-risk** (Art. 6 + Annex I / Annex III)
Permitted but subject to the heaviest obligations (risk management, data
governance, logging, human oversight, conformity assessment, registration).
## ⚠️ Possible high-risk categories (Annex III)
- **Employment**: recruitment, screening, filtering applications, evaluating
candidates, or decisions on promotion/termination/task allocation — Annex III(4)
> Check the Art. 6(3) exemption: system does NOT pose a significant risk of harm
to health, safety or fundamental rights…
## What to do next
Run `check_obligations` with tier "high" and your role (provider or deployer)
for the full obligation list, and `next_deadlines` for your timeline.
---
Ruleset 2026.06 (current as of 2026-06-09). Informational triage only.
Not legal advice. Verify against the official text and consult qualified counsel.Run the tests
npm test15 tests covering classification, obligations, deadlines, repo scanning, all three classifier backends, and the offline fallback path.
Roadmap
Four core tools — classify, obligations, deadlines, repo scan
Versioned, citation-backed ruleset (
rules/ruleset.json)Pass / warn / fail repo artifact checklist
Per-tier deadlines in obligation output
Pluggable classifier backends — keyword (default), local SLM (fully offline via Ollama), host-model sampling
npm publish— zero-installnpxsetupFRIA (fundamental rights impact assessment) scaffold generator
GPAI Code of Practice checklist
Ruleset auto-update workflow as Omnibus amendments are adopted
Contributing
Corrections to the ruleset — with article citations — are the most valuable contributions. See CONTRIBUTING.md for the full guide.
Quick ways to help:
🔍 Found a wrong classification? Open a ruleset correction issue
🐛 Something broken? Open a bug report
⭐ Find it useful? Star the repo — it helps compliance teams discover it
License
MIT — see LICENSE
Available Tools
4 toolscheck_obligationsA
List the concrete EU AI Act obligations for a given risk tier and role (provider or deployer), with article citations. Set is_gpai true if you also provide a general-purpose AI model.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | Yes | ||
| role | No | provider | |
| is_gpai | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description carries full burden. It describes the tool's behavior as a list operation with citations, which is transparent enough. No destructive or side effects mentioned, but not required for a query tool.
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, front-loaded with the verb 'List', no unnecessary words. Every sentence adds value.
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?
The description covers input parameters well but does not describe the output format beyond mentioning article citations. Given no output schema, it is adequate but could be slightly more complete.
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 has 0% description coverage, so the description adds value by explaining each parameter's purpose: tier and role for obligations, and is_gpai for general-purpose AI. It adds meaning beyond enum names.
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 it lists concrete EU AI Act obligations based on risk tier and role, with article citations. It distinguishes from siblings like classify_risk (classification) and next_deadlines (deadlines) by focusing on obligations.
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: specify risk tier, role, and optionally is_gpai for general-purpose AI. It does not explicitly state when not to use or provide alternatives, but the usage is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_riskA
Classify an AI system under the EU AI Act risk tiers (prohibited / high / limited / minimal) from a plain-English description of what it does and who it affects. Returns the likely tier with cited articles and Annex III categories. Informational triage, not legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | What the AI system does, its purpose, and who it affects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adequately discloses what the tool returns (likely tier with cited articles and Annex III categories) and that it is not legal advice. It does not mention any side effects, but the tool is read-only by nature.
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 concise sentences, front-loading the purpose and input/output, with a caveat in the second sentence. No wasted words.
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 simple input and no output schema, the description sufficiently covers the input format, output content, and caveat. It could be improved by mentioning the classification is based on the description alone, but it is largely complete.
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 coverage is 100% for the single parameter 'description'. The description's mention of 'plain-English description' adds slight reinforcement but no significant new meaning beyond the schema's own description.
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 clearly states the tool classifies AI systems under EU AI Act risk tiers using a plain-English description, which is specific and distinguishes it from sibling tools like check_obligations or next_deadlines.
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 explicitly mentions the input is a plain-English description of the AI system and includes a caveat ('informational triage, not legal advice'). However, it does not explicitly state when not to use it or compare to alternatives, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
next_deadlinesA
Return the EU AI Act compliance timeline, optionally highlighting the date relevant to a given risk tier.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether the tool is read-only, what the return format is, or any rate limits. It only states the basic function, leaving significant gaps for a no-annotation scenario.
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 sentence of 17 words, extremely concise and front-loaded. Every word contributes to the purpose, with no unnecessary 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?
Given the simplicity of the tool (one optional parameter, no output schema), the description adequately conveys the general functionality. However, it does not specify what the returned timeline contains or how dates are highlighted, leaving some user questions unanswered.
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 0%, so the description must compensate. It explains that the parameter 'tier' optionally highlights a date relevant to a given risk tier, adding some meaning. However, it does not elaborate on the enum values or the default behavior when the parameter is omitted.
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 clearly states the tool returns the EU AI Act compliance timeline, with an optional filter by risk tier. The verb 'Return' and resource 'EU AI Act compliance timeline' are specific and distinct from sibling tools like check_obligations.
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 the tool is used to get compliance deadlines, optionally filtered by tier, but it does not explicitly state when to use it versus siblings or when not to use it. No exclusion criteria or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_repoA
Scan a local repository path for the documentation artifacts the AI Act expects (model card, data governance, risk management, logging, human oversight, transparency notices) and report pass/warn/fail per artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the repository root to scan. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the basic action and outcome (pass/warn/fail per artifact) but does not disclose potential side effects, permissions needed, error handling, or whether the tool is read-only. This leaves some behavioral aspects ambiguous.
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 succinct sentence that immediately conveys the tool's purpose and what it covers. No unnecessary words or information.
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?
The description covers the main purpose and the artifacts checked, which is sufficient given the tool's simplicity. However, it does not elaborate on the output format or define pass/warn/fail criteria, which could be beneficial.
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?
With 100% schema coverage, the schema already adequately describes the single parameter (path). The tool description does not add meaningful new information about the parameter beyond what the schema 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 clearly states the tool scans a local repository for specific AI Act documentation artifacts and reports pass/warn/fail. It correctly distinguishes from sibling tools like check_obligations, classify_risk, and next_deadlines by focusing on scanning an existing repo.
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 when checking AI Act documentation compliance but does not explicitly state when not to use or provide direct comparisons to alternatives. However, the context from sibling tools makes the appropriate use case clear.
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
v0.1.0- First observed
check_obligations - First observed
classify_risk - First observed
next_deadlines - First observed
scan_repo
TDQS
Each tool has a clearly distinct purpose: classifying risk, listing obligations, providing deadlines, and scanning documentation. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern (check_obligations, classify_risk, next_deadlines, scan_repo), making them predictable and easy to understand.
Four tools are well-suited for the domain of EU AI Act compliance, covering classification, obligations, deadlines, and documentation scanning without being too few or too many.
The tool surface covers the core lifecycle: understanding risk tier, knowing obligations, checking deadlines, and verifying documentation readiness. No obvious gaps for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
EU AI Act + GDPR compliance scanner. One call, no arguments, 10 seconds. 22 AI frameworks detected.
EU AI Act sovereignty scanning. Provider residency, registration status, audit trail support.
Register every AI agent, log every action, prove it. EU AI Act compliance built in.
Multi-jurisdictional AI compliance readiness scoring with sourced penalty math.
Related MCP Servers
- 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

Legalithmofficial
AlicenseAqualityAmaintenanceEU AI Act compliance in your editor.Classify risk, cite obligations, draft Article 50 disclosures. Offline, no API key.27MIT- FlicenseNot gradedqualityCmaintenanceEnables local security scanning and compliance gap analysis for code and text, detecting secrets, PII, and OWASP vulnerabilities, and assessing readiness across major frameworks like NCA, ISO 27001, NIST CSF, and SOC 2.-
- AlicenseAqualityDmaintenanceScans codebases for AI system usage and generates EU AI Act compliance reports.463MIT
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/a2welt/ai-act-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server