Skip to main content
Glama
opastorello

creci-sp-api

by opastorello
README.md
# creci-sp-api

API REST + MCP para consulta de corretores imobiliários de São Paulo (CRECI-SP).

## Stack

- **FastAPI** + **FastMCP 3.0** — REST e protocolo MCP
- **PostgreSQL 16** — banco de dados
- **SQLAlchemy async** + asyncpg — ORM
- **Docker Compose** — banco + app em um comando

## Rodando localmente

```bash
cp .env.example .env
# editar .env se necessário
docker compose up --build
```

API disponível em `http://localhost:8004`  
Docs em `http://localhost:8004/docs`

## Importar dados

Após o `docker compose up`, importar o CSV coletado:

```bash
docker compose exec app python scripts/import_csv.py /caminho/corretores_sp.csv
```

Ou de fora do container (banco exposto na porta 5432):

```bash
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/creci_sp \
  python scripts/import_csv.py corretores_sp.csv
```

## Endpoints

| Método | Rota | Descrição |
|--------|------|-----------|
| GET | `/corretores` | Lista com filtros: `?q=nome&cidade=SP&situacao=ativo` |
| GET | `/corretores/{creci}` | Dados de um corretor pelo CRECI |
| GET | `/corretores/stats` | Estatísticas gerais |
| GET | `/corretores/cidades` | Ranking de cidades |
| GET | `/health` | Health check |
| POST | `/mcp` | Endpoint MCP (StreamableHTTP) |

## MCP Tools

| Tool | Descrição |
|------|-----------|
| `buscar_corretor` | Busca por nome, CRECI, cidade ou situação |
| `corretor_por_creci` | Dados completos pelo número CRECI |
| `estatisticas_creci` | Total, ativos, top cidades |
| `listar_cidades_sp` | Todas as cidades com corretores |

## Deploy no Coolify

1. Criar novo recurso → **Docker Compose**
2. Apontar para este repositório
3. Configurar variáveis de ambiente:
   - `API_TOKEN` — token de autenticação Bearer
   - `DB_PASSWORD` — senha do PostgreSQL
4. Deploy

## Autenticação

Definir `API_TOKEN` no `.env`. Todas as rotas exigem:
```
Authorization: Bearer <token>
```
Deixar vazio para desabilitar autenticação.