tds-mcp
Integrates with TOTVS Protheus servers to compile AdvPL/TLPP sources, generate and apply patches, and inspect the RPO (Remote Program Object) repository.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tds-mcpcompile the AdvPL source clientes.prw"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tds-mcp
Servidor MCP que dá a um assistente de IA (Claude Code, Claude Desktop, ou qualquer cliente MCP) a capacidade de compilar fontes AdvPL/TLPP, gerar e aplicar patches e inspecionar o RPO de servidores TOTVS Protheus.
Por baixo usa o advpls — o mesmo TDS Language Server que a extensão
tds-vscode utiliza — falando JSON-RPC via stdio.
Reaproveita a configuração que você já tem no TDS: servidores, ambientes, includes e tokens.
Não distribui binários da TOTVS. O
advplsé localizado na extensão tds-vscode já instalada na sua máquina. Você precisa ter o TDS instalado e um servidor configurado.
Requisitos
Windows (veja Limitações)
Node.js 18+
Extensão totvs.tds-vscode instalada, com pelo menos um servidor configurado e já conectado uma vez pelo VS Code
AppServer Protheus acessível (build 7.00.x)
Related MCP server: vibing-steampunk
Instalação
git clone https://github.com/Guipegoraro/tds-mcp.git
cd tds-mcp
npm install # o script "prepare" já compila o TypeScriptRegistre no Claude Code:
claude mcp add --scope user tds node "<caminho-do-clone>/dist/index.js"Ou, em qualquer cliente MCP, via configuração JSON:
{
"mcpServers": {
"tds": {
"command": "node",
"args": ["C:\\caminho\\para\\tds-mcp\\dist\\index.js"]
}
}
}Como a conexão funciona (zero-config)
O MCP lê ~/.totvsls/servers.json — o arquivo global onde o TDS guarda seus servidores.
Você não precisa cadastrar nada duas vezes:
Cliente MCP (Claude)
└── tds-mcp (Node, stdio)
├── lê ~/.totvsls/servers.json (servidores, ambientes, includes, tokens)
├── spawn advpls.exe language-server
└── JSON-RPC: $totvsserver/connect, compilation, patchGenerate, patchApply, ...O arquivo é procurado na mesma ordem que o TDS usa: TDS_MCP_SERVERS_JSON (override) →
.vscode/servers.json do workspace (opção Workspace server config) → ~/.totvsls/servers.json.
tds_list_servers mostra em arquivoConfig qual está em uso.
Autenticação, em ordem:
Token de reconexão salvo pelo TDS — funciona sem senha nenhuma. Se expirar, basta conectar no servidor pelo VS Code uma vez para renovar.
Credenciais em
~/.tds-mcp/config.json— fallback opcional (veja Configuração).
A conexão do MCP é independente da do VS Code: ambos podem estar conectados ao mesmo tempo.
Tools
Tool | Descrição | Efeito |
| Servidores do servers.json, ambientes e sessão ativa | read-only |
| Conecta/autentica em servidor + ambiente | sessão |
| Compila fontes/pastas no RPO | grava no RPO |
| Valida sintaxe sem commitar no RPO | nenhum |
| Fonte pré-processado (debug de | nenhum |
| Lista objetos do RPO (filtro + datas) | read-only |
| Lista funções do RPO (fonte + linha) | read-only |
| Versão do RPO + histórico de patches aplicados | read-only |
| Gera PTM com manifesto e rastreabilidade | read-only no RPO |
| Valida patch contra o RPO sem aplicar | read-only |
| Lista o conteúdo de um | read-only |
| Aplica patch no RPO (deploy) | destrutivo |
| Últimas mensagens do advpls (diagnóstico) | read-only |
Segurança operacional (leia antes de usar em cliente)
tds_compile, tds_patch_generate e tds_patch_apply alteram o RPO de um servidor real.
Recomendação forte: configure seu cliente MCP para sempre pedir confirmação nessas três.
No Claude Code, em ~/.claude/settings.json:
{
"permissions": {
"ask": [
"mcp__tds__tds_compile",
"mcp__tds__tds_patch_generate",
"mcp__tds__tds_patch_apply"
]
}
}As demais tools são read-only e podem ser liberadas sem risco.
Como ler o resultado de uma compilação
Uma compilação pode falhar em dois níveis independentes — e olhar só um deles faz erro parecer sucesso:
Nível | Onde aparece | Exemplo |
Build |
|
|
Fonte |
| erro de sintaxe ( |
Uma falha de build acontece antes/fora da compilação individual: resultados pode vir
vazio ou só com SUCCESS, e ainda assim nada foi gravado no RPO (o build é revertido).
Sempre use o booleano
sucesso(ousintaxeOk) — ele já combina os dois níveis. Nunca conclua sucesso apenas porque não há itensERRORemresultados.
Quando falha, a resposta também vem marcada como erro no protocolo MCP (isError) e inclui
logDoServidor com as mensagens do AppServer — é lá que aparece, por exemplo, a dica
BuildKillUsers = 1 do COMPILEERROR-300.
Sucesso sem gravação: fontes já atualizados no RPO voltam com status SKIPPED (quando
recompile=false). Isso conta como sucesso, mas nada foi escrito — se todos forem
ignorados, a resposta traz o campo aviso dizendo isso. Confira ignorados antes de
afirmar que algo foi compilado.
Valores de returnCode medidos em AppServer 7.00.240223P: 0 sucesso, -1 erro de fonte
(sintaxe / arquivo inexistente), -300 sem acesso exclusivo ao RPO, 40840 token expirado.
Encoding: fontes precisam estar em CP1252
O compilador Protheus só aceita Windows-1252. Um fonte em UTF-8 com acentos vai para o
RPO com caracteres corrompidos — às vezes sem erro de compilação, o que é pior que falhar.
Como agentes de IA gravam em UTF-8 por padrão, tds_compile e tds_syntax_check
verificam antes de enviar e recusam o que não estiver em CP1252:
arquivo 100% ASCII → passa (é idêntico nos dois encodings)
bytes altos que não formam UTF-8 válido → assume CP1252 → passa
UTF-8 válido com acentos, ou BOM UTF-8 → bloqueia, dizendo qual arquivo e como converter
O arquivo nunca é alterado pelo MCP — a conversão é decisão sua (convert_encoding do
MCP file-tools, ou Save with Encoding → Windows 1252 no VS Code). Recursos binários
(.png, .bmp, .res) não passam pela checagem.
Semântica das datas (importante — evita conclusão errada)
O campo de data que o RPO expõe por objeto (dataFonte em tds_rpo_objects, date em
tds_patch_info, rpoDate no manifesto, dataPatch/dataRPO em tds_patch_validate)
é o mtime do arquivo-fonte registrado no momento da compilação — não o instante
em que a compilação ocorreu.
dataFonte== mtime do arquivo em disco (±2s) → o RPO contém o conteúdo atual.mtime do disco >
dataFonte→ fonte alterado depois da última compilação → recompilar.Nunca compare com data de commit git: commit posterior ao mtime é normal (editou num dia, commitou no outro) e não significa RPO desatualizado.
Exceção: tds_rpo_info.dataGeracao e as datas do histórico de patches (geradoEm,
aplicadoEm) são datas de evento reais.
Rastreabilidade de patches
Cada tds_patch_generate produz em <patchesRoot>/<cliente>/<ticket>/:
DDMMAA_HHMM_<slug>.ptm— data/hora (padrão brasileiro) lideram o nome, ex.190726_2037_tec10r06.ptm. Colisão no mesmo minuto ganha segundos (DDMMAA_HHMMSS).DDMMAA_HHMM_<slug>.manifest.json— título e descrição recomendados, sha256, fontes com data do RPO, servidor/ambiente/build de origem, autor, commit git (opcional)historico.jsonl— append-only por ticket (gerações, validações, aplicações)<patchesRoot>/historico-global.jsonl— histórico consolidado
Título recomendado (data e hora primeiro): 19/07/2026 20:37 — Cliente ticket — FONTE.PRW
Configuração
Opcional. Copie config.example.json para ~/.tds-mcp/config.json:
{
"patchesRoot": "C:\\TOTVS\\patches",
"advplsPath": "",
"credentials": {
"NomeDoServidorNoTDS": { "user": "usuario", "password": "senha" }
}
}patchesRoot— raiz da árvore de patches (padrãoC:\TOTVS\patches)advplsPath— só se o advpls não estiver na extensão instalada. Também aceita a variável de ambienteTDS_MCP_ADVPLScredentials— senhas em texto plano. Prefira deixar vazio e usar o token do TDS. O arquivo fica fora do repositório; nunca o versione.
Desenvolvimento e testes
npm run build # compila TypeScript
npm test # testes de lógica (não precisa de AppServer)
node test/smoke.mjs <servidor> [ambiente] # read-only: conecta e inspeciona o RPO
node test/debug-protocol.mjs [host] [porta] # JSON-RPC cru (diagnóstico de protocolo)
node test/debug-returncode.mjs <srv> [amb] # read-only: returnCode em cada cenário
node test/e2e-readonly.mjs <servidor> [amb] # read-only: E2E pelo servidor MCP
node test/e2e-mcp.mjs <servidor> [ambiente] # E2E: COMPILA um fonte de teste no RPO
node test/cleanup.mjs <servidor> [ambiente] # remove o fonte de teste do RPOO E2E compila test/zTstMcp1.prw (User Function inofensiva) e gera um patch. Use apenas
em ambiente de desenvolvimento descartável e rode o cleanup depois.
Limitações
Windows apenas por enquanto: a resolução do binário procura
bin/windows/advpls.exena extensão tds-vscode. Oadvplsexiste para Linux e macOS (@totvs/tds-ls), então o suporte é uma mudança pequena emresolveAdvplsPath()— PRs bem-vindos.O protocolo
$totvsserver/*não é um contrato público da TOTVS. Ao atualizar a extensão TDS, o binário muda junto; se algo quebrar,tds_server_logajuda a diagnosticar. A especificação viva ésrc/protocolMessages.ts.O advpls não aceita o handshake LSP
initializecom params mínimos (derruba o processo com0xC0000409). Os requests$totvsserver/*são enviados diretamente — é o que o@totvs/tds-languageclientoficial também faz.Fora do escopo da v1 (mas mapeados no protocolo): monitor de usuários conectados,
defragRPO,rpoCheckIntegrity,deletePrograms,wsdlGenerate.
Alternativas headless
Se você precisa de CI/CD em vez de um assistente:
advpls cli <script.ini>— modo CLI oficial do TDS Language Server (script INI em CP1252)appserver.exe -compile— compilação/patch direto pelo AppServer, usado nos pipelines oficiais da TOTVS (totvs/protheus-ci-universo)
Créditos
Este projeto não é afiliado à TOTVS. O protocolo foi derivado do código-fonte público do
tds-vscode (Apache-2.0) e da documentação do
tds-ls. As regras de encoding CP1252, a lista de
extensões compiláveis e parte do troubleshooting seguem a skill oficial
advpl-tlpp-compile (Engenharia Protheus, MIT). Protheus, AdvPL, TLPP e TOTVS são marcas de
seus respectivos proprietários.
Licença
MIT — veja LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-quality-maintenanceEnables AI assistants to perform Business Central AL development tasks including language server operations, container management, Git version control, and file system operations for professional BC development workflows.
- Alicense-qualityBmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.430MIT
- Alicense-qualityAmaintenanceEnables AI assistants to leverage VS Code's language intelligence for code navigation, refactoring, and analysis via the MCP protocol.MIT
- Alicense-qualityFmaintenanceEnables AI assistants to interact with VS Code for language intelligence, debugging, and code execution.16MIT
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Guipegoraro/tds-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server