Skip to main content
Glama

graph-tool-call

LLM-агенты не могут вместить тысячи определений инструментов в контекст. Векторный поиск находит похожие инструменты, но упускает рабочий процесс, к которому они принадлежат. graph-tool-call строит граф инструментов и извлекает нужную цепочку — а не просто одно совпадение.

Без извлечения

graph-tool-call

248 инструментов (K8s API)

12% точности

82% точности

1068 инструментов (полный API GitHub)

переполнение контекста

78% Recall@5

Использование токенов

8,192 ток

1,699 ток (79% ↓)

Измерено с qwen3:4b (4-бит) — полный бенчмарк

PyPI License: MIT Python 3.10+ CI Zero Dependencies

English · 한국어 · 中文 · 日本語



Зачем

LLM-агентам нужны инструменты. Но по мере роста количества инструментов возникают две проблемы:

  1. Переполнение контекста — 248 эндпоинтов Kubernetes API = 8,192 токена определений инструментов. LLM «захлебывается», и точность падает до 12%.

  2. Векторный поиск пропускает рабочие процессы — Поиск по запросу "отмени мой заказ" находит cancelOrder, но реальный процесс выглядит так: listOrders → getOrder → cancelOrder → processRefund. Векторный поиск возвращает один инструмент; вам нужна цепочка.

graph-tool-call решает обе проблемы. Он моделирует связи между инструментами в виде графа, извлекает многошаговые рабочие процессы с помощью гибридного поиска (BM25 + обход графа + эмбеддинги + аннотации MCP) и сокращает использование токенов на 64–91%, сохраняя или улучшая точность.

Сценарий

Только векторный поиск

graph-tool-call

"отмени мой заказ"

Возвращает cancelOrder

listOrders → getOrder → cancelOrder → processRefund

"прочитать и сохранить файл"

Возвращает read_file

read_file + write_file (отношение COMPLEMENTARY)

"удалить старые записи"

Возвращает любой инструмент с "delete"

Деструктивные инструменты ранжируются первыми через аннотации MCP

"теперь отмени его" (после списка заказов)

Нет контекста из истории

Понижает приоритет использованных инструментов, повышает приоритет инструментов следующего шага

Несколько Swagger-спецификаций с пересекающимися инструментами

Дубликаты инструментов в результатах

Автоматическая дедупликация между источниками

1,200 API эндпоинтов

Медленно, шумные результаты

Категоризация + обход графа для точного извлечения


Related MCP server: MCPFind

Как это работает

OpenAPI / MCP / Python functions → Ingest → Build tool graph → Hybrid retrieve → Agent

Пример — Пользователь говорит: "отмени мой заказ и оформи возврат"

Векторный поиск находит cancelOrder. Но реальный рабочий процесс:

                    ┌──────────┐
          PRECEDES  │listOrders│  PRECEDES
         ┌─────────┤          ├──────────┐
         ▼         └──────────┘          ▼
   ┌──────────┐                    ┌───────────┐
   │ getOrder │                    │cancelOrder│
   └──────────┘                    └─────┬─────┘
                                        │ COMPLEMENTARY
                                        ▼
                                 ┌──────────────┐
                                 │processRefund │
                                 └──────────────┘

graph-tool-call возвращает всю цепочку, а не один инструмент. Извлечение объединяет четыре сигнала с помощью взвешенного Reciprocal Rank Fusion (wRRF):

  • BM25 — поиск по ключевым словам

  • Обход графа — расширение на основе связей (PRECEDES, REQUIRES, COMPLEMENTARY)

  • Сходство эмбеддингов — семантический поиск (опционально, любой провайдер)

  • Аннотации MCP — подсказки read-only / destructive / idempotent


Установка

Основной пакет имеет нулевые зависимости — только стандартная библиотека Python. Устанавливайте только то, что вам нужно:

