Fixed
pforge serveno longer advertises tools it cannot call. Atype: native
tool's handler is compiled into a server binary; the genericpforge serve
has no knowledge of it. The server registered nothing for such tools yet added
an MCP adapter for them anyway, sotools/listreturnedhellowhile
tools/callanswered-32603 Tool not found: hello, andinputSchema.properties
was empty because there was no handler type to derive a schema from.run()
now refuses to start, naming the offending tools and the remedy. (#12, #13)pforge --versionworks. clap's derive emits a version flag only when
declared, and it never was — so nothing could identify the binary, including
forjar'scargo packageresource, which is how every managed tool in the fleet
is verified. (#9)--no-default-featuresbuilds.sse,websocketandhttp-handlerswere
declared optional and used unconditionally, so they were optional in name only
and a consumer avoiding reqwest/TLS got a compile error instead of a smaller
build. Transports that are compiled out now fail at construction with a message
naming the missing feature, rather than vanishing or panicking. (#10)- The fuzzing lane runs all three targets.
fuzz_handler_dispatchhad failed
to build sinceHandlerRegistry::getwas removed, andcontinue-on-error
turned that into a green tick every day. Building is now a hard gate, separate
from findings. (#11)
Added
[package.metadata.transports]declaring thecliandmcpinterfaces, with
e2e suites that spawn the release binary rather than calling the library — a
library-level suite cannot observe whether a transport is reachable frommain.scripts/dogfood-use.sh+scripts/mcp_probe.py: the release gate that runs
the workflowpforge newitself prints, and asserts the invariant an MCP client
depends on — every name intools/listmust be callable viatools/call—
from both sides.- A CI
feature-matrixover all 7 feature configurations, wired intogate.
It targets-p pforge-runtime, not--workspace: cargo unifies features across
a workspace build, so a workspace-level matrix passes with the bug present.