Bluewolf MCP Gateway
by GVROS
README.md
# Bluewolf MarTech Journey Factory
POC end-to-end de MarTech para integrar **IBM Consulting Advantage (ICA)** ao **Salesforce Marketing Cloud Engagement (SFMC)** por meio de um **MCP Gateway em Streamable HTTP**.
A solução não é somente um gerador de Journey ou SQL. A esteira cobre:
1. Demanda / intake
2. Briefing de Marketing
3. Discovery e contexto histórico
4. Validação de dados
5. Estratégia assistida por IA
6. Validação técnica IBM/MarTech
7. Aprovação de negócio
8. Draft controlado no SFMC
9. Ajustes e QA
10. Go-live autorizado
11. Medição e aprendizado
## Produção
- Aplicação: `https://bluewolf-martech-mcp.vercel.app`
- MCP Streamable HTTP: `https://bluewolf-martech-mcp.vercel.app/mcp`
- Health/configuração: `https://bluewolf-martech-mcp.vercel.app/health`
- Branch de produção: `main`
## Stack
- Next.js 16
- Node.js 20+
- `@modelcontextprotocol/sdk` 1.26.0
- Zod 3
- Salesforce Marketing Cloud REST API
- Salesforce Marketing Cloud SOAP API
- Vercel
- GitHub
### Compatibilidade ICA
A versão 0.5.0 remove o adaptador intermediário `mcp-handler` do endpoint `/mcp` e usa diretamente o `WebStandardStreamableHTTPServerTransport` do SDK oficial MCP.
O endpoint trabalha em modo:
- Streamable HTTP
- stateless
- `enableJsonResponse=true`
- resposta `application/json`
- normalização do header `Accept` para compatibilidade com clientes que não enviam simultaneamente `application/json` e `text/event-stream`
O objetivo desta alteração é eliminar a camada que estava participando do erro de interoperabilidade observado no ICA (`content: Field required`) e deixar o contrato ICA -> MCP o mais direto possível.
## Variáveis de ambiente
Configure todas no Vercel como **Secret**, no ambiente Production:
- `SFMC_CLIENT_ID`
- `SFMC_CLIENT_SECRET`
- `SFMC_ACCOUNT_ID`
- `SFMC_AUTH_BASE_URI`
- `SFMC_REST_BASE_URI`
- `SFMC_SOAP_BASE_URI`
- `MCP_GATEWAY_TOKEN`
Nunca grave valores reais no GitHub.
## Ferramentas MCP
### Diagnóstico e interoperabilidade
- `ica_echo` — teste simples ICA -> MCP. O argumento `content` é opcional propositalmente: se o ICA perder o payload, a ferramenta retorna `ICA_ECHO_ARGUMENT_NOT_RECEIVED` em vez de falhar na validação de schema.
- `mcp_ping` — valida ICA -> Bluewolf MCP Gateway.
- `sfmc_configuration_status` — valida presença das configurações sem revelar credenciais.
- `sfmc_health` — realiza autenticação Server-to-Server real no SFMC.
### Contexto real do Marketing Cloud
- `sfmc_list_journeys`
- `sfmc_get_journey`
- `sfmc_list_data_extensions`
- `sfmc_get_data_extension_fields`
- `sfmc_list_automations`
- `martech_context_snapshot`
### Journey Factory
- `martech_capabilities`
- `martech_generate_blueprint`
- `martech_validate_briefing`
- `martech_data_cloud_readiness`
### Escrita controlada
- `sfmc_create_journey_draft`
A ferramenta de escrita trabalha em `dryRun=true` por padrão. Escrita real exige simultaneamente:
- `approved=true`
- `dryRun=false`
- `approvalReference` preenchido
Ela cria somente um **draft**; não publica nem ativa automaticamente.
### Journey Key
O endpoint oficial `POST /interaction/v1/interactions` do Journey Builder utiliza uma chave GUID/UUID. A ferramenta agora:
- aceita `key` opcional;
- mantém a chave recebida quando ela já é UUID válida;
- gera UUID automaticamente quando `key` não é enviada ou quando o valor informado é apenas uma referência amigável como `POC_SABESP_FATURA_30_60_DRAFT`;
- devolve `salesforceJourneyKey` no dry-run para auditoria e eventual reutilização na execução autorizada.
## Contrato MCP para ICA
O resultado de ferramenta mantém o contrato MCP básico:
```json
{
"content": [
{
"type": "text",
"text": "..."
}
]
}
```
Na camada HTTP, a versão 0.5.0 força resposta JSON para reduzir ambiguidades de parsing entre ICA/ContextForge e o servidor MCP.
## Configuração no IBM Consulting Advantage
Em **Browse Tools -> Developer Mode -> Add New -> External MCP Server**:
- MCP Server Name: `SFMC - Bluewolf Gateway Oficial`
- MCP Server URL: `https://bluewolf-martech-mcp.vercel.app/mcp`
- Transport Type: `STREAMABLE HTTP`
- Authentication Type: `Bearer Token`
- Token: usar exatamente o mesmo valor configurado em `MCP_GATEWAY_TOKEN` no Vercel
- Passthrough Headers: deixar vazio inicialmente
- Certificates: deixar vazio, salvo exigência corporativa específica
Depois do deploy, o servidor cadastrado no ICA não precisa ser recriado se URL e token permanecerem os mesmos. Atualize/reabra o catálogo apenas se o ICA mantiver cache antigo de ferramentas.
## Sequência obrigatória de testes no ICA
Não testar criação de Journey antes dos testes 1 a 5 passarem.
### Teste 1 — interoperabilidade básica
```text
Execute exclusivamente a ferramenta ica_echo com content="TESTE_ICA_BLUEWOLF_001".
Não execute nenhuma outra ferramenta.
Mostre exatamente o resultado retornado.
```
Resultado esperado:
`TESTE_ICA_BLUEWOLF_001`
Se retornar `ICA_ECHO_ARGUMENT_NOT_RECEIVED`, o MCP respondeu corretamente, mas o ICA não encaminhou o argumento.
### Teste 2 — conectividade MCP
```text
Execute exclusivamente mcp_ping.
Mostre exatamente o resultado retornado pela ferramenta.
Não utilize conhecimento próprio.
```
Resultado esperado: `status: ok`, `gateway: bluewolf-martech-mcp` e `responseMode: json`.
### Teste 3 — configuração SFMC
```text
Execute exclusivamente sfmc_configuration_status.
Informe apenas quais configurações estão presentes ou ausentes.
Não revele Client Secret, token ou qualquer credencial.
```
### Teste 4 — autenticação real SFMC
```text
Execute exclusivamente sfmc_health.
Valide a autenticação Server-to-Server real com o Salesforce Marketing Cloud.
Não revele credenciais nem access token.
```
### Teste 5 — leitura real
```text
Execute exclusivamente sfmc_list_data_extensions com limit=10.
Retorne somente informações realmente recebidas da ferramenta.
Não invente nomes, Customer Keys ou identificadores.
```
### Teste 6 — dry-run de Journey
```text
Execute exclusivamente sfmc_create_journey_draft com:
name="POC SABESP - Journey Draft Teste"
key="POC_SABESP_DRAFT_TESTE"
description="Teste técnico ICA + Bluewolf MCP + SFMC. Não publicar e não ativar."
approved=false
dryRun=true
approvalReference="POC-ICA-SFMC-001"
Mostre exatamente o payload proposto e a salesforceJourneyKey gerada.
Não faça nenhuma escrita real.
```
### Teste 7 — criação real de draft
Somente depois de Testes 1 a 6 passarem e existir autorização explícita:
```text
Execute exclusivamente sfmc_create_journey_draft com os mesmos dados aprovados,
approved=true,
dryRun=false,
approvalReference="POC-ICA-SFMC-001".
Crie somente o draft.
Não publique.
Não ative.
```
## Agent recomendado no ICA
Nome:
`SABESP MarTech Journey Factory - Salesforce Marketing Cloud`
Summary:
`Assistente MarTech da SABESP integrado ao Salesforce Marketing Cloud por meio do Bluewolf MCP Gateway, responsável por apoiar a esteira de criação de campanhas e jornadas: briefing, validação técnica, análise de dados, consulta ao ambiente SFMC, desenho da estratégia, geração de blueprint, definição de automações, validação de Data Extensions, governança, aprovação e criação controlada de drafts no Journey Builder.`
Welcome Message:
`Olá! Sou o SABESP MarTech Journey Factory, integrado ao Salesforce Marketing Cloud através do Bluewolf MCP Gateway. Posso consultar o ambiente real, validar Journeys, Data Extensions e Automations, estruturar briefings, gerar blueprints e preparar drafts controlados para revisão. Nenhuma publicação ou ativação é realizada automaticamente.`
Instructions sugeridas:
```text
Você é o SABESP MarTech Journey Factory, assistente técnico e estratégico do Programa CRM Salesforce SABESP.
Use prioritariamente as ferramentas do servidor SFMC - Bluewolf Gateway Oficial.
Regras obrigatórias:
1. Nunca invente dados, objetos, Data Extensions, Journeys, Automations, Customer Keys, IDs ou resultados do Salesforce Marketing Cloud.
2. Para diagnóstico, siga a ordem: ica_echo, mcp_ping, sfmc_configuration_status e sfmc_health.
3. Para contexto real, utilize martech_context_snapshot e as ferramentas sfmc_list_* / sfmc_get_*.
4. Diferencie claramente DADO REAL CONSULTADO, INFORMAÇÃO DO BRIEFING e SUGESTÃO DA IA.
5. Antes de propor uma nova jornada, entenda objetivo, público, oferta, canais, critérios de entrada e saída, regras de negócio, dados necessários, KPIs, solicitante e aprovadores.
6. Utilize martech_generate_blueprint para estruturar a estratégia de ponta a ponta.
7. Utilize martech_validate_briefing antes de qualquer proposta de construção.
8. Não afirme que Data Cloud está conectado se a ferramenta indicar apenas extension point.
9. Nunca revele Client Secret, Bearer Token, access token ou qualquer credencial.
10. Nunca publique ou ative uma Journey automaticamente.
11. sfmc_create_journey_draft deve permanecer em dryRun=true até existir aprovação explícita.
12. Escrita real exige approved=true, dryRun=false e approvalReference válido.
13. Sempre explique qual ferramenta foi executada e utilize somente o resultado realmente retornado.
14. Em caso de erro de ferramenta, mostre a mensagem técnica recebida e não substitua por dados inventados.
15. Se uma ferramenta de diagnóstico falhar, não avance para uma ferramenta de escrita.
16. Responda em português do Brasil, salvo solicitação em contrário.
```
## Fluxo funcional alvo
```text
Marketing / SABESP
|
v
Demanda -> Briefing -> Público -> Estratégia -> Conteúdo -> Construção -> Medição -> Ativação
| | |
v v v
Data Cloud Automation SFMC
\ | /
\--------------v------------/
Bluewolf MCP
|
v
IBM Consulting Advantage
```
## Sobre deployments vermelhos antigos
Deployments com status `Error` permanecem visíveis no histórico do Vercel. Eles não significam que a produção atual está quebrada.
Para validar o estado atual, use sempre:
1. o commit mais recente da branch `main`;
2. GitHub Actions com conclusão `success`;
3. status Vercel do mesmo commit como `Deployment has completed` / `success`;
4. `/health` retornando a versão esperada.
## Segurança
- Não exponha `MCP_GATEWAY_TOKEN` em screenshots, README, Issues ou commits.
- Se um token for compartilhado em texto ou imagem, rotacione-o no Vercel e atualize o mesmo valor no ICA.
- Mantenha credenciais SFMC somente em Environment Variables do Vercel.
- Para POC, mantenha o write scope estritamente governado e com aprovação humana.
- Antes de produção definitiva, revisar allowlist de operações, logging, rotação de segredos e modelo de autorização.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues