Skip to main content
Glama

openlocal

Herramientas abiertas. Cerebros locales. Cero nube.

Un cinturón de herramientas que los modelos locales pequeños pueden usar realmente — y los recibos que lo demuestran.

CI PyPI Python Dependencies License


pip install openlocal
openlocal quickstart

Eso es todo. quickstart encuentra el servidor de modelos que ya ejecutas — ollama, LM Studio, llama.cpp, vLLM — escribe tu configuración, mide qué protocolo de llamada a herramientas puede manejar realmente tu modelo, y ejecuta una tarea real para que lo veas funcionar:

$ 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

Por qué openlocal

🪶 Cero dependencias

Biblioteca estándar pura. Se instala en segundos, funciona en una Raspberry Pi y no puede ser rota por el lanzamiento de otro.

🔌 Funciona con lo que tienes

Cualquier cosa que hable la API /v1 de OpenAI. Una URL, sin adaptadores, sin cuentas.

📊 Medido, no afirmado

10 modelos de 9 proveedores, puntuados en 17 tareas deterministas. Sin juez LLM — cada verificación es un diff de archivo o una expresión regular.

🧰 Un registro, dos superficies

Las mismas 8 herramientas alimentan un servidor MCP (Claude Code, cualquier cliente MCP) y un bucle de agente de modelo local.

🩹 Ajustado en fallos reales

Cada regla ergonómica aquí fue pagada por un modelo que se rompió. La tabla de lecciones es la parte que no puedes conseguir en ningún otro lado.

🧩 Añade un proveedor editando TOML

¿Nueva familia de modelos? Edita families.toml, ejecuta openlocal probe, envía un PR. No se necesita Python.

Related MCP server: Hermes MCP Server

La tabla de clasificación

Mismas tareas, mismas herramientas, un modelo a la vez, dos ejecuciones cada uno. tools es el protocolo que cada modelo fue medido manejando — no el que sus documentos afirman.

model

vendor

tools

passed

pass rate

bad 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

¹ El analizador harmony de gpt-oss rechaza algunas de sus propias llamadas a herramientas (llama.cpp responde 500). La escalera de reintentos del cliente recupera cada una — la columna retries en RESULTS.md mantiene eso honesto.

Reprodúcelo: openlocal leaderboard --repeat 2

Por qué tu modelo pequeño falla en herramientas

Un modelo de 3B no falla porque sea estúpido. Falla porque la salida de la herramienta es un prompt, y la mayoría de la salida de herramientas está escrita para humanos. Todo lo siguiente fue medido — mantenido cuando la puntuación subió, revertido cuando no.

qué se rompió

la solución

efecto medido

"¿Qué es la línea 300?" → el modelo respondió línea 311

numerar cada línea: 300| fila 300

arreglado en un turno, en todos los modelos

El modelo recorrió un archivo de 500 líneas una línea por turno

los pies de página indican hechos, nunca comandos ("el archivo continúa" ≠ "llama de nuevo con…")

phi: 12 pasos desperdiciados → 2

Prosa en lugar de una llamada a herramienta

prosa sin herramienta = la respuesta final (solo nativo)

phi: 51 respuestas malformadas → 5

…pero "Claro, usaré file_grep" es un plan

detección de intención: los planes reciben un empujón, las respuestas se aceptan

las ejecuciones dejaron de terminar en intenciones

file_read(notes.md) escrito como texto

la sintaxis de llamada en prosa se analiza y ejecuta

turnos desperdiciados eliminados

{"limit": None}, basura al final, objetos divididos

reparación JSON: escaneo de llaves, cierre de cola, literales de Python, fusión de fragmentos

phi bad_json 5 → 0

El modelo escribió el archivo antes de leer la fuente

detección de escritura obsoleta al finalizar

llama: 13 → 15 / 15

El modelo adivinó "44" y lo repitió cuando se le empujó

un turno de tool_choice: "required"

granite recuperó la tarea

Leyó un CSV de 4 líneas perfectamente, dijo que la suma era 40

un comando calc

phi: 51 malformadas → 5

Úsalo desde Claude Code (o cualquier cliente MCP)

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

Las mismas 10 herramientas que usa tu modelo local, ahora en Claude Code. finish se queda atrás — es control de bucle, no una capacidad.

Comandos

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 es un alias más corto para la misma CLI.

Configuración

Tu espacio de trabajo es ~/.openlocal (o cualquier directorio que contenga models.toml, o $OPENLOCAL_HOME). Contiene models.toml, state.json, registros, descargas y resultados de evaluación — nunca el paquete instalado.

[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

env

default

significado

OPENLOCAL_HOME

~/.openlocal

directorio de trabajo

OPENLOCAL_BASE_URL

apunta cada comando a un servidor /v1

SMOL_ROOT

cwd

raíz del sandbox para las herramientas de archivo y shell

SMOL_MAX_CHARS

8000

límite máximo para un resultado de herramienta

SMOL_SHELL_ALLOW

comandos de desarrollo

lista separada por comas, o *

SMOL_TOOL_TIMEOUT

120

segundos antes de abandonar una llamada a herramienta MCP

Las herramientas

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

Reglas de la casa, aplicadas por pruebas: argumentos planos con valores predeterminados, un ejemplo de llamada en cada descripción, encabezados de resultado de una línea, salida con límite máximo y una pista de continuación veraz, y errores que nombran el siguiente pasono such file: x - call file_list(".") to see the files that exist.

Arquitectura

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

Contribuir

Agregar una familia de modelos no requiere Python: edita families.toml, añade tu modelo a models.toml, luego

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

y pega la fila resultante en el PR. Consulta CONTRIBUTING.md.

Ejecutar modelos GGUF locales en hardware AMD (ROCmFP4 + decodificación especulativa MTP) está documentado en docs/ENGINE.md — opcional, y no es necesario para nada de lo anterior.

Licencia

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