[{"data":1,"prerenderedAt":2861},["ShallowReactive",2],{"blog-little-hotelier-mcp-claude-code-cursor-vscode-es":3,"blog-langs-little-hotelier-mcp-claude-code-cursor-vscode":2406,"blog-list-es":2415},{"id":4,"title":5,"body":6,"description":2364,"extension":2365,"meta":2366,"navigation":1041,"path":2402,"seo":2403,"stem":2404,"__hash__":2405},"content/blog/es/little-hotelier-mcp-claude-code-cursor-vscode.md","Cómo usar tus datos de Little Hotelier en Claude Code, Cursor y VS Code (configurar MCP)",{"type":7,"value":8,"toc":2346},"minimark",[9,22,25,30,45,87,93,96,106,140,157,160,164,167,172,181,217,235,269,275,370,385,389,405,463,478,482,506,650,666,674,678,696,754,757,782,841,851,854,969,973,986,990,993,1004,1007,1550,1561,1565,1572,2059,2077,2081,2086,2089,2093,2164,2170,2174,2177,2226,2230,2306,2309,2313,2342],[10,11,12,13,17,18,21],"p",{},"Añade un servidor MCP remoto, ",[14,15,16],"code",{},"https://dashboard.hotelier.tools/api/mcp",", con una clave de API de Hotelier Tools, y Claude Code, Cursor, VS Code (modo agente de Copilot), Windsurf o Gemini CLI podrán leer tus reservas, tarifas y facturas de Little Hotelier mientras te escriben código. En Claude Code es un solo comando: ",[14,19,20],{},"claude mcp add --transport http hotelier-tools https://dashboard.hotelier.tools/api/mcp --header \"Authorization: Bearer htk_YOUR_API_KEY\"",".",[10,23,24],{},"Abajo tienes la configuración exacta para cada herramienta (revisada con la documentación de cada proveedor en octubre de 2026), tres cosas que merece la pena construir y cuándo llamar directamente a la REST API.",[26,27,29],"h2",{"id":28},"antes-de-empezar-crea-una-clave-de-api","Antes de empezar: crea una clave de API",[10,31,32,33,40,41],{},"Little Hotelier no publica un servidor MCP, y la propia documentación de la API para partners de SiteMinder dice que los datos de disponibilidad y tarifas ",[34,35,39],"a",{"href":36,"rel":37},"https://developer.siteminder.com/smx-api/reference/availability-and-rates/publishers",[38],"nofollow","no se pueden obtener de Little Hotelier",". Hotelier Tools ofrece un servidor MCP y una REST API, con el propio acceso de tu alojamiento a Little Hotelier. No está afiliado a SiteMinder ni a Little Hotelier, ni cuenta con su respaldo. Contexto: ",[34,42,44],{"href":43},"/blog/little-hotelier-api","¿tiene API Little Hotelier?",[46,47,48,61,71,81],"ol",{},[49,50,51,52,56,57,60],"li",{},"En Hotelier Tools, conecta Little Hotelier en ",[53,54,55],"strong",{},"Credenciales"," (",[14,58,59],{},"/credentials",") si aún no lo has hecho.",[49,62,63,64,56,67,70],{},"Abre ",[53,65,66],{},"API y MCP → Claves API",[14,68,69],{},"/developer/api-keys",").",[49,72,73,74,77,78,21],{},"Escribe un nombre que indique dónde vas a usar la clave, como ",[14,75,76],{},"cursor-portatil",", y pulsa ",[53,79,80],{},"Generar clave",[49,82,83,84,21],{},"Cópiala enseguida: «Copia esta clave ahora: no se volverá a mostrar». Empieza por ",[14,85,86],{},"htk_",[88,89],"screenshot",{"alt":90,"caption":91,"path":69,"src":92},"Página de claves de API en Hotelier Tools: el formulario Generar una clave nueva con un campo de nombre y el botón Generar clave, una clave activa (MCP internal (chat), enmascarada) con un botón Revocar y las notas de Buenas prácticas de seguridad","Una clave por herramienta permite revocar solo la que dejes de usar.","/images/blog/demo/es/api-keys.webp",[10,94,95],{},"Una clave tiene los mismos permisos que tu cuenta de Hotelier Tools, en el único alojamiento donde la creaste. Puedes tener hasta 10 claves.",[10,97,98,101,102,105],{},[53,99,100],{},"Mantén la clave fuera de tus ficheros."," Guárdala en una variable de entorno llamada ",[14,103,104],{},"HT_API_KEY"," y haz referencia a ella desde las configuraciones:",[107,108,114],"pre",{"className":109,"code":110,"filename":111,"language":112,"meta":113,"style":113},"language-bash shiki shiki-themes github-light github-dark","echo 'export HT_API_KEY=\"htk_YOUR_API_KEY\"' >> ~/.zshrc   # o ~/.bashrc\n","macOS / Linux","bash","",[14,115,116],{"__ignoreMap":113},[117,118,121,125,129,133,136],"span",{"class":119,"line":120},"line",1,[117,122,124],{"class":123},"sj4cs","echo",[117,126,128],{"class":127},"sZZnC"," 'export HT_API_KEY=\"htk_YOUR_API_KEY\"'",[117,130,132],{"class":131},"szBVR"," >>",[117,134,135],{"class":127}," ~/.zshrc",[117,137,139],{"class":138},"sJ8bj","   # o ~/.bashrc\n",[107,141,146],{"className":142,"code":143,"filename":144,"language":145,"meta":113,"style":113},"language-powershell shiki shiki-themes github-light github-dark","setx HT_API_KEY \"htk_YOUR_API_KEY\"\n","Windows PowerShell","powershell",[14,147,148],{"__ignoreMap":113},[117,149,150,154],{"class":119,"line":120},[117,151,153],{"class":152},"sVt8B","setx HT_API_KEY ",[117,155,156],{"class":127},"\"htk_YOUR_API_KEY\"\n",[10,158,159],{},"Abre una terminal nueva (y reinicia tu editor) para que reconozca la variable.",[26,161,163],{"id":162},"cómo-añadir-el-servidor-mcp-a-claude-code-cursor-vs-code-windsurf-y-gemini-cli","Cómo añadir el servidor MCP a Claude Code, Cursor, VS Code, Windsurf y Gemini CLI",[10,165,166],{},"Cada herramienta guarda los mismos tres datos (dirección, transporte, clave) en un fichero ligeramente distinto. Elige la tuya.",[168,169,171],"h3",{"id":170},"claude-code","Claude Code",[10,173,174,175,180],{},"Claude Code tiene un comando integrado para servidores remotos (",[34,176,179],{"href":177,"rel":178},"https://code.claude.com/docs/en/mcp",[38],"documentación de Anthropic","):",[107,182,185],{"className":109,"code":183,"filename":184,"language":112,"meta":113,"style":113},"claude mcp add --transport http hotelier-tools https://dashboard.hotelier.tools/api/mcp --header \"Authorization: Bearer htk_YOUR_API_KEY\"\n","Terminal",[14,186,187],{"__ignoreMap":113},[117,188,189,193,196,199,202,205,208,211,214],{"class":119,"line":120},[117,190,192],{"class":191},"sScJk","claude",[117,194,195],{"class":127}," mcp",[117,197,198],{"class":127}," add",[117,200,201],{"class":123}," --transport",[117,203,204],{"class":127}," http",[117,206,207],{"class":127}," hotelier-tools",[117,209,210],{"class":127}," https://dashboard.hotelier.tools/api/mcp",[117,212,213],{"class":123}," --header",[117,215,216],{"class":127}," \"Authorization: Bearer htk_YOUR_API_KEY\"\n",[10,218,219,220,222,223,226,227,230,231,234],{},"Después inicia ",[14,221,192],{}," y escribe ",[14,224,225],{},"/mcp",". Hotelier Tools debería aparecer como ",[53,228,229],{},"connected","; un estado ",[14,232,233],{},"failed"," con un 401 significa que la clave es incorrecta.",[236,237,238,256],"ul",{},[49,239,240,243,244,247,248,251,252,255],{},[53,241,242],{},"Ámbito."," Por defecto el servidor se guarda solo para la carpeta actual. Añade ",[14,245,246],{},"--scope user"," después del nombre para usarlo en todos los proyectos, o ",[14,249,250],{},"--scope project"," para escribir un ",[14,253,254],{},".mcp.json"," compartido.",[49,257,258,261,262,265,266,268],{},[53,259,260],{},"Iniciar sesión en vez de usar una clave."," Ejecuta el comando sin ",[14,263,264],{},"--header",", y dentro de Claude Code escribe ",[14,267,225],{}," y autentícate en el navegador. Si ya conectaste Hotelier Tools como conector en claude.ai, Claude Code puede recogerlo cuando inicies sesión con la misma cuenta de Claude.",[10,270,271,272,274],{},"Para un proyecto que compartes con un compañero o guardas en Git, pon el servidor en ",[14,273,254],{}," y deja que cada persona aporte su propia clave:",[107,276,280],{"className":277,"code":278,"filename":254,"language":279,"meta":113,"style":113},"language-json shiki shiki-themes github-light github-dark","{\n  \"mcpServers\": {\n    \"hotelier-tools\": {\n      \"type\": \"http\",\n      \"url\": \"https://dashboard.hotelier.tools/api/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${HT_API_KEY}\" }\n    }\n  }\n}\n","json",[14,281,282,287,296,304,319,332,352,358,364],{"__ignoreMap":113},[117,283,284],{"class":119,"line":120},[117,285,286],{"class":152},"{\n",[117,288,290,293],{"class":119,"line":289},2,[117,291,292],{"class":123},"  \"mcpServers\"",[117,294,295],{"class":152},": {\n",[117,297,299,302],{"class":119,"line":298},3,[117,300,301],{"class":123},"    \"hotelier-tools\"",[117,303,295],{"class":152},[117,305,307,310,313,316],{"class":119,"line":306},4,[117,308,309],{"class":123},"      \"type\"",[117,311,312],{"class":152},": ",[117,314,315],{"class":127},"\"http\"",[117,317,318],{"class":152},",\n",[117,320,322,325,327,330],{"class":119,"line":321},5,[117,323,324],{"class":123},"      \"url\"",[117,326,312],{"class":152},[117,328,329],{"class":127},"\"https://dashboard.hotelier.tools/api/mcp\"",[117,331,318],{"class":152},[117,333,335,338,341,344,346,349],{"class":119,"line":334},6,[117,336,337],{"class":123},"      \"headers\"",[117,339,340],{"class":152},": { ",[117,342,343],{"class":123},"\"Authorization\"",[117,345,312],{"class":152},[117,347,348],{"class":127},"\"Bearer ${HT_API_KEY}\"",[117,350,351],{"class":152}," }\n",[117,353,355],{"class":119,"line":354},7,[117,356,357],{"class":152},"    }\n",[117,359,361],{"class":119,"line":360},8,[117,362,363],{"class":152},"  }\n",[117,365,367],{"class":119,"line":366},9,[117,368,369],{"class":152},"}\n",[10,371,372,373,376,377,380,381,384],{},"La línea ",[14,374,375],{},"\"type\": \"http\""," es obligatoria: Claude Code trata una entrada con ",[14,378,379],{},"url"," pero sin ",[14,382,383],{},"type"," como un error de configuración.",[168,386,388],{"id":387},"cursor","Cursor",[10,390,391,392,395,396,399,400,180],{},"Cursor lee ",[14,393,394],{},"~/.cursor/mcp.json"," para todos los proyectos, o ",[14,397,398],{},".cursor/mcp.json"," dentro de uno (",[34,401,404],{"href":402,"rel":403},"https://cursor.com/docs/context/mcp",[38],"documentación de Cursor",[107,406,408],{"className":277,"code":407,"filename":394,"language":279,"meta":113,"style":113},"{\n  \"mcpServers\": {\n    \"hotelier-tools\": {\n      \"url\": \"https://dashboard.hotelier.tools/api/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${env:HT_API_KEY}\" }\n    }\n  }\n}\n",[14,409,410,414,420,426,436,451,455,459],{"__ignoreMap":113},[117,411,412],{"class":119,"line":120},[117,413,286],{"class":152},[117,415,416,418],{"class":119,"line":289},[117,417,292],{"class":123},[117,419,295],{"class":152},[117,421,422,424],{"class":119,"line":298},[117,423,301],{"class":123},[117,425,295],{"class":152},[117,427,428,430,432,434],{"class":119,"line":306},[117,429,324],{"class":123},[117,431,312],{"class":152},[117,433,329],{"class":127},[117,435,318],{"class":152},[117,437,438,440,442,444,446,449],{"class":119,"line":321},[117,439,337],{"class":123},[117,441,340],{"class":152},[117,443,343],{"class":123},[117,445,312],{"class":152},[117,447,448],{"class":127},"\"Bearer ${env:HT_API_KEY}\"",[117,450,351],{"class":152},[117,452,453],{"class":119,"line":334},[117,454,357],{"class":152},[117,456,457],{"class":119,"line":354},[117,458,363],{"class":152},[117,460,461],{"class":119,"line":360},[117,462,369],{"class":152},[10,464,465,466,469,470,473,474,477],{},"Guarda y comprueba que el servidor está activado en los ajustes de MCP de Cursor (las versiones recientes listan los servidores en ",[53,467,468],{},"Customize"," en la barra lateral). Pregunta en el chat de ",[53,471,472],{},"Agent",". Cursor pide aprobación antes de ejecutar una herramienta por defecto; déjalo así con este servidor. Si omites ",[14,475,476],{},"headers",", Cursor te ofrece iniciar sesión en el navegador.",[168,479,481],{"id":480},"vs-code-con-github-copilot","VS Code con GitHub Copilot",[10,483,484,485,488,489,492,493,495,496,501,502,505],{},"VS Code usa ",[14,486,487],{},".vscode/mcp.json",", con ",[14,490,491],{},"servers"," como clave principal y un ",[14,494,375],{}," obligatorio (",[34,497,500],{"href":498,"rel":499},"https://code.visualstudio.com/docs/agents/reference/mcp-configuration",[38],"documentación de VS Code","). Su función ",[14,503,504],{},"inputs"," te pide la clave una vez y la guarda en el almacenamiento seguro de VS Code, así que nunca queda en el fichero:",[107,507,509],{"className":277,"code":508,"filename":487,"language":279,"meta":113,"style":113},"{\n  \"inputs\": [\n    {\n      \"type\": \"promptString\",\n      \"id\": \"ht-api-key\",\n      \"description\": \"Hotelier Tools API key (htk_…)\",\n      \"password\": true\n    }\n  ],\n  \"servers\": {\n    \"hotelier-tools\": {\n      \"type\": \"http\",\n      \"url\": \"https://dashboard.hotelier.tools/api/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${input:ht-api-key}\" }\n    }\n  }\n}\n",[14,510,511,515,523,528,539,551,563,573,577,582,590,597,608,619,635,640,645],{"__ignoreMap":113},[117,512,513],{"class":119,"line":120},[117,514,286],{"class":152},[117,516,517,520],{"class":119,"line":289},[117,518,519],{"class":123},"  \"inputs\"",[117,521,522],{"class":152},": [\n",[117,524,525],{"class":119,"line":298},[117,526,527],{"class":152},"    {\n",[117,529,530,532,534,537],{"class":119,"line":306},[117,531,309],{"class":123},[117,533,312],{"class":152},[117,535,536],{"class":127},"\"promptString\"",[117,538,318],{"class":152},[117,540,541,544,546,549],{"class":119,"line":321},[117,542,543],{"class":123},"      \"id\"",[117,545,312],{"class":152},[117,547,548],{"class":127},"\"ht-api-key\"",[117,550,318],{"class":152},[117,552,553,556,558,561],{"class":119,"line":334},[117,554,555],{"class":123},"      \"description\"",[117,557,312],{"class":152},[117,559,560],{"class":127},"\"Hotelier Tools API key (htk_…)\"",[117,562,318],{"class":152},[117,564,565,568,570],{"class":119,"line":354},[117,566,567],{"class":123},"      \"password\"",[117,569,312],{"class":152},[117,571,572],{"class":123},"true\n",[117,574,575],{"class":119,"line":360},[117,576,357],{"class":152},[117,578,579],{"class":119,"line":366},[117,580,581],{"class":152},"  ],\n",[117,583,585,588],{"class":119,"line":584},10,[117,586,587],{"class":123},"  \"servers\"",[117,589,295],{"class":152},[117,591,593,595],{"class":119,"line":592},11,[117,594,301],{"class":123},[117,596,295],{"class":152},[117,598,600,602,604,606],{"class":119,"line":599},12,[117,601,309],{"class":123},[117,603,312],{"class":152},[117,605,315],{"class":127},[117,607,318],{"class":152},[117,609,611,613,615,617],{"class":119,"line":610},13,[117,612,324],{"class":123},[117,614,312],{"class":152},[117,616,329],{"class":127},[117,618,318],{"class":152},[117,620,622,624,626,628,630,633],{"class":119,"line":621},14,[117,623,337],{"class":123},[117,625,340],{"class":152},[117,627,343],{"class":123},[117,629,312],{"class":152},[117,631,632],{"class":127},"\"Bearer ${input:ht-api-key}\"",[117,634,351],{"class":152},[117,636,638],{"class":119,"line":637},15,[117,639,357],{"class":152},[117,641,643],{"class":119,"line":642},16,[117,644,363],{"class":152},[117,646,648],{"class":119,"line":647},17,[117,649,369],{"class":152},[10,651,652,653,655,656,659,660,663,664,21],{},"Abre Copilot Chat, cambia al modo ",[53,654,472],{}," y usa ",[53,657,658],{},"Configure Tools"," para ver las herramientas de Hotelier Tools. VS Code puede pedirte que confíes en el servidor la primera vez que arranque. Para todos los espacios de trabajo, ejecuta ",[53,661,662],{},"MCP: Open User Configuration"," y pega ahí el mismo bloque. VS Code también admite el inicio de sesión en el navegador si omites ",[14,665,476],{},[88,667],{"alt":668,"caption":669,"path":670,"src":671,"height":672,"width":673},"Pestaña VS Code / GitHub Copilot de la página de configuración de MCP de Hotelier Tools: un fragmento de .vscode/mcp.json con servers, hotelier-tools, type http, la URL /api/mcp de la demo y una cabecera Authorization con el marcador htk_YOUR_API_KEY, y después Activa el modo agente en Copilot Chat","La página Configurar MCP tiene un fragmento listo para cada cliente. La demo muestra su propia dirección; la tuya es dashboard.hotelier.tools.","/developer/mcp-setup","/images/blog/demo/es/mcp-config-vscode-copilot.webp",446,1036,[168,675,677],{"id":676},"windsurf-y-gemini-cli","Windsurf y Gemini CLI",[10,679,680,683,684,655,687,690,691,180],{},[53,681,682],{},"Windsurf"," (cuya documentación ahora está en Devin) lee ",[14,685,686],{},"~/.codeium/windsurf/mcp_config.json",[14,688,689],{},"serverUrl"," para los servidores remotos (",[34,692,695],{"href":693,"rel":694},"https://docs.devin.ai/windsurf/plugins/cascade/mcp",[38],"documentación",[107,697,699],{"className":277,"code":698,"filename":686,"language":279,"meta":113,"style":113},"{\n  \"mcpServers\": {\n    \"hotelier-tools\": {\n      \"serverUrl\": \"https://dashboard.hotelier.tools/api/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${env:HT_API_KEY}\" }\n    }\n  }\n}\n",[14,700,701,705,711,717,728,742,746,750],{"__ignoreMap":113},[117,702,703],{"class":119,"line":120},[117,704,286],{"class":152},[117,706,707,709],{"class":119,"line":289},[117,708,292],{"class":123},[117,710,295],{"class":152},[117,712,713,715],{"class":119,"line":298},[117,714,301],{"class":123},[117,716,295],{"class":152},[117,718,719,722,724,726],{"class":119,"line":306},[117,720,721],{"class":123},"      \"serverUrl\"",[117,723,312],{"class":152},[117,725,329],{"class":127},[117,727,318],{"class":152},[117,729,730,732,734,736,738,740],{"class":119,"line":321},[117,731,337],{"class":123},[117,733,340],{"class":152},[117,735,343],{"class":123},[117,737,312],{"class":152},[117,739,448],{"class":127},[117,741,351],{"class":152},[117,743,744],{"class":119,"line":334},[117,745,357],{"class":152},[117,747,748],{"class":119,"line":354},[117,749,363],{"class":152},[117,751,752],{"class":119,"line":360},[117,753,369],{"class":152},[10,755,756],{},"Windsurf limita Cascade a 100 herramientas en total, y Hotelier Tools ofrece más de 100, así que puede que tengas que desactivar en el panel de MCP las que no uses.",[10,758,759,762,763,766,767,770,771,774,775,777,778,180],{},[53,760,761],{},"Gemini CLI"," lee ",[14,764,765],{},"~/.gemini/settings.json"," (o ",[14,768,769],{},".gemini/settings.json"," en un proyecto) y usa ",[14,772,773],{},"httpUrl"," para este tipo de servidor; ",[14,776,379],{}," significaría el transporte SSE antiguo, que Hotelier Tools no ofrece (",[34,779,695],{"href":780,"rel":781},"https://geminicli.com/docs/tools/mcp-server/",[38],[107,783,785],{"className":277,"code":784,"filename":765,"language":279,"meta":113,"style":113},"{\n  \"mcpServers\": {\n    \"hotelier-tools\": {\n      \"httpUrl\": \"https://dashboard.hotelier.tools/api/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer $HT_API_KEY\" }\n    }\n  }\n}\n",[14,786,787,791,797,803,814,829,833,837],{"__ignoreMap":113},[117,788,789],{"class":119,"line":120},[117,790,286],{"class":152},[117,792,793,795],{"class":119,"line":289},[117,794,292],{"class":123},[117,796,295],{"class":152},[117,798,799,801],{"class":119,"line":298},[117,800,301],{"class":123},[117,802,295],{"class":152},[117,804,805,808,810,812],{"class":119,"line":306},[117,806,807],{"class":123},"      \"httpUrl\"",[117,809,312],{"class":152},[117,811,329],{"class":127},[117,813,318],{"class":152},[117,815,816,818,820,822,824,827],{"class":119,"line":321},[117,817,337],{"class":123},[117,819,340],{"class":152},[117,821,343],{"class":123},[117,823,312],{"class":152},[117,825,826],{"class":127},"\"Bearer $HT_API_KEY\"",[117,828,351],{"class":152},[117,830,831],{"class":119,"line":334},[117,832,357],{"class":152},[117,834,835],{"class":119,"line":354},[117,836,363],{"class":152},[117,838,839],{"class":119,"line":360},[117,840,369],{"class":152},[10,842,843,844,847,848,850],{},"O desde la terminal: ",[14,845,846],{},"gemini mcp add --transport http --header \"Authorization: Bearer htk_YOUR_API_KEY\" hotelier-tools https://dashboard.hotelier.tools/api/mcp",". Escribe ",[14,849,225],{}," dentro de Gemini CLI para comprobarlo.",[10,852,853],{},"Estas dos configuraciones siguen la documentación de cada proveedor; no las hemos probado en todas las versiones.",[855,856,857,876],"table",{},[858,859,860],"thead",{},[861,862,863,867,870,873],"tr",{},[864,865,866],"th",{},"Herramienta",[864,868,869],{},"Fichero de configuración",[864,871,872],{},"Clave principal",[864,874,875],{},"Clave de la URL",[877,878,879,900,916,935,952],"tbody",{},[861,880,881,884,888,893],{},[882,883,171],"td",{},[882,885,886],{},[14,887,254],{},[882,889,890],{},[14,891,892],{},"mcpServers",[882,894,895,897,898],{},[14,896,379],{}," + ",[14,899,375],{},[861,901,902,904,908,912],{},[882,903,388],{},[882,905,906],{},[14,907,398],{},[882,909,910],{},[14,911,892],{},[882,913,914],{},[14,915,379],{},[861,917,918,921,925,929],{},[882,919,920],{},"VS Code",[882,922,923],{},[14,924,487],{},[882,926,927],{},[14,928,491],{},[882,930,931,897,933],{},[14,932,379],{},[14,934,375],{},[861,936,937,939,944,948],{},[882,938,682],{},[882,940,941],{},[14,942,943],{},"mcp_config.json",[882,945,946],{},[14,947,892],{},[882,949,950],{},[14,951,689],{},[861,953,954,956,961,965],{},[882,955,761],{},[882,957,958],{},[14,959,960],{},"settings.json",[882,962,963],{},[14,964,892],{},[882,966,967],{},[14,968,773],{},[26,970,972],{"id":971},"tres-cosas-que-merece-la-pena-construir","Tres cosas que merece la pena construir",[10,974,975,976,980,981,985],{},"El truco es dejar que el agente use MCP para ",[977,978,979],"em",{},"mirar"," tus datos reales, y que después escriba código que llame a la ",[34,982,984],{"href":983},"/tools/bot/api-mcp","REST API"," para que el resultado se ejecute cada mes sin IA.",[168,987,989],{"id":988},"un-informe-mensual-de-ocupación","Un informe mensual de ocupación",[10,991,992],{},"Pide a Claude Code (o al agente de Cursor) en una carpeta vacía:",[994,995,996],"prompt",{"label":171},[10,997,998,999,1003],{},"Usa el servidor MCP hotelier-tools para mirar mis tipos de habitación y las reservas del mes pasado. Después escribe un script de Node.js que llame a la REST API de Hotelier Tools (especificación: ",[34,1000,1001],{"href":1001,"rel":1002},"https://dashboard.hotelier.tools/api/v1/openapi.json",[38],") con la clave en HT_API_KEY y, para el mes que yo le pase, muestre la ocupación y la tarifa media diaria por tipo de habitación y las guarde en un CSV.",[10,1005,1006],{},"Un buen script empieza así. Obtiene los tipos de habitación y todas las reservas que se solapan con el mes, y guarda la respuesta en bruto para que puedas comprobar los campos antes de hacer cuentas:",[107,1008,1013],{"className":1009,"code":1010,"filename":1011,"language":1012,"meta":113,"style":113},"language-js shiki shiki-themes github-light github-dark","// Uso: node fetch-month.mjs 2026-09   (necesita HT_API_KEY en tu entorno)\nimport { writeFile } from \"node:fs/promises\";\n\nconst API = \"https://dashboard.hotelier.tools/api/v1\";\nconst headers = {\n  Authorization: `Bearer ${process.env.HT_API_KEY}`,\n  \"Content-Type\": \"application/json\",\n};\n\nasync function call(path, options = {}) {\n  const res = await fetch(`${API}${path}`, { ...options, headers });\n  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);\n  return res.json();\n}\n\nconst month = process.argv[2];\nconst [year, mon] = month.split(\"-\").map(Number);\nconst startDate = `${month}-01`;\nconst endDate = new Date(Date.UTC(year, mon, 0)).toISOString().slice(0, 10);\n\nconst roomTypes = await call(\"/room-types\");\nconst reservations = await call(\"/methods/getReservationsByDateRange\", {\n  method: \"POST\",\n  body: JSON.stringify({ params: { startDate, endDate } }),\n});\n\nawait writeFile(\n  `raw-${month}.json`,\n  JSON.stringify({ roomTypes: roomTypes.data, reservations: reservations.result }, null, 2)\n);\nconsole.log(`Saved raw-${month}.json`);\n","fetch-month.mjs","js",[14,1014,1015,1020,1037,1043,1059,1071,1096,1108,1113,1117,1146,1186,1241,1254,1258,1262,1280,1320,1341,1391,1396,1417,1439,1450,1467,1473,1478,1489,1502,1525,1530],{"__ignoreMap":113},[117,1016,1017],{"class":119,"line":120},[117,1018,1019],{"class":138},"// Uso: node fetch-month.mjs 2026-09   (necesita HT_API_KEY en tu entorno)\n",[117,1021,1022,1025,1028,1031,1034],{"class":119,"line":289},[117,1023,1024],{"class":131},"import",[117,1026,1027],{"class":152}," { writeFile } ",[117,1029,1030],{"class":131},"from",[117,1032,1033],{"class":127}," \"node:fs/promises\"",[117,1035,1036],{"class":152},";\n",[117,1038,1039],{"class":119,"line":298},[117,1040,1042],{"emptyLinePlaceholder":1041},true,"\n",[117,1044,1045,1048,1051,1054,1057],{"class":119,"line":306},[117,1046,1047],{"class":131},"const",[117,1049,1050],{"class":123}," API",[117,1052,1053],{"class":131}," =",[117,1055,1056],{"class":127}," \"https://dashboard.hotelier.tools/api/v1\"",[117,1058,1036],{"class":152},[117,1060,1061,1063,1066,1068],{"class":119,"line":321},[117,1062,1047],{"class":131},[117,1064,1065],{"class":123}," headers",[117,1067,1053],{"class":131},[117,1069,1070],{"class":152}," {\n",[117,1072,1073,1076,1079,1082,1084,1087,1089,1091,1094],{"class":119,"line":334},[117,1074,1075],{"class":152},"  Authorization: ",[117,1077,1078],{"class":127},"`Bearer ${",[117,1080,1081],{"class":152},"process",[117,1083,21],{"class":127},[117,1085,1086],{"class":152},"env",[117,1088,21],{"class":127},[117,1090,104],{"class":123},[117,1092,1093],{"class":127},"}`",[117,1095,318],{"class":152},[117,1097,1098,1101,1103,1106],{"class":119,"line":354},[117,1099,1100],{"class":127},"  \"Content-Type\"",[117,1102,312],{"class":152},[117,1104,1105],{"class":127},"\"application/json\"",[117,1107,318],{"class":152},[117,1109,1110],{"class":119,"line":360},[117,1111,1112],{"class":152},"};\n",[117,1114,1115],{"class":119,"line":366},[117,1116,1042],{"emptyLinePlaceholder":1041},[117,1118,1119,1122,1125,1128,1131,1135,1138,1141,1143],{"class":119,"line":584},[117,1120,1121],{"class":131},"async",[117,1123,1124],{"class":131}," function",[117,1126,1127],{"class":191}," call",[117,1129,1130],{"class":152},"(",[117,1132,1134],{"class":1133},"s4XuR","path",[117,1136,1137],{"class":152},", ",[117,1139,1140],{"class":1133},"options",[117,1142,1053],{"class":131},[117,1144,1145],{"class":152}," {}) {\n",[117,1147,1148,1151,1154,1156,1159,1162,1164,1167,1170,1173,1175,1177,1180,1183],{"class":119,"line":592},[117,1149,1150],{"class":131},"  const",[117,1152,1153],{"class":123}," res",[117,1155,1053],{"class":131},[117,1157,1158],{"class":131}," await",[117,1160,1161],{"class":191}," fetch",[117,1163,1130],{"class":152},[117,1165,1166],{"class":127},"`${",[117,1168,1169],{"class":123},"API",[117,1171,1172],{"class":127},"}${",[117,1174,1134],{"class":152},[117,1176,1093],{"class":127},[117,1178,1179],{"class":152},", { ",[117,1181,1182],{"class":131},"...",[117,1184,1185],{"class":152},"options, headers });\n",[117,1187,1188,1191,1193,1196,1199,1202,1205,1208,1210,1212,1215,1217,1220,1223,1226,1228,1230,1233,1236,1238],{"class":119,"line":599},[117,1189,1190],{"class":131},"  if",[117,1192,56],{"class":152},[117,1194,1195],{"class":131},"!",[117,1197,1198],{"class":152},"res.ok) ",[117,1200,1201],{"class":131},"throw",[117,1203,1204],{"class":131}," new",[117,1206,1207],{"class":191}," Error",[117,1209,1130],{"class":152},[117,1211,1166],{"class":127},[117,1213,1214],{"class":152},"res",[117,1216,21],{"class":127},[117,1218,1219],{"class":152},"status",[117,1221,1222],{"class":127},"} ${",[117,1224,1225],{"class":131},"await",[117,1227,1153],{"class":152},[117,1229,21],{"class":127},[117,1231,1232],{"class":191},"text",[117,1234,1235],{"class":127},"()",[117,1237,1093],{"class":127},[117,1239,1240],{"class":152},");\n",[117,1242,1243,1246,1249,1251],{"class":119,"line":610},[117,1244,1245],{"class":131},"  return",[117,1247,1248],{"class":152}," res.",[117,1250,279],{"class":191},[117,1252,1253],{"class":152},"();\n",[117,1255,1256],{"class":119,"line":621},[117,1257,369],{"class":152},[117,1259,1260],{"class":119,"line":637},[117,1261,1042],{"emptyLinePlaceholder":1041},[117,1263,1264,1266,1269,1271,1274,1277],{"class":119,"line":642},[117,1265,1047],{"class":131},[117,1267,1268],{"class":123}," month",[117,1270,1053],{"class":131},[117,1272,1273],{"class":152}," process.argv[",[117,1275,1276],{"class":123},"2",[117,1278,1279],{"class":152},"];\n",[117,1281,1282,1284,1287,1290,1292,1295,1298,1301,1304,1307,1309,1312,1314,1317],{"class":119,"line":647},[117,1283,1047],{"class":131},[117,1285,1286],{"class":152}," [",[117,1288,1289],{"class":123},"year",[117,1291,1137],{"class":152},[117,1293,1294],{"class":123},"mon",[117,1296,1297],{"class":152},"] ",[117,1299,1300],{"class":131},"=",[117,1302,1303],{"class":152}," month.",[117,1305,1306],{"class":191},"split",[117,1308,1130],{"class":152},[117,1310,1311],{"class":127},"\"-\"",[117,1313,70],{"class":152},[117,1315,1316],{"class":191},"map",[117,1318,1319],{"class":152},"(Number);\n",[117,1321,1323,1325,1328,1330,1333,1336,1339],{"class":119,"line":1322},18,[117,1324,1047],{"class":131},[117,1326,1327],{"class":123}," startDate",[117,1329,1053],{"class":131},[117,1331,1332],{"class":127}," `${",[117,1334,1335],{"class":152},"month",[117,1337,1338],{"class":127},"}-01`",[117,1340,1036],{"class":152},[117,1342,1344,1346,1349,1351,1353,1356,1359,1362,1365,1368,1371,1374,1377,1380,1382,1384,1386,1389],{"class":119,"line":1343},19,[117,1345,1047],{"class":131},[117,1347,1348],{"class":123}," endDate",[117,1350,1053],{"class":131},[117,1352,1204],{"class":131},[117,1354,1355],{"class":191}," Date",[117,1357,1358],{"class":152},"(Date.",[117,1360,1361],{"class":191},"UTC",[117,1363,1364],{"class":152},"(year, mon, ",[117,1366,1367],{"class":123},"0",[117,1369,1370],{"class":152},")).",[117,1372,1373],{"class":191},"toISOString",[117,1375,1376],{"class":152},"().",[117,1378,1379],{"class":191},"slice",[117,1381,1130],{"class":152},[117,1383,1367],{"class":123},[117,1385,1137],{"class":152},[117,1387,1388],{"class":123},"10",[117,1390,1240],{"class":152},[117,1392,1394],{"class":119,"line":1393},20,[117,1395,1042],{"emptyLinePlaceholder":1041},[117,1397,1399,1401,1404,1406,1408,1410,1412,1415],{"class":119,"line":1398},21,[117,1400,1047],{"class":131},[117,1402,1403],{"class":123}," roomTypes",[117,1405,1053],{"class":131},[117,1407,1158],{"class":131},[117,1409,1127],{"class":191},[117,1411,1130],{"class":152},[117,1413,1414],{"class":127},"\"/room-types\"",[117,1416,1240],{"class":152},[117,1418,1420,1422,1425,1427,1429,1431,1433,1436],{"class":119,"line":1419},22,[117,1421,1047],{"class":131},[117,1423,1424],{"class":123}," reservations",[117,1426,1053],{"class":131},[117,1428,1158],{"class":131},[117,1430,1127],{"class":191},[117,1432,1130],{"class":152},[117,1434,1435],{"class":127},"\"/methods/getReservationsByDateRange\"",[117,1437,1438],{"class":152},", {\n",[117,1440,1442,1445,1448],{"class":119,"line":1441},23,[117,1443,1444],{"class":152},"  method: ",[117,1446,1447],{"class":127},"\"POST\"",[117,1449,318],{"class":152},[117,1451,1453,1456,1459,1461,1464],{"class":119,"line":1452},24,[117,1454,1455],{"class":152},"  body: ",[117,1457,1458],{"class":123},"JSON",[117,1460,21],{"class":152},[117,1462,1463],{"class":191},"stringify",[117,1465,1466],{"class":152},"({ params: { startDate, endDate } }),\n",[117,1468,1470],{"class":119,"line":1469},25,[117,1471,1472],{"class":152},"});\n",[117,1474,1476],{"class":119,"line":1475},26,[117,1477,1042],{"emptyLinePlaceholder":1041},[117,1479,1481,1483,1486],{"class":119,"line":1480},27,[117,1482,1225],{"class":131},[117,1484,1485],{"class":191}," writeFile",[117,1487,1488],{"class":152},"(\n",[117,1490,1492,1495,1497,1500],{"class":119,"line":1491},28,[117,1493,1494],{"class":127},"  `raw-${",[117,1496,1335],{"class":152},[117,1498,1499],{"class":127},"}.json`",[117,1501,318],{"class":152},[117,1503,1505,1508,1510,1512,1515,1518,1520,1522],{"class":119,"line":1504},29,[117,1506,1507],{"class":123},"  JSON",[117,1509,21],{"class":152},[117,1511,1463],{"class":191},[117,1513,1514],{"class":152},"({ roomTypes: roomTypes.data, reservations: reservations.result }, ",[117,1516,1517],{"class":123},"null",[117,1519,1137],{"class":152},[117,1521,1276],{"class":123},[117,1523,1524],{"class":152},")\n",[117,1526,1528],{"class":119,"line":1527},30,[117,1529,1240],{"class":152},[117,1531,1533,1536,1539,1541,1544,1546,1548],{"class":119,"line":1532},31,[117,1534,1535],{"class":152},"console.",[117,1537,1538],{"class":191},"log",[117,1540,1130],{"class":152},[117,1542,1543],{"class":127},"`Saved raw-${",[117,1545,1335],{"class":152},[117,1547,1499],{"class":127},[117,1549,1240],{"class":152},[10,1551,1552,1553,1556,1557,1560],{},"La propia especificación de la API dice que los objetos de reserva vienen de Little Hotelier y que su «forma puede variar», así que deja que el agente lea el fichero guardado antes de calcular nada. ",[14,1554,1555],{},"/room-types"," da ",[14,1558,1559],{},"totalRooms"," por tipo, que es la otra mitad de la cuenta de ocupación.",[168,1562,1564],{"id":1563},"una-sincronización-con-google-sheets","Una sincronización con Google Sheets",[10,1566,1567,1568,1571],{},"Para una hoja que liste las llegadas de los próximos 30 días y se actualice cada mañana, abre tu hoja de cálculo, ve a ",[53,1569,1570],{},"Extensiones → Apps Script"," y pega:",[107,1573,1576],{"className":1009,"code":1574,"filename":1575,"language":1012,"meta":113,"style":113},"function syncArrivals() {\n  const key = PropertiesService.getScriptProperties().getProperty('HT_API_KEY');\n  const fmt = d => Utilities.formatDate(d, Session.getScriptTimeZone(), 'yyyy-MM-dd');\n  const today = new Date();\n  const in30 = new Date(today.getTime() + 30 * 24 * 60 * 60 * 1000);\n  const url = 'https://dashboard.hotelier.tools/api/v1/reservations'\n    + '?startDate=' + fmt(today) + '&endDate=' + fmt(in30) + '&limit=100';\n\n  const res = UrlFetchApp.fetch(url, {\n    headers: { Authorization: 'Bearer ' + key },\n    muteHttpExceptions: true,\n  });\n  if (res.getResponseCode() !== 200) throw new Error(res.getContentText());\n\n  const rows = JSON.parse(res.getContentText()).data.map(r => [\n    r.id, r.guestName, r.status, r.checkIn, r.checkOut, r.roomType, r.totalAmount,\n  ]);\n  const book = SpreadsheetApp.getActive();\n  const sheet = book.getSheetByName('Arrivals') || book.insertSheet('Arrivals');\n  sheet.clearContents();\n  sheet.appendRow(['ID', 'Guest', 'Status', 'Check-in', 'Check-out', 'Room type', 'Total']);\n  if (rows.length) sheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);\n}\n","Code.gs",[14,1577,1578,1589,1616,1651,1666,1716,1728,1763,1767,1784,1797,1807,1812,1848,1852,1888,1893,1898,1915,1951,1961,2007,2055],{"__ignoreMap":113},[117,1579,1580,1583,1586],{"class":119,"line":120},[117,1581,1582],{"class":131},"function",[117,1584,1585],{"class":191}," syncArrivals",[117,1587,1588],{"class":152},"() {\n",[117,1590,1591,1593,1596,1598,1601,1604,1606,1609,1611,1614],{"class":119,"line":289},[117,1592,1150],{"class":131},[117,1594,1595],{"class":123}," key",[117,1597,1053],{"class":131},[117,1599,1600],{"class":152}," PropertiesService.",[117,1602,1603],{"class":191},"getScriptProperties",[117,1605,1376],{"class":152},[117,1607,1608],{"class":191},"getProperty",[117,1610,1130],{"class":152},[117,1612,1613],{"class":127},"'HT_API_KEY'",[117,1615,1240],{"class":152},[117,1617,1618,1620,1623,1625,1628,1631,1634,1637,1640,1643,1646,1649],{"class":119,"line":298},[117,1619,1150],{"class":131},[117,1621,1622],{"class":191}," fmt",[117,1624,1053],{"class":131},[117,1626,1627],{"class":1133}," d",[117,1629,1630],{"class":131}," =>",[117,1632,1633],{"class":152}," Utilities.",[117,1635,1636],{"class":191},"formatDate",[117,1638,1639],{"class":152},"(d, Session.",[117,1641,1642],{"class":191},"getScriptTimeZone",[117,1644,1645],{"class":152},"(), ",[117,1647,1648],{"class":127},"'yyyy-MM-dd'",[117,1650,1240],{"class":152},[117,1652,1653,1655,1658,1660,1662,1664],{"class":119,"line":306},[117,1654,1150],{"class":131},[117,1656,1657],{"class":123}," today",[117,1659,1053],{"class":131},[117,1661,1204],{"class":131},[117,1663,1355],{"class":191},[117,1665,1253],{"class":152},[117,1667,1668,1670,1673,1675,1677,1679,1682,1685,1688,1691,1694,1697,1700,1702,1705,1707,1709,1711,1714],{"class":119,"line":321},[117,1669,1150],{"class":131},[117,1671,1672],{"class":123}," in30",[117,1674,1053],{"class":131},[117,1676,1204],{"class":131},[117,1678,1355],{"class":191},[117,1680,1681],{"class":152},"(today.",[117,1683,1684],{"class":191},"getTime",[117,1686,1687],{"class":152},"() ",[117,1689,1690],{"class":131},"+",[117,1692,1693],{"class":123}," 30",[117,1695,1696],{"class":131}," *",[117,1698,1699],{"class":123}," 24",[117,1701,1696],{"class":131},[117,1703,1704],{"class":123}," 60",[117,1706,1696],{"class":131},[117,1708,1704],{"class":123},[117,1710,1696],{"class":131},[117,1712,1713],{"class":123}," 1000",[117,1715,1240],{"class":152},[117,1717,1718,1720,1723,1725],{"class":119,"line":334},[117,1719,1150],{"class":131},[117,1721,1722],{"class":123}," url",[117,1724,1053],{"class":131},[117,1726,1727],{"class":127}," 'https://dashboard.hotelier.tools/api/v1/reservations'\n",[117,1729,1730,1733,1736,1739,1741,1744,1746,1749,1751,1753,1756,1758,1761],{"class":119,"line":354},[117,1731,1732],{"class":131},"    +",[117,1734,1735],{"class":127}," '?startDate='",[117,1737,1738],{"class":131}," +",[117,1740,1622],{"class":191},[117,1742,1743],{"class":152},"(today) ",[117,1745,1690],{"class":131},[117,1747,1748],{"class":127}," '&endDate='",[117,1750,1738],{"class":131},[117,1752,1622],{"class":191},[117,1754,1755],{"class":152},"(in30) ",[117,1757,1690],{"class":131},[117,1759,1760],{"class":127}," '&limit=100'",[117,1762,1036],{"class":152},[117,1764,1765],{"class":119,"line":360},[117,1766,1042],{"emptyLinePlaceholder":1041},[117,1768,1769,1771,1773,1775,1778,1781],{"class":119,"line":366},[117,1770,1150],{"class":131},[117,1772,1153],{"class":123},[117,1774,1053],{"class":131},[117,1776,1777],{"class":152}," UrlFetchApp.",[117,1779,1780],{"class":191},"fetch",[117,1782,1783],{"class":152},"(url, {\n",[117,1785,1786,1789,1792,1794],{"class":119,"line":584},[117,1787,1788],{"class":152},"    headers: { Authorization: ",[117,1790,1791],{"class":127},"'Bearer '",[117,1793,1738],{"class":131},[117,1795,1796],{"class":152}," key },\n",[117,1798,1799,1802,1805],{"class":119,"line":592},[117,1800,1801],{"class":152},"    muteHttpExceptions: ",[117,1803,1804],{"class":123},"true",[117,1806,318],{"class":152},[117,1808,1809],{"class":119,"line":599},[117,1810,1811],{"class":152},"  });\n",[117,1813,1814,1816,1819,1822,1824,1827,1830,1833,1835,1837,1839,1842,1845],{"class":119,"line":610},[117,1815,1190],{"class":131},[117,1817,1818],{"class":152}," (res.",[117,1820,1821],{"class":191},"getResponseCode",[117,1823,1687],{"class":152},[117,1825,1826],{"class":131},"!==",[117,1828,1829],{"class":123}," 200",[117,1831,1832],{"class":152},") ",[117,1834,1201],{"class":131},[117,1836,1204],{"class":131},[117,1838,1207],{"class":191},[117,1840,1841],{"class":152},"(res.",[117,1843,1844],{"class":191},"getContentText",[117,1846,1847],{"class":152},"());\n",[117,1849,1850],{"class":119,"line":621},[117,1851,1042],{"emptyLinePlaceholder":1041},[117,1853,1854,1856,1859,1861,1864,1866,1869,1871,1873,1876,1878,1880,1883,1885],{"class":119,"line":637},[117,1855,1150],{"class":131},[117,1857,1858],{"class":123}," rows",[117,1860,1053],{"class":131},[117,1862,1863],{"class":123}," JSON",[117,1865,21],{"class":152},[117,1867,1868],{"class":191},"parse",[117,1870,1841],{"class":152},[117,1872,1844],{"class":191},[117,1874,1875],{"class":152},"()).data.",[117,1877,1316],{"class":191},[117,1879,1130],{"class":152},[117,1881,1882],{"class":1133},"r",[117,1884,1630],{"class":131},[117,1886,1887],{"class":152}," [\n",[117,1889,1890],{"class":119,"line":642},[117,1891,1892],{"class":152},"    r.id, r.guestName, r.status, r.checkIn, r.checkOut, r.roomType, r.totalAmount,\n",[117,1894,1895],{"class":119,"line":647},[117,1896,1897],{"class":152},"  ]);\n",[117,1899,1900,1902,1905,1907,1910,1913],{"class":119,"line":1322},[117,1901,1150],{"class":131},[117,1903,1904],{"class":123}," book",[117,1906,1053],{"class":131},[117,1908,1909],{"class":152}," SpreadsheetApp.",[117,1911,1912],{"class":191},"getActive",[117,1914,1253],{"class":152},[117,1916,1917,1919,1922,1924,1927,1930,1932,1935,1937,1940,1942,1945,1947,1949],{"class":119,"line":1343},[117,1918,1150],{"class":131},[117,1920,1921],{"class":123}," sheet",[117,1923,1053],{"class":131},[117,1925,1926],{"class":152}," book.",[117,1928,1929],{"class":191},"getSheetByName",[117,1931,1130],{"class":152},[117,1933,1934],{"class":127},"'Arrivals'",[117,1936,1832],{"class":152},[117,1938,1939],{"class":131},"||",[117,1941,1926],{"class":152},[117,1943,1944],{"class":191},"insertSheet",[117,1946,1130],{"class":152},[117,1948,1934],{"class":127},[117,1950,1240],{"class":152},[117,1952,1953,1956,1959],{"class":119,"line":1393},[117,1954,1955],{"class":152},"  sheet.",[117,1957,1958],{"class":191},"clearContents",[117,1960,1253],{"class":152},[117,1962,1963,1965,1968,1971,1974,1976,1979,1981,1984,1986,1989,1991,1994,1996,1999,2001,2004],{"class":119,"line":1398},[117,1964,1955],{"class":152},[117,1966,1967],{"class":191},"appendRow",[117,1969,1970],{"class":152},"([",[117,1972,1973],{"class":127},"'ID'",[117,1975,1137],{"class":152},[117,1977,1978],{"class":127},"'Guest'",[117,1980,1137],{"class":152},[117,1982,1983],{"class":127},"'Status'",[117,1985,1137],{"class":152},[117,1987,1988],{"class":127},"'Check-in'",[117,1990,1137],{"class":152},[117,1992,1993],{"class":127},"'Check-out'",[117,1995,1137],{"class":152},[117,1997,1998],{"class":127},"'Room type'",[117,2000,1137],{"class":152},[117,2002,2003],{"class":127},"'Total'",[117,2005,2006],{"class":152},"]);\n",[117,2008,2009,2011,2014,2017,2020,2023,2025,2027,2029,2032,2035,2037,2040,2042,2045,2047,2049,2052],{"class":119,"line":1419},[117,2010,1190],{"class":131},[117,2012,2013],{"class":152}," (rows.",[117,2015,2016],{"class":123},"length",[117,2018,2019],{"class":152},") sheet.",[117,2021,2022],{"class":191},"getRange",[117,2024,1130],{"class":152},[117,2026,1276],{"class":123},[117,2028,1137],{"class":152},[117,2030,2031],{"class":123},"1",[117,2033,2034],{"class":152},", rows.",[117,2036,2016],{"class":123},[117,2038,2039],{"class":152},", rows[",[117,2041,1367],{"class":123},[117,2043,2044],{"class":152},"].",[117,2046,2016],{"class":123},[117,2048,70],{"class":152},[117,2050,2051],{"class":191},"setValues",[117,2053,2054],{"class":152},"(rows);\n",[117,2056,2057],{"class":119,"line":1441},[117,2058,369],{"class":152},[10,2060,2061,2062,2065,2066,2068,2069,2072,2073,2076],{},"Guarda la clave en ",[53,2063,2064],{},"Configuración del proyecto → Propiedades del script"," como ",[14,2067,104],{},", ejecútalo una vez para conceder el acceso y añade un activador diario basado en tiempo en ",[53,2070,2071],{},"Activadores",". ",[14,2074,2075],{},"/reservations"," devuelve como máximo 100 estancias por llamada, filtradas por fecha de check-in, así que divide los meses con mucha actividad en semanas. Recuerda que la hoja ahora contiene nombres de huéspedes: compártela con cuidado.",[168,2078,2080],{"id":2079},"un-pequeño-panel-a-medida","Un pequeño panel a medida",[994,2082,2083],{"label":388},[10,2084,2085],{},"Crea una pequeña aplicación web en Node.js que muestre la ocupación de esta noche, las llegadas y salidas de hoy y las estancias con saldo pendiente, usando la REST API de Hotelier Tools. Deja HT_API_KEY solo en el servidor; el navegador debe llamar a mi servidor, nunca directamente a la API. Guarda las respuestas en caché cinco minutos.",[10,2087,2088],{},"Dos reglas lo hacen seguro: la clave se queda en el servidor (cualquiera que abra una página puede leer las claves del código del navegador) y usas caché, porque la API permite 100 peticiones por minuto por dirección IP.",[26,2090,2092],{"id":2091},"mcp-o-rest-api-cuál-debes-usar","¿MCP o REST API: cuál debes usar?",[855,2094,2095,2106],{},[858,2096,2097],{},[861,2098,2099,2101,2104],{},[864,2100],{},[864,2102,2103],{},"Servidor MCP",[864,2105,984],{},[877,2107,2108,2119,2133,2148],{},[861,2109,2110,2113,2116],{},[882,2111,2112],{},"Ideal para",[882,2114,2115],{},"Hacer preguntas, dejar que un agente explore mientras programa",[882,2117,2118],{},"Scripts, hojas de cálculo y paneles que se ejecutan de forma programada",[861,2120,2121,2124,2128],{},[882,2122,2123],{},"Dirección",[882,2125,2126],{},[14,2127,16],{},[882,2129,2130],{},[14,2131,2132],{},"https://dashboard.hotelier.tools/api/v1",[861,2134,2135,2138,2141],{},[882,2136,2137],{},"Autenticación",[882,2139,2140],{},"Clave de API o inicio de sesión en el navegador",[882,2142,2143,2144,2147],{},"Clave de API (",[14,2145,2146],{},"Authorization: Bearer htk_…",")",[861,2149,2150,2153,2158],{},[882,2151,2152],{},"Documentación",[882,2154,2155,2156,2147],{},"Página Configurar MCP (",[14,2157,670],{},[882,2159,2160,2161,2147],{},"Explorador Swagger (",[14,2162,2163],{},"/developer/rest-api",[10,2165,2166,2167,21],{},"Las dos usan la misma clave y los mismos permisos. La guía de REST está en ",[34,2168,2169],{"href":43},"API de Little Hotelier",[26,2171,2173],{"id":2172},"herramientas-de-lectura-y-de-escritura-mantén-al-agente-atado-en-corto","Herramientas de lectura y de escritura: mantén al agente atado en corto",[10,2175,2176],{},"Los agentes de programación son buenos ejecutando herramientas rápido, y por eso mismo conviene frenarlos aquí.",[236,2178,2179,2185,2191,2209],{},[49,2180,2181,2184],{},[53,2182,2183],{},"Las escrituras se ejecutan cuando el agente las llama."," Fuera del panel de Hotelier Tools no hay tarjeta de aprobación. Cambiar una reserva, registrar un pago, aplicar precios o poner un stop sell ocurre en cuanto se ejecuta la herramienta. Mantén activado el ajuste de tu editor «pedir confirmación antes de ejecutar herramientas» y no uses modos de ejecución automática con este servidor.",[49,2186,2187,2190],{},[53,2188,2189],{},"Las acciones irreversibles están bloqueadas de todas formas."," Ocho herramientas (enviar facturas por email a los huéspedes, reembolsos, presentar la encuesta del INE, invitaciones al equipo, enviar enlaces por email a los huéspedes, responder preguntas de Booking.com y la comprobación de la lista de espera que envía mensajes a los huéspedes) solo están disponibles en el panel.",[49,2192,2193,2196,2197,2200,2201,2204,2205,2208],{},[53,2194,2195],{},"Los cambios de reserva tienen dos pasos."," ",[14,2198,2199],{},"propose_reservation_changes"," muestra el antes y el después; ",[14,2202,2203],{},"apply_reservation_changes"," necesita ",[14,2206,2207],{},"confirmed: true",". Lee la propuesta.",[49,2210,2211,2214,2215,2218,2219,2222,2223,2225],{},[53,2212,2213],{},"No subas nunca una clave a un repositorio."," Usa referencias del estilo ",[14,2216,2217],{},"${HT_API_KEY}",", añade los ficheros de configuración locales a ",[14,2220,2221],{},".gitignore"," y revoca en ",[14,2224,69],{}," cualquier clave que se filtre.",[26,2227,2229],{"id":2228},"solución-de-problemas-no-aparece-el-servidor","Solución de problemas: «no aparece el servidor»",[236,2231,2232,2238,2246,2257,2263,2271,2287,2296],{},[49,2233,2234,2237],{},[53,2235,2236],{},"No aparece nada tras editar una configuración:"," reinicia el editor o la CLI. La mayoría de las herramientas leen las configuraciones de MCP al arrancar.",[49,2239,2240,2243,2244,21],{},[53,2241,2242],{},"Claude Code o VS Code ignoran el servidor:"," comprueba que está ",[14,2245,375],{},[49,2247,2248,2251,2252,2254,2255,21],{},[53,2249,2250],{},"Gemini CLI conecta pero falla:"," usa ",[14,2253,773],{},", no ",[14,2256,379],{},[49,2258,2259,2262],{},[53,2260,2261],{},"401:"," clave incorrecta o revocada, o la variable de entorno no está definida en esa terminal.",[49,2264,2265,2268,2269,21],{},[53,2266,2267],{},"400 «No Little Hotelier credentials configured»:"," conecta Little Hotelier en ",[14,2270,59],{},[49,2272,2273,2280,2281,2283,2284,21],{},[53,2274,2275,2276,2279],{},"423 ",[14,2277,2278],{},"lh_frozen",":"," el inicio de sesión de Little Hotelier está en pausa tras un acceso fallido (a menudo una contraseña caducada). Guarda la contraseña nueva en ",[53,2282,55],{}," o pulsa ",[53,2285,2286],{},"Comprobar ahora y reanudar",[49,2288,2289,2292,2293,21],{},[53,2290,2291],{},"429:"," demasiadas peticiones; espera el tiempo indicado en ",[14,2294,2295],{},"Retry-After",[49,2297,2298,2301,2302,2305],{},[53,2299,2300],{},"El salto de línea con barra invertida falla en Windows:"," PowerShell no usa ",[14,2303,2304],{},"\\"," para continuar líneas. Pega los comandos en una sola línea, como se muestra arriba.",[2307,2308],"demo-cta",{"path":670},[26,2310,2312],{"id":2311},"próximos-pasos","Próximos pasos",[236,2314,2315,2328,2335],{},[49,2316,2317,2318,2322,2323,2327],{},"¿No eres programador? ",[34,2319,2321],{"href":2320},"/blog/connect-claude-to-little-hotelier","Conecta Claude"," o ",[34,2324,2326],{"href":2325},"/blog/connect-chatgpt-to-little-hotelier","ChatGPT"," desde el navegador.",[49,2329,2330,2331,21],{},"¿Es la primera vez que oyes hablar de MCP? Lee ",[34,2332,2334],{"href":2333},"/blog/what-is-mcp-server-hotels","qué es un servidor MCP",[49,2336,2337,2338,21],{},"¿Quieres hojas de cálculo sin código? Mira ",[34,2339,2341],{"href":2340},"/blog/export-little-hotelier-reservations-excel","exportar reservas a Excel",[2343,2344,2345],"style",{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":113,"searchDepth":289,"depth":289,"links":2347},[2348,2349,2355,2360,2361,2362,2363],{"id":28,"depth":289,"text":29},{"id":162,"depth":289,"text":163,"children":2350},[2351,2352,2353,2354],{"id":170,"depth":298,"text":171},{"id":387,"depth":298,"text":388},{"id":480,"depth":298,"text":481},{"id":676,"depth":298,"text":677},{"id":971,"depth":289,"text":972,"children":2356},[2357,2358,2359],{"id":988,"depth":298,"text":989},{"id":1563,"depth":298,"text":1564},{"id":2079,"depth":298,"text":2080},{"id":2091,"depth":289,"text":2092},{"id":2172,"depth":289,"text":2173},{"id":2228,"depth":289,"text":2229},{"id":2311,"depth":289,"text":2312},"Añade el servidor MCP de Hotelier Tools a Claude Code, Cursor, VS Code, Windsurf o Gemini CLI y crea informes de ocupación, una hoja o un panel.","md",{"seoTitle":2367,"date":2368,"category":2369,"tags":2370,"keywords":2375,"feature":2383,"demoPath":670,"cover":2384,"coverAlt":2385,"faq":2386},"Configurar MCP de Little Hotelier en Claude Code y Cursor","2026-10-03","ai",[2371,2372,387,2373,2374],"mcp","claude code","vs code","api",[2376,2377,2378,2379,2380,2381,2382],"configurar mcp en claude code","que es claude code y para que sirve","mcp.json cursor","mcp.json vscode","claude code para no programadores","little hotelier mcp","gemini cli mcp","api-mcp","/images/blog/demo/es/mcp-setup.webp","Guía de configuración de MCP en Hotelier Tools: una explicación de qué es MCP y pestañas de configuración del cliente para Claude Desktop, VS Code, Cursor y Personalizado / SDK, con Claude Desktop seleccionado y su fragmento de claude_desktop_config.json",[2387,2390,2393,2396,2399],{"q":2388,"a":2389},"¿Cuál es el comando claude mcp add para Little Hotelier?","Ejecuta: claude mcp add --transport http hotelier-tools https://dashboard.hotelier.tools/api/mcp --header \"Authorization: Bearer htk_YOUR_API_KEY\". Sustituye la clave por una creada en API y MCP → Claves API de Hotelier Tools, y compruébalo con /mcp dentro de Claude Code.",{"q":2391,"a":2392},"¿Dónde está mcp.json en Cursor y en VS Code?","Cursor lee ~/.cursor/mcp.json para todos los proyectos y .cursor/mcp.json dentro de un proyecto. VS Code lee .vscode/mcp.json en el espacio de trabajo y un fichero a nivel de usuario que abres con el comando MCP: Open User Configuration. VS Code usa la clave servers, no mcpServers.",{"q":2394,"a":2395},"¿Hace falta ser programador para usar Claude Code con los datos de mi hotel?","No. Instalas Claude Code, pegas un comando y después pides las cosas con tus propias palabras. Ayuda saber dónde van tus ficheros y cómo ejecutar un script, pero Claude Code puede explicarte cada paso mientras trabaja.",{"q":2397,"a":2398},"¿Puedo iniciar sesión en vez de usar una clave de API?","Sí, en los clientes que admiten OAuth. Añade la URL del servidor sin cabecera y luego inicia sesión cuando el cliente te lo pida: en Claude Code ejecuta /mcp y elige autenticarte. La sesión dura 30 días. Las claves son mejores para scripts que se ejecutan sin supervisión.",{"q":2400,"a":2401},"¿Es una API oficial de Little Hotelier o de SiteMinder?","No. Hotelier Tools es independiente: no está afiliado a SiteMinder ni a Little Hotelier, ni cuenta con su respaldo. Se conecta con el propio acceso de tu alojamiento a Little Hotelier y ofrece su propia REST API y su propio servidor MCP.","/blog/es/little-hotelier-mcp-claude-code-cursor-vscode",{"title":5,"description":2364},"blog/es/little-hotelier-mcp-claude-code-cursor-vscode","2-Oft5JjXmScsBD_EUzk85mNOKAz36_bkHzfGALu1Jw",[2407,2408,2409,2410,2411,2412,2413,2414,864],"de","en-gb","en","es","fr","id","it","pt",[2416,2433,2455,2474,2494,2515,2534,2550,2564,2584,2603,2607,2625,2644,2663,2681,2701,2719,2738,2758,2777,2794,2812,2827,2843],{"path":2417,"title":2418,"description":2419,"meta":2420},"/blog/es/what-is-mcp-server-hotels","¿Qué es un servidor MCP y para qué sirve? Guía para hoteleros (y qué PMS tienen uno)","Un servidor MCP deja que Claude o ChatGPT lean y actúen en el software de tu hotel. Guía sencilla, seguridad y qué PMS lo tienen (octubre de 2026).",{"date":2368,"category":2369,"tags":2421,"keywords":2424,"feature":2383,"cover":2384,"coverAlt":2432,"featured":1041},[2371,2369,192,2422,2423],"chatgpt","pms",[2425,2426,2427,2428,2381,2429,2430,2431],"que es un servidor mcp","mcp que es y para que sirve","servidor mcp para hoteles","mcp claude","apaleo mcp server","mews mcp server","cloudbeds mcp server","Guía de configuración de MCP en Hotelier Tools con una explicación de qué es MCP y pestañas de configuración del cliente para Claude Desktop, VS Code, Cursor y Personalizado / SDK, que muestran la configuración de Claude Desktop con la dirección del servidor",{"path":2434,"title":2435,"description":2436,"meta":2437},"/blog/es/little-hotelier-cta-ctd-stop-sell","¿Qué significan CTA, CTD, estancia mínima y stop sell en Little Hotelier?","CTA impide check-ins, CTD impide check-outs, la estancia mínima fija las noches mínimas y stop sell cierra la venta. Qué es cada uno y cómo ponerlos.",{"date":2368,"category":2438,"tags":2439,"keywords":2445,"feature":2452,"cover":2453,"coverAlt":2454},"pricing",[2440,2441,2442,2443,2444],"restrictions","cta","ctd","stop sell","little hotelier",[2446,2447,2448,2449,2450,2451],"little hotelier cta ctd","que es cta en hoteles","cerrado a la llegada hotel","que es stop sell hotel","siteminder stop sell","estancia minima hotel","dynamic-pricing","/images/blog/demo/es/price-recommendations.webp","Recomendaciones de precios en Hotelier Tools para la habitación Doble Estándar, del 3 al 16 de octubre de 2026: precio actual y recomendado por noche, una columna CTA/CTD con interruptores A y D, la estancia mínima, una columna Canal y el botón Aplicar en Little Hotelier",{"path":2456,"title":2457,"description":2458,"meta":2459},"/blog/es/little-hotelier-api","¿Tiene API Little Hotelier? La respuesta en 2026 y cómo sacar tus datos","No hay clave de API para tus reservas ni tus huéspedes. Qué ofrece SiteMinder oficialmente y cómo leer tus datos de Little Hotelier por REST en minutos.",{"date":2368,"category":2374,"tags":2460,"keywords":2464,"feature":2383,"cover":2472,"coverAlt":2473,"featured":1041},[2374,2461,2444,2462,2463],"rest","siteminder","developers",[2465,2466,2467,2468,2469,2470,2471],"little hotelier api","little hotelier api documentacion","little hotelier api key","siteminder api","siteminder exchange api","little hotelier rest api","integración little hotelier","/images/blog/demo/es/rest-api-reference.webp","Página de referencia de la REST API en Hotelier Tools con la URL base, la descarga de openapi.json, el cuadro Autorización rápida (campo de token Bearer, Autorizar Swagger, Usar mi sesión) y plantillas de código en cURL, JavaScript, Python y PowerShell",{"path":2475,"title":2476,"description":2477,"meta":2478},"/blog/es/little-hotelier-alternatives","Alternativas a Little Hotelier en 2026: comparativa con Cloudbeds, Mews, Beds24, Lodgify, Smoobu y Hostaway","¿Cloudbeds, Mews, Beds24, Lodgify, Smoobu o Hostaway? Para quién es cada uno, cómo cobra, API y cuándo conviene quedarse en Little Hotelier.",{"date":2368,"category":2479,"tags":2480,"keywords":2484,"cover":2492,"coverAlt":2493},"tips",[2423,2481,2482,2444,2483],"comparison","alternatives","cloudbeds",[2485,2486,2487,2488,2489,2490,2491],"alternativas little hotelier","little hotelier opiniones","little hotelier ventajas y desventajas","little hotelier vs cloudbeds","little hotelier precio","little hotelier vs siteminder","mejores pms para hoteles pequeños","/images/blog/demo/es/dashboard-overview.webp","Panel de inicio de Hotelier Tools del alojamiento de demostración Hotel Demo Sol: una tarjeta para abrir el chat de IA, un aviso de que dos canales de mensajería con huéspedes necesitan atención y fichas de estado de Little Hotelier, Booking.com, el conocimiento de la IA y la ciudad para precios",{"path":2495,"title":2496,"description":2497,"meta":2498},"/blog/es/booking-com-invalid-card-no-show","Booking.com: tarjeta de crédito no válida o no-show, qué hacer paso a paso","Marca la tarjeta como no válida, da 24 horas al huésped y cancela sin comisión. Plazos de no-show, tarjetas virtuales rechazadas y cómo detectarlo antes.",{"date":2368,"category":2499,"tags":2500,"keywords":2505,"feature":2512,"cover":2513,"coverAlt":2514},"operations",[2501,2502,2503,2444,2504],"booking.com","no-show","payments","automated checks",[2506,2507,2508,2509,2510,2511],"booking tarjeta de crédito no válida","cobrar no show booking","que pasa si un huésped no se presenta en booking","booking tarjeta virtual rechazada","marcar tarjeta no válida booking","no show booking comisión","automated-checks","/images/blog/demo/es/automated-checks-issues.webp","Página de incidencias de Hotelier Tools con 20 abiertas, 5 corregidas y 25 en total, y reservas con un aviso de saldo pendiente a la llegada y un botón Verificar",{"path":2516,"title":2517,"description":2518,"meta":2519},"/blog/es/hotel-front-desk-checklist-automation","Checklist de recepción de hotel para Little Hotelier: 8 problemas que detectar antes de que lleguen los huéspedes","Checklist diario de recepción para Little Hotelier: 8 problemas de reserva que detectar antes de la llegada, dónde ver cada uno y cómo automatizar cinco.",{"date":2368,"category":2499,"tags":2520,"keywords":2525,"feature":2512,"cover":2532,"coverAlt":2533},[2521,2522,2523,2524,2444],"front desk","checklist","check-in","automation",[2526,2527,2528,2529,2530,2531],"checklist recepción hotel","checklist check-in hotel","plantilla checklist recepción hotel","reservas sin asignar little hotelier","automatización hotelera","software de automatización para hoteles","/images/blog/demo/es/automated-checks-lifecycle.webp","Página de comprobaciones automáticas de Hotelier Tools: cómo funcionan las comprobaciones en cuatro pasos, un aviso Todavía no se ejecuta ninguna comprobación que sugiere Antes de la llegada, y El viaje de una reserva por sus cinco etapas",{"path":2535,"title":2536,"description":2537,"meta":2538},"/blog/es/connect-chatgpt-to-little-hotelier","Cómo conectar ChatGPT con Little Hotelier (y 18 prompts para hoteles pequeños)","Conecta ChatGPT con Little Hotelier en modo desarrollador con una app MCP, mira qué permite tu plan y copia 18 prompts de llegadas, cobros y precios.",{"date":2368,"category":2369,"tags":2539,"keywords":2541,"feature":2383,"cover":2548,"coverAlt":2549},[2422,2371,2369,2540,2444],"prompts",[2542,2543,2544,2545,2546,2547],"conectar chatgpt con little hotelier","chatgpt para hoteles","prompts chatgpt hoteles","conector mcp chatgpt","chatgpt gestión hotelera","modo desarrollador chatgpt mcp","/images/blog/demo/es/mcp-oauth-consent.webp","Página Autorizar acceso MCP de Hotelier Tools que abre un asistente de IA al conectarse, con el aviso de token de 30 días y los botones Denegar y Permitir acceso",{"path":2551,"title":2552,"description":2553,"meta":2554},"/blog/es/connect-claude-to-little-hotelier","Cómo conectar Claude con Little Hotelier (MCP, paso a paso)","Conecta Claude con Little Hotelier con un conector personalizado: pega una URL, inicia sesión y da acceso. Primeras preguntas, seguridad y problemas.",{"date":2368,"category":2369,"tags":2555,"keywords":2557,"feature":2383,"cover":2384,"coverAlt":2563,"featured":1041},[192,2371,2369,2556,2444],"connectors",[2558,2381,2559,2560,2561,2562],"conectar claude con little hotelier","servidor mcp claude","conectores claude mcp","claude desktop mcp configuración","conector personalizado claude","Guía de configuración MCP de Hotelier Tools con la explicación ¿Qué es MCP? y la pestaña Claude Desktop seleccionada, con los pasos y el fragmento de configuración con la URL del servidor MCP",{"path":2565,"title":2566,"description":2567,"meta":2568},"/blog/es/download-all-little-hotelier-invoices","Cómo descargar todas las facturas de Little Hotelier de una vez (para el IVA trimestral)","Little Hotelier exporta en un ZIP las facturas que ya existen. Así se hace, y cómo crear las que faltan y enviar a tu gestor un ZIP y un CSV por trimestre.",{"date":2368,"category":2569,"tags":2570,"keywords":2575,"feature":2569,"cover":2582,"coverAlt":2583,"featured":1041},"invoicing",[2571,2572,2444,2573,2574],"invoices","accounting","quarterly tax","zip",[2576,2577,2578,2579,2580,2581],"descargar todas las facturas de little hotelier","facturas trimestrales hotel","modelo 303 hotel facturas","factura hotelera","little hotelier facturación","exportar facturas little hotelier","/images/blog/demo/es/invoices-by-quarter.webp","Página de facturas de Hotelier Tools con 66 facturas en total, el 4T y el 3T de 2026 con los botones Vista previa CSV y ZIP, y septiembre de 2026 abierto como una tabla de números de factura, huéspedes, NIF, fechas de salida y totales",{"path":2585,"title":2586,"description":2587,"meta":2588},"/blog/es/export-little-hotelier-reservations-excel","Cómo exportar reservas y listados de huéspedes de Little Hotelier a Excel (antes de que se enmascaren)","Little Hotelier enmascara los datos del huésped 180 días tras el check-out. Exporta reservas y listados a Excel o Google Sheets ya, a mano o en automático.",{"date":2368,"category":2374,"tags":2589,"keywords":2594,"feature":2383,"cover":2601,"coverAlt":2602},[2590,2591,2592,2593,2444],"export","excel","google sheets","reports",[2595,2596,2597,2598,2599,2600],"exportar reservas de little hotelier a excel","little hotelier informes","little hotelier exportar csv","listado de huéspedes hotel excel","hoja de cálculo reservas hotel","little hotelier datos de huéspedes enmascarados","/images/blog/demo/es/developer-portal.webp","Portal para desarrolladores de Hotelier Tools con tarjetas de API REST y Swagger, configuración de MCP, claves de API y métodos de LH, encima de un ejemplo de autenticación con una clave de API",{"path":2402,"title":5,"description":2364,"meta":2604},{"date":2368,"category":2369,"tags":2605,"keywords":2606,"feature":2383,"cover":2384,"coverAlt":2385},[2371,2372,387,2373,2374],[2376,2377,2378,2379,2380,2381,2382],{"path":2608,"title":2609,"description":2610,"meta":2611},"/blog/es/booking-com-commission","Cuánto cobra Booking.com de comisión (y cómo ver tu neto real en Little Hotelier)","Cuánto cobra Booking de comisión: el % de tu contrato, más programas y cargo por pago. Sobre qué se cobra, el IVA y tu neto real por reserva.",{"date":2368,"category":2479,"tags":2612,"keywords":2616,"cover":2623,"coverAlt":2624},[2501,2613,2444,2614,2615],"commission","userscript","vat",[2617,2618,2619,2620,2621,2622],"cuánto cobra booking de comisión","comisión booking españa","cuánto cobra booking a los propietarios","comisión booking iva","comisión genius booking","calculadora comisión booking","/images/scripts/show-booking-commissions/to.png","Resumen de una reserva de Little Hotelier (interfaz en español) con la comisión de Booking.com, el cargo por pago y el neto aproximado añadidos por un script gratuito",{"path":2626,"title":2627,"description":2628,"meta":2629},"/blog/es/ine-hotel-occupancy-survey","Encuesta de ocupación hotelera del INE: cómo rellenarla desde Little Hotelier","Encuesta de ocupación hotelera del INE: obligatoria si te seleccionan (multas de hasta 30.050 €). Qué datos pide, IRIA y cómo hacerla con Little Hotelier.",{"date":2368,"category":2630,"tags":2631,"keywords":2634,"feature":2641,"cover":2642,"coverAlt":2643},"compliance",[2632,2633,2630,2593,2444],"ine","spain",[2635,2636,2637,2638,2639,2640],"encuesta ocupacion hotelera ine","encuesta ine hoteles","iria ine encuesta","encuesta ine obligatoria multa","ine encuesta ocupacion apartamentos turisticos","rellenar encuesta ine online","ine-reports","/images/blog/demo/es/ine-guest-origins-report.webp","Estadísticas de origen de huéspedes (encuesta INE) en Hotelier Tools del 27 de septiembre al 3 de octubre de 2026: 8 entradas, 24 pernoctaciones, 3,4 huéspedes al día y 3 con datos que faltan, sobre las pestañas Resumen diario, Por origen, Habitaciones, ADR por cliente y Calidad de datos",{"path":2645,"title":2646,"description":2647,"meta":2648},"/blog/es/little-hotelier-chrome-extensions","Extensión de Chrome para Little Hotelier: scripts gratuitos que lo hacen más rápido","Scripts gratuitos para Little Hotelier: precios en el calendario, tablas más anchas, comisión de Booking.com y facturas con un clic. Cómo instalarlos.",{"date":2368,"category":2479,"tags":2649,"keywords":2654,"cover":2661,"coverAlt":2662},[2650,2651,2652,2444,2653],"chrome extension","tampermonkey","userscripts","productivity",[2655,2656,2657,2658,2659,2660],"extension chrome little hotelier","tampermonkey scripts","userscript chrome","little hotelier precios en el calendario","little hotelier tabla ancho completo","little hotelier comision booking.com","/images/scripts/prices-display/to.png","Calendario de Little Hotelier (interfaz en español) con el precio de cada noche bajo cada tipo de habitación, añadido por el script Mostrar Precios",{"path":2664,"title":2665,"description":2666,"meta":2667},"/blog/es/little-hotelier-integrations","Integraciones de Little Hotelier en 2026: contabilidad, check-in, precios, mensajería e IA","Qué se conecta con Little Hotelier en 2026: exportación para Xero y QuickBooks, check-in con Chekin y Duve, precios, mensajería, IA y complementos gratis.",{"date":2368,"category":2374,"tags":2668,"keywords":2673,"feature":2383,"cover":2601,"coverAlt":2680},[2669,2670,2671,2672,2444],"integrations","app store","xero","chekin",[2674,2675,2676,2677,2678,2679],"integraciones little hotelier","little hotelier app store","little hotelier xero","little hotelier chekin","little hotelier zapier","little hotelier motor de reservas wordpress","Portal para desarrolladores de Hotelier Tools con tarjetas de API REST y Swagger, Configurar MCP, Claves de API y Métodos de LH, y un cuadro de Autenticación con un ejemplo de cURL que usa una clave de API de ejemplo",{"path":2682,"title":2683,"description":2684,"meta":2685},"/blog/es/hotel-waitlist-sold-out-dates","Lista de espera en un hotel: cómo llevarla para fechas agotadas (y llenar las cancelaciones rápido)","Lleva una lista de huéspedes que quieren tus fechas llenas y ofréceles primero lo que se libere: hoja de cálculo, aviso automático y formulario público.",{"date":2368,"category":2686,"tags":2687,"keywords":2692,"feature":2688,"cover":2699,"coverAlt":2700},"guests",[2688,2689,2690,2444,2691],"waitlist","cancellations","direct booking","availability",[2693,2694,2695,2696,2697,2698],"lista de espera hotel","qué significa lista de espera en un hotel","lista de espera hotel completo","llenar cancelaciones hotel","formulario lista de espera hotel","reserva directa cancelaciones","/images/blog/demo/es/availability-waiting-list.webp","Página Lista de espera de Hotelier Tools con Historial y Revisar la cola ahora, la tarjeta Revisiones de la cola con la opción Revisar cada noche a la 01:00, y el formulario Añadir una estancia a vigilar con noches, habitaciones necesarias, tipos de habitación y datos del huésped",{"path":2702,"title":2703,"description":2704,"meta":2705},"/blog/es/hotel-do-not-rent-list","Lista negra de huéspedes en un hotel: cómo llevarla en Little Hotelier (dentro de la ley)","Un hotel puede llevar una lista negra de huéspedes conforme al RGPD si se ciñe a hechos. Qué anotar, qué no y cómo recibir avisos en Little Hotelier.",{"date":2368,"category":2499,"tags":2706,"keywords":2710,"feature":2512,"cover":2717,"coverAlt":2718},[2707,2708,2686,2709,2444],"do not rent list","gdpr","watchlist",[2711,2712,2713,2714,2715,2716],"lista negra de huéspedes","lista negra huéspedes hotel rgpd","huéspedes problemáticos hotel","no volver a alojar huésped","bloquear huésped booking","notas de huéspedes little hotelier","/images/blog/demo/es/automated-checks-do-not-rebook-list.webp","Lista «no volver a alojar» en Hotelier Tools: la tarjeta de la comprobación nocturna, una comprobación de reserva con una coincidencia fuerte y el motivo objetivo, y una entrada con Editar, Desactivar y Eliminar",{"path":2720,"title":2721,"description":2722,"meta":2723},"/blog/es/little-hotelier-tips","Little Hotelier: trucos, tutorial y funciones ocultas que casi nadie conoce (2026)","20 trucos de Little Hotelier: calendario más rápido, passkeys, tarifa mínima, noches huecas, enlaces de reserva, registro de cambios y scripts gratis.",{"date":2368,"category":2479,"tags":2724,"keywords":2727,"feature":2735,"cover":2736,"coverAlt":2737},[2479,2725,2726,2652,2444],"how to","calendar",[2728,2729,2730,2731,2732,2733,2734],"little hotelier tutorial español","little hotelier como funciona","little hotelier trucos","little hotelier funciones ocultas","little hotelier manual","little hotelier calendario","little hotelier guia","dashboard","/images/scripts/full-width-reservation-table/to.png","Página Reservas de Little Hotelier (interfaz en español) ampliada al ancho completo de la pantalla por el script Tabla de Reservas a Todo Ancho: filtros de búsqueda, el botón Buscar, 36 reservas encontradas y el enlace Exportar",{"path":2739,"title":2740,"description":2741,"meta":2742},"/blog/es/booking-com-guest-messages","Mensajes automáticos de Booking.com: cómo gestionar los mensajes de huéspedes sin vivir en la extranet","Pulse, plantillas, mensajes programados y respuestas automáticas, cómo detectar mensajes falsos de Booking.com y una sola bandeja con WhatsApp y email.",{"date":2368,"category":2686,"tags":2743,"keywords":2747,"feature":2755,"cover":2756,"coverAlt":2757},[2501,2744,2745,2746,2444],"guest messages","inbox","templates",[2748,2749,2750,2751,2752,2753,2754],"mensajes automáticos booking","plantillas mensajes booking","mensajes programados booking","booking mensajes falsos","booking mensajes no cargan","respuestas automáticas booking","preguntas de huéspedes booking","guest-inbox","/images/blog/demo/es/guest-inbox-ai-draft-availability.webp","Bandeja de huéspedes de Hotelier Tools con filtros de WhatsApp, Email y Booking.com, un email de un huésped que pregunta por una habitación doble en septiembre, el plan de la IA en borrador con una respuesta editable en inglés y el panel privado del asistente",{"path":2759,"title":2760,"description":2761,"meta":2762},"/blog/es/guest-registration-rules-by-country","Parte de viajeros y registro de huéspedes por países (2026): España (SES.Hospedajes), Italia, Portugal, Alemania, Francia, Brasil, Tailandia e Indonesia","Qué huéspedes registrar, con qué datos, en qué plazo y dónde: España, Italia, Portugal, Alemania, Francia, Brasil, Tailandia, Indonesia. Enlaces oficiales.",{"date":2368,"category":2630,"tags":2763,"keywords":2766,"cover":2775,"coverAlt":2776},[2764,2630,2412,2765,2444],"guest registration","police",[2767,2768,2769,2770,2771,2772,2773,2774],"parte de viajeros ses hospedajes","es legal pedir dni hotel","registro de viajeros hoteles","por qué piden el pasaporte en un hotel","alloggiati web","meldeschein hotel","fiche de police hôtel","siba alojamento local","/images/blog/demo/es/automated-checks-moment-on-arrival.webp","Comprobaciones A la llegada en Hotelier Tools: DNI / Pasaporte (Registro policial), asignación de habitación física y validación de dirección y procedencia activadas, con lo que cada comprobación puede y no puede hacer",{"path":2778,"title":2779,"description":2780,"meta":2781},"/blog/es/dynamic-pricing-little-hotelier","Precios dinámicos para hoteles pequeños en Little Hotelier: competencia, eventos locales y reglas","Fija precios según la demanda en Little Hotelier: rutina semanal, opciones nativas y recomendaciones con su razón que solo se aplican si confirmas.",{"date":2368,"category":2438,"tags":2782,"keywords":2786,"feature":2452,"cover":2453,"coverAlt":2793},[2783,2784,2785,2444,2438],"dynamic pricing","revenue management","competitor prices",[2787,2788,2789,2790,2791,2792],"precios dinámicos hoteles","little hotelier precios dinámicos","revenue management hotelero","revenue management hotel pequeño","herramienta precios dinámicos hotel","cómo poner precios habitaciones booking","Página de recomendaciones de precios de Hotelier Tools para 14 noches: la tabla de Doble Estándar con la tarifa actual, la recomendada, el cambio, la mediana del mercado y lo que paga el huésped por noche, y una barra Aplicar en Little Hotelier sin precios seleccionados",{"path":2795,"title":2796,"description":2797,"meta":2798},"/blog/es/ai-assistant-hotel-front-desk","Recepcionista virtual para hoteles: qué puede hacer con seguridad (con aprobaciones)","Un asistente de IA consulta reservas, redacta respuestas y prepara cambios en tu hotel. Qué puede hacer con seguridad y por qué apruebas cada cambio.",{"date":2368,"category":2369,"tags":2799,"keywords":2802,"feature":2809,"cover":2810,"coverAlt":2811},[2369,2800,2521,2801,2444],"ai assistant","approvals",[2803,2804,2805,2806,2807,2808],"recepcionista virtual para hoteles","agente ia para hoteles","asistente ia recepción hotel","inteligencia artificial en hoteles ejemplos","ia para hostales","asistente de voz hotel","ai-assistant","/images/blog/demo/es/ai-chat-start.webp","Pantalla de inicio del asistente de IA de Hotelier Tools con el aviso de que todo lo que modifica datos pide confirmación antes, preguntas sugeridas y el historial de chats a la izquierda",{"path":2813,"title":2814,"description":2815,"meta":2816},"/blog/es/ses-hospedajes-little-hotelier","SES.Hospedajes con Little Hotelier: cómo registrar viajeros paso a paso","SES.Hospedajes explicado: quién debe usarlo, datos obligatorios, plazo de 24 horas, cómo enviar el parte de viajeros y cómo hacerlo desde Little Hotelier.",{"date":2368,"category":2630,"tags":2817,"keywords":2819,"cover":2775,"coverAlt":2826},[2818,2633,2630,2764,2444],"ses hospedajes",[2818,2820,2821,2822,2823,2824,2825],"ses hospedajes como registrar viajeros","parte de viajeros","ses hospedajes datos obligatorios","ses hospedajes servicio web","ses hospedajes booking","ses hospedajes little hotelier","Ajustes de A la llegada en Hotelier Tools con las comprobaciones DNI / Pasaporte (Registro policial), Asignación de habitación física y Validación de dirección y procedencia activadas, cada una con lo que puede y no puede hacer",{"path":2828,"title":2829,"description":2830,"meta":2831},"/blog/es/send-invoice-to-guest-at-checkout","Un huésped pide factura: cómo enviarla automáticamente al hacer el check-out desde Little Hotelier","Booking.com no factura a tus huéspedes: lo haces tú. Envía la factura desde Little Hotelier a mano, o por email automático tras el check-out del huésped.",{"date":2368,"category":2569,"tags":2832,"keywords":2834,"feature":2569,"cover":2841,"coverAlt":2842},[2571,2833,2501,2444,2524],"checkout",[2835,2836,2837,2838,2579,2839,2840],"enviar factura al huésped","pedir factura hotel booking","factura hotel booking","little hotelier factura","factura simplificada hotel","enviar factura automaticamente check out","/images/blog/demo/es/invoice-at-checkout.webp","Página Factura a la salida de Hotelier Tools: la tarea Facturación automática a la salida activa cada día a las 12:00, un rango de fechas con Buscar reservas y la tabla de reservas con un botón verde Facturar al salir para cada estancia",{"path":2844,"title":2845,"description":2846,"meta":2847},"/blog/es/whatsapp-little-hotelier","WhatsApp con Little Hotelier: Messaging hub, WhatsApp Business para hoteles y otras opciones","El Messaging hub de Little Hotelier usa la API oficial de WhatsApp Business. Compáralo con la app gratuita y una bandeja compartida, con plantillas.",{"date":2368,"category":2686,"tags":2848,"keywords":2852,"feature":2755,"cover":2859,"coverAlt":2860},[2849,2850,2444,2851,2745],"whatsapp","messaging","guest engagement",[2853,2854,2855,2856,2857,2858],"little hotelier whatsapp","whatsapp business para hoteles","whatsapp business api hoteles","whatsapp business app hotel","plantillas whatsapp hotel check-in","little hotelier messaging hub","/images/blog/demo/es/guest-inbox-ai-plan-late-arrival.webp","Bandeja de huéspedes de Hotelier Tools con una conversación de WhatsApp de Ingrid Kowalski sobre una llegada tardía (identidad verificada, reserva vinculada), un plan de la IA en borrador con una respuesta editable y el panel privado Asistente",1791141220902]