protogrid

Search / com.spurvik/eu-ai-act

Spurvik EU AI Act

R0· no sign-in

Live URL scan, AI Act risk check, 24-EU-language Art. 50 badge, HMAC receipts & approval gates.

v1.0.5 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality85new
Trust100of 100
Uptime, 30 days100%
Latency p50435 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "eu-ai-act": {
      "type": "http",
      "url": "https://console.spurvik.com/api/mcp"
    }
  }
}
claude mcp add --transport http eu-ai-act https://console.spurvik.com/api/mcp
[mcp_servers.eu-ai-act]
url = "https://console.spurvik.com/api/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "eu-ai-act": {
      "type": "remote",
      "url": "https://console.spurvik.com/api/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "eu-ai-act": {
      "type": "http",
      "url": "https://console.spurvik.com/api/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=eu-ai-act&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vY29uc29sZS5zcHVydmlrLmNvbS9hcGkvbWNwIn0%3D"
}
{
  "servers": {
    "eu-ai-act": {
      "type": "http",
      "url": "https://console.spurvik.com/api/mcp"
    }
  }
}
{
  "mcpServers": {
    "eu-ai-act": {
      "httpUrl": "https://console.spurvik.com/api/mcp"
    }
  }
}
extensions:
  "eu-ai-act":
    enabled: true
    name: "eu-ai-act"
    type: streamable_http
    uri: "https://console.spurvik.com/api/mcp"
    timeout: 300

Quality 85 / 100new

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene94 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations7 of 7 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 1,791 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pull, stability.new_linkstool history recorded for 1 of the 7 days needed
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

7 tools, about 1,791 tokens to load them all · tool set d71dfc205da9 · tools last changed 2026-11-13 · checked 2026-11-14 07:03 UTC

Tool changes

  • spurvik_generate_art50_badgeadded

    Generate a copy-paste EU AI Act Article 50 notice: a badge.js <script> tag or a React <AIDisclosureLabel /> 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.

  • spurvik_classify_ai_act_riskadded

    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.

  • spurvik_scan_live_urladded

    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.

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 100 / 100

provenance100
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-100% +updated-1d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://console.spurvik.com/api/mcp streamable-httpnoneyes100%435 ms2025-11-252026-11-14

Tools (7)

spurvik_classify_ai_act_riskread-onlySelf-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.
spurvik_explain_receiptread-onlyExplain 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.
spurvik_find_unwrapped_callsread-onlyHeuristic 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.
spurvik_generate_art50_badgeread-onlyGenerate a copy-paste EU AI Act Article 50 notice: a badge.js <script> tag or a React <AIDisclosureLabel /> 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.
spurvik_marking_hooksread-onlyExplain 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.
spurvik_scan_live_urlread-onlyScan 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.
spurvik_setup_snippetread-onlyReturn 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.

Schemas: list_tools.

Also listed as

1 other active names share this repository: io.github.spurvik/spurvik-mcp-server

Similar MCP servers

Official server.json
{
  "name": "com.spurvik/eu-ai-act",
  "title": "Spurvik EU AI Act",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://console.spurvik.com/api/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.5",
  "repository": {
    "url": "https://github.com/spurvik/spurvik",
    "source": "github"
  },
  "websiteUrl": "https://spurvik.com",
  "description": "Live URL scan, AI Act risk check, 24-EU-language Art. 50 badge, HMAC receipts & approval gates."
}