Skip to content

feat(serve): host MCP and A2A on a single Starlette binary (parity with JS) #354

@bokelley

Description

@bokelley

Summary

Today adcp.server.serve(transport=...) takes either streamable-http (MCP) or a2a — adopters wanting both have to run two processes. JS hosts both on one Express/Hono app. Achieve parity for Python.

Design

  • Build MCP app via mcp_server.streamable_http_app()
  • Build A2A app via a2a_app.build()
  • Mount both on a parent Starlette via Mount("/mcp", mcp_app) + Mount("/", a2a_app)
  • Careful auth/middleware composition across both prefixes — middleware must apply to both transports identically (signing verification, audit, registry lookup, tenant routing)
  • New transport="both" option (or similar; bikeshed during impl)

Cross-references

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions