@hypertabai/mcp 0.2.0
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 +120 -0
- package/dist/__tests__/config-writer.test.d.ts +2 -0
- package/dist/__tests__/config-writer.test.d.ts.map +1 -0
- package/dist/__tests__/config-writer.test.js +186 -0
- package/dist/__tests__/config-writer.test.js.map +1 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +113 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/__tests__/install.test.d.ts +2 -0
- package/dist/__tests__/install.test.d.ts.map +1 -0
- package/dist/__tests__/install.test.js +211 -0
- package/dist/__tests__/install.test.js.map +1 -0
- package/dist/__tests__/platforms.test.d.ts +2 -0
- package/dist/__tests__/platforms.test.d.ts.map +1 -0
- package/dist/__tests__/platforms.test.js +109 -0
- package/dist/__tests__/platforms.test.js.map +1 -0
- package/dist/__tests__/uninstall.test.d.ts +2 -0
- package/dist/__tests__/uninstall.test.d.ts.map +1 -0
- package/dist/__tests__/uninstall.test.js +117 -0
- package/dist/__tests__/uninstall.test.js.map +1 -0
- package/dist/connect.d.ts +8 -0
- package/dist/connect.d.ts.map +1 -0
- package/dist/connect.js +49 -0
- package/dist/connect.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/install/config-writer.d.ts +49 -0
- package/dist/install/config-writer.d.ts.map +1 -0
- package/dist/install/config-writer.js +156 -0
- package/dist/install/config-writer.js.map +1 -0
- package/dist/install/index.d.ts +17 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +94 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/platforms.d.ts +38 -0
- package/dist/install/platforms.d.ts.map +1 -0
- package/dist/install/platforms.js +162 -0
- package/dist/install/platforms.js.map +1 -0
- package/dist/install/skill-writer.d.ts +24 -0
- package/dist/install/skill-writer.d.ts.map +1 -0
- package/dist/install/skill-writer.js +86 -0
- package/dist/install/skill-writer.js.map +1 -0
- package/dist/install/uninstall.d.ts +11 -0
- package/dist/install/uninstall.d.ts.map +1 -0
- package/dist/install/uninstall.js +81 -0
- package/dist/install/uninstall.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
export const DEFAULT_SKILL_URL = 'https://hypertab.ai/skill.md';
|
|
4
|
+
function extractFrontmatterVersion(md) {
|
|
5
|
+
const match = md.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
6
|
+
if (!match)
|
|
7
|
+
return null;
|
|
8
|
+
const versionLine = match[1].split('\n').find((l) => l.trim().startsWith('version:'));
|
|
9
|
+
if (!versionLine)
|
|
10
|
+
return null;
|
|
11
|
+
return versionLine.replace(/^version:\s*/, '').trim();
|
|
12
|
+
}
|
|
13
|
+
async function fetchWithRetry(url, fetchImpl, retries) {
|
|
14
|
+
let lastErr;
|
|
15
|
+
for (let i = 0; i < retries; i += 1) {
|
|
16
|
+
try {
|
|
17
|
+
const ctrl = new AbortController();
|
|
18
|
+
const timer = setTimeout(() => ctrl.abort(), 10_000);
|
|
19
|
+
let res;
|
|
20
|
+
try {
|
|
21
|
+
res = await fetchImpl(url, { signal: ctrl.signal });
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
clearTimeout(timer);
|
|
25
|
+
}
|
|
26
|
+
if (!res.ok)
|
|
27
|
+
throw new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
28
|
+
const text = await res.text();
|
|
29
|
+
if (text.trimStart().startsWith('<')) {
|
|
30
|
+
throw new Error(`Expected markdown but got HTML (likely SPA fallback). ` +
|
|
31
|
+
`Check that ${url} is served with Content-Type: text/markdown.`);
|
|
32
|
+
}
|
|
33
|
+
return text;
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
lastErr = err;
|
|
37
|
+
if (i < retries - 1) {
|
|
38
|
+
await new Promise((r) => setTimeout(r, 500 * (i + 1)));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fetches the Hypertab skill and installs it at the platform-specific path.
|
|
46
|
+
*
|
|
47
|
+
* Behavior:
|
|
48
|
+
* - Platforms that don't support skills return `unsupported` without touching disk.
|
|
49
|
+
* - Network failures return `skipped-fetch-failed` (config install still succeeded upstream).
|
|
50
|
+
* - Re-runs with an identical skill file are `up-to-date` no-ops.
|
|
51
|
+
*/
|
|
52
|
+
export async function installSkill(opts) {
|
|
53
|
+
const { platform, scope } = opts;
|
|
54
|
+
if (!platform.supportsSkill || !platform.skillPath) {
|
|
55
|
+
return { action: 'unsupported', reason: `${platform.name} does not support Hypertab skills.` };
|
|
56
|
+
}
|
|
57
|
+
const skillUrl = opts.skillUrl ?? DEFAULT_SKILL_URL;
|
|
58
|
+
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
59
|
+
const retries = opts.retries ?? 3;
|
|
60
|
+
const targetPath = platform.skillPath(scope);
|
|
61
|
+
let fresh;
|
|
62
|
+
try {
|
|
63
|
+
fresh = await fetchWithRetry(skillUrl, fetchImpl, retries);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return {
|
|
67
|
+
action: 'skipped-fetch-failed',
|
|
68
|
+
reason: `Could not fetch ${skillUrl}: ${err.message}. ` +
|
|
69
|
+
`The MCP server was still installed; re-run 'hypertab install' to retry the skill.`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (existsSync(targetPath)) {
|
|
73
|
+
const current = readFileSync(targetPath, 'utf8');
|
|
74
|
+
const currentVersion = extractFrontmatterVersion(current);
|
|
75
|
+
const newVersion = extractFrontmatterVersion(fresh);
|
|
76
|
+
if (currentVersion && newVersion && currentVersion === newVersion && current === fresh) {
|
|
77
|
+
return { action: 'up-to-date', path: targetPath };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const parent = dirname(targetPath);
|
|
81
|
+
if (!existsSync(parent))
|
|
82
|
+
mkdirSync(parent, { recursive: true });
|
|
83
|
+
writeFileSync(targetPath, fresh);
|
|
84
|
+
return { action: 'installed', path: targetPath };
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=skill-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-writer.js","sourceRoot":"","sources":["../../src/install/skill-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type PlatformDef, type Scope } from './platforms.js';
|
|
2
|
+
export interface UninstallOptions {
|
|
3
|
+
platform: PlatformDef;
|
|
4
|
+
scope?: Scope;
|
|
5
|
+
/** When true, preserves the skill file at ~/.claude/skills/hypertab/SKILL.md. */
|
|
6
|
+
keepSkill?: boolean;
|
|
7
|
+
stdout?: NodeJS.WritableStream;
|
|
8
|
+
stderr?: NodeJS.WritableStream;
|
|
9
|
+
}
|
|
10
|
+
export declare function runUninstall(opts: UninstallOptions): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=uninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/install/uninstall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAoB,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE/E,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,WAAW,CAAA;IACrB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAC9B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6E1E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { existsSync, unlinkSync } from 'node:fs';
|
|
2
|
+
import { removePlatformConfig } from './config-writer.js';
|
|
3
|
+
import { resolveCanonical } from './platforms.js';
|
|
4
|
+
export async function runUninstall(opts) {
|
|
5
|
+
const out = opts.stdout ?? process.stdout;
|
|
6
|
+
const err = opts.stderr ?? process.stderr;
|
|
7
|
+
const platform = opts.platform;
|
|
8
|
+
const canonical = resolveCanonical(platform);
|
|
9
|
+
const desired = opts.scope ?? (canonical.supportsUserScope ? 'user' : 'project');
|
|
10
|
+
if (desired === 'project' && !canonical.supportsProjectScope) {
|
|
11
|
+
err.write(`Error: ${canonical.name} does not support project scope. Re-run with --scope user.\n`);
|
|
12
|
+
return 1;
|
|
13
|
+
}
|
|
14
|
+
if (desired === 'user' && !canonical.supportsUserScope) {
|
|
15
|
+
err.write(`Error: ${canonical.name} does not support user scope. Re-run with --scope project.\n`);
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
const scope = desired;
|
|
19
|
+
let configResult;
|
|
20
|
+
try {
|
|
21
|
+
configResult = removePlatformConfig({ platform: canonical, scope });
|
|
22
|
+
}
|
|
23
|
+
catch (writeErr) {
|
|
24
|
+
err.write(`Error removing config: ${writeErr.message}\n`);
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
// Skill removal (only for platforms that support skills)
|
|
28
|
+
let skillStatus = 'unsupported';
|
|
29
|
+
let skillPath;
|
|
30
|
+
if (canonical.supportsSkill && canonical.skillPath) {
|
|
31
|
+
skillPath = canonical.skillPath(scope);
|
|
32
|
+
if (opts.keepSkill) {
|
|
33
|
+
skillStatus = 'kept';
|
|
34
|
+
}
|
|
35
|
+
else if (existsSync(skillPath)) {
|
|
36
|
+
try {
|
|
37
|
+
unlinkSync(skillPath);
|
|
38
|
+
skillStatus = 'removed';
|
|
39
|
+
}
|
|
40
|
+
catch (skillErr) {
|
|
41
|
+
err.write(`Warning: could not remove skill at ${skillPath}: ${skillErr.message}\n`);
|
|
42
|
+
skillStatus = 'kept';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
skillStatus = 'not-present';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const lines = [];
|
|
50
|
+
lines.push('');
|
|
51
|
+
lines.push(`\u2713 Uninstalled Hypertab MCP from ${platform.name}${platform.aliasOf ? ` (wrote to ${canonical.name} config)` : ''}`);
|
|
52
|
+
if (configResult.action === 'removed') {
|
|
53
|
+
lines.push(` Config: ${configResult.path} (removed${configResult.backupCreated ? ', backup saved as .bak' : ''})`);
|
|
54
|
+
}
|
|
55
|
+
else if (configResult.action === 'not-installed') {
|
|
56
|
+
lines.push(` Config: ${configResult.path} (nothing to remove — hypertab entry was not present)`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
lines.push(` Config: ${configResult.path} (file did not exist)`);
|
|
60
|
+
}
|
|
61
|
+
if (canonical.supportsSkill) {
|
|
62
|
+
if (skillStatus === 'removed') {
|
|
63
|
+
lines.push(` Skill: ${skillPath} (removed)`);
|
|
64
|
+
}
|
|
65
|
+
else if (skillStatus === 'kept') {
|
|
66
|
+
lines.push(` Skill: ${skillPath} (kept, --keep-skill)`);
|
|
67
|
+
}
|
|
68
|
+
else if (skillStatus === 'not-present') {
|
|
69
|
+
lines.push(` Skill: not present (nothing to remove)`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
lines.push(` Skill: n/a (${canonical.name} does not install a skill)`);
|
|
74
|
+
}
|
|
75
|
+
lines.push('');
|
|
76
|
+
lines.push(`Restart ${platform.name} so it stops loading the Hypertab server.`);
|
|
77
|
+
lines.push('');
|
|
78
|
+
out.write(lines.join('\n'));
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/install/uninstall.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hypertabai/mcp",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "One-command Hypertab MCP installer and client for Claude Code, Cursor, Windsurf, and more.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"hypertab": "./dist/index.js",
|
|
8
|
+
"hypertab-mcp": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:watch": "vitest",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"hypertab",
|
|
22
|
+
"mcp",
|
|
23
|
+
"model-context-protocol",
|
|
24
|
+
"claude",
|
|
25
|
+
"cursor",
|
|
26
|
+
"windsurf",
|
|
27
|
+
"ai-agent"
|
|
28
|
+
],
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
31
|
+
"commander": "latest"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^20.0.0",
|
|
35
|
+
"typescript": "~5.9.0",
|
|
36
|
+
"vitest": "^3.2.4"
|
|
37
|
+
}
|
|
38
|
+
}
|