Los grandes flujos de trabajo n8n resultan imposibles de mantener sin documentación, pero nadie los documenta manualmente. Este tutorial utiliza Claude Code con Search MCP para analizar exportaciones JSON n8n, buscar documentación de nodos en línea y generar automáticamente documentos de flujo de trabajo legibles por humanos. Cada búsqueda de documentos cuesta $0,005.
Requisitos previos
- Código Claude instalado
- Scavio MCP configurado en .mcp.json
- Exportación JSON del flujo de trabajo n8n
- Node.js 18+ o Python 3.8+
Guia paso a paso
Paso 1: Exportar y analizar el flujo de trabajo n8n JSON
Exporte un flujo de trabajo desde n8n y analice su estructura de nodos.
import json, os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
# Load exported n8n workflow
with open('workflow.json', 'r') as f:
workflow = json.load(f)
nodes = workflow.get('nodes', [])
connections = workflow.get('connections', {})
print(f'Workflow: {workflow.get("name", "Untitled")}')
print(f'Nodes: {len(nodes)}')
print(f'Connections: {sum(len(v) for v in connections.values())}')
print(f'\nNode types:')
for node in nodes:
ntype = node.get('type', 'unknown')
name = node.get('name', 'unnamed')
print(f' [{ntype}] {name}')Paso 2: Busque la documentación del nodo mediante la búsqueda
Busque documentación de cada tipo de nodo único para enriquecer los documentos.
def lookup_node_docs(node_type):
"""Search for n8n node documentation."""
query = f'n8n {node_type} node documentation site:docs.n8n.io'
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'country_code': 'us', 'num_results': 3}).json()
results = data.get('organic_results', [])
if results:
return {'url': results[0].get('link', ''), 'description': results[0].get('snippet', '')[:150]}
return {'url': '', 'description': 'No docs found'}
# Look up unique node types
node_types = list(set(n.get('type', '') for n in nodes))
node_docs = {}
for ntype in node_types:
node_docs[ntype] = lookup_node_docs(ntype)
print(f'{ntype}: {node_docs[ntype]["description"][:60]}...')
print(f'\nLookup cost: ${len(node_types) * 0.005:.3f}')Paso 3: Generar documentación de flujo de trabajo
Combine la estructura analizada y los documentos de nodos en un documento legible.
def generate_docs(workflow, node_docs):
nodes = workflow.get('nodes', [])
connections = workflow.get('connections', {})
doc = []
doc.append(f'# {workflow.get("name", "Untitled Workflow")}')
doc.append(f'\nGenerated: 2026-05-20')
doc.append(f'Nodes: {len(nodes)} | Connections: {sum(len(v) for v in connections.values())}')
doc.append(f'\n## Node Overview')
for i, node in enumerate(nodes, 1):
ntype = node.get('type', 'unknown')
name = node.get('name', 'unnamed')
docs = node_docs.get(ntype, {})
doc.append(f'\n### {i}. {name}')
doc.append(f'- Type: {ntype}')
doc.append(f'- Purpose: {docs.get("description", "N/A")}')
if docs.get('url'):
doc.append(f'- Docs: {docs["url"]}')
params = node.get('parameters', {})
if params:
doc.append(f'- Parameters: {json.dumps(params)[:100]}')
doc.append(f'\n## Data Flow')
for source, targets in connections.items():
for target_group in targets.get('main', [[]]):
for target in target_group:
doc.append(f' {source} -> {target.get("node", "?")}')
output = '\n'.join(doc)
print(output[:500])
return output
docs = generate_docs(workflow, node_docs)
with open('workflow_docs.md', 'w') as f:
f.write(docs)
print(f'\nDocs written to workflow_docs.md ({len(docs)} chars)')Ejemplo en Python
import os, requests, json
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
def doc_node(node_type):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': f'n8n {node_type} docs site:docs.n8n.io', 'country_code': 'us'}).json()
r = data.get('organic_results', [{}])[0]
return f'{r.get("title", "N/A")}: {r.get("snippet", "")[:80]}'
for ntype in ['n8n-nodes-base.httpRequest', 'n8n-nodes-base.if']:
print(f'{ntype}: {doc_node(ntype)}')
print('Cost: $0.010')Ejemplo en JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function docNode(nodeType) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query: `n8n ${nodeType} docs site:docs.n8n.io`, country_code: 'us' })
}).then(r => r.json());
const r = (data.organic_results || [])[0] || {};
return `${r.title || 'N/A'}: ${(r.snippet || '').slice(0, 80)}`;
}
console.log(await docNode('n8n-nodes-base.httpRequest'));Salida esperada
Workflow: Lead Enrichment Pipeline
Nodes: 8
Connections: 7
Node types:
[n8n-nodes-base.httpRequest] Fetch Company Data
[n8n-nodes-base.if] Check Email Valid
[n8n-nodes-base.set] Format Output
n8n-nodes-base.httpRequest: Make HTTP requests to any API or web...
n8n-nodes-base.if: Route items based on comparison operatio...
Lookup cost: $0.040
Docs written to workflow_docs.md (2340 chars)