mobile-device-mcp 0.2.5 → 0.2.6
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/license.d.ts +6 -4
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +42 -6
- package/dist/license.js.map +1 -1
- package/package.json +1 -1
package/dist/license.d.ts
CHANGED
|
@@ -14,12 +14,14 @@ export declare const PRO_UPGRADE_MESSAGE: {
|
|
|
14
14
|
isError: boolean;
|
|
15
15
|
};
|
|
16
16
|
/**
|
|
17
|
-
* Validate
|
|
18
|
-
*
|
|
19
|
-
* Current implementation: presence check.
|
|
20
|
-
* Future: integrate with Keygen.sh or xPay for real validation.
|
|
17
|
+
* Validate a license key offline.
|
|
21
18
|
*/
|
|
22
19
|
export declare function validateLicense(): LicenseInfo;
|
|
20
|
+
/**
|
|
21
|
+
* Generate a license key (for internal use — run via: node -e "...")
|
|
22
|
+
* Usage: SALT must match the one compiled in the server.
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateLicenseKey(): string;
|
|
23
25
|
/** Log the license tier on startup */
|
|
24
26
|
export declare function logLicenseStatus(info: LicenseInfo): void;
|
|
25
27
|
//# sourceMappingURL=license.d.ts.map
|
package/dist/license.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,UAAU,aAoBrB,CAAC;AAEH,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB;;;;;;CAiB/B,CAAC;
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,UAAU,aAoBrB,CAAC;AAEH,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB;;;;;;CAiB/B,CAAC;AAsBF;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAqB7C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAQxD"}
|
package/dist/license.js
CHANGED
|
@@ -44,25 +44,61 @@ export const PRO_UPGRADE_MESSAGE = {
|
|
|
44
44
|
isError: true,
|
|
45
45
|
};
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* License key format: MDMCP-XXXXX-XXXXX-XXXXX-CHECK
|
|
48
48
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
49
|
+
* The last segment (CHECK) is a hash of the first 3 segments + a secret salt.
|
|
50
|
+
* This runs offline — no network call needed. Keys are generated by the developer
|
|
51
|
+
* and can't be guessed because the salt is compiled into the binary.
|
|
52
|
+
*/
|
|
53
|
+
const SALT = "m0b1l3-d3v1c3-mcp-2026-s4r4nsh";
|
|
54
|
+
function simpleHash(input) {
|
|
55
|
+
let hash = 0;
|
|
56
|
+
for (let i = 0; i < input.length; i++) {
|
|
57
|
+
const char = input.charCodeAt(i);
|
|
58
|
+
hash = ((hash << 5) - hash + char) | 0;
|
|
59
|
+
}
|
|
60
|
+
// Convert to positive 5-char alphanumeric
|
|
61
|
+
const positive = Math.abs(hash);
|
|
62
|
+
return positive.toString(36).toUpperCase().padStart(5, "0").slice(0, 5);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate a license key offline.
|
|
51
66
|
*/
|
|
52
67
|
export function validateLicense() {
|
|
53
68
|
const key = process.env.MOBILE_MCP_LICENSE_KEY;
|
|
54
69
|
if (!key || key.trim() === "") {
|
|
55
70
|
return { tier: "free", valid: true };
|
|
56
71
|
}
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
72
|
+
// Check format: MDMCP-XXXXX-XXXXX-XXXXX-CHECK
|
|
73
|
+
const parts = key.trim().split("-");
|
|
74
|
+
if (parts.length !== 5 || parts[0] !== "MDMCP") {
|
|
75
|
+
return { tier: "free", valid: false };
|
|
76
|
+
}
|
|
77
|
+
const body = parts.slice(0, 4).join("-");
|
|
78
|
+
const expectedCheck = simpleHash(body + SALT);
|
|
79
|
+
if (parts[4] === expectedCheck) {
|
|
80
|
+
return { tier: "pro", valid: true };
|
|
81
|
+
}
|
|
82
|
+
return { tier: "free", valid: false };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate a license key (for internal use — run via: node -e "...")
|
|
86
|
+
* Usage: SALT must match the one compiled in the server.
|
|
87
|
+
*/
|
|
88
|
+
export function generateLicenseKey() {
|
|
89
|
+
const seg = () => Math.random().toString(36).substring(2, 7).toUpperCase();
|
|
90
|
+
const body = `MDMCP-${seg()}-${seg()}-${seg()}`;
|
|
91
|
+
const check = simpleHash(body + SALT);
|
|
92
|
+
return `${body}-${check}`;
|
|
60
93
|
}
|
|
61
94
|
/** Log the license tier on startup */
|
|
62
95
|
export function logLicenseStatus(info) {
|
|
63
96
|
if (info.tier === "pro") {
|
|
64
97
|
process.stderr.write(`${PREFIX} License: Pro (all 49 tools enabled)\n`);
|
|
65
98
|
}
|
|
99
|
+
else if (!info.valid) {
|
|
100
|
+
process.stderr.write(`${PREFIX} License: Invalid key. Get a valid Pro key at https://rzp.io/rzp/r4ijQsJY\n`);
|
|
101
|
+
}
|
|
66
102
|
else {
|
|
67
103
|
process.stderr.write(`${PREFIX} License: Free (14 tools — upgrade to Pro for all 49)\n`);
|
|
68
104
|
}
|
package/dist/license.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,MAAM,MAAM,GAAG,qBAAqB,CAAC;AASrC,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IAChC,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,4BAA4B;IAC5B,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;IACxB,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,WAAW;IACX,WAAW;IACX,2BAA2B;IAC3B,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE;gBACJ,+DAA+D;gBAC/D,EAAE;gBACF,yGAAyG;gBACzG,EAAE;gBACF,sCAAsC;gBACtC,EAAE;gBACF,wEAAwE;gBACxE,6CAA6C;aAC9C,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF;IACD,OAAO,EAAE,IAAI;CACd,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,MAAM,MAAM,GAAG,qBAAqB,CAAC;AASrC,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IAChC,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,4BAA4B;IAC5B,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;IACxB,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,WAAW;IACX,WAAW;IACX,2BAA2B;IAC3B,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE;gBACJ,+DAA+D;gBAC/D,EAAE;gBACF,yGAAyG;gBACzG,EAAE;gBACF,sCAAsC;gBACtC,EAAE;gBACF,wEAAwE;gBACxE,6CAA6C;aAC9C,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF;IACD,OAAO,EAAE,IAAI;CACd,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAE9C,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAE/C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,8CAA8C;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE9C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,SAAS,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtC,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,gBAAgB,CAAC,IAAiB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,wCAAwC,CAAC,CAAC;IAC1E,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,6EAA6E,CAAC,CAAC;IAC/G,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,yDAAyD,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mobile-device-mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "MCP server that gives AI coding assistants (Claude, Cursor, Windsurf) the ability to see and interact with Android mobile devices via ADB — AI-powered visual inspection, element finding, and device automation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|