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.
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
- OpenAI:
POST /v1/chat/completions,GET /v1/models - Ollama:
POST /api/chat,POST /api/generate,GET /api/tags,GET /api/version - Anthropic:
POST /v1/messages - Ops:
GET /status,GET /metrics(Prometheus)
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.