motionmcp 1.0.2 → 2.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/LICENSE +202 -0
- package/README.md +241 -450
- package/dist/handlers/CommentHandler.d.ts +9 -0
- package/dist/handlers/CommentHandler.d.ts.map +1 -0
- package/dist/handlers/CommentHandler.js +66 -0
- package/dist/handlers/CommentHandler.js.map +1 -0
- package/dist/handlers/CustomFieldHandler.d.ts +14 -0
- package/dist/handlers/CustomFieldHandler.d.ts.map +1 -0
- package/dist/handlers/CustomFieldHandler.js +95 -0
- package/dist/handlers/CustomFieldHandler.js.map +1 -0
- package/dist/handlers/HandlerFactory.d.ts +15 -0
- package/dist/handlers/HandlerFactory.d.ts.map +1 -0
- package/dist/handlers/HandlerFactory.js +58 -0
- package/dist/handlers/HandlerFactory.js.map +1 -0
- package/dist/handlers/ProjectHandler.d.ts +10 -0
- package/dist/handlers/ProjectHandler.d.ts.map +1 -0
- package/dist/handlers/ProjectHandler.js +63 -0
- package/dist/handlers/ProjectHandler.js.map +1 -0
- package/dist/handlers/RecurringTaskHandler.d.ts +10 -0
- package/dist/handlers/RecurringTaskHandler.d.ts.map +1 -0
- package/dist/handlers/RecurringTaskHandler.js +68 -0
- package/dist/handlers/RecurringTaskHandler.js.map +1 -0
- package/dist/handlers/ScheduleHandler.d.ts +8 -0
- package/dist/handlers/ScheduleHandler.d.ts.map +1 -0
- package/dist/handlers/ScheduleHandler.js +43 -0
- package/dist/handlers/ScheduleHandler.js.map +1 -0
- package/dist/handlers/SearchHandler.d.ts +10 -0
- package/dist/handlers/SearchHandler.d.ts.map +1 -0
- package/dist/handlers/SearchHandler.js +116 -0
- package/dist/handlers/SearchHandler.js.map +1 -0
- package/dist/handlers/StatusHandler.d.ts +8 -0
- package/dist/handlers/StatusHandler.d.ts.map +1 -0
- package/dist/handlers/StatusHandler.js +22 -0
- package/dist/handlers/StatusHandler.js.map +1 -0
- package/dist/handlers/TaskHandler.d.ts +22 -0
- package/dist/handlers/TaskHandler.d.ts.map +1 -0
- package/dist/handlers/TaskHandler.js +324 -0
- package/dist/handlers/TaskHandler.js.map +1 -0
- package/dist/handlers/UserHandler.d.ts +9 -0
- package/dist/handlers/UserHandler.d.ts.map +1 -0
- package/dist/handlers/UserHandler.js +36 -0
- package/dist/handlers/UserHandler.js.map +1 -0
- package/dist/handlers/WorkspaceHandler.d.ts +10 -0
- package/dist/handlers/WorkspaceHandler.d.ts.map +1 -0
- package/dist/handlers/WorkspaceHandler.js +49 -0
- package/dist/handlers/WorkspaceHandler.js.map +1 -0
- package/dist/handlers/base/BaseHandler.d.ts +16 -0
- package/dist/handlers/base/BaseHandler.d.ts.map +1 -0
- package/dist/handlers/base/BaseHandler.js +31 -0
- package/dist/handlers/base/BaseHandler.js.map +1 -0
- package/dist/handlers/base/HandlerInterface.d.ts +18 -0
- package/dist/handlers/base/HandlerInterface.d.ts.map +1 -0
- package/dist/handlers/base/HandlerInterface.js +3 -0
- package/dist/handlers/base/HandlerInterface.js.map +1 -0
- package/dist/handlers/index.d.ts +14 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +31 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/mcp-server.d.ts +15 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +145 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/schemas/motion.d.ts +4971 -0
- package/dist/schemas/motion.d.ts.map +1 -0
- package/dist/schemas/motion.js +328 -0
- package/dist/schemas/motion.js.map +1 -0
- package/dist/services/motionApi.d.ts +199 -0
- package/dist/services/motionApi.d.ts.map +1 -0
- package/dist/services/motionApi.js +1950 -0
- package/dist/services/motionApi.js.map +1 -0
- package/dist/tools/ToolConfigurator.d.ts +19 -0
- package/dist/tools/ToolConfigurator.d.ts.map +1 -0
- package/dist/tools/ToolConfigurator.js +89 -0
- package/dist/tools/ToolConfigurator.js.map +1 -0
- package/dist/tools/ToolDefinitions.d.ts +25 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +508 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts +16 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/ToolRegistry.js +89 -0
- package/dist/tools/ToolRegistry.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +21 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/mcp-tool-args.d.ts +123 -0
- package/dist/types/mcp-tool-args.d.ts.map +1 -0
- package/dist/types/mcp-tool-args.js +7 -0
- package/dist/types/mcp-tool-args.js.map +1 -0
- package/dist/types/mcp.d.ts +32 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +3 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/motion.d.ts +304 -0
- package/dist/types/motion.d.ts.map +1 -0
- package/dist/types/motion.js +3 -0
- package/dist/types/motion.js.map +1 -0
- package/dist/utils/cache.d.ts +25 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +135 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/constants.d.ts +88 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +188 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/errorHandling.d.ts +50 -0
- package/dist/utils/errorHandling.d.ts.map +1 -0
- package/dist/utils/errorHandling.js +86 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +38 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pagination.d.ts +61 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +168 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/paginationNew.d.ts +44 -0
- package/dist/utils/paginationNew.d.ts.map +1 -0
- package/dist/utils/paginationNew.js +149 -0
- package/dist/utils/paginationNew.js.map +1 -0
- package/dist/utils/parameterUtils.d.ts +79 -0
- package/dist/utils/parameterUtils.d.ts.map +1 -0
- package/dist/utils/parameterUtils.js +189 -0
- package/dist/utils/parameterUtils.js.map +1 -0
- package/dist/utils/responseFormatters.d.ts +95 -0
- package/dist/utils/responseFormatters.d.ts.map +1 -0
- package/dist/utils/responseFormatters.js +342 -0
- package/dist/utils/responseFormatters.js.map +1 -0
- package/dist/utils/responseWrapper.d.ts +38 -0
- package/dist/utils/responseWrapper.d.ts.map +1 -0
- package/dist/utils/responseWrapper.js +201 -0
- package/dist/utils/responseWrapper.js.map +1 -0
- package/dist/utils/sanitize.d.ts +51 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +138 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/validator.d.ts +37 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +74 -0
- package/dist/utils/validator.js.map +1 -0
- package/dist/utils/workspaceResolver.d.ts +40 -0
- package/dist/utils/workspaceResolver.d.ts.map +1 -0
- package/dist/utils/workspaceResolver.js +207 -0
- package/dist/utils/workspaceResolver.js.map +1 -0
- package/package.json +41 -17
- package/.claude/settings.local.json +0 -15
- package/.env.example +0 -3
- package/sample.png +0 -0
- package/src/index.js +0 -179
- package/src/mcp-server.js +0 -1137
- package/src/routes/motion.js +0 -152
- package/src/services/motionApi.js +0 -1177
- package/src/worker.js +0 -248
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkspaceHandler = void 0;
|
|
4
|
+
const BaseHandler_1 = require("./base/BaseHandler");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
class WorkspaceHandler extends BaseHandler_1.BaseHandler {
|
|
7
|
+
async handle(args) {
|
|
8
|
+
try {
|
|
9
|
+
const { operation, workspaceId } = args;
|
|
10
|
+
switch (operation) {
|
|
11
|
+
case 'list':
|
|
12
|
+
return await this.handleList();
|
|
13
|
+
case 'get':
|
|
14
|
+
return await this.handleGet(workspaceId);
|
|
15
|
+
case 'set_default':
|
|
16
|
+
return await this.handleSetDefault(workspaceId);
|
|
17
|
+
default:
|
|
18
|
+
return this.handleUnknownOperation(operation);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return this.handleError(error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async handleList() {
|
|
26
|
+
const workspaces = await this.motionService.getWorkspaces();
|
|
27
|
+
return (0, utils_1.formatWorkspaceList)(workspaces);
|
|
28
|
+
}
|
|
29
|
+
async handleGet(workspaceId) {
|
|
30
|
+
if (!workspaceId) {
|
|
31
|
+
return this.handleError(new Error("Workspace ID is required for get operation"));
|
|
32
|
+
}
|
|
33
|
+
const workspaces = await this.motionService.getWorkspaces();
|
|
34
|
+
const workspace = workspaces.find(w => w.id === workspaceId);
|
|
35
|
+
if (!workspace) {
|
|
36
|
+
return this.handleError(new Error(`Workspace not found: ${workspaceId}`));
|
|
37
|
+
}
|
|
38
|
+
return (0, utils_1.formatDetailResponse)(workspace, `Workspace details for "${workspace.name}"`);
|
|
39
|
+
}
|
|
40
|
+
async handleSetDefault(workspaceId) {
|
|
41
|
+
if (!workspaceId) {
|
|
42
|
+
return this.handleError(new Error("Workspace ID is required for set_default operation"));
|
|
43
|
+
}
|
|
44
|
+
// For now, we'll just return a success message since Motion API doesn't have a set default endpoint
|
|
45
|
+
return (0, utils_1.formatMcpSuccess)(`Default workspace would be set to: ${workspaceId} (Note: This is a placeholder - actual implementation depends on Motion API support)`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.WorkspaceHandler = WorkspaceHandler;
|
|
49
|
+
//# sourceMappingURL=WorkspaceHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceHandler.js","sourceRoot":"","sources":["../../src/handlers/WorkspaceHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAIkB;AAElB,MAAa,gBAAiB,SAAQ,yBAAW;IAC/C,KAAK,CAAC,MAAM,CAAC,IAA0B;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YAExC,QAAO,SAAS,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACT,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjC,KAAK,KAAK;oBACR,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC3C,KAAK,aAAa;oBAChB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAClD;oBACE,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC5D,OAAO,IAAA,2BAAmB,EAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,WAAoB;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAE7D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,IAAA,4BAAoB,EAAC,SAAS,EAAE,0BAA0B,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;IACtF,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,WAAoB;QACjD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,oGAAoG;QACpG,OAAO,IAAA,wBAAgB,EAAC,sCAAsC,WAAW,sFAAsF,CAAC,CAAC;IACnK,CAAC;CACF;AAhDD,4CAgDC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { McpToolResponse } from '../../types/mcp';
|
|
2
|
+
import { IHandler, HandlerContext, ValidationResult } from './HandlerInterface';
|
|
3
|
+
export declare abstract class BaseHandler implements IHandler {
|
|
4
|
+
protected motionService: MotionApiService;
|
|
5
|
+
protected workspaceResolver: WorkspaceResolver;
|
|
6
|
+
protected validator: InputValidator;
|
|
7
|
+
constructor(context: HandlerContext);
|
|
8
|
+
abstract handle(args: unknown): Promise<McpToolResponse>;
|
|
9
|
+
protected handleError(error: unknown): McpToolResponse;
|
|
10
|
+
protected handleUnknownOperation(operation: string): McpToolResponse;
|
|
11
|
+
validateArgs(args: unknown): ValidationResult;
|
|
12
|
+
}
|
|
13
|
+
import { MotionApiService } from '../../services/motionApi';
|
|
14
|
+
import { WorkspaceResolver } from '../../utils/workspaceResolver';
|
|
15
|
+
import { InputValidator } from '../../utils/validator';
|
|
16
|
+
//# sourceMappingURL=BaseHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/base/BaseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,8BAAsB,WAAY,YAAW,QAAQ;IACnD,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAC1C,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC/C,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;gBAExB,OAAO,EAAE,cAAc;IAMnC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAExD,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe;IAItD,SAAS,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAIpE,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB;CAa9C;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseHandler = void 0;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
5
|
+
class BaseHandler {
|
|
6
|
+
constructor(context) {
|
|
7
|
+
this.motionService = context.motionService;
|
|
8
|
+
this.workspaceResolver = context.workspaceResolver;
|
|
9
|
+
this.validator = context.validator;
|
|
10
|
+
}
|
|
11
|
+
handleError(error) {
|
|
12
|
+
return (0, utils_1.formatMcpError)(error instanceof Error ? error : new Error(String(error)));
|
|
13
|
+
}
|
|
14
|
+
handleUnknownOperation(operation) {
|
|
15
|
+
return (0, utils_1.formatMcpError)(new Error(`Unknown operation: ${operation}`));
|
|
16
|
+
}
|
|
17
|
+
validateArgs(args) {
|
|
18
|
+
// Base validation - subclasses can override for specific validation
|
|
19
|
+
if (!args || typeof args !== 'object') {
|
|
20
|
+
return {
|
|
21
|
+
valid: false,
|
|
22
|
+
errors: 'Arguments must be a valid object'
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
valid: true
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.BaseHandler = BaseHandler;
|
|
31
|
+
//# sourceMappingURL=BaseHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseHandler.js","sourceRoot":"","sources":["../../../src/handlers/base/BaseHandler.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAG7C,MAAsB,WAAW;IAK/B,YAAY,OAAuB;QACjC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAIS,WAAW,CAAC,KAAc;QAClC,OAAO,IAAA,sBAAc,EAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAES,sBAAsB,CAAC,SAAiB;QAChD,OAAO,IAAA,sBAAc,EAAC,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,YAAY,CAAC,IAAa;QACxB,oEAAoE;QACpE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,kCAAkC;aAC3C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;CACF;AAlCD,kCAkCC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { McpToolResponse } from '../../types/mcp';
|
|
2
|
+
import { MotionApiService } from '../../services/motionApi';
|
|
3
|
+
import { WorkspaceResolver } from '../../utils/workspaceResolver';
|
|
4
|
+
import { InputValidator } from '../../utils/validator';
|
|
5
|
+
export interface ValidationResult {
|
|
6
|
+
valid: boolean;
|
|
7
|
+
errors?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface HandlerContext {
|
|
10
|
+
motionService: MotionApiService;
|
|
11
|
+
workspaceResolver: WorkspaceResolver;
|
|
12
|
+
validator: InputValidator;
|
|
13
|
+
}
|
|
14
|
+
export interface IHandler {
|
|
15
|
+
handle(args: unknown): Promise<McpToolResponse>;
|
|
16
|
+
validateArgs(args: unknown): ValidationResult;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=HandlerInterface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../../src/handlers/base/HandlerInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,gBAAgB,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HandlerInterface.js","sourceRoot":"","sources":["../../../src/handlers/base/HandlerInterface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { BaseHandler } from './base/BaseHandler';
|
|
2
|
+
export { IHandler, HandlerContext, ValidationResult } from './base/HandlerInterface';
|
|
3
|
+
export { HandlerFactory } from './HandlerFactory';
|
|
4
|
+
export { TaskHandler } from './TaskHandler';
|
|
5
|
+
export { ProjectHandler } from './ProjectHandler';
|
|
6
|
+
export { WorkspaceHandler } from './WorkspaceHandler';
|
|
7
|
+
export { UserHandler } from './UserHandler';
|
|
8
|
+
export { SearchHandler } from './SearchHandler';
|
|
9
|
+
export { CommentHandler } from './CommentHandler';
|
|
10
|
+
export { CustomFieldHandler } from './CustomFieldHandler';
|
|
11
|
+
export { RecurringTaskHandler } from './RecurringTaskHandler';
|
|
12
|
+
export { ScheduleHandler } from './ScheduleHandler';
|
|
13
|
+
export { StatusHandler } from './StatusHandler';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StatusHandler = exports.ScheduleHandler = exports.RecurringTaskHandler = exports.CustomFieldHandler = exports.CommentHandler = exports.SearchHandler = exports.UserHandler = exports.WorkspaceHandler = exports.ProjectHandler = exports.TaskHandler = exports.HandlerFactory = exports.BaseHandler = void 0;
|
|
4
|
+
// Base handler exports
|
|
5
|
+
var BaseHandler_1 = require("./base/BaseHandler");
|
|
6
|
+
Object.defineProperty(exports, "BaseHandler", { enumerable: true, get: function () { return BaseHandler_1.BaseHandler; } });
|
|
7
|
+
// Handler Factory
|
|
8
|
+
var HandlerFactory_1 = require("./HandlerFactory");
|
|
9
|
+
Object.defineProperty(exports, "HandlerFactory", { enumerable: true, get: function () { return HandlerFactory_1.HandlerFactory; } });
|
|
10
|
+
// Individual handlers
|
|
11
|
+
var TaskHandler_1 = require("./TaskHandler");
|
|
12
|
+
Object.defineProperty(exports, "TaskHandler", { enumerable: true, get: function () { return TaskHandler_1.TaskHandler; } });
|
|
13
|
+
var ProjectHandler_1 = require("./ProjectHandler");
|
|
14
|
+
Object.defineProperty(exports, "ProjectHandler", { enumerable: true, get: function () { return ProjectHandler_1.ProjectHandler; } });
|
|
15
|
+
var WorkspaceHandler_1 = require("./WorkspaceHandler");
|
|
16
|
+
Object.defineProperty(exports, "WorkspaceHandler", { enumerable: true, get: function () { return WorkspaceHandler_1.WorkspaceHandler; } });
|
|
17
|
+
var UserHandler_1 = require("./UserHandler");
|
|
18
|
+
Object.defineProperty(exports, "UserHandler", { enumerable: true, get: function () { return UserHandler_1.UserHandler; } });
|
|
19
|
+
var SearchHandler_1 = require("./SearchHandler");
|
|
20
|
+
Object.defineProperty(exports, "SearchHandler", { enumerable: true, get: function () { return SearchHandler_1.SearchHandler; } });
|
|
21
|
+
var CommentHandler_1 = require("./CommentHandler");
|
|
22
|
+
Object.defineProperty(exports, "CommentHandler", { enumerable: true, get: function () { return CommentHandler_1.CommentHandler; } });
|
|
23
|
+
var CustomFieldHandler_1 = require("./CustomFieldHandler");
|
|
24
|
+
Object.defineProperty(exports, "CustomFieldHandler", { enumerable: true, get: function () { return CustomFieldHandler_1.CustomFieldHandler; } });
|
|
25
|
+
var RecurringTaskHandler_1 = require("./RecurringTaskHandler");
|
|
26
|
+
Object.defineProperty(exports, "RecurringTaskHandler", { enumerable: true, get: function () { return RecurringTaskHandler_1.RecurringTaskHandler; } });
|
|
27
|
+
var ScheduleHandler_1 = require("./ScheduleHandler");
|
|
28
|
+
Object.defineProperty(exports, "ScheduleHandler", { enumerable: true, get: function () { return ScheduleHandler_1.ScheduleHandler; } });
|
|
29
|
+
var StatusHandler_1 = require("./StatusHandler");
|
|
30
|
+
Object.defineProperty(exports, "StatusHandler", { enumerable: true, get: function () { return StatusHandler_1.StatusHandler; } });
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":";;;AAAA,uBAAuB;AACvB,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AAGpB,kBAAkB;AAClB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAEvB,sBAAsB;AACtB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
declare class MotionMCPServer {
|
|
3
|
+
private server;
|
|
4
|
+
private toolRegistry;
|
|
5
|
+
private toolConfigurator;
|
|
6
|
+
private handlerFactory;
|
|
7
|
+
private context;
|
|
8
|
+
constructor();
|
|
9
|
+
private initializeTools;
|
|
10
|
+
initialize(): Promise<void>;
|
|
11
|
+
setupHandlers(): void;
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default MotionMCPServer;
|
|
15
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AAoBA,cAAM,eAAe;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,OAAO,CAAwB;;IAyBvC,OAAO,CAAC,eAAe;IAQjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC,aAAa,IAAI,IAAI;IAyCf,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ3B;AAWD,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
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 index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
38
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
39
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
40
|
+
const motionApi_1 = require("./services/motionApi");
|
|
41
|
+
const utils_1 = require("./utils");
|
|
42
|
+
const validator_1 = require("./utils/validator");
|
|
43
|
+
const HandlerFactory_1 = require("./handlers/HandlerFactory");
|
|
44
|
+
const tools_1 = require("./tools");
|
|
45
|
+
const dotenv = __importStar(require("dotenv"));
|
|
46
|
+
dotenv.config();
|
|
47
|
+
class MotionMCPServer {
|
|
48
|
+
constructor() {
|
|
49
|
+
this.server = new index_js_1.Server({
|
|
50
|
+
name: "motion-mcp-server",
|
|
51
|
+
version: "2.0.0",
|
|
52
|
+
}, {
|
|
53
|
+
capabilities: {
|
|
54
|
+
tools: {},
|
|
55
|
+
prompts: {},
|
|
56
|
+
resources: {},
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
this.handlerFactory = null;
|
|
60
|
+
this.context = null;
|
|
61
|
+
this.toolRegistry = null;
|
|
62
|
+
this.toolConfigurator = null;
|
|
63
|
+
this.initializeTools();
|
|
64
|
+
this.setupHandlers();
|
|
65
|
+
}
|
|
66
|
+
initializeTools() {
|
|
67
|
+
this.toolRegistry = new tools_1.ToolRegistry();
|
|
68
|
+
this.toolConfigurator = new tools_1.ToolConfigurator(process.env.MOTION_MCP_TOOLS || 'essential', this.toolRegistry);
|
|
69
|
+
}
|
|
70
|
+
async initialize() {
|
|
71
|
+
try {
|
|
72
|
+
// Create context with initialized services
|
|
73
|
+
const motionService = new motionApi_1.MotionApiService();
|
|
74
|
+
const workspaceResolver = new utils_1.WorkspaceResolver(motionService);
|
|
75
|
+
const validator = new validator_1.InputValidator();
|
|
76
|
+
this.context = {
|
|
77
|
+
motionService,
|
|
78
|
+
workspaceResolver,
|
|
79
|
+
validator
|
|
80
|
+
};
|
|
81
|
+
// Initialize validators with enabled tools
|
|
82
|
+
validator.initializeValidators(this.toolConfigurator?.getEnabledTools() || []);
|
|
83
|
+
// Create handler factory
|
|
84
|
+
this.handlerFactory = new HandlerFactory_1.HandlerFactory(this.context);
|
|
85
|
+
(0, utils_1.mcpLog)(utils_1.LOG_LEVELS.INFO, "Motion MCP Server initialized successfully", {
|
|
86
|
+
toolsConfig: this.toolConfigurator?.getConfig(),
|
|
87
|
+
enabledToolsCount: this.toolConfigurator?.getToolCount()
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
92
|
+
(0, utils_1.mcpLog)(utils_1.LOG_LEVELS.ERROR, "Failed to initialize Motion API service", { error: errorMessage });
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
setupHandlers() {
|
|
97
|
+
this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
98
|
+
return {
|
|
99
|
+
tools: this.toolConfigurator?.getEnabledTools() || []
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
// Handle unsupported MCP methods gracefully
|
|
103
|
+
this.server.setRequestHandler(types_js_1.ListPromptsRequestSchema, async () => {
|
|
104
|
+
return { prompts: [] };
|
|
105
|
+
});
|
|
106
|
+
this.server.setRequestHandler(types_js_1.ListResourcesRequestSchema, async () => {
|
|
107
|
+
return { resources: [] };
|
|
108
|
+
});
|
|
109
|
+
this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
110
|
+
if (!this.handlerFactory || !this.context) {
|
|
111
|
+
return (0, utils_1.formatMcpError)(new Error("Server not initialized"));
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const { name, arguments: args } = request.params;
|
|
115
|
+
// Runtime validation
|
|
116
|
+
const validation = this.context.validator.validateInput(name, args);
|
|
117
|
+
if (!validation.valid) {
|
|
118
|
+
return (0, utils_1.formatMcpError)(new Error(`Invalid arguments for ${name}: ${validation.errors}`));
|
|
119
|
+
}
|
|
120
|
+
// Create handler and delegate
|
|
121
|
+
const handler = this.handlerFactory.createHandler(name);
|
|
122
|
+
return await handler.handle(args);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return (0, utils_1.formatMcpError)(error instanceof Error ? error : new Error(String(error)));
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async run() {
|
|
130
|
+
await this.initialize();
|
|
131
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
132
|
+
await this.server.connect(transport);
|
|
133
|
+
(0, utils_1.mcpLog)(utils_1.LOG_LEVELS.INFO, "Motion MCP Server running on stdio");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Main execution
|
|
137
|
+
if (require.main === module) {
|
|
138
|
+
const server = new MotionMCPServer();
|
|
139
|
+
server.run().catch((error) => {
|
|
140
|
+
console.error("Failed to run server:", error);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
exports.default = MotionMCPServer;
|
|
145
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|