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.

Cursor, VS Code, and other IDEs

This JSON is the common remote config. Paste it into Cursor Settings → MCP, VS Code Copilot MCP, or Windsurf. The Authorization value must be Bearer plus the key, not the key alone.

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

Claude Code

Native Streamable HTTP. Same Bearer header.

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

Claude Desktop

Remote HTTP via a stdio proxy. Keep Bearer in 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 (or custom GPT action) pointed at https://sourceacts.com/mcp. Authenticate with the same Authorization: Bearer sa_live_YOUR_KEY header. ChatGPT has no mcp.json.

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, australia, 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, Australia, Canada Gazette, Denmark (Retsinformation), WTO Documents Online, UN symbols / Digital Library latest, and Brazilian federal laws via Senado Dados Abertos.

Cellar SPARQL endpoint: https://publications.europa.eu/webapi/rdf/sparql. Australian titles: https://api.prod.legislation.gov.au/v1/titles. 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. Commercial reuse is allowed with attribution to the original publishers.

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.