International regulatory intelligence · MCP

Documentation

Connect an agent in one URL.

MCP lives at https://sourceacts.com/mcp. The Authorization header value is Bearer, a space, then your dashboard API key — not the key alone. The same tools are posted under /tools/*. Official registry name: com.sourceacts/mcp.

How do I connect Claude, Cursor, or ChatGPT to SourceActs?

Add https://sourceacts.com/mcp as a remote MCP server and send your API key as Authorization: Bearer <your key>. /docs has setup for Cursor, VS Code, Windsurf, Claude Code, Claude Desktop (via mcp-remote) and ChatGPT. The MCP speaks Streamable HTTP; the same tools are also plain REST endpoints under /tools/*.

  1. Create a free account and copy your sa_live_ API key from the dashboard. No credit card.
  2. In your client, add https://sourceacts.com/mcp as a remote MCP server.
  3. Set the header Authorization to Bearer, a space, then your key — not the key alone.
  4. Ask in plain language, e.g. "What EU regulations on data protection entered into force after 2024?"

Cursor, VS Code, and other IDEs

Paste the JSON below into Cursor Settings → MCP, VS Code Copilot MCP, or Windsurf. It points at https://sourceacts.com/mcp with a Bearer header.

{
  "mcpServers": {
    "sourceacts": {
      "url": "https://sourceacts.com/mcp",
      "headers": {
        "Authorization": "Bearer sa_live_YOUR_KEY"
      }
    }
  }
}

Claude Code

Claude Code supports Streamable HTTP natively — one claude mcp add --transport http command with the same Bearer header.

claude mcp add --transport http sourceacts https://sourceacts.com/mcp \
  --header "Authorization: Bearer sa_live_YOUR_KEY"

Claude Desktop

Claude Desktop reaches the remote server through the mcp-remote stdio proxy via npx. Keep the word Bearer inside the env value.

{
  "mcpServers": {
    "sourceacts": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://sourceacts.com/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer sa_live_YOUR_KEY"
      }
    }
  }
}

ChatGPT

Add a Connector pointed at https://sourceacts.com/mcp with the same Authorization header. ChatGPT has no mcp.json.

How do I get a SourceActs API key?

Sign up at /signup with an email address and password. The free tier is enough to wire an agent to EUR-Lex and test search and fetch, and needs no credit card. Keys start with sa_live_. Don't publish your key in client-side code.

Why does my connection fail with an authorization error?

The most common cause is sending the key alone. The Authorization header value must be Bearer sa_live_YOUR_KEY — the word Bearer, a space, then the key. In Claude Desktop, keep Bearer inside the AUTH_HEADER env value.

What tools does the SourceActs MCP expose?

search_regulations (keyword, CELEX, or ELI search), fetch_metadata (resolve an identifier such as a CELEX number, ELI URI, UK citation, Federal Register document number, or Brazilian Lei/Decreto to titles, dates, and the official HTML locator when the source provides one), and get_latest_updates (newest gazette / Official Journal items). On Starter and above, create_watch, list_watches, and delete_watch manage signed webhook watches.

What is the SourceActs MCP registry name?

The official MCP registry name is com.sourceacts/mcp. The endpoint is https://sourceacts.com/mcp.

Which source values can I pass?

eurlex (default), uk, us, canada, denmark, wto, un, brazil, or all. Free keys search EUR-Lex and UK only; Starter ($5) turns on the rest. India eGazette is catalogued but not searchable. source=all does not include Denmark or Brazil; they must be named explicitly. Full list with regions: Sources.

Can I call SourceActs without an MCP client?

Yes. Each tool is also posted as a REST endpoint under https://sourceacts.com/tools/<tool_name> with the same Bearer header and a JSON body — the curl examples on this page work from any script or dashboard.

Tools

search_regulations

curl -s https://sourceacts.com/tools/search_regulations \
  -H "Authorization: Bearer sa_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"data protection","language":"en","document_type":"regulation","source":"eurlex"}'

fetch_metadata

curl -s https://sourceacts.com/tools/fetch_metadata \
  -H "Authorization: Bearer sa_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"identifier":"32016R0679"}'

get_latest_updates

curl -s https://sourceacts.com/tools/get_latest_updates \
  -H "Authorization: Bearer sa_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"eurlex","document_type":"regulation","days":14,"query":"data protection","seen_hashes":[]}'

Pass yesterday’s content_hash values as seen_hashes if you are polling yourself. Prefer create_watch so we POST only changed rows to your HTTPS webhook.

create_watch

curl -s https://sourceacts.com/tools/create_watch \
  -H "Authorization: Bearer sa_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"eurlex","query":"data protection","days":2,"webhook_url":"https://example.com/hooks/gazette"}'

Copy signing_secret once. Each delivery includes X-SourceActs-Signature: t=<unix>,v1=<hmac-sha256(secret, timestamp + '.' + body)> and X-SourceActs-Watch-Id. The first poll seeds hashes and does not notify. list_watches / delete_watch manage the rest. Starter ($5)+.

Source parameter

eurlex (default), uk, us, canada, denmark, wto, un, brazil, or all. India eGazette is catalogued but not searchable (broken TLS chain / CDN blocks from this environment). Full search/fetch/latest is live for EUR-Lex, UK, US Federal Register, Canada Gazette, Denmark (Retsinformation), WTO Documents Online, UN symbols / Digital Library latest, and Brazilian federal laws via Senado Dados Abertos. source=all does not include Denmark or Brazil; they must be named explicitly.

Cellar SPARQL endpoint: https://publications.europa.eu/webapi/rdf/sparql. Federal Register: https://www.federalregister.gov/api/v1/documents.json. Danish Retsinformation: https://www.retsinformation.dk/api/documentsearch and ELI at https://www.retsinformation.dk/eli/…. Brazilian norms: https://legis.senado.leg.br/dadosabertos/legislacao/lista. No API keys and no licence fees. Reuse terms differ by source; see /legal/compliance. Every successful search, fetch, and latest-updates response includes a source attribution string, and each result carries the publisher's official locator when the source provides one.

Free keys search EUR-Lex and UK only. Starter ($5) turns on gazette updates and the other sources. Example watches: agent recipes. Publisher reachability: status.