[{"data":1,"prerenderedAt":2859},["ShallowReactive",2],{"blog-little-hotelier-mcp-claude-code-cursor-vscode-pt":3,"blog-langs-little-hotelier-mcp-claude-code-cursor-vscode":2407,"blog-list-pt":2416},{"id":4,"title":5,"body":6,"description":2365,"extension":2366,"meta":2367,"navigation":1043,"path":2403,"seo":2404,"stem":2405,"__hash__":2406},"content/blog/pt/little-hotelier-mcp-claude-code-cursor-vscode.md","Claude Code MCP: como usar os dados do Little Hotelier no Claude Code, Cursor e VS Code",{"type":7,"value":8,"toc":2347},"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,698,756,759,784,843,853,856,971,975,988,992,995,1006,1009,1552,1563,1567,1574,2061,2079,2083,2088,2091,2095,2166,2172,2176,2179,2227,2231,2307,2310,2314,2343],[10,11,12,13,17,18,21],"p",{},"Adicione um servidor MCP remoto, ",[14,15,16],"code",{},"https://dashboard.hotelier.tools/api/mcp",", com uma chave de API do Hotelier Tools, e o Claude Code, o Cursor, o VS Code (modo agente do Copilot), o Windsurf ou o Gemini CLI conseguem ler as suas reservas, tarifas e faturas do Little Hotelier enquanto escrevem código para você. No Claude Code é um único 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],{},"A seguir ficam as configurações exatas para cada ferramenta (conferidas com a documentação de cada fornecedor em outubro de 2026), três coisas que vale a pena construir e quando chamar diretamente a API REST.",[26,27,29],"h2",{"id":28},"antes-de-começar-crie-uma-chave-de-api","Antes de começar: crie uma chave de API",[10,31,32,33,40,41],{},"O Little Hotelier não publica um servidor MCP, e a própria documentação da API de parceiros da SiteMinder diz que os dados de disponibilidade e tarifas ",[34,35,39],"a",{"href":36,"rel":37},"https://developer.siteminder.com/smx-api/reference/availability-and-rates/publishers",[38],"nofollow","não se conseguem obter do Little Hotelier",". O Hotelier Tools oferece um servidor MCP e uma API REST, usando o login do Little Hotelier do seu próprio hotel. Não é afiliado à SiteMinder nem ao Little Hotelier, nem tem o aval deles. Contexto: ",[34,42,44],{"href":43},"/blog/little-hotelier-api","o Little Hotelier tem API?",[46,47,48,61,71,81],"ol",{},[49,50,51,52,56,57,60],"li",{},"No Hotelier Tools, conecte o Little Hotelier em ",[53,54,55],"strong",{},"Credentials"," (",[14,58,59],{},"/credentials","), se ainda não o fez.",[49,62,63,64,56,67,70],{},"Abra ",[53,65,66],{},"Developer → API & MCP → API Keys",[14,68,69],{},"/developer/api-keys",").",[49,72,73,74,77,78,21],{},"Escreva um nome que diga onde a chave vai ficar, como ",[14,75,76],{},"cursor-laptop",", e clique em ",[53,79,80],{},"Generate key",[49,82,83,84,21],{},"Copie-a logo: \"Copy this key now — it will not be shown again.\" Começa por ",[14,85,86],{},"htk_",[88,89],"screenshot",{"alt":90,"caption":91,"path":69,"src":92},"Página API keys no Hotelier Tools: o formulário Generate a new key com um campo de nome e o botão Generate key, uma chave ativa (MCP internal (chat), mascarada) com um botão Revoke e as notas Good security practice","Uma chave por ferramenta facilita revogar só a que deixou de usar.","/images/blog/demo/en/api-keys.webp",[10,94,95],{},"Uma chave tem as mesmas permissões que a sua conta do Hotelier Tools, na única propriedade em que a criou. Pode ter até 10 chaves.",[10,97,98,101,102,105],{},[53,99,100],{},"Mantenha a chave fora dos seus ficheiros."," Guarde-a numa variável de ambiente chamada ",[14,103,104],{},"HT_API_KEY"," e referencie-a nas configurações:",[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   # ou ~/.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","   # ou ~/.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],{},"Abra um novo terminal (e reinicie o editor) para que ele reconheça a variável.",[26,161,163],{"id":162},"como-adicionar-o-servidor-mcp-ao-claude-code-cursor-vs-code-windsurf-e-gemini-cli","Como adicionar o servidor MCP ao Claude Code, Cursor, VS Code, Windsurf e Gemini CLI",[10,165,166],{},"Cada ferramenta guarda os mesmos três dados (endereço, transporte, chave) num ficheiro ligeiramente diferente. Escolha a sua.",[168,169,171],"h3",{"id":170},"claude-code","Claude Code",[10,173,174,175,180],{},"O Claude Code tem um comando integrado para servidores remotos (",[34,176,179],{"href":177,"rel":178},"https://code.claude.com/docs/en/mcp",[38],"documentação da 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],{},"Depois inicie ",[14,221,192],{}," e escreva ",[14,224,225],{},"/mcp",". O Hotelier Tools deve aparecer como ",[53,228,229],{},"connected","; um estado ",[14,232,233],{},"failed"," com um 401 significa que a chave está errada.",[236,237,238,256],"ul",{},[49,239,240,243,244,247,248,251,252,255],{},[53,241,242],{},"Âmbito (scope)."," Por padrão, o servidor fica guardado só para a pasta atual. Acrescente ",[14,245,246],{},"--scope user"," a seguir ao nome para o usar em todos os projetos, ou ",[14,249,250],{},"--scope project"," para escrever um ",[14,253,254],{},".mcp.json"," partilhado / compartilhado.",[49,257,258,261,262,265,266,268],{},[53,259,260],{},"Login em vez de chave."," Execute o comando sem ",[14,263,264],{},"--header",", e depois, dentro do Claude Code, escreva ",[14,267,225],{}," e autentique-se no navegador. Se já conectou o Hotelier Tools como conector no claude.ai, o Claude Code pode aproveitá-lo quando faz login com a mesma conta Claude.",[10,270,271,272,274],{},"Para um projeto em que trabalha com um colega ou que guarda no Git, ponha o servidor no ",[14,273,254],{}," e deixe cada pessoa fornecer a sua própria chave:",[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],{},"A linha ",[14,374,375],{},"\"type\": \"http\""," é obrigatória: o Claude Code trata uma entrada com ",[14,378,379],{},"url"," mas sem ",[14,382,383],{},"type"," como um erro de configuração.",[168,386,388],{"id":387},"cursor","Cursor",[10,390,391,392,395,396,399,400,180],{},"O Cursor lê ",[14,393,394],{},"~/.cursor/mcp.json"," para todos os projetos, ou ",[14,397,398],{},".cursor/mcp.json"," dentro de um projeto (",[34,401,404],{"href":402,"rel":403},"https://cursor.com/docs/context/mcp",[38],"documentação do 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],{},"Guarde e depois confirme que o servidor está ativado nas configurações MCP do Cursor (as versões recentes listam os servidores em ",[53,467,468],{},"Customize"," na barra lateral). Pergunte no chat ",[53,471,472],{},"Agent",". Por padrão, o Cursor pede aprovação antes de executar uma ferramenta; mantenha-o assim para este servidor. Se omitir ",[14,475,476],{},"headers",", o Cursor oferece o login pelo navegador.",[168,479,481],{"id":480},"vs-code-com-github-copilot","VS Code com GitHub Copilot",[10,483,484,485,488,489,492,493,495,496,501,502,505],{},"O VS Code usa ",[14,486,487],{},".vscode/mcp.json",", com ",[14,490,491],{},"servers"," como chave de topo e um ",[14,494,375],{}," obrigatório (",[34,497,500],{"href":498,"rel":499},"https://code.visualstudio.com/docs/agents/reference/mcp-configuration",[38],"documentação do VS Code","). A sua funcionalidade ",[14,503,504],{},"inputs"," pede a chave uma vez e guarda-a no armazenamento seguro do VS Code, para que nunca fique no ficheiro:",[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],{},"Abra o Copilot Chat, mude para o modo ",[53,654,472],{}," e use ",[53,657,658],{},"Configure Tools"," para ver as ferramentas do Hotelier Tools. O VS Code pode pedir-lhe que confie no servidor na primeira vez que é iniciado. Para todos os espaços de trabalho, execute ",[53,661,662],{},"MCP: Open User Configuration"," e cole lá o mesmo bloco. O VS Code também suporta o login pelo navegador se omitir ",[14,665,476],{},[88,667],{"alt":668,"caption":669,"path":670,"src":671,"height":672,"width":673},"Separador VS Code / GitHub Copilot da página MCP setup do Hotelier Tools: um trecho de .vscode/mcp.json com servers, hotelier-tools, type http, o URL /api/mcp da demonstração e um cabeçalho Authorization com o marcador htk_YOUR_API_KEY, e depois Turn on Agent mode in Copilot Chat","A página MCP Setup tem um trecho pronto para cada cliente. A demonstração mostra o seu próprio endereço; o seu é dashboard.hotelier.tools.","/developer/mcp-setup","/images/blog/demo/en/mcp-config-vscode-copilot.webp",446,1036,[168,675,677],{"id":676},"windsurf-e-gemini-cli","Windsurf e Gemini CLI",[10,679,680,681,684,685,688,689,692,693,180],{},"O ",[53,682,683],{},"Windsurf"," (cuja documentação passou a estar sob o Devin) lê ",[14,686,687],{},"~/.codeium/windsurf/mcp_config.json"," e usa ",[14,690,691],{},"serverUrl"," para servidores remotos (",[34,694,697],{"href":695,"rel":696},"https://docs.devin.ai/windsurf/plugins/cascade/mcp",[38],"documentação",[107,699,701],{"className":277,"code":700,"filename":687,"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,702,703,707,713,719,730,744,748,752],{"__ignoreMap":113},[117,704,705],{"class":119,"line":120},[117,706,286],{"class":152},[117,708,709,711],{"class":119,"line":289},[117,710,292],{"class":123},[117,712,295],{"class":152},[117,714,715,717],{"class":119,"line":298},[117,716,301],{"class":123},[117,718,295],{"class":152},[117,720,721,724,726,728],{"class":119,"line":306},[117,722,723],{"class":123},"      \"serverUrl\"",[117,725,312],{"class":152},[117,727,329],{"class":127},[117,729,318],{"class":152},[117,731,732,734,736,738,740,742],{"class":119,"line":321},[117,733,337],{"class":123},[117,735,340],{"class":152},[117,737,343],{"class":123},[117,739,312],{"class":152},[117,741,448],{"class":127},[117,743,351],{"class":152},[117,745,746],{"class":119,"line":334},[117,747,357],{"class":152},[117,749,750],{"class":119,"line":354},[117,751,363],{"class":152},[117,753,754],{"class":119,"line":360},[117,755,369],{"class":152},[10,757,758],{},"O Windsurf limita o Cascade a 100 ferramentas no total, e o Hotelier Tools oferece mais de 100, por isso pode ter de desativar no painel MCP as ferramentas que não usa.",[10,760,680,761,764,765,768,769,772,773,776,777,779,780,180],{},[53,762,763],{},"Gemini CLI"," lê ",[14,766,767],{},"~/.gemini/settings.json"," (ou ",[14,770,771],{},".gemini/settings.json"," num projeto) e usa ",[14,774,775],{},"httpUrl"," para este tipo de servidor; ",[14,778,379],{}," significaria o transporte SSE mais antigo, que o Hotelier Tools não serve (",[34,781,697],{"href":782,"rel":783},"https://geminicli.com/docs/tools/mcp-server/",[38],[107,785,787],{"className":277,"code":786,"filename":767,"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,788,789,793,799,805,816,831,835,839],{"__ignoreMap":113},[117,790,791],{"class":119,"line":120},[117,792,286],{"class":152},[117,794,795,797],{"class":119,"line":289},[117,796,292],{"class":123},[117,798,295],{"class":152},[117,800,801,803],{"class":119,"line":298},[117,802,301],{"class":123},[117,804,295],{"class":152},[117,806,807,810,812,814],{"class":119,"line":306},[117,808,809],{"class":123},"      \"httpUrl\"",[117,811,312],{"class":152},[117,813,329],{"class":127},[117,815,318],{"class":152},[117,817,818,820,822,824,826,829],{"class":119,"line":321},[117,819,337],{"class":123},[117,821,340],{"class":152},[117,823,343],{"class":123},[117,825,312],{"class":152},[117,827,828],{"class":127},"\"Bearer $HT_API_KEY\"",[117,830,351],{"class":152},[117,832,833],{"class":119,"line":334},[117,834,357],{"class":152},[117,836,837],{"class":119,"line":354},[117,838,363],{"class":152},[117,840,841],{"class":119,"line":360},[117,842,369],{"class":152},[10,844,845,846,849,850,852],{},"Ou a partir do terminal: ",[14,847,848],{},"gemini mcp add --transport http --header \"Authorization: Bearer htk_YOUR_API_KEY\" hotelier-tools https://dashboard.hotelier.tools/api/mcp",". Escreva ",[14,851,225],{}," dentro do Gemini CLI para confirmar.",[10,854,855],{},"Estas duas configurações seguem a documentação de cada fornecedor; não foram testadas em todas as versões.",[857,858,859,878],"table",{},[860,861,862],"thead",{},[863,864,865,869,872,875],"tr",{},[866,867,868],"th",{},"Ferramenta",[866,870,871],{},"Ficheiro de configuração",[866,873,874],{},"Chave de topo",[866,876,877],{},"Chave do URL",[879,880,881,902,918,937,954],"tbody",{},[863,882,883,886,890,895],{},[884,885,171],"td",{},[884,887,888],{},[14,889,254],{},[884,891,892],{},[14,893,894],{},"mcpServers",[884,896,897,899,900],{},[14,898,379],{}," + ",[14,901,375],{},[863,903,904,906,910,914],{},[884,905,388],{},[884,907,908],{},[14,909,398],{},[884,911,912],{},[14,913,894],{},[884,915,916],{},[14,917,379],{},[863,919,920,923,927,931],{},[884,921,922],{},"VS Code",[884,924,925],{},[14,926,487],{},[884,928,929],{},[14,930,491],{},[884,932,933,899,935],{},[14,934,379],{},[14,936,375],{},[863,938,939,941,946,950],{},[884,940,683],{},[884,942,943],{},[14,944,945],{},"mcp_config.json",[884,947,948],{},[14,949,894],{},[884,951,952],{},[14,953,691],{},[863,955,956,958,963,967],{},[884,957,763],{},[884,959,960],{},[14,961,962],{},"settings.json",[884,964,965],{},[14,966,894],{},[884,968,969],{},[14,970,775],{},[26,972,974],{"id":973},"três-coisas-que-vale-a-pena-construir","Três coisas que vale a pena construir",[10,976,977,978,982,983,987],{},"O truque é deixar o agente usar o MCP para ",[979,980,981],"em",{},"olhar"," para os seus dados reais e depois escrever código que chama a ",[34,984,986],{"href":985},"/tools/bot/api-mcp","API REST",", para que o resultado funcione todos os meses sem IA.",[168,989,991],{"id":990},"um-relatório-mensal-de-ocupação","Um relatório mensal de ocupação",[10,993,994],{},"Peça ao Claude Code (ou ao agente do Cursor) numa pasta vazia:",[996,997,998],"prompt",{"label":171},[10,999,1000,1001,1005],{},"Use o servidor MCP hotelier-tools para consultar os meus tipos de quarto e as reservas do mês passado. Depois escreva um script em Node.js que chame a API REST do Hotelier Tools (especificação: ",[34,1002,1003],{"href":1003,"rel":1004},"https://dashboard.hotelier.tools/api/v1/openapi.json",[38],") com a chave em HT_API_KEY e que, para qualquer mês que eu indique, mostre a ocupação e a tarifa média diária por tipo de quarto e as guarde num CSV.",[10,1007,1008],{},"Um bom script começa assim. Vai buscar os tipos de quarto e todas as reservas que se sobrepõem ao mês, e guarda a resposta em bruto para que possa conferir os campos antes de fazer contas:",[107,1010,1015],{"className":1011,"code":1012,"filename":1013,"language":1014,"meta":113,"style":113},"language-js shiki shiki-themes github-light github-dark","// Uso: node fetch-month.mjs 2026-09   (precisa de HT_API_KEY no seu ambiente)\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,1016,1017,1022,1039,1045,1061,1073,1098,1110,1115,1119,1148,1188,1243,1256,1260,1264,1282,1322,1343,1393,1398,1419,1441,1452,1469,1475,1480,1491,1504,1527,1532],{"__ignoreMap":113},[117,1018,1019],{"class":119,"line":120},[117,1020,1021],{"class":138},"// Uso: node fetch-month.mjs 2026-09   (precisa de HT_API_KEY no seu ambiente)\n",[117,1023,1024,1027,1030,1033,1036],{"class":119,"line":289},[117,1025,1026],{"class":131},"import",[117,1028,1029],{"class":152}," { writeFile } ",[117,1031,1032],{"class":131},"from",[117,1034,1035],{"class":127}," \"node:fs/promises\"",[117,1037,1038],{"class":152},";\n",[117,1040,1041],{"class":119,"line":298},[117,1042,1044],{"emptyLinePlaceholder":1043},true,"\n",[117,1046,1047,1050,1053,1056,1059],{"class":119,"line":306},[117,1048,1049],{"class":131},"const",[117,1051,1052],{"class":123}," API",[117,1054,1055],{"class":131}," =",[117,1057,1058],{"class":127}," \"https://dashboard.hotelier.tools/api/v1\"",[117,1060,1038],{"class":152},[117,1062,1063,1065,1068,1070],{"class":119,"line":321},[117,1064,1049],{"class":131},[117,1066,1067],{"class":123}," headers",[117,1069,1055],{"class":131},[117,1071,1072],{"class":152}," {\n",[117,1074,1075,1078,1081,1084,1086,1089,1091,1093,1096],{"class":119,"line":334},[117,1076,1077],{"class":152},"  Authorization: ",[117,1079,1080],{"class":127},"`Bearer ${",[117,1082,1083],{"class":152},"process",[117,1085,21],{"class":127},[117,1087,1088],{"class":152},"env",[117,1090,21],{"class":127},[117,1092,104],{"class":123},[117,1094,1095],{"class":127},"}`",[117,1097,318],{"class":152},[117,1099,1100,1103,1105,1108],{"class":119,"line":354},[117,1101,1102],{"class":127},"  \"Content-Type\"",[117,1104,312],{"class":152},[117,1106,1107],{"class":127},"\"application/json\"",[117,1109,318],{"class":152},[117,1111,1112],{"class":119,"line":360},[117,1113,1114],{"class":152},"};\n",[117,1116,1117],{"class":119,"line":366},[117,1118,1044],{"emptyLinePlaceholder":1043},[117,1120,1121,1124,1127,1130,1133,1137,1140,1143,1145],{"class":119,"line":584},[117,1122,1123],{"class":131},"async",[117,1125,1126],{"class":131}," function",[117,1128,1129],{"class":191}," call",[117,1131,1132],{"class":152},"(",[117,1134,1136],{"class":1135},"s4XuR","path",[117,1138,1139],{"class":152},", ",[117,1141,1142],{"class":1135},"options",[117,1144,1055],{"class":131},[117,1146,1147],{"class":152}," {}) {\n",[117,1149,1150,1153,1156,1158,1161,1164,1166,1169,1172,1175,1177,1179,1182,1185],{"class":119,"line":592},[117,1151,1152],{"class":131},"  const",[117,1154,1155],{"class":123}," res",[117,1157,1055],{"class":131},[117,1159,1160],{"class":131}," await",[117,1162,1163],{"class":191}," fetch",[117,1165,1132],{"class":152},[117,1167,1168],{"class":127},"`${",[117,1170,1171],{"class":123},"API",[117,1173,1174],{"class":127},"}${",[117,1176,1136],{"class":152},[117,1178,1095],{"class":127},[117,1180,1181],{"class":152},", { ",[117,1183,1184],{"class":131},"...",[117,1186,1187],{"class":152},"options, headers });\n",[117,1189,1190,1193,1195,1198,1201,1204,1207,1210,1212,1214,1217,1219,1222,1225,1228,1230,1232,1235,1238,1240],{"class":119,"line":599},[117,1191,1192],{"class":131},"  if",[117,1194,56],{"class":152},[117,1196,1197],{"class":131},"!",[117,1199,1200],{"class":152},"res.ok) ",[117,1202,1203],{"class":131},"throw",[117,1205,1206],{"class":131}," new",[117,1208,1209],{"class":191}," Error",[117,1211,1132],{"class":152},[117,1213,1168],{"class":127},[117,1215,1216],{"class":152},"res",[117,1218,21],{"class":127},[117,1220,1221],{"class":152},"status",[117,1223,1224],{"class":127},"} ${",[117,1226,1227],{"class":131},"await",[117,1229,1155],{"class":152},[117,1231,21],{"class":127},[117,1233,1234],{"class":191},"text",[117,1236,1237],{"class":127},"()",[117,1239,1095],{"class":127},[117,1241,1242],{"class":152},");\n",[117,1244,1245,1248,1251,1253],{"class":119,"line":610},[117,1246,1247],{"class":131},"  return",[117,1249,1250],{"class":152}," res.",[117,1252,279],{"class":191},[117,1254,1255],{"class":152},"();\n",[117,1257,1258],{"class":119,"line":621},[117,1259,369],{"class":152},[117,1261,1262],{"class":119,"line":637},[117,1263,1044],{"emptyLinePlaceholder":1043},[117,1265,1266,1268,1271,1273,1276,1279],{"class":119,"line":642},[117,1267,1049],{"class":131},[117,1269,1270],{"class":123}," month",[117,1272,1055],{"class":131},[117,1274,1275],{"class":152}," process.argv[",[117,1277,1278],{"class":123},"2",[117,1280,1281],{"class":152},"];\n",[117,1283,1284,1286,1289,1292,1294,1297,1300,1303,1306,1309,1311,1314,1316,1319],{"class":119,"line":647},[117,1285,1049],{"class":131},[117,1287,1288],{"class":152}," [",[117,1290,1291],{"class":123},"year",[117,1293,1139],{"class":152},[117,1295,1296],{"class":123},"mon",[117,1298,1299],{"class":152},"] ",[117,1301,1302],{"class":131},"=",[117,1304,1305],{"class":152}," month.",[117,1307,1308],{"class":191},"split",[117,1310,1132],{"class":152},[117,1312,1313],{"class":127},"\"-\"",[117,1315,70],{"class":152},[117,1317,1318],{"class":191},"map",[117,1320,1321],{"class":152},"(Number);\n",[117,1323,1325,1327,1330,1332,1335,1338,1341],{"class":119,"line":1324},18,[117,1326,1049],{"class":131},[117,1328,1329],{"class":123}," startDate",[117,1331,1055],{"class":131},[117,1333,1334],{"class":127}," `${",[117,1336,1337],{"class":152},"month",[117,1339,1340],{"class":127},"}-01`",[117,1342,1038],{"class":152},[117,1344,1346,1348,1351,1353,1355,1358,1361,1364,1367,1370,1373,1376,1379,1382,1384,1386,1388,1391],{"class":119,"line":1345},19,[117,1347,1049],{"class":131},[117,1349,1350],{"class":123}," endDate",[117,1352,1055],{"class":131},[117,1354,1206],{"class":131},[117,1356,1357],{"class":191}," Date",[117,1359,1360],{"class":152},"(Date.",[117,1362,1363],{"class":191},"UTC",[117,1365,1366],{"class":152},"(year, mon, ",[117,1368,1369],{"class":123},"0",[117,1371,1372],{"class":152},")).",[117,1374,1375],{"class":191},"toISOString",[117,1377,1378],{"class":152},"().",[117,1380,1381],{"class":191},"slice",[117,1383,1132],{"class":152},[117,1385,1369],{"class":123},[117,1387,1139],{"class":152},[117,1389,1390],{"class":123},"10",[117,1392,1242],{"class":152},[117,1394,1396],{"class":119,"line":1395},20,[117,1397,1044],{"emptyLinePlaceholder":1043},[117,1399,1401,1403,1406,1408,1410,1412,1414,1417],{"class":119,"line":1400},21,[117,1402,1049],{"class":131},[117,1404,1405],{"class":123}," roomTypes",[117,1407,1055],{"class":131},[117,1409,1160],{"class":131},[117,1411,1129],{"class":191},[117,1413,1132],{"class":152},[117,1415,1416],{"class":127},"\"/room-types\"",[117,1418,1242],{"class":152},[117,1420,1422,1424,1427,1429,1431,1433,1435,1438],{"class":119,"line":1421},22,[117,1423,1049],{"class":131},[117,1425,1426],{"class":123}," reservations",[117,1428,1055],{"class":131},[117,1430,1160],{"class":131},[117,1432,1129],{"class":191},[117,1434,1132],{"class":152},[117,1436,1437],{"class":127},"\"/methods/getReservationsByDateRange\"",[117,1439,1440],{"class":152},", {\n",[117,1442,1444,1447,1450],{"class":119,"line":1443},23,[117,1445,1446],{"class":152},"  method: ",[117,1448,1449],{"class":127},"\"POST\"",[117,1451,318],{"class":152},[117,1453,1455,1458,1461,1463,1466],{"class":119,"line":1454},24,[117,1456,1457],{"class":152},"  body: ",[117,1459,1460],{"class":123},"JSON",[117,1462,21],{"class":152},[117,1464,1465],{"class":191},"stringify",[117,1467,1468],{"class":152},"({ params: { startDate, endDate } }),\n",[117,1470,1472],{"class":119,"line":1471},25,[117,1473,1474],{"class":152},"});\n",[117,1476,1478],{"class":119,"line":1477},26,[117,1479,1044],{"emptyLinePlaceholder":1043},[117,1481,1483,1485,1488],{"class":119,"line":1482},27,[117,1484,1227],{"class":131},[117,1486,1487],{"class":191}," writeFile",[117,1489,1490],{"class":152},"(\n",[117,1492,1494,1497,1499,1502],{"class":119,"line":1493},28,[117,1495,1496],{"class":127},"  `raw-${",[117,1498,1337],{"class":152},[117,1500,1501],{"class":127},"}.json`",[117,1503,318],{"class":152},[117,1505,1507,1510,1512,1514,1517,1520,1522,1524],{"class":119,"line":1506},29,[117,1508,1509],{"class":123},"  JSON",[117,1511,21],{"class":152},[117,1513,1465],{"class":191},[117,1515,1516],{"class":152},"({ roomTypes: roomTypes.data, reservations: reservations.result }, ",[117,1518,1519],{"class":123},"null",[117,1521,1139],{"class":152},[117,1523,1278],{"class":123},[117,1525,1526],{"class":152},")\n",[117,1528,1530],{"class":119,"line":1529},30,[117,1531,1242],{"class":152},[117,1533,1535,1538,1541,1543,1546,1548,1550],{"class":119,"line":1534},31,[117,1536,1537],{"class":152},"console.",[117,1539,1540],{"class":191},"log",[117,1542,1132],{"class":152},[117,1544,1545],{"class":127},"`Saved raw-${",[117,1547,1337],{"class":152},[117,1549,1501],{"class":127},[117,1551,1242],{"class":152},[10,1553,1554,1555,1558,1559,1562],{},"A própria especificação da API diz que os objetos de reserva vêm do Little Hotelier e que a sua \"shape may vary\" (estrutura pode variar), por isso deixe o agente ler o ficheiro guardado antes de calcular o que quer que seja. ",[14,1556,1557],{},"/room-types"," dá o ",[14,1560,1561],{},"totalRooms"," por tipo, que é a outra metade da conta da ocupação.",[168,1564,1566],{"id":1565},"uma-sincronização-com-o-google-sheets","Uma sincronização com o Google Sheets",[10,1568,1569,1570,1573],{},"Para uma folha de cálculo / planilha que lista as chegadas dos próximos 30 dias e se atualiza todas as manhãs, abra a sua folha no Google Sheets, vá a ",[53,1571,1572],{},"Extensions → Apps Script"," e cole:",[107,1575,1578],{"className":1011,"code":1576,"filename":1577,"language":1014,"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,1579,1580,1591,1618,1653,1668,1718,1730,1765,1769,1786,1799,1809,1814,1850,1854,1890,1895,1900,1917,1953,1963,2009,2057],{"__ignoreMap":113},[117,1581,1582,1585,1588],{"class":119,"line":120},[117,1583,1584],{"class":131},"function",[117,1586,1587],{"class":191}," syncArrivals",[117,1589,1590],{"class":152},"() {\n",[117,1592,1593,1595,1598,1600,1603,1606,1608,1611,1613,1616],{"class":119,"line":289},[117,1594,1152],{"class":131},[117,1596,1597],{"class":123}," key",[117,1599,1055],{"class":131},[117,1601,1602],{"class":152}," PropertiesService.",[117,1604,1605],{"class":191},"getScriptProperties",[117,1607,1378],{"class":152},[117,1609,1610],{"class":191},"getProperty",[117,1612,1132],{"class":152},[117,1614,1615],{"class":127},"'HT_API_KEY'",[117,1617,1242],{"class":152},[117,1619,1620,1622,1625,1627,1630,1633,1636,1639,1642,1645,1648,1651],{"class":119,"line":298},[117,1621,1152],{"class":131},[117,1623,1624],{"class":191}," fmt",[117,1626,1055],{"class":131},[117,1628,1629],{"class":1135}," d",[117,1631,1632],{"class":131}," =>",[117,1634,1635],{"class":152}," Utilities.",[117,1637,1638],{"class":191},"formatDate",[117,1640,1641],{"class":152},"(d, Session.",[117,1643,1644],{"class":191},"getScriptTimeZone",[117,1646,1647],{"class":152},"(), ",[117,1649,1650],{"class":127},"'yyyy-MM-dd'",[117,1652,1242],{"class":152},[117,1654,1655,1657,1660,1662,1664,1666],{"class":119,"line":306},[117,1656,1152],{"class":131},[117,1658,1659],{"class":123}," today",[117,1661,1055],{"class":131},[117,1663,1206],{"class":131},[117,1665,1357],{"class":191},[117,1667,1255],{"class":152},[117,1669,1670,1672,1675,1677,1679,1681,1684,1687,1690,1693,1696,1699,1702,1704,1707,1709,1711,1713,1716],{"class":119,"line":321},[117,1671,1152],{"class":131},[117,1673,1674],{"class":123}," in30",[117,1676,1055],{"class":131},[117,1678,1206],{"class":131},[117,1680,1357],{"class":191},[117,1682,1683],{"class":152},"(today.",[117,1685,1686],{"class":191},"getTime",[117,1688,1689],{"class":152},"() ",[117,1691,1692],{"class":131},"+",[117,1694,1695],{"class":123}," 30",[117,1697,1698],{"class":131}," *",[117,1700,1701],{"class":123}," 24",[117,1703,1698],{"class":131},[117,1705,1706],{"class":123}," 60",[117,1708,1698],{"class":131},[117,1710,1706],{"class":123},[117,1712,1698],{"class":131},[117,1714,1715],{"class":123}," 1000",[117,1717,1242],{"class":152},[117,1719,1720,1722,1725,1727],{"class":119,"line":334},[117,1721,1152],{"class":131},[117,1723,1724],{"class":123}," url",[117,1726,1055],{"class":131},[117,1728,1729],{"class":127}," 'https://dashboard.hotelier.tools/api/v1/reservations'\n",[117,1731,1732,1735,1738,1741,1743,1746,1748,1751,1753,1755,1758,1760,1763],{"class":119,"line":354},[117,1733,1734],{"class":131},"    +",[117,1736,1737],{"class":127}," '?startDate='",[117,1739,1740],{"class":131}," +",[117,1742,1624],{"class":191},[117,1744,1745],{"class":152},"(today) ",[117,1747,1692],{"class":131},[117,1749,1750],{"class":127}," '&endDate='",[117,1752,1740],{"class":131},[117,1754,1624],{"class":191},[117,1756,1757],{"class":152},"(in30) ",[117,1759,1692],{"class":131},[117,1761,1762],{"class":127}," '&limit=100'",[117,1764,1038],{"class":152},[117,1766,1767],{"class":119,"line":360},[117,1768,1044],{"emptyLinePlaceholder":1043},[117,1770,1771,1773,1775,1777,1780,1783],{"class":119,"line":366},[117,1772,1152],{"class":131},[117,1774,1155],{"class":123},[117,1776,1055],{"class":131},[117,1778,1779],{"class":152}," UrlFetchApp.",[117,1781,1782],{"class":191},"fetch",[117,1784,1785],{"class":152},"(url, {\n",[117,1787,1788,1791,1794,1796],{"class":119,"line":584},[117,1789,1790],{"class":152},"    headers: { Authorization: ",[117,1792,1793],{"class":127},"'Bearer '",[117,1795,1740],{"class":131},[117,1797,1798],{"class":152}," key },\n",[117,1800,1801,1804,1807],{"class":119,"line":592},[117,1802,1803],{"class":152},"    muteHttpExceptions: ",[117,1805,1806],{"class":123},"true",[117,1808,318],{"class":152},[117,1810,1811],{"class":119,"line":599},[117,1812,1813],{"class":152},"  });\n",[117,1815,1816,1818,1821,1824,1826,1829,1832,1835,1837,1839,1841,1844,1847],{"class":119,"line":610},[117,1817,1192],{"class":131},[117,1819,1820],{"class":152}," (res.",[117,1822,1823],{"class":191},"getResponseCode",[117,1825,1689],{"class":152},[117,1827,1828],{"class":131},"!==",[117,1830,1831],{"class":123}," 200",[117,1833,1834],{"class":152},") ",[117,1836,1203],{"class":131},[117,1838,1206],{"class":131},[117,1840,1209],{"class":191},[117,1842,1843],{"class":152},"(res.",[117,1845,1846],{"class":191},"getContentText",[117,1848,1849],{"class":152},"());\n",[117,1851,1852],{"class":119,"line":621},[117,1853,1044],{"emptyLinePlaceholder":1043},[117,1855,1856,1858,1861,1863,1866,1868,1871,1873,1875,1878,1880,1882,1885,1887],{"class":119,"line":637},[117,1857,1152],{"class":131},[117,1859,1860],{"class":123}," rows",[117,1862,1055],{"class":131},[117,1864,1865],{"class":123}," JSON",[117,1867,21],{"class":152},[117,1869,1870],{"class":191},"parse",[117,1872,1843],{"class":152},[117,1874,1846],{"class":191},[117,1876,1877],{"class":152},"()).data.",[117,1879,1318],{"class":191},[117,1881,1132],{"class":152},[117,1883,1884],{"class":1135},"r",[117,1886,1632],{"class":131},[117,1888,1889],{"class":152}," [\n",[117,1891,1892],{"class":119,"line":642},[117,1893,1894],{"class":152},"    r.id, r.guestName, r.status, r.checkIn, r.checkOut, r.roomType, r.totalAmount,\n",[117,1896,1897],{"class":119,"line":647},[117,1898,1899],{"class":152},"  ]);\n",[117,1901,1902,1904,1907,1909,1912,1915],{"class":119,"line":1324},[117,1903,1152],{"class":131},[117,1905,1906],{"class":123}," book",[117,1908,1055],{"class":131},[117,1910,1911],{"class":152}," SpreadsheetApp.",[117,1913,1914],{"class":191},"getActive",[117,1916,1255],{"class":152},[117,1918,1919,1921,1924,1926,1929,1932,1934,1937,1939,1942,1944,1947,1949,1951],{"class":119,"line":1345},[117,1920,1152],{"class":131},[117,1922,1923],{"class":123}," sheet",[117,1925,1055],{"class":131},[117,1927,1928],{"class":152}," book.",[117,1930,1931],{"class":191},"getSheetByName",[117,1933,1132],{"class":152},[117,1935,1936],{"class":127},"'Arrivals'",[117,1938,1834],{"class":152},[117,1940,1941],{"class":131},"||",[117,1943,1928],{"class":152},[117,1945,1946],{"class":191},"insertSheet",[117,1948,1132],{"class":152},[117,1950,1936],{"class":127},[117,1952,1242],{"class":152},[117,1954,1955,1958,1961],{"class":119,"line":1395},[117,1956,1957],{"class":152},"  sheet.",[117,1959,1960],{"class":191},"clearContents",[117,1962,1255],{"class":152},[117,1964,1965,1967,1970,1973,1976,1978,1981,1983,1986,1988,1991,1993,1996,1998,2001,2003,2006],{"class":119,"line":1400},[117,1966,1957],{"class":152},[117,1968,1969],{"class":191},"appendRow",[117,1971,1972],{"class":152},"([",[117,1974,1975],{"class":127},"'ID'",[117,1977,1139],{"class":152},[117,1979,1980],{"class":127},"'Guest'",[117,1982,1139],{"class":152},[117,1984,1985],{"class":127},"'Status'",[117,1987,1139],{"class":152},[117,1989,1990],{"class":127},"'Check-in'",[117,1992,1139],{"class":152},[117,1994,1995],{"class":127},"'Check-out'",[117,1997,1139],{"class":152},[117,1999,2000],{"class":127},"'Room type'",[117,2002,1139],{"class":152},[117,2004,2005],{"class":127},"'Total'",[117,2007,2008],{"class":152},"]);\n",[117,2010,2011,2013,2016,2019,2022,2025,2027,2029,2031,2034,2037,2039,2042,2044,2047,2049,2051,2054],{"class":119,"line":1421},[117,2012,1192],{"class":131},[117,2014,2015],{"class":152}," (rows.",[117,2017,2018],{"class":123},"length",[117,2020,2021],{"class":152},") sheet.",[117,2023,2024],{"class":191},"getRange",[117,2026,1132],{"class":152},[117,2028,1278],{"class":123},[117,2030,1139],{"class":152},[117,2032,2033],{"class":123},"1",[117,2035,2036],{"class":152},", rows.",[117,2038,2018],{"class":123},[117,2040,2041],{"class":152},", rows[",[117,2043,1369],{"class":123},[117,2045,2046],{"class":152},"].",[117,2048,2018],{"class":123},[117,2050,70],{"class":152},[117,2052,2053],{"class":191},"setValues",[117,2055,2056],{"class":152},"(rows);\n",[117,2058,2059],{"class":119,"line":1443},[117,2060,369],{"class":152},[10,2062,2063,2064,2067,2068,2070,2071,2074,2075,2078],{},"Guarde a chave em ",[53,2065,2066],{},"Project Settings → Script properties"," como ",[14,2069,104],{},", execute-o uma vez para conceder acesso e depois acrescente um acionador diário por tempo em ",[53,2072,2073],{},"Triggers",". ",[14,2076,2077],{},"/reservations"," devolve no máximo 100 estadias por chamada, filtradas pela data de check-in, por isso divida os meses movimentados em semanas. Lembre-se de que a folha passa a conter nomes de hóspedes: tenha cuidado com quem tem acesso a ela.",[168,2080,2082],{"id":2081},"um-pequeno-dashboard-personalizado","Um pequeno dashboard personalizado",[996,2084,2085],{"label":388},[10,2086,2087],{},"Crie uma pequena aplicação web em Node.js que mostre a ocupação desta noite, as chegadas e saídas de hoje e as estadias com saldo pendente, usando a API REST do Hotelier Tools. Mantenha a HT_API_KEY só no servidor; o navegador tem de chamar o meu servidor, nunca a API diretamente. Guarde as respostas em cache durante cinco minutos.",[10,2089,2090],{},"Duas regras tornam isto seguro: a chave fica no servidor (qualquer pessoa que abra uma página consegue ler chaves no código do navegador) e o uso de cache, porque a API permite 100 pedidos por minuto por endereço IP.",[26,2092,2094],{"id":2093},"mcp-ou-api-rest-qual-usar","MCP ou API REST: qual usar?",[857,2096,2097,2108],{},[860,2098,2099],{},[863,2100,2101,2103,2106],{},[866,2102],{},[866,2104,2105],{},"Servidor MCP",[866,2107,986],{},[879,2109,2110,2121,2135,2150],{},[863,2111,2112,2115,2118],{},[884,2113,2114],{},"Melhor para",[884,2116,2117],{},"Fazer perguntas, deixar um agente explorar enquanto programa",[884,2119,2120],{},"Scripts, Sheets, dashboards que funcionam com agendamento",[863,2122,2123,2126,2130],{},[884,2124,2125],{},"Endereço",[884,2127,2128],{},[14,2129,16],{},[884,2131,2132],{},[14,2133,2134],{},"https://dashboard.hotelier.tools/api/v1",[863,2136,2137,2140,2143],{},[884,2138,2139],{},"Autenticação",[884,2141,2142],{},"Chave de API ou login no navegador",[884,2144,2145,2146,2149],{},"Chave de API (",[14,2147,2148],{},"Authorization: Bearer htk_…",")",[863,2151,2152,2155,2160],{},[884,2153,2154],{},"Documentação",[884,2156,2157,2158,2149],{},"Página MCP Setup (",[14,2159,670],{},[884,2161,2162,2163,2149],{},"Explorador Swagger (",[14,2164,2165],{},"/developer/rest-api",[10,2167,2168,2169,21],{},"Ambos usam a mesma chave e as mesmas permissões. O guia da API REST está em ",[34,2170,2171],{"href":43},"API do Little Hotelier",[26,2173,2175],{"id":2174},"ferramentas-de-leitura-e-de-escrita-mantenha-o-agente-sob-rédea-curta","Ferramentas de leitura e de escrita: mantenha o agente sob rédea curta",[10,2177,2178],{},"Os agentes de programação são bons a executar ferramentas depressa, e é exatamente por isso que convém fazê-los ir mais devagar aqui.",[236,2180,2181,2187,2193,2211],{},[49,2182,2183,2186],{},[53,2184,2185],{},"As escritas são executadas assim que o agente as chama."," Fora do dashboard do Hotelier Tools não há cartão de aprovação. Alterar uma reserva, lançar um pagamento, aplicar preços ou definir stop sell acontece assim que a ferramenta é executada. Mantenha ativa a opção do seu editor \"perguntar antes de executar ferramentas\" e não use modos de execução automática com este servidor.",[49,2188,2189,2192],{},[53,2190,2191],{},"As ações irreversíveis ficam bloqueadas de qualquer modo."," Oito ferramentas (enviar faturas por e-mail aos hóspedes, reembolsos, enviar o questionário do INE, convites a funcionários, enviar links por e-mail aos hóspedes, responder a perguntas do Booking.com e a verificação da lista de espera que envia mensagens aos hóspedes) só funcionam no dashboard.",[49,2194,2195,2198,2199,2202,2203,2206,2207,2210],{},[53,2196,2197],{},"As alterações a reservas fazem-se em dois passos."," ",[14,2200,2201],{},"propose_reservation_changes"," mostra o antes e o depois; ",[14,2204,2205],{},"apply_reservation_changes"," precisa de ",[14,2208,2209],{},"confirmed: true",". Leia a proposta.",[49,2212,2213,2216,2217,2220,2221,2224,2225,21],{},[53,2214,2215],{},"Nunca faça commit de uma chave."," Use referências no estilo ",[14,2218,2219],{},"${HT_API_KEY}",", acrescente os ficheiros de configuração locais ao ",[14,2222,2223],{},".gitignore"," e revogue qualquer chave que vaze em ",[14,2226,69],{},[26,2228,2230],{"id":2229},"resolução-de-problemas-o-servidor-não-aparece","Resolução de problemas: \"o servidor não aparece\"",[236,2232,2233,2239,2247,2258,2264,2272,2288,2297],{},[49,2234,2235,2238],{},[53,2236,2237],{},"Nada aparece depois de editar uma configuração:"," reinicie o editor ou a CLI. A maioria das ferramentas lê as configurações MCP ao iniciar.",[49,2240,2241,2244,2245,21],{},[53,2242,2243],{},"O Claude Code ou o VS Code ignora o servidor:"," confirme o ",[14,2246,375],{},[49,2248,2249,2252,2253,2255,2256,21],{},[53,2250,2251],{},"O Gemini CLI conecta-se mas falha:"," use ",[14,2254,775],{},", não ",[14,2257,379],{},[49,2259,2260,2263],{},[53,2261,2262],{},"401:"," chave errada ou revogada, ou a variável de ambiente não está definida nesse terminal.",[49,2265,2266,2269,2270,21],{},[53,2267,2268],{},"400 \"No Little Hotelier credentials configured\":"," conecte o Little Hotelier em ",[14,2271,59],{},[49,2273,2274,2281,2282,2284,2285,21],{},[53,2275,2276,2277,2280],{},"423 ",[14,2278,2279],{},"lh_frozen",":"," o login no Little Hotelier está em pausa após uma tentativa falhada (muitas vezes uma palavra-passe / senha expirada). Guarde a nova palavra-passe em ",[53,2283,55],{}," ou clique em ",[53,2286,2287],{},"Check now & resume",[49,2289,2290,2293,2294,21],{},[53,2291,2292],{},"429:"," demasiados pedidos; espere o tempo indicado em ",[14,2295,2296],{},"Retry-After",[49,2298,2299,2302,2303,2306],{},[53,2300,2301],{},"A quebra de linha com barra invertida falha no Windows:"," o PowerShell não usa ",[14,2304,2305],{},"\\"," para continuar linhas. Cole os comandos numa só linha, como mostrado acima.",[2308,2309],"demo-cta",{"path":670},[26,2311,2313],{"id":2312},"próximos-passos","Próximos passos",[236,2315,2316,2329,2336],{},[49,2317,2318,2319,2323,2324,2328],{},"Não é programador? ",[34,2320,2322],{"href":2321},"/blog/connect-claude-to-little-hotelier","Conecte o Claude"," ou o ",[34,2325,2327],{"href":2326},"/blog/connect-chatgpt-to-little-hotelier","ChatGPT"," no navegador.",[49,2330,2331,2332,21],{},"Novo nesta ideia? Leia ",[34,2333,2335],{"href":2334},"/blog/what-is-mcp-server-hotels","o que é um servidor MCP",[49,2337,2338,2339,21],{},"Quer folhas de cálculo sem código? Veja ",[34,2340,2342],{"href":2341},"/blog/export-little-hotelier-reservations-excel","exportar reservas para o Excel",[2344,2345,2346],"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":2348},[2349,2350,2356,2361,2362,2363,2364],{"id":28,"depth":289,"text":29},{"id":162,"depth":289,"text":163,"children":2351},[2352,2353,2354,2355],{"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":973,"depth":289,"text":974,"children":2357},[2358,2359,2360],{"id":990,"depth":298,"text":991},{"id":1565,"depth":298,"text":1566},{"id":2081,"depth":298,"text":2082},{"id":2093,"depth":289,"text":2094},{"id":2174,"depth":289,"text":2175},{"id":2229,"depth":289,"text":2230},{"id":2312,"depth":289,"text":2313},"Servidor MCP do Hotelier Tools no Claude Code, Cursor, VS Code, Windsurf ou Gemini CLI: crie relatórios de ocupação, um Sheets sincronizado ou um painel.","md",{"seoTitle":2368,"date":2369,"category":2370,"tags":2371,"keywords":2376,"feature":2384,"demoPath":670,"cover":2385,"coverAlt":2386,"faq":2387},"MCP do Little Hotelier no Claude Code, Cursor e VS Code","2026-10-03","ai",[2372,2373,387,2374,2375],"mcp","claude code","vs code","api",[2377,2378,2379,2380,2381,2382,2383],"claude code mcp","configurar mcp claude code","conectar claude no vscode","cursor mcp.json","vscode mcp.json","claude code gratuito","little hotelier mcp","api-mcp","/images/blog/demo/en/mcp-setup.webp","Guia MCP setup no Hotelier Tools: uma explicação What is MCP? e os separadores / abas Client configuration para Claude Desktop, VS Code, Cursor e Custom / SDK, com o Claude Desktop selecionado e o trecho de claude_desktop_config.json",[2388,2391,2394,2397,2400],{"q":2389,"a":2390},"Qual é o comando claude mcp add para o Little Hotelier?","Execute: claude mcp add --transport http hotelier-tools https://dashboard.hotelier.tools/api/mcp --header \"Authorization: Bearer htk_YOUR_API_KEY\". Substitua a chave por uma de Developer, API Keys no Hotelier Tools e depois confirme com /mcp dentro do Claude Code.",{"q":2392,"a":2393},"Onde fica o mcp.json no Cursor e no VS Code?","O Cursor lê ~/.cursor/mcp.json para todos os projetos e .cursor/mcp.json dentro de um projeto. O VS Code lê .vscode/mcp.json no espaço de trabalho e um ficheiro / arquivo ao nível do utilizador / usuário, que você abre com o comando MCP: Open User Configuration. O VS Code usa a chave servers, não mcpServers.",{"q":2395,"a":2396},"Preciso de ser programador para usar o Claude Code com os dados do meu hotel?","Não. Você instala o Claude Code, cola um comando e depois pergunta com palavras simples. Ajuda saber onde ficam os seus ficheiros e como executar um script, mas o Claude Code pode explicar cada passo à medida que trabalha.",{"q":2398,"a":2399},"Posso fazer login em vez de usar uma chave de API?","Sim, nos clientes que suportam OAuth. Adicione o URL do servidor sem cabeçalho e faça login quando o cliente pedir: no Claude Code, execute /mcp e escolha autenticar. O login dura 30 dias. As chaves são melhores para scripts que funcionam sem supervisão.",{"q":2401,"a":2402},"Esta é uma API oficial do Little Hotelier ou da SiteMinder?","Não. O Hotelier Tools é independente: não é afiliado à SiteMinder nem ao Little Hotelier, nem tem o aval deles. Conecta-se com o login do Little Hotelier do seu próprio hotel e oferece a sua própria API REST e o seu próprio servidor MCP.","/blog/pt/little-hotelier-mcp-claude-code-cursor-vscode",{"title":5,"description":2365},"blog/pt/little-hotelier-mcp-claude-code-cursor-vscode","1Ot2-e1ix9yABMQt2UgxS_CPtmGWnwm-dm5RW8tZPP4",[2408,2409,2410,2411,2412,2413,2414,2415,866],"de","en-gb","en","es","fr","id","it","pt",[2417,2440,2459,2463,2482,2496,2516,2535,2552,2573,2592,2609,2628,2646,2662,2682,2700,2720,2739,2751,2771,2790,2807,2824,2841],{"path":2418,"title":2419,"description":2420,"meta":2421},"/blog/pt/booking-com-invalid-card-no-show","Cartão inválido no Booking.com e no-show: o que fazer, passo a passo","Marque o cartão como inválido, dê 24 horas ao hóspede e cancele sem comissão. Mais prazos de no-show, cartões virtuais recusados e como agir a tempo.",{"date":2369,"category":2422,"tags":2423,"keywords":2429,"feature":2437,"cover":2438,"coverAlt":2439},"operations",[2424,2425,2426,2427,2428],"booking.com","no-show","payments","little hotelier","automated checks",[2430,2431,2432,2433,2434,2435,2436],"cartão inválido booking","cartao invalido booking","no show hotel como funciona","no show booking taxa","cartão virtual booking recusado","marcar cartão inválido booking","no show hotel lei","automated-checks","/images/blog/demo/en/automated-checks-issues.webp","Página Issues do Hotelier Tools com 20 problemas abertos, 5 resolvidos e 25 no total, e reservas listadas com um aviso de saldo pendente à chegada e um botão Verify",{"path":2441,"title":2442,"description":2443,"meta":2444},"/blog/pt/hotel-front-desk-checklist-automation","Checklist diária da receção / recepção do hotel no Little Hotelier: 8 problemas a identificar antes da chegada","Checklist diária da receção para o Little Hotelier: 8 problemas de reserva a identificar antes da chegada, onde ver cada um e como automatizar cinco deles.",{"date":2369,"category":2422,"tags":2445,"keywords":2450,"feature":2437,"cover":2457,"coverAlt":2458},[2446,2447,2448,2449,2427],"front desk","checklist","check-in","automation",[2451,2452,2453,2454,2455,2456],"checklist recepção hotel","checklist receção hotel","automação hoteleira","checklist check-in hotel","reservas sem quarto little hotelier","checklist diária recepção hotel","/images/blog/demo/en/automated-checks-lifecycle.webp","Página Automated Checks do Hotelier Tools: como funcionam as verificações em quatro passos, um aviso Nothing runs any check yet que sugere Before they arrive, e A jornada de uma reserva pelas suas cinco fases",{"path":2403,"title":5,"description":2365,"meta":2460},{"date":2369,"category":2370,"tags":2461,"keywords":2462,"feature":2384,"cover":2385,"coverAlt":2386},[2372,2373,387,2374,2375],[2377,2378,2379,2380,2381,2382,2383],{"path":2464,"title":2465,"description":2466,"meta":2467},"/blog/pt/booking-com-commission","Comissão do Booking.com: quanto cobra e como ver o líquido real no Little Hotelier","Não há uma taxa única: você paga a % do seu contrato, mais programas e taxas de pagamento. Sobre o que incide, IVA e o líquido real de cada reserva.",{"date":2369,"category":2468,"tags":2469,"keywords":2473,"cover":2480,"coverAlt":2481},"tips",[2424,2470,2427,2471,2472],"commission","userscript","vat",[2474,2475,2476,2477,2478,2479],"comissão booking","valor comissão booking","comissão booking portugal","comissão booking brasil","aumento comissão booking","calculadora comissão booking","/images/scripts/show-booking-commissions/to.png","Resumo de reserva do Little Hotelier (interface em espanhol) com a comissão do Booking.com, a taxa de pagamento e o líquido aproximado, acrescentados por um script gratuito",{"path":2483,"title":2484,"description":2485,"meta":2486},"/blog/pt/connect-claude-to-little-hotelier","Como conectar o Claude ao Little Hotelier (MCP, passo a passo)","Conecte o Claude ao Little Hotelier com um conector personalizado: cole um URL, inicie sessão e permita o acesso. Prompts, segurança e problemas comuns.",{"date":2369,"category":2370,"tags":2487,"keywords":2489,"feature":2384,"cover":2385,"coverAlt":2495,"featured":1043},[192,2372,2370,2488,2427],"connectors",[2490,2383,2491,2492,2493,2494],"conectar claude ao little hotelier","servidor mcp claude","conector personalizado claude","claude desktop mcp","little hotelier ia","Guia de configuração MCP do Hotelier Tools com a explicação What is MCP? e o Claude Desktop selecionado, que mostra os passos e o trecho de configuração com o URL do servidor MCP",{"path":2497,"title":2498,"description":2499,"meta":2500},"/blog/pt/download-all-little-hotelier-invoices","Como descarregar / baixar todas as faturas do Little Hotelier de uma vez (para a declaração trimestral)","O Little Hotelier junta num ZIP as faturas que já existem. Veja como, como criar as que faltam e como enviar ao contabilista um ZIP e um CSV por trimestre.",{"date":2369,"category":2501,"tags":2502,"keywords":2507,"feature":2501,"cover":2514,"coverAlt":2515,"featured":1043},"invoicing",[2503,2504,2427,2505,2506],"invoices","accounting","quarterly tax","zip",[2508,2509,2510,2511,2512,2513],"baixar faturas little hotelier","descarregar faturas little hotelier","fatura little hotelier","nota fiscal little hotelier","exportar faturas little hotelier","little hotelier xero","/images/blog/demo/en/invoices-by-quarter.webp","Página Invoices do Hotelier Tools com 66 faturas no total, Q4 e Q3 de 2026, cada um com os botões Preview CSV e ZIP, e setembro de 2026 aberto numa tabela com números de fatura, hóspedes, números fiscais, datas de check-out e totais",{"path":2517,"title":2518,"description":2519,"meta":2520},"/blog/pt/export-little-hotelier-reservations-excel","Como exportar reservas do Little Hotelier para Excel (e a lista de hóspedes, antes de os dados serem ocultados)","O Little Hotelier oculta os dados do hóspede 180 dias após o check-out. Exporte reservas e hóspedes para Excel ou Google Sheets, à mão ou automaticamente.",{"date":2369,"category":2375,"tags":2521,"keywords":2526,"feature":2384,"cover":2533,"coverAlt":2534},[2522,2523,2524,2525,2427],"export","excel","google sheets","reports",[2527,2528,2529,2530,2531,2532],"exportar reservas do little hotelier para excel","relatórios little hotelier","little hotelier csv","lista de hóspedes excel","planilha de reservas hotel","dados de hóspedes ocultados little hotelier","/images/blog/demo/en/developer-portal.webp","Portal Developer do Hotelier Tools com cartões para REST API e Swagger, MCP setup, API keys e LH methods, acima de um exemplo de autenticação com uma chave de API",{"path":2536,"title":2537,"description":2538,"meta":2539},"/blog/pt/connect-chatgpt-to-little-hotelier","Conectar o ChatGPT ao Little Hotelier: passo a passo e 18 prompts para hotéis","Conecte o ChatGPT ao Little Hotelier com developer mode e uma app MCP, veja o que o seu plano permite e copie 18 prompts de chegadas, pagamentos e preços.",{"date":2369,"category":2370,"tags":2540,"keywords":2543,"feature":2384,"cover":2550,"coverAlt":2551},[2541,2372,2370,2542,2427],"chatgpt","prompts",[2544,2545,2546,2547,2548,2549],"conectar chatgpt ao little hotelier","conector mcp chatgpt","chatgpt para hotéis","prompts chatgpt hotel","inteligência artificial hotelaria","chatgpt developer mode mcp","/images/blog/demo/en/mcp-oauth-consent.webp","Página Authorize MCP access do Hotelier Tools que um assistente de IA abre ao conectar-se, com um aviso de token de 30 dias e os botões Deny e Allow access",{"path":2553,"title":2554,"description":2555,"meta":2556},"/blog/pt/little-hotelier-cta-ctd-stop-sell","CTA, CTD, estadia mínima e stop sell na hotelaria: o que significam no Little Hotelier","CTA bloqueia check-ins, CTD check-outs, estadia mínima fixa o mínimo de noites e stop sell fecha vendas. O que são e como definir no Little Hotelier.",{"date":2369,"category":2557,"tags":2558,"keywords":2563,"feature":2570,"cover":2571,"coverAlt":2572},"pricing",[2559,2560,2561,2562,2427],"restrictions","cta","ctd","stop sell",[2564,2565,2566,2567,2568,2569],"cta ctd hotelaria o que é","o que é cta no little hotelier","closed to arrival significado","stop sell significado","siteminder stop sell","estadia mínima hotel","dynamic-pricing","/images/blog/demo/en/price-recommendations.webp","Recomendações de preço no Hotelier Tools para o quarto Doble Estándar, de 3 a 16 de outubro de 2026: preço atual e recomendado por noite, uma coluna CTA / CTD com interruptores A e D, a estadia mínima, uma coluna Channel e um botão Apply to Little Hotelier",{"path":2574,"title":2575,"description":2576,"meta":2577},"/blog/pt/little-hotelier-chrome-extensions","Extensão Chrome para o Little Hotelier: scripts gratuitos que o tornam mais rápido","Userscripts gratuitos para o Little Hotelier: preços no calendário, tabelas mais largas, comissão do Booking.com e fatura com um clique. Instalação segura.",{"date":2369,"category":2468,"tags":2578,"keywords":2583,"cover":2590,"coverAlt":2591},[2579,2580,2581,2427,2582],"chrome extension","tampermonkey","userscripts","productivity",[2584,2585,2586,2587,2588,2589],"extensão chrome little hotelier","little hotelier chrome extension","tampermonkey scripts","userscript chrome","preços no calendário little hotelier","comissão booking.com little hotelier","/images/scripts/prices-display/to.png","Calendário do Little Hotelier (interface em espanhol) com o preço de cada noite sob cada tipo de quarto, acrescentado pelo script Prices Display",{"path":2593,"title":2594,"description":2595,"meta":2596},"/blog/pt/send-invoice-to-guest-at-checkout","Hóspede do Booking.com pediu fatura? Como enviá-la automaticamente no check-out pelo Little Hotelier","O Booking.com não emite fatura aos seus hóspedes, é você. Envie a fatura / nota fiscal do Little Hotelier à mão ou por e-mail automático no check-out.",{"date":2369,"category":2501,"tags":2597,"keywords":2599,"feature":2501,"cover":2607,"coverAlt":2608},[2503,2598,2424,2427,2449],"checkout",[2600,2601,2602,2603,2604,2605,2606],"fatura booking com nif","pedir fatura booking","emitir fatura booking","como obter nota fiscal booking","nota fiscal hospedagem booking","fatura alojamento booking","little hotelier fatura","/images/blog/demo/en/invoice-at-checkout.webp","Página Invoice on leave no Hotelier Tools: a tarefa Automatic invoicing at check-out executada todos os dias às 12:00, um intervalo de datas com Search reservations e a tabela de reservas com um botão Auto-invoice em cada estadia",{"path":2610,"title":2611,"description":2612,"meta":2613},"/blog/pt/ine-hotel-occupancy-survey","Inquérito de ocupação hoteleira do INE em Espanha: como preencher com o Little Hotelier","Inquérito do INE: obrigatório se o seu hotel for selecionado, com multas até 30.050 €. O que pede, o IRIA e como preenchê-lo com o Little Hotelier.",{"date":2369,"category":2614,"tags":2615,"keywords":2618,"feature":2625,"cover":2626,"coverAlt":2627},"compliance",[2616,2617,2614,2525,2427],"ine","spain",[2619,2620,2621,2622,2623,2624],"inquérito ocupação hoteleira ine espanha","encuesta ocupación hotelera ine","encuesta ine hoteles","iria ine encuesta","encuesta ine obligatoria multa","ine hotel little hotelier","ine-reports","/images/blog/demo/en/ine-guest-origins-report.webp","Guest Origin Statistics (INE HOT survey) no Hotelier Tools, de 27 de setembro a 3 de outubro de 2026: 8 chegadas, 24 dormidas, 3,4 hóspedes por dia e 3 com dados em falta, acima dos separadores Daily summary, By guest origin, Rooms, ADR by client e Data quality",{"path":2629,"title":2630,"description":2631,"meta":2632},"/blog/pt/little-hotelier-integrations","Integrações do Little Hotelier em 2026: contabilidade, check-in, preços, mensagens e IA","O que se conecta ao Little Hotelier em 2026: exportação para Xero e QuickBooks, check-in com Chekin e Duve, preços, mensagens, IA e extras gratuitos.",{"date":2369,"category":2375,"tags":2633,"keywords":2638,"feature":2384,"cover":2533,"coverAlt":2645},[2634,2635,2636,2637,2427],"integrations","app store","xero","chekin",[2639,2640,2513,2641,2642,2643,2644],"integrações little hotelier","little hotelier integrações","little hotelier app store","little hotelier chekin","little hotelier zapier","widget de reservas little hotelier","Portal de programadores no Hotelier Tools com cartões para REST API & Swagger, MCP setup, API keys e LH methods, e uma caixa Authentication com um exemplo de cURL com uma chave de API de exemplo",{"path":2647,"title":2648,"description":2649,"meta":2650},"/blog/pt/ai-assistant-hotel-front-desk","Inteligência artificial para hotel: o que um assistente de IA pode fazer na receção (com aprovação)","Um assistente de IA consulta reservas, redige respostas e prepara alterações num hotel pequeno. O que faz com segurança e como você aprova cada alteração.",{"date":2369,"category":2370,"tags":2651,"keywords":2654,"feature":2659,"cover":2660,"coverAlt":2661},[2370,2652,2446,2653,2427],"ai assistant","approvals",[2655,2548,2656,2657,2658,2453],"inteligência artificial para hotel","assistente de ia para hotel","recepcionista virtual hotel","ia para pousadas","ai-assistant","/images/blog/demo/en/ai-chat-start.webp","Página inicial do assistente de IA do Hotelier Tools, que avisa que tudo o que altera dados pede confirmação antes, com perguntas sugeridas e o histórico de conversas à esquerda",{"path":2663,"title":2664,"description":2665,"meta":2666},"/blog/pt/hotel-waitlist-sold-out-dates","Lista de espera de hotel para datas esgotadas: como gerir e preencher cancelamentos depressa","Lista de espera de hotel: anote quem quer datas esgotadas e ofereça-lhe primeiro os quartos que vagam. Planilha, aviso automático e formulário.",{"date":2369,"category":2667,"tags":2668,"keywords":2673,"feature":2669,"cover":2680,"coverAlt":2681},"guests",[2669,2670,2671,2427,2672],"waitlist","cancellations","direct booking","availability",[2674,2675,2676,2677,2678,2679],"lista de espera hotel","lista de espera hotel esgotado","fila de espera hotel cancelamento","preencher cancelamentos hotel","formulário lista de espera hotel","waitlist hotel significado","/images/blog/demo/en/availability-waiting-list.webp","Página Availability queue do Hotelier Tools com History e Check the queue now, o cartão Checks on the queue a oferecer Check every night at 01:00 e o formulário Add a stay to watch com noites, quartos necessários, tipos de quarto e dados do hóspede",{"path":2683,"title":2684,"description":2685,"meta":2686},"/blog/pt/hotel-do-not-rent-list","Lista negra de hóspedes: como manter legalmente uma lista de “não alugar” no Little Hotelier","Lista negra de hóspedes: um hotel pode tê-la à luz do RGPD se ficar pelos factos. O que anotar, o que nunca escrever e como ter alertas no Little Hotelier.",{"date":2369,"category":2422,"tags":2687,"keywords":2691,"feature":2437,"cover":2698,"coverAlt":2699},[2688,2689,2667,2690,2427],"do not rent list","gdpr","watchlist",[2692,2693,2694,2695,2696,2697],"lista negra de hóspedes","lista negra hotel","lista negra hóspedes rgpd","bloquear hóspede booking.com","hóspedes problemáticos hotel","notas de hóspedes little hotelier","/images/blog/demo/en/automated-checks-do-not-rebook-list.webp","Lista Do-not-rebook no Hotelier Tools: o cartão da verificação noturna, uma verificação de reserva com uma correspondência forte e o motivo factual, e uma entrada com Edit, Deactivate e Delete",{"path":2701,"title":2702,"description":2703,"meta":2704},"/blog/pt/little-hotelier-alternatives","Little Hotelier opiniões e alternativas em 2026: comparação honesta com Cloudbeds, Mews, Beds24, Lodgify, Smoobu e Hostaway","Cloudbeds, Mews, Beds24, Lodgify, Smoobu ou Hostaway? Para quem serve cada um, como cobra, acesso à API e quando compensa ficar no Little Hotelier.",{"date":2369,"category":2468,"tags":2705,"keywords":2710,"cover":2718,"coverAlt":2719},[2706,2707,2708,2427,2709],"pms","comparison","alternatives","cloudbeds",[2711,2712,2713,2714,2715,2716,2717],"little hotelier opiniões","little hotelier alternativas","little hotelier vs cloudbeds","little hotelier preço","little hotelier é da siteminder","melhor sistema para pousada","sistema para alojamento local","/images/blog/demo/en/dashboard-overview.webp","Página inicial do dashboard do Hotelier Tools para a propriedade de demonstração Hotel Demo Sol: um cartão Open AI chat, um aviso de que dois canais de mensagens com hóspedes precisam de atenção e blocos de estado do Little Hotelier, do Booking.com, do conhecimento da IA e da cidade usada nos preços",{"path":2721,"title":2722,"description":2723,"meta":2724},"/blog/pt/little-hotelier-tips","Little Hotelier: como funciona e 20 truques e funções escondidas que a maioria não conhece (2026)","20 truques do Little Hotelier: calendário mais rápido, passkeys, tarifa mínima, noites soltas, links de reserva, auditoria e scripts gratuitos.",{"date":2369,"category":2468,"tags":2725,"keywords":2728,"feature":2736,"cover":2737,"coverAlt":2738},[2468,2726,2727,2581,2427],"how to","calendar",[2729,2730,2731,2732,2733,2734,2735],"little hotelier como funciona","little hotelier tutorial","little hotelier como usar","little hotelier manual","little hotelier dicas","little hotelier funções escondidas","little hotelier calendário","dashboard","/images/scripts/full-width-reservation-table/to.png","Página Reservations do Little Hotelier (interface em espanhol) esticada a toda a largura da janela pelo script Full Width Reservation Table: filtros de pesquisa, o botão Buscar, 36 reservas encontradas e o link Exportar",{"path":2740,"title":2741,"description":2742,"meta":2743},"/blog/pt/what-is-mcp-server-hotels","MCP: o que é e como usar no seu hotel (guia para donos de hotéis e pousadas)","Um servidor MCP deixa o Claude ou o ChatGPT ler e agir no software do seu hotel. Guia simples, dicas de segurança e que PMS têm um, em outubro de 2026.",{"date":2369,"category":2370,"tags":2744,"keywords":2745,"feature":2384,"cover":2385,"coverAlt":2750,"featured":1043},[2372,2370,192,2541,2706],[2746,2747,2491,2748,2749,2383,2548],"mcp o que é e como usar","o que é servidor mcp","mcp o que é claude","mcp para hotéis","Guia MCP setup no Hotelier Tools com uma explicação What is MCP? e os separadores / abas Client configuration para Claude Desktop, VS Code, Cursor e Custom / SDK, que mostram a configuração do Claude Desktop com o endereço do servidor",{"path":2752,"title":2753,"description":2754,"meta":2755},"/blog/pt/booking-com-guest-messages","Mensagens automáticas do Booking.com: como gerir as mensagens dos hóspedes sem viver na extranet","Pulse, modelos, mensagens agendadas e respostas automáticas, como identificar mensagens falsas do Booking.com e uma caixa de entrada com WhatsApp e e-mail.",{"date":2369,"category":2667,"tags":2756,"keywords":2760,"feature":2768,"cover":2769,"coverAlt":2770},[2424,2757,2758,2759,2427],"guest messages","inbox","templates",[2761,2762,2763,2764,2765,2766,2767],"mensagens automáticas booking","onde ver mensagens booking","mensagens pré reserva booking","mensagens fraudulentas booking","modelos de mensagens booking","mensagens booking não funcionam","perguntas e respostas hóspedes booking","guest-inbox","/images/blog/demo/en/guest-inbox-ai-draft-availability.webp","Caixa de entrada de hóspedes do Hotelier Tools com filtros WhatsApp, Email e Booking.com, um e-mail de um hóspede a perguntar por um quarto duplo em setembro, o plano da IA em rascunho com uma resposta editável em inglês e o painel do assistente privado",{"path":2772,"title":2773,"description":2774,"meta":2775},"/blog/pt/little-hotelier-api","O Little Hotelier tem API? A resposta de 2026 e como tirar os seus dados","API do Little Hotelier: não há chave para as suas reservas ou hóspedes. O que a SiteMinder oferece e como ler os seus dados por REST em minutos.",{"date":2369,"category":2375,"tags":2776,"keywords":2780,"feature":2384,"cover":2788,"coverAlt":2789,"featured":1043},[2375,2777,2427,2778,2779],"rest","siteminder","developers",[2781,2782,2783,2784,2785,2786,2787],"little hotelier api","little hotelier api documentação","little hotelier api key","siteminder api","siteminder exchange api","little hotelier rest api","little hotelier integração","/images/blog/demo/en/rest-api-reference.webp","Página REST API reference no Hotelier Tools com o URL base, um download de openapi.json, a caixa Quick authorize (campo de Bearer token, Authorize Swagger, Use my session) e modelos de código em cURL, JavaScript, Python e PowerShell",{"path":2791,"title":2792,"description":2793,"meta":2794},"/blog/pt/ses-hospedajes-little-hotelier","SES Hospedajes com o Little Hotelier: como registar hóspedes em Espanha (partes de viajeros) sem trabalho duplicado","SES.Hospedajes, o registo de hóspedes de Espanha, explicado: quem, que dados, prazos de 24 horas, como enviar e como o Little Hotelier envia por você.",{"date":2369,"category":2614,"tags":2795,"keywords":2798,"cover":2805,"coverAlt":2806},[2796,2617,2614,2797,2427],"ses hospedajes","guest registration",[2796,2799,2800,2801,2802,2803,2804],"ses hospedajes português","ses hospedajes little hotelier","parte de viajeros","como registrar viajeros ses hospedajes","ses hospedajes dados obrigatórios","registo de hóspedes espanha","/images/blog/demo/en/automated-checks-moment-on-arrival.webp","Configurações When they arrive no Hotelier Tools com as verificações ID / passport (police register), Physical room assignment e Address and origin validation ativadas, cada uma com o que pode e não pode fazer",{"path":2808,"title":2809,"description":2810,"meta":2811},"/blog/pt/guest-registration-rules-by-country","SIBA e FNRH digital: registo de hóspedes por país (2026) em Portugal, Brasil, Espanha, Itália, Alemanha, França, Tailândia e Indonésia","Que hóspedes registar, que dados, prazos e onde: Portugal (SIBA), Brasil (FNRH digital), Espanha, Itália, Alemanha, França, Tailândia e Indonésia.",{"date":2369,"category":2614,"tags":2812,"keywords":2814,"cover":2805,"coverAlt":2823},[2797,2614,2413,2813,2427],"police",[2815,2816,2817,2818,2819,2820,2821,2822],"siba alojamento local","aima boletim de alojamento","boletim sef alojamento local","fnrh digital","fnrh digital é obrigatório","fnrh digital como funciona","registo de hóspedes hotel","registro de hóspedes hotel","Verificações When they arrive no Hotelier Tools: ID / passaporte (registo policial), atribuição física de quarto e validação de endereço e origem ligadas, com o que cada verificação pode e não pode fazer",{"path":2825,"title":2826,"description":2827,"meta":2828},"/blog/pt/dynamic-pricing-little-hotelier","Tarifa dinâmica para hotéis pequenos no Little Hotelier: preços da concorrência, eventos e regras","Tarifa dinâmica no Little Hotelier: uma rotina semanal simples, as opções nativas e recomendações com o motivo, aplicadas só quando você confirma.",{"date":2369,"category":2557,"tags":2829,"keywords":2833,"feature":2570,"cover":2571,"coverAlt":2840},[2830,2831,2832,2427,2557],"dynamic pricing","revenue management","competitor prices",[2834,2835,2836,2837,2838,2839],"tarifa dinâmica hotel","preços dinâmicos hotel","little hotelier dynamic pricing","revenue management hotelaria","ferramenta de preços para hotel","como definir preços de quartos","Página Price recommendations do Hotelier Tools para 14 noites: a tabela do Doble Estándar com a tarifa atual, a tarifa recomendada, a variação, a mediana do mercado e o que o hóspede paga por noite, e uma barra Apply to Little Hotelier sem preços selecionados",{"path":2842,"title":2843,"description":2844,"meta":2845},"/blog/pt/whatsapp-little-hotelier","WhatsApp Business para pousada e hotel: como usar com o Little Hotelier (Messaging hub e outras opções)","O Messaging hub do Little Hotelier usa a API oficial do WhatsApp Business. Compare com a app gratuita e uma caixa de entrada única, com modelos.",{"date":2369,"category":2667,"tags":2846,"keywords":2850,"feature":2768,"cover":2857,"coverAlt":2858},[2847,2848,2427,2849,2758],"whatsapp","messaging","guest engagement",[2851,2852,2853,2854,2855,2856],"little hotelier whatsapp","whatsapp business para pousada","whatsapp para hotéis","whatsapp business api hotel","modelos whatsapp check-in","little hotelier messaging hub","/images/blog/demo/en/guest-inbox-ai-plan-late-arrival.webp","Caixa de entrada de hóspedes do Hotelier Tools com uma conversa de WhatsApp de Ingrid Kowalski sobre uma chegada tardia (identidade verificada, reserva associada), um plano de IA em rascunho com uma resposta editável e o painel privado Assistant",1791141238324]