Skip to main content

Helio Python SDK

Thin Python client for the Helio MCP governance proxy. Communicates with the proxy's sideband HTTP API to report evidence and context. The SDK never makes governance decisions — that is always the proxy's job.

Install

pip install helio-client

helio-client is only the PyPI distribution name — the string you pip install. This package is the Helio Python SDK; the distribution name differs solely because the bare helio name on PyPI is held by an unrelated abandoned project. It changes nothing about how you use the SDK — the import path stays helio (from helio import HelioContext), and these docs refer to it as the Helio Python SDK throughout.

Quick Start

When the proxy runs with sdk.enabled: true (off by default), it prints a per-boot SDK token to stderr on startup (SDK token (generated per-boot HELIO_SDK_TOKEN; pass as HELIO_SDK_TOKEN env var to your SDK clients): ...); if the proxy's environment already has HELIO_SDK_TOKEN set, that value is reused instead and not echoed. Export the same token in the environment where your SDK client runs — the client reads HELIO_SDK_TOKEN automatically and attaches it as Authorization: Bearer <token> on every sideband call. Without it, requests to the proxy sideband are rejected with 401.

export HELIO_SDK_TOKEN=<token-from-proxy-startup-logs>
from helio import HelioContext

with HelioContext(proxy_url="http://127.0.0.1:3200") as ctx:
    # Declare what evidence this session needs
    ctx.require_evidence("orders.lookup")

    # Mark tool output as evidence under the required key
    ctx.mark_evidence("get_order", "orders.lookup", {"orderId": 42})

    # Set arbitrary session context
    ctx.set("agent_id", "support-bot")

    # Check what evidence the proxy has
    report = ctx.get_evidence_state()
    print(report.satisfied)  # ['orders.lookup']
    print(report.missing)    # []

API

HelioContext

High-level wrapper with local requirement tracking.

Method Description
mark_evidence(tool_name, evidence_key, data, ttl=300) Report evidence from a tool output
require_evidence(keys) Declare local requirements (informational)
set(key, value) Set arbitrary session context
get_evidence_state() Get evidence state with satisfied/missing comparison

HelioClient

Low-level HTTP client mapping to the sideband API.

Method Endpoint Description
mark_evidence(tool_name, evidence_key, data, ttl=300) POST /evidence Report evidence
set_context(key, value) POST /context Set session context
get_session_state() GET /session/:session_id/state Fetch combined state

HelioError

All SDK methods raise HelioError on failure instead of raw HTTP exceptions. The error includes an actionable message and an optional status_code attribute.

from helio import HelioContext, HelioError

try:
    with HelioContext() as ctx:
        ctx.mark_evidence("tool", "key", "data")
except HelioError as e:
    print(e)              # "POST /evidence failed: HTTP 400"
    print(e.status_code)  # 400

Caught error types:

  • Connection errors — proxy unreachable ("Cannot connect to proxy at ...")
  • Timeout errors — proxy did not respond in time ("Proxy request timed out: ...")
  • HTTP errors — proxy returned 4xx/5xx ("POST /evidence failed: HTTP 400")
  • Serialization errors — request payload is not JSON-serializable for POST calls (for example, {"v": object()}), normalized to HelioError with endpoint context ("Failed to serialize POST /evidence payload as JSON: ...").
  • Evidence allowlist errors — POST /evidence may return code=evidence_key_not_in_policy_allowlist when evidence_key does not match any policy evidence.requires key. The SDK includes the rejected key and configured-key preview in HelioError for quick diagnosis.
  • Malformed sideband responses — invalid JSON or missing fields from GET /session/:session_id/state are normalized to HelioError ("... returned malformed response payload").

Configuration

Parameter Default Description
proxy_url http://127.0.0.1:3200 Sideband API base URL
session_id Auto-generated UUID Correlation key for evidence/context
timeout 5.0 HTTP request timeout in seconds

Correlating with MCP traffic: session_id is the canonical correlation key between the SDK and the proxy's MCP door. Give the SDK an explicit session_id and send the same value as the x-helio-session-id header on every MCP request — the default session identity chain resolves it with zero proxy configuration. The auto-generated UUID default cannot satisfy evidence or dependency gates on its own: the proxy never sees it on the MCP side, so gated calls fail closed until both sides share one id.

Constraints

  • Under 500 lines — governance logic belongs in the proxy, not the SDK
  • Thin client only — no caching, no policy evaluation, no decision-making
  • Python 3.10+ required

License

Apache 2.0

Metadata

Release files for helio-client 0.15.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for helio-client 0.15.0
File Size Uploaded
helio_client-0.15.0.tar.gz 16.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for helio-client 0.15.0
File Interpreter ABI Platform
helio_client-0.15.0-py3-none-any.whl Python 3 none any Details

Total release size: 25.6 kB

Release files / helio_client-0.15.0.tar.gz

Download URL helio_client-0.15.0.tar.gz
Size 16.1 kB
Tags Source
SHA-256 checksum
How to use checksums
9c8071a5550629eefae8d652b807d4d28d5dcd282b03936fa1bcc399a0b68326
BLAKE2b-256 checksum
How to use checksums
1d5abca5f7275b36a8aafb9a1400964fa67580825c4cd822c3e33e2d4d11d1a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / helio_client-0.15.0-py3-none-any.whl

Download URL helio_client-0.15.0-py3-none-any.whl
Size 9.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
782f8ef8df8bc1444215aacccc4b0d5f83bee9b9350aeedc7e428e696551b3fe
BLAKE2b-256 checksum
How to use checksums
10ab6b7b27f87930f4aeaaa2b22d74f53f2fc6eff1597ce1c339ba71a9a8a0e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.15.0 This release

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page