Local File Manager
README.md
# Servidor MCP - Gerenciador de Arquivos Local (TypeScript)
Este é um projeto de estudo desenvolvido para aprofundamento no **Model Context Protocol (MCP)**. Ele implementa um servidor MCP que permite a clientes de IA (como o Claude Desktop ou outras ferramentas habilitadas com MCP) gerenciar e manipular arquivos de texto em um diretório local seguro configurado via variáveis de ambiente.
O projeto foi construído utilizando **Node.js**, **TypeScript** e o **SDK oficial da Anthropic** (`@modelcontextprotocol/sdk`).
---
## 🛠️ Tecnologias e Dependências
* **Runtime:** Node.js (v18+)
* **Linguagem:** TypeScript (transpilado para ES Modules)
* **MCP SDK:** `@modelcontextprotocol/sdk` (transporte via Stdio)
* **Validação de Dados:** `zod`
* **Gerenciamento de Ambiente:** `dotenv`
* **Execução em Desenvolvimento:** `tsx`
---
## 🚀 Como Iniciar o Projeto
### 1. Instalar as dependências
Execute o comando abaixo na pasta raiz do projeto:
```bash
npm install
```
### 2. Configurar as Variáveis de Ambiente
Copie o arquivo `.env.example` para `.env` ou crie-o manualmente:
```bash
cp .env.example .env
```
Edite o arquivo `.env` e configure o caminho absoluto do diretório local que o servidor deve gerenciar:
```env
LOCAL_WORKSPACE_PATH=C:\caminho\completo\para\sua\pasta\workspace
```
*(Nota: O servidor validará a existência deste diretório ao iniciar e lançará um erro se ele não for encontrado).*
### 3. Compilar o Projeto
Para gerar o código JavaScript transpilado pronto para produção:
```bash
npm run build
```
O output será gerado na pasta `/dist`.
### 4. Executar
O servidor pode ser executado em dois modos de transporte: **Stdio** (padrão) ou **SSE** (Server-Sent Events).
#### Modo Stdio (Padrão)
Ideal para integração local com clientes como o Claude Desktop.
```bash
npm start
# ou em desenvolvimento
npm run dev
```
#### Modo SSE (HTTP)
Ideal para integração com plataformas como n8n, OpenClaw, ou outros clientes de rede.
Você pode ativar este modo definindo `TRANSPORT=sse` no arquivo `.env`, ou passando o argumento `--sse` na inicialização:
```bash
npm start -- --sse
# ou em desenvolvimento
npm run dev -- --sse
```
Você também pode configurar uma porta customizada usando a variável de ambiente `PORT` ou passando o argumento `--port <numero>`:
```bash
npm start -- --sse --port 4000
```
Quando executado em modo SSE, o servidor subirá uma aplicação Express com os seguintes endpoints:
* `GET /sse` (para iniciar o fluxo de stream de Server-Sent Events)
* `POST /messages` (para o envio de comandos JSON-RPC do cliente)
---
## 🔒 Segurança e Prevenção contra Directory Traversal
Para garantir a integridade dos dados e do sistema host, o servidor MCP implementa um validador de caminho estrito chamado `safeResolvePath`. Qualquer tentativa de um modelo de IA acessar arquivos fora do diretório especificado em `LOCAL_WORKSPACE_PATH` (utilizando caminhos relativos como `../../` ou absolutos como `C:/Windows`) será imediatamente negada pelo servidor com uma mensagem de erro controlada.
---
## 🛠️ Ferramentas Disponibilizadas (Tools)
O servidor disponibiliza 7 ferramentas para os clientes de IA realizarem o gerenciamento de arquivos:
1. **`list_files`**: Lista arquivos e subdiretórios a partir de um `relativePath` opcional (vazio para a raiz).
2. **`download_file`**: Lê e retorna o conteúdo em UTF-8 de um arquivo de texto simples especificado pelo `relativePath`.
3. **`upload_file`**: Grava ou sobrescreve o conteúdo UTF-8 de um arquivo de texto. Cria subpastas pai automaticamente se não existirem.
4. **`get_file_info`**: Retorna os metadados detalhados (tamanho, data de criação, data de modificação e status de tipo) de um arquivo ou diretório.
5. **`delete_file`**: Remove de forma segura um arquivo ou um diretório vazio especificado pelo `relativePath`.
6. **`create_directory`**: Cria um novo diretório de forma recursiva dentro da pasta de trabalho.
7. **`move_file`**: Renomeia ou move arquivos e diretórios dentro do workspace usando caminhos relativos de origem (`sourcePath`) e destino (`destinationPath`).
---
## 🔍 Como Testar Usando o MCP Inspector
O MCP Inspector é uma ferramenta oficial de testes interativos que simula o comportamento de um cliente MCP via Stdio:
1. Garanta que o projeto esteja compilado (`npm run build`).
2. Rode o Inspector no terminal do projeto:
```bash
npx @modelcontextprotocol/inspector node dist/index.js
```
3. Acesse o link gerado no seu terminal (por padrão `http://localhost:6274`) no navegador para testar interativamente cada uma das ferramentas.
---
## 💻 Integração com Claude Desktop
Para utilizar este servidor MCP no aplicativo oficial do Claude Desktop, edite o arquivo de configuração `claude_desktop_config.json`:
* **Caminho no Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
* **Caminho no macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
Adicione a seguinte entrada dentro de `mcpServers`:
```json
{
"mcpServers": {
"local-file-manager": {
"command": "node",
"args": [
"C:\\Users\\seu-usuario\\Documents\\Pessoal\\my-first-mpc-server\\dist\\index.js"
],
"env": {
"LOCAL_WORKSPACE_PATH": "C:\\Users\\seu-usuario\\Documents\\Pessoal\\my-first-mpc-server\\workspace"
}
}
}
}
```
*(Lembre-se de ajustar os caminhos absoluto do arquivo `index.js` e do diretório local para os caminhos corretos da sua máquina).*
TDQS
A3.6/5.0
Scored across 7 tools
Disambiguation5/5
Each tool serves a distinct file operation (create, delete, read, info, list, move, write) with no overlap in functionality.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern in snake_case, making them predictable and easy to understand.
Tool Count5/5
Seven tools provide a balanced set of file management operations without being too few or too many for the domain.
Completeness4/5
Covers core CRUD and listing, but lacks a copy operation and advanced features like search; minor gaps for typical file management.
Maintenance
ActivityInactive
ResponsivenessNo issues