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/*.
- Create a free account and copy your
sa_live_ API key from the dashboard. No credit card.
- In your client, add
https://sourceacts.com/mcp as a remote MCP server.
- Set the header
Authorization to Bearer, a space, then your key — not the key alone.
- 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.