deadline_check
Check all EU AI Act enforcement deadlines and see days remaining for each. Ensure compliance readiness with up-to-date deadline tracking.
Instructions
All EU AI Act enforcement deadlines with days remaining. No parameters needed.
Behavior: This tool is read-only and stateless — it produces analysis output without modifying any external systems, databases, or files. Safe to call repeatedly with identical inputs (idempotent). Free tier: 10/day rate limit. Pro tier: unlimited. No authentication required for basic usage.
When to use: Use this tool when you need to assess, audit, or verify compliance requirements. Ideal for gap analysis, readiness checks, and generating compliance documentation.
When NOT to use: Do not use as a substitute for qualified legal counsel. This tool provides technical compliance guidance, not legal advice. Behavioral Transparency: - Side Effects: This tool is read-only and produces no side effects. It does not modify any external state, databases, or files. All output is computed in-memory and returned directly to the caller. - Authentication: No authentication required for basic usage. Pro/Enterprise tiers require a valid MEOK API key passed via the MEOK_API_KEY environment variable. - Rate Limits: Free tier: 10 calls/day. Pro tier: unlimited. Rate limit headers are included in responses (X-RateLimit-Remaining, X-RateLimit-Reset). - Error Handling: Returns structured error objects with 'error' key on failure. Never raises unhandled exceptions. Invalid inputs return descriptive validation errors. - Idempotency: Fully idempotent — calling with the same inputs always produces the same output. Safe to retry on timeout or transient failure. - Data Privacy: No input data is stored, logged, or transmitted to external services. All processing happens locally within the MCP server process.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- server.py:569-650 (handler)The deadline_check() function is the core handler — a FastMCP tool decorated with @mcp.tool(). It takes zero parameters, iterates over the EU_AI_ACT_TIMELINE data, computes days remaining for each deadline, categorizes urgency (past/critical/high/normal), and returns a structured response with next_deadline, all deadlines, and a key_message.
@mcp.tool() def deadline_check() -> dict: """All EU AI Act enforcement deadlines with days remaining. No parameters needed. Behavior: This tool is read-only and stateless — it produces analysis output without modifying any external systems, databases, or files. Safe to call repeatedly with identical inputs (idempotent). Free tier: 10/day rate limit. Pro tier: unlimited. No authentication required for basic usage. When to use: Use this tool when you need to assess, audit, or verify compliance requirements. Ideal for gap analysis, readiness checks, and generating compliance documentation. When NOT to use: Do not use as a substitute for qualified legal counsel. This tool provides technical compliance guidance, not legal advice. Behavioral Transparency: - Side Effects: This tool is read-only and produces no side effects. It does not modify any external state, databases, or files. All output is computed in-memory and returned directly to the caller. - Authentication: No authentication required for basic usage. Pro/Enterprise tiers require a valid MEOK API key passed via the MEOK_API_KEY environment variable. - Rate Limits: Free tier: 10 calls/day. Pro tier: unlimited. Rate limit headers are included in responses (X-RateLimit-Remaining, X-RateLimit-Reset). - Error Handling: Returns structured error objects with 'error' key on failure. Never raises unhandled exceptions. Invalid inputs return descriptive validation errors. - Idempotency: Fully idempotent — calling with the same inputs always produces the same output. Safe to retry on timeout or transient failure. - Data Privacy: No input data is stored, logged, or transmitted to external services. All processing happens locally within the MCP server process. """ today = datetime.now().date() deadlines = [] next_upcoming = None for entry in EU_AI_ACT_TIMELINE: deadline_date = datetime.strptime(entry["date"], "%Y-%m-%d").date() days_remaining = (deadline_date - today).days if days_remaining < 0: status = "IN EFFECT" urgency = "past" elif days_remaining == 0: status = "EFFECTIVE TODAY" urgency = "critical" elif days_remaining <= 90: status = "IMMINENT" urgency = "critical" elif days_remaining <= 365: status = "APPROACHING" urgency = "high" else: status = "UPCOMING" urgency = "normal" deadline_entry = { "date": entry["date"], "event": entry["event"], "article": entry["article"], "days_remaining": days_remaining, "status": status, "urgency": urgency, } deadlines.append(deadline_entry) if days_remaining > 0 and next_upcoming is None: next_upcoming = deadline_entry return { "assessment_date": today.isoformat(), "next_deadline": next_upcoming, "deadlines": deadlines, "regulation": "Regulation (EU) 2024/1689", "key_message": ( f"Next deadline: {next_upcoming['date']} — {next_upcoming['event']} " f"({next_upcoming['days_remaining']} days remaining)" ) if next_upcoming else "All EU AI Act deadlines have passed — full enforcement is in effect.", "meok_labs": "https://meok.ai", } - server.py:393-401 (schema)The EU_AI_ACT_TIMELINE data is the knowledge base / schema defining 6 key milestone dates (from entry into force Aug 2024 through full compliance Aug 2030) with their event descriptions and article references. This data drives the deadline_check handler.
# Key Timeline Dates EU_AI_ACT_TIMELINE = [ {"date": "2024-08-01", "event": "EU AI Act entered into force (Regulation (EU) 2024/1689 published in Official Journal)", "article": "Article 113"}, {"date": "2025-02-02", "event": "Prohibited AI practices (Article 5) become enforceable; AI literacy obligations (Article 4) apply", "article": "Articles 4, 5"}, {"date": "2025-08-02", "event": "Rules for General-Purpose AI (GPAI) models apply (Chapter V); notified bodies designated; governance framework operational", "article": "Articles 51-56, Chapter VII"}, {"date": "2026-08-02", "event": "Full enforcement of all provisions for high-risk AI systems (including Annex III); obligations on providers, deployers, importers, distributors", "article": "Articles 6-49, Annex III"}, {"date": "2027-08-02", "event": "Obligations for high-risk AI systems that are safety components of products under Union harmonisation legislation (Annex I)", "article": "Annex I, Article 6(1)"}, {"date": "2030-08-02", "event": "Existing high-risk AI systems used by public authorities must comply (transitional provision)", "article": "Article 111(2)"}, ] - server.py:429-432 (registration)The FastMCP server instance 'mcp' is created with instructions mentioning deadline_check. The @mcp.tool() decorator on line 569 registers deadline_check as an MCP tool. The instructions (line 431) explicitly tell users to start with deadline_check (zero parameters).
mcp = FastMCP( "EU AI Act Compliance", instructions="By MEOK AI Labs — EU AI Act compliance automation. Start with quick_scan (one sentence, instant result) or deadline_check (zero parameters). Full tools: risk classification, 42-point audit, Annex IV documentation, penalty calculator, multi-jurisdiction mapping. No API key needed for free tier (10 calls/day)." ) - server.py:62-76 (helper)The _check_rate_limit helper function is used implicitly — though deadline_check does not call it directly (unlike other tools), it's a supporting utility available in the server for rate limiting across tools.
def _check_rate_limit(caller: str = "anonymous", tier: str = "free") -> Optional[str]: """Returns error string if rate-limited, else None. No API key required for free tier.""" if tier == "pro": return None now = datetime.now() cutoff = now - timedelta(days=1) _usage[caller] = [t for t in _usage[caller] if t > cutoff] if len(_usage[caller]) >= FREE_DAILY_LIMIT: return ( f"Free tier limit reached ({FREE_DAILY_LIMIT}/day). " "Upgrade to MEOK AI Labs Pro for unlimited access at $29/mo: " "https://meok.ai/mcp/eu-ai-act/pro" ) _usage[caller].append(now) return None