Skip to main content
Every NSR SDK wraps the same REST API and exposes the same operations the MCP server does, so a decision made from a Go service and one made by an agent through MCP are the same call with the same proof. Version numbers track the engine release.
The Python and Rust READMEs in the repository still say β€œnot yet published”. Both are: PyPI serves stateset-nsr 0.9.1 and crates.io serves stateset-nsr-sdk 0.9.1. The install lines above are the ones that work.

Credentials

Every client takes an API key and an organization id, and every one falls back to NSR_API_KEY and NSR_ORG_ID in the environment when they are not passed. Explicit arguments win.

One decision, four languages

decide is the flagship call: a verified verdict β€” approved, denied or refused β€” with the proof chain that produced it. chat runs the full pipeline on a customer message and returns the reply, the analysis, and any tool calls that are ready to execute.
A refused verdict is the correct, safe result when the engine lacks a premise β€” not an error to retry. Ask for the missing fact or escalate. The decisions page explains what each verdict means and what the proof chain lets you check.

Verifying webhooks

The Python SDK also ships verify_webhook_signature for NSR’s outbound webhooks; the other three carry an equivalent. Verify against the raw request body with a constant-time comparison.