hostinger-api-mcp 3.20.3 → 3.20.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ Generated at release time from the diff between the previous and current
4
4
  build. Tool changes are listed individually; everything else is summarised
5
5
  by area.
6
6
 
7
+ ## v3.20.4 — 2026-10-28
8
+
9
+ ### Also in this release
10
+
11
+ - OAuth sign-in flow: `src/core/oauth.js`, `src/core/oauth.ts`
12
+
7
13
  ## v3.20.3 — 2026-10-28
8
14
 
9
15
  ### Operations
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.20.3",
3
+ "version": "3.20.4",
4
4
  "description": "Hostinger API — manage domains, DNS, hosting, VPS, billing and more from Gemini CLI.",
5
5
  "mcpServers": {
6
6
  "hostinger": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.20.3",
3
+ "version": "3.20.4",
4
4
  "mcpName": "io.github.hostinger/hostinger-api-mcp",
5
5
  "description": "MCP server for Hostinger API",
6
6
  "repository": {
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/hostinger/api-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "3.20.3",
9
+ "version": "3.20.4",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "3.20.3",
14
+ "version": "3.20.4",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
package/src/core/oauth.js CHANGED
@@ -85,6 +85,20 @@ function parseIssuer(raw) {
85
85
  return u.origin;
86
86
  }
87
87
 
88
+ // No shell: the URL is a single argv entry, never parsed by sh or cmd.
89
+ // Windows resolves a bare program name from the working directory before PATH,
90
+ // so rundll32 is launched by absolute path to never pick up a planted copy.
91
+ export function browserCommand(platform, url, systemRoot = process.env.SystemRoot) {
92
+ if (platform === "darwin") return ["open", [url]];
93
+ if (platform === "win32") {
94
+ return [
95
+ path.win32.join(systemRoot || "C:\\Windows", "System32", "rundll32.exe"),
96
+ ["url.dll,FileProtocolHandler", url],
97
+ ];
98
+ }
99
+ return ["xdg-open", [url]];
100
+ }
101
+
88
102
  export class OAuthProvider {
89
103
  constructor(issuerBaseUrl) {
90
104
  this.issuer = parseIssuer(
@@ -415,13 +429,7 @@ export class OAuthProvider {
415
429
  process.stderr.write(
416
430
  "[OAuth] If the browser does not open, copy the URL above into one manually.\n\n",
417
431
  );
418
- // No shell: the URL is a single argv entry, never parsed by sh or cmd.
419
- const [cmd, args] =
420
- process.platform === "darwin"
421
- ? ["open", [url]]
422
- : process.platform === "win32"
423
- ? ["rundll32", ["url.dll,FileProtocolHandler", url]]
424
- : ["xdg-open", [url]];
432
+ const [cmd, args] = browserCommand(process.platform, url);
425
433
  execFile(cmd, args, (err) => {
426
434
  if (err) {
427
435
  process.stderr.write(
package/src/core/oauth.ts CHANGED
@@ -88,6 +88,20 @@ function parseIssuer(raw: string): string {
88
88
  return u.origin;
89
89
  }
90
90
 
91
+ // No shell: the URL is a single argv entry, never parsed by sh or cmd.
92
+ // Windows resolves a bare program name from the working directory before PATH,
93
+ // so rundll32 is launched by absolute path to never pick up a planted copy.
94
+ export function browserCommand(platform: string, url: string, systemRoot = process.env.SystemRoot): [string, string[]] {
95
+ if (platform === 'darwin') return ['open', [url]];
96
+ if (platform === 'win32') {
97
+ return [
98
+ path.win32.join(systemRoot || 'C:\\Windows', 'System32', 'rundll32.exe'),
99
+ ['url.dll,FileProtocolHandler', url],
100
+ ];
101
+ }
102
+ return ['xdg-open', [url]];
103
+ }
104
+
91
105
  export class OAuthProvider {
92
106
  private readonly issuer: string;
93
107
  private _loginInProgress: Promise<string> | null = null;
@@ -377,12 +391,7 @@ export class OAuthProvider {
377
391
  private _openBrowser(url: string): void {
378
392
  process.stderr.write(`\n[OAuth] Opening browser for sign-in:\n ${url}\n`);
379
393
  process.stderr.write('[OAuth] If the browser does not open, copy the URL above into one manually.\n\n');
380
- // No shell: the URL is a single argv entry, never parsed by sh or cmd.
381
- const [cmd, args]: [string, string[]] = process.platform === 'darwin'
382
- ? ['open', [url]]
383
- : process.platform === 'win32'
384
- ? ['rundll32', ['url.dll,FileProtocolHandler', url]]
385
- : ['xdg-open', [url]];
394
+ const [cmd, args] = browserCommand(process.platform, url);
386
395
  execFile(cmd, args, (err) => {
387
396
  if (err) {
388
397
  process.stderr.write(`[OAuth] Could not auto-launch browser: ${err.message}\n`);
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.agency-hosting.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.20.3', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.20.4', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.agency-hosting.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.20.3', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.20.4', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.20.4', tools });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '3.20.3', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.20.4', tools, instructions, skills });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '3.20.3', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.20.4', tools, instructions, skills });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.20.4', tools });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '3.20.3', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.20.4', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '3.20.3', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.20.4', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.20.4', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '3.20.3', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.20.4', tools });