Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Install uv
uses: runloopai/setup-uv@main
with:
version: '0.9.13'
version: '0.10.2'

- name: Install dependencies
run: uv sync --all-extras
Expand All @@ -46,7 +46,7 @@ jobs:
- name: Install uv
uses: runloopai/setup-uv@main
with:
version: '0.9.13'
version: '0.10.2'

- name: Install dependencies
run: uv sync --all-extras
Expand Down Expand Up @@ -80,7 +80,7 @@ jobs:
- name: Install uv
uses: runloopai/setup-uv@main
with:
version: '0.9.13'
version: '0.10.2'

- name: Bootstrap
run: ./scripts/bootstrap
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.10.2"
".": "1.10.3"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 118
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-439b1a08248ef3bc7457c7b0a9a6218149732535a9f0dd541501fc35e2a3f8c2.yml
openapi_spec_hash: 35b12a086d98484417ce3d2543c47929
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-132ed160716591bdcd9231c00da8c506d9451a5486b165fc27b2a01d93202082.yml
openapi_spec_hash: c2b44d9e9cda56e32141a7ea3794bbba
config_hash: cbda3692cb48ab8582a0df1674b9e5c8
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 1.10.3 (2026-02-27)

Full Changelog: [v1.10.2...v1.10.3](https://github.com/runloopai/api-client-python/compare/v1.10.2...v1.10.3)

### Bug Fixes

* switching to MCP definition to specify a secret name per MCP server ([#7715](https://github.com/runloopai/api-client-python/issues/7715)) ([01f4b3d](https://github.com/runloopai/api-client-python/commit/01f4b3dc66f20126adf6737554e42ce1a1b19fe0))


### Chores

* **ci:** bump uv version ([b0fad50](https://github.com/runloopai/api-client-python/commit/b0fad503bde3ad7c472e6aac71073a01e92b7a6a))

## 1.10.2 (2026-02-26)

Full Changelog: [v1.10.1...v1.10.2](https://github.com/runloopai/api-client-python/compare/v1.10.1...v1.10.2)
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "runloop_api_client"
version = "1.10.2"
version = "1.10.3"
description = "The official Python library for the runloop API"
dynamic = ["readme"]
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion src/runloop_api_client/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "runloop_api_client"
__version__ = "1.10.2" # x-release-please-version
__version__ = "1.10.3" # x-release-please-version
26 changes: 14 additions & 12 deletions src/runloop_api_client/resources/devboxes/devboxes.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ def create(
file_mounts: Optional[Dict[str, str]] | Omit = omit,
gateways: Optional[Dict[str, devbox_create_params.Gateways]] | Omit = omit,
launch_parameters: Optional[LaunchParameters] | Omit = omit,
mcp: Optional[Iterable[devbox_create_params.Mcp]] | Omit = omit,
mcp: Optional[Dict[str, devbox_create_params.Mcp]] | Omit = omit,
metadata: Optional[Dict[str, str]] | Omit = omit,
mounts: Optional[Iterable[Mount]] | Omit = omit,
name: Optional[str] | Omit = omit,
Expand Down Expand Up @@ -242,10 +242,11 @@ def create(

launch_parameters: Parameters to configure the resources and launch time behavior of the Devbox.

mcp: [Beta] (Optional) MCP specifications for MCP server access. Each spec links an
MCP config to a secret. The devbox will receive environment variables
(RL_MCP_URL, RL_MCP_TOKEN) for accessing MCP servers through the MCP hub.
Example: [{'mcp_config': 'github-readonly', 'secret': 'MY_GITHUB_TOKEN'}]
mcp: [Beta] (Optional) MCP specifications for MCP server access. Map key is the
environment variable name for the MCP token envelope. Each spec links an MCP
config to a secret. The devbox will also receive RL_MCP_URL for the MCP hub
endpoint. Example: {'MCP_SECRET': {'mcp_config': 'github-readonly', 'secret':
'MY_GITHUB_TOKEN'}}

metadata: User defined metadata to attach to the devbox for organization.

Expand Down Expand Up @@ -507,7 +508,7 @@ def create_and_await_running(
file_mounts: Optional[Dict[str, str]] | Omit = omit,
gateways: Optional[Dict[str, devbox_create_params.Gateways]] | Omit = omit,
launch_parameters: Optional[LaunchParameters] | Omit = omit,
mcp: Optional[Iterable[devbox_create_params.Mcp]] | Omit = omit,
mcp: Optional[Dict[str, devbox_create_params.Mcp]] | Omit = omit,
metadata: Optional[Dict[str, str]] | Omit = omit,
mounts: Optional[Iterable[Mount]] | Omit = omit,
name: Optional[str] | Omit = omit,
Expand Down Expand Up @@ -1869,7 +1870,7 @@ async def create(
file_mounts: Optional[Dict[str, str]] | Omit = omit,
gateways: Optional[Dict[str, devbox_create_params.Gateways]] | Omit = omit,
launch_parameters: Optional[LaunchParameters] | Omit = omit,
mcp: Optional[Iterable[devbox_create_params.Mcp]] | Omit = omit,
mcp: Optional[Dict[str, devbox_create_params.Mcp]] | Omit = omit,
metadata: Optional[Dict[str, str]] | Omit = omit,
mounts: Optional[Iterable[Mount]] | Omit = omit,
name: Optional[str] | Omit = omit,
Expand Down Expand Up @@ -1920,10 +1921,11 @@ async def create(

launch_parameters: Parameters to configure the resources and launch time behavior of the Devbox.

mcp: [Beta] (Optional) MCP specifications for MCP server access. Each spec links an
MCP config to a secret. The devbox will receive environment variables
(RL_MCP_URL, RL_MCP_TOKEN) for accessing MCP servers through the MCP hub.
Example: [{'mcp_config': 'github-readonly', 'secret': 'MY_GITHUB_TOKEN'}]
mcp: [Beta] (Optional) MCP specifications for MCP server access. Map key is the
environment variable name for the MCP token envelope. Each spec links an MCP
config to a secret. The devbox will also receive RL_MCP_URL for the MCP hub
endpoint. Example: {'MCP_SECRET': {'mcp_config': 'github-readonly', 'secret':
'MY_GITHUB_TOKEN'}}

metadata: User defined metadata to attach to the devbox for organization.

Expand Down Expand Up @@ -2032,7 +2034,7 @@ async def create_and_await_running(
file_mounts: Optional[Dict[str, str]] | Omit = omit,
gateways: Optional[Dict[str, devbox_create_params.Gateways]] | Omit = omit,
launch_parameters: Optional[LaunchParameters] | Omit = omit,
mcp: Optional[Iterable[devbox_create_params.Mcp]] | Omit = omit,
mcp: Optional[Dict[str, devbox_create_params.Mcp]] | Omit = omit,
metadata: Optional[Dict[str, str]] | Omit = omit,
mounts: Optional[Iterable[Mount]] | Omit = omit,
name: Optional[str] | Omit = omit,
Expand Down
9 changes: 5 additions & 4 deletions src/runloop_api_client/types/devbox_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,13 @@ class DevboxBaseCreateParams(TypedDict, total=False):
launch_parameters: Optional[LaunchParameters]
"""Parameters to configure the resources and launch time behavior of the Devbox."""

mcp: Optional[Iterable[Mcp]]
mcp: Optional[Dict[str, Mcp]]
"""[Beta] (Optional) MCP specifications for MCP server access.

Each spec links an MCP config to a secret. The devbox will receive environment
variables (RL_MCP_URL, RL_MCP_TOKEN) for accessing MCP servers through the MCP
hub. Example: [{'mcp_config': 'github-readonly', 'secret': 'MY_GITHUB_TOKEN'}]
Map key is the environment variable name for the MCP token envelope. Each spec
links an MCP config to a secret. The devbox will also receive RL_MCP_URL for the
MCP hub endpoint. Example: {'MCP_SECRET': {'mcp_config': 'github-readonly',
'secret': 'MY_GITHUB_TOKEN'}}
"""

metadata: Optional[Dict[str, str]]
Expand Down
10 changes: 5 additions & 5 deletions src/runloop_api_client/types/devbox_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from .tunnel_view import TunnelView
from .shared.launch_parameters import LaunchParameters

__all__ = ["DevboxView", "StateTransition", "GatewaySpecs", "McpSpec"]
__all__ = ["DevboxView", "StateTransition", "GatewaySpecs", "McpSpecs"]


class StateTransition(BaseModel):
Expand Down Expand Up @@ -39,7 +39,7 @@ class GatewaySpecs(BaseModel):
"""The ID of the secret containing the credential."""


class McpSpec(BaseModel):
class McpSpecs(BaseModel):
mcp_config_id: str
"""The ID of the MCP config (e.g., mcp_123abc)."""

Expand Down Expand Up @@ -107,11 +107,11 @@ class DevboxView(BaseModel):
initiator_type: Optional[Literal["unknown", "api", "scenario", "scoring_validation"]] = None
"""The type of initiator that created the Devbox."""

mcp_specs: Optional[List[McpSpec]] = None
mcp_specs: Optional[Dict[str, McpSpecs]] = None
"""[Beta] MCP specifications configured for this devbox.

Each spec links an MCP config to a secret for MCP server access through the MCP
hub.
Map key is the environment variable name for the MCP token envelope. Each spec
links an MCP config to a secret for MCP server access through the MCP hub.
"""

name: Optional[str] = None
Expand Down
12 changes: 6 additions & 6 deletions tests/api_resources/test_devboxes.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,12 @@ def test_method_create_with_all_params(self, client: Runloop) -> None:
"username": "username",
},
},
mcp=[
{
mcp={
"foo": {
"mcp_config": "mcp_config",
"secret": "secret",
}
],
},
metadata={"foo": "string"},
mounts=[
{
Expand Down Expand Up @@ -1761,12 +1761,12 @@ async def test_method_create_with_all_params(self, async_client: AsyncRunloop) -
"username": "username",
},
},
mcp=[
{
mcp={
"foo": {
"mcp_config": "mcp_config",
"secret": "secret",
}
],
},
metadata={"foo": "string"},
mounts=[
{
Expand Down