Crear un servidor API de Domains-Index con permisos de operación completos para agentes de IA
Este es unEngineering, AI Chatbotflujo de automatización del dominio deautomatización que contiene 18 nodos.Utiliza principalmente nodos como HttpRequestTool, McpTrigger. Crear un servidor de API de Domains-Index con permisos de operación completos para el uso de agentes de IA
- •Pueden requerirse credenciales de autenticación para la API de destino
Nodos utilizados (18)
Categoría
{
"meta": {
"instanceId": "cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc"
},
"nodes": [
{
"id": "eecf02a6-597a-4497-b1e8-c75b03bc90dc",
"name": "Descripción general del flujo de trabajo",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1420,
-240
],
"parameters": {
"width": 480,
"height": 1240,
"content": "## 🛠️ Domains-Index MCP Server ✅ 14 operations\n\n### About\nDomains-Index database powered API\n\n### 🔧 How it Works\n\nThis workflow converts the Domains-Index API into an MCP-compatible interface for AI agents.\n\n• **MCP Trigger**: Serves as your server endpoint for AI agent requests\n• **HTTP Request Nodes**: Handle API calls to /v1\n• **AI Expressions**: Automatically populate parameters via `$fromAI()` placeholders\n• **Native Integration**: Returns responses directly to the AI agent\n\n### 📋 Available Operations (14 endpoints)\n\n**Domains/ (9 operations)**\ndomains, get, download, list\n\n**Info/ (5 operations)**\nget, returns\n\n### ⚙️ Setup Instructions\n\n1. **Import Workflow**: Load this workflow into your n8n instance\n\n2. **Authentication**: No authentication required\n\n3. **Activate Workflow**: Enable the workflow to start the MCP server\n\n4. **Get MCP URL**: Copy the webhook URL from the MCP trigger\n\n5. **Connect AI Agent**: Use the MCP URL in your AI agent configuration\n\n### 💡 Usage Notes\n\n• Parameters are auto-populated by AI using $fromAI() expressions\n• With 14 API endpoints available as tools\n• Responses maintain original API structure\n### 🛠️ Customization\n\n• Add data transformation nodes if needed\n• Implement custom error handling\n• Add logging or monitoring nodes\n\n• Modify parameter defaults in any HTTP request node as needed\n\n### 💬 Need Help?\nCheck the [n8n documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolmcp/) or ping me on [discord](https://discord.me/cfomodz) for MCP integration guidance or customizations."
},
"typeVersion": 1
},
{
"id": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"name": "Servidor MCP de Domains-Index",
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"position": [
-600,
-220
],
"webhookId": "2bc52935-b8b0-41ac-a231-50f57b206060",
"parameters": {
"path": "domains-index-mcp"
},
"typeVersion": 1
},
{
"id": "bae3bfb2-5a11-40af-b555-f5caef5e3f0e",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
20
],
"parameters": {
"color": 2,
"width": 1900,
"height": 180,
"content": "## Domains"
},
"typeVersion": 1
},
{
"id": "32a8e85b-815e-4bd1-8ea9-acd73b7e72db",
"name": "Búsqueda en base de datos de dominios",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-740,
40
],
"parameters": {
"url": "=/v1/domains/search",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
},
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
},
{
"name": "domain",
"value": "={{ $fromAI('domain', 'Domain includes', 'string') }}"
},
{
"name": "zone",
"value": "={{ $fromAI('zone', 'In Zone', 'string') }}"
},
{
"name": "country",
"value": "={{ $fromAI('country', 'Hosting Country', 'string') }}"
},
{
"name": "isDead",
"value": "={{ $fromAI('isDead', 'Dead or Not, default not', 'boolean') }}"
},
{
"name": "A",
"value": "={{ $fromAI('A', 'A record includes', 'string') }}"
},
{
"name": "NS",
"value": "={{ $fromAI('NS', 'NS record includes', 'string') }}"
},
{
"name": "CNAME",
"value": "={{ $fromAI('CNAME', 'CNAME record includes', 'string') }}"
},
{
"name": "MX",
"value": "={{ $fromAI('MX', 'MX record includes', 'string') }}"
},
{
"name": "TXT",
"value": "={{ $fromAI('TXT', 'TXT record includes', 'string') }}"
}
]
},
"toolDescription": "Domains Database Search\n\nParameters:\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date\n • page (optional) - Search page to request\n • limit (optional) - Results per page\n • domain (optional) - Domain includes\n • zone (optional) - In Zone\n • country (optional) - Hosting Country\n • isDead (optional) - Dead or Not, default not\n • A (optional) - A record includes\n • NS (optional) - NS record includes\n • CNAME (optional) - CNAME record includes\n • MX (optional) - MX record includes\n • TXT (optional) - TXT record includes"
},
"typeVersion": 4.2
},
{
"id": "b43711bb-09a0-4fde-bfe4-0282d7a16293",
"name": "Obtener registros TLD",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-540,
40
],
"parameters": {
"url": "=/v1/domains/tld/{{ $fromAI('zone_id', 'Zone Id', 'string') }}",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
},
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
},
{
"name": "domain",
"value": "={{ $fromAI('domain', 'Domain includes', 'string') }}"
},
{
"name": "country",
"value": "={{ $fromAI('country', 'Hosting Country', 'string') }}"
},
{
"name": "isDead",
"value": "={{ $fromAI('isDead', 'Dead or Not, default not', 'boolean') }}"
},
{
"name": "A",
"value": "={{ $fromAI('A', 'A record includes', 'string') }}"
},
{
"name": "NS",
"value": "={{ $fromAI('NS', 'NS record includes', 'string') }}"
},
{
"name": "CNAME",
"value": "={{ $fromAI('CNAME', 'CNAME record includes', 'string') }}"
},
{
"name": "MX",
"value": "={{ $fromAI('MX', 'MX record includes', 'string') }}"
},
{
"name": "TXT",
"value": "={{ $fromAI('TXT', 'TXT record includes', 'string') }}"
}
]
},
"toolDescription": "Get TLD records\n\nParameters:\n- Path parameters:\n • zone_id (required)\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date\n • page (optional) - Search page to request\n • limit (optional) - Results per page\n • domain (optional) - Domain includes\n • country (optional) - Hosting Country\n • isDead (optional) - Dead or Not, default not\n • A (optional) - A record includes\n • NS (optional) - NS record includes\n • CNAME (optional) - CNAME record includes\n • MX (optional) - MX record includes\n • TXT (optional) - TXT record includes"
},
"typeVersion": 4.2
},
{
"id": "5c93b474-12ec-4a1d-a74c-361c587e8910",
"name": "Descargar conjunto de datos completo para TLD",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-340,
40
],
"parameters": {
"url": "=/v1/domains/tld/{{ $fromAI('zone_id', 'Zone Id', 'string') }}/download",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
}
]
},
"toolDescription": "Download Whole Dataset for TLD\n\nParameters:\n- Path parameters:\n • zone_id (required)\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date"
},
"typeVersion": 4.2
},
{
"id": "621d33a8-20f4-49f0-8deb-c24db973bb6d",
"name": "Búsqueda de dominios para TLD",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-140,
40
],
"parameters": {
"url": "=/v1/domains/tld/{{ $fromAI('zone_id', 'Zone Id', 'string') }}/search",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
},
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
},
{
"name": "domain",
"value": "={{ $fromAI('domain', 'Domain includes', 'string') }}"
},
{
"name": "country",
"value": "={{ $fromAI('country', 'Hosting Country', 'string') }}"
},
{
"name": "isDead",
"value": "={{ $fromAI('isDead', 'Dead or Not, default not', 'boolean') }}"
},
{
"name": "A",
"value": "={{ $fromAI('A', 'A record includes', 'string') }}"
},
{
"name": "NS",
"value": "={{ $fromAI('NS', 'NS record includes', 'string') }}"
},
{
"name": "CNAME",
"value": "={{ $fromAI('CNAME', 'CNAME record includes', 'string') }}"
},
{
"name": "MX",
"value": "={{ $fromAI('MX', 'MX record includes', 'string') }}"
},
{
"name": "TXT",
"value": "={{ $fromAI('TXT', 'TXT record includes', 'string') }}"
}
]
},
"toolDescription": "Domains Search for TLD\n\nParameters:\n- Path parameters:\n • zone_id (required)\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date\n • page (optional) - Search page to request\n • limit (optional) - Results per page\n • domain (optional) - Domain includes\n • country (optional) - Hosting Country\n • isDead (optional) - Dead or Not, default not\n • A (optional) - A record includes\n • NS (optional) - NS record includes\n • CNAME (optional) - CNAME record includes\n • MX (optional) - MX record includes\n • TXT (optional) - TXT record includes"
},
"typeVersion": 4.2
},
{
"id": "375d5ca0-9a17-4224-ba8f-7fd8ba4de99c",
"name": "Obtener dominios añadidos (más recientes si no se especifica fecha)",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
60,
40
],
"parameters": {
"url": "=/v1/domains/updates/added",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
},
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
}
]
},
"toolDescription": "Get added domains, latest if date not specified\n\nParameters:\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date\n • page (optional) - Search page to request\n • limit (optional) - Results per page"
},
"typeVersion": 4.2
},
{
"id": "5a856609-527b-49e6-91c5-8e12a66d53e4",
"name": "Descargar dominios añadidos (más recientes si no se especifica fecha)",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
260,
40
],
"parameters": {
"url": "=/v1/domains/updates/added/download",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
}
]
},
"toolDescription": "Download added domains, latest if date not specified\n\nParameters:\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date"
},
"typeVersion": 4.2
},
{
"id": "e2ecb90e-a459-41b9-9c10-5e5ef7727489",
"name": "Obtener dominios eliminados (más recientes si no se especifica fecha)",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
460,
40
],
"parameters": {
"url": "=/v1/domains/updates/deleted",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
},
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
}
]
},
"toolDescription": "Get deleted domains, latest if date not specified\n\nParameters:\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date\n • page (optional) - Search page to request\n • limit (optional) - Results per page"
},
"typeVersion": 4.2
},
{
"id": "794e6305-d71d-46b3-9c40-f43d4f199df1",
"name": "Descargar dominios eliminados (más recientes si no se especifica fecha)",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
660,
40
],
"parameters": {
"url": "=/v1/domains/updates/deleted/download",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
},
{
"name": "date",
"value": "={{ $fromAI('date', 'Request date', 'string') }}"
}
]
},
"toolDescription": "Download deleted domains, latest if date not specified\n\nParameters:\n- Query parameters:\n • api_key (optional) - API key\n • date (optional) - Request date"
},
"typeVersion": 4.2
},
{
"id": "995adb26-3395-474b-b8c4-910e55d9c2d3",
"name": "Lista de actualizaciones",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
860,
40
],
"parameters": {
"url": "=/v1/domains/updates/list",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
}
]
},
"toolDescription": "List of updates\n\nParameters:\n- Query parameters:\n • api_key (optional) - API key"
},
"typeVersion": 4.2
},
{
"id": "91504439-9a4d-42e9-bcf6-ca8b760feab7",
"name": "Nota adhesiva 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
260
],
"parameters": {
"color": 3,
"width": 1100,
"height": 180,
"content": "## Info"
},
"typeVersion": 1
},
{
"id": "25e8cc9f-c4a2-4679-9ef9-689ba9173461",
"name": "Obtener información",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-740,
280
],
"parameters": {
"url": "=/v1/info/api",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "api_key",
"value": "={{ $fromAI('api_key', 'API key', 'string') }}"
}
]
},
"toolDescription": "get_api_info_item\n\nParameters:\n- Query parameters:\n • api_key (optional) - API key"
},
"typeVersion": 4.2
},
{
"id": "61d83dff-742e-4e4b-b0e8-3d89f4cccd66",
"name": "Devuelve estadísticas generales",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-540,
280
],
"parameters": {
"url": "=/v1/info/stat/",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
}
]
},
"toolDescription": "Returns overall stagtistics\n\nParameters:\n- Query parameters:\n • page (optional) - Search page to request\n • limit (optional) - Results per page"
},
"typeVersion": 4.2
},
{
"id": "4e5b4b87-5100-4528-883c-be9ab5895653",
"name": "Devuelve estadísticas para zona específica",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-340,
280
],
"parameters": {
"url": "=/v1/info/stat/{{ $fromAI('zone', 'Zone', 'string') }}",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
}
]
},
"toolDescription": "Returns statistics for specific zone\n\nParameters:\n- Path parameters:\n • zone (required)\n- Query parameters:\n • page (optional) - Search page to request\n • limit (optional) - Results per page"
},
"typeVersion": 4.2
},
{
"id": "8518fb19-37bd-4927-851e-f3b459f867fe",
"name": "Devuelve información general de TLD",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-140,
280
],
"parameters": {
"url": "=/v1/info/tld/",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"toolDescription": "Returns overall Tld info"
},
"typeVersion": 4.2
},
{
"id": "6569b5d1-ab68-437b-aa05-9e0c630a7e0a",
"name": "Devuelve estadísticas para zona específica 1",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
60,
280
],
"parameters": {
"url": "=/v1/info/tld/{{ $fromAI('zone', 'Zone', 'string') }}",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "page",
"value": "={{ $fromAI('page', 'Search page to request', 'string') }}"
},
{
"name": "limit",
"value": "={{ $fromAI('limit', 'Results per page', 'number', 50) }}"
}
]
},
"toolDescription": "Returns statistics for specific zone\n\nParameters:\n- Path parameters:\n • zone (required)\n- Query parameters:\n • page (optional) - Search page to request\n • limit (optional) - Results per page"
},
"typeVersion": 4.2
}
],
"pinData": {},
"connections": {
"25e8cc9f-c4a2-4679-9ef9-689ba9173461": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"b43711bb-09a0-4fde-bfe4-0282d7a16293": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"995adb26-3395-474b-b8c4-910e55d9c2d3": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"621d33a8-20f4-49f0-8deb-c24db973bb6d": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"32a8e85b-815e-4bd1-8ea9-acd73b7e72db": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"8518fb19-37bd-4927-851e-f3b459f867fe": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"61d83dff-742e-4e4b-b0e8-3d89f4cccd66": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"5c93b474-12ec-4a1d-a74c-361c587e8910": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"4e5b4b87-5100-4528-883c-be9ab5895653": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"6569b5d1-ab68-437b-aa05-9e0c630a7e0a": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"375d5ca0-9a17-4224-ba8f-7fd8ba4de99c": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"e2ecb90e-a459-41b9-9c10-5e5ef7727489": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"5a856609-527b-49e6-91c5-8e12a66d53e4": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
},
"794e6305-d71d-46b3-9c40-f43d4f199df1": {
"ai_tool": [
[
{
"node": "b6be80ae-20c2-4345-b911-b49e072e0ccb",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Ingeniería, Chatbot de IA
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
David Ashby
@cfomodzA hacker by nature, programmer by trade ⚒️ I'm looking to collaborate on things that save human labor 📫 How to reach me Github👇 -> Discord
Compartir este flujo de trabajo