MCP Server Python
# 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
Scored across 7 tools
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.
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.
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.
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.