@engramprotocol/mcp-server 0.10.1 → 0.10.2
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/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +120 -0
- package/dist/cli.js.map +1 -0
- package/dist/http-client.d.ts +33 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +106 -0
- package/dist/http-client.js.map +1 -0
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +18 -0
- package/dist/server.js.map +1 -0
- package/dist/setup/_helpers.d.ts +71 -0
- package/dist/setup/_helpers.d.ts.map +1 -0
- package/dist/setup/_helpers.js +275 -0
- package/dist/setup/_helpers.js.map +1 -0
- package/dist/setup/index.d.ts +2 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +83 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/install.d.ts +2 -0
- package/dist/setup/install.d.ts.map +1 -0
- package/dist/setup/install.js +241 -0
- package/dist/setup/install.js.map +1 -0
- package/dist/setup/uninstall.d.ts +2 -0
- package/dist/setup/uninstall.d.ts.map +1 -0
- package/dist/setup/uninstall.js +120 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/setup/update.d.ts +2 -0
- package/dist/setup/update.d.ts.map +1 -0
- package/dist/setup/update.js +130 -0
- package/dist/setup/update.js.map +1 -0
- package/dist/tools/_helpers.d.ts +18 -0
- package/dist/tools/_helpers.d.ts.map +1 -0
- package/dist/tools/_helpers.js +37 -0
- package/dist/tools/_helpers.js.map +1 -0
- package/dist/tools/boot.d.ts +4 -0
- package/dist/tools/boot.d.ts.map +1 -0
- package/dist/tools/boot.js +16 -0
- package/dist/tools/boot.js.map +1 -0
- package/dist/tools/decide.d.ts +13 -0
- package/dist/tools/decide.d.ts.map +1 -0
- package/dist/tools/decide.js +59 -0
- package/dist/tools/decide.js.map +1 -0
- package/dist/tools/entity.d.ts +11 -0
- package/dist/tools/entity.d.ts.map +1 -0
- package/dist/tools/entity.js +55 -0
- package/dist/tools/entity.js.map +1 -0
- package/dist/tools/get.d.ts +4 -0
- package/dist/tools/get.d.ts.map +1 -0
- package/dist/tools/get.js +21 -0
- package/dist/tools/get.js.map +1 -0
- package/dist/tools/index.d.ts +26 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +67 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list.d.ts +4 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/list.js +38 -0
- package/dist/tools/list.js.map +1 -0
- package/dist/tools/note.d.ts +15 -0
- package/dist/tools/note.d.ts.map +1 -0
- package/dist/tools/note.js +50 -0
- package/dist/tools/note.js.map +1 -0
- package/dist/tools/projects.d.ts +9 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +65 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/recall.d.ts +4 -0
- package/dist/tools/recall.d.ts.map +1 -0
- package/dist/tools/recall.js +18 -0
- package/dist/tools/recall.js.map +1 -0
- package/dist/tools/set-status.d.ts +13 -0
- package/dist/tools/set-status.d.ts.map +1 -0
- package/dist/tools/set-status.js +48 -0
- package/dist/tools/set-status.js.map +1 -0
- package/dist/tools/show.d.ts +11 -0
- package/dist/tools/show.d.ts.map +1 -0
- package/dist/tools/show.js +25 -0
- package/dist/tools/show.js.map +1 -0
- package/dist/tools/stats.d.ts +11 -0
- package/dist/tools/stats.d.ts.map +1 -0
- package/dist/tools/stats.js +21 -0
- package/dist/tools/stats.js.map +1 -0
- package/dist/tools/track-task.d.ts +10 -0
- package/dist/tools/track-task.d.ts.map +1 -0
- package/dist/tools/track-task.js +56 -0
- package/dist/tools/track-task.js.map +1 -0
- package/dist/tools/update.d.ts +4 -0
- package/dist/tools/update.d.ts.map +1 -0
- package/dist/tools/update.js +25 -0
- package/dist/tools/update.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const server_1 = require("./server");
|
|
38
|
+
function parseArgs(argv) {
|
|
39
|
+
const out = {};
|
|
40
|
+
for (let i = 0; i < argv.length; i++) {
|
|
41
|
+
const a = argv[i];
|
|
42
|
+
if (a === '--help' || a === '-h') {
|
|
43
|
+
out.help = true;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (a === '--url') {
|
|
47
|
+
out.url = argv[++i];
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (a === '--token') {
|
|
51
|
+
out.token = argv[++i];
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (a === '--name') {
|
|
55
|
+
out.name = argv[++i];
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
function printHelpAndExit(code) {
|
|
62
|
+
const msg = `eml-mcp-server — MCP wrapper for the EML HTTP API
|
|
63
|
+
|
|
64
|
+
Usage:
|
|
65
|
+
eml-mcp-server --url <api-url> --token <bearer> [--name <client-name>]
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
--url EML_API_URL EML API URL (e.g. http://localhost:3117)
|
|
69
|
+
--token EML_API_TOKEN Bearer token (eml_<prefix><secret>)
|
|
70
|
+
--name EML_CLIENT_NAME Client name in server logs (default: eml-mcp-server)
|
|
71
|
+
--help
|
|
72
|
+
|
|
73
|
+
Example — Claude Code MCP config:
|
|
74
|
+
{
|
|
75
|
+
"mcpServers": {
|
|
76
|
+
"engramprotocol": {
|
|
77
|
+
"command": "npx",
|
|
78
|
+
"args": ["-y", "@engramprotocol/mcp-server"],
|
|
79
|
+
"env": {
|
|
80
|
+
"EML_API_URL": "https://api.engramprotocol.io",
|
|
81
|
+
"EML_API_TOKEN": "eml_..."
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
`;
|
|
87
|
+
process.stderr.write(msg);
|
|
88
|
+
process.exit(code);
|
|
89
|
+
}
|
|
90
|
+
async function main() {
|
|
91
|
+
const argv = process.argv.slice(2);
|
|
92
|
+
// Dispatch: setup-mode vs server-mode
|
|
93
|
+
if (argv[0] === 'setup') {
|
|
94
|
+
const { runSetup } = await Promise.resolve().then(() => __importStar(require('./setup/index.js')));
|
|
95
|
+
await runSetup(argv.slice(1));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Server-mode (default)
|
|
99
|
+
const args = parseArgs(argv);
|
|
100
|
+
if (args.help)
|
|
101
|
+
printHelpAndExit(0);
|
|
102
|
+
const url = args.url ?? process.env.EML_API_URL;
|
|
103
|
+
const token = args.token ?? process.env.EML_API_TOKEN;
|
|
104
|
+
const clientName = args.name ?? process.env.EML_CLIENT_NAME ?? 'eml-mcp-server';
|
|
105
|
+
if (!url || !token) {
|
|
106
|
+
process.stderr.write('Error: --url + --token (or EML_API_URL + EML_API_TOKEN) are required.\n\n');
|
|
107
|
+
printHelpAndExit(1);
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
await (0, server_1.startMcpServer)({ url, token, clientName });
|
|
111
|
+
process.stderr.write(`[eml-mcp-server] connected, stdio-transport ready (${clientName} → ${url})\n`);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
const e = err;
|
|
115
|
+
process.stderr.write(`[eml-mcp-server] startup failed: ${e.message}\n`);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
main();
|
|
120
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qCAAyC;AAgCzC,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,GAAG,GAAY,EAAE,CAAA;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAC,SAAQ;QAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,OAAO,EAAI,CAAC;YAAC,GAAG,CAAC,GAAG,GAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,SAAQ;QAAC,CAAC;QACxD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,SAAQ;QAAC,CAAC;QACxD,IAAI,CAAC,KAAK,QAAQ,EAAG,CAAC;YAAC,GAAG,CAAC,IAAI,GAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,SAAQ;QAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBb,CAAA;IACC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACpB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAElC,sCAAsC;IACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAA;QACrD,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7B,OAAM;IACR,CAAC;IAED,wBAAwB;IACxB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,IAAI,CAAC,IAAI;QAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,gBAAgB,CAAA;IAE/E,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAA;QACjG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAA,uBAAc,EAAC,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsD,UAAU,MAAM,GAAG,KAAK,CAAC,CAAA;IACtG,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAAY,CAAA;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin fetch wrapper for the EML HTTP API (v0.9-PROPOSAL §6.2).
|
|
3
|
+
*
|
|
4
|
+
* Deliberately lives without an `@engramprotocol/core` dependency — the MCP
|
|
5
|
+
* server ships as a small npm package (`@engramprotocol/mcp-server`) that
|
|
6
|
+
* only needs the SDK + zod + this file.
|
|
7
|
+
*
|
|
8
|
+
* Error handling: all failures throw `EmlApiError`. Tools catch it in the
|
|
9
|
+
* handler and map to an `isError: true` result (see v0.9-PROPOSAL §6.4
|
|
10
|
+
* "Error handling — two channels").
|
|
11
|
+
*/
|
|
12
|
+
export interface HttpClientOptions {
|
|
13
|
+
url: string;
|
|
14
|
+
token: string;
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class EmlApiError extends Error {
|
|
18
|
+
status: number;
|
|
19
|
+
body: unknown;
|
|
20
|
+
constructor(status: number, body: unknown, message: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class HttpClient {
|
|
23
|
+
private readonly baseUrl;
|
|
24
|
+
private readonly headers;
|
|
25
|
+
private readonly timeoutMs;
|
|
26
|
+
constructor(opts: HttpClientOptions);
|
|
27
|
+
get(path: string, query?: Record<string, string | number | undefined>): Promise<unknown>;
|
|
28
|
+
post(path: string, body?: unknown): Promise<unknown>;
|
|
29
|
+
put(path: string, body?: unknown): Promise<unknown>;
|
|
30
|
+
private buildPath;
|
|
31
|
+
private request;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,WAAY,SAAQ,KAAK;IAE3B,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,OAAO;gBADb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACpB,OAAO,EAAE,MAAM;CAKlB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;gBAEtB,IAAI,EAAE,iBAAiB;IAS7B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD,OAAO,CAAC,SAAS;YAUH,OAAO;CA+BtB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Thin fetch wrapper for the EML HTTP API (v0.9-PROPOSAL §6.2).
|
|
4
|
+
*
|
|
5
|
+
* Deliberately lives without an `@engramprotocol/core` dependency — the MCP
|
|
6
|
+
* server ships as a small npm package (`@engramprotocol/mcp-server`) that
|
|
7
|
+
* only needs the SDK + zod + this file.
|
|
8
|
+
*
|
|
9
|
+
* Error handling: all failures throw `EmlApiError`. Tools catch it in the
|
|
10
|
+
* handler and map to an `isError: true` result (see v0.9-PROPOSAL §6.4
|
|
11
|
+
* "Error handling — two channels").
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.HttpClient = exports.EmlApiError = void 0;
|
|
15
|
+
class EmlApiError extends Error {
|
|
16
|
+
status;
|
|
17
|
+
body;
|
|
18
|
+
constructor(status, body, message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.status = status;
|
|
21
|
+
this.body = body;
|
|
22
|
+
this.name = 'EmlApiError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.EmlApiError = EmlApiError;
|
|
26
|
+
class HttpClient {
|
|
27
|
+
baseUrl;
|
|
28
|
+
headers;
|
|
29
|
+
timeoutMs;
|
|
30
|
+
constructor(opts) {
|
|
31
|
+
this.baseUrl = opts.url.replace(/\/+$/, '');
|
|
32
|
+
this.headers = {
|
|
33
|
+
'Authorization': `Bearer ${opts.token}`,
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
};
|
|
36
|
+
this.timeoutMs = opts.timeoutMs ?? 30_000;
|
|
37
|
+
}
|
|
38
|
+
async get(path, query) {
|
|
39
|
+
return this.request('GET', this.buildPath(path, query));
|
|
40
|
+
}
|
|
41
|
+
async post(path, body) {
|
|
42
|
+
return this.request('POST', path, body);
|
|
43
|
+
}
|
|
44
|
+
async put(path, body) {
|
|
45
|
+
return this.request('PUT', path, body);
|
|
46
|
+
}
|
|
47
|
+
buildPath(path, query) {
|
|
48
|
+
if (!query)
|
|
49
|
+
return path;
|
|
50
|
+
const params = [];
|
|
51
|
+
for (const [k, v] of Object.entries(query)) {
|
|
52
|
+
if (v === undefined || v === null)
|
|
53
|
+
continue;
|
|
54
|
+
params.push(`${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`);
|
|
55
|
+
}
|
|
56
|
+
return params.length ? `${path}?${params.join('&')}` : path;
|
|
57
|
+
}
|
|
58
|
+
async request(method, path, body) {
|
|
59
|
+
const controller = new AbortController();
|
|
60
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
61
|
+
try {
|
|
62
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
63
|
+
method,
|
|
64
|
+
headers: this.headers,
|
|
65
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
66
|
+
signal: controller.signal,
|
|
67
|
+
});
|
|
68
|
+
const text = await res.text();
|
|
69
|
+
let parsed = null;
|
|
70
|
+
if (text) {
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(text);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
parsed = text;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (!res.ok) {
|
|
79
|
+
const msg = extractErrorMessage(parsed) ?? `HTTP ${res.status}`;
|
|
80
|
+
throw new EmlApiError(res.status, parsed, `${method} ${path} → ${res.status}: ${msg}`);
|
|
81
|
+
}
|
|
82
|
+
return parsed;
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
if (err instanceof EmlApiError)
|
|
86
|
+
throw err;
|
|
87
|
+
const e = err;
|
|
88
|
+
if (e.name === 'AbortError') {
|
|
89
|
+
throw new EmlApiError(0, null, `${method} ${path} timed out after ${this.timeoutMs}ms`);
|
|
90
|
+
}
|
|
91
|
+
throw new EmlApiError(0, null, `${method} ${path} failed: ${e.message}`);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
clearTimeout(timer);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.HttpClient = HttpClient;
|
|
99
|
+
function extractErrorMessage(body) {
|
|
100
|
+
if (body && typeof body === 'object' && 'error' in body) {
|
|
101
|
+
const e = body.error;
|
|
102
|
+
return typeof e === 'string' ? e : JSON.stringify(e);
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server setup (v0.9-PROPOSAL §6).
|
|
3
|
+
*
|
|
4
|
+
* Single-mode HTTP client (no embedded SQLite). Self-host uses the same
|
|
5
|
+
* invocation, just with `--url http://localhost:3117`.
|
|
6
|
+
*
|
|
7
|
+
* Stdio transport: local process spawned by Claude Code's MCP config.
|
|
8
|
+
* Capabilities: tools only (static, listChanged=false). Resources/prompts
|
|
9
|
+
* are v0.9.x polish.
|
|
10
|
+
*/
|
|
11
|
+
export interface McpServerOptions {
|
|
12
|
+
url: string;
|
|
13
|
+
token: string;
|
|
14
|
+
clientName?: string;
|
|
15
|
+
serverVersion?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function startMcpServer(opts: McpServerOptions): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1E"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startMcpServer = startMcpServer;
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const http_client_1 = require("./http-client");
|
|
7
|
+
const tools_1 = require("./tools");
|
|
8
|
+
async function startMcpServer(opts) {
|
|
9
|
+
const httpClient = new http_client_1.HttpClient({ url: opts.url, token: opts.token });
|
|
10
|
+
const server = new mcp_js_1.McpServer({
|
|
11
|
+
name: opts.clientName ?? 'eml-mcp-server',
|
|
12
|
+
version: opts.serverVersion ?? '0.9.0',
|
|
13
|
+
});
|
|
14
|
+
(0, tools_1.registerAllTools)(server, httpClient);
|
|
15
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
16
|
+
await server.connect(transport);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;AAuBA,wCAYC;AAnCD,oEAAmE;AACnE,wEAAgF;AAChF,+CAA0C;AAC1C,mCAA0C;AAoBnC,KAAK,UAAU,cAAc,CAAC,IAAsB;IACzD,MAAM,UAAU,GAAG,IAAI,wBAAU,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAEvE,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,gBAAgB;QACzC,OAAO,EAAE,IAAI,CAAC,aAAa,IAAI,OAAO;KACvC,CAAC,CAAA;IAEF,IAAA,wBAAgB,EAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAEpC,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export declare const HOME_DIR: string;
|
|
2
|
+
export declare const EML_DIR: string;
|
|
3
|
+
export declare const EML_CONFIG: string;
|
|
4
|
+
export declare const EML_HOOKS_DIR: string;
|
|
5
|
+
export declare const CLAUDE_DIR: string;
|
|
6
|
+
export declare const CLAUDE_JSON: string;
|
|
7
|
+
export declare const CLAUDE_SETTINGS: string;
|
|
8
|
+
export declare const MANAGED_BY_MARKER = "engramprotocol-setup";
|
|
9
|
+
export declare const MCP_SERVER_NAME = "engramprotocol";
|
|
10
|
+
/** Resolve the package's own root (where templates/ lives). Works from dist/. */
|
|
11
|
+
export declare function pkgRoot(): string;
|
|
12
|
+
export declare function pkgVersion(): string;
|
|
13
|
+
export declare function templatesDir(): string;
|
|
14
|
+
export declare function promptText(question: string): Promise<string>;
|
|
15
|
+
export declare function promptConfirm(question: string, defaultYes?: boolean): Promise<boolean>;
|
|
16
|
+
export interface EmlConfig {
|
|
17
|
+
EML_URL?: string;
|
|
18
|
+
EML_API_TOKEN?: string;
|
|
19
|
+
EML_CLIENT_VERSION?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function readConfig(): EmlConfig | null;
|
|
22
|
+
export declare function writeConfig(cfg: EmlConfig): void;
|
|
23
|
+
export type SettingsJson = Record<string, any>;
|
|
24
|
+
export declare function readSettings(): SettingsJson;
|
|
25
|
+
export declare function backupSettings(): string;
|
|
26
|
+
export declare function writeSettings(settings: SettingsJson): void;
|
|
27
|
+
/** Add a permission entry to settings.permissions.allow if not already present. */
|
|
28
|
+
export declare function mergePermission(settings: SettingsJson, entry: string): boolean;
|
|
29
|
+
/** Remove permission entries matching the predicate. Returns count removed. */
|
|
30
|
+
export declare function removePermissions(settings: SettingsJson, predicate: (entry: string) => boolean): number;
|
|
31
|
+
export interface HookEntry {
|
|
32
|
+
hooks: Array<{
|
|
33
|
+
type: string;
|
|
34
|
+
command: string;
|
|
35
|
+
}>;
|
|
36
|
+
matcher?: string;
|
|
37
|
+
}
|
|
38
|
+
/** Add a command-hook to settings.hooks.<event>[] if no existing entry references the same command. */
|
|
39
|
+
export declare function mergeHookCommand(settings: SettingsJson, event: string, command: string): boolean;
|
|
40
|
+
/** Remove hook entries whose command starts with the given prefix (e.g. `$HOME/.eml/hooks/`). Returns count removed. */
|
|
41
|
+
export declare function removeHooksByCommandPrefix(settings: SettingsJson, prefix: string): number;
|
|
42
|
+
export declare function claudeCli(args: string[]): {
|
|
43
|
+
stdout: string;
|
|
44
|
+
stderr: string;
|
|
45
|
+
status: number;
|
|
46
|
+
};
|
|
47
|
+
export declare function claudeCliExists(): boolean;
|
|
48
|
+
/** Unauthenticated reachability check — "is the server alive?". */
|
|
49
|
+
export declare function verifyHealth(url: string): Promise<{
|
|
50
|
+
ok: boolean;
|
|
51
|
+
status?: number;
|
|
52
|
+
error?: string;
|
|
53
|
+
}>;
|
|
54
|
+
/** Authenticated round-trip — "does this token work?". Uses GET /stats (lightweight, auth-required). */
|
|
55
|
+
export declare function verifyToken(url: string, token: string): Promise<{
|
|
56
|
+
ok: boolean;
|
|
57
|
+
status?: number;
|
|
58
|
+
error?: string;
|
|
59
|
+
}>;
|
|
60
|
+
export interface HookTemplate {
|
|
61
|
+
filename: string;
|
|
62
|
+
event: string;
|
|
63
|
+
}
|
|
64
|
+
export declare const HOOK_TEMPLATES: HookTemplate[];
|
|
65
|
+
export declare function readTemplate(filename: string): string;
|
|
66
|
+
export declare function hasMarker(content: string): boolean;
|
|
67
|
+
export declare function installTemplate(filename: string): {
|
|
68
|
+
installedPath: string;
|
|
69
|
+
alreadyExisted: boolean;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=_helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../src/setup/_helpers.ts"],"names":[],"mappings":"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"}
|