Skip to main content
Glama

openlocal

Открытые инструменты. Локальный интеллект. Никакого облака.

Набор инструментов, с которым действительно могут работать маленькие локальные модели — и доказательства этому.

CI PyPI Python Зависимости Лицензия


pip install openlocal
openlocal quickstart

Вот и всё. quickstart находит сервер модели, который у вас уже запущен — ollama, LM Studio, llama.cpp, vLLM — записывает вашу конфигурацию, измеряет, какой протокол вызова инструментов ваша модель действительно может использовать, и запускает реальную задачу, чтобы вы увидели, как это работает:

$ 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

Зачем нужен openlocal

🪶 Ноль зависимостей

Чистая стандартная библиотека. Устанавливается за секунды, работает на Raspberry Pi и не может быть сломана чьим-то релизом.

🔌 Работает с тем, что у вас есть

Всё, что говорит на API OpenAI /v1. Один URL, никаких адаптеров, никаких аккаунтов.

📊 Измерено, не заявлено

10 моделей от 9 вендоров, оценённых по 17 детерминированным задачам. Никакого LLM-судьи — каждая проверка это diff файлов или регулярное выражение.

🧰 Один реестр, два интерфейса

Те же 8 инструментов работают как MCP-сервер (Claude Code, любой MCP-клиент) и как агентский цикл для локальной модели.

🩹 Настроено на реальных ошибках

Каждое эргономическое правило здесь оплачено сбоем модели. Таблица уроков — то, чего вы больше нигде не найдёте.

🧩 Добавьте вендора, отредактировав TOML

Новая семья моделей? Отредактируйте families.toml, запустите openlocal probe, отправьте PR. Python не нужен.

Related MCP server: Hermes MCP Server

Таблица лидеров

Одни и те же задачи, одни и те же инструменты, по одной модели за раз, по два запуска каждая. tools — это протокол, который измерено использует модель — не тот, что заявлен в её документации.

модель

вендор

инструменты

пройдено

процент прохождения

плохой json

ток/с

qwen3.8-4b

Alibaba

нативные

17/17

100%

0

40.4

glm-4.7-flash

z.ai

нативные

17/17

100%

0

39.9

qwen3.8-27b

Alibaba

нативные

17/17

100%

0

16.6

nemotron-nano-4b

NVIDIA

нативные

16/17

94%

0

54.9

gemma-4-e4b

Google

нативные

16/17

94%

0

50.3

gpt-oss-20b

OpenAI

нативные

16/17

94%

45.3

granite-4.1-3b

IBM

нативные

15/17

88%

4

66.0

llama-3.1-8b

Meta

нативные

14/17

85%

2

33.4

mistral-small-3.2

Mistral

нативные

14/17

82%

0

11.1

phi-4-mini

Microsoft

нативные

13/17

79%

0

61.5

¹ Парсер гармонии gpt-oss отклоняет некоторые из его собственных вызовов инструментов (llama.cpp отвечает 500). Лестница повторных попыток клиента восстанавливает каждый из них — столбец retries в RESULTS.md отражает это честно.

Воспроизведите: openlocal leaderboard --repeat 2

Почему ваша маленькая модель не справляется с инструментами

Модель на 3B параметров терпит неудачу не потому, что она глупая. Она терпит неудачу, потому что вывод инструмента — это промпт, а большинство выводов инструментов написаны для людей. Всё ниже было измерено — оставлено, когда оценка росла, и отменено, когда нет.

что сломалось

исправление

измеренный эффект

«Что в строке 300?» → модель ответила про строку 311

нумеровать каждую строку: 300| row 300

исправлено за один раз, на всех моделях

Модель проходила файл на 500 строк по одной строке за шаг

нижние колонтитулы сообщают факты, а не команды («файл продолжается» ≠ «вызови снова…»)

phi: 12 потраченных шагов → 2

Проза вместо вызова инструмента

проза без инструмента = окончательный ответ (только нативные)

phi: 51 некорректных ответов → 5

