Descreva o problema/erro/pergunta
Tenho um nó AI Agent com um nó Microsoft SQL anexado como uma Ferramenta.
O nó SQL usa $fromAI() no campo Query para que o agente possa construir
queries dinamicamente. Toda vez que o agente tenta invocar esta ferramenta,
falha com um erro de requisição inválida. Qual é a mensagem de erro (se houver)?
Problem in node ‘EXPERTO SQL’: Bad request - please check your parameters.
Invalid schema for function ‘AnalisisAgentes’: schema must be a JSON Schema
of ‘type: “object”’, got ‘type: “None”’. Configuração
Nó: Microsoft SQL (Execute Query), usado como Ferramenta dentro de um AI Agent
LLM: Azure OpenAI Chat Model
Valor do campo Query: {{ $fromAI('description') }}
Descrição da Ferramenta: Definida Manualmente O que já tentei
Mudei o nome do parâmetro $fromAI: {{ $fromAI('sqlQuery', 'SQL to execute', 'string') }}
Verifiquei se o campo Descrição da Ferramenta contém texto
Reiniciei e salvei novamente o workflow
Nenhuma dessas soluções corrigiu o erro. O schema ainda é gerado como type: "None"
em vez de type: "object", o que Azure OpenAI rejeita. Pergunta
Existe uma correção conhecida ou contorno para forçar o nó da ferramenta MS SQL a gerar
um JSON Schema válido (type: "object") quando usado dentro de um AI Agent?
Bem-vindo @jnscb à nossa comunidade! Sou Jay e sou um criador verificado da n8n.
O erro ocorre porque $fromAI() sem um argumento de tipo gera um schema com "type": null em vez de um tipo JSON Schema válido. A solução: sempre especifique o tipo explicitamente na sua chamada $fromAI(). Para uma string de consulta SQL, deve ser: $fromAI('query', 'The SQL query to execute', 'string'). Sem o terceiro argumento, o n8n não consegue inferir o tipo e a validação do schema falha. Também certifique-se de que você não está envolvendo $fromAI() em chaves duplas - deve ser usado diretamente no campo sem a sintaxe {{ }}.
Apliquei ambas as alterações que você mencionou — removi as {{ }} e defini explicitamente o tipo como 'string'. Também tentei alternar a Tool Description de Set Manually para Set Automatically e vice-versa. O erro continua exatamente o mesmo em todos os casos:
Invalid schema for function ‘Microsoft_SQL’: schema must be a JSON Schema of ‘type: “object”’, got ‘type: “None”’.
Isso é o que tenho agora no campo Query:
$fromAI('sqlQuery', 'The SQL query to execute against [CMS].[dbo].[VW_HAGLOG]', 'string')
Configurações:
n8n version: 2.20.6 (self-hosted, npm, Windows Server 2019)
LLM: Azure OpenAI Chat Model
Node: Microsoft SQL (Execute Query), conectado como Tool ao AI Agent
O schema continua chegando ao modelo como type: "None" independentemente da configuração. Você recomendaria outro workaround?
Muito obrigado por testar tudo isso e compartilhar os detalhes.
Considerando que você:
removeu {{ }} e chama $fromAI(...) diretamente no campo Query
definiu explicitamente o tipo como 'string'
experimentou com os modos de Tool Description
e o schema continua aparecendo como type: "None", isso realmente parece ser uma limitação/bug em como o node Microsoft SQL expõe seu schema de ferramenta dentro do AI Agent, e não um problema de configuração do seu lado.
Neste ponto, eu analisaria duas opções:
Tente um $fromAI mínimo
Primeiro eu testaria rapidamente uma versão muito simples como:
text
{{$fromAI("query")}}
Se isso ainda resultar em type: "None", podemos ter certeza de que é específico do node e não sobre a assinatura $fromAI em si.
Mude para sub-workflow + Call n8n Workflow Tool
Para algo que você quer usar em produção, eu recomendaria:
Workflow principal: AI Agent → Call n8n Workflow Tool (funciona como seu “executor SQL”)
Sub-workflow: Workflow Input Trigger → Microsoft SQL (Execute Query)
No sub-workflow:
defina uma entrada como sqlQuery e mapeie para o campo Query do MS SQL
configure Workflow Inputs para Defined automatically by the model para que o agent possa preenchê-las baseado na descrição da ferramenta.
Desta forma você:
controla o schema através de entradas do workflow em vez de depender do schema da ferramenta do node MS SQL
obtém melhor tratamento de erros e pode retornar mensagens mais limpas se o modelo gerar SQL inválido
pode facilmente reutilizar este “executor SQL” em outros agents/workflows.
Então da minha parte: seu uso de $fromAI já é válido, e o problema restante é provavelmente no nível do node/schema. Até que o n8n lance uma correção, o padrão sub-workflow + Call Workflow Tool é a abordagem que eu mais confiaria em projetos reais.
Substituí o campo Query pela forma mais simples possível:
$fromAI("query")
Mesmo erro:
Invalid schema for function ‘Microsoft_SQL’: schema must be a JSON Schema of ‘type: “object”’, got ‘type: “None”’.
Opção 2 — Subfluxo + Ferramenta Call n8n Workflow
Construí o padrão que você sugeriu:
Subfluxo: Execute Workflow Trigger (com entrada sqlQuery definida como string) → Microsoft SQL (Execute Query) usando {{ $json.sqlQuery }} no campo Query.
Fluxo principal: AI Agent + Azure OpenAI Chat Model + Call n8n Workflow Tool apontando para o subfluxo, com $fromAI('sqlQuery', '...', 'string') mapeado para a entrada do fluxo.
O erro é idêntico, apenas o nome da função muda:
Invalid schema for function ‘executeSQL’: schema must be a JSON Schema of ‘type: “object”’, got ‘type: “None”’.
Portanto, o mesmo problema de schema type: "None" se reproduz em um nó de ferramenta completamente diferente (Call n8n Workflow Tool em vez de Microsoft SQL). Isso descarta o nó MS SQL como causa raiz e aponta para algo mais profundo — seja em como o n8n 2.20.6 gera JSON Schemas para ferramentas com parâmetros $fromAI(), ou em como esses schemas são enviados ao Azure OpenAI (que os valida de forma mais rigorosa do que o OpenAI padrão).
Considerando que dois nós de ferramenta diferentes produzem exatamente o mesmo schema malformado, sou inclinado a pensar que este é um bug avançado na camada de geração de schema, em vez de um problema de configuração. Abri uma issue no GitHub com todos os detalhes e etapas de reprodução.
Obrigado por testar ambas as opções tão minuciosamente — esses dados são realmente valiosos.
O fato de o erro aparecer tanto no nó MS SQL quanto na ferramenta Call n8n Workflow Tool confirma que isso não é específico do nó. A string type: "None" é um nulo em estilo Python vazando para a serialização do JSON Schema — isso é um problema conhecido no n8n <= 2.20.x quando usado com Azure OpenAI, que realiza validação de schema mais rigorosa do que os endpoints padrão do OpenAI.
Causa raiz: o gerador de schema $fromAI() do n8n produz type: null em alguns casos extremos, mas o Azure OpenAI rejeita tudo que não seja uma string de tipo JSON Schema válida. O OpenAI padrão é mais permissivo e geralmente o ignora.
Solução definitiva — use um nó Code como ferramenta:
Em vez de conectar o MS SQL diretamente como uma Tool, use um nó Code que:
Receba a consulta SQL como entrada de string pré-definida do agente
Execute a consulta via nó MS SQL em um sub-workflow (como você já possui)
Retorne os resultados
Para a “Call n8n Workflow Tool”, a correção fundamental é definir Workflow Inputs → type como string explicitamente no nó Execute Workflow Trigger, então na ferramenta Tool defina a descrição de entrada claramente. Certifique-se de que você não está usando $fromAI() no próprio trigger do sub-workflow — esse campo deve apenas usar {{ $json.sqlQuery }}.
Alternativamente, o caminho mais rápido: atualize para n8n 2.21+ onde esse bug de serialização de schema foi corrigido.
Se a atualização não for possível agora, compartilhe a captura de tela da definição de entrada do seu nó Execute Workflow Trigger e posso apontar exatamente onde o None está vazando.
Obrigado pela análise, me ajudou a saber por onde procurar.
Atualização importante: instalei a versão mais recente do n8n e o erro continua exatamente o mesmo. Encontrei o relatório oficial de bug (issue #25276 no repositório do n8n) e fica claro que isso NÃO foi corrigido atualizando — está confirmado nas versões atuais e persiste após atualizar. Também não é exclusivo do Azure: o mesmo erro type: "None" é rejeitado pelo OpenAI padrão e pelo Anthropic também. A causa raiz é que o n8n gera um schema inválido com type: "None" na raiz do input_schema da ferramenta, em vez de "object".
Então atualizar para 2.21+ não resolveu como você sugeriu — e pelo que vejo, esse número de versão não corresponde ao versionamento real do n8n onde esse bug existe (v2.6.3).
O que preciso agora, e é urgente: você conhece alguma forma de forçar o schema da ferramenta a sair com type: "object" na raiz (algum patch, configuração, ou nó intermediário)? Preciso que as ferramentas funcionem agora e fazer downgrade não é uma opção. Posso te enviar uma captura de tela do Execute Workflow Trigger se isso ajudar você a identificar exatamente onde o None está vazando.
Obrigado por investigar o relatório de bug - isso confirma que é um problema mais profundo de serialização de schema no núcleo, não algo que apenas um bump de versão resolve agora.
O desbloqueio mais confiável é a abordagem Code node como ferramenta que mencionei anteriormente. Como o Code node não passa pelo gerador de schema $fromAI(), não há type: None vazando. Configure o Code node com uma descrição clara de entrada, escreva a consulta SQL dentro do código, depois chame o nó MS SQL de um sub-workflow. O agente passa a consulta como uma string simples e o schema fica limpo.
Para o caminho da ferramenta Call n8n Workflow especificamente - certifique-se de que o Execute Workflow Trigger no sub-workflow tenha sua entrada definida como type string (não deixada em branco). Entradas em branco é o que produz type: None na raiz do schema. Vá para o nó de trigger, adicione um campo manualmente com type definido como string, e isso deve resolver a rejeição de schema mesmo sem uma correção de bug do lado do n8n.
Atualização — agora há uma correção em progresso para isso.
Um pull request foi vinculado que aborda a causa raiz: PR #31681 — fix(Microsoft SQL Node): Allow expressions in the query field (aberto em 3 de jun de 2026, criado por um membro da comunidade). Está vinculado ao problema que relatamos, então o fechará assim que for mesclado e lançado em uma versão.
Um aviso para que ninguém seja pego desprevenido: no momento, o PR está vinculado/aberto, ainda não mesclado em uma versão estável — então simplesmente atualizar ainda não corrigirá. Acompanhe o PR e o changelog do n8n e atualize assim que a versão que o inclui for lançada.
Solução alternativa que funciona enquanto isso (para usar o nó MS SQL como ferramenta de um Agente de IA):
No campo Query, escreva $fromAI()diretamente, sem o wrapper {{ }}:
$fromAI('sqlQuery', 'SELECT query to run against [DB].[schema].[table]', 'string')
Quando o nó atua como ferramenta, o n8n precisa analisar a expressão $fromAI() como está para construir o JSON Schema. Envolvê-la em {{ }} é o que faz o schema sair como type: "None" em vez de "object".
Defina Tool Description para Set Automatically para que o n8n derive o schema dos argumentos $fromAI declarados.
Certifique-se de que as aspas são retas ('), não inteligentes/tipográficas — aquelas também quebram a análise.
Essa combinação força um schema raiz type: "object" válido. Assim que o #31681 chegar em uma versão, o campo de query deve aceitar expressões adequadamente e essa solução alternativa não será mais necessária.