rag-tool-agent
RAG Tool Agent — MCP-сервер
Предоставляет два инструмента, лежащие в основе проекта rag-tool-agent-demo (Q&A с опорой на поиск по заметкам набора данных FordA и безопасный арифметический калькулятор), как полноценный сервер Model Context Protocol, так что любой MCP-совместимый клиент — Claude Desktop, MCP-совместимая агентная обвязка или собственный хост — может вызывать их напрямую, а не только через собственный CLI этого проекта или через Flask HTTP-обёртку в rag-tool-api-docker.
Создан, чтобы закрыть конкретный, явно обозначенный пробел: несколько актуальных вакансий в сфере AI-инженерии/агентных приложений явно требуют практического опыта работы с MCP (и смежных протоколов agent-to-agent/agent-to-UI). Это небольшая, реальная, протестированная реализация, а не заявление об опыте работы с протоколом без доказательств.
Почему это так устроено
Оригинальный агент выполняет собственную маршрутизацию внутри: самодельный if/else, который для каждого входящего вопроса решает: «калькулятор» против «поиска» против «прямого ответа». MCP переворачивает это: клиент (хост LLM/агента) выполняет маршрутизацию, читая имя, описание и параметры JSON-schema каждого инструмента и решая, какой из них вызвать. Поэтому этот сервер не воссоздаёт исходную логику маршрутизации — он предоставляет две базовые возможности как автономные, независимо вызываемые MCP-инструменты и позволяет любому MCP-клиенту самому направлять к ним запросы. В этом и заключается суть протокола: инструменты становятся независимыми от хоста, а не жёстко встроенными в диспетчерскую логику одного агента.
search_notes(query: str) -> str— поиск по небольшому встроенному корпусу заметок о наборе данных FordA; результат возвращается с тем же суффиксом происхождения[Grounded in N retrieved chunk(s) from ...], который использует оригинальный агент, так что клиент может отличить обоснованный ответ от необоснованного. Используется небольшой ранжировщик по пересечению ключевых слов, а не пересоздаётся индекс FAISS/embeddings исходного проекта — суть этого проекта в слое предоставления через MCP, а не в дублировании той работы.calculate(expression: str) -> str— арифметический инструмент, ограниченный+ - * / ()и числовыми литералами через безопасный вычислитель на основеast(а не голыйeval()для произвольного ввода). Проверено, что он отклоняет как неарифметический ввод, так и попытки инъекций, например__import__('os').system(...).Создан с использованием официального Python SDK
mcp(FastMCP) — того же SDK, который Anthropic публикует для создания MCP-серверов.
Related MCP server: rag-mcp
Запуск
pip install -r requirements.txt
python server.pyРаботает через stdio — стандартный локальный транспорт, который MCP-клиенты, такие как Claude Desktop, используют для запуска сервера и общения с ним как с подпроцессом. Чтобы подключить Claude Desktop к нему, добавьте в его конфигурацию MCP-сервера:
{
"mcpServers": {
"rag-tool-agent": {
"command": "python",
"args": ["/absolute/path/to/server.py"]
}
}
}Запуск тестов
pytest tests/ -v11 тестов, все проходят — вызываются функции инструментов напрямую (для модульного покрытия самой логики инструментов транспорт MCP не нужен): обоснованные ответы на поисковые запросы, контракт на количество обоснований, корректность арифметики (включая пример деления, совпадающий с документированным примером самого оригинального агента), отклонение неарифметического и инъекционного ввода, обработка деления на ноль и самостоятельная регистрация инструментов с описаниями.
Проверено как настоящий MCP-сервер, а не просто как функции
Помимо модульных тестов, проведена сквозная проверка с использованием настоящего клиентского SDK mcp (ClientSession + stdio_client): запуск server.py как реального подпроцесса, выполнение рукопожатия MCP initialize, вызов list_tools() и вызов обоих инструментов по реальному протоколу:
TOOLS: ['search_notes', 'calculate']
calculate -> 1320 / (3601 + 1320) = 0.2682381629750051
search_notes -> The FordA dataset is a univariate time-series
classification dataset... [Grounded in 3 retrieved chunk(s) from
forda_dataset_notes.md]
calculate(injection) -> Error: could not evaluate "__import__('os')" ...Это подтверждает, что сервер поддерживает настоящий MCP (рукопожатие, обнаружение инструментов, вызов инструментов), а не только то, что лежащие в основе функции Python работают по отдельности.
Связь с двумя другими проектами
rag-tool-agent-demo— оригинальный CLI-агент: LangChain, FAISS, Ollama, поисковая цепочка LCEL, инструмент-калькулятор, маршрутизация на основе LLM.rag-tool-api-docker— тот агент, обёрнутый в Flask HTTP API, контейнеризированный (Docker, многоступенчатая сборка, пользователь без root-прав, проверка состояния), проверенный реальными HTTP-запросами к запущенному контейнеру.Этот проект — те же базовые возможности (поиск, калькулятор), предоставляемые через MCP вместо HTTP, так что их может вызывать любой MCP-хост, а не только REST-клиент.
This server cannot be deployed
Maintenance
Related MCP Connectors
Salesforce-grounded retrieval, diagnoses, and a vetted-Force marketplace for MCP clients.
Free OpenAI-compatible inference with signed provenance receipts and 3 focused MCP tools.
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
Agentic search over your Dewey document collections from any MCP-compatible client.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables document search, read-only SQL querying, arithmetic calculation, and corpus introspection through MCP tools, allowing Claude to dynamically discover and chain these tools together to answer multi-step questions.-
- FlicenseNot gradedqualityCmaintenanceEnables querying local documents via retrieval-augmented generation, along with current UTC datetime and safe arithmetic evaluation through MCP tools over HTTP.-
- AlicenseAqualityCmaintenanceProvides a document store, web search, and safe calculator as MCP tools, enabling both offline and LLM-driven clients to discover and call them over the Model Context Protocol.6MIT
- FlicenseNot gradedqualityCmaintenanceEnables an LLM to perform safe arithmetic calculations and web searches through a standardized MCP interface, returning results to generate informed responses.-