The host agent is simple: It receives queries in a specified format and returns the results. I would suggest that the host agent does not process more than one query at a time. Multiple queries are significantly more complex and may have less throughput.
Remote agent may become very complex because of application interface issues. Much of the complexity can be removed by doing a layered and structured design.
Ideally, both synchronous and asynchronous modes should be supported. Once the asynchronous mode is done, the synchronous mode is simple. For synchronous access, the agent connects directly to the data source and creates the result set directly.