> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getmuster.io/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK & Signal Integration

> Precise business-rule checks for critical agents — on top of OTel and connector coverage.

## When do you need the SDK?

OTel and platform connectors already produce quality signals for every agent — Muster's check inference engine infers checks automatically from agent name, output structure, and historical patterns. **For most agents, that's enough.**

The SDK is for agents where inferred checks aren't precise enough:

| Situation                                                     | Use               |
| ------------------------------------------------------------- | ----------------- |
| Need `subtotal + tax == total` with actual values             | SDK               |
| Need grounding checks (extracted value appears in source doc) | SDK               |
| Need entity matching against known records                    | SDK               |
| General monitoring, cost tracking, trend detection            | OTel / connectors |

**Rule of thumb:** Start with OTel or a connector. Add the SDK to your Finance, Compliance, Legal, and Risk agents.

***

## Option A — SDK (recommended for precise checks)

```bash theme={null}
pip install muster-sdk
```

```python theme={null}
from muster_sdk import MusterAgent

agent = MusterAgent(
    agent_id   = "invoice-processor-v2",
    muster_url = "https://backend.YOUR-INSTANCE.getmuster.io",
    token      = "your-agent-token",
)

@agent.govern(
    required_fields=["vendor_name", "invoice_number", "total"],
    arithmetic=[{
        "check_id":         "total_check",
        "result_field":     "total",
        "component_fields": ["subtotal", "tax_amount"],
        "operation":        "sum",
    }],
)
async def process_invoice(input_data: dict) -> dict:
    return extracted_output  # your existing code, unchanged
```

Checks run after every job. [Full SDK guide →](/sdk/python)

***

## Option B — Plain HTTP (no library)

For agents where you want to send specific checks but don't want a library dependency.
No authentication required on the quality endpoint.

```python theme={null}
import httpx, threading

def muster_emit(job_id, checks, token_input=None, token_output=None, model=None, latency_ms=None):
    """Fire-and-forget — never blocks your agent."""
    def _send():
        try:
            httpx.post(
                f"https://backend.YOUR-INSTANCE.getmuster.io/api/v1/jobs/{job_id}/quality",
                json={
                    "agent_id": "invoice-processor-v2",
                    "job_id": job_id,
                    "overall_passed": all(c["passed"] for c in checks),
                    "checks": checks,
                    "token_input": token_input,
                    "token_output": token_output,
                    "model": model,
                    "latency_ms": latency_ms,
                },
                timeout=2.0,
            )
        except Exception:
            pass  # never fail your agent
    threading.Thread(target=_send, daemon=True).start()

muster_emit(
    job_id=job_id,
    checks=[
        {"check_id": "output_not_empty",    "severity": "HIGH", "passed": bool(output)},
        {"check_id": "subtotal_arithmetic", "severity": "HIGH",
         "passed": abs(computed - declared) < 0.01,
         "expected": str(declared), "actual": str(computed)},
    ],
    token_input=1247, token_output=312, model="gpt-4o", latency_ms=1840,
)
```

***

## Option C — n8n / no-code webhook

Add an HTTP Request node at the end of your workflow. Muster also receives signals from the n8n connector automatically — use this only if you need specific business-rule checks.

```
POST https://backend.YOUR-INSTANCE.getmuster.io/api/v1/jobs/{{$runIndex}}/quality
Body: {"agent_id": "my-workflow", "job_id": "{{$runIndex}}", "overall_passed": true,
       "checks": [{"check_id": "output_not_empty", "severity": "HIGH", "passed": {{bool(output)}}}]}
```

→ [Full n8n guide](/integrations/n8n)

***

## Relationship to OTel and connectors

The SDK does **not replace** OTel or platform connectors — it complements them:

* OTel / connectors → discovery, cost tracking, inferred quality signals, execution visibility
* SDK → exact business-rule checks, grounding, entity matching

An agent can have both OTel (for traces + token usage) and SDK (for precise checks) active at the same time. The signals are merged in the Health Heatmap.

***

## Security

* **No inbound access required** — agents make outbound HTTPS calls only
* **No secrets needed** — the quality endpoint is intentionally unauthenticated
* **Non-blocking** — 2-second timeout, fail-open, runs in background thread
* **Air-gapped option** — deploy Muster inside your own network for zero external calls
