A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
The AI Operating System for Delphi. 100% native framework with RAG 2.0, autonomous agents, MCP protocol, and universal L
🌐 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 | 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, voxtral |
TAiDeepSeekChat | DeepSeek | deepseek-reasoner, deepseek-chat |
TAiKimiChat | Moonshot | kimi-k2, kimi-k2.5, kimi-k2-thinking |
TAiGroqChat | Groq | llama-4-scout, llama-4-maverick, kimi-k2, qwen3 |
TCohereChat | Cohere | command-a-03-2025, command-a-reasoning, command-a-vision |
TAiOllamaChat | Ollama | Any local model |
TAiLMStudioChat | LM Studio | Any local model |
TAiGenericChat | OpenAI-compatible | Any OpenAI-API endpoint |
Provider-agnostic code. Switch models or providers by changing one property:
AiConn.DriverName := 'OpenAI';
AiConn.Model := 'gpt-5.2';
AiConn.ApiKey := '@OPENAI_API_KEY'; // resolved from environment variable
// Switch to Gemini without changing anything else
AiConn.DriverName := 'Gemini';
AiConn.Model := 'gemini-3.0-flash';
AiConn.ApiKey := '@GEMINI_API_KEY';
| Feature | OpenAI (gpt-5.2) | Claude (4.6) | Gemini (3.0) | Grok (4) | Mistral | DeepSeek | Ollama |
|---|---|---|---|---|---|---|---|
| Text Generation | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Streaming (SSE) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Function Calling | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| JSON Mode / Schema | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Image Input | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| PDF / Files | ✅ | ✅ | ✅ | ⚠️ | ✅ | ❌ | ⚠️ |
| Image Generation | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Video Generation | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Extended Thinking | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ |
| Speech (TTS/STT) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ⚠️ |
| Web Search | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Computer Use | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| RAG (all modes) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| MCP Client/Server | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Agents | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Legend: ✅ Native | ⚠️ Tool-Assisted bridge | ❌ Not Supported
Two complementary retrieval engines with their own query languages:
Vector RAG — semantic and hybrid search over document embeddings:
MATCH documents SEARCH 'machine learning'
USING HYBRID WEIGHTS(semantic: 0.7, lexical: 0.3) FUSION RRF
WHERE category = 'tech' AND date > '2025-01-01'
RERANK 'neural networks' WITH REGENERATE
LIMIT 10
Graph RAG — knowledge graph with semantic search over entities and relationships:
MATCH (p:Person)-[r:WORKS_AT]->(c:Company)
WHERE c.city = 'Madrid' DEPTH 2
RETURN p, r, c
Graph-based multi-agent workflows with full thread safety:
TAIAgentManager — executes directed graphs of AI nodes via thread poolTAIAgentsNode — single execution unit; runs an LLM call, a tool, or custom logicTAIBlackboard — thread-safe shared state dictionary between all nodeslmFanout (parallel broadcast), lmConditional (routing), lmExpression (binding), lmManualjmAny (first arrival wins), jmAll (wait for all inputs)IAiCheckpointer persists full agent state between process restarts; built-in implementations: TAiFileCheckpointer (JSON files) and TAiDatabaseCheckpointer (FireDAC — SQLite, PostgreSQL, Firebird, etc.)Node.Suspend(Reason, Context) pauses a node and saves the checkpoint; TAiWaitApprovalTool provides a drop-in approval tool; resume with ResumeThread(ThreadID, NextNode, HumanInput)TAiChatConnectionFull implementation of the MCP standard for both consuming and exposing tools:
MCP Server — expose Delphi functions as MCP tools, callable by any MCP client (Claude Desktop, AI agents, etc.):
TAiFunctions → IAiMCPTool — any existing TAiFunctions component becomes an MCP server instantlyTAiMCPResponseBuilder for structured responses (text + files + media)MCP Client — consume any external MCP server from your Delphi app:
TAiFunctions component alongside native function definitionsChatTools bridge the gap between AI reasoning and real-world operations. They activate automatically based on gap analysis between SessionCaps and ModelCaps:
| Tool Interface | What it does | Implementations |
|---|---|---|
IAiPdfTool | Extract text from PDFs | Mistral OCR, Ollama OCR |
IAiVisionTool | Describe / analyze images | Any vision model |
IAiSpeechTool | Text-to-speech / speech-to-text | Whisper, Gemini Speech, OpenAI TTS |
IAiWebSearchTool | Live web search | Gemini Web Search |
IAiImageTool | Generate images | DALL-E 3, gpt-image-1, Gemini, Grok |
IAiVideoTool | Generate video | Sora, Gemini Veo |
TAiShell | Execute shell commands | Windows/Linux |
TAiTextEditorTool | Read/write/patch files | Diff-based editing |
TAiComputerUseTool | Control mouse and keyboard | Claude Computer Use, OpenAI |
Tools follow a common pattern: SetContext(AiChat) + Execute*(). They can run standalone, as function-call bridges, or as automatic capability bridges.
Introduced in v3.3 and refined in v3.4, the TAiCapabilities system replaces all manual feature flags with two declarative sets:
ModelCaps — what the model natively supports (e.g., [cap_Image, cap_Reasoning])SessionCaps — what the session needscap_GenImage in SessionCaps automatically routes image generation requests through a DALL-E or Gemini bridge// Default capabilities for all models of a provider
TAiChatFactory.Instance.RegisterUserParam('MyProvider', 'ModelCaps', '[cap_Image, cap_Pdf]');
TAiChatFactory.Instance.RegisterUserParam('MyProvider', 'SessionCaps', '[cap_Image, cap_Pdf, cap_GenImage]');
// Per-model override (e.g., a reasoning model)
TAiChatFactory.Instance.RegisterUserParam('MyProvider', 'my-model', 'ModelCaps', '[cap_Image, cap_Reasoning]');
TAiChatFactory.Instance.RegisterUserParam('MyProvider', 'my-model', 'ThinkingLevel', 'tlMedium');
Available capabilities: cap_Image, cap_Audio, cap_Video, cap_Pdf, cap_Reasoning, cap_WebSearch, cap_GenImage, cap_GenVideo, cap_TTS, cap_STT, cap_ComputerUse
ThinkingLevel controls reasoning depth: tlLow, tlMedium, tlHigh.
Two generations of FireMonkey components for building multimodal chat UIs:
Next-generation (v3.4) — Skia-native, virtualized, zero FMX child controls:
TAIChatView — single-canvas virtualized conversation renderer; only visible messages are painted; supports multi-message text selection, dark/light theme, context menu, long-press (mobile), copy-button feedback with timer, and a scrollbar that doesn't interfere with contentTAIChatInput — fully Skia-painted input bar with custom dropdown overlay (no TPopupMenu required), voice-mode indicator, file attachment chips, and TAIVoiceMonitor integration; layout adapts from 1 to N attachment chips automaticallyClassic components — FMX-layout-based, simpler to subclass:
TChatList — scrollable message container with Markdown rendering, code blocks, copy buttonsTChatBubble — individual message bubble (user / assistant / tool)TChatInput — text input bar with voice recording, file attachment, and send buttonBoth sets are compatible with all providers and work with streaming responses.
Full Delphi IDE support via the MakerAiDsg.dpk design-time package:
DriverName property shows a dropdown of all registered providers in the Object InspectorModel property lists all models for the selected providergit clone https://github.com/gustavoeenriquez/MakerAi.git
Before compiling any package, add all of these to Tools > Options > Language > Delphi > Library:
Source/Agents
Source/Chat
Source/ChatUI
Source/Core
Source/Design
Source/Embeddings
Source/MCPClient
Source/MCPServer
Source/Packages
Source/RAG
Source/Realtime
Source/Resources
Source/Tools
Source/Utils
Source/WebSocket
Compile and install in this exact order:
Source/Packages/MakerAI.dpk — Runtime core (~100 units)Source/Packages/MakerAi.RAG.Drivers.dpk — PostgreSQL/pgvector connectorSource/Packages/MakerAi.UI.dpk — FMX visual componentsSource/Packages/MakerAiDsg.dpk — Design-time editors (requires VCL + DesignIDE)Open Source/Packages/MakerAiGrp.groupproj to compile all packages at once.
API keys are resolved from environment variables using the @VAR_NAME convention:
AiConn.ApiKey := '@OPENAI_API_KEY'; // reads OPENAI_API_KEY from environment
AiConn.ApiKey := '@CLAUDE_API_KEY'; // reads CLAUDE_API_KEY
AiConn.ApiKey := '@GEMINI_API_KEY'; // reads GEMINI_API_KEY
AiConn.ApiKey := 'sk-...'; // or set a literal key directly
| Delphi Version | Support |
|---|---|
| 10.4 Sydney | Limited (minimum supported) |
| 11 Alexandria | Full support |
| 12 Athens | Full support |
| 13 Florence | Full support |
| 13.1 Florence | Full support (latest tested) |
Open Demos/DemosVersion31.groupproj to access all demos.
| Demo | Description |
|---|---|
010-Minimalchat | Minimal chat with Ollama and TAiChatConnection |
012-ChatAllFunctions | Full-featured multimodal chat (images, audio, streaming, tools) |
012-ChatWebList | Chat with web-based content list |
021-RAG+Postgres-UpdateDB | Build a vector RAG database with PostgreSQL/pgvector |
022-1-RAG_SQLite | Lightweight vector RAG with SQLite |
023-RAGVQL | VQL query language for semantic search |
025-RAGGraph | Knowledge graph RAG with GQL queries |
026-RAGGraph-Basic | Simplified graph RAG patterns |
027-DocumentManager | Document ingestion and management |
031-MCPServer | Multi-protocol MCP server (HTTP, SSE, StdIO) |
032-MCP_StdIO_FileManager | File manager exposed via MCP StdIO |
032-MCPServerDataSnap | MCP server using DataSnap transport |
034-MCPServer_Http_FileManager | File manager via MCP HTTP |
035-MCPServerWithTAiFunctions | TAiFunctions bridge to MCP |
036-MCPServerStdIO_AiFunction | StdIO MCP server with AI functions |
041-GeminiVeo | Video generation with Google Veo |
051-AgentDemo | Visual agent graph builder and runner |
052-AgentConsole | Console-based agent execution (conditional and parallel flows) |
053-DemoAgentesTools | Agents with integrated tool use |
054-AgentCheckpointDB | Durable agent execution: suspend/resume with TAiDatabaseCheckpointer (SQLite via FireDAC) |
060-AIChatUI | Next-generation TAIChatView + TAIChatInput components — full multimodal demo |
TAIChatView — next-generation Skia-native virtualized chat renderer (single canvas, no FMX child controls, multi-message text selection, dark/light theme, mobile long-press)TAIChatInput — fully Skia-painted input bar with custom dropdown overlay, attachment chips, voice indicator (no TPopupMenu / no FMX buttons)TAiRealtimeConnection + TAiOpenAiRealtimeSTT — real-time STT via WebSocket (24 kHz PCM16, VAD, streaming transcription; pure-Pascal TLS via Windows SChannel)cmSmartDispatch chat mode — two-pass intelligent routingTAiChatConnection.OnInternalReceiveDataEndTStringStream leak in async HTTP requests — FCurrentPostStream lifetime now correctly tied to request completionRegisterDefaultParams Max_Tokens key corrected in 10 driversApplyParamsToChat TryStrToFloat now locale-independentTChatBubble spurious vertical scrollbar eliminatedTChatInput.EnterAsSend propertyTAiDatabaseCheckpointer — FireDAC-based checkpoint persistence; works with SQLite, PostgreSQL, Firebird, MySQL, SQL Server, and any other FireDAC driverTInterlocked.Exchange(Boolean) (D12-only) replaced with Integer-based atomic; AddStream(AShareOwnership) boundary corrected to CompilerVersion >= 36; THashSet<T> boundary corrected to CompilerVersion >= 36TAiCapabilities system (ModelCaps / SessionCaps / ThinkingLevel)uMakerAi.RAG.Graph.Documents)reasoning_content preserved in multi-turn tool calls (DeepSeek, Kimi, Groq)TAiEmbeddingsConnection, TAiAudioPushStreamIAiPdfTool, IAiVisionTool, IAiSpeechTool, etc.)MIT License — see LICENSE.txt for details.
Copyright © 2024–2026 Gustavo Enríquez — CimaMaker
mcp-language-server gives MCP enabled clients access semantic tools like get definition, references, rename, and diagnos
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots