Great question! We chose Convex for multiple reasons:
– We spin up isolated projects for each user. Convex handles this seamlessly with zero manual setup, while Supabase/Firebase have limitations and manual configuration needed
– We abstract backend logic as visual nodes, so Convex's modularity makes it logical to find the right granularity for workflow representation.
– Everything is reactive, so UIs and workflows stay in sync without bolting on listeners
– Everything is end-to-end TypeScript with transactions by default, so generated code is predictable and maintainable
Hey, awesome work with the error formatter, as explained above I think error creation falls more under the server responsibilities if it contains any logic about the error (e.g. is retryable). It would be interesting to hear your opinion on a format for LLM side errors.
Regarding the multi server failure case: (without server manager) today if one of the server dies the agent will keep going, I do not think this is a particularly thought through decision, probably the client should error out, or let the agent know that the server is dead. (with server manager) the agent will try to connect to the dead server, get an error, possibly retry, but if the server keeps being unable to connect to, the agent will eventually bail. Indeed it is an interesting problem. How do you see the responsibility split here ?
Regarding the flakyness, ultimate dream, but requires some more work, I think that monitoring this is something that the client has a privileged position of doing, we will do it for sure. I think this is going to be great feedback for companies building servers. Happy to coordinate on ideas on how to do this best.
Hey thanks for the comment, the work from https://github.com/bjoaquinc/mcp-error-formatter is great. I will definitely put some version of this into one of the next releases. Just opened an issue mentioning this thread.
The problem with the package above is that it is server side, and I think it should be. Server is the one that knows (has responsibility to know) if a tool is retryable and has informations about the error, and fairly so.
I see though how some sort of improved error formatting could be introduced in the client as well, but it shouldn't contain any logic about the error, rather format the error in the best way possible (in the direction in which it is best understandable by LLMs).
We designed this slightly differently where one can use the client directly an not only in our agent, the structure is more focused around the MCP functionality.
I'm confused -- I didn't see a single example in you readme or docs that uses the client WITHOUT your agent. Trying to understand if this is an alternative to FastMCP. I don't want your agent.
Hey, we have an example in our readme and docs about how to build your custom agent. but you are right, we should probably fill the client section of the documentations with examples on how to use the client API in more details. Will be done!
The extent to which this is an alternative to FastMCP depends a bit on your use case. As long as you are not interested at all in any agent, they are alternative, but if you want to create an agent we will be closer to what you need. We designed our client with the creation of an agent in mind, and will continue to do so, the design is geared towards this and we have examples of how to use this in our agent.
FastMCP client is very similar today. I see the influence of our design in their implementation. We spoke to the authors a month back and the position was that they wanted something they could use to test their own servers, so the ultimate intention was different. Not sure where it is going to go.
In my case I'm creating the agent in a custom way (using the BAML framework), so I don't need the agent part of your solution. FastMCP works ok but has some issues, so if you have a better client than can be used as a replacement, I would potentially be interested.