Werkzeuge und REST-Aufrufe
| MCP-Werkzeug | REST | Zweck |
|---|
get_status | GET /cases/{case} | Stand des Falls und nächste Schritte |
prove_domain | POST /cases/{case}/domain-proof | Domain-Nachweis prüfen lassen |
submit_self_assessment | POST /cases/{case}/self-assessment | Selbstauskunft senden |
add_evidence | POST /cases/{case}/evidence | Nachweis: Adresse oder Datei |
set_test_target | POST /cases/{case}/test-target | Release zum Testen nennen |
request_test | POST /cases/{case}/test-runs | Labortest anfordern |
list_findings | GET /cases/{case}/findings | Feststellungen lesen |
answer_finding | POST /cases/{case}/findings/{id}/answer | Feststellung beantworten |
get_case_log | GET /cases/{case}/log | signiertes Fallprotokoll |
get_report_draft | GET /cases/{case}/report-draft | Berichtsentwurf |
get_seal | GET /cases/{case}/seal | Siegel und HTML-Code nach der Vergabe |
notify_release | POST /cases/{case}/releases | neue Version anmelden |
get_criteria | GET /criteria | Kriterienkatalog mit SHA-256 (ohne Token) |
withdraw | POST /cases/{case}/withdraw | Antrag zurückziehen |
MCP-Server: https://nocip.com/mcp/ · REST: https://nocip.com/api/v1/ · OpenAPI · für Sprachmodelle: llms.txt
Das Fallprotokoll selbst prüfen
Jeder Eintrag hat die Felder seq, time, case, step, action, actor, inputs, data, prev, hash und sig. hash ist „sha256:“ und der SHA-256 des Eintrags ohne hash und sig, als JSON mit sortierten Schlüsseln, ohne Leerzeichen, UTF-8. prev ist der hash des vorigen Eintrags (beim ersten null). sig.ed25519 ist die Ed25519-Signatur des Textes von hash mit dem öffentlichen Schlüssel von NOCIP.
import base64, hashlib, json
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
key = Ed25519PublicKey.from_public_bytes(base64.b64decode(PUBLIC_KEY_B64))
prev = None
for i, ev in enumerate(events, 1):
body ={k: v for k, v in ev.items() if k not in ('hash', 'sig')}
raw = json.dumps(body, sort_keys=True, separators=(',', ':'), ensure_ascii=False).encode()
assert ev['seq'] == i and ev['prev'] == prev
assert ev['hash'] == 'sha256:' + hashlib.sha256(raw).hexdigest()
key.verify(base64.b64decode(ev['sig']['ed25519']), ev['hash'].encode())
prev = ev['hash']