Skip to main content
Glama

openlocal

Offene Werkzeuge. Lokale Köpfe. Keine Cloud.

Ein Werkzeuggürtel, den kleine lokale Modelle tatsächlich nutzen können – und die Belege, um es zu beweisen.

CI PyPI Python Dependencies License


pip install openlocal
openlocal quickstart

Das ist alles. quickstart findet den Modellserver, den Sie bereits ausführen – ollama, LM Studio, llama.cpp, vLLM – schreibt Ihre Konfiguration, misst, welches Tool-Calling-Protokoll Ihr Modell tatsächlich nutzen kann, und führt eine echte Aufgabe aus, damit Sie es in Aktion sehen:

$ openlocal quickstart
openlocal quickstart - looking for a model server...
found ollama at http://127.0.0.1:11434/v1 with 6 model(s)
wrote ~/.openlocal/models.toml
default model: qwen3-4b  (served as qwen3:4b)
measuring which tool protocol this model can drive...
  -> native tool calling

demo: Read notes.md and tell me how many lines it has.
  tool     file_read
  final

  The file notes.md has 3 lines.

You are set up. Try:
  openlocal run "list the files here and summarise what this project is"
  openlocal eval          # score this model on 15 deterministic tool tasks
  openlocal mcp           # serve these tools to Claude Code over MCP

Warum openlocal

🪶 Null Abhängigkeiten

Reine Standardbibliothek. Installiert in Sekunden, läuft auf einem Raspberry Pi und kann nicht durch die Veröffentlichung eines anderen kaputt gemacht werden.

🔌 Funktioniert mit dem, was Sie haben

Alles, was die OpenAI /v1 API spricht. Eine URL, keine Adapter, keine Konten.

📊 Gemessen, nicht behauptet

10 Modelle von 9 Anbietern, bewertet anhand von 17 deterministischen Aufgaben. Kein LLM-Richter – jede Prüfung ist ein Datei-Diff oder ein Regex.

🧰 Ein Register, zwei Oberflächen

Die gleichen 8 Werkzeuge betreiben einen MCP-Server (Claude Code, jeder MCP-Client) und eine lokale Modell-Agentenschleife.

🩹 Abgestimmt auf echte Fehler

Jede ergonomische Regel hier wurde durch ein Modell bezahlt, das kaputt ging. Die Lektionentabelle ist der Teil, den Sie sonst nirgendwo bekommen.

🧩 Einen Anbieter durch Bearbeiten von TOML hinzufügen

Neue Modellfamilie? Bearbeiten Sie families.toml, führen Sie openlocal probe aus, senden Sie einen PR. Kein Python nötig.

Related MCP server: Hermes MCP Server

Die Bestenliste

Gleiche Aufgaben, gleiche Werkzeuge, ein Modell nach dem anderen, zwei Durchläufe pro Modell. tools ist das Protokoll, das jedes Modell gemessen verwendet hat – nicht das, was seine Dokumentation behauptet.

Modell

Anbieter

Werkzeuge

Bestanden

Bestehensquote

Fehlerhafte JSON

Tok/s

qwen3.8-4b

Alibaba

native

17/17

100%

0

40.4

glm-4.7-flash

z.ai

native

17/17

100%

0

39.9

qwen3.8-27b

Alibaba

native

17/17

100%

0

16.6

nemotron-nano-4b

NVIDIA

native

16/17

94%

0

54.9

gemma-4-e4b

Google

native

16/17

94%

0

50.3

gpt-oss-20b

OpenAI

native

16/17

94%

45.3

granite-4.1-3b

IBM

native

15/17

88%

4

66.0

llama-3.1-8b

Meta

native

14/17

85%

2

33.4

mistral-small-3.2

Mistral

native

14/17

82%

0

11.1

phi-4-mini

Microsoft

native

13/17

79%

0

61.5

¹ Der Harmony-Parser von gpt-oss lehnt einige seiner eigenen Tool-Aufrufe ab (llama.cpp antwortet 500). Die Wiederholungsleiter des Clients stellt jeden wieder her – die Spalte retries in RESULTS.md hält das ehrlich.

Reproduzieren Sie es: openlocal leaderboard --repeat 2

Warum Ihr kleines Modell bei Werkzeugen versagt

