hpmcp 0.0.4 → 0.0.5

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/dist/index.js CHANGED
@@ -1,11 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ import { createInterface } from "node:readline";
4
3
  import { homedir } from "node:os";
5
4
  import { join } from "node:path";
6
5
  import { DiskCache } from "./cache.js";
7
- import { connect } from "./remote.js";
8
- import { registerHandlers } from "./mcp.js";
6
+ import { McpClient } from "./remote.js";
9
7
  const UPSTREAM = {
10
8
  react: "https://hp-mcp-proxy.932324.xyz/mcp",
11
9
  native: "https://hp-native-mcp-proxy.932324.xyz/mcp",
@@ -21,19 +19,110 @@ if (!token) {
21
19
  }
22
20
  const cacheDir = process.env.CACHE_DIR ?? join(homedir(), ".hpmcp", "cache", channel);
23
21
  const cacheTtl = parseInt(process.env.CACHE_TTL ?? "1800", 10);
22
+ function respond(id, result) {
23
+ process.stdout.write(JSON.stringify({ jsonrpc: "2.0", id, result }) + "\n");
24
+ }
25
+ function error(id, code, message) {
26
+ process.stdout.write(JSON.stringify({ jsonrpc: "2.0", id, error: { code, message } }) + "\n");
27
+ }
28
+ function withTimeout(promise, ms = 10000) {
29
+ return Promise.race([
30
+ promise,
31
+ new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), ms)),
32
+ ]);
33
+ }
24
34
  async function main() {
25
35
  const cache = new DiskCache(cacheDir, cacheTtl);
26
36
  await cache.init();
27
- const server = new Server({ name: `hpmcp-${channel}`, version: "0.0.1" }, { capabilities: { tools: {} } });
28
- registerHandlers(server, cache);
29
- connect(UPSTREAM[channel], token)
30
- .then(() => process.stderr.write(`[hpmcp] upstream connected\n`))
37
+ const client = new McpClient(UPSTREAM[channel], token);
38
+ client.connect()
39
+ .then(() => process.stderr.write(`[hpmcp] connected to ${UPSTREAM[channel]}\n`))
31
40
  .catch((e) => {
32
41
  process.stderr.write(`[hpmcp] upstream failed: ${e.message}\n`);
33
42
  process.stderr.write(`[hpmcp] serving from cache\n`);
34
43
  });
35
- const transport = new StdioServerTransport();
36
- await server.connect(transport);
44
+ const handlers = {
45
+ initialize: async () => {
46
+ const cached = await cache.get("init");
47
+ if (cached.exists && !cached.expired)
48
+ return cached.value;
49
+ try {
50
+ const result = {
51
+ protocolVersion: "2024-11-05",
52
+ capabilities: client.getServerCapabilities() ?? { tools: {} },
53
+ serverInfo: client.getServerVersion() ?? { name: "hpmcp", version: "0.0.1" },
54
+ };
55
+ await cache.set(["init"], result);
56
+ return result;
57
+ }
58
+ catch { }
59
+ if (cached.exists)
60
+ return cached.value;
61
+ return {
62
+ protocolVersion: "2024-11-05",
63
+ capabilities: { tools: {} },
64
+ serverInfo: { name: "hpmcp", version: "0.0.1" },
65
+ };
66
+ },
67
+ "tools/list": async () => {
68
+ const cached = await cache.get("tools_list");
69
+ if (cached.exists && !cached.expired)
70
+ return cached.value;
71
+ try {
72
+ const { tools } = await withTimeout(client.listTools());
73
+ const result = { tools };
74
+ await cache.set(["tools_list"], result);
75
+ return result;
76
+ }
77
+ catch { }
78
+ if (cached.exists)
79
+ return cached.value;
80
+ return { tools: [] };
81
+ },
82
+ "tools/call": async (params) => {
83
+ const { name, arguments: args } = params ?? {};
84
+ const argsKey = JSON.stringify(args ?? {});
85
+ const cached = await cache.get("tool_call", name, argsKey);
86
+ if (cached.exists && !cached.expired)
87
+ return cached.value;
88
+ try {
89
+ const result = await withTimeout(client.callTool({ name, arguments: args }));
90
+ await cache.set(["tool_call", name, argsKey], result);
91
+ return result;
92
+ }
93
+ catch { }
94
+ if (cached.exists)
95
+ return cached.value;
96
+ throw new Error(`Tool call failed: ${name} (remote unavailable, no cache)`);
97
+ },
98
+ };
99
+ const rl = createInterface({ input: process.stdin });
100
+ for await (const line of rl) {
101
+ if (!line.trim())
102
+ continue;
103
+ let msg;
104
+ try {
105
+ msg = JSON.parse(line);
106
+ }
107
+ catch {
108
+ error(null, -32700, "Parse error");
109
+ continue;
110
+ }
111
+ const { id, method, params } = msg;
112
+ if (id === undefined)
113
+ continue;
114
+ const handler = handlers[method];
115
+ if (!handler) {
116
+ error(id, -32601, `Method not found: ${method}`);
117
+ continue;
118
+ }
119
+ try {
120
+ respond(id, await handler(params));
121
+ }
122
+ catch (e) {
123
+ error(id, -32000, e.message);
124
+ }
125
+ }
37
126
  }
38
127
  main().catch((e) => {
39
128
  process.stderr.write(`[hpmcp] fatal: ${e.message}\n`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,QAAQ,GAA2B;IACvC,KAAK,EAAE,qCAAqC;IAC5C,MAAM,EAAE,4CAA4C;CACrD,CAAC;AAEF,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACtF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAE/D,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAC9C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;SAC9B,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAChE,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEL,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hpmcp",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "hpmcp": "dist/index.js"
@@ -13,9 +13,7 @@
13
13
  "build": "tsc",
14
14
  "start": "node dist/index.js"
15
15
  },
16
- "dependencies": {
17
- "@modelcontextprotocol/sdk": "^1.12.0"
18
- },
16
+ "dependencies": {},
19
17
  "devDependencies": {
20
18
  "@types/node": "^22.0.0",
21
19
  "tsx": "^4.0.0",