lexic-mcp 0.1.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 +152 -0
- package/dist/client/lexic-api.d.ts +65 -0
- package/dist/client/lexic-api.d.ts.map +1 -0
- package/dist/client/lexic-api.js +253 -0
- package/dist/client/lexic-api.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +30 -0
- package/dist/config.js.map +1 -0
- package/dist/core/admin.d.ts +74 -0
- package/dist/core/admin.d.ts.map +1 -0
- package/dist/core/admin.js +103 -0
- package/dist/core/admin.js.map +1 -0
- package/dist/core/context.d.ts +28 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +76 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +50 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/query.d.ts +47 -0
- package/dist/core/query.d.ts.map +1 -0
- package/dist/core/query.js +55 -0
- package/dist/core/query.js.map +1 -0
- package/dist/core/store.d.ts +35 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +55 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/types.d.ts +57 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -0
- package/dist/domains/development/index.d.ts +8 -0
- package/dist/domains/development/index.d.ts.map +1 -0
- package/dist/domains/development/index.js +18 -0
- package/dist/domains/development/index.js.map +1 -0
- package/dist/domains/development/tools.d.ts +97 -0
- package/dist/domains/development/tools.d.ts.map +1 -0
- package/dist/domains/development/tools.js +140 -0
- package/dist/domains/development/tools.js.map +1 -0
- package/dist/domains/index.d.ts +9 -0
- package/dist/domains/index.d.ts.map +1 -0
- package/dist/domains/index.js +8 -0
- package/dist/domains/index.js.map +1 -0
- package/dist/domains/loader.d.ts +34 -0
- package/dist/domains/loader.d.ts.map +1 -0
- package/dist/domains/loader.js +74 -0
- package/dist/domains/loader.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +162 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/errors.d.ts +27 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +48 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +63 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +53 -0
- package/templates/README.md +12 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Types
|
|
3
|
+
*
|
|
4
|
+
* See .claude/specs/IMPLEMENTATION.md Section 3
|
|
5
|
+
*/
|
|
6
|
+
export class LexicApiError extends Error {
|
|
7
|
+
statusCode;
|
|
8
|
+
correlationId;
|
|
9
|
+
constructor(message, statusCode, correlationId) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.statusCode = statusCode;
|
|
12
|
+
this.correlationId = correlationId;
|
|
13
|
+
this.name = 'LexicApiError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class AuthenticationError extends LexicApiError {
|
|
17
|
+
constructor(message, correlationId) {
|
|
18
|
+
super(message, 401, correlationId);
|
|
19
|
+
this.name = 'AuthenticationError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class AuthorizationError extends LexicApiError {
|
|
23
|
+
constructor(message, correlationId) {
|
|
24
|
+
super(message, 403, correlationId);
|
|
25
|
+
this.name = 'AuthorizationError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class NotFoundError extends LexicApiError {
|
|
29
|
+
constructor(message, correlationId) {
|
|
30
|
+
super(message, 404, correlationId);
|
|
31
|
+
this.name = 'NotFoundError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class RateLimitError extends LexicApiError {
|
|
35
|
+
retryAfter;
|
|
36
|
+
constructor(message, correlationId, retryAfter) {
|
|
37
|
+
super(message, 429, correlationId);
|
|
38
|
+
this.retryAfter = retryAfter;
|
|
39
|
+
this.name = 'RateLimitError';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export class ServerError extends LexicApiError {
|
|
43
|
+
constructor(message, statusCode, correlationId) {
|
|
44
|
+
super(message, statusCode, correlationId);
|
|
45
|
+
this.name = 'ServerError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG7B;IACA;IAHT,YACE,OAAe,EACR,UAAkB,EAClB,aAAsB;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAQ;QAClB,kBAAa,GAAb,aAAa,CAAS;QAG7B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD,YAAY,OAAe,EAAE,aAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACnD,YAAY,OAAe,EAAE,aAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,YAAY,OAAe,EAAE,aAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,aAAa;IAItC;IAHT,YACE,OAAe,EACf,aAAsB,EACf,UAAmB;QAE1B,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QAF5B,eAAU,GAAV,UAAU,CAAS;QAG1B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,aAAa;IAC5C,YAAY,OAAe,EAAE,UAAkB,EAAE,aAAsB;QACrE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured Logger
|
|
3
|
+
*
|
|
4
|
+
* Logs to stderr (MCP uses stdout for protocol)
|
|
5
|
+
*/
|
|
6
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
7
|
+
declare class Logger {
|
|
8
|
+
private level;
|
|
9
|
+
setLevel(level: LogLevel): void;
|
|
10
|
+
getLevel(): LogLevel;
|
|
11
|
+
private shouldLog;
|
|
12
|
+
private format;
|
|
13
|
+
debug(message: string, data?: Record<string, unknown>): void;
|
|
14
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
15
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
16
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
17
|
+
}
|
|
18
|
+
export declare const logger: Logger;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AASpD,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAAoB;IAEjC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAM/B,QAAQ,IAAI,QAAQ;IAIpB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,MAAM;IAiBd,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAK7D;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured Logger
|
|
3
|
+
*
|
|
4
|
+
* Logs to stderr (MCP uses stdout for protocol)
|
|
5
|
+
*/
|
|
6
|
+
const LOG_LEVELS = {
|
|
7
|
+
debug: 0,
|
|
8
|
+
info: 1,
|
|
9
|
+
warn: 2,
|
|
10
|
+
error: 3
|
|
11
|
+
};
|
|
12
|
+
class Logger {
|
|
13
|
+
level = 'info';
|
|
14
|
+
setLevel(level) {
|
|
15
|
+
if (LOG_LEVELS[level] !== undefined) {
|
|
16
|
+
this.level = level;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
getLevel() {
|
|
20
|
+
return this.level;
|
|
21
|
+
}
|
|
22
|
+
shouldLog(level) {
|
|
23
|
+
return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
|
|
24
|
+
}
|
|
25
|
+
format(level, message, data) {
|
|
26
|
+
const timestamp = new Date().toISOString();
|
|
27
|
+
const base = `[${timestamp}] [${level.toUpperCase()}] ${message}`;
|
|
28
|
+
if (data) {
|
|
29
|
+
// Redact sensitive fields
|
|
30
|
+
const safeData = { ...data };
|
|
31
|
+
if ('pat' in safeData)
|
|
32
|
+
safeData.pat = '[REDACTED]';
|
|
33
|
+
if ('token' in safeData)
|
|
34
|
+
safeData.token = '[REDACTED]';
|
|
35
|
+
if ('authorization' in safeData)
|
|
36
|
+
safeData.authorization = '[REDACTED]';
|
|
37
|
+
return `${base} ${JSON.stringify(safeData)}`;
|
|
38
|
+
}
|
|
39
|
+
return base;
|
|
40
|
+
}
|
|
41
|
+
debug(message, data) {
|
|
42
|
+
if (this.shouldLog('debug')) {
|
|
43
|
+
console.error(this.format('debug', message, data));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
info(message, data) {
|
|
47
|
+
if (this.shouldLog('info')) {
|
|
48
|
+
console.error(this.format('info', message, data));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
warn(message, data) {
|
|
52
|
+
if (this.shouldLog('warn')) {
|
|
53
|
+
console.error(this.format('warn', message, data));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
error(message, data) {
|
|
57
|
+
if (this.shouldLog('error')) {
|
|
58
|
+
console.error(this.format('error', message, data));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export const logger = new Logger();
|
|
63
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,MAAM;IACF,KAAK,GAAa,MAAM,CAAC;IAEjC,QAAQ,CAAC,KAAe;QACtB,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAEO,MAAM,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;QAC7E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;QAElE,IAAI,IAAI,EAAE,CAAC;YACT,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YAC7B,IAAI,KAAK,IAAI,QAAQ;gBAAE,QAAQ,CAAC,GAAG,GAAG,YAAY,CAAC;YACnD,IAAI,OAAO,IAAI,QAAQ;gBAAE,QAAQ,CAAC,KAAK,GAAG,YAAY,CAAC;YACvD,IAAI,eAAe,IAAI,QAAQ;gBAAE,QAAQ,CAAC,aAAa,GAAG,YAAY,CAAC;YAEvE,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "lexic-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server connecting Claude Code to Lexic knowledge management",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"lexic-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc && npm run build:domains",
|
|
12
|
+
"build:domains": "tsc -p domains/tsconfig.json",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"test": "vitest",
|
|
16
|
+
"test:unit": "vitest run tests/unit",
|
|
17
|
+
"test:integration": "vitest run tests/integration",
|
|
18
|
+
"lint": "eslint src --ext .ts",
|
|
19
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
20
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
21
|
+
"clean": "rimraf dist",
|
|
22
|
+
"prepublishOnly": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"mcp",
|
|
26
|
+
"lexic",
|
|
27
|
+
"claude",
|
|
28
|
+
"knowledge-management",
|
|
29
|
+
"ai-development"
|
|
30
|
+
],
|
|
31
|
+
"author": "Parul Bhargava <parulb@lexic.io>",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/node": "^20.10.0",
|
|
38
|
+
"@typescript-eslint/eslint-plugin": "^6.13.0",
|
|
39
|
+
"@typescript-eslint/parser": "^6.13.0",
|
|
40
|
+
"eslint": "^8.55.0",
|
|
41
|
+
"prettier": "^3.1.0",
|
|
42
|
+
"rimraf": "^5.0.0",
|
|
43
|
+
"typescript": "^5.3.0",
|
|
44
|
+
"vitest": "^4.0.17"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18.0.0"
|
|
48
|
+
},
|
|
49
|
+
"files": [
|
|
50
|
+
"dist",
|
|
51
|
+
"templates"
|
|
52
|
+
]
|
|
53
|
+
}
|