Skip to main content

trustgate-sdk

PyPI Documentation · TypeScript package · GitHub

The TrustGate SDK for Python. 3.10+, standard library only.

pip install trustgate-sdk

Setup

from trustgate import TrustGate, ToolFormat

tg = TrustGate()   # TRUSTGATE_API_KEY

The key is the whole configuration, or nothing if it is in the environment. The gateway it belongs to, and the applications behind it, are asked for: tg.identity() asks once and remembers it. Set TRUSTGATE_URL (or base_url) only for a Hybrid gateway, to the MCP host its own data plane is published on: the NeuralTrust cloud does not serve that gateway.

identity = tg.identity()
# identity.key -> KeyInfo(name="prod", expires_at=None)   # None means never
# KeyConsumer(slug="support-agent", type="MCP", url="https://…/support-agent/mcp",
#             upstreams=[KeyUpstream(server="Notion", account="shared", connected=True)])
# KeyConsumer(slug="support-llm",   type="LLM", url="https://…/support-llm/v1")

key.expires_at is the 401 you would otherwise meet mid-run, and upstreams is the refusal you would otherwise meet on the first tool call — both answered before anything starts.

mcp_consumer and llm_consumer (or TRUSTGATE_MCP_CONSUMER / TRUSTGATE_LLM_CONSUMER) are only needed when a key reaches two applications on the same plane — the SDK names them and refuses rather than guessing.

An agent that acts as the application

agent = tg.connect(requires=["search"])

agent.mcp                                        # url + headers for a framework
tg.llm()                                         # base_url for OpenAI, anthropic_base_url for Anthropic
toolkit = agent.toolkit(ToolFormat.OPENAI_RESPONSES)
agent.call_tool("search", {"query": "runbook"})
agent.refresh()                                  # re-read the toolkit
agent.connections                                # its own upstream accounts

A batch that must not stop halfway:

try:
    agent = tg.connect(requires=["search"])
except UpstreamNotConnectedError as error:
    sys.exit(str(error))   # names each server and who fixes it

for row in rows:
    agent.call_tool("search", {"query": row.query})

The gateway serves a tool under the server it came from - Notion's search as notion_search - so two servers with a search stay apart. That prefix is the gateway's, so requires and call_tool take the name the server itself gave the tool and add it; naming a tool two of your servers serve is the one case they ask instead.

An agent acting for one of its users

alice = tg.for_end_user("user_123")
# or, from an agent you already have - no round trip, same toolkit:
bob = agent.for_end_user("user_456")

alice.connections()
alice.connect_link("com.notion/mcp")
alice.toolkit(ToolFormat.ANTHROPIC_MESSAGES)

Both handles work on the same application and the same key: who a call runs as comes from the call, not from anything configured on the application. The name is yours to choose and the gateway namespaces it, so two applications naming user_123 never reach the same account.

The model call, with tools

toolkit = agent.toolkit(ToolFormat.OPENAI_RESPONSES, strict=True)
for warning in toolkit.warnings:
    log.warning("%s could not be strict: %s", warning.tool, warning.reason)

response = client.responses.create(model="gpt-5.2", tools=toolkit.tools, input=messages)
while any(item.type == "function_call" for item in response.output):
    response = client.responses.create(
        model="gpt-5.2",
        tools=toolkit.tools,
        previous_response_id=response.id,
        input=toolkit.execute(response.output),
    )

execute() reads the provider's own objects as well as plain dicts, so the response from the OpenAI or Anthropic SDK can be passed straight in.

Your own HTTP client

tg = TrustGate(..., transport=MyTransport())

Transport is a one-method protocol. The default is UrllibTransport; the tests use a fake one. It is also where a retry policy or a proxy belongs.

Errors

Class When
MissingToolsError requires names a tool the application does not serve
UpstreamNotConnectedError a server the application calls has no account behind it; servers names them and the message says who connects it
ConsentRequiredError an end user has not connected; carries connect_url
PolicyBlockedError a gateway policy refused the call
ToolNotFoundError the tool left the toolkit under a running agent
PlaneUnavailableError the key reaches no application on that plane
AuthenticationError, RateLimitedError, ServiceUnavailableError, TrustGateServerError as named

Documentation

The full guide lives at docs.neuraltrust.ai:

Page What it covers
Quickstart Install, one key, connect()'s startup check, identity()
Tools The MCP endpoint for a framework, or toolkits for a provider's API
Acting for end users Per-user accounts, consent errors, connect links
Models A provider's own client pointed at the LLM plane
Configuration Every option and environment variable, Hybrid gateways, regions
Errors Every failure, and whose it is to fix

The same SDK for TypeScript: @neuraltrust/trustgate on npm. Source, examples and issues: github.com/NeuralTrust/trustgate-sdk.

Development

uv sync --extra dev
uv run pytest

CONTRIBUTING.md has every check CI runs.

Release files for trustgate-sdk 0.1.4

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

Source distribution (sdist)

Source distribution for trustgate-sdk 0.1.4
File Size Uploaded
trustgate_sdk-0.1.4.tar.gz 45.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trustgate-sdk 0.1.4
File Interpreter ABI Platform
trustgate_sdk-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 80.0 kB

Release files / trustgate_sdk-0.1.4.tar.gz

Download URL trustgate_sdk-0.1.4.tar.gz
Size 45.5 kB
Tags Source
SHA-256 checksum
How to use checksums
2dc9256e2c7013f63fa76c2a7d24344dc67535f18d31a0e8d6df77d0c4511ad9
BLAKE2b-256 checksum
How to use checksums
18048ff3a1b5f9af0ce7d55354ea9ac1ed28aaf5c08de89e92fa702a9f1f00c0
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 Sep 23, 2026.

Transparency log

Release files / trustgate_sdk-0.1.4-py3-none-any.whl

Download URL trustgate_sdk-0.1.4-py3-none-any.whl
Size 34.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ab6de90d0c25a1ed015b5f01d1d404d768ec58a27857d5951ffcfa96b7b23997
BLAKE2b-256 checksum
How to use checksums
39a53251ed5b021b4f6d3933e7fc1827dfdadf09e6162ea9709a2e7d49ec7d0f
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 Sep 23, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

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