Gateco

Latest version: v1.13.0

Safety actively analyzes 1035937 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 4

1.13.0

Added
- `AsyncGatecoClient()` / `GatecoClient()` constructed with no credential at all (no
`api_key`, no `GATECO_API_KEY`, no `access_token`) now read the session that
`gateco login` stored in `~/.gateco/credentials.json`, use its `base_url` when none is
given, and write refreshed tokens back. Refresh rotates, so until now a second process
reusing that file revoked the CLI's session and both failed with
`Invalid or expired refresh token` (cold run 2026-09-25, finding 8, the cause of 16
and 19). `GATECO_CREDENTIALS_FILE` overrides the path.
- CLI: `gateco connectors get <id>`, `get-search-config`, `set-search-config`,
`get-ingestion-config`, `set-ingestion-config` (`--json '{...}'` or `--file path`).
`ingestion_config: null` in `connectors list` finally has a verb to set it (2, 18).
These endpoints are session-only; the CLI has a session.
- `gateco_sdk.types.Classification` / `Sensitivity` (`Literal` types) and the
`CLASSIFICATIONS` / `SENSITIVITIES` tuples. Request models and the `classification` /
`sensitivity` parameters of `ingest.*`, `data_catalog.*` and `retroactive.register` are
typed with them, so editors complete the vocabulary and type checkers reject a value the
server would 422 (10, 12, 13). `gateco ingest --classification/--sensitivity` list the
choices in `--help`. Response models keep `str`.
- MCP: `gateco_list_groups` works with an API key that has the `retrieve` scope against a
backend from 2026-10-02 or later (`GET /api/groups` joined that scope). Only
`gateco_check_access` still needs a user session.

- MCP activation gate: `tests/mcp_activation/run.py` calls all seven tools from the
built wheel against a live backend on a fresh Free org under the documented host
configuration and fails if a denied row's text ever reaches tool output; CI runs it
as the `mcp-activation` job. `RELEASING.md` is the publish checklist every SDK tag
(which is also an MCP registry release) now follows.

Changed
- README: which routes accept an API key, by scope, and which need a session; a CLI
section with a PDF ingest example next to the `.txt` one.
- MCP: `gateco_retrieve` no longer prints `Duration: n/a` on live retrievals (the
execute response carries no top-level timing); the segment appears only when
`duration_ms` or `latency_ms` is present.

1.12.1

Fixed
- MCP: `gateco_check_access` and `gateco_list_groups` call session-only endpoints. When
`GATECO_API_KEY` was set they failed and the error text told the user to set an API
key, which no scope could make work. The message now says the tool needs a user
session; both tools are marked as such in the tool table and their docstrings.
- `gateco login` no longer requires `--password` on the command line: omit it to be
prompted on a terminal, or pipe it on stdin. Passing it as a flag still works but puts
the password in shell history and in `ps` output.
- The authentication error hint now names the credential that would work. When the
server says API keys are not accepted on an endpoint, the CLI no longer tells you to
set `GATECO_API_KEY`; when `GATECO_API_KEY` is set, it says so, since it takes
precedence over a stored session.
- `gateco ingest` accepts PDF, Word, PowerPoint, Excel, CSV and other document types by
uploading them through the file endpoint (`.txt`/`.md` are still sent as text).
- `gateco_sdk.__version__` reported `1.11.1` on the `1.12.0` release; the two version
strings are now the same.

1.12.0

Added
- `end_user_token=` on `client.retrievals.execute`, `client.retrievals.filter` and
`client.answers.execute`: the end user's own identity token, sent as `X-End-User-Token`.
Gateco verifies it against the issuing identity provider's JWKS and refuses the request
(`403 SUBJECT_MISMATCH`) if it names a different principal than `principal_id`. Required
when the organization's `subject_verification` is `"verified_token"`.
- `SecuredRetrieval.subject_verified` (bool) and `actor_type` / `actor_name` / `actor_id` /
`api_key_id`: who asserted the subject on each retrieval record, and whether the assertion
was verified.
- `AsyncGatecoClient._request(headers=...)` for per-call headers (internal).

1.11.1

Fixed
- `SecuredRetrieval.granted_count` / `denied_count` / `total_results` are now derived from
`allowed_chunks` / `denied_chunks` / `results` (the fields the API actually reports). They
previously always read 0 because the API does not send those aggregates (0cc-b).

1.11.0

Added
- `client.connectors.set_embedding_profile(connector_id, *, provider, model, dimensions, base_url)`:
declare the query-embedding profile for a connector pointed at an existing (not
Gateco-ingested) corpus, so server-side text-query embedding matches its vector space.
Write-once; `openai_compatible` requires `base_url` and `model`.

1.10.1

Fixed
- `GatecoClient` / `AsyncGatecoClient` now read `GATECO_API_KEY` from the environment when no
`api_key` argument is given, mirroring the existing `GATECO_BASE_URL` handling. Before this,
only the CLI and MCP server resolved the env var, so `GatecoClient()` with `GATECO_API_KEY`
exported sent no credential and failed with an authentication error. An explicit `api_key=`
still takes precedence over the environment.

Page 1 of 4

© 2026 Safety CLI Cybersecurity Inc. All Rights Reserved.