This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 1.0.1 instead.
Reason given by maintainers: Incompatível com mcp 2.x — use a 1.0.1
Movidesk MCP (somente leitura)
Servidor MCP em Python (FastMCP, transporte stdio) para a API pública do Movidesk
(https://api.movidesk.com/public/v1). Ele lê qualquer dado que a API expõe, com
todos os parâmetros OData ($select, $filter, $expand aninhado, $orderby,
$top, $skip) e os parâmetros próprios de cada rota. Nunca cria, altera ou exclui nada.
Início rápido
- Instalar
pip install movidesk-mcp-server
- Configurar o Claude Desktop
Adicione ao claude_desktop_config.json:
{
"mcpServers": {
"movidesk": {
"command": "movidesk-mcp-server",
"env": {
"MOVIDESK_TOKEN": "seu-token-aqui"
}
}
}
}
- Ou registrar no Claude Code
claude mcp add movidesk -e MOVIDESK_TOKEN=seu-token-aqui -- movidesk-mcp-server
O token é gerado no Movidesk em Configurações > Conta > Parâmetros > aba Ambiente > Gerar nova chave. Gerar uma chave nova invalida a anterior.
Estrutura
| Arquivo | Conteúdo |
|---|---|
pyproject.toml |
Pacote e comando movidesk-mcp-server |
src/movidesk_mcp/server.py |
Servidor MCP e ferramentas |
src/movidesk_mcp/ENDPOINTS.md |
Mapeamento da API (endpoints, parâmetros, campos, expansões e limites). O bloco JSON no fim é lido pelo servidor. |
test_server.py |
Teste de cobertura contra a API real ($top=1 em cada endpoint) e teste offline |
Ferramentas
| Ferramenta | O que faz |
|---|---|
movidesk_get(endpoint, params, paginar, max_registros, permitir_nao_listados, arquivo_saida) |
Chama qualquer GET e repassa os parâmetros sem restrição. Com paginar=True percorre as páginas sozinho (OData, cursor ou page, conforme a rota) até max_registros. |
listar_endpoints(endpoint, completo) |
Devolve o mapeamento para o modelo saber o que pode pedir |
listar_tickets(...) |
Lista tickets com filtro, campos, expansões e período; incluir_antigos=True junta tickets/past |
buscar_ticket(id) |
Ticket completo (todas as coleções) por número ou protocolo; procura em tickets/past se precisar; incluir_html=True traz o HTML das ações |
listar_pessoas(...) |
Pessoas, empresas e departamentos, com busca por nome |
resumo_tickets(data_inicio, data_fim) |
Contagens por status, equipe, responsável, categoria, urgência, serviço, origem e dia, mais tempo de resolução e cumprimento de SLA |
Também há o recurso movidesk://endpoints com o conteúdo do ENDPOINTS.md.
Exemplo de chamada genérica:
{
"endpoint": "tickets",
"params": {
"$select": "id,subject,status,createdDate",
"$filter": "createdDate ge 2026-09-01T00:00:00.00z and ownerTeam eq 'Suporte'",
"$expand": "owner,actions($select=id,origin;$expand=timeAppointments($expand=createdBy)),customFieldValues($expand=items)",
"$orderby": "id desc"
},
"paginar": true,
"max_registros": 500
}
Instalação: detalhes
Requer Python 3.10 ou superior.
| Forma | Comando |
|---|---|
| PyPI | pip install movidesk-mcp-server |
| Sem instalar, com uv | uvx movidesk-mcp-server |
| GitHub | pip install git+https://github.com/jpedrocrc/movidesk-mcp |
| Código local | pip install -e . na pasta do projeto (para editar o código sem reinstalar) |
Windows: o pip coloca o executável em ...\Python3xx\Scripts. Se essa pasta
não estiver no PATH, o Claude Desktop não encontra movidesk-mcp-server. Nesse caso,
use o caminho completo do .exe em "command", ou "command": "python" com
"args": ["-m", "movidesk_mcp"].
Para publicar no PyPI (é preciso ter conta em pypi.org):
uv build
uv publish
Testar com o MCP Inspector
mcp dev usa o uv e o npx (Node.js).
mcp dev src/movidesk_mcp/server.py
No Inspector, defina a variável MOVIDESK_TOKEN na seção Environment Variables antes de conectar.
Teste de cobertura
python test_server.py --offline
Esse modo não usa rede: valida o mapeamento, o registro das ferramentas e as travas (escrita bloqueada, $select obrigatório, token ocultado).
python test_server.py
Esse modo precisa de MOVIDESK_TOKEN no ambiente. Ele chama cada endpoint mapeado com $top=1 (ou limit=1/pageSize=1) e usa os IDs que encontra para testar as rotas que pedem um id (HTML das ações, pergunta da pesquisa, artigo, anexo, consumo do contrato). No horário limitado leva cerca de 2 minutos.
Limites e comportamento
- Rate limit: 10 req/min das 07:01 às 18:59 (Brasília); livre das 19:00 às 07:00. O servidor segura as chamadas localmente nesse horário para não estourar o limite.
- Bloqueio por erro: 3 requisições com erro bloqueiam a API por 60 s, depois 120 s, depois 300 s. Por isso o servidor valida localmente o que consegue antes de chamar a API (por exemplo,
$selectobrigatório nas listas de tickets) e, num 429, espera o tempo do headerretry-aftere tenta de novo. - Erros: 401 (token), 404, 400 (com a mensagem da API) e timeout voltam como JSON
{"erro": ..., "mensagem": ...}. Timeout e 5xx são repetidos com backoff. - Respostas grandes: acima de
MOVIDESK_MAX_CHARSa resposta é cortada, com um aviso que sugere$select/$filter. Usearquivo_saidapara gravar o resultado completo em disco. - Tickets antigos:
/ticketssó traz tickets comlastUpdatenos últimos 90 dias. Os demais estão em/tickets/past. - Segurança: só GET. As rotas de telefonia que usam GET mas registram chamadas (
asterisk_*) estão bloqueadas, mesmo compermitir_nao_listados=True. O token só é lido do ambiente, nunca vai para o log, e qualquer ocorrência dele é removida das respostas.
Variáveis de ambiente opcionais
| Variável | Padrão | Uso |
|---|---|---|
MOVIDESK_RATE_LIMIT |
10 |
Requisições por minuto (0 desliga o limitador local) |
MOVIDESK_RATE_LIMIT_MODO |
horario |
horario limita só das 07:01 às 18:59; sempre limita 24 h |
MOVIDESK_PAGE_SIZE |
100 |
Tamanho da página na paginação automática |
MOVIDESK_MAX_RETRIES |
3 |
Novas tentativas em 429/5xx/timeout |
MOVIDESK_MAX_ESPERA |
320 |
Maior espera (s) aceita num retry de 429 |
MOVIDESK_TIMEOUT |
60 |
Timeout por requisição (s) |
MOVIDESK_MAX_CHARS |
60000 |
Tamanho máximo da resposta antes de cortar |
MOVIDESK_LOG_LEVEL |
WARNING |
Nível de log (sempre em stderr) |
Licença
MIT. Veja LICENSE.
Metadata
Release files for movidesk-mcp-server 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| movidesk_mcp_server-1.0.0.tar.gz | 29.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| movidesk_mcp_server-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.7 kB
Release files / movidesk_mcp_server-1.0.0.tar.gz
| Download URL | movidesk_mcp_server-1.0.0.tar.gz |
|---|---|
| Size | 29.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f0bf0de80f95429808c04d9c23cd6c7596fafe4e7e2139e0d3d37858c264e02
|
|
BLAKE2b-256 checksum How to use checksums |
86f53e54c2458f93c8bc8af8ff59ef7a053171a1077e409e7b15d991501a2467
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / movidesk_mcp_server-1.0.0-py3-none-any.whl
| Download URL | movidesk_mcp_server-1.0.0-py3-none-any.whl |
|---|---|
| Size | 28.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
28302f904337d2387bd1d25ab62d1a4c5c1eee7c602ea4b3884f68e6eaaceee4
|
|
BLAKE2b-256 checksum How to use checksums |
7abe3f7bd740110502a06995bfbc7c0ba0ac0af09335f92aa9ad5b49bf3cf2f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|