RagLeap
ragleap-integrations · release notes

ragleap-integrations v0.3.0

ragleap-integrations 0.3.0 (published to PyPI on 2026-10-27)

Added

  • McpHub: multi-tenant use. One owner-level McpConfig, one Connection per Scope (hub.connect(scope)), cached, with forget() and max_scopes. Each scope has its own client, tool snapshot and lock; the scope is never a tool argument.
  • token_provider(scope, server): called for every request and never cached; a failing or unusable provider gives the constant text MCP token is unavailable.
  • allow_for (can only narrow the owner allowlist), policy_for and McpPolicy.approve_scoped (per-tenant approval; without a scope it denies), RateLimit (per tenant, checked before approval and the network) and audit (anything with append(event, data, scope), such as the ragleap-security AuditLog).
  • Events from scoped clients carry tenant and scope; arguments and results are never in an event.
  • Scope, ScopeError, require_scope, HAS_SECURITY. ragleap-security is an optional extra: pip install ragleap-integrations[security]. Without it a built-in Scope with the same fields and key format is used.

Changed

  • Code that does not use McpHub behaves as in 0.2.0. The test extra includes ragleap-security.

Verified

  • 331 tests (275 earlier plus 56 new) on Python 3.10 and 3.12; 327 passed and 4 skipped without ragleap-security. 40 of 40 deliberate breaks of the new code caught.
  • Live check on 2026-10-26 with the branch source against a third-party public mock MCP auth server: two real tokens, each tenant request carried only its own token, a made-up token got HTTP 401, a changed token affected only its tenant, RateLimit(2, 60) denied the third call locally, no event carried a token. The mock server cannot tell tenants apart, so separation is shown from the requests that were sent.
  • Published wheel and sdist checked from PyPI on 2026-10-27: hashes identical to TestPyPI, installed files equal the repository source, the smoke test passes with and without the extra, and the sdist tests pass (331, and 327 with 4 skipped without the extra) against the installed wheel on Python 3.10.12.

Not verified

  • approve_scoped, allow_for and policy_for against a real server, a real AuditLog fed by a live run, concurrent tenants against a real server, and a server that really separates the data of tenants. The live check is repeated with the published wheel after release.

Design: packages/ragleap-integrations/docs/design/multi-tenant.md

View on GitHub Package page All releases
← v0.2.0v0.4.0 →

Release notes mirrored from GitHub Releases.