MCP Tools (T-Pillar)
How Liate connects to MCP tool servers using Stdio, SSE, and Streamable HTTP transports.
The T-Pillar of liate.json connects your agent to any Model Context Protocol (MCP) tool server. Liate natively supports all 3 MCP transport types — no plugins or extensions needed.
Once connected, Liate calls tools/list to discover available tools and registers them with the LLM. During the ReAct loop, when the LLM emits a tool call, OM automatically executes it and feeds the result back.
The 3 MCP Transports
1. Stdio (Local Binary)
uvx, npx, and compiled executables.2. SSE (Server-Sent Events)
3. Streamable HTTP
Stdio Examples (Local Tools)
{
"T": {
"time": {
"command": "uvx",
"args": ["mcp-server-time"],
"tools": ["get_current_time"]
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"],
"tools": ["*"]
},
"websearch": {
"command": "websearch.exe",
"tools": ["web_search", "news_search"]
},
"python_tool": {
"command": "python",
"args": ["my_mcp_server.py"],
"tools": ["*"]
}
}
}Windows Note: Liate auto-converts npx → npx.cmd on Windows. No manual adjustment needed.
SSE Examples (Remote Services)
{
"T": {
"email": {
"command": "sse",
"url": "https://mcp.agentmail.to/sse?apiKey=am_us_inbox_your_key",
"tools": ["list_inboxes", "list_messages", "send_email"]
},
"github": {
"command": "sse",
"url": "https://api.githubcopilot.com/mcp/sse",
"tools": ["*"]
}
}
}Streamable HTTP Examples
{
"T": {
"database": {
"url": "https://mcp.mydb.com/mcp",
"tools": ["query", "insert", "update"]
},
"payments": {
"url": "https://mcp.razorpay.com/v1/mcp",
"tools": ["create_payment_link", "check_payment_status"]
}
}
}Tool Filtering
Use tools to whitelist only the tools your agent needs. This reduces system prompt tokens and prevents the LLM from calling irrelevant tools.
"tools": ["*"] // Expose all tools
"tools": ["get_current_time"] // Only this one tool
"tools": ["web_search", "news_search"] // Two specific toolsTool Approval Gate
For sensitive tools (payments, email sending, file deletion), you can require human approval before each call. The approval is handled via WebSocket — the UI prompts the user before Liate executes.
{
"E": {
"REQUIRE_APPROVAL": "true",
"AUTO_APPROVE_TOOLS": "get_current_time,web_search"
}
}LLM requests tool → Liate checks E.REQUIRE_APPROVAL
├── Tool in AUTO_APPROVE_TOOLS → Execute immediately
└── Tool not in list → WebSocket: { type: "tool_approval_request", tool: "send_email" }
├── User approves → Execute tool → Continue
└── User denies → "Tool execution denied" → LLM tries alternativeReal-World Agent Examples
Email Agent (AgentMail SSE Gateway):
{
"L": "sarvam/sarvam-105b",
"A": { "name": "email-agent", "intent": "You are an email assistant. List, read, and send emails on behalf of the user." },
"T": {
"agentmail": {
"command": "sse",
"url": "https://mcp.agentmail.to/sse?apiKey=$AGENTMAIL_KEY",
"tools": ["list_inboxes", "list_messages", "send_email"]
}
},
"E": { "SARVAM_API_KEY": "$SARVAM_API_KEY" }
}Time Agent (Local uvx):
{
"L": "sarvam/sarvam-105b-conversations",
"A": {
"name": "time-agent",
"intent": "You are a time analyst. Always use Asia/Kolkata timezone for Indian time.",
"skills": "./skills.md"
},
"T": {
"time": { "command": "uvx", "args": ["mcp-server-time"], "tools": ["get_current_time"] }
},
"E": { "SARVAM_API_KEY": "$SARVAM_API_KEY" }
}