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