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
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
just 1.50.0
uv 0.11.13
uv 0.13.4
python 3.12.10
46 changes: 41 additions & 5 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,50 @@

### Changes

- **Dataset exports download with your credentials**: Stacklet now requires sign-in to
download an export, and only the user who started it can. When the server writes files,
`platform_dataset_lookup` and `platform_dataset_export` download the finished export with
your token and return the local path in `full_results_saved_to`. A hosted server returns
the link with a `download_note` telling you to open it in your signed-in browser.
### Fixes

---

## October 23, 2026

### Features

- **Ask about IaC Governance**: your AI assistant can now answer questions about
Stacklet's IaC Governance from the Stacklet documentation. When the documentation does
not cover something, it says so instead of guessing.
- **See which tools can change things**: AI apps that support it can now show which
Stacklet tools only read your data and which can make changes, so you can choose to
approve changes before they happen. AssetDB queries count as able to make changes,
because what a query can do depends on your database permissions, so your app may ask
before it runs one.

### Changes

- **Private dataset exports**: only the person who starts a dataset export can download
it, and they must be signed in to Stacklet. Your assistant still downloads finished
exports for you, using your Stacklet sign-in. If an export has expired, or belongs to
someone else, you now get a clear message instead of a broken link.
- **Simpler saved query results**: when your assistant saves the full results of an
AssetDB query to a file, the file now holds just the rows, which is easier to open in
other tools. If you have scripts that read these files, check them against the new
format. Links to download query results now work only for people signed in to Stacklet.
- **Fewer startup errors on Windows**: the configuration that `stacklet-mcp agent-config`
generates now avoids text encoding errors when your AI app starts the server.

### Fixes

- **AssetDB queries work on more Stacklet deployments**: some deployments could not run
AssetDB queries at all. The server now finds AssetDB on its own.
- **Fewer failed GraphQL queries**: when your assistant writes a query that asks for data
Stacklet does not have, it now gets a clear explanation and can correct the query
itself.
- **Fresh installs start again**: installing stacklet-mcp into a new environment could
pull in a newer, incompatible version of a library it depends on, and the server would
not start. Installs now get a compatible version.
- **Security updates**: stacklet-mcp now requires a version of certifi, its list of
trusted certificate authorities, that no longer trusts the compromised eMudhra
authority. Other dependencies are updated to pick up security fixes.

---

## February 23, 2026
Expand Down
15 changes: 13 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@ classifiers = [
]
dynamic = [ "version" ]
dependencies = [
"fastmcp>=2",
"certifi>=2026.10.19", # httpx's CA bundle; earlier releases trust the compromised eMudhra CA
"cryptography>=50.0.2", # not imported directly; minimum for CVE fixes
"fastmcp>=3.3.1,<4", # minimum for security fixes; fastmcp 4 removes APIs we import
"graphql-core>=3.2",
"httpx>=0.28.1",
"platformdirs>=4.13", # not imported directly; minimum for CVE fixes
"pydantic>=2.11.7",
"pydantic-settings>=2.13,<2.14",
"pyjwt>=2.15.1", # not imported directly; minimum for CVE fixes
"starlette>=1.8", # not imported directly; minimum for CVE fixes
]
scripts.stacklet-mcp = "stacklet.mcp.mcp:main"

[dependency-groups]
dev = [
"add-license-header>=2.4",
"mypy>=1.8",
"pip", # mypy needs pip to auto-install type stubs; uv venvs don't include it by default
"pip>=26.2.2", # mypy needs pip to auto-install type stubs; uv venvs don't include it by default
"pre-commit>=4.2",
"pyproject-fmt>=2.6",
"pytest>=7",
Expand All @@ -47,6 +52,9 @@ version.path = "stacklet/mcp/__init__.py"

[tool.uv]
exclude-newer = "7 days"
# Admit the eMudhra CA fix releases (certifi 2026.10.19, pip 26.2.2, both uploaded 2026-10-20)
# ahead of the window; remove once "7 days" covers them (after 2026-10-27).
exclude-newer-package = { certifi = "2026-10-21T00:00:00Z", pip = "2026-10-21T00:00:00Z" }

[tool.ruff]
line-length = 100
Expand All @@ -56,6 +64,9 @@ lint.isort.lines-after-imports = 2
# Use a single line between direct and from import.
lint.isort.lines-between-types = 1

[tool.typos]
default.extend-words.certifi = "certifi"

[tool.mypy]
strict = true
install_types = true
Expand Down
2 changes: 1 addition & 1 deletion stacklet/mcp/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

"""Stacklet MCP server."""

__version__ = "2026.05.20"
__version__ = "2026.10.23"


USER_AGENT = f"stacklet.mcp/{__version__}"
Loading
Loading