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

stacklok / toolhive / 41832476071
73%

Build:
DEFAULT BRANCH: main
Ran 04 Nov 2026 12:59PM UTC
Jobs 1
Files 998
Run time 1min
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

04 Nov 2026 12:48PM UTC coverage: 72.559% (+0.08%) from 72.484%
41832476071

push

github

web-flow
Merge commit from fork

* Accept only canonical resource URIs

Authorization compares a resource URI as an exact string, but MCP
servers built on the TypeScript and Python SDKs look a resource up by a
normalized form of the requested URI: both lower-case the scheme,
remove dot segments including %2e%2e, strip surrounding whitespace and
rewrite file://localhost/x to file:///x. A policy that forbids one URI
therefore did not cover its other spellings.

The proxy now accepts a resource URI only when it is already in
canonical form, meaning WHATWG URL serialization leaves it unchanged
and it passes a few RFC 3986 normalization rules, and denies any other
URI with a 403 before a policy is evaluated. This applies to
resources/read, resources/subscribe, resources/unsubscribe and each URI
in subscriptions/listen, for every authorizer. The warning log names
the rule that refused the URI, never the URI itself. Resource template
refs in completion/complete are only refused when empty or containing a
space or control character, because a template is not a URI and SDKs
match template refs exactly. List filtering is unchanged.

With authorization configured, a backend that lists a URI not in
canonical form can no longer have that resource read. Deployments
without authorization are unaffected.

C# SDK servers are only partly covered: the case of a non-special host
and user information are accepted as sent, so the docs recommend an
allow-list for C# backends.

Co-authored-by: Mecatl <noreply@mecatl.dev>

* Apply canonical resource URI checks in vMCP

Virtual MCP authorizes resource reads in its admission layer rather
than the authorization middleware, so it did not get the proxy's
canonical-form check.

The Cedar admission now refuses a resource read, and the pre-dispatch
read check, when the URI is not in canonical form, before any policy is
evaluated, and logs the rule that refused it. Admission gains
AllowResourceTemplateRead for completion/complete with a ref/re... (continued)

269 of 274 new or added lines in 6 files covered. (98.18%)

55 existing lines in 4 files now uncovered.

92905 of 128041 relevant lines covered (72.56%)

136.63 hits per line

Uncovered Changes

Lines Coverage ∆ File
5
97.76
pkg/authz/authorizers/resource_uri.go

Coverage Regressions

Lines Coverage ∆ File
38
88.4
0.66% pkg/transport/proxy/transparent/transparent_proxy.go
7
96.29
0.0% pkg/authz/authorizers/cedar/core.go
6
82.98
9.17% pkg/script/internal/builtins/parallel.go
4
90.91
0.0% pkg/transport/middleware/header_forward.go
Jobs
ID Job ID Ran Files Coverage
1 41832476071.1 04 Nov 2026 12:59PM UTC 998
72.56
GitHub Action Run
Source Files on build 41832476071
  • Tree
  • List 998
  • Changed 13
  • Source Changed 11
  • Coverage Changed 12
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #41832476071
  • ae330887 on github
  • Prev Build on main (#41804595430)
  • Next Build on main (#41837654690)
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