Auto-instrument every Model Context Protocol tool call (list_tools, call_tool, and read_resource) with zero code changes. Tool arguments and results are scanned for exfiltration and allowlist violations.
Free tier · No credit card · 2-minute setup
Every call_tool invocation is a traced span with the MCP server URL, tool name, input arguments, response, and end-to-end latency including server processing time.
Tool-call arguments are scanned for exfiltrated secrets and PII, and tools invoked outside your allowlist are flagged on the trace.
list_tools calls are traced too, so an agent that re-enumerates its tools every turn shows that cost explicitly instead of hiding it.
import fluiq
fluiq.instrument(api_key="fl_...") # patches MCP client automatically
fluiq.secure() # scans tool arguments and results
from mcp import ClientSession
from mcp.client.stdio import stdio_client
import asyncio
async def run():
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# list_tools is traced + cached after first call:
tools = await session.list_tools()
# call_tool is traced + cached by (tool_name, args):
result = await session.call_tool(
"search", {"query": "LLM observability"}
)
asyncio.run(run())Every call to these methods is automatically traced, no decorators, no wrappers, no manual spans.
ClientSession.list_tools()ClientSession.call_tool()ClientSession.list_resources()ClientSession.read_resource()ClientSession.list_prompts()ClientSession.get_prompt()Free tier. No credit card. Full traces, security scanning, and evals on your first MCP call.
Unlimited free traces · 1,000 evals / month · 14-day retention