Skip to main content
Glama

MCP Server — Сервер инструментов для ИИ

Образовательный проект, демонстрирующий, как ИИ может подключаться к серверу для выполнения реальных действий в операционной системе.


Что это за проект?

Этот проект имитирует MCP Server (Model Context Protocol Server) — HTTP-сервер, который предоставляет инструменты (tools), вызываемые искусственным интеллектом удаленно.

Основная идея проста: ИИ не выполняет команды в операционной системе напрямую. Вместо этого он отправляет HTTP-запрос на этот сервер с просьбой выполнить инструмент. Сервер получает запрос, выполняет его и возвращает результат.

IA  →  POST /tool { "tool": "get_ip" }  →  MCP Server  →  Sistema Operacional
IA  ←  { "success": true, "result": { "ips": [...] } }  ←  MCP Server

Related MCP server: Shell Server

Цель проекта

  • Продемонстрировать архитектуру клиент-сервер применительно к ИИ

  • Показать, как инструменты могут динамически регистрироваться и выбираться

  • Служить базой для обучения для более крупных проектов

  • Быть простым для понимания, модификации и презентации


Используемый стек

Технология

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

Node.js

Среда выполнения JavaScript

Express.js

HTTP-фреймворк

fs, os, path

Встроенные модули Node

child_process

Выполнение системных команд


Структура папок

mcp-server/
│
├── src/
│   ├── server.js              ← Ponto de entrada — inicia o servidor
│   ├── routes/
│   │   └── tools.routes.js    ← Define as rotas HTTP
│   ├── controllers/
│   │   └── tools.controller.js ← Valida o input e chama o serviço
│   ├── services/
│   │   └── tools.service.js   ← Registry de tools + lógica de seleção
│   ├── tools/
│   │   ├── getIp.js           ← Tool: retorna o IP da máquina
│   │   ├── getHostname.js     ← Tool: retorna o hostname
│   │   ├── listFiles.js       ← Tool: lista arquivos de um diretório
│   │   ├── createFile.js      ← Tool: cria um arquivo
│   │   └── pingHost.js        ← Tool: faz ping em um host
│   └── utils/
│       └── response.js        ← Padroniza respostas JSON
│
├── docs/
│   ├── README.md              ← Este arquivo
│   └── AI_CONTEXT.md          ← Contexto arquitetural para IAs
│
├── package.json
└── .gitignore

Как установить

Предварительное требование: Установленный Node.js (рекомендуется версия 18 или выше).

# Clone ou copie o projeto para sua máquina
cd mcp-server

# Instale as dependências
npm install

Как запустить

# Modo normal
npm start

# Modo desenvolvimento (reinicia ao salvar arquivos — Node 18+)
npm run dev

Сервер запустится на порту 3000 по умолчанию.

Чтобы использовать другой порт:

PORT=8080 npm start

Как проверить работоспособность

Перейдите в браузере или используйте curl:

curl http://localhost:3000/health

Ожидаемый ответ:

{ "status": "ok", "message": "MCP Server rodando" }

Как использовать — API

Существует два основных эндпоинта: один для перечисления инструментов, другой для их выполнения.

Список доступных инструментов

Возвращает все инструменты, зарегистрированные на сервере, с их полными схемами (описание и параметры). Этот формат облегчает интеграцию с ИИ (Tool Calling).

GET http://localhost:3000/tools

Ответ:

{
  "success": true,
  "result": [
    {
      "name": "create_file",
      "description": "Cria um arquivo dentro da pasta /files.",
      "parameters": {
        "type": "object",
        "properties": {
          "filename": { "type": "string", "description": "..." },
          "content": { "type": "string", "description": "..." }
        },
        "required": ["filename"]
      }
    }
  ]
}

Выполнение инструмента

POST http://localhost:3000/tool
Content-Type: application/json

Формат запроса

{
  "tool": "nome_da_tool",
  "args": {
    "parametro": "valor"
  }
}

Доступные инструменты

get_ip

Возвращает локальные IP-адреса машины.

Запрос:

{ "tool": "get_ip", "args": {} }

get_hostname

Возвращает имя хоста, платформу и архитектуру машины.

Запрос:

{ "tool": "get_hostname", "args": {} }

list_files

Выводит список файлов и директорий по указанному пути. Если path опущен, используется текущая директория процесса.

Запрос:

{ "tool": "list_files", "args": { "path": "/home/user" } }

create_file

Создает файл внутри папки /files в корне сервера. Эта папка работает как песочница для организации созданных файлов.

Запрос:

{
  "tool": "create_file",
  "args": {
    "filename": "teste.txt",
    "content": "Olá, MCP!"
  }
}

ping_host

Выполняет ping хоста или IP и возвращает результат. Безопасность: Для предотвращения инъекций команд в имени хоста разрешены только буквенно-цифровые символы, точки и дефисы.

Запрос:

{ "tool": "ping_host", "args": { "host": "8.8.8.8" } }

Тестирование с помощью curl

# get_ip
curl -X POST http://localhost:3000/tool \
  -H "Content-Type: application/json" \
  -d '{"tool": "get_ip", "args": {}}'

# list_files
curl -X POST http://localhost:3000/tool \
  -H "Content-Type: application/json" \
  -d '{"tool": "list_files", "args": {"path": "/tmp"}}'

# create_file
curl -X POST http://localhost:3000/tool \
  -H "Content-Type: application/json" \
  -d '{"tool": "create_file", "args": {"filename": "ola.txt", "content": "Olá mundo!"}}'

# ping_host
curl -X POST http://localhost:3000/tool \
  -H "Content-Type: application/json" \
  -d '{"tool": "ping_host", "args": {"host": "8.8.8.8"}}'

Полный поток — ИИ → MCP → Система

1. IA decide que precisa saber o IP da máquina
2. IA envia: POST /tool { "tool": "get_ip", "args": {} }
3. Express recebe a requisição
4. Route encaminha para o Controller
5. Controller valida o body e chama o Service
6. Service consulta o Registry e encontra a função getIp
7. getIp() usa o módulo "os" para ler as interfaces de rede
8. Resultado sobe de volta: getIp → Service → Controller → Response
9. IA recebe: { "success": true, "result": { "ips": [...] } }
10. IA usa o resultado para continuar sua tarefa

Возможные улучшения в будущем

  • Добавить аутентификацию через API Key

  • Реализовать логирование вызовов (кто вызвал какой инструмент и когда)

  • Добавить поддержку WebSocket для потоковых результатов

  • Интегрировать с локальными моделями ИИ (Ollama, LM Studio)

  • Добавить новые инструменты: чтение CPU/памяти, выполнение скриптов и т.д.

  • Создать пример клиента, имитирующего ИИ, вызывающий инструменты


Замечания по безопасности

Этот проект является образовательным. Для использования в продакшене потребуется:

  • Аутентификация на маршрутах

  • Белый список путей для list_files и create_file

  • Ограничение частоты запросов (Rate limiting)

  • Более надежная санитаризация входных данных

  • HTTPS


Проект разработан в академических и демонстрационных целях.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A self-hosted MCP server that gives AI agents controlled access to a machine: filesystem, shell, background processes, git, web fetching and persistent key-value memory.
    GPL 3.0