Skip to main content

Use your existing tools with the mesh

The IICP client ships a local compat proxy that speaks the OpenAI, Ollama, and Anthropic HTTP APIs. Run it, point any tool you already use at it, and every request is routed across the IICP mesh — no code changes to your tool.

Part of the unified iicp-client (one component does node, query, and proxy). The proxy is a consumer: it binds loopback only and never registers with the directory. See also the client quickstart.

The gist: keep the AI tools you already use (anything that talks to OpenAI, Ollama, or Anthropic). Run iicp-node proxy, set the tool's base URL to it, and every request routes across the mesh — no code changes. The full guide has the two commands and example tool configs.

Two commands

Install the proxy extra and run it:

# Python
pip install 'iicp-client[proxy]'
iicp-node proxy                       # → http://127.0.0.1:9483

# TypeScript
npm i -g @iicp/client
iicp-node proxy

# Rust
cargo install iicp-client --features proxy
iicp-node proxy

It listens on 127.0.0.1:9483 by default (override with --port / IICP_PROXY_PORT). Every response carries a Server: iicp-proxy header so you can tell the mesh answered.

Point your tool at it

Just set the base URL to the proxy. Examples:

# OpenAI SDK / LangChain / LlamaIndex / Cursor / liteLLM
export OPENAI_BASE_URL=http://127.0.0.1:9483/v1
export OPENAI_API_KEY=unused                     # the mesh handles auth/credits

# Ollama tools (Open WebUI, Continue.dev, aider, Jan)
export OLLAMA_HOST=http://127.0.0.1:9483

# Anthropic SDK
export ANTHROPIC_BASE_URL=http://127.0.0.1:9483

# or just curl it
curl http://127.0.0.1:9483/v1/chat/completions \
  -H 'content-type: application/json' \
  -d '{"model":"iicp","messages":[{"role":"user","content":"hello mesh"}]}'

Runtime self-description

Chat requests include a small system context by default. It tells the selected model that it is being accessed through IICP, identifies the active intent and client version, and tells the model not to invent missing route facts. It does not expose endpoints, tokens, full node identities, candidate lists, scores, or private policy state. It is factual runtime context, not an IICP assistant persona or a prompt-injection defense.

Applications that already own the complete system context can send X-IICP-Runtime-Identity: disabled. Use required when dispatch must stop if the selected interface cannot carry the context. Raw task submission and non-chat intents are unchanged.

Supported surfaces

Use model: "iicp" to let the mesh pick the best node, or a specific model name to filter. Identical behaviour across Python, TypeScript, and Rust.

Already running a node?

Co-host the proxy next to your provider node in one process — the node stays network-facing, the proxy stays on loopback, and a proxy crash never drops the node:

iicp-node serve --with-proxy   # node on 9484+ (public) + proxy on 127.0.0.1:9483

Want to provide compute instead of just consuming it? See running a node.