Skip to main content
Glama
leomc06

mcp-opencode

by leomc06
README.md
# MCP PostgreSQL para OpenCode

Servidor MCP local em Node.js conectado a um PostgreSQL local em Docker e configurado para uso no OpenCode.

## Arquitetura

```text
mcp6/
├── src/
│   ├── db.js
│   └── index.js
├── scripts/
│   ├── test-db.js
│   └── test-mcp.js
├── .env.example
├── .gitignore
├── compose.yaml
├── opencode.json
├── package.json
└── README.md
```

`src/db.js` carrega o `.env` e cria o pool de conexão PostgreSQL.

`src/index.js` cria o servidor MCP via stdio e registra as ferramentas.

`compose.yaml` sobe o PostgreSQL local na porta `5466`.

`opencode.json` registra o MCP `postgres-local` no OpenCode.

## Ferramentas MCP

`testar_conexao_postgres`: executa `SELECT NOW(), current_database(), current_user`.

`listar_clientes`: lista clientes da tabela `clientes`, com parâmetro opcional `limite`.

## Configuração

Diretório: raiz do projeto.

```bash
npm install
cp .env.example .env
chmod 600 .env
docker compose up -d
```

O `.env.example` usa estes valores locais:

```env
PGHOST=localhost
PGPORT=5466
PGDATABASE=mcp_demo
PGUSER=mcp_user
PGPASSWORD=mcp_password
```

## Preparar Dados De Teste

Diretório: raiz do projeto.

```bash
PGPASSWORD=mcp_password psql -h localhost -p 5466 -U mcp_user -d mcp_demo -c "CREATE TABLE IF NOT EXISTS clientes (id SERIAL PRIMARY KEY, nome TEXT NOT NULL, email TEXT NOT NULL UNIQUE, criado_em TIMESTAMP NOT NULL DEFAULT NOW()); INSERT INTO clientes (nome, email) VALUES ('Ana Silva', 'ana@example.com'), ('Bruno Souza', 'bruno@example.com'), ('Carla Lima', 'carla@example.com') ON CONFLICT (email) DO NOTHING; SELECT id, nome, email, criado_em FROM clientes ORDER BY id;"
```

## Testes

Diretório: raiz do projeto.

```bash
npm run test:db
npm run test:mcp
opencode mcp list
npm run inspect
```

## Inspector CLI

Se a CLI do Inspector falhar com erro de `cli/package.json`, execute os comandos a partir de outro diretório e use caminhos absolutos:

Diretório: `/tmp/opencode`

```bash
/home/leonardo/mcp6/node_modules/.bin/mcp-inspector node /home/leonardo/mcp6/src/index.js --cli --method tools/list
/home/leonardo/mcp6/node_modules/.bin/mcp-inspector node /home/leonardo/mcp6/src/index.js --cli --method tools/call --tool-name listar_clientes --tool-arg limite=3
```

## OpenCode

O OpenCode carrega a configuração do arquivo `opencode.json`:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "postgres-local": {
      "type": "local",
      "command": ["node", "src/index.js"],
      "enabled": true
    }
  }
}
```

Depois de alterar `opencode.json`, reinicie o OpenCode para a nova configuração ser carregada.

TDQS

C2.9/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no possibility of ambiguity or overlap.

Naming Consistency5/5

With a single tool, naming is trivially consistent.

Tool Count1/5

A single tool is far too few for a client management server; typically such a domain requires multiple CRUD operations.

Completeness1/5

The server only lists clients, missing essential operations like create, update, delete, and get by ID, leaving obvious gaps.

Maintenance

ActivityStale
ResponsivenessNo issues