hostinger-api-mcp 0.0.11 → 0.0.12

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/README.md CHANGED
@@ -73,6 +73,16 @@ The following environment variables can be configured when running the server:
73
73
  }
74
74
  ```
75
75
 
76
+ ### Using SSE Transport
77
+
78
+ To use the MCP server with SSE transport, you must run the server with the `--sse` option.
79
+ This will enable the server to communicate with clients using Server-Sent Events on localhost port 8100.
80
+ Additionally, you can specify the `--host` and `--port` options to set the host and port for the server to listen on.
81
+
82
+ ```bash
83
+ node server.js --see --host 127.0.0.1 --port 8100
84
+ ```
85
+
76
86
  ### Using as an MCP Tool Provider
77
87
 
78
88
  This server implements the Model Context Protocol (MCP) and can be used with any MCP-compatible consumer, like Claude.js client or other MCP consumers.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "description": "MCP server for Hostinger API",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,6 +26,8 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@modelcontextprotocol/sdk": "^1.0.0",
29
+ "minimist": "^1.2.8",
30
+ "express": "^5.1.0",
29
31
  "axios": "^1.8.0",
30
32
  "dotenv": "^16.0.0"
31
33
  },
package/server.js CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
6
+ import minimist from 'minimist';
7
+ import express from "express";
5
8
  import axios from "axios";
6
9
  import { config as dotenvConfig } from "dotenv";
7
10
  import {
@@ -1864,7 +1867,7 @@ const SECURITY_SCHEMES = {
1864
1867
 
1865
1868
  /**
1866
1869
  * MCP Server for Hostinger API
1867
- * Generated from OpenAPI spec version 0.0.25
1870
+ * Generated from OpenAPI spec version 0.0.27
1868
1871
  */
1869
1872
  class MCPServer {
1870
1873
  constructor() {
@@ -1882,7 +1885,7 @@ class MCPServer {
1882
1885
  this.server = new Server(
1883
1886
  {
1884
1887
  name: "hostinger-api-mcp",
1885
- version: "0.0.11",
1888
+ version: "0.0.12",
1886
1889
  },
1887
1890
  {
1888
1891
  capabilities: {
@@ -1907,7 +1910,7 @@ class MCPServer {
1907
1910
  });
1908
1911
  }
1909
1912
 
1910
- headers['User-Agent'] = 'hostinger-mcp-server/0.0.11';
1913
+ headers['User-Agent'] = 'hostinger-mcp-server/0.0.12';
1911
1914
 
1912
1915
  return headers;
1913
1916
  }
@@ -2158,10 +2161,52 @@ class MCPServer {
2158
2161
  }
2159
2162
  }
2160
2163
 
2164
+ /**
2165
+ * Start the sse server
2166
+ */
2167
+ async startSse(host, port) {
2168
+ try {
2169
+ // Create sse transport
2170
+ const app = express();
2171
+ app.use(express.json());
2172
+
2173
+ let transport = null;
2174
+ const sessions = {};
2175
+
2176
+ app.get('/sse', (req, res) => {
2177
+ transport = new SSEServerTransport('/messages', res);
2178
+ sessions[transport.sessionId] = transport;
2179
+
2180
+ res.on('close', () => {
2181
+ delete sessions[transport.sessionId];
2182
+ });
2183
+
2184
+ this.server.connect(transport);
2185
+ });
2186
+
2187
+ app.post('/messages', (req, res) => {
2188
+ const sessionId = req.query.sessionId;
2189
+ const transport = sessions[sessionId];
2190
+ if (transport) {
2191
+ transport.handlePostMessage(req, res);
2192
+ } else {
2193
+ res.status(400).send('No transport found for sessionId');
2194
+ }
2195
+ });
2196
+
2197
+ app.listen(port, host);
2198
+ this.log('info', `MCP Server with SSE transport started successfully with ${this.tools.size} tools`);
2199
+ this.log('info', `Listening on ${host}:${port}`);
2200
+ } catch (error) {
2201
+ console.error("Failed to start MCP server:", error);
2202
+ process.exit(1);
2203
+ }
2204
+ }
2205
+
2161
2206
  /**
2162
2207
  * Start the server
2163
2208
  */
2164
- async start() {
2209
+ async startStdio() {
2165
2210
  try {
2166
2211
  // Create stdio transport
2167
2212
  const transport = new StdioServerTransport();
@@ -2172,7 +2217,7 @@ class MCPServer {
2172
2217
 
2173
2218
  // Now we can safely log via MCP
2174
2219
  console.error(`Registered ${this.tools.size} tools`);
2175
- this.log('info', `MCP Server started successfully with ${this.tools.size} tools`);
2220
+ this.log('info', `MCP Server with stdio transport started successfully with ${this.tools.size} tools`);
2176
2221
  } catch (error) {
2177
2222
  console.error("Failed to start MCP server:", error);
2178
2223
  process.exit(1);
@@ -2183,8 +2228,22 @@ class MCPServer {
2183
2228
  // Start the server
2184
2229
  async function main() {
2185
2230
  try {
2231
+ const argv = minimist(process.argv.slice(2), {
2232
+ string: ['host'],
2233
+ int: ['port'],
2234
+ boolean: ['sse'],
2235
+ default: {
2236
+ host: '127.0.0.1',
2237
+ port: 8100,
2238
+ }
2239
+ });
2240
+
2186
2241
  const server = new MCPServer();
2187
- await server.start();
2242
+ if (argv.sse) {
2243
+ await server.startSse(argv.host, argv.port);
2244
+ } else {
2245
+ await server.startStdio();
2246
+ }
2188
2247
  } catch (error) {
2189
2248
  console.error("Failed to start server:", error);
2190
2249
  process.exit(1);
package/server.ts CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
6
+ import express from "express";
7
+ import {Request, Response} from "express";
5
8
  import axios, { AxiosRequestConfig, AxiosError, AxiosResponse } from "axios";
6
9
  import { config as dotenvConfig } from "dotenv";
7
10
  import {
@@ -1880,7 +1883,7 @@ const SECURITY_SCHEMES: Record<string, SecurityScheme> = {
1880
1883
 
1881
1884
  /**
1882
1885
  * MCP Server for Hostinger API
1883
- * Generated from OpenAPI spec version 0.0.25
1886
+ * Generated from OpenAPI spec version 0.0.27
1884
1887
  */
1885
1888
  class MCPServer {
1886
1889
  private server: Server;
@@ -1902,7 +1905,7 @@ class MCPServer {
1902
1905
  this.server = new Server(
1903
1906
  {
1904
1907
  name: "hostinger-api-mcp",
1905
- version: "0.0.11",
1908
+ version: "0.0.12",
1906
1909
  },
1907
1910
  {
1908
1911
  capabilities: {
@@ -1927,7 +1930,7 @@ class MCPServer {
1927
1930
  });
1928
1931
  }
1929
1932
 
1930
- headers['User-Agent'] = 'hostinger-mcp-server/0.0.11';
1933
+ headers['User-Agent'] = 'hostinger-mcp-server/0.0.12';
1931
1934
 
1932
1935
  return headers;
1933
1936
  }
@@ -2182,11 +2185,53 @@ class MCPServer {
2182
2185
  }
2183
2186
  }
2184
2187
  }
2188
+
2189
+ /**
2190
+ * Start the sse server
2191
+ */
2192
+ async startSse(host: string, port: number): Promise<void> {
2193
+ try {
2194
+ // Create sse transport
2195
+ const app = express();
2196
+ app.use(express.json());
2197
+
2198
+ let transport: SSEServerTransport;
2199
+ const sessions = {} as Record<string, SSEServerTransport>;
2200
+
2201
+ app.get('/sse', (req: Request, res: Response) => {
2202
+ transport = new SSEServerTransport('/messages', res);
2203
+ sessions[transport.sessionId] = transport;
2204
+
2205
+ res.on('close', () => {
2206
+ delete sessions[transport.sessionId];
2207
+ });
2208
+
2209
+ this.server.connect(transport);
2210
+ });
2211
+
2212
+ app.post('/messages', (req: Request, res: Response) => {
2213
+ const sessionId = req.query.sessionId as string;
2214
+ const transport = sessions[sessionId];
2215
+ if (transport) {
2216
+ transport.handlePostMessage(req, res);
2217
+ } else {
2218
+ res.status(400).send('No transport found for sessionId');
2219
+ }
2220
+ });
2221
+
2222
+ app.listen(port, host);
2223
+ this.log('info', `MCP Server with SSE transport started successfully with ${this.tools.size} tools`);
2224
+ this.log('info', `Listening on ${host}:${port}`);
2225
+ } catch (error) {
2226
+ console.error("Failed to start MCP server:", error);
2227
+ process.exit(1);
2228
+ }
2229
+ }
2185
2230
 
2186
2231
  /**
2187
- * Start the server
2232
+ * Start the stdio server
2188
2233
  */
2189
- async start(): Promise<void> {
2234
+ async startStdio(): Promise<void> {
2190
2235
  try {
2191
2236
  // Create stdio transport
2192
2237
  const transport = new StdioServerTransport();
@@ -2197,7 +2242,7 @@ class MCPServer {
2197
2242
 
2198
2243
  // Now we can safely log via MCP
2199
2244
  console.error(`Registered ${this.tools.size} tools`);
2200
- this.log('info', `MCP Server started successfully with ${this.tools.size} tools`);
2245
+ this.log('info', `MCP Server with stdio transport started successfully with ${this.tools.size} tools`);
2201
2246
  } catch (error) {
2202
2247
  console.error("Failed to start MCP server:", error);
2203
2248
  process.exit(1);
@@ -2208,8 +2253,23 @@ class MCPServer {
2208
2253
  // Start the server
2209
2254
  async function main(): Promise<void> {
2210
2255
  try {
2256
+ const argv = minimist(process.argv.slice(2), {
2257
+ string: ['host'],
2258
+ int: ['port'],
2259
+ boolean: ['sse'],
2260
+ default: {
2261
+ host: '127.0.0.1',
2262
+ port: 8100,
2263
+ }
2264
+ });
2265
+
2211
2266
  const server = new MCPServer();
2212
- await server.start();
2267
+
2268
+ if (argv.sse) {
2269
+ await server.startSse(argv.host, argv.port);
2270
+ } else {
2271
+ await server.startStdio();
2272
+ }
2213
2273
  } catch (error) {
2214
2274
  console.error("Failed to start server:", error);
2215
2275
  process.exit(1);