• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 37928562847
71%

Build:
DEFAULT BRANCH: main
Ran 09 Oct 2026 12:20PM UTC
Jobs 1
Files 946
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

09 Oct 2026 12:12PM UTC coverage: 71.059% (-0.008%) from 71.067%
37928562847

push

github

web-flow
Preserve list result members in authz filters (#6709)

* Preserve list result members in authz filters

The authz list filters decoded list results into types that model only some of their members, so every other result member was dropped before the response reached the client.
Under MCP 2026-07-28 that includes the required resultType, cacheScope, and ttlMs members, so clients that enforce resultType reject the filtered tools/list.
The filters now rewrite only the list member, write the rest of the result back unchanged, and keep the backend's raw descriptors for the items they permit.
An authz-filtered list depends on the caller, so its result is marked private with a zero TTL and the response carries Cache-Control: private, no-store, as resource template lists already do.

Signed-off-by: Aleksandr Filippov <71711753+alex-feel@users.noreply.github.com>

* Reject ambiguous tool annotations in authz

The authz tools/list filter forwards the backend's raw descriptors, while policies and the annotation cache use annotations decoded by encoding/json.
encoding/json matches member names case-insensitively, keeps the last of duplicate members, and merges a repeated annotations object.
A descriptor that repeats an annotation hint or spells it with a case-insensitive alias could therefore be authorized on a hint value the client does not see.
The filter now fails closed, as it already does for an ambiguous tool name, when a tool repeats its annotations member or any member of the typed annotations, or spells one with a case-insensitive alias.
The tools carried in find_tool output are validated the same way before authorization.

Signed-off-by: Aleksandr Filippov <71711753+alex-feel@users.noreply.github.com>

* Set list caching hints only when sent

The authz filters for tools, prompts, and resources lists added cacheScope and ttlMs to every filtered result.
A list from a backend on an MCP revision that predates these members therefore reached the client with ... (continued)

104 of 119 new or added lines in 2 files covered. (87.39%)

23 existing lines in 7 files now uncovered.

85598 of 120461 relevant lines covered (71.06%)

126.5 hits per line

Uncovered Changes

Lines Coverage ∆ File
15
85.37
0.34% pkg/authz/response_filter.go

Coverage Regressions

Lines Coverage ∆ File
6
19.87
-3.97% pkg/client/manager.go
6
72.34
-6.38% pkg/secrets/keyring/keyctl_linux.go
4
59.21
-0.42% pkg/workloads/manager.go
2
68.8
-0.85% pkg/ignore/processor.go
2
73.66
-0.27% pkg/transport/proxy/streamable/streamable_proxy.go
2
55.58
-0.52% pkg/transport/stdio.go
1
81.07
-0.12% pkg/vmcp/composer/workflow_engine.go
Jobs
ID Job ID Ran Files Coverage
1 37928562847.1 09 Oct 2026 12:20PM UTC 946
71.06
GitHub Action Run
Source Files on build 37928562847
  • Tree
  • List 946
  • Changed 11
  • Source Changed 3
  • Coverage Changed 11
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #37928562847
  • c23718d5 on github
  • Prev Build on main (#37921021736)
  • Next Build on main (#37968068354)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc