Dev & Engineering dotnet-sdkmulti-provider-inferenceagent-orchestrationmodel-context-protocolagent2agentvector-databasesfunction-calling

LLM Tornado for .NET

A .NET SDK for building provider-flexible AI agents, tool-enabled conversations, and graph-based workflows.

FollowAgents review · FARS-2.0
Not yet reviewed
See the full review method →

What does this agent do, and when should you use it?

LLM Tornado is a provider-agnostic .NET SDK for building AI agents and workflows. Its core API uses TornadoApi, ChatModel, and Conversation for chat, streaming, embeddings, and rich responses, selecting configured credentials by model. LlmTornado.Agents models graph-based coordination with Orchestrator, Runner, and Advancer, including handoffs, parallel execution, and Mermaid export. LlmTornado.Mcp adds Model Context Protocol interoperability, LlmTornado.A2A adds Agent2Agent integration, and a separate package interoperates with Microsoft.Extensions.AI. A .NET application can call hosted providers or point the SDK at local Ollama, vLLM, or LocalAI deployments.

An application configures TornadoApi with one or more LLmProviders and API keys, then creates a Conversation from a ChatModel or model string. After appending system and user messages, it can call GetResponse() for text or GetResponseRich() and StreamResponseRich() for tool calls, multimodal content, and usage metadata. Model-requested Tool or ToolFunction calls can be resolved immediately through FunctionCallHandler and the conversation continued, or handled later. With LlmTornado.Mcp, a client creates an IMcpClient through McpClientFactory.CreateAsync(clientTransport), reads tools with ListTornadoToolsAsync(), passes them to ChatRequest, and executes remote calls through ResolveRemote. For agent workflows, LlmTornado.Agents coordinates specialist agents through an Orchestrator graph, Runner nodes, and Advancer edges; the SDK runs as a NuGet dependency inside a .NET application while the caller supplies hosted or local inference endpoints.

  1. A C# backend team needs to switch among OpenAI, Anthropic, Google, Groq, and other models primarily by changing ChatModel rather than rewriting request code.
  2. A .NET developer is building a multi-step workflow and needs Orchestrator, Runner, and Advancer to represent nodes, edges, handoffs, and parallel execution.
  3. An application team needs models to use weather, internal-service, or other MCP Server tools and wants to convert IMcpClient-discovered tools into Tornado Tool instances.
  4. A team running Ollama, vLLM, or LocalAI on its own infrastructure needs Conversation requests sent to a custom inference endpoint.
  5. A developer needs typed function-call parameters and a secondary model fallback for a structured extraction or workflow step, using ToolkitChat, ChatFunction, and ChatPlugin.

What are this agent's strengths and limitations?

Pros
  • A common TornadoApi, ChatModel, and Conversation interface spans multiple providers and can resolve the provider from a model name.
  • Agent orchestration explicitly includes Orchestrator, Runner, Advancer, handoffs, parallel execution, and Mermaid export.
  • MCP and A2A are available as dedicated NuGet integrations; the MCP example covers discovery, argument inference, remote execution, and returning results to the model.
  • It supports rich streaming, immediate or deferred tool resolution, and ResponseRichSafe APIs designed not to throw on network-level failures.
Limitations
  • Adopters must manage each hosted provider's API keys, available models, and network access; the examples do not operate those services for you.
  • Provider capabilities are not necessarily identical: detailed endpoint support is tracked in a Feature Matrix, and providers without strict JSON Schema support use a fallback that prefills "{".
  • The local-model path depends on an externally running Ollama, vLLM, or LocalAI service; the library supplies connectivity and request transformations rather than model hosting.
  • Microsoft.Extensions.AI, MCP, A2A, and agent-orchestration functionality are distributed across optional packages that must be installed and integrated as needed.

How do you install or deploy this agent?

From a .NET project directory, run:

dotnet add package LlmTornado

Add optional packages as needed:

dotnet add package LlmTornado.Agents
dotnet add package LlmTornado.Mcp
dotnet add package LlmTornado.A2A
dotnet add package LlmTornado.Microsoft.Extensions.AI
dotnet add package LlmTornado.Contrib

For hosted providers, supply that provider's API key when constructing TornadoApi. For a local deployment, new TornadoApi(new Uri("http://localhost:11434")) targets the default Ollama port.

How do you use this agent?

A minimal invocation configures a provider and key, then creates a conversation:

TornadoApi api = new TornadoApi(LLmProviders.OpenAi, "OPEN_AI_KEY");
string? response = await api.Chat.CreateConversation("gpt-5-mini")
.AppendUserInput("Hello")
.GetResponse();

For streamed text, use .StreamResponse(Console.Write). For MCP, install LlmTornado.Mcp, create an IMcpClient with McpClientFactory.CreateAsync(clientTransport), call ListTornadoToolsAsync(), and assign the returned List<Tool> to ChatRequest.Tools.

FAQ

Is it limited to OpenAI?
No. The README lists OpenAI, Anthropic, Google, Cohere, Groq, Mistral, DeepSeek, and other providers, and states that inference can change providers through the model selection.
Must it use a hosted API?
No. The README shows TornadoApi targeting http://localhost:11434 for Ollama and lists vLLM, Ollama, and LocalAI as supported local deployments.
How are model tool calls handled?
FunctionCallHandler in ChatStreamEventHandler can populate a FunctionResult immediately and continue the conversation, or the caller can defer handling from a GetResponseRich() result.
Can it work with MCP servers?
Yes. After installing LlmTornado.Mcp, an IMcpClient can list tools, those tools can be supplied in ChatRequest, and ResolveRemote can invoke the MCP Server.
What are the license and service-cost implications?
The library is MIT licensed. The README does not state model-service pricing; calls to commercial providers require the corresponding provider API keys.

Related agents