Building any agentic framework? Build it on toolnexus. Fast tool calling, any number of MCP servers, any agent skill and media generation, for any LLM, in eight languages.
One vendor-neutral agent library, ported by hand to JavaScript, Python, Go, Java, C#, Elixir,
Clojure and Rust, held to one conformance contract (SPEC.md) so the shared
examples/ produce the same output in every port.
An MCP server tool, an agent skill, your own function, a remote HTTP endpoint, a built-in
shell/file tool, a remote A2A agent and an in-process sub-agent are all the same thing to a
model: a named, described, schema'd callable (an insight borrowed from
opencode). toolnexus puts every one of them behind one
Tool interface, emits the schema in OpenAI / Anthropic / Gemini shape, and drives any model with
them through one client loop.
npm i toolnexus # JavaScript / TypeScript (npm)
pip install toolnexus # Python (PyPI)
go get github.com/muthuishere/toolnexus/golang # Go
dotnet add package Toolnexus # C# / .NET (NuGet)
{:toolnexus, "~> 0.28"} # Elixir (mix.exs deps, Hex)
# Java (Maven Central): io.github.muthuishere:toolnexus:0.28.0
# Clojure (deps.edn, Clojars): net.clojars.muthuishere/toolnexus {:mvn/version "0.28.0"} (JVM and cljgo)
cargo add toolnexus # Rust (crates.io)
Point it at an mcp.json (the standard Claude-desktop-style config) and a skills/ folder of
SKILL.md files, then run:
import { createToolkit, createClient } from "toolnexus"
const tk = await createToolkit({ mcpConfig: "./mcp.json", skillsDir: "./skills" })
const agent = createClient({ baseUrl: "https://openrouter.ai/api/v1", style: "openai", model: "openai/gpt-4o-mini" })
const { text } = await agent.run("Refund order 4021 using the policy.", { toolkit: tk })
The key comes from OPENROUTER_API_KEY because the host is openrouter.ai: a key is only ever
sent to the host it belongs to. A local server or proxy needs apiKey or apiKeyEnv
(recipe). The same shape in every language:
Quickstart.
SKILL.md standard, loaded on demand through one skill tool. SkillssetMode / setModel switch a running agent without a restart. In-process clientcreateClassifier and judge adapters: yes/no, pick-one and score answers as typed values, on any System One endpoint or OpenAI's Decisions API. Typed decisions · BackendsRequest; a waitFor host resolves it, or the run returns pending and resumes later. SuspensionafterRound hook), streaming with retry events, retries and resilience, opt-in model fallback on overload, stop-reason recovery, reactive compaction on context overflow, prompt caching and tool tiers, sub-agents, observability. Streaming · Resilience · Sub-agentsExact per-port spellings and any port-specific gaps are in CHANGELOG.md and each
port's API reference.
Measured against 21 frameworks on a zero-cost mock model, per language. Honest summary: lowest per-request overhead over MCP in Python, JavaScript, C# and Rust, level with Eino in Go, and on the JVM 5% behind LangChain4j in the five-round table but ahead of it (1.63 vs 1.84 ms p50) in a separate 7-round sitting after the in-house Java stdio MCP client (#204). Every row, loss included: Nov 2026 standing.
| language | package | docs |
|---|---|---|
| JavaScript / TypeScript | toolnexus | js/ · API |
| Python | toolnexus | python/ · API |
| Go | github.com/muthuishere/toolnexus/golang | golang/ · API |
| Java | io.github.muthuishere:toolnexus | java/ · API |
| C# / .NET | Toolnexus | csharp/ · API |
| Elixir | toolnexus | elixir/ · API |
| Clojure | net.clojars.muthuishere/toolnexus | clojure/ · API |
| Rust | toolnexus | rust/ · API |
Built something on toolnexus? Open a PR adding one line here.
SPEC.md — the cross-language contract; §0 is the one-page conformance suite. A behaviour change lands in all eight ports or it is not done.CHANGELOG.md — what shipped. Changes go through OpenSpec first; see CLAUDE.md and PUBLISHING.md.MIT — see LICENSE.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |