rd-station-crm
# conectar-rd-station-mcp
Servidor MCP (Model Context Protocol) local que expõe ferramentas do **RD Station CRM**
(contatos, organizações, negócios/deals, pipelines, usuários) para clientes MCP como
**Claude Code** e **Codex CLI**.
Roda via stdio — o cliente (Claude/Codex) inicia o processo sozinho quando precisa,
não é um servidor que fica no ar o tempo todo.
## Pré-requisitos
- Um token de API do RD Station CRM (Configurações → Integrações → API na sua conta RD Station)
- Claude Code e/ou Codex CLI instalados, se quiser o registro automático
Não precisa ter o Node.js instalado antes — o script de setup verifica e instala
uma versão compatível (18+) via [nvm](https://github.com/nvm-sh/nvm) se necessário.
## Instalação rápida
```bash
npm run setup
```
(se ainda não tiver `npm`/Node, rode `bash scripts/setup.sh` direto)
Isso vai:
1. Checar se o Node.js 18+ está instalado — se não estiver (ou for uma versão antiga),
instala via nvm automaticamente
2. Instalar as dependências (`npm install`)
3. Buildar o projeto (`npm run build`)
4. Criar o arquivo `.env` (a partir de `.env.example`) e pedir seu token do RD Station
5. Registrar o servidor como `rd-station-crm` no Claude Code e no Codex CLI, se
encontrar os dois instalados na máquina
## Instalação manual (passo a passo)
Se preferir fazer na mão, ou se o script não encontrar o Claude/Codex automaticamente:
1. **Instale as dependências e builde**
```bash
npm install
npm run build
```
2. **Configure o token**
```bash
cp .env.example .env
```
Abra o `.env` e preencha:
```
RD_STATION_TOKEN=seu_token_aqui
```
3. **Registre no Claude Code**
```bash
claude mcp add rd-station-crm -s user -- node "$(pwd)/dist/index.js"
```
Confirme com:
```bash
claude mcp list
```
Deve aparecer `rd-station-crm ... ✔ Connected`.
4. **Registre no Codex CLI**
```bash
codex mcp add rd-station-crm -- node "$(pwd)/dist/index.js"
```
Se o comando `codex` não existir no seu PATH, use o caminho do binário do app do
ChatGPT/Codex (no Linux costuma ser `/usr/lib/chatgpt/resources/codex`) no lugar
de `codex` no comando acima.
Confirme com:
```bash
codex mcp list
```
5. **Teste**
Abra uma sessão nova do Claude Code ou do Codex (`claude` / `codex` no terminal)
e peça algo como:
> lista meus contatos do RD Station
Se ele chamar a tool `rdstation_list_contacts` e trazer dados reais, está tudo certo.
## Importante sobre o app do ChatGPT (web/desktop)
Esse servidor roda **local, via stdio**, então funciona com Claude Code e Codex CLI.
O app do ChatGPT (Settings → Apps & Connectors → Developer mode) só aceita servidores
MCP **remotos, via HTTPS** — não é possível apontar para um script local. Para usar lá
seria necessário hospedar este servidor publicamente e trocar o transporte para HTTP,
o que este projeto não faz hoje.
## Ferramentas disponíveis
Contatos: `rdstation_list_contacts`, `rdstation_get_contact`, `rdstation_create_contact`,
`rdstation_update_contact`, `rdstation_delete_contact`
Organizações: `rdstation_list_organizations`, `rdstation_get_organization`
Negócios: `rdstation_list_deals`, `rdstation_get_deal`, `rdstation_create_deal`,
`rdstation_update_deal`, `rdstation_win_deal`, `rdstation_lose_deal`
Pipelines: `rdstation_list_deal_pipelines`, `rdstation_list_deal_stages`
Usuários: `rdstation_list_users`
## Desenvolvimento
Depois de alterar algo em `src/`, é preciso buildar de novo para o Claude/Codex
pegarem a mudança (eles executam `dist/index.js`, não o `.ts`):
```bash
npm run build
```
TDQS
Scored across 16 tools
Each tool targets a distinct resource-action pair: contact CRUD, organization read, deal management, pipeline/stage listing, and user listing. Actions like win_deal and lose_deal are clearly separate from generic update_deal, so there is no real ambiguity.
All tools share the rdstation_ prefix and follow a consistent snake_case verb_noun pattern (list_contacts, get_contact, update_deal, win_deal). The naming is predictable and makes the tool family easy to navigate.
At 16 tools, the set is at the upper edge of the ideal range but each tool maps to a meaningful CRM operation. The breakdown across contacts, deals, organizations, pipelines, and users is reasonable, though it is slightly heavy.
Contacts have full CRUD coverage and deals cover the main lifecycle including win/lose, but organizations are read-only with no create/update/delete. There is also no deal deletion, which leaves notable lifecycle gaps for the stated CRM domain.