…но «Конечно, я использую file_grep» — это план

обнаружение намерений: планы подталкиваются, ответы принимаются

запуски перестали заканчиваться на намерениях

file_read(notes.md) введён как текст

синтаксис прозаического вызова разбирается и выполняется

устранены потраченные впустую ходы

{"limit": None}, хвостовой мусор, разделённые объекты

восстановление JSON: поиск скобок, закрытие хвоста, литералы Python, слияние фрагментов

phi плохой_json 5 → 0

Модель записала файл до того, как прочитала исходник

обнаружение устаревшей записи в момент завершения

llama: 13 → 15 / 15

Модель угадала «44» и повторяла это при подсказке

один ход tool_choice: "required"

granite восстановил задачу

Идеально прочитала CSV из 4 строк, сказала, что сумма равна 40

инструмент calc — и защита, чтобы его нельзя было использовать до чтения

granite: +2 задачи

Записала выходной файл, ни разу не прочитав исходник

обнаружение записи «из воздуха» в момент завершения

qwen-4b через MCP восстановлен

Скопировала префиксы ссылок N| в цели редактирования

file_edit удаляет их, если необработанный текст не совпадает

edit_code: 10/10 моделей проходят

Один и тот же вызов, бесконечно (A→B→A→B)

защита от повтора воспроизводит кэшированный результат

пагинационный цикл llama исчез

Сервер выдаёт 500 на свой же синтаксис вызова инструментов

лестница повторных попыток: как запрошено → теплее → тот же ход без tools

gpt-oss: 11/15 → 14/15

Отменено: ещё одно правило в системном промпте

granite 12/15 → 11/15. Меньше правил — лучше.

MCP — полноправный участник, а не обёртка

openlocal eval --via-mcp перезапускает весь набор тестов с инструментами, предоставляемыми через реальный stdio MCP-сервер — схемы, передаваемые по проводу, результаты в виде блоков контента, подпроцесс на задачу. Результаты совпадают с внутрипроцессными числами, в этом и суть: то, что видит Claude Code, было измерено.

Используйте из Claude Code (или любого MCP-клиента)

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

Те же 10 инструментов, которые использует ваша локальная модель, теперь в Claude Code. finish остаётся позади — это управление циклом, а не возможность.

Команды

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 — более короткий псевдоним для той же CLI.

Конфигурация

Ваша рабочая область — ~/.openlocal (или любая директория, содержащая models.toml, или $OPENLOCAL_HOME). Она содержит models.toml, state.json, логи, загрузки и результаты тестов — никогда не устанавливаемый пакет.

[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

переменная окружения

значение по умолчанию

значение

OPENLOCAL_HOME

~/.openlocal

рабочая директория

OPENLOCAL_BASE_URL

направить каждую команду на один сервер /v1

SMOL_ROOT

текущая рабочая директория

корневая песочница для файловых и шелл-инструментов

SMOL_MAX_CHARS

8000

жёсткое ограничение на один результат инструмента

SMOL_SHELL_ALLOW

команды разработчика

список через запятую, или *

SMOL_TOOL_TIMEOUT

120

секунд до отмены вызова MCP-инструмента

Инструменты

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

Внутренние правила, подкреплённые тестами: плоские аргументы со значениями по умолчанию, пример вызова в каждом описании, однострочные заголовки результатов, вывод с жёстким ограничением и правдивой подсказкой о продолжении, и ошибки, которые называют следующий шагнет такого файла: x - вызовите file_list("."), чтобы увидеть существующие файлы.

Архитектура

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

Участие в разработке

Добавление семейства моделей не требует Python: отредактируйте families.toml, добавьте свою модель в models.toml, затем

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

и вставьте полученную строку в PR. См. CONTRIBUTING.md.

Запуск локальных моделей GGUF на оборудовании AMD (ROCmFP4 + MTP спекулятивное декодирование) описан в docs/ENGINE.md — опционально и не требуется для всего вышеперечисленного.

Лицензия

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