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

stacklok / toolhive / 29580704301
69%

Build:
DEFAULT BRANCH: main
Ran 17 Jul 2026 12:40PM UTC
Jobs 1
Files 802
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

17 Jul 2026 12:34PM UTC coverage: 68.472% (+0.02%) from 68.454%
29580704301

push

github

web-flow
Harden vMCP authz gate: single parse source and reserved-name check (#5850)

Harden vMCP authz gate: single parse + name guard

Two hardening items split out of the #5841 review (the vMCP HTTP-403
authz gate). Refs #5845.

1. Single parse source for tools/call. The pre-dispatch gate authorized
   on the transport parser's decoded arguments while the Serve handler
   re-authorized and forwarded the backend call on the SDK's separate
   decode of the same bytes. For an argument-conditional Cedar policy the
   two decodes could diverge (json.Number vs float64, duplicate keys),
   letting the gate ALLOW while the call path DENIED — re-introducing the
   200/IsError the gate exists to remove. coreToolHandler now prefers the
   transport-parsed map via gateParsedArgs, so gate check, enforced check,
   and backend forward all derive from one decode. Fallback paths (batch,
   embedders bypassing the transport, method/tool mismatch) keep the SDK
   decode and make a single decision on a single map, so they cannot
   diverge. core.CallTool is untouched and stays standalone defense.

2. Fail-loud reserved-name check. A backend tool literally named
   execute_tool_script would be silently shadowed by the code-mode
   virtual tool and skip its Cedar policy. The codemode decorator now
   routes every inner tool-set read through innerTools, which returns
   ErrReservedToolName (naming the offending backend) so the collision
   aborts listing/lookup/script execution rather than shadowing silently.

Item 3 of #5845 (verb parity for elicitation/sampling/tasks) stays open:
it is blocked on a core admission decision for those verbs, which does
not exist yet.


Claude-Session: https://claude.ai/code/session_01UthZzKery5m7GBNcXYKALe

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

23 of 23 new or added lines in 2 files covered. (100.0%)

59 existing lines in 8 files now uncovered.

74522 of 108835 relevant lines covered (68.47%)

64.1 hits per line

Coverage Regressions

Lines Coverage ∆ File
24
84.57
0.0% pkg/authz/middleware.go
13
95.49
0.02% pkg/telemetry/middleware.go
8
96.99
-0.57% pkg/mcp/parser.go
5
64.29
-7.14% pkg/state/runconfig.go
3
73.79
-2.91% pkg/state/local.go
2
93.94
-6.06% pkg/foreach/foreach.go
2
82.29
-0.21% pkg/vmcp/composer/workflow_engine.go
2
61.52
-0.17% pkg/workloads/manager.go
Jobs
ID Job ID Ran Files Coverage
1 29580704301.1 17 Jul 2026 12:40PM UTC 802
68.47
GitHub Action Run
Source Files on build 29580704301
  • Tree
  • List 802
  • Changed 14
  • Source Changed 6
  • Coverage Changed 14
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #29580704301
  • e14bb31d on github
  • Prev Build on main (#29580613786)
  • Next Build on main (#29580692030)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc