INPI MCP
by mobgentill2
README.md
# INPI MCP — Inteligencia de Marcas para Agentes de IA




> Infraestrutura experimental para pesquisar, comparar, ingerir e acompanhar publicacoes de marcas brasileiras com API, PostgreSQL e Model Context Protocol.
**Projeto independente, nao oficial e sem vinculo institucional com o Instituto Nacional da Propriedade Industrial (INPI).**
## 0.3.1 — hardening
A 0.3.1 endurece a linha incremental 0.3.0:
- lock PostgreSQL por advisory lock para impedir duas ingestoes mutantes simultaneas;
- retomada comprovavel depois de execucao `failed`;
- observabilidade em `GET /v1/rpi/status`;
- duracao, contagem de estados, cursor gap e ultima falha;
- endpoint `/v1/admin/ingest/xml` fechado por padrao;
- abertura do endpoint administrativo apenas com `APP_ENV=dev` **e** `ENABLE_DEV_ADMIN_INGEST=true`;
- prova MCP via transporte stdio real, alem do teste in-process;
- CI PostgreSQL com prova real de contencao do lock.
## Ingestao incremental
Estabeleca o baseline validado:
```bash
python -m app.cli ingest-rpi 2908
python -m app.cli rpi-status
```
Retome a partir da ultima RPI concluida:
```bash
python -m app.cli ingest-next --max-count 4
```
Se a proxima publicacao ainda nao estiver disponivel ou uma execucao falhar, `last_ingested_rpi` nao avanca indevidamente.
Intervalo explicito:
```bash
python -m app.cli ingest-range 2908 2912
```
Apenas detectar publicacoes:
```bash
python -m app.cli latest-rpi
```
ou, para diagnostico direto dos ZIPs:
```bash
python -m app.cli discover-rpi --after 2908 --max-scan 4
```
## Estado operacional
```bash
python -m app.cli rpi-status
```
ou:
```text
GET /v1/rpi/status
```
O retorno inclui:
- `last_ingested_rpi`;
- `last_checked_rpi`;
- `cursor_gap`;
- contagens por status;
- ultima execucao e duracao;
- ultima falha;
- historico recente.
## Concorrencia
Em PostgreSQL, os fluxos mutantes de RPI usam um advisory lock global do INPI MCP.
Se outra ingestao estiver ativa, a segunda tentativa falha rapidamente com:
```text
outra ingestao de RPI ja esta em execucao neste banco
```
Isso evita dois `ingest-next` concorrentes disputando o mesmo cursor.
## RPI 2908 — prova E2E real
```text
processos 39.858
classes Nice 34.736
eventos 40.201
2a ingestao 0 novos eventos
API real data PASS
MCP real data PASS
parser rpi-marcas-xml-0.2.1
```
| Artefato | Tamanho | SHA-256 |
|---|---:|---|
| RM2908.zip | 10.726.796 bytes | `63794e53ee247d0c70fb9b77f98ed45e2602bb0e5166e347c00d938efa1ff400` |
| RM2908.xml | 61.214.732 bytes | `23392bfc9e03c52c9fa8befc9be21e4f3ee50993dfe21edb876cbbd62706089d` |
A 0.3.1 acrescenta ao gate MCP uma sessao **stdio real**, com `initialize`, `list_tools` e chamadas reais de `search_trademark`, `get_trademark` e `compare_trademark`.
## Docker DEV
```bash
docker compose up --build
```
O compose DEV habilita explicitamente o endpoint administrativo local:
```text
APP_ENV=dev
ENABLE_DEV_ADMIN_INGEST=true
```
Fora dessa combinacao, o endpoint administrativo responde 404 e nao aparece no OpenAPI.
## Migrations
Para bancos anteriores a 0.2.1:
```bash
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f db/002_specification_hash.sql
```
Para estado incremental 0.3.x:
```bash
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f db/003_rpi_ingestion_state.sql
```
## Monitor de novas RPIs
O workflow de monitoramento e **best-effort**. O INPI tem respondido HTTP 503 a runners do GitHub em alguns momentos.
Esse comportamento e tratado de forma segura:
- erro 5xx nao e interpretado como "nao existe nova RPI";
- nenhuma RPI falsa e criada;
- nenhuma ingestao automatica de banco e executada;
- o monitor nao possui credenciais de banco.
## MCP
Ferramentas atuais:
- `search_trademark`
- `compare_trademark`
- `get_trademark`
O MCP e um **adapter**. A regra de negocio permanece no servico de dominio.
## Similaridade
O motor `sim-v0.1.0` combina:
```text
35% lexical
30% fonetica
20% estrutura de tokens
15% afinidade de mercado/classe
```
O score significa similaridade computacional, nao probabilidade de deferimento ou parecer juridico.
## Seguranca
- endpoint administrativo fechado por padrao;
- monitor sem credenciais de banco;
- `raw/`, `.env`, `.gentill/` e evidencias locais fora do Git;
- producao continua fora do escopo desta release.
Consulte [SECURITY.md](SECURITY.md).
## Licenca
Este e um repositorio publico/source-available. O arquivo [LICENSE](LICENSE) define os direitos de uso atuais.
## Aviso
Este software e experimental e possui finalidade tecnica e informativa. Resultados de similaridade nao constituem parecer juridico, decisao do INPI ou garantia de registrabilidade de marca.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessUnresponsive