Integrations

Use OpenNodes from the tools you already have

Three ways in, all free and open source: an MCP server for editors and agents, an Ollama-compatible router for local-AI apps, and an OpenAI-compatible gateway for SDKs and frameworks. Nothing here routes your prompts through OpenNodes: discovery is metadata, invocation goes straight to the node.

Editors and assistants (MCP)

Any MCP host gets four tools — recommend, search_offerings, get_offering, estimate — from one stdio server. The advisor extracts features from your prompt locally and sends only those to the registry; the prompt itself never leaves your machine.

Claude Code MCP

One command:

claude mcp add --scope user opennodes -- npx -y @opennodes/cli mcp

Claude Desktop MCP

Add to claude_desktop_config.json (Settings → Developer → Edit Config):

{ "mcpServers": { "opennodes": { "command": "npx", "args": ["-y", "@opennodes/cli", "mcp"] } } }

Cursor MCP

Add to ~/.cursor/mcp.json (or Settings → MCP → Add new server):

{ "mcpServers": { "opennodes": { "command": "npx", "args": ["-y", "@opennodes/cli", "mcp"] } } }

VS Code (Copilot agent mode) MCP

Add to .vscode/mcp.json in the workspace, or the user mcp.json:

{ "servers": { "opennodes": { "type": "stdio", "command": "npx", "args": ["-y", "@opennodes/cli", "mcp"] } } }

Windsurf MCP

Add to ~/.codeium/windsurf/mcp_config.json:

{ "mcpServers": { "opennodes": { "command": "npx", "args": ["-y", "@opennodes/cli", "mcp"] } } }

Any remote-MCP host or agent framework MCP over HTTP

The hosted registry is itself an MCP server (streamable HTTP, stateless) — no install at all:

https://registry.opennodes.io/mcp

Point LangGraph, the OpenAI Agents SDK, n8n, or any MCP-capable agent at it to give the agent discovery, task-based recommendation and enforceable pre-pricing as tools.

Ollama apps (local, LAN, and verified public models)

npx @opennodes/ollama-router starts an Ollama-compatible endpoint on port 11435 whose model list spans your local Ollama, other machines on your LAN, and verified public nodes — plus auto, auto-cheap, auto-fast, auto-quality and auto-private (never leaves your network). Every app below works unchanged: it only needs the Ollama address.

Ollama CLI Ollama

npx @opennodes/ollama-router
export OLLAMA_HOST=127.0.0.1:11435      # PowerShell: $env:OLLAMA_HOST="127.0.0.1:11435"
ollama list
ollama run auto-private "summarize this confidential note …"

Open WebUI Ollama

Admin Panel → Settings → Connections → Ollama API: set the URL to the router. From Docker, use the host alias:

http://host.docker.internal:11435

Or, as an OpenAI connection, use the gateway (below) with its token as the key.

Continue (VS Code / JetBrains) Ollama

In config.yaml:

models:
  - name: OpenNodes auto
    provider: ollama
    model: auto
    apiBase: http://localhost:11435

Zed Ollama

In settings.json:

{ "language_models": { "ollama": { "api_url": "http://localhost:11435" } } }

JetBrains AI Assistant · Msty · Enchanted · Raycast · LM Studio clients Ollama

Wherever the app asks for the Ollama host or URL, enter http://localhost:11435. The merged model list appears in the app's picker; choose auto-private for anything that must stay on your machines.

OpenAI-compatible SDKs, frameworks and apps (gateway)

npx @opennodes/cli gateway --port 4141 --token dev-secret runs a local OpenAI-compatible server over discovered nodes. Models are concrete offerings (node_id/offering_id), your aliases, query-defined virtual models, and the advisor-routed onp/auto family. Every call is pinned to a card revision, policy-checked, receipted and logged; a price change is recovered transparently.

OpenAI SDK — Python OpenAI API

from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:4141/v1", api_key="dev-secret")
r = client.chat.completions.create(model="onp/auto", messages=[{"role": "user", "content": "Hello"}])
print(r.choices[0].message.content)

OpenAI SDK — JavaScript / TypeScript OpenAI API

import OpenAI from "openai";
const client = new OpenAI({ baseURL: "http://127.0.0.1:4141/v1", apiKey: "dev-secret" });
const r = await client.chat.completions.create({ model: "onp/auto-cheap", messages: [{ role: "user", content: "Hello" }] });

LangChain · LlamaIndex · LiteLLM · Vercel AI SDK · n8n · Dify OpenAI API

Use their OpenAI provider with the base URL http://127.0.0.1:4141/v1 and the gateway token as the key; pick onp/auto or a concrete offering as the model name. LiteLLM: openai/onp/auto with api_base set to the gateway.

Spend and receipts OpenAI API

Read the ledger at any time:

curl http://127.0.0.1:4141/gateway/receipts   # total cost, per-call receipts
curl http://127.0.0.1:4141/gateway/advice     # why onp/auto picked what it picked

Imported catalog providers (OpenRouter, Hugging Face) need your own key for that host: --key openrouter.ai=sk-or-….

In the browser, on the desktop, and for operators

The registry web app Browser

registry.opennodes.io: catalog with hardware and measured performance, model and node pages, the advisor, a playground, and a multi-model chat (compare, jury, pipeline, iterative) that talks straight from your browser to the nodes — scenarios save locally and share by link, no account.

Surge (desktop) Desktop

A desktop client that spans both layers — models through OpenNodes, tools through MCP — with the advisor, verified receipts under every reply, a spend policy, and a one-click private mode. Pre-release: Windows installer, source on GitHub (Apache-2.0).

Serve your own model Operator

pipx install onp-node
onp-node init --engine http://127.0.0.1:11434/v1 --id org.example.ai --public-url https://ai.example.org
onp-node serve && onp-node check && onp-node register https://registry.opennodes.io

The node id is the reverse of the host that serves it; registration proves control of that host, then the automated battery earns the tier.

Run your own registry Operator

npx @opennodes/registry        # web app + API + MCP on http://127.0.0.1:4300

Production recipe (Postgres, TLS, backups, re-imports): deploy/registry. Point any client above at it with ONP_REGISTRY.