Spurvik
Server Details
EU AI Act Art. 50, 12 & 14 setup snippets, unwrapped-call scan, HMAC receipt & marking hooks.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- spurvik/spurvik
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 7 tools
Each tool has a largely distinct purpose: risk classification, receipt explanation/verification, static code scanning, live URL scanning, badge generation, marking hooks, and setup snippets. The two scanning tools (find_unwrapped_calls vs scan_live_url) and the two disclosure-related tools (generate_art50_badge vs marking_hooks) could be momentarily confused, but the descriptions make the boundaries clear (local filesystem vs public HTTPS page; notice label vs content marking).
All names are snake_case with a uniform spurvik_ prefix, which is highly predictable. Most follow verb_noun (classify_ai_act_risk, explain_receipt, find_unwrapped_calls, generate_art50_badge, scan_live_url), but setup_snippet and marking_hooks are bare nouns that break the pattern.
Seven tools is a well-scoped set for an EU AI Act compliance assistant, each covering a distinct workflow step from classification to remediation to verification. No tool appears redundant or padded.
The surface covers the main compliance lifecycle: classify risk, generate Article 50 notices, scan code and live pages for gaps, get setup snippets, and explain/verify receipts. Minor gaps exist — there is no tool to create or list provenance records or to retrieve obligations beyond the classification output, but agents can work around these via the SDK.
Available Tools
7 toolsspurvik_classify_ai_act_riskARead-onlyIdempotentInspect
Self-assessment of an AI system under the EU AI Act from a few answers: prohibited (Article 5), high-risk (Annex III), Article 50 transparency only, minimal risk, or outside the EU. Returns the duties with their dates and the Spurvik setup steps. Not legal advice and not a decision under Article 6.
Inputs: inEu (required), annexIii, prohibited, transparency.
spurvik_explain_receiptARead-onlyIdempotentInspect
Explain the fields of an HMAC provenance receipt JSON. If signingSecret is passed, or SPURVIK_SIGNING_SECRET is set, check the HMAC locally with verifyProvenanceSignature, which checks that the record's signed fields still match the HMAC-SHA-256 signature. It does not show that a notice was shown, that output is marked, or that your system meets the Act. The signing secret is not logged. Omit the secret to explain the fields without checking.
Inputs: receipt (required), signingSecret.
spurvik_find_unwrapped_callsARead-onlyIdempotentInspect
Heuristic static scan of one directory inside the workspace root for AI client calls that are not passed through withSpurvik, spurvikMiddleware, withSpurvikMastra, withSpurvikModel, withSpurvikModelProvider, withSpurvikLangGraph, or spurvikInterrupt. A StateGraph constructor is reported when the file does not call withSpurvikLangGraph. A bare interrupt() call is reported when the file does not call spurvikInterrupt or resolveLangGraphInterrupts. The scan reads .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, and .cts files. It does not read .md or .mdc files. Results are file:line. The line number is 1-based and counts every newline, including comments and strings. This is a heuristic, so it can miss a call or report one that is already wrapped. The scan does not change files and does not use the network. Paths that leave the workspace, including '..', are rejected. The scanner skips files named .env or .env.* (any case), including through symlinks and hard links. Over HTTP there is no workspace directory. Pass code (a string, max 128 KB) or files (an array of { path, content }). If neither is passed, this tool explains that, and how to run the local stdio MCP server or /spurvik:check for a directory scan.
Inputs: code, files.
spurvik_generate_art50_badgeARead-onlyIdempotentInspect
Generate a copy-paste EU AI Act Article 50 notice: a badge.js tag or a React snippet, in any of the 24 EU languages, with a preview of the notice text. The language is inferred from a domain-like systemName when locale is omitted.
Inputs: systemName (required), theme, format, locale, +3 more.
spurvik_marking_hooksARead-onlyIdempotentInspect
Explain how to plug your own Article 50(2) marking into marking.text or marking.media. Spurvik does not mark content. withSpurvik and spurvikMiddleware log the call and attach an HMAC receipt. A hook runs only when you supply one. The signed text trailer is an application-level binding you can opt into. It is not, by itself, an Article 50(2) machine-readable mark.
Inputs: surface.
spurvik_scan_live_urlARead-onlyIdempotentInspect
Scan one public HTTPS page for AI chat widgets and AI SDKs and check whether a visible EU AI Act Article 50(1) notice is present. Returns the host, HTTP status, findings, the suggested notice language, a one-line badge.js fix and links to the full report. Heuristic: reads the HTML of one page only. Not legal advice.
Inputs: url (required).
spurvik_setup_snippetARead-onlyIdempotentInspect
Return a setup snippet for openai, anthropic, google-genai, vercel-ai-sdk, mastra, openai-agents, or langgraph. Provider clients are wrapped with withSpurvik. The Vercel AI SDK snippet passes spurvikMiddleware to wrapLanguageModel. The Mastra snippet calls withSpurvikMastra. The OpenAI Agents snippet calls withSpurvikModelProvider. The LangGraph snippet calls withSpurvikLangGraph and spurvikInterrupt. The snippet is built from the installed spurvik exports (spurvik or spurvik-sdk, including spurvik/ai, spurvik/langgraph, spurvik/mastra, and spurvik/openai-agents). The disclosure label is a separate React client snippet that imports spurvik/react. riskTier is a sample value. Set your own classification (as provider or deployer); Spurvik does not classify your use case. The SDK logs the call and attaches an HMAC receipt. It does not mark content. Also accepts react.
Inputs: target (required), runtime, framework.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
EU AI Act Art-14 runtime oversight: allow / flag / gate-to-human on an agent action, with receipt.
EU AI Act + GDPR compliance scanner. One call, no arguments, 10 seconds. 22 AI frameworks detected.
Tamper-evident SHA-256 hash-chained decision notary for EU AI Act, NIST AI RMF & SOC2.
Atomadic MCP: 68 deterministic tools for agent identity, escrow, SLA, EU AI Act compliance.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that auto-emits tamper-evident receipts for every tool call, enabling EU AI Act Article 12 compliance with signed, chain-linked receipts.1Apache 2.0

emilia-mcp-serverofficial
AlicenseAqualityAmaintenanceThe accountability layer for AI agents — a named human's signed yes before an agent does anything irreversible (payment, record change, deploy), then an offline-verifiable Trust Receipt. Apache-2.0, formally verified.3550Apache 2.0- FlicenseCqualityBmaintenanceDeterministic <1µs in-band execution governance gateway and W3C DID security guardrail for AI Agent MCP tool calls.116-
- AlicenseAqualityBmaintenanceEnables AI assistants to check whether a quote from the EU AI Act matches the right version on a given date, compare provisions across the 2024 and 2026 texts, and emit evidence records that anyone can recompute in a browser against signed corpus releases.61Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.