Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,536Letters: 14Defects: 1,322counted 1 min ago
teppi

Server definition

Hash
sha256:bfbfb1f70c67be9a583b7ca6292b228b8096730963a503cd46da8736352215d2
What it is
What a remote MCP server returned when asked what it offers: 26 tools

The blob, as servednamed by its sha256

{ "instructions": "Velvoite is an AI compliance copilot for EU-regulated financial institutions. It monitors EU financial regulation across multiple layers: EU institutions (EUR-Lex), European Supervisory Authorities (EBA, ESMA, EIOPA), and national regulators (FIN-FSA Finland, BaFin Germany).\n\nDocuments are AI-classified with: regulation family (e.g. DORA, MiCA, AML), entity type (e.g. credit_institution, payment_institution), urgency (1=critical to 5=informational), document type, and a plain-language summary.\n\nEach company has a REGULATORY POSTURE — saved entity types, actor roles per regulation, and active conditions. This defines which obligations apply to them.\n\nTOOL GROUPS:\n\nGROUP 1 — VELVOITE CORPUS (Premium API key required)\nPre-processed obligations, documents, deadlines, and enforcement data.\n1. get_company_profile — caller's regulatory posture (entity types, actor roles)\n2. get_stats — corpus size and coverage overview. Call first to orient.\n3. get_obligations — obligations filtered by regulation, actor_role, entity_type\n4. get_obligation_summary — quick obligation counts by regulation\n5. get_actor_roles — all available actor roles per regulation\n6. get_canonical_obligations — deduplicated obligations with enforcement data\n7. get_enforcement_intelligence — most-enforced obligations ranked by count\n8. get_enforcement_decisions — structured penalty records: fines, sanctions, withdrawals of authorisation, by authority (FIN-FSA, BaFin, ESMA, EBA, KHO…). Use for 'what has authority X fined' questions.\n9. list_documents — structured document browsing with filters\n10. get_document — full document detail including inline obligations\n11. get_deadlines — compliance calendar\n12. get_recent_changes — what changed in the corpus recently\n13. search_regulations — free-text search. Use ONLY when structured filters fail.\n\nGROUP 2 — EU LEGAL DATA (Premium API key required)\nLive access to EUR-Lex and CJEU case law. Use to verify article text, look up implementing measures, or find court decisions beyond the corpus.\n- get_eu_regulation_article — EUR-Lex URL for a known regulation by code (gdpr, dora, mica, ai_act, mifid2, crr, psd2…). Use BEFORE citing an article.\n- search_eu_regulation_text — EUR-Lex search URL for keyword queries.\n- get_eurlex_document(celex) — any EU document by CELEX number via CELLAR SPARQL. Works for regulations, directives, decisions, and CJEU cases.\n- search_cjeu_cases(query) — live CJEU case law search via CELLAR SPARQL. Covers ALL CJEU decisions, not just those in the Velvoite corpus.\n- get_kho_decision(year, number) — full text of a specific KHO precedent decision. Returns search_query — use web_search with it, then fetch the kho.fi URL from results.\n- search_kho_decisions(year) — browse KHO decisions for a year. Returns search_query — use web_search (Finlex listing is client-side rendered).\n\nGROUP 3 — FINNISH OPEN DATA (free, no API key required)\nPublic Finnish government data. Available to all users.\n- get_finnish_statute(code) — Finlex URL for a Finnish statute by short code (TSL, OYL, SRL, LLL, RPTRL, AIFML…) or year/number (e.g. '2012/747').\n- search_finnish_statutes(query) — Finlex keyword search URL.\n- get_finnish_company(business_id) — PRH Trade Register lookup by Y-tunnus.\n- search_finnish_companies(name) — PRH company search by name.\n\nWORKFLOW — COMPLIANCE ANALYSIS:\n1. get_company_profile → understand the company's regulatory scope\n2. get_obligation_summary(actor_role=...) → quick counts per regulation\n3. get_obligations(regulation=..., actor_role=...) → detailed obligations\n4. get_eu_regulation_article(regulation, article) → verify exact article text\n5. get_deadlines(regulation=...) → upcoming compliance dates\n6. get_enforcement_decisions → what regulators have actually fined\n\nWORKFLOW — KHO / COURT RESEARCH:\nFor structured KHO penalty data: get_enforcement_decisions(authority='KHO')\nFor reading full KHO judgment text:\n 1. search_kho_decisions(year) → web_search the returned search_query\n 2. get_kho_decision(year, number) → web_search the returned search_query\n 3. Fetch the kho.fi URL from search results\nThe two are complementary — corpus for structured data, live tools for judgment text.\n\nWORKFLOW — CJEU RESEARCH:\n1. search_cjeu_cases(query) → structured results with url field; fetch url directly\n2. get_eurlex_document(celex) → for a specific case by CELEX number\n\nWORKFLOW — FINNISH ENTITY RESEARCH:\n1. get_finnish_company(y_tunnus) → confirm company exists and is active\n2. get_finnish_statute('SRL') or get_finnish_statute('LLL') → relevant Finnish financial regulation act\n\nRULES:\n- Prefer structured filters over search_regulations.\n- Use get_eu_regulation_article BEFORE citing a regulation article — fetch the URL to verify exact text. Never paraphrase obligation text.\n- GROUP 2 and GROUP 3 tools return URLs — fetch them to read the actual text.\n- ALWAYS cite the source URL when referencing regulations or court decisions.\n- If a tool returns 'Velvoite Premium required', tell the user they need a Premium API key from app.velvoite.eu.", "tools": [ { "description": "\n Audit the actor role taxonomy: compare model-defined roles vs deployed roles in the database.\n\n Returns per-regulation analysis showing:\n - model_only: roles the enrichment model can produce but aren't in the DB yet (gap)\n - deployed_only: roles in the DB but not in the model (unexpected — data quality issue)\n - role_counts: each deployed role with obligation count\n - known_issues: overlaps, naming issues, investigation items\n\n Use this for QA validation of the actor role taxonomy.\n Requires admin API key.\n\n No parameters needed — returns full corpus audit.\n ", "inputSchema": { "properties": {}, "title": "audit_taxonomyArguments", "type": "object" }, "name": "audit_taxonomy", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "audit_taxonomyOutput", "type": "object" } }, { "description": "\n Get available actor roles per regulation with obligation counts.\n\n Actor roles define WHO an obligation applies to within a specific regulation\n (e.g. 'credit_institution', 'significant_institution' for CRD/CRR, or\n 'ai_provider', 'high_risk_deployer' for AI Act).\n\n Use this to discover which roles exist before filtering obligations with\n get_obligations(actor_role=...).\n\n Returns roles grouped by regulation, sorted by obligation count.\n Each role includes a human-readable label and description.\n\n Args:\n regulation: Filter to a specific regulation code (e.g. 'dora', 'ai_act'). If omitted, returns roles for all regulations.\n ", "inputSchema": { "properties": { "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" } }, "title": "get_actor_rolesArguments", "type": "object" }, "name": "get_actor_roles", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_actor_rolesOutput", "type": "object" } }, { "description": "\n Get deduplicated canonical obligations with enforcement intelligence.\n\n Returns one obligation per unique legal requirement per actor role.\n Each includes compliance difficulty, guidance, and enforcement metrics.\n\n Use this instead of get_obligations when you want a clean, deduplicated\n view of what a regulated entity must comply with, enriched with\n enforcement risk data.\n\n Args:\n regulation: Filter by regulation code (e.g. 'dora', 'mica', 'aml').\n actor_role: Comma-separated actor roles (e.g. 'credit_institution,significant_institution').\n entity_type: Filter by entity type code (e.g. 'credit_institution').\n compliance_difficulty: Filter by difficulty: 'low', 'medium', 'high', 'critical'.\n min_enforcement_count: Only return obligations with at least this many enforcement actions.\n sort: Sort order. Options: 'enforcement_count_desc' (default), 'compliance_difficulty_desc', 'regulation', 'actor_role'.\n page: Page number (default 1).\n per_page: Results per page (default 20, max 100).\n ", "inputSchema": { "properties": { "actor_role": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Actor Role" }, "compliance_difficulty": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Compliance Difficulty" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" }, "min_enforcement_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Min Enforcement Count" }, "page": { "default": 1, "title": "Page", "type": "integer" }, "per_page": { "default": 20, "title": "Per Page", "type": "integer" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" }, "sort": { "default": "enforcement_count_desc", "title": "Sort", "type": "string" } }, "title": "get_canonical_obligationsArguments", "type": "object" }, "name": "get_canonical_obligations", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_canonical_obligationsOutput", "type": "object" } }, { "description": "\n Get the calling company's regulatory posture — saved entity types,\n actor roles per regulation, and active conditions.\n\n The profile defines WHICH regulations and roles apply to this company.\n Use the actor_roles to filter obligations with get_obligations(actor_role=...).\n\n The profile is the baseline — you can extend beyond it using get_actor_roles()\n to discover additional roles if your analysis suggests they may be relevant.\n\n If the profile is empty (profile_complete=false), the company hasn't completed\n onboarding yet. Guide them to set up their profile at app.velvoite.eu/account.\n\n No parameters needed — the profile is determined by the API key.\n\n Returns:\n company_name: Company name\n jurisdictions: Active jurisdictions (always includes 'eu')\n profile:\n entity_types: List of entity type codes (e.g. ['credit_institution'])\n actor_roles: Dict of regulation_code -> list of role codes\n (e.g. {'dora': ['financial_entity'], 'ai_act': ['ai_deployer']})\n conditions: Dict of regulation_code -> list of active conditions\n (e.g. {'dora': ['uses_ict_third_party'], 'ai_act': ['always']})\n profile_complete: Whether the company has selected at least one actor role\n ", "inputSchema": { "properties": {}, "title": "get_company_profileArguments", "type": "object" }, "name": "get_company_profile", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_company_profileOutput", "type": "object" } }, { "description": "\n Get upcoming regulatory deadlines for compliance calendar tracking.\n\n Returns obligations with deadlines in chronological order, annotated\n with days remaining or days overdue. Essential for compliance planning.\n\n Args:\n entity_type: Filter by entity type code (e.g. 'credit_institution').\n regulation: Filter by regulation code (e.g. 'dora').\n days_ahead: How many days ahead to look (default 90, max 730).\n include_overdue: Include past-due obligations (default true).\n ", "inputSchema": { "properties": { "days_ahead": { "default": 90, "title": "Days Ahead", "type": "integer" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" }, "include_overdue": { "default": true, "title": "Include Overdue", "type": "boolean" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" } }, "title": "get_deadlinesArguments", "type": "object" }, "name": "get_deadlines", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_deadlinesOutput", "type": "object" } }, { "description": "\n Get full details of a specific regulatory document by its ID.\n\n Returns the document metadata, AI summary, all classification tags,\n inline obligations (up to 50 with total count), and a link to the original source.\n Use the URL to access the full text on the official regulatory website (EUR-Lex, EBA, ESMA, FIN-FSA).\n Get the document_id from search_regulations or list_documents results.\n\n Args:\n document_id: The Velvoite document ID (integer from search/list results).\n ", "inputSchema": { "properties": { "document_id": { "title": "Document Id", "type": "integer" } }, "required": [ "document_id" ], "title": "get_documentArguments", "type": "object" }, "name": "get_document", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_documentOutput", "type": "object" } }, { "description": "\n Get enforcement decisions with structured penalty data.\n\n Returns enforcement actions (fines, warnings, license withdrawals) imposed\n by regulators. Each action includes penalty amount, sanctioned entity,\n violation categories, and appeal status.\n\n Use this to answer questions like:\n - \"What fines has FIN-FSA given to credit institutions?\"\n - \"What are the largest penalties for AML violations?\"\n - \"Has anyone been fined for ICT risk management failures?\"\n - \"What's the total penalty exposure for my entity type?\"\n\n Combine with get_company_profile to find enforcement actions relevant\n to the caller's entity type and regulations.\n\n Args:\n regulation: Filter by regulation code (e.g. 'aml', 'dora', 'mifid2', 'gdpr', 'crd_crr').\n entity_type: Filter by sanctioned entity type (e.g. 'credit_institution', 'investment_firm', 'crypto_service').\n authority: Filter by sanction authority (e.g. 'FIN-FSA', 'ECB', 'Data Protection Ombudsman').\n penalty_min: Minimum penalty amount in EUR (e.g. 1000000 for fines >= EUR 1M).\n violation_category: Filter by violation type (e.g. 'aml_cdd', 'ict_risk', 'sca', 'governance', 'conduct').\n page: Page number (default 1).\n per_page: Results per page (default 20, max 100).\n ", "inputSchema": { "properties": { "authority": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Authority" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" }, "page": { "default": 1, "title": "Page", "type": "integer" }, "penalty_min": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Penalty Min" }, "per_page": { "default": 20, "title": "Per Page", "type": "integer" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" }, "violation_category": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Violation Category" } }, "title": "get_enforcement_decisionsArguments", "type": "object" }, "name": "get_enforcement_decisions", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_enforcement_decisionsOutput", "type": "object" } }, { "description": "\n Get top enforced canonical obligations. Returns obligations ranked by\n enforcement activity for risk prioritization.\n\n This is a focused view of canonical obligations filtered to only those\n with at least one enforcement action. Use this to identify which\n obligations regulators are actively enforcing.\n\n Args:\n regulation: Filter by regulation code (e.g. 'dora', 'mica', 'aml').\n actor_role: Comma-separated actor roles (e.g. 'credit_institution,significant_institution').\n entity_type: Filter by entity type code (e.g. 'credit_institution').\n compliance_difficulty: Filter by difficulty: 'low', 'medium', 'high', 'critical'.\n min_enforcement_count: Minimum enforcement actions (default 1 — only enforced obligations).\n sort: Sort order (default 'enforcement_count_desc').\n page: Page number (default 1).\n per_page: Results per page (default 20, max 100).\n ", "inputSchema": { "properties": { "actor_role": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Actor Role" }, "compliance_difficulty": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Compliance Difficulty" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" }, "min_enforcement_count": { "default": 1, "title": "Min Enforcement Count", "type": "integer" }, "page": { "default": 1, "title": "Page", "type": "integer" }, "per_page": { "default": 20, "title": "Per Page", "type": "integer" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" }, "sort": { "default": "enforcement_count_desc", "title": "Sort", "type": "string" } }, "title": "get_enforcement_intelligenceArguments", "type": "object" }, "name": "get_enforcement_intelligence", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_enforcement_intelligenceOutput", "type": "object" } }, { "description": "\n Return verbatim obligation text from the Velvoite corpus for an EU regulation\n article, plus the canonical EUR-Lex URL for reference.\n\n Queries the Velvoite corpus directly — no web fetching required.\n EUR-Lex blocks direct web fetch; the corpus has the authoritative text.\n Requires Velvoite Premium API key.\n\n Supported regulation codes: gdpr, dora, mica, ai_act, mifid2, mifir,\n crr, crr3, crd6, aml6, amld4, psd2, sfdr, csrd, emir, idd, solvency2,\n eprivacy, bmr, priips.\n\n Args:\n regulation: Short regulation code (case-insensitive, e.g. 'gdpr', 'dora').\n article: Optional article number (e.g. '28', '30', '5'). Omit to browse\n all obligations for the regulation.\n ", "inputSchema": { "properties": { "article": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Article" }, "regulation": { "title": "Regulation", "type": "string" } }, "required": [ "regulation" ], "title": "get_eu_regulation_articleArguments", "type": "object" }, "name": "get_eu_regulation_article", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_eu_regulation_articleOutput", "type": "object" } }, { "description": "\n Look up any EUR-Lex document by CELEX number via CELLAR SPARQL (live).\n Returns title, date, and URLs for the full text.\n For CJEU case law (CELEX starting with 61 or 62): queries CELLAR SPARQL and\n returns title, date, and URL. For legislative acts (regulations, directives —\n CELEX starting with 3): returns the EUR-Lex URL directly (CELLAR does not\n reliably index final legislative acts via SPARQL).\n Use get_eu_regulation_article for known regulation codes (gdpr, dora, mica…).\n Requires Velvoite Premium API key.\n\n CELEX format:\n 32022R2554 → Regulation (year 2022, number 2554) = DORA\n 32014L0065 → Directive (year 2014, number 65) = MiFID II\n 62021CJ0089 → CJEU judgment, case C-89/21\n 32023R1114 → Regulation (year 2023, number 1114) = MiCA\n\n Args:\n celex: CELEX number, e.g. '32022R2554'. Case-insensitive.\n ", "inputSchema": { "properties": { "celex": { "title": "Celex", "type": "string" } }, "required": [ "celex" ], "title": "get_eurlex_documentArguments", "type": "object" }, "name": "get_eurlex_document", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_eurlex_documentOutput", "type": "object" } }, { "description": "Get user feedback for QA review. Requires admin API key.\n\n Filters: status (new/reviewed/resolved/dismissed), feedback_type (data_quality/bug/feature_request/other),\n context_type (document/obligation/general).\n ", "inputSchema": { "properties": { "context_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Context Type" }, "feedback_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Feedback Type" }, "limit": { "default": 50, "title": "Limit", "type": "integer" }, "status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Status" } }, "title": "get_feedbackArguments", "type": "object" }, "name": "get_feedback", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_feedbackOutput", "type": "object" } }, { "description": "\n Look up a Finnish company in the PRH Trade Register by business ID (Y-tunnus).\n Returns company name, status, registered address, company form, registration date.\n\n Args:\n business_id: Finnish business ID / Y-tunnus in format '1234567-8'.\n ", "inputSchema": { "properties": { "business_id": { "title": "Business Id", "type": "string" } }, "required": [ "business_id" ], "title": "get_finnish_companyArguments", "type": "object" }, "name": "get_finnish_company", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_finnish_companyOutput", "type": "object" } }, { "description": "\n Return the canonical Finlex URL for a Finnish statute so Claude can fetch its text.\n Finlex (finlex.fi) is the official Finnish statute database — no public JSON API exists,\n but the URL can be fetched with WebFetch to retrieve the statute text.\n\n Accepts a short law code (e.g. 'TSL', 'OYL', 'SRL', 'LLL') OR a direct year/number\n reference (e.g. '2012/747', '2014/610') for statutes not in the known-code list.\n Use search_finnish_statutes to find the year/number for an unknown statute.\n\n Known codes include: TSL, OYL, TVL, SRL, AML, MLL, LLL, RPTRL, AIFML, SIJRL,\n VYL, FIVAL, VVTL, HETIL, LSL, KSL, YTL, VLL, TAL, KEKSINTOL, MRIL.\n\n Args:\n law_code: Short law code (e.g. 'TSL', 'SRL') or year/number (e.g. '2012/747').\n Case-insensitive.\n section: Optional section in 'chapter:paragraph' format (e.g. '3:5', '6:3').\n Omit for the full act.\n ", "inputSchema": { "properties": { "law_code": { "title": "Law Code", "type": "string" }, "section": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Section" } }, "required": [ "law_code" ], "title": "get_finnish_statuteArguments", "type": "object" }, "name": "get_finnish_statute", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_finnish_statuteOutput", "type": "object" } }, { "description": "\n Return access details for a Finnish Supreme Administrative Court (KHO) precedent decision.\n Requires Velvoite Premium API key.\n\n KHO decisions are cited as KHO:YYYY:N (e.g. KHO:2024:52).\n Use search_kho_decisions(year) to browse all decisions for a given year.\n\n ACCESS PATTERN — follow this order:\n 1. Use the returned search_query with web_search to find the kho.fi page\n 2. From search results, fetch the kho.fi URL directly\n 3. Do NOT fetch finlex_url directly — Finlex requires prior search provenance\n\n Args:\n year: Decision year (e.g. '2024').\n number: Decision number within the year (e.g. '52').\n ", "inputSchema": { "properties": { "number": { "title": "Number", "type": "string" }, "year": { "title": "Year", "type": "string" } }, "required": [ "year", "number" ], "title": "get_kho_decisionArguments", "type": "object" }, "name": "get_kho_decision", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_kho_decisionOutput", "type": "object" } }, { "description": "\n Get obligation counts grouped by regulation_code.\n\n Returns total count and per-regulation breakdown with status counts\n (active, upcoming, overdue, expired) plus verified and with_deadline counts.\n No full obligation text — just counts for a quick overview.\n\n Args:\n entity_type: Filter to obligations applying to this entity type (e.g. 'credit_institution', 'payment_institution').\n actor_role: Comma-separated actor roles to filter by (e.g. 'financial_entity,credit_institution').\n Use get_company_profile to see the company's roles, or get_actor_roles to browse all available roles.\n ", "inputSchema": { "properties": { "actor_role": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Actor Role" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" } }, "title": "get_obligation_summaryArguments", "type": "object" }, "name": "get_obligation_summary", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_obligation_summaryOutput", "type": "object" } }, { "description": "\n Get regulatory obligations - specific requirements extracted from regulations.\n\n Each obligation includes the requirement text, applicable article reference,\n deadline, which entity types it applies to, actor roles, and current status.\n Results are paginated (max 50 per page).\n\n Supports keyword search via the query parameter (trigram + ILIKE matching on obligation text).\n Combine with regulation, entity_type, and actor_role filters for precise results.\n\n Set canonical=True to get deduplicated canonical obligations with enforcement\n intelligence instead. Canonical obligations return one entry per unique legal\n requirement per actor role, with compliance difficulty and enforcement metrics.\n\n Use get_actor_roles first to discover available actor roles per regulation.\n\n Args:\n entity_type: Filter by entity type code (e.g. 'credit_institution', 'payment_institution').\n regulation: Filter by regulation code (e.g. 'dora', 'mica', 'aml').\n status: Filter by status: 'upcoming', 'active', 'overdue', or 'expired'.\n query: Keyword search on obligation text (e.g. 'ICT risk', 'strong customer authentication').\n actor_role: Comma-separated actor roles to filter by (e.g. 'credit_institution,significant_institution'). Use get_actor_roles to see available roles.\n canonical: If True, return deduplicated canonical obligations with enforcement intelligence instead of raw obligations.\n page: Page number (default 1).\n per_page: Results per page (default 20, max 50).\n ", "inputSchema": { "properties": { "actor_role": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Actor Role" }, "canonical": { "default": false, "title": "Canonical", "type": "boolean" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" }, "page": { "default": 1, "title": "Page", "type": "integer" }, "per_page": { "default": 20, "title": "Per Page", "type": "integer" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Query" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" }, "status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Status" } }, "title": "get_obligationsArguments", "type": "object" }, "name": "get_obligations", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_obligationsOutput", "type": "object" } }, { "description": "\n Get recently published or updated regulatory documents.\n\n Shortcut for 'what is new this week' - returns documents from the last N days,\n sorted by publication date (newest first). Useful for weekly regulatory briefings.\n\n Args:\n days: Look back N days (default 7).\n entity_type: Filter by entity type code.\n regulation: Filter by regulation family code.\n urgency_max: Only include items at or above this urgency (1=critical, 2=high, etc.).\n ", "inputSchema": { "properties": { "days": { "default": 7, "title": "Days", "type": "integer" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" }, "urgency_max": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Urgency Max" } }, "title": "get_recent_changesArguments", "type": "object" }, "name": "get_recent_changes", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_recent_changesOutput", "type": "object" } }, { "description": "\n Get an overview of the Velvoite regulatory corpus.\n\n Returns document counts by source, regulation family, entity type,\n urgency distribution, obligation summary, and date range.\n\n Call this FIRST to orient yourself before running queries.\n No parameters needed.\n ", "inputSchema": { "properties": {}, "title": "get_statsArguments", "type": "object" }, "name": "get_stats", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_statsOutput", "type": "object" } }, { "description": "\n Get verification progress for obligations across all regulations.\n\n Returns total, verified, unverified counts overall and per regulation,\n with percentage verified. Use this to track human review progress.\n No parameters needed.\n ", "inputSchema": { "properties": {}, "title": "get_verification_statsArguments", "type": "object" }, "name": "get_verification_stats", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "get_verification_statsOutput", "type": "object" } }, { "description": "\n Browse regulatory documents with filters and pagination.\n\n Returns a paginated list of documents with summaries, tags, doc_purpose\n (regulation_text, enforcement, reference, irrelevant), and doc_jurisdictions\n (e.g. ['eu'], ['fi'], ['de']).\n Use this for filtered browsing (e.g. all DORA documents from the last 30 days).\n Use search_regulations instead when you have specific keywords to search for.\n\n Args:\n source: Filter by data source code: eur_lex, eba, esma, eiopa, finfsa, bafin.\n regulation: Filter by regulation family code: dora, mica, aml, mifid2, crd_crr, psd, csrd, sfdr, ai_act, emir, solvency, idd, gdpr.\n entity_type: Filter by entity type: credit_institution, payment_institution, e_money, investment_firm, fund_manager, aifm, insurance, pension, crypto_service, crowdfunding, credit_servicer.\n urgency_max: Max urgency level (1=critical, 2=high, 3=medium, 4=low, 5=informational). E.g. 2 returns only critical and high urgency items.\n days: Only return documents from the last N days (1-365).\n page: Page number (default 1).\n per_page: Results per page (default 20, max 100).\n ", "inputSchema": { "properties": { "days": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Days" }, "entity_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entity Type" }, "page": { "default": 1, "title": "Page", "type": "integer" }, "per_page": { "default": 20, "title": "Per Page", "type": "integer" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Source" }, "urgency_max": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Urgency Max" } }, "title": "list_documentsArguments", "type": "object" }, "name": "list_documents", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "list_documentsOutput", "type": "object" } }, { "description": "\n Search CJEU case law via EUR-Lex CELLAR SPARQL (live — not limited to Velvoite corpus).\n Returns cases matching keywords in the case title.\n Use to find court decisions on a specific regulation, topic, or legal concept.\n Fetch the returned url to read the full judgment text.\n Requires Velvoite Premium API key.\n\n Args:\n query: Keywords to search in case titles (e.g. 'money laundering', 'crypto-assets',\n 'payment institution authorisation'). Phrase search — keep it specific.\n article_ref: Optional extra keyword to append to the title search\n (e.g. 'Directive 2015/849', 'GDPR Article 17'). CJEU titles rarely\n contain article numbers — use the regulation name instead.\n ", "inputSchema": { "properties": { "article_ref": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Article Ref" }, "query": { "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "search_cjeu_casesArguments", "type": "object" }, "name": "search_cjeu_cases", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "search_cjeu_casesOutput", "type": "object" } }, { "description": "\n Return EUR-Lex search URL for finding regulation provisions by keyword.\n Use when you don't know the exact article number but need to find\n relevant provisions. Requires Velvoite Premium API key.\n\n Args:\n query: Search terms (e.g. 'data processing agreement processor obligations').\n regulation: Optional regulation code to scope the search (e.g. 'gdpr').\n ", "inputSchema": { "properties": { "query": { "title": "Query", "type": "string" }, "regulation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Regulation" } }, "required": [ "query" ], "title": "search_eu_regulation_textArguments", "type": "object" }, "name": "search_eu_regulation_text", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "search_eu_regulation_textOutput", "type": "object" } }, { "description": "\n Search Finnish companies by name in the PRH Trade Register.\n Use to find a business ID when you only know the company name,\n or to check whether a company name is already taken.\n\n Args:\n name: Company name or partial name to search.\n city: Optional municipality to narrow results (e.g. 'Helsinki', 'Tampere').\n ", "inputSchema": { "properties": { "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "City" }, "name": { "title": "Name", "type": "string" } }, "required": [ "name" ], "title": "search_finnish_companiesArguments", "type": "object" }, "name": "search_finnish_companies", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "search_finnish_companiesOutput", "type": "object" } }, { "description": "\n Return Finlex search URL for Finnish statute keyword search.\n Finlex has no public JSON search API — returns the search URL for Claude to fetch.\n\n Args:\n query: Search terms in Finnish or English (e.g. 'kilpailukielto', 'non-compete').\n ", "inputSchema": { "properties": { "query": { "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "search_finnish_statutesArguments", "type": "object" }, "name": "search_finnish_statutes", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "search_finnish_statutesOutput", "type": "object" } }, { "description": "\n Return a search query to discover KHO (Finnish Supreme Administrative Court)\n precedent decisions for a given year.\n Requires Velvoite Premium API key.\n\n NOTE: The Finlex listing page is client-side rendered and cannot be fetched directly.\n Use the returned search_query with web_search instead — this returns an indexed list\n of decisions from kho.fi that can then be fetched individually.\n Then use get_kho_decision(year, number) to retrieve a specific decision.\n\n Args:\n year: Year to browse (e.g. '2024', '2023').\n ", "inputSchema": { "properties": { "year": { "title": "Year", "type": "string" } }, "required": [ "year" ], "title": "search_kho_decisionsArguments", "type": "object" }, "name": "search_kho_decisions", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "search_kho_decisionsOutput", "type": "object" } }, { "description": "\n Search the regulatory corpus using keyword / trigram matching.\n\n Uses PostgreSQL trigram similarity on document titles and summaries.\n Returns documents ranked by relevance with summaries and classification tags.\n\n Prefer list_documents with filters (regulation, entity_type, source) first.\n Only use this for free-text keyword search when structured filters aren't sufficient.\n\n Args:\n query: Search terms (e.g. 'strong customer authentication', 'ICT risk', 'AML reporting').\n per_page: Number of results (default 20, max 100).\n ", "inputSchema": { "properties": { "per_page": { "default": 20, "title": "Per Page", "type": "integer" }, "query": { "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "search_regulationsArguments", "type": "object" }, "name": "search_regulations", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "search_regulationsOutput", "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:bfbfb1f70c67be9a583b7ca6292b228b8096730963a503cd46da8736352215d2 | sha256sum