From c0f4c31099aca3beb04ca635a62534dabe680ded Mon Sep 17 00:00:00 2001 From: Ciaran Sweet Date: Tue, 11 Aug 2026 14:23:55 +0100 Subject: [PATCH] chore(deps)!: bump mcp-toolsets-runtime to 0.5.0, move to the [web] extra MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0.5.0 split the Chainlit host out of `[agent]`, so anything wanting `build_agent`, `run_turn` or the `mcp_agent.host` helpers no longer installs a UI framework it never imports. Two declarations here run Chainlit and move to `[web]`: - the root dependency, which is what the dev environment uses for `mcp-agent-web` and `mcp-agent install-elements`; - the `chat` group, which is Dockerfile.chat. The `index` group and the toolset images are unaffected — they never asked for an extra, and the toolset image syncs with `--package`, so the root dependency never reaches it. Verified by syncing all three into throwaway venvs: `chat` has chainlit and imports `mcp_agent.web`; `index` and `hello` have no chainlit and import `mcp_runtime.index` and `mcp_runtime.server` respectively. Also picks up 0.5.0 declaring httpx as a base dependency. `mcp_runtime.index` imports it and `mcp-index` is a base entry point, so the index image had been relying on it arriving transitively through mcp. Co-Authored-By: Claude Opus 5 --- README.md | 2 +- pyproject.toml | 13 ++++++++----- uv.lock | 18 +++++++++--------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index c355ea2..03def10 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ authority on everything it exposes, and stays current when this doesn't: | `mcp_runtime` | **Required.** Serves a toolset's `TOOLS` as a stateless streamable-HTTP MCP server with a `/health` route for k8s probes, and its `VIEWS` as `ui://` resources — `mcp-serve` for one toolset, `mcp-serve-local` for all of them at once. Also runs the directory service (`mcp-index`). | | `mcp_cli` | **Development inner loop.** Typer/rich client (`mcp-cli`) to list and call tools on a running service. | | `mcp_toolset` | **Scaffolding.** `mcp-toolset new [--with-ui] ` writes a conforming toolset into `toolsets/` and registers it in the workspace. | -| `mcp_agent` | **Optional example chat** (`mcp-agent` / `mcp-agent-web`) that discovers every server behind an index URL and drives their tools. Needs the `[agent]` extra — drop it from the pin if you don't want a chat host. | +| `mcp_agent` | **Optional example chat** (`mcp-agent` / `mcp-agent-web`) that discovers every server behind an index URL and drives their tools. `mcp-agent-web` needs the `[web]` extra; `[agent]` alone gives `build_agent`, `run_turn` and the host helpers without Chainlit, for a frontend of your own. Drop the extra from the pin if you want neither. | | `mcp_state` | **Already working on these toolsets, untagged.** It keeps large tool values out of the model's context. Every `ToolResult` data key is declared in the tool's `_meta` and captured into session state by the bundled agent, whether or not you tag anything. Tagging a key or parameter with a `Kind` is the accelerator on top — see below. | [session-state]: https://github.com/developmentseed/mcp-toolsets-runtime/blob/main/docs/SESSION-STATE.md diff --git a/pyproject.toml b/pyproject.toml index ecedf59..d9fc724 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,9 +6,11 @@ readme = "README.md" requires-python = ">=3.12,<3.14" dependencies = [ # The shared runtime, installed from PyPI — mcp_runtime (mcp-serve / - # mcp-index), mcp_cli, mcp_toolset, and with [agent] the Chainlit chat host. - # Upgrade by bumping this range and running `uv lock`. - "mcp-toolsets-runtime[agent]<0.5.0,>=0.4.2", + # mcp-index), mcp_cli, mcp_toolset, and with [web] the Chainlit chat host. + # [web] is here for the dev environment, which runs `mcp-agent-web` and + # `mcp-agent install-elements`; the toolset images sync with `--package` and + # so never see it. Upgrade by bumping this range and running `uv lock`. + "mcp-toolsets-runtime[web]<0.6.0,>=0.5.0", "credential-demo", "hello", "stac-explorer", @@ -20,8 +22,9 @@ dependencies = [ # exactly this, at the version uv.lock already pins for everything else. index = ["mcp-toolsets-runtime"] # Likewise for the hosted chat image (Dockerfile.chat): the agent and its -# Chainlit stack, no toolsets. -chat = ["mcp-toolsets-runtime[agent]"] +# Chainlit stack, no toolsets. [web] rather than [agent] since 0.5.0 — the +# runtime split the Chainlit host out so an API deployment need not install it. +chat = ["mcp-toolsets-runtime[web]"] dev = [ "pytest<10.0.0,>=9.0.3", "pytest-asyncio<2.0.0,>=1.4.0", diff --git a/uv.lock b/uv.lock index ae68615..dba44e7 100644 --- a/uv.lock +++ b/uv.lock @@ -1008,13 +1008,13 @@ source = { virtual = "." } dependencies = [ { name = "credential-demo" }, { name = "hello" }, - { name = "mcp-toolsets-runtime", extra = ["agent"] }, + { name = "mcp-toolsets-runtime", extra = ["web"] }, { name = "stac-explorer" }, ] [package.dev-dependencies] chat = [ - { name = "mcp-toolsets-runtime", extra = ["agent"] }, + { name = "mcp-toolsets-runtime", extra = ["web"] }, ] dev = [ { name = "mypy" }, @@ -1030,12 +1030,12 @@ index = [ requires-dist = [ { name = "credential-demo", editable = "toolsets/credential-demo" }, { name = "hello", editable = "toolsets/hello" }, - { name = "mcp-toolsets-runtime", extras = ["agent"], specifier = ">=0.4.2,<0.5.0" }, + { name = "mcp-toolsets-runtime", extras = ["web"], specifier = ">=0.5.0,<0.6.0" }, { name = "stac-explorer", editable = "toolsets/stac-explorer" }, ] [package.metadata.requires-dev] -chat = [{ name = "mcp-toolsets-runtime", extras = ["agent"] }] +chat = [{ name = "mcp-toolsets-runtime", extras = ["web"] }] dev = [ { name = "mypy", specifier = ">=1.19.1,<2.0.0" }, { name = "pytest", specifier = ">=9.0.3,<10.0.0" }, @@ -1046,10 +1046,11 @@ index = [{ name = "mcp-toolsets-runtime" }] [[package]] name = "mcp-toolsets-runtime" -version = "0.4.2" +version = "0.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastapi" }, + { name = "httpx" }, { name = "langchain-core" }, { name = "langchain-mcp-adapters" }, { name = "mcp" }, @@ -1058,15 +1059,14 @@ dependencies = [ { name = "typer" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/13/66/3810683a887178f19de68ede5d6baece7f275ad9b1f93adb84f047942272/mcp_toolsets_runtime-0.4.2.tar.gz", hash = "sha256:69f86aaa1cb6f26b03d8e5968a71f170edba6d3e28f9872da42e1803d543495c", size = 290313, upload-time = "2026-08-11T10:58:25.315Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/2b/7c78e80a1788e72e0869288f15dc4e89338955c1243e201aa86d94d07812/mcp_toolsets_runtime-0.5.0.tar.gz", hash = "sha256:85046d1cba191c835ca047fa23b9c059ee3868e7aa06470e2f9061bd8cffc60a", size = 291959, upload-time = "2026-08-11T13:20:41.614Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/9b/b6bf8ab4cacb0a5ebe18377af78093069f08ec1137a66957525531702abc/mcp_toolsets_runtime-0.4.2-py3-none-any.whl", hash = "sha256:de1feb6770be28009d357fa2dffb28b20608a032dde0be4e63117bb9670c6a43", size = 89574, upload-time = "2026-08-11T10:58:23.728Z" }, + { url = "https://files.pythonhosted.org/packages/de/c4/871bf9cd38a7069b83dadc7b0fcd4af430ec60b90c5a622db8a7fe83defd/mcp_toolsets_runtime-0.5.0-py3-none-any.whl", hash = "sha256:7ea9b9e9c0d3163b9dd97ee165ddcc0c948f6bac979e5f06731ad5d4aaefe769", size = 89935, upload-time = "2026-08-11T13:20:40.509Z" }, ] [package.optional-dependencies] -agent = [ +web = [ { name = "chainlit" }, - { name = "httpx" }, { name = "jsonschema" }, { name = "langchain" }, ]