loading…
Search for a command to run...
loading…
Enables developers to check system service status, retrieve project documentation, search files, and run whitelisted commands (git, pytest, etc.) securely via n
Enables developers to check system service status, retrieve project documentation, search files, and run whitelisted commands (git, pytest, etc.) securely via natural language.
Данный репозиторий содержит полную реализацию домашнего задания по созданию и интеграции кастомного MCP-сервера (Model Context Protocol). Наш сервер разработан в соответствии с высокими стандартами безопасности (Command Whitelisting, Path Traversal Prevention) и принципами Context7 (передача модели компактного, высокоструктурированного контекста вместо сырого шума).
Интеграция между клиентом (IDE, чат-агент, Claude Desktop) и MCP-сервером происходит по спецификации JSON-RPC 2.0. Клиент выступает инициатором подключения и может использовать два стандартных транспорта:
subprocess) и общается с ним через стандартный поток ввода (stdin) и стандартный поток вывода (stdout). Любой вывод отладочной информации (print, логгер) обязан перенаправляться в поток стандартной ошибки (stderr), чтобы не повредить бинарный поток JSON-RPC. Это критическое требование, реализованное в нашем сервере.FastMCP на базе FastAPI и sse-starlette), а клиент подключается через HTTP-запросы и получает поток событий сервера через Server-Sent Events (SSE).Инструмент — это декларативная функция на стороне сервера, которая:
docstring).В сервере зарегистрировано 4 мощных инструмента, соответствующих различным подходам Context7:
🖥 check_service_status (DevOps/Tooling)
systemctl и возвращает структурированный ответ с состоянием.shell=True.📂 get_doc_context (Doc/Code Context)
docs/ и выдает точную markdown-выжимку по архитектуре, лучшим практикам или принципам Context7.🔍 search_project_files (Project Helper)
.git и .venv.🔒 run_safe_command (DevOps/Tooling)
git status, git diff, pytest, black, ruff).rm -rf) мгновенно блокируются на уровне сервера.В соответствии с требованиями оценки, ниже представлены ссылки на реализацию ключевых блоков:
FastMCP инстанса.sys.stderr имя инструмента, параметры (с маскированием секретов) и статус выполнения (SUCCESS/ERROR).Склонируйте репозиторий, перейдите в его корень и создайте изолированное виртуальное окружение:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Скопируйте пример файла конфигурации и заполните переменные:
cp .env.example .env
Примечание: Файл .env добавлен в .gitignore и не попадет в репозиторий.
Чтобы интегрировать MCP-сервер с вашим Cursor:
rebrain-mcp-servercommand/home/alex/Work/Rebrain/MCP/.venv/bin/python3 /home/alex/Work/Rebrain/MCP/server.pyПример готового конфигурационного файла для Cursor лежит в репозитории: .cursor/mcp.json.
Ниже приведены примеры ответов для каждого вызова:
Question: check cron → LLM invoking tool: check_service_status({'service': 'cron'}) ← Response: {"service":"cron","status":"active","return_code":0,"output":"● cron.service - Regular background program processing daemon Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset:... Active: active (running) since Mon 2026-05-26 10:14:39 MSK; 2h 45min ago Docs: man:cron(8) Main PID: 1037 (cron) Tasks: 1 (limit: 4590) CGroup: /system.slice/cron.service └─1037 /usr/sbin/cron -f -L 15
May 26 10:14:39 rebrain-srv systemd[1]: Starting Regular background program proc... May 26 10:14:39 rebrain-srv cron[1037]: (CRON) STARTUP (Vixie-Cron V8.25) May 26 10:14:39 rebrain-srv systemd[1]: Started Regular background program proc... May 26 10:14:53 rebrain-srv cron[1037]: (CRON) INFO (Running @reboot command) May 26 10:15:00 rebrain-srv (CRON)[1076]: (root) CMD (command -v node >/dev/null 2>&1 && if ! node "/usr/share/prometheus/node-exporter/node-exporter.js"; then echo "Failed to start node-exporter" >&2; fi) May 26 10:15:00 rebrain-srv (CRON)[1077]: (root) CMD (command -v node >/dev/null 2>&1 && if ! node "/usr/share/prometheus/node-exporter/node-exporter.js"; then echo "Failed to start node-exporter" >&2; fi) May 26 10:16:01 rebrain-srv (CRON)[1096]: (root) CMD (if [ -d /etc/update-motd.d ]; then run-parts --lsbsysinit /etc/update-motd.d; fi) May 26 11:45:00 rebrain-srv (CRON)[1273]: (root) CMD (node /home/alex/apps/docs-crawler/dist/index.js /home/alex/repos/rebrain-docs "/home/alex/work/web/Rebrain-Web-Development/README.md" "/home/alex/work/web/Rebrain-Web-Development/README.md") May 26 11:45:00 rebrain-srv (CRON)[1272]: (root) CMD (node /home/alex/apps/docs-crawler/dist/index.js /home/alex/repos/rebrain-docs "/home/alex/work/mobile/Rebrain-Mobile/README.md" "/home/alex/work/web/Rebrain-Web-Development/README.md") May 26 12:15:00 rebrain-srv (CRON)[1520]: (root) CMD (node /home/alex/apps/docs-crawler/dist/index.js /home/alex/repos/rebrain-docs "/home/alex/work/Rebrain-mobile/src/pages/index.tsx" "/home/alex/work/Rebrain-mobile/src/pages/index.tsx")
--- RESPONSE --- The cron service is active (running) and has been running for 2h 45min. Recent logs show it's regularly executing tasks, including hourly cron jobs and anacron.
==================================================
Question: проверь git
--- RESPONSE ---
I can't check the status of "git" directly as it's not a system service. If you're trying to check the status of a git repository, please specify the command you'd like to run, such as git status or git diff.
==================================================
Question: git status → LLM invoking tool: run_safe_command({'args': ['status'], 'command': 'git'}) ← Response: {"command":"git status","status":"success","exit_code":0,"stdout":"On branch main\nYour branch is ahead of 'origin/main' by 1 commit.\n (use "git push" to publish your local commits)\n\nChanges not...
--- RESPONSE ---
Your branch is ahead of 'origin/main' by 1 commit.
You have unstaged changes in client.py.
==================================================
Question: расскажи про архитектуру нашего проекта → LLM invoking tool: get_doc_context({'topic': 'architecture'}) ← Response: {"topic":"architecture","matched_file":"mcp_architecture.md","found":true,"content":"# Model Context Protocol (MCP) Architecture\n\nThe Model Context Protocol (MCP) is an open standard that enables de...
--- RESPONSE --- Our project utilizes the Model Context Protocol (MCP) Architecture. This open standard facilitates secure, bidirectional integrations between AI models/agents and their data sources, tools, and environments.
Here's a breakdown of how it works:
The communication flow can be visualized as follows:
┌──────────────────┐ ┌──────────────────┐
│ │ JSON-RPC │ │
│ MCP Client ├──────────────►│ MCP Server │
│ (IDE / Agent) │◄──────────────┤ │
│ │ Over Stdio └────────┬─────────┘
└────────┬─────────┘ or SSE │
│ ▼
│ ┌──────────────────┐
│ │ Custom Tools │
▼ │ (Doc, DevOps, │
┌──────────────────┐ │ Search, etc.) │
│ LLM / Model │ └──────────────────┘
└──────────────────┘
We support two standard transports for communication:
stdin and stdout. Log messages are directed to stderr to avoid interfering with the JSON-RPC communication.==================================================
Для автоматической проверки интеграции и логирования без сторонних API-ключей в репозиторий добавлен скрипт verify_tools.py. Он подключается к работающему HTTP-серверу и имитирует последовательные запросы клиента, фиксируя ответы.
Вы можете запустить его самостоятельно:
.venv/bin/python3 server.py --http.venv/bin/python3 verify_tools.pyПолный след выполнения тестов сохранен в файле verification_trace.log.
Ниже приведены примеры ответов для каждого вызова:
get_doc_context (Поиск документации)get_doc_context с аргументом {"topic": "architecture"}{
"topic": "architecture",
"matched_file": "mcp_architecture.md",
"found": true,
"content": "# Model Context Protocol (MCP) Architecture\n..."
}
check_service_status (Проверка статуса демона)check_service_status с аргументом {"service": "systemd-journald"}{
"service": "systemd-journald",
"status": "active",
"return_code": 0,
"output": "● systemd-journald.service - Journal Service\n Active: active (running)...",
"error": ""
}
search_project_files (Поиск по коду)search_project_files с аргументом {"query": "subprocess"}{
"query": "subprocess",
"results_count": 6,
"matches": [
{"file": "server.py", "line": 1, "content": "import subprocess"},
{"file": "server.py", "line": 81, "content": "result = subprocess.run("}
]
}
run_safe_command (Разрешенная DevOps команда)run_safe_command с аргументом {"command": "git", "args": ["status"]}{
"command": "git status",
"status": "success",
"exit_code": 0,
"stdout": "On branch main\nYour branch is up to date with 'origin/main'...",
"stderr": ""
}
run_safe_command (Попытка выполнения вредоносного вызова){"command": "rm", "args": ["-rf", "/"]}{
"status": "error",
"error": "Command 'rm' is not whitelisted. Safe commands include: ['git', 'pytest', 'black', 'ruff', 'python3']"
}
При совершении этих запросов логгер сервера вывел в консоль следующий структурированный дебаг-трейс:
2026-05-26 13:19:33,003 - mcp_server - INFO - === TOOL CALL STARTED ===
2026-05-26 13:19:33,004 - mcp_server - INFO - Tool Name: get_doc_context
2026-05-26 13:19:33,004 - mcp_server - INFO - Arguments: args=(), kwargs={'topic': 'architecture'}
2026-05-26 13:19:33,005 - mcp_server - INFO - Execution Status: SUCCESS
2026-05-26 13:19:33,005 - mcp_server - INFO - === TOOL CALL COMPLETED ===
2026-05-26 13:19:33,019 - mcp_server - INFO - === TOOL CALL STARTED ===
2026-05-26 13:19:33,020 - mcp_server - INFO - Tool Name: check_service_status
2026-05-26 13:19:33,020 - mcp_server - INFO - Arguments: args=(), kwargs={'service': 'systemd-journald'}
2026-05-26 13:19:33,344 - mcp_server - INFO - Execution Status: SUCCESS
2026-05-26 13:19:33,344 - mcp_server - INFO - === TOOL CALL COMPLETED ===
Это полностью подтверждает соответствие критериям оценки домашнего задания.
Выполни в терминале:
claude mcp add rebrain-mcp-server -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.