The AI Operating System for Delphi. 100% native framework with RAG 2.0, autonomous agents, MCP protocol, and universal LLM connector. Supports OpenAI, Claude, Gemini, Ollama, and more. Delphi 10.4+ (limited), full support from Delphi 12 Athens.
# Add to your Claude Code skills
git clone https://github.com/gustavoeenriquez/MakerAiNo comments yet. Be the first to share your thoughts!
🌐 Official Website: https://makerai.cimamaker.com 📖 Manual: https://www.gustavoenriquez.com/book-makerai — available in English and Spanish
Free Pascal / Lazarus port available — Full port of MakerAI Suite for FPC 3.2+ (12 LLM drivers, RAG, Agents, MCP, Embeddings). See the
fpcbranch.
Most AI libraries for Delphi stop at wrapping REST calls. MakerAI is different.
Yes, MakerAI includes native, provider-specific components that give you direct, full-fidelity access to each provider's API — every model parameter, every response field, every streaming event, exactly as the provider defines it.
But on top of that, MakerAI is a complete AI application ecosystem that lets you build production-grade intelligent systems entirely in Delphi:
Whether you need a simple one-provider integration or a multi-agent, multi-provider, retrieval-augmented production system, MakerAI covers the full stack — natively in Delphi.
v3.4 is fully tested and compatible with Delphi 13.1 Florence (CompilerVersion 37.1), in addition to the existing range from Delphi 10.4 Sydney through Delphi 13 Florence.
The biggest infrastructure change in v3.4: TAiChatConnection no longer force-loads all providers at startup. Each driver now self-registers only when explicitly imported, eliminating unnecessary initialization overhead:
// Load only what you need
uses uMakerAi.Chat.AiConnection, uMakerAi.Chat.OpenAi, uMakerAi.Chat.Claude;
// Load all drivers at once (legacy behavior)
uses uMakerAi.Chat.Initializations;
New universal connector for real-time speech-to-text via WebSocket:
TAiRealtimeConnection — provider-agnostic STT connector; switch providers via DriverNameTAiOpenAiRealtimeSTT — full OpenAI Realtime API implementation (24 kHz PCM16, VAD modes, streaming transcription)New ChatMode value for automatic two-pass routing:
IAiImageTool, IAiSpeechTool, IAiWebSearchTool, etc.)| Provider | New / Updated Models | |----------|----------------------| | OpenAI | gpt-5.4, gpt-5.4-mini, gpt-5.5, gpt-image-1 | | Claude | claude-opus-4-7 (Adaptive Thinking), claude-sonnet-4-6, claude-haiku-4-5 | | Gemini | gemini-3.1-pro, gemini-3-flash, gemini-3.1-flash-lite, gemini-3.1-flash-image | | Grok | grok-4-fast, grok-3, grok-code-fast-1 | | Mistral | magistral-medium/small, devstral, voxtral | | Groq | llama-4-scout/maverick, kimi-k2, qwen3, compound-beta | | Kimi | kimi-k2, kimi-k2.5, kimi-k2-thinking | | Cohere | command-a-03-2025, command-a-reasoning, command-a-vision |
TAiAgentManager.Run declared virtual — proper subclassing now supportedFJoinInputs cleared after each execution; eliminates premature firing on retries and loopsTChatInput.EnterAsSend — new property (default False): Enter sends the prompt, Shift+Enter / Ctrl+Enter inserts a line breakTChatBubble — eliminated spurious vertical scrollbar (ShowScrollBars := False)thinking block are now correctly omitted for claude-opus-4-7 models. Anthropic manages sampling internally for these models; sending these parameters caused HTTP 400 errors.RegisterDefaultParams — Max_Tokens key — corrected in 10 drivers (Claude, Gemini, Mistral, Groq, DeepSeek, Grok, Kimi, LMStudio, GenericLLM, Ollama). The wrong key MaxTokens was never resolved by RTTI to the Max_tokens property, causing Max_Tokens to be silently ignored when set via RegisterDefaultParams.ApplyParamsToChat — locale-independent float parsing — TryStrToFloat now tries invariant format (dot decimal) first, then falls back to the system locale. Both Temperature=0.7 and Temperature=0,7 are valid regardless of regional settings.MCP concurrent tool calls — race condition (uMakerAi.MCPClient.Core.pas): When a model responded with two or more tools from the same MCP server in a single turn, ParseChat launched all tool calls as parallel TTasks. Since TMCPClientStdIo shares a single process/pipe per instance (no synchronization), concurrent calls corrupted the JSON-RPC communication, causing intermittent failures. Fixed by adding FCallLock: TCriticalSection to TMCPClientCustom — calls to the same server are now serialized while calls to different servers still run in parallel.
EAggregateException on tool errors — Claude driver (uMakerAi.Chat.Claude.pas): The local _CreateTask procedure in TAiClaudeChat.ParseChat lacked the try/except present in the base class. Any exception raised inside a tool task (MCP timeout, network error, etc.) escaped unhandled, causing TTask.WaitForAll to wrap it in an EAggregateException and crash the application. Fixed to match base class behavior: exceptions are caught, reported via OnError, and the tool receives an error response so the conversation can continue.
┌──────────────────────────────────────────────────────────────────┐
│ Your Delphi Application │
└────┬──────────────────┬─────────────────┬────────────────────────┘
│ │ │
┌────▼────┐ ┌─────────▼──────────┐ ┌──▼────────────────────────┐
│ ChatUI │ │ Agents │ │ Design-Time │
│ FMX │ │ TAIAgentManager │ │ Property Editors │
│ Visual │ │ TAIBlackboard │ │ Object Inspector support │
│ Comps │ │ Checkpoint/Approve │ └───────────────────────────┘
└────┬────┘ └─────────┬──────────┘
│ │
┌────▼──────────────────▼──────────────────────────────────────────┐
│ TAiChatConnection — Universal Connector │
│ Switch provider at runtime via DriverName property │
└──────────────────────────────┬───────────────────────────────────┘
│
┌──────────────────────────────▼───────────────────────────────────┐
│ Native Provider Drivers (direct API access, full fidelity) │
│ OpenAI · Claude · Gemini · Grok · Mistral · DeepSeek · Kimi │
│ Groq · Cohere · Ollama · LM Studio · GenericLLM │
└──────────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────┼────────────────────────┐
│ │ │
┌────▼────────┐ ┌────────────▼────────┐ ┌───────────▼─────────┐
│ ChatTools │ │ RAG │ │ MCP │
│ PDF/Vision │ │ Vector (VQL) │ │ Server (HTTP/SSE │
│ Speech/STT │ │ Graph (GQL) │ │ StdIO/Direct) │
│ Web Search │ │ PostgreSQL/SQLite │ │ Client │
│ Shell │ │ HNSW · BM25 · RRF │ │ TAiFunctions bridge│
│ ComputerUse│ │ Rerank · Documents │ └─────────────────────┘
└─────────────┘ └─────────────────────┘
MakerAI gives you two ways to work with each provider, which you can mix freely:
Full, provider-specific access to every API feature. Use when you need complete control:
| Component | Provider | Latest Models |
|-----------|----------|---------------|
| TAiOpenChat | OpenAI | gpt-5.4, gpt-5.4-mini, gpt-5.5, gpt-image-1 |
| TAiClaudeChat | Anthropic | claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5 |
| TAiGeminiChat | Google | gemini-3.1-pro, gemini-3-flash, gemini-3.1-flash-lite |
| TAiGrokChat | xAI | grok-4-fast, grok-3, grok-code-fast-1 |
| TAiMistralChat | Mistral AI | magistral-medium, devstral, vo