Loop
How it worksThe loopWhy LoopPricingDocs
guide Mistral · a few minutes

Connect Loop to Mistral.

Loop is a remote MCP server. Mistral speaks MCP in two places — Le Chat supports custom MCP connectors, and the Mistral Agents API registers remote MCP servers through the mistralaiPython SDK. Either way, Loop’s four tools let Mistral search, verify, and act on real local businesses in Kreuzberg, Berlin.

option 1 Le Chat — custom MCP connector
1

Open the Connectors page

In Le Chat, open the Connectors page, click + Add Connector, and switch to the Custom MCP Connector tab. Adding a connector is an administrator-only action — on Free, Pro, and Student plans the account owner is the administrator by default.

2

Add Loop as the server URL

Set the connector name to loop (no spaces) and paste the server URL below. Loop needs no authentication for anonymous access, so click Connectand you’re done.

MCP server URL — copy this
https://stayinloop.dev/mcp
3

Use Loop in a conversation

Enable the loop connector for a chat. Mistral can now call search, get_details, verify, and report against real Kreuzberg restaurants.

Custom MCP connectors are a current Mistral feature; exact labels in the Le Chat UI can change. If a button name differs from what you see here, look for the equivalent Add Connector → Custom MCP flow. See Mistral’s MCP connector docs for the canonical steps.

option 2 Mistral Agents API — Python SDK
1

Install the SDK with agent extras

The MCP helpers live behind the agents extra of the mistralai package.

shell
pip install "mistralai[agents]"
2

Register Loop on a RunContext

Mistral connects remote MCP servers with MCPClientSSE and SSEServerParams from mistralai.extra.mcp.sse. Register the client on a RunContext, then run a conversation — Loop’s tools are exposed to the agent automatically.

loop_agent.py
import asyncio
import os

from mistralai.client import Mistral
from mistralai.extra.run.context import RunContext
from mistralai.extra.mcp.sse import MCPClientSSE, SSEServerParams

MODEL = "mistral-medium-latest"


async def main():
    client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

    # Loop is a remote, streamable-HTTP MCP server. The mistralai SDK's
    # remote-MCP helper (MCPClientSSE) speaks the SSE/HTTP transport.
    loop = MCPClientSSE(
        sse_params=SSEServerParams(url="https://stayinloop.dev/mcp", timeout=100)
    )

    async with RunContext(model=MODEL) as run_ctx:
        await run_ctx.register_mcp_client(mcp_client=loop)

        result = await client.beta.conversations.run_async(
            run_ctx=run_ctx,
            inputs="Find a vegan-friendly restaurant with outdoor seating in Kreuzberg, verify how fresh the data is, and report the outcome.",
        )
        print(result.output_as_text)


if __name__ == "__main__":
    asyncio.run(main())

Note: the mistralai SDK’s remote-MCP client is named MCPClientSSE (it speaks the SSE/HTTP transport); there is no separate MCPClientStreamableHTTPclass in the current SDK. Loop’s endpoint works over this transport. This mirrors Mistral’s own remote-MCP example; see the Mistral MCP docs for the full Agents API reference.

Have an API key?

A free key roughly doubles your rate limits (60 reads/min vs 30 for anonymous). In Le Chat, append ?key=sk_live_… to the connector URL:

Le Chat server URL — with key
https://stayinloop.dev/mcp?key=sk_live_YOUR_KEY

In the Python SDK, pass it as an Authorization header instead:

SSEServerParams — with key
loop = MCPClientSSE(
    sse_params=SSEServerParams(
        url="https://stayinloop.dev/mcp",
        headers={"Authorization": "Bearer sk_live_YOUR_KEY"},
        timeout=100,
    )
)

Get a free key at stayinloop.dev/#pricing — no credit card, instant.

try this prompt

Find me a quiet restaurant with outdoor seating and vegan options in Kreuzberg tonight — then verify how fresh the data is, and report back whether the result was correct.

This exercises all four tools: search finds candidates, verify re-checks freshness live, and report records the outcome — updating the record’s confidence for every future agent that calls Loop.

← Full API referenceWatch your calls on the signals board →