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.