Ein 3B-Modell versagt nicht, weil es dumm ist. Es versagt, weil Tool-Ausgabe ein Prompt ist und die meisten Tool-Ausgaben für Menschen geschrieben sind. Alles unten wurde gemessen – behalten, wenn die Punktzahl stieg, rückgängig gemacht, wenn nicht.

Was kaputt ging

Die Lösung

Gemessener Effekt

"Was ist Zeile 300?" → Modell antwortete Zeile 311

jede Zeile nummerieren: 300| row 300

in einem Durchgang behoben, modellübergreifend

Modell durchlief eine 500-zeilige Datei eine Zeile pro Durchgang

Fußzeilen geben Fakten an, keine Befehle ("Datei wird fortgesetzt" ≠ "erneut aufrufen mit…")

phi: 12 verschwendete Schritte → 2

Prosa statt eines Tool-Aufrufs

Prosa ohne Tool = die endgültige Antwort (nur nativ)

phi: 51 fehlerhafte Antworten → 5

…aber "Klar, ich verwende file_grep" ist ein Plan

Absichtserkennung: Pläne werden angestoßen, Antworten werden akzeptiert

Läufe hörten auf, bei Absichten zu enden

file_read(notes.md) als Text eingegeben

Prosa-Aufrufsyntax wird geparst und ausgeführt

verschwendete Durchgänge beseitigt

{"limit": None}, nachgestellter Müll, geteilte Objekte

JSON-Reparatur: Klammer-Scan, Enden schließen, Python-Literale, Fragment-Zusammenführung

phi bad_json 5 → 0

Modell schrieb die Datei bevor es die Quelle las

Erkennung von veralteten Schreibvorgängen zum Abschlusszeitpunkt

llama: 13 → 15 / 15

Modell riet "44" und wiederholte es, wenn es angestoßen wurde

ein Durchgang von tool_choice: "required"

granite erholte die Aufgabe

Las eine 4-zeilige CSV perfekt, sagte die Summe sei 40

ein calc-Tool – und eine Wache, damit es nicht vor dem Lesen verwendet werden kann

granite: +2 Aufgaben

Schrieb die Ausgabedatei, ohne jemals die Quelle zu lesen

Erkennung von aus der Luft gegriffenen Schreibvorgängen zum Abschlusszeitpunkt

qwen-4b über MCP erholte sich

Kopierte die N|-Referenzpräfixe in Bearbeitungsziele

file_edit entfernt sie, wenn der Rohtext nicht übereinstimmt

edit_code: 10/10 Modelle bestehen

Gleicher Aufruf, für immer (A→B→A→B)

Wiederholungswächter spielt das zwischengespeicherte Ergebnis erneut ab

llama-Paginierungsschleife verschwunden

Server 500 auf eigener Tool-Aufruf-Syntax

Wiederholungsleiter: wie angefragt → wärmer → gleicher Durchgang ohne tools

gpt-oss: 11/15 → 14/15

Rückgängig gemacht: eine weitere System-Prompt-Regel

granite 12/15 → 11/15. Weniger Regeln gewinnen.

MCP ist ein erstklassiger Bürger, kein Wrapper

openlocal eval --via-mcp führt die gesamte Evaluierungssuite erneut aus, wobei die Werkzeuge über einen echten stdio-MCP-Server bereitgestellt werden – Schemas über die Leitung, Ergebnisse als Inhaltsblöcke, ein Unterprozess pro Aufgabe. Die Ergebnisse stimmen mit den prozessinternen Zahlen überein, und das ist der Punkt: Was Claude Code erlebt, wurde gemessen.

Verwenden Sie es von Claude Code (oder einem beliebigen MCP-Client)

pip install "openlocal[mcp]"
claude mcp add openlocal -- openlocal mcp

Die gleichen 10 Werkzeuge, die Ihr lokales Modell verwendet, jetzt in Claude Code. finish bleibt zurück – es ist Schleifensteuerung, keine Fähigkeit.

Befehle

openlocal quickstart              # find a server, configure, probe, demo
openlocal run "goal"              # agent loop over your tools
openlocal run "goal" --url http://host:1234/v1     # no config at all
openlocal chat "hello"            # one plain turn, no tools
openlocal tools                   # what the model can call
openlocal probe                   # measure native vs JSON tool calling
openlocal eval                    # 17 deterministic tasks, pass/fail
openlocal eval --via-mcp          # same tasks, tools served over a REAL MCP server
openlocal leaderboard --repeat 2  # every configured model, one table
openlocal mcp                     # stdio MCP server
openlocal models / serve / stop / status / pull    # local llama-server management

