Skip to content

AgentForge v0.2.4 — Live-fire MCP

Latest

Choose a tag to compare

@kjoshi07 kjoshi07 released this 03 Jun 07:23
· 21 commits to main since this release

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.protocols is actually wired now. Declaring an
    MCP server in agentforge.yaml previously 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 native agent.tools from 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 /sessions no 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 wiringProtocolBridge contract +
    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_http
    • serve() over streamable-HTTP (StreamableHTTPSessionManager
      under uvicorn). starlette / uvicorn arrive 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_http register tools at
    construction; register_tools() is idempotent (bug-013).
  • The MCP client HTTP transport moved off the SDK's deprecated
    streamablehttp_client to streamable_http_client.
  • agentforge-chat hard-deps aiosqlite (it was an optional
    extra despite an unconditional import).

Fixed

  • bug-020 / bug-014modules.protocols.mcp never instantiated;
    MCPBridge.from_config raised inside a running event loop.
  • bug-012 / bug-017 — MCP tool names used an illegal .
    separator; provider tool-name charset undocumented + unchecked.
  • bug-015agentforge-py extras 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 raised ValidationError.
  • bug-018POST /sessions 500'd on a fresh SQL/Redis chat
    store.
  • bug-013MCPServer factories served an empty ListTools.
  • 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 SDK

Existing scaffolded agent

cd my-agent
agentforge upgrade --to 0.2.4
uv sync

No 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.4 on 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


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).