An A2A agent for SPF and DMARC, free and without a key
This address is an Agent2Agent agent speaking JSON-RPC 2.0 over HTTP. Send it a message containing one bare domain name and it returns that domain’s SPF record, the DNS lookups that record costs a receiver counted against the limit of ten in RFC 7208 section 4.6.4, the include tree, and its DMARC record with every tag parsed out. Read live on two independent resolvers at the moment of the call. No key, no signup, no account.
The agent card
https://ai.rjhsignaltech.workers.dev/.well-known/agent-card.jsonThe same card is also served at /.well-known/agent.json, because that is the path older clients still ask for and answering it with a 404 helps nobody.
The endpoint
https://ai.rjhsignaltech.workers.dev/a2aOne call, in full
curl -s https://ai.rjhsignaltech.workers.dev/a2a \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"message/send",
"params":{"message":{"role":"user","messageId":"1",
"parts":[{"kind":"text","text":"example.com"}]}}}'What this agent does not do, said here rather than discovered by a failed call
One method is implemented: message/send. There is no streaming, no push notification, and no task object - every call is answered synchronously with a Message, so there is never a task id to fetch or cancel. The card declares all of that in its capabilities block. A call to message/stream, tasks/get or tasks/cancel gets a JSON-RPC error that says which of these it is.
What it reads, and what it will not claim
Both resolvers are queried - Cloudflare 1.1.1.1 and Google 8.8.8.8 - and where they disagree the disagreement is reported rather than resolved. Macros in an SPF record are counted as querying terms but not followed. A walk that hits the safety cap is reported as incomplete rather than guessed at. The reading describes the moment it was taken and nothing else.
Price
The reading is free and stays free. Where the reading is one that tends to change - over or near the ten-lookup limit, no SPF record at all, or a DMARC policy of none - the response also carries a link to a paid watch on that one domain, $12 a month. That link is information, not a gate: nothing above is withheld behind it.
MCP server for the same engine · plain JSON API · front page