pip install graph-tool-call                # core (BM25 + graph) — no dependencies
pip install graph-tool-call[embedding]     # + embedding, cross-encoder reranker
pip install graph-tool-call[openapi]       # + YAML support for OpenAPI specs
pip install graph-tool-call[mcp]           # + MCP server / proxy mode
pip install graph-tool-call[all]           # everything

Доп. компонент

Устанавливает

Когда использовать

openapi

pyyaml

YAML OpenAPI спецификации

embedding

numpy

Семантический поиск (подключение к Ollama/OpenAI/vLLM)

embedding-local

numpy, sentence-transformers

Локальные модели sentence-transformers

similarity

rapidfuzz

Обнаружение дубликатов

langchain

langchain-core

Интеграция с LangChain

visualization

pyvis, networkx

Экспорт HTML-графа, GraphML

dashboard

dash, dash-cytoscape

Интерактивная панель управления

lint

ai-api-lint

Автоисправление плохих API спецификаций

mcp

mcp

Режим MCP-сервера / прокси


Быстрый старт

Попробуйте за 30 секунд (без установки)

uvx graph-tool-call search "user authentication" \
  --source https://petstore.swagger.io/v2/swagger.json
Query: "user authentication"
Source: https://petstore.swagger.io/v2/swagger.json (19 tools)
Results (5):

  1. getUserByName  — Get user by user name
  2. deleteUser     — Delete user
  3. createUser     — Create user
  4. loginUser      — Logs user into the system
  5. updateUser     — Updated user

Python API

from graph_tool_call import ToolGraph

# Build a tool graph from the official Petstore API
tg = ToolGraph.from_url(
    "https://petstore3.swagger.io/api/v3/openapi.json",
    cache="petstore.json",
)
print(tg)
# → ToolGraph(tools=19, nodes=22, edges=100)

# Search for tools
tools = tg.retrieve("create a new pet", top_k=5)
for t in tools:
    print(f"{t.name}: {t.description}")

# Search with workflow guidance
results = tg.retrieve_with_scores("process an order", top_k=5)
for r in results:
    print(f"{r.tool.name} [{r.confidence}]")
    for rel in r.relations:
        print(f"  → {rel.hint}")

# Execute an OpenAPI tool directly
result = tg.execute(
    "addPet", {"name": "Buddy", "status": "available"},
    base_url="https://petstore3.swagger.io/api/v3",
)

Планирование рабочего процесса

plan_workflow() возвращает упорядоченные цепочки выполнения с предварительными условиями — сокращая количество запросов агента с 3-4 до 1.

plan = tg.plan_workflow("process a refund")
for step in plan.steps:
    print(f"{step.order}. {step.tool.name} — {step.reason}")
# 1. getOrder      — prerequisite for requestRefund
# 2. requestRefund — primary action

plan.save("refund_workflow.json")

Редактируйте, параметризуйте и визуализируйте рабочие процессы — см. Руководство по прямому API.

Другие источники инструментов

# From an MCP server (HTTP JSON-RPC tools/list)
tg.ingest_mcp_server("https://mcp.example.com/mcp")

# From an MCP tool list (annotations preserved)
tg.ingest_mcp_tools(mcp_tools, server_name="filesystem")

# From Python callables (type hints + docstrings)
tg.ingest_functions([read_file, write_file])

Аннотации MCP (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) используются как сигналы для извлечения — намерение запроса классифицируется автоматически, и запросы на чтение отдают приоритет инструментам только для чтения, в то время как запросы на удаление отдают приоритет деструктивным инструментам.


Выберите свою интеграцию

graph-tool-call поставляется с несколькими шаблонами интеграции. Выберите тот, который соответствует вашему стеку:

Вы используете...

Шаблон

Выигрыш в токенах

Руководство

Claude Code / Cursor / Windsurf

MCP Proxy (агрегация N MCP-серверов → 3 мета-инструмента)

~1,200 ток/запрос

docs/integrations/mcp-proxy.md

Любой MCP-совместимый клиент

MCP Server (один источник как MCP)

варьируется

docs/integrations/mcp-server.md

LangChain / LangGraph (50+ инструментов)

