streamable-httpMITupdated 2mo ago
Independently verify the daily security-intelligence reports published by elsas.it โ offline, with no trust in our servers and no access to our keys.
What can you do with security intel?
elsas-verify
Independently verify the daily security-intelligence reports published by elsas.it โ offline, with no trust in our servers and no access to our keys.
elsas.it is signed security intelligence for AI agents, served over MCP and paid per call with x402 (USDC on Base โ accountless, your wallet is your identity). Two shapes:
- Atomic primitives (high-frequency, sub-cent):
is_exploited(is this CVE in CISA-KEV? $0.001),check_cve(CVSS + KEV + EPSS, $0.01),check_package(OSV verdict for one package@version, $0.002),search_cves($0.01),scan_dependencies(whole-lockfile OSV scan, pay-per-vuln, free when clean). - Premium digest:
get_todayโ the daily curated, cross-validated report ($0.10).
Every response is Ed25519-signed (SSHSIG, namespace elsas-report) โ so you can
prove it's authentic and untampered without trusting our servers and without our
keys. That's the differentiator: unsigned CVE APIs ask you to trust them; we let you
verify. This repo is everything you need to do that offline.
Don't trust us โ verify.
Verify in 30 seconds
Requirements: openssh-client (ssh-keygen) and python3 โ present on any
Linux/macOS. No install, no network needed for the verification itself.
git clone https://github.com/romans-repos/elsas-verify.git
cd elsas-verify
./verify-report.sh examples/sample-report.json allowed_signers
Expected output:
VALID: authentic & untampered
Signer: elsas@elsas.it
Hash: sha256:โฆ
Good "elsas-report" signature for elsas@elsas.it with ED25519 key SHA256:gLVNll72kb8Iyni2vNMR6oHGqVh0Ynz+lBMhbS+cSa4
Verify a live report
# Fetch the current public sample + its detached signature
curl -s https://elsas.it/sample > report.json
curl -s https://elsas.it/.well-known/report.json.sig > report.json.sig
# Verify against the pinned key in this repo
./verify-report.sh report.json allowed_signers
You can also verify by hand with stock OpenSSH:
ssh-keygen -Y verify \
-f allowed_signers \
-I elsas@elsas.it \
-n elsas-report \
-s report.json.sig < report.json
Verify an atomic-tool verdict
The atomic tools return a JSON verdict with an embedded _signature block
(signed_payload = the exact signed bytes; signature = an armored SSHSIG). Verify
it offline โ by shell, or with the drop-in library for your language:
# shell (ssh-keygen + python3 stdlib)
./verify-verdict.sh examples/sample-verdict.json allowed_signers
// Node โ zero dependencies (built-in crypto). npm i @elsas/verify
import { verifyVerdict } from '@elsas/verify';
const { ok, reason } = verifyVerdict(verdict); // pinned elsas key, offline
if (!ok) throw new Error(`unverified elsas verdict: ${reason}`);
# Python โ pip install elsas-verify (only dep: cryptography)
from elsas_verify import verify_verdict
ok, info = verify_verdict(verdict)
assert ok, info["reason"]
Each verifier does two independent checks: (1) the verdict body matches the signed bytes (tamper-evidence), and (2) the SSHSIG verifies under the pinned elsas key (a signature by any other key is rejected). No network call is needed to verify.
Trust model
- Signatures use SSHSIG (Ed25519) via
ssh-keygen -Y sign. Verification is offline and zero-trust: you hold the payload, you verify locally. - The root of trust is
allowed_signersโ our public key, identity-pinned toelsas@elsas.it. A substituted signers file with a different key is rejected by the-Iflag. - Confirm the pinned key independently against the live copy:
Key fingerprint:curl -s https://elsas.it/.well-known/allowed_signersSHA256:gLVNll72kb8Iyni2vNMR6oHGqVh0Ynz+lBMhbS+cSa4 - Each report also carries a
_integrity.content_hash(sha256 over the canonical JSON) for tamper evidence โ seeSIGNATURE-VERIFY.md.
What's in here
| File | Purpose |
|---|---|
verify-report.sh |
Dependency-free report verifier (ssh-keygen + python3 stdlib) |
verify-verdict.sh |
Dependency-free atomic-verdict verifier |
packages/node/ |
@elsas/verify โ zero-dep Node library + CLI |
packages/python/ |
elsas-verify โ Python library + CLI (pip install) |
allowed_signers |
Our public signing key โ the root of trust |
schemas/report-v4.json |
JSON schema of a report payload |
examples/sample-report.json (+ .sig) |
A real, signed report to verify against |
examples/sample-verdict.json |
A real, signed atomic-tool verdict to verify against |
SIGNATURE-VERIFY.md |
The full verification recipe and trust details |
What's not here
This repo is the verification surface only. The curation pipeline, scoring prompts, relevance taxonomy, infrastructure and any operational configuration are intentionally not published โ they are neither needed to verify a report nor useful to a third party. Verifiability does not require disclosing how the sausage is made; it requires that the result is checkable. That's what this is.
License
Tooling in this repository is released under the MIT License.
Report payloads themselves carry their own license terms inside the report
(_integrity._license_coverage).
Service: https://elsas.it ยท Docs: https://elsas.it/docs ยท Sample: https://elsas.it/sample
Install
Add security intel to your client. Pick the one you use.
claude mcp add --transport http security-intel https://elsas.it/mcpcodex mcp add security-intel --url https://elsas.it/mcp{
"mcpServers": {
"security-intel": {
"url": "https://elsas.it/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"security-intel": {
"type": "http",
"url": "https://elsas.it/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"security-intel": {
"url": "https://elsas.it/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"security-intel": {
"serverUrl": "https://elsas.it/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance16/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 64 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 1.0.0Latest | Jun 20, 2026 |