AgentForge v0.2.4 — Live-fire MCP
The first live, Bedrock-backed MCP agent integration surfaced a
cluster of framework defects — from "the documented config does
nothing" to "every MCP tool name is rejected by the provider."
v0.2.4 fixes the whole cluster (eight bugs) and lands the one
enhancement that unblocks hosted MCP servers.
No breaking changes. Same 34 workspace packages as v0.2.3,
bumped to 0.2.4 with cross-package pins refreshed.
Highlights
-
MCP
modules.protocolsis actually wired now. Declaring an
MCP server inagentforge.yamlpreviously validated but did
nothing — no subprocess, no tools. The runtime now resolves
modules.protocols, starts each handler, and merges its tools
into the agent (bug-020 + bug-014). This path also fixed a
latent gap where nativeagent.toolsfrom config were never
wired. -
MCP tools work on every provider. Tool names are now joined
with__(e.g.filesystem__read_file) and validated against
the^[a-zA-Z0-9_-]{1,64}$charset Bedrock / OpenAI / Anthropic
all enforce, with a local, actionable error before the request
leaves the process (bug-012 + bug-017). Dotted names used to
fail remotely on the first LLM call. -
pip install "agentforge-py[mcp]"delivers a working MCP
runtime. The meta-package extras now chain each sister
package's vendor-SDK extra, so the SDK actually installs
(bug-015). An audit fixed 12 broken extra chains +[all]. -
Hosted MCP servers over HTTP (enh-001).
MCPServer.from_http(...)+serve()now serve the MCP
protocol over streamable-HTTP under uvicorn, not just stdio:server = MCPServer.from_http(tools=tools, host="0.0.0.0", port=8765) await server.serve() # serves over HTTP instead of raising
-
Chat sessions create cleanly + terse config syntax works.
POST /sessionsno longer 500s on a fresh SQLite/Postgres/Redis
store (bug-018), and the documented- faithfulness/
- presidio: {…}shorthand for evaluators and guardrails is
accepted (bug-019).
What's new
Added
- MCP runtime wiring —
ProtocolBridgecontract +
Agent(protocol_bridges=…)+build_protocols_from_config
(feat-013).MCPBridge.attach_local_tools/MCPServer.set_tools. agentforge_core.contracts.tool.validate_tool_name+
ToolNameInvalidError— portable tool-name validation invoked
by every provider at request-build time (bug-017).ChatHistoryStore.create_session(...)— concrete, additive
ABC method to register a session before its first turn (bug-018).- MCP server-side HTTP transport (enh-001) —
MCPServer.from_httpserve()over streamable-HTTP (StreamableHTTPSessionManager
under uvicorn).starlette/uvicornarrive via
agentforge-mcp[mcp]. SSE server transport remains deferred.
Changed
- 34 workspace packages bumped to
0.2.4; cross-package pins
refreshed~= 0.2.3→~= 0.2.4. - MCP server
from_stdio/from_httpregister tools at
construction;register_tools()is idempotent (bug-013). - The MCP client HTTP transport moved off the SDK's deprecated
streamablehttp_clienttostreamable_http_client. agentforge-chathard-depsaiosqlite(it was an optional
extra despite an unconditional import).
Fixed
- bug-020 / bug-014 —
modules.protocols.mcpnever instantiated;
MCPBridge.from_configraised inside a running event loop. - bug-012 / bug-017 — MCP tool names used an illegal
.
separator; provider tool-name charset undocumented + unchecked. - bug-015 —
agentforge-pyextras didn't pull their vendor
SDKs (12 chains +[all]; bedrock phantom extra; chat aiosqlite). - bug-019 — terse string / single-key-mapping config sugar for
evaluators + guardrails raisedValidationError. - bug-018 —
POST /sessions500'd on a fresh SQL/Redis chat
store. - bug-013 —
MCPServerfactories served an emptyListTools. - bug-008 — scaffolds recorded
_template_version: 0.0.0+unknown
(version looked up by import name, not distribution name).
Full per-bug detail in CHANGELOG.md and the
docs/bugs/bug-0NN-*.md reports.
Breaking changes
None.
Upgrade guide
Fresh install
pip install "agentforge-py[bedrock]==0.2.4"
# MCP consumers:
pip install "agentforge-py[mcp]==0.2.4" # now actually pulls the mcp SDKExisting scaffolded agent
cd my-agent
agentforge upgrade --to 0.2.4
uv syncNo config changes are required. Agents already using
modules.protocols.mcp start working without edits (the config was
previously a no-op). Dotted MCP/tool names that happened to work on
Anthropic-direct should be renamed to the [a-zA-Z0-9_-] charset —
the framework now flags them locally with a suggested rewrite.
Coordinated release train
Per ADR-0015, every release bumps every in-scope workspace package
to the same version. v0.2.4 ships the same 34 packages as v0.2.3 at
0.2.4 with cross-package pins refreshed. The MCP / chat / core /
provider packages carry the substantive changes above; the rest are
version-bump-only.
Cross-language status
- Python: released as
v0.2.4on PyPI. - TypeScript: not yet started (Python-first per ADR-0002;
TypeScript targets parity by 0.4).
Acknowledgements
Thanks to kjoshi — designer, implementer, reviewer, and the
downstream integrator whose live Bedrock + MCP agent surfaced this
entire cluster. Generated with Claude
Code (Anthropic) as the primary AI
co-author per the Co-Authored-By: commit trailers.
Full changelog
CHANGELOG.md— curated notes.git log v0.2.3..v0.2.4 --oneline— every commit.- Compare view:
Scaffoldic/agentforge-py/compare/v0.2.3...v0.2.4. - PyPI:
pypi.org/project/agentforge-py/0.2.4.
What's next
v0.3 backlog unchanged — see docs/roadmap.md.
Deferred from this train: SSE MCP server transport (enh-001
phase 2, pending the upstream SDK's SSE server adapter) and
server-side expose runtime-wiring (auto-serving the agent's own
tools as an MCP server from inside the agent runtime).