smol ist ein kürzerer Alias für dieselbe CLI.

Konfiguration

Ihr Arbeitsbereich ist ~/.openlocal (oder ein beliebiges Verzeichnis, das models.toml oder $OPENLOCAL_HOME enthält). Es enthält models.toml, state.json, Protokolle, Downloads und Evaluierungsergebnisse – niemals das installierte Paket.

[engine.ollama]
type = "external"
base_url = "http://127.0.0.1:11434/v1"

[[model]]
id = "qwen"
engine = "ollama"
family = "qwen"              # tells openlocal this vendor's tool-calling quirks
served_model = "qwen3:4b"    # the exact name the backend knows
default = true

Umgebungsvariable

Standard

Bedeutung

OPENLOCAL_HOME

~/.openlocal

Arbeitsbereichsverzeichnis

OPENLOCAL_BASE_URL

jeden Befehl auf einen /v1-Server ausrichten

SMOL_ROOT

cwd

Sandbox-Root für die Datei- und Shell-Werkzeuge

SMOL_MAX_CHARS

8000

harte Obergrenze für ein Tool-Ergebnis

SMOL_SHELL_ALLOW

dev-Befehle

Komma-Liste oder *

SMOL_TOOL_TIMEOUT

120

Sekunden, bevor ein MCP-Tool-Aufruf abgebrochen wird

Die Werkzeuge

file_list(path=".")                       list files and folders
file_read(path, start_line=1, limit=200)  read a file, one page at a time
file_write(path, content)                 write a file
file_edit(path, find, replace)            replace text exactly, leave the rest alone
file_append(path, content)                add to the end without touching what exists
file_grep(pattern, path=".")              search files
web_search(query, limit=5)                search the web (DuckDuckGo, or Tavily via key)
web_read(url, offset=0, max_chars=4000)   read a page as text
shell_run(command, timeout=60)            run one allowlisted command
calc(expression)                          exact arithmetic - models cannot count
finish(answer)                            agent loop only: end the task

Hausregeln, durch Tests erzwungen: flache Argumente mit Standardwerten, ein Beispielaufruf in jeder Beschreibung, einzeilige Ergebnisüberschriften, hart begrenzte Ausgabe mit einem wahrheitsgemäßen Fortsetzungshinweis und Fehler, die den nächsten Schritt nennenno such file: x - call file_list(".") to see the files that exist.

Architektur

tools/          one registry  →  mcp_server.py   (Claude Code speaks MCP to it)
                              →  agent.py        (a local model calls the same tools)
_http.py        the entire network layer, on urllib (this is why deps = 0)
runner.py       external servers, or llama-server processes it starts and owns
protocol.py     native tool_calls → loose JSON → repair → symptom-specific nudge
families.toml   per-vendor quirks as DATA - the file contributors edit
evals/          17 deterministic tasks + a leaderboard across models

Mitwirken

Das Hinzufügen einer Modellfamilie erfordert kein Python: Bearbeiten Sie families.toml, fügen Sie Ihr Modell zu models.toml hinzu, dann

openlocal probe --model your-model
openlocal eval  --model your-model

und fügen Sie die resultierende Zeile in den PR ein. Siehe CONTRIBUTING.md.

Das Ausführen lokaler GGUF-Modelle auf AMD-Hardware (ROCmFP4 + MTP spekulative Dekodierung) ist in docs/ENGINE.md dokumentiert – optional und für nichts oben Genanntes erforderlich.

Lizenz

MIT © DevXV3

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    A lightweight and fast MCP server that enables AI agents to efficiently discover and execute tools through progressive disclosure, minimizing context consumption while supporting safe code execution in external environments.
    12
  • F
    license
    Not graded
    quality
    B
    maintenance
    A lightweight Node.js MCP server with zero dependencies offering 9 built-in tools for system info, web fetching, GitHub search, file operations, shell execution, and key-value memory, enabling AI agents to perform these tasks via the Model Context Protocol.

View all related MCP servers

Related MCP Connectors

  • Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DevXV3/openlocal'

If you have feedback or need assistance with the MCP directory API, please join our Discord server