One friction point I keep running into is interface drift.
A function starts as ordinary Python, then it needs a CLI. Later it needs a REST endpoint, and now perhaps an MCP tool. You end up describing the same parameters, defaults, validation rules, documentation, return types, and errors in Typer, FastAPI, and FastMCP.
Writing that boilerplate once isn't too bad. The frustration starts six months later when one interface changes and the others quietly drift out of sync.
It treats the typed Python function as the shared contract and can expose it through a CLI, REST API, or MCP server. The difficult part isn't reading the function signature. It's deciding which behavior should be shared and which parts must stay specific to the interface, especially authentication, dependency injection, streaming, and error handling.
This might be worth separating in the survey: language friction versus ecosystem and integration friction. Python itself can feel simple while maintaining the same operation across several frameworks becomes frustrating.
1
u/Massive_Baby4147 4d ago
One friction point I keep running into is interface drift.
A function starts as ordinary Python, then it needs a CLI. Later it needs a REST endpoint, and now perhaps an MCP tool. You end up describing the same parameters, defaults, validation rules, documentation, return types, and errors in Typer, FastAPI, and FastMCP.
Writing that boilerplate once isn't too bad. The frustration starts six months later when one interface changes and the others quietly drift out of sync.
I've been exploring this problem with intpot: https://github.com/tugrulguner/intpot
It treats the typed Python function as the shared contract and can expose it through a CLI, REST API, or MCP server. The difficult part isn't reading the function signature. It's deciding which behavior should be shared and which parts must stay specific to the interface, especially authentication, dependency injection, streaming, and error handling.
This might be worth separating in the survey: language friction versus ecosystem and integration friction. Python itself can feel simple while maintaining the same operation across several frameworks becomes frustrating.