Skip to main content
Glama
README.md
# Servidor MCP em Python

Projeto base de um servidor MCP (Model Context Protocol) em Python, pronto para conectar em clientes MCP.

## Requisitos

- Python 3.10+

## Instalar

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
```

## Executar

```bash
mcp-server-python
```

Ou usando o utilitario solicitado:

```bash
mcpserver
```

O servidor sobe em modo `stdio`, que e o formato mais comum para integrar com clientes MCP locais.

## Configurar cliente MCP

### VS Code

1. Copie `examples/vscode.mcp.example.json` para `.vscode/mcp.json`.
2. Se necessario, ajuste `command` para o Python da sua venv.
3. Reinicie o cliente MCP no VS Code.

Exemplo:

```json
{
	"servers": {
		"python-mcp-server": {
			"type": "stdio",
			"command": "${workspaceFolder}/.venv/bin/python",
			"args": ["-m", "mcp_server"]
		}
	}
}
```

### Claude Desktop

1. Abra o arquivo de configuracao do Claude Desktop.
2. Copie o conteudo de `examples/claude_desktop_config.example.json`.
3. Troque `/CAMINHO/ABSOLUTO/PARA/...` pelo caminho real do projeto.

Exemplo:

```json
{
	"mcpServers": {
		"python-mcp-server": {
			"command": "/CAMINHO/ABSOLUTO/PARA/mcp_server/.venv/bin/python",
			"args": ["-m", "mcp_server"]
		}
	}
}
```

## Tools disponiveis

- `ping() -> str`
- `soma(a: float, b: float) -> float`
- `agora() -> str`
- `inverter_lista(itens: list[str]) -> list[str]`
- `buscar_jurisprudencia(consulta: str, tribunal: str | None = None, limite: int = 10) -> dict`
- `detalhe_jurisprudencia(url_ou_urn: str) -> dict`
- `buscar_jurisprudencia_avancada(consulta: str, tribunal: str | None = None, orgao: str | None = None, data_inicio: str | None = None, data_fim: str | None = None, limite: int = 5) -> dict`

## Jurisprudencia com dados abertos

O servidor inclui um modulo para consulta de jurisprudencia em fonte aberta via LexML Brasil.

### Fluxo recomendado

1. Use `buscar_jurisprudencia` com termos como `icms creditamento`, `dano moral consumidor`, `prisao preventiva`.
2. Pegue a `url` ou `urn` de um resultado.
3. Use `detalhe_jurisprudencia` para obter metadados e ementa.

Exemplos de parametros:

- `buscar_jurisprudencia(consulta="icms energia", tribunal="stj", limite=5)`
- `detalhe_jurisprudencia(url_ou_urn="urn:lex:br:superior.tribunal.justica;turma.1:acordao;resp:2006-03-09;601056-676848")`

### Busca avancada para analise

Use `buscar_jurisprudencia_avancada` quando quiser:

- recorte por periodo (`data_inicio` e `data_fim`)
- filtro de orgao (`turma`, `secao`, `pleno`, `camara`, `carf`)
- retorno com `resumo_prompt` pronto para colar em um modelo e pedir analise comparativa

Exemplo:

- `buscar_jurisprudencia_avancada(consulta="icms creditamento energia", tribunal="stj", orgao="turma", data_inicio="2015-01-01", data_fim="2024-12-31", limite=3)`

## Estrutura

- `src/mcp_server/server.py`: definicao do servidor e tools.
- `src/mcp_server/legal_open_data.py`: integracao com dados juridicos abertos.
- `src/mcp_server/__main__.py`: ponto de entrada para execucao.
- `pyproject.toml`: metadados, dependencias e script CLI.

TDQS

B3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: ping is a health check, soma does arithmetic, agora provides date/time, inverter_lista reverses lists, and the three jurisprudencia tools handle different aspects of legal document search (basic, detail, advanced). No two tools overlap in functionality.

Naming Consistency3/5

Names are in Portuguese but follow mixed patterns: some are single nouns (ping, soma, agora), some are verb_noun (inverter_lista, buscar_jurisprudencia), and one is noun_noun (detalhe_jurisprudencia). The advanced search includes an adjective suffix. This inconsistency can confuse an agent trying to infer naming conventions.

Tool Count3/5

With 7 tools, the count is moderate. However, the tools cover two unrelated domains (generic utilities and legal research), making the set feel like a collection of random functions rather than a focused server. The number is not extreme but the lack of thematic cohesion reduces appropriateness.

Completeness2/5

The legal research subset has basic search, detail retrieval, and advanced search, but lacks any write operations (e.g., save, annotate). The generic utilities are a few arbitrary functions (ping, sum, date, reverse list) with no broader context or coverage of a domain. The surface feels incomplete and arbitrary.

Maintenance

ActivityStale
ResponsivenessNo issues