Gateway tools (N инструментов → 2 мета-инструмента)

92%

docs/integrations/langchain.md

OpenAI / Anthropic SDK (существующий код)

Middleware (monkey-patch в 1 строку)

76–91%

docs/integrations/middleware.md

Прямой контроль над извлечением

Python API (retrieve() + адаптер формата)

варьируется

docs/integrations/direct-api.md

MCP Proxy (наиболее распространенный)

Когда у вас много MCP-серверов, их имена инструментов накапливаются в каждом запросе LLM. Объедините их за одним сервером: 172 инструмента → 3 мета-инструмента.

# 1. Create ~/backends.json listing your MCP servers
# 2. Register the proxy with Claude Code
claude mcp add -s user tool-proxy -- \
  uvx "graph-tool-call[mcp]" proxy --config ~/backends.json

Полная настройка, режим проброса, удаленный транспорт → Руководство по MCP Proxy.

LangChain Gateway

from graph_tool_call.langchain import create_gateway_tools

# 62 tools from Slack, GitHub, Jira, MS365...
gateway = create_gateway_tools(all_tools, top_k=10)
# → [search_tools, call_tool] — only 2 tools in context

agent = create_react_agent(model=llm, tools=gateway)

Сокращение токенов на 92% по сравнению с привязкой всех 62 инструментов. См. Руководство по LangChain для автофильтрации и ручных шаблонов.

SDK middleware

from graph_tool_call.middleware import patch_openai

patch_openai(client, graph=tg, top_k=5)  # ← add this one line

# Existing code unchanged — 248 tools go in, only 5 relevant ones are sent
response = client.chat.completions.create(
    model="gpt-4o",
    tools=all_248_tools,
    messages=messages,
)

Также работает с Anthropic через patch_anthropic. См. Руководство по Middleware.


Бенчмарк

Два вопроса: (1) Выбирает ли LLM правильный инструмент, когда ей дают только извлеченное подмножество? (2) Ранжирует ли сам механизм извлечения правильные инструменты в топ K?

Набор данных

Инструменты

Базовая точность

graph-tool-call

Сокращение токенов

Petstore

19

100%

95% (k=5)

64%

GitHub

50

100%

88% (k=5)

88%

Mixed MCP

38

97%

90% (k=5)

83%

Kubernetes core/v1

248

12%

82% (k=5 + онтология)

79%

Ключевой вывод — при 248 инструментах базовая модель «падает» (переполнение контекста) до 12%, в то время как graph-tool-call восстанавливает точность до 82%. В меньших масштабах базовая модель уже сильна, поэтому ценность graph-tool-call заключается в экономии токенов без потери точности.

→ Полные результаты (конвейер / только извлечение / конкурентный анализ / масштаб 1068 / агент LangChain на 200 инструментов для GPT и Claude): docs/benchmarks.md

# Reproduce
python -m benchmarks.run_benchmark                                # retrieval only
python -m benchmarks.run_benchmark --mode pipeline -m qwen3:4b    # full pipeline

Расширенные возможности

Гибридный поиск на основе эмбеддингов

Добавьте семантический поиск поверх BM25 + графа. Тяжелые зависимости не нужны — подключайтесь к любому внешнему серверу эмбеддингов.

tg.enable_embedding("ollama/qwen3-embedding:0.6b")        # Ollama (recommended)
tg.enable_embedding("openai/text-embedding-3-large")      # OpenAI
tg.enable_embedding("vllm/Qwen/Qwen3-Embedding-0.6B")     # vLLM
tg.enable_embedding("sentence-transformers/all-MiniLM-L6-v2")  # local
tg.enable_embedding(lambda texts: my_embed_fn(texts))     # custom callable

Веса перебалансируются автоматически. См. Справочник API для всех форматов провайдеров.

Настройка извлечения

tg.enable_reranker()                                      # cross-encoder rerank
tg.enable_diversity(lambda_=0.7)                          # MMR diversity
tg.set_weights(keyword=0.2, graph=0.5, embedding=0.3, annotation=0.2)

