Primeiros passos
Este guia leva você do zero até um pipeline CDS rodando em menos de dez minutos. Você vai instalar o SDK, gerar um par de chaves de assinatura, construir seu primeiro evento assinado e verificá-lo.
Pré-requisitos
Seção intitulada “Pré-requisitos”- Python 3.12+ ou Node.js 20+
- Cinco minutos
-
Instale o SDK
Terminal window pip install signeddata-cdsTerminal window npm install @signeddata/cds-sdk -
Gere um par de chaves
Todo produtor CDS precisa de um par de chaves RSA-4096. Gere um:
from cds import generate_keypairimport osos.makedirs("keys", exist_ok=True)generate_keypair("keys/private.pem", "keys/public.pem")import { generateKeypair } from "@signeddata/cds-sdk";import { mkdirSync } from "node:fs";mkdirSync("keys", { recursive: true });generateKeypair("keys/private.pem", "keys/public.pem"); -
Construa e assine seu primeiro evento
from cds import CDSSigner, CDSEvent, SourceMeta, ContextMetafrom cds import CDSVocab, CDSSourcesfrom datetime import datetime, timezonesigner = CDSSigner("keys/private.pem", issuer="https://myorg.example.com")event = CDSEvent(content_type = CDSVocab.WEATHER_CURRENT,source = SourceMeta(id=CDSSources.OPEN_METEO),occurred_at = datetime.now(timezone.utc),lang = "en",payload = {"location": {"city": "London", "lat": 51.51, "lon": -0.13},"temperature": {"current": 14.0, "feels_like": 12.0},"condition": "overcast",},event_context = ContextMeta(summary = "London: overcast, 14C (feels 12C).",model = "rule-based-v1",),)signer.sign(event)print(event.integrity.hash) # sha256:...print(event.integrity.signed_by) # https://myorg.example.comimport { CDSEvent, CDSSigner, CDSVocab, CDSSources } from "@signeddata/cds-sdk";const signer = new CDSSigner("keys/private.pem", "https://myorg.example.com");const event = new CDSEvent({content_type: CDSVocab.WEATHER_CURRENT,source: { "@id": CDSSources.OPEN_METEO },occurred_at: new Date(),lang: "en",payload: {location: { city: "London", lat: 51.51, lon: -0.13 },temperature: { current: 14.0, feels_like: 12.0 },condition: "overcast",},context: {summary: "London: overcast, 14C (feels 12C).",model: "rule-based-v1",generated_at: new Date().toISOString(),},});signer.sign(event);console.log(event.toJSON()); // JSON-LD com @context, @type, @id -
Verifique o evento
O consumidor só precisa da sua chave pública.
from cds import CDSVerifierverifier = CDSVerifier("keys/public.pem")try:verifier.verify(event)print("Válido — o dado é autêntico e não modificado")except Exception as e:print(f"Inválido — {e}")Modifique qualquer campo e verifique novamente — a assinatura será rejeitada:
event.payload["temperature"]["current"] = 99.0 # adulteração!verifier.verify(event) # lança: Hash mismatch -
Use um ingestor embutido
O CDS vem com ingestores para vários domínios. Eles cuidam de HTTP, parsing, fingerprinting e assinatura automaticamente.
from cds import CDSSignerfrom cds.sources.lottery import MegaSenaIngestorimport asynciosigner = CDSSigner("keys/private.pem", issuer="https://myorg.example.com")ingestor = MegaSenaIngestor(signer=signer)events = asyncio.run(ingestor.ingest()) # último sorteioprint(events[0].event_context.summary)# "Mega Sena concurso 2800 (29/03/2026): 04 · 12 · 25 · 36 · 47 · 59. ..." -
Conecte-se ao Claude via MCP
Para dar ao Claude acesso a dados CDS assinados, instale um dos servidores MCP:
Terminal window pip install signeddata-mcp-lotteryAdicione à sua configuração do Claude Desktop (
~/.config/claude/claude_desktop_config.json):{"mcpServers": {"lottery": {"command": "signeddata-mcp-lottery","env": {"CDS_PRIVATE_KEY_PATH": "/path/to/keys/private.pem","CDS_ISSUER": "https://myorg.example.com"}}}}Claude pode agora chamar
get_mega_sena_latest,check_mega_sena_tickete mais.