Извлечение с учетом истории

Передавайте ранее вызванные инструменты, чтобы понизить их приоритет и повысить приоритет кандидатов для следующего шага.

tools = tg.retrieve("now cancel it", history=["listOrders", "getOrder"])
# → [cancelOrder, processRefund, ...]

Сохранение / загрузка (сохраняет эмбеддинги + веса)

tg.save("my_graph.json")
tg = ToolGraph.load("my_graph.json")
# Or use cache= in from_url() for automatic save/load
tg = ToolGraph.from_url(url, cache="my_graph.json")

Онтология с поддержкой LLM

tg.auto_organize(llm="ollama/qwen2.5:7b")
tg.auto_organize(llm="litellm/claude-sonnet-4-20250514")
tg.auto_organize(llm=openai.OpenAI())

Строит более богатые категории, отношения и ключевые слова для поиска. Поддерживает Ollama, клиенты OpenAI, litellm и любые вызываемые объекты. См. Справочник API.

Другие возможности

Возможность

API

Документация

Обнаружение дубликатов в спецификациях

find_duplicates / merge_duplicates

Справка API

Обнаружение конфликтов

apply_conflicts

Справка API

Операционный анализ

analyze

Справка API

Интерактивная панель управления

dashboard()

Справка API

Экспорт HTML / GraphML / Cypher

export_html / export_graphml / export_cypher

Справка API

Автоисправление плохих OpenAPI спецификаций

from_url(url, lint=True)

ai-api-lint


Документация

Документ

Описание

Справочник CLI

Все команды CLI graph-tool-call

Справочник Python API

Методы ToolGraph, помощники, middleware, LangChain

Интеграции

MCP-сервер / прокси, LangChain, middleware, прямой API

Результаты бенчмарков

Полные таблицы конвейера / извлечения / конкурентного анализа / масштаба

Архитектура

Обзор системы, уровни конвейера, модель данных

Заметки по дизайну

Дизайн алгоритма — нормализация, обнаружение зависимостей, онтология

Исследования

Конкурентный анализ, данные о масштабируемости API

Чек-лист релиза

Процесс релиза, поток изменений


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

Вклад приветствуется.

git clone https://github.com/SonAIengine/graph-tool-call.git
cd graph-tool-call
pip install poetry pre-commit
poetry install --with dev --all-extras
pre-commit install   # auto-runs ruff on every commit

# Test, lint, benchmark
poetry run pytest -v
poetry run ruff check . && poetry run ruff format --check .
python -m benchmarks.run_benchmark -v

Лицензия

MIT

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
14Releases (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
    -
    quality
    -
    maintenance
    A high-performance Go-based MCP server that provides a microservice architecture for orchestrating diverse tools through gRPC and HTTP/REST APIs. Enables seamless integration of language-agnostic tools including ML capabilities, web search, calculations, and human interaction for intelligent agent workflows.
    Last updated
    2
  • F
    license
    -
    quality
    D
    maintenance
    A context-efficient MCP tool proxy that uses semantic search to manage numerous backend tools through just three meta-tools. It minimizes agent context usage by enabling on-demand tool discovery and schema retrieval across multiple connected servers.
    Last updated
    1
  • A
    license
    -
    quality
    -
    maintenance
    A drop-in MCP proxy that aggregates multiple backend servers into two meta-tools for efficient tool discovery and execution. It enables AI clients to access hundreds of tools while minimizing context window usage through searchable indexing.
    Last updated
    1
  • A
    license
    -
    quality
    F
    maintenance
    Agent-first knowledge graph MCP server that provides 25 tools for managing a knowledge graph with nodes and edges, plus a human-readable dashboard for LLMs and AI agents.
    Last updated
    317
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Free public MCP for AI agents — 193 tools, 44 workflows. No API key.

  • Local-first RAG engine with MCP server for AI agent integration.

  • Package intelligence MCP for AI agents — 22 tools, 19 ecosystems, AGPL SDK, free.

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/SonAIengine/graph-tool-call'

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