@elnora-ai/mcp-server 0.2.0 → 0.4.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.
Files changed (101) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/auth/clients-store.d.ts +1 -0
  3. package/dist/auth/clients-store.d.ts.map +1 -1
  4. package/dist/auth/clients-store.js +13 -1
  5. package/dist/auth/clients-store.js.map +1 -1
  6. package/dist/auth/provider.d.ts +2 -19
  7. package/dist/auth/provider.d.ts.map +1 -1
  8. package/dist/auth/provider.js +61 -19
  9. package/dist/auth/provider.js.map +1 -1
  10. package/dist/constants.d.ts +2 -3
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +18 -3
  13. package/dist/constants.js.map +1 -1
  14. package/dist/index.js +155 -24
  15. package/dist/index.js.map +1 -1
  16. package/dist/middleware/cors.js +1 -1
  17. package/dist/middleware/cors.js.map +1 -1
  18. package/dist/middleware/rate-limiter.d.ts.map +1 -1
  19. package/dist/middleware/rate-limiter.js +2 -1
  20. package/dist/middleware/rate-limiter.js.map +1 -1
  21. package/dist/middleware/tool-logging.d.ts +14 -0
  22. package/dist/middleware/tool-logging.d.ts.map +1 -1
  23. package/dist/middleware/tool-logging.js +49 -4
  24. package/dist/middleware/tool-logging.js.map +1 -1
  25. package/dist/server.d.ts +2 -2
  26. package/dist/server.d.ts.map +1 -1
  27. package/dist/server.js +29 -2
  28. package/dist/server.js.map +1 -1
  29. package/dist/services/elnora-api-client.d.ts +12 -18
  30. package/dist/services/elnora-api-client.d.ts.map +1 -1
  31. package/dist/services/elnora-api-client.js +34 -42
  32. package/dist/services/elnora-api-client.js.map +1 -1
  33. package/dist/services/error-handler.d.ts.map +1 -1
  34. package/dist/services/error-handler.js +5 -6
  35. package/dist/services/error-handler.js.map +1 -1
  36. package/dist/tools/account.d.ts +5 -0
  37. package/dist/tools/account.d.ts.map +1 -0
  38. package/dist/tools/account.js +70 -0
  39. package/dist/tools/account.js.map +1 -0
  40. package/dist/tools/api-keys.d.ts +5 -0
  41. package/dist/tools/api-keys.d.ts.map +1 -0
  42. package/dist/tools/api-keys.js +53 -0
  43. package/dist/tools/api-keys.js.map +1 -0
  44. package/dist/tools/audit.d.ts +5 -0
  45. package/dist/tools/audit.d.ts.map +1 -0
  46. package/dist/tools/audit.js +28 -0
  47. package/dist/tools/audit.js.map +1 -0
  48. package/dist/tools/feedback.d.ts +5 -0
  49. package/dist/tools/feedback.d.ts.map +1 -0
  50. package/dist/tools/feedback.js +23 -0
  51. package/dist/tools/feedback.js.map +1 -0
  52. package/dist/tools/files.d.ts.map +1 -1
  53. package/dist/tools/files.js +275 -17
  54. package/dist/tools/files.js.map +1 -1
  55. package/dist/tools/flags.d.ts +5 -0
  56. package/dist/tools/flags.d.ts.map +1 -0
  57. package/dist/tools/flags.js +36 -0
  58. package/dist/tools/flags.js.map +1 -0
  59. package/dist/tools/folders.d.ts +5 -0
  60. package/dist/tools/folders.d.ts.map +1 -0
  61. package/dist/tools/folders.js +90 -0
  62. package/dist/tools/folders.js.map +1 -0
  63. package/dist/tools/health.d.ts +5 -0
  64. package/dist/tools/health.d.ts.map +1 -0
  65. package/dist/tools/health.js +19 -0
  66. package/dist/tools/health.js.map +1 -0
  67. package/dist/tools/library.d.ts +5 -0
  68. package/dist/tools/library.d.ts.map +1 -0
  69. package/dist/tools/library.js +93 -0
  70. package/dist/tools/library.js.map +1 -0
  71. package/dist/tools/messages.d.ts.map +1 -1
  72. package/dist/tools/messages.js +3 -10
  73. package/dist/tools/messages.js.map +1 -1
  74. package/dist/tools/orgs.d.ts +5 -0
  75. package/dist/tools/orgs.d.ts.map +1 -0
  76. package/dist/tools/orgs.js +221 -0
  77. package/dist/tools/orgs.js.map +1 -0
  78. package/dist/tools/projects.d.ts +5 -0
  79. package/dist/tools/projects.d.ts.map +1 -0
  80. package/dist/tools/projects.js +177 -0
  81. package/dist/tools/projects.js.map +1 -0
  82. package/dist/tools/protocols.d.ts.map +1 -1
  83. package/dist/tools/protocols.js +9 -24
  84. package/dist/tools/protocols.js.map +1 -1
  85. package/dist/tools/scope-guard.d.ts +0 -8
  86. package/dist/tools/scope-guard.d.ts.map +1 -1
  87. package/dist/tools/scope-guard.js +85 -10
  88. package/dist/tools/scope-guard.js.map +1 -1
  89. package/dist/tools/search.d.ts +5 -0
  90. package/dist/tools/search.d.ts.map +1 -0
  91. package/dist/tools/search.js +60 -0
  92. package/dist/tools/search.js.map +1 -0
  93. package/dist/tools/tasks.d.ts.map +1 -1
  94. package/dist/tools/tasks.js +83 -29
  95. package/dist/tools/tasks.js.map +1 -1
  96. package/dist/tools/with-guard.d.ts.map +1 -1
  97. package/dist/tools/with-guard.js +21 -6
  98. package/dist/tools/with-guard.js.map +1 -1
  99. package/dist/types.d.ts +0 -43
  100. package/dist/types.d.ts.map +1 -1
  101. package/package.json +2 -1
@@ -1,41 +1,26 @@
1
1
  import { z } from "zod";
2
2
  import { handleApiError } from "../services/error-handler.js";
3
3
  import { withGuard } from "./with-guard.js";
4
+ import { LONG_REQUEST_TIMEOUT_MS } from "../constants.js";
4
5
  export function registerProtocolTools(server, getClient, getContext) {
5
6
  server.registerTool("elnora_generate_protocol", {
6
7
  title: "Generate Protocol",
7
- description: `Generate a bioprotocol using Elnora's AI agents. This is a convenience tool that creates a task, sends the description as a message, and returns the generated protocol content. This is the primary tool for hackathon partners. The operation typically takes 30-120 seconds.
8
-
9
- Examples:
10
- - "Generate a HEK 293 cell maintenance protocol"
11
- - "Create a CRISPR guide RNA design protocol for BRCA1"
12
- - "Write a western blot protocol for detecting p53 in HeLa cells"`,
8
+ description: "Generate a bioprotocol using Elnora AI. Creates a task, sends the description, and returns the result. Takes 30-120s.",
13
9
  inputSchema: {
14
10
  description: z.string().min(10).max(5000).describe("Protocol description"),
15
- title: z.string().max(200).optional().describe("Task title (defaults to description preview)"),
16
- },
17
- annotations: {
18
- readOnlyHint: false,
19
- destructiveHint: false,
20
- idempotentHint: false,
21
- openWorldHint: true,
11
+ title: z.string().max(200).optional().describe("Task title"),
22
12
  },
13
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
23
14
  }, withGuard("elnora_generate_protocol", getContext, async ({ description, title }) => {
24
15
  try {
25
16
  const client = getClient();
26
- // 1. Create a task
27
- const taskTitle = title || description.slice(0, 100);
28
- const task = await client.createTask(taskTitle);
29
- // 2. Send the description as a message
17
+ const task = await client.post("/tasks", { title: title || description.slice(0, 100) }, { timeout: LONG_REQUEST_TIMEOUT_MS });
30
18
  const response = await client.sendMessage(task.id, description);
31
- // 3. Return the result
32
- const result = {
33
- task_id: task.id,
34
- protocol_content: response.content,
35
- message_id: response.id,
36
- };
37
19
  return {
38
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
20
+ content: [{ type: "text", text: JSON.stringify({
21
+ task_id: task.id,
22
+ response,
23
+ }) }],
39
24
  };
40
25
  }
41
26
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"protocols.js","sourceRoot":"","sources":["../../src/tools/protocols.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,SAAgC,EAChC,UAAgC;IAEhC,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE;;;;;oEAKiD;QAC9D,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SAC/F;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,mBAAmB;YACnB,MAAM,SAAS,GAAG,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAEhD,uCAAuC;YACvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAEhE,uBAAuB;YACvB,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,gBAAgB,EAAE,QAAQ,CAAC,OAAO;gBAClC,UAAU,EAAE,QAAQ,CAAC,EAAE;aACxB,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"protocols.js","sourceRoot":"","sources":["../../src/tools/protocols.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,SAAgC,EAChC,UAAgC;IAEhC,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,uHAAuH;QACpI,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;SAC7D;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;KACzG,EACD,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC9I,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAChE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACtD,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,QAAQ;yBACT,CAAC,EAAE,CAAC;aACN,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1,14 +1,6 @@
1
1
  /**
2
2
  * Per-tool scope enforcement.
3
3
  * CoSAI MCP-T2: Least privilege — each tool declares required scopes.
4
- *
5
- * Scope mapping:
6
- * - elnora_list_tasks, elnora_get_task_messages → tasks:read
7
- * - elnora_create_task → tasks:write
8
- * - elnora_send_message → messages:write
9
- * - elnora_list_files, elnora_get_file_content → files:read
10
- * - elnora_upload_file → files:write
11
- * - elnora_generate_protocol → tasks:write, messages:write
12
4
  */
13
5
  export declare const TOOL_SCOPES: Record<string, string[]>;
14
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scope-guard.d.ts","sourceRoot":"","sources":["../../src/tools/scope-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAShD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInF"}
1
+ {"version":3,"file":"scope-guard.d.ts","sourceRoot":"","sources":["../../src/tools/scope-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAsGhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQnF"}
@@ -1,24 +1,96 @@
1
1
  /**
2
2
  * Per-tool scope enforcement.
3
3
  * CoSAI MCP-T2: Least privilege — each tool declares required scopes.
4
- *
5
- * Scope mapping:
6
- * - elnora_list_tasks, elnora_get_task_messages → tasks:read
7
- * - elnora_create_task → tasks:write
8
- * - elnora_send_message → messages:write
9
- * - elnora_list_files, elnora_get_file_content → files:read
10
- * - elnora_upload_file → files:write
11
- * - elnora_generate_protocol → tasks:write, messages:write
12
4
  */
13
5
  export const TOOL_SCOPES = {
6
+ // Tasks
14
7
  elnora_list_tasks: ["tasks:read"],
8
+ elnora_get_task: ["tasks:read"],
15
9
  elnora_get_task_messages: ["tasks:read"],
16
10
  elnora_create_task: ["tasks:write"],
11
+ elnora_update_task: ["tasks:write"],
12
+ elnora_archive_task: ["tasks:write"],
13
+ // Messages
17
14
  elnora_send_message: ["messages:write"],
15
+ // Files
18
16
  elnora_list_files: ["files:read"],
17
+ elnora_get_file: ["files:read"],
19
18
  elnora_get_file_content: ["files:read"],
19
+ elnora_get_file_versions: ["files:read"],
20
+ elnora_get_version_content: ["files:read"],
20
21
  elnora_upload_file: ["files:write"],
22
+ elnora_create_file: ["files:write"],
23
+ elnora_update_file: ["files:write"],
24
+ elnora_archive_file: ["files:write"],
25
+ elnora_download_file: ["files:read"],
26
+ elnora_create_version: ["files:write"],
27
+ elnora_restore_version: ["files:write"],
28
+ elnora_promote_file: ["files:write"],
29
+ elnora_fork_file: ["files:write"],
30
+ elnora_create_working_copy: ["files:write"],
31
+ elnora_commit_working_copy: ["files:write"],
32
+ elnora_initiate_upload: ["files:write"],
33
+ elnora_confirm_upload: ["files:write"],
34
+ // Projects
35
+ elnora_list_projects: ["projects:read"],
36
+ elnora_get_project: ["projects:read"],
37
+ elnora_create_project: ["projects:write"],
38
+ elnora_update_project: ["projects:write"],
39
+ elnora_archive_project: ["projects:write"],
40
+ elnora_list_project_members: ["projects:read"],
41
+ elnora_add_project_member: ["projects:write"],
42
+ elnora_update_project_member_role: ["projects:write"],
43
+ elnora_remove_project_member: ["projects:write"],
44
+ elnora_leave_project: ["projects:write"],
45
+ // Search
46
+ elnora_search_tasks: ["search:read"],
47
+ elnora_search_files: ["search:read"],
48
+ elnora_search_all: ["search:read"],
49
+ // Organizations
50
+ elnora_list_orgs: ["orgs:read"],
51
+ elnora_get_org: ["orgs:read"],
52
+ elnora_create_org: ["orgs:write"],
53
+ elnora_update_org: ["orgs:write"],
54
+ elnora_list_org_members: ["orgs:read"],
55
+ elnora_update_org_member_role: ["orgs:write"],
56
+ elnora_remove_org_member: ["orgs:write"],
57
+ elnora_get_org_billing: ["orgs:read"],
58
+ elnora_invite_org_member: ["orgs:write"],
59
+ elnora_list_org_invitations: ["orgs:read"],
60
+ elnora_cancel_org_invitation: ["orgs:write"],
61
+ elnora_get_invitation_info: ["orgs:read"],
62
+ elnora_accept_invitation: ["orgs:write"],
63
+ // Folders
64
+ elnora_list_folders: ["folders:read"],
65
+ elnora_create_folder: ["folders:write"],
66
+ elnora_rename_folder: ["folders:write"],
67
+ elnora_move_folder: ["folders:write"],
68
+ elnora_delete_folder: ["folders:write"],
69
+ // Library
70
+ elnora_list_library_files: ["library:read"],
71
+ elnora_list_library_folders: ["library:read"],
72
+ elnora_create_library_folder: ["library:write"],
73
+ elnora_rename_library_folder: ["library:write"],
74
+ elnora_delete_library_folder: ["library:write"],
75
+ // API Keys
76
+ elnora_list_api_keys: ["api-keys:read"],
77
+ elnora_create_api_key: ["api-keys:write"],
78
+ elnora_revoke_api_key: ["api-keys:write"],
79
+ // Audit
80
+ elnora_list_audit_log: ["audit:read"],
81
+ // Account
82
+ elnora_get_account: ["account:read"],
83
+ elnora_update_account: ["account:write"],
84
+ elnora_list_agreements: ["account:read"],
85
+ elnora_accept_terms: ["account:write"],
86
+ // Feedback
87
+ elnora_submit_feedback: ["feedback:write"],
88
+ // Protocol (convenience)
21
89
  elnora_generate_protocol: ["tasks:write", "messages:write"],
90
+ // Flags & Health — no scopes required (public endpoints)
91
+ elnora_list_flags: [],
92
+ elnora_get_flag: [],
93
+ elnora_health_check: [],
22
94
  };
23
95
  /**
24
96
  * Check if the given scopes satisfy the required scopes for a tool.
@@ -26,8 +98,11 @@ export const TOOL_SCOPES = {
26
98
  */
27
99
  export function checkToolScopes(toolName, grantedScopes) {
28
100
  const required = TOOL_SCOPES[toolName];
29
- if (!required)
30
- return []; // Unknown tool no scope check
101
+ if (!required) {
102
+ // Deny-by-default: unknown tools must not bypass scope checks (CoSAI MCP-T2)
103
+ return ["unknown_tool"];
104
+ }
105
+ // Empty array means no scopes required (e.g. health check) — always allowed
31
106
  return required.filter((s) => !grantedScopes.includes(s));
32
107
  }
33
108
  //# sourceMappingURL=scope-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope-guard.js","sourceRoot":"","sources":["../../src/tools/scope-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,WAAW,GAA6B;IACnD,iBAAiB,EAAE,CAAC,YAAY,CAAC;IACjC,wBAAwB,EAAE,CAAC,YAAY,CAAC;IACxC,kBAAkB,EAAE,CAAC,aAAa,CAAC;IACnC,mBAAmB,EAAE,CAAC,gBAAgB,CAAC;IACvC,iBAAiB,EAAE,CAAC,YAAY,CAAC;IACjC,uBAAuB,EAAE,CAAC,YAAY,CAAC;IACvC,kBAAkB,EAAE,CAAC,aAAa,CAAC;IACnC,wBAAwB,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;CAC5D,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,aAAuB;IACvE,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC,CAAC,gCAAgC;IAC1D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"scope-guard.js","sourceRoot":"","sources":["../../src/tools/scope-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ElnoraApiClient } from "../services/elnora-api-client.js";
3
+ import { RequestContext } from "../server.js";
4
+ export declare function registerSearchTools(server: McpServer, getClient: () => ElnoraApiClient, getContext: () => RequestContext): void;
5
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,eAAe,EAChC,UAAU,EAAE,MAAM,cAAc,GAC/B,IAAI,CAkEN"}
@@ -0,0 +1,60 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../services/error-handler.js";
3
+ import { withGuard } from "./with-guard.js";
4
+ export function registerSearchTools(server, getClient, getContext) {
5
+ server.registerTool("elnora_search_tasks", {
6
+ title: "Search Tasks",
7
+ description: "Full-text search across tasks.",
8
+ inputSchema: {
9
+ query: z.string().min(1).max(1000).describe("Search query"),
10
+ page: z.number().int().min(1).default(1).describe("Page number"),
11
+ page_size: z.number().int().min(1).max(100).default(25).describe("Results per page"),
12
+ },
13
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
14
+ }, withGuard("elnora_search_tasks", getContext, async ({ query, page, page_size }) => {
15
+ try {
16
+ const result = await getClient().get("/search/tasks", { q: query, page, pageSize: page_size });
17
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
18
+ }
19
+ catch (error) {
20
+ return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
21
+ }
22
+ }));
23
+ server.registerTool("elnora_search_files", {
24
+ title: "Search Files",
25
+ description: "Full-text search across files.",
26
+ inputSchema: {
27
+ query: z.string().min(1).max(1000).describe("Search query"),
28
+ page: z.number().int().min(1).default(1).describe("Page number"),
29
+ page_size: z.number().int().min(1).max(100).default(25).describe("Results per page"),
30
+ },
31
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
32
+ }, withGuard("elnora_search_files", getContext, async ({ query, page, page_size }) => {
33
+ try {
34
+ const result = await getClient().get("/search/files", { q: query, page, pageSize: page_size });
35
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
36
+ }
37
+ catch (error) {
38
+ return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
39
+ }
40
+ }));
41
+ server.registerTool("elnora_search_all", {
42
+ title: "Search All",
43
+ description: "Full-text search across all resources (tasks, files, etc.).",
44
+ inputSchema: {
45
+ query: z.string().min(1).max(1000).describe("Search query"),
46
+ page: z.number().int().min(1).default(1).describe("Page number"),
47
+ page_size: z.number().int().min(1).max(100).default(25).describe("Results per page"),
48
+ },
49
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
50
+ }, withGuard("elnora_search_all", getContext, async ({ query, page, page_size }) => {
51
+ try {
52
+ const result = await getClient().get("/search", { q: query, page, pageSize: page_size });
53
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
54
+ }
55
+ catch (error) {
56
+ return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
57
+ }
58
+ }));
59
+ }
60
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,eAAe,EAChC,UAAU,EAAE,MAAM,cAAc,GAC/B,IAAI,CA8EN"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,eAAe,EAChC,UAAU,EAAE,MAAM,cAAc,GAC/B,IAAI,CAyIN"}
@@ -4,22 +4,25 @@ import { withGuard } from "./with-guard.js";
4
4
  export function registerTaskTools(server, getClient, getContext) {
5
5
  server.registerTool("elnora_create_task", {
6
6
  title: "Create Task",
7
- description: "Create a new task (conversation) in Elnora. Tasks are the primary unit of interaction — each task is a chat thread where you can send messages and receive AI agent responses.",
7
+ description: "Create a new task (conversation thread). Each task is a chat where you send messages and receive AI responses.",
8
8
  inputSchema: {
9
- title: z.string().max(200).optional().describe("Task title (e.g., 'HEK 293 protocol generation')"),
9
+ project_id: z.string().uuid().optional().describe("Project UUID (optional)"),
10
+ title: z.string().max(200).optional().describe("Task title"),
11
+ initial_message: z.string().max(50_000).optional().describe("Initial message to send"),
12
+ context_file_ids: z.array(z.string().uuid()).optional().describe("File IDs for context"),
10
13
  },
11
- annotations: {
12
- readOnlyHint: false,
13
- destructiveHint: false,
14
- idempotentHint: false,
15
- openWorldHint: true,
16
- },
17
- }, withGuard("elnora_create_task", getContext, async ({ title }) => {
14
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
15
+ }, withGuard("elnora_create_task", getContext, async ({ project_id, title, initial_message, context_file_ids }) => {
18
16
  try {
19
- const task = await getClient().createTask(title);
20
- return {
21
- content: [{ type: "text", text: JSON.stringify(task, null, 2) }],
22
- };
17
+ const body = { title: title || "New Task" };
18
+ if (project_id)
19
+ body.projectId = project_id;
20
+ if (initial_message)
21
+ body.initialMessage = initial_message;
22
+ if (context_file_ids)
23
+ body.contextFileIds = context_file_ids;
24
+ const result = await getClient().post("/tasks", body);
25
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
23
26
  }
24
27
  catch (error) {
25
28
  return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
@@ -27,19 +30,35 @@ export function registerTaskTools(server, getClient, getContext) {
27
30
  }));
28
31
  server.registerTool("elnora_list_tasks", {
29
32
  title: "List Tasks",
30
- description: "List tasks in your Elnora workspace. Returns task summaries with status and timestamps.",
33
+ description: "List tasks. Optionally filter by project or status.",
31
34
  inputSchema: {
32
- status: z.string().optional().describe("Filter by task status"),
33
- limit: z.number().int().min(1).max(100).default(20).describe("Max results"),
34
- offset: z.number().int().min(0).default(0).describe("Pagination offset"),
35
+ project_id: z.string().uuid().optional().describe("Filter by project UUID"),
36
+ status: z.string().optional().describe("Filter by status"),
37
+ page: z.number().int().min(1).default(1).describe("Page number"),
38
+ page_size: z.number().int().min(1).max(100).default(25).describe("Results per page"),
35
39
  },
36
40
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
37
- }, withGuard("elnora_list_tasks", getContext, async ({ status, limit, offset }) => {
41
+ }, withGuard("elnora_list_tasks", getContext, async ({ project_id, status, page, page_size }) => {
38
42
  try {
39
- const result = await getClient().listTasks(status, limit, offset);
40
- return {
41
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
42
- };
43
+ const path = project_id ? `/projects/${project_id}/tasks` : "/tasks";
44
+ const result = await getClient().get(path, { page, pageSize: page_size, status });
45
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
46
+ }
47
+ catch (error) {
48
+ return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
49
+ }
50
+ }));
51
+ server.registerTool("elnora_get_task", {
52
+ title: "Get Task",
53
+ description: "Get a single task by UUID.",
54
+ inputSchema: {
55
+ task_id: z.string().uuid().describe("Task UUID"),
56
+ },
57
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
58
+ }, withGuard("elnora_get_task", getContext, async ({ task_id }) => {
59
+ try {
60
+ const result = await getClient().get(`/tasks/${task_id}`);
61
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
43
62
  }
44
63
  catch (error) {
45
64
  return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
@@ -47,19 +66,54 @@ export function registerTaskTools(server, getClient, getContext) {
47
66
  }));
48
67
  server.registerTool("elnora_get_task_messages", {
49
68
  title: "Get Task Messages",
50
- description: "Get the message history for a specific task. Returns user and assistant messages in chronological order.",
69
+ description: "Get message history for a task.",
51
70
  inputSchema: {
52
71
  task_id: z.string().uuid().describe("Task UUID"),
53
72
  limit: z.number().int().min(1).max(100).default(50).describe("Max messages"),
54
- offset: z.number().int().min(0).default(0).describe("Pagination offset"),
73
+ cursor: z.string().optional().describe("Cursor for pagination"),
55
74
  },
56
75
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
57
- }, withGuard("elnora_get_task_messages", getContext, async ({ task_id, limit, offset }) => {
76
+ }, withGuard("elnora_get_task_messages", getContext, async ({ task_id, limit, cursor }) => {
77
+ try {
78
+ const params = { limit };
79
+ if (cursor)
80
+ params.cursor = cursor;
81
+ const result = await getClient().get(`/tasks/${task_id}/messages`, params);
82
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
83
+ }
84
+ catch (error) {
85
+ return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
86
+ }
87
+ }));
88
+ server.registerTool("elnora_update_task", {
89
+ title: "Update Task",
90
+ description: "Update task title or status.",
91
+ inputSchema: {
92
+ task_id: z.string().uuid().describe("Task UUID"),
93
+ title: z.string().max(200).optional().describe("New title"),
94
+ status: z.string().optional().describe("New status"),
95
+ },
96
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
97
+ }, withGuard("elnora_update_task", getContext, async ({ task_id, title, status }) => {
98
+ try {
99
+ const result = await getClient().put(`/tasks/${task_id}`, { title, status });
100
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
101
+ }
102
+ catch (error) {
103
+ return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
104
+ }
105
+ }));
106
+ server.registerTool("elnora_archive_task", {
107
+ title: "Archive Task",
108
+ description: "Archive (delete) a task.",
109
+ inputSchema: {
110
+ task_id: z.string().uuid().describe("Task UUID"),
111
+ },
112
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: true },
113
+ }, withGuard("elnora_archive_task", getContext, async ({ task_id }) => {
58
114
  try {
59
- const result = await getClient().getTaskMessages(task_id, limit, offset);
60
- return {
61
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
62
- };
115
+ await getClient().del(`/tasks/${task_id}`);
116
+ return { content: [{ type: "text", text: JSON.stringify({ archived: true, taskId: task_id }) }] };
63
117
  }
64
118
  catch (error) {
65
119
  return { content: [{ type: "text", text: handleApiError(error) }], isError: true };
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"with-guard.d.ts","sourceRoot":"","sources":["../../src/tools/with-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,cAAc,EAChC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAChG,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA0B1F"}
1
+ {"version":3,"file":"with-guard.d.ts","sourceRoot":"","sources":["../../src/tools/with-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,cAAc,EAChC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAChG,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAwC1F"}
@@ -21,12 +21,27 @@ export function withGuard(toolName, getContext, handler) {
21
21
  };
22
22
  }
23
23
  // Execute handler
24
- const result = await handler(params);
25
- logToolInvocation(toolName, params, ctx.clientId, {
26
- success: !result.isError,
27
- durationMs: Date.now() - start,
28
- });
29
- return result;
24
+ try {
25
+ const result = await handler(params);
26
+ logToolInvocation(toolName, params, ctx.clientId, {
27
+ success: !result.isError,
28
+ durationMs: Date.now() - start,
29
+ });
30
+ return result;
31
+ }
32
+ catch (error) {
33
+ logToolInvocation(toolName, params, ctx.clientId, {
34
+ success: false,
35
+ durationMs: Date.now() - start,
36
+ });
37
+ return {
38
+ content: [{
39
+ type: "text",
40
+ text: `Error: Unexpected error in ${toolName}: ${error instanceof Error ? error.message : String(error)}`,
41
+ }],
42
+ isError: true,
43
+ };
44
+ }
30
45
  };
31
46
  }
32
47
  //# sourceMappingURL=with-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-guard.js","sourceRoot":"","sources":["../../src/tools/with-guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,QAAgB,EAChB,UAAgC,EAChC,OAAiG;IAEjG,OAAO,KAAK,EAAE,MAAS,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,oBAAoB;QACpB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;YACtG,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uCAAuC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,6CAA6C;qBAC7G,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE;YAChD,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;YACxB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC/B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"with-guard.js","sourceRoot":"","sources":["../../src/tools/with-guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,QAAgB,EAChB,UAAgC,EAChC,OAAiG;IAEjG,OAAO,KAAK,EAAE,MAAS,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,oBAAoB;QACpB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;YACtG,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uCAAuC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,6CAA6C;qBAC7G,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE;gBAChD,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;gBACxB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE;gBAChD,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,8BAA8B,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC1G,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  export interface ElnoraConfig {
2
2
  apiUrl: string;
3
- authUrl: string;
4
3
  tokenValidationUrl: string;
5
4
  port: number;
6
5
  /** Public-facing base URL of the MCP server (e.g. https://mcp.elnora.ai) */
@@ -14,48 +13,6 @@ export interface ElnoraConfig {
14
13
  /** Client secret for the MCP server as an OAuth client of the Elnora platform */
15
14
  platformClientSecret: string;
16
15
  }
17
- export interface AuthContext {
18
- userId: number;
19
- organizationId: string;
20
- scopes: string;
21
- tokenType: string;
22
- }
23
- export interface ElnoraTask {
24
- id: string;
25
- title: string;
26
- status: string;
27
- createdAt: string;
28
- updatedAt: string;
29
- }
30
- export interface ElnoraMessage {
31
- id: string;
32
- taskId: string;
33
- role: "user" | "assistant";
34
- content: string;
35
- createdAt: string;
36
- agentName?: string;
37
- }
38
- export interface ElnoraFile {
39
- id: string;
40
- name: string;
41
- fileType: string;
42
- visibility: string;
43
- createdAt: string;
44
- latestVersionId?: string;
45
- }
46
- export interface TokenValidationResult {
47
- valid: boolean;
48
- userId?: number;
49
- organizationId?: string;
50
- scopes?: string;
51
- tokenType?: string;
52
- }
53
- export interface PaginatedResponse<T> {
54
- items: T[];
55
- totalCount: number;
56
- hasMore: boolean;
57
- nextOffset?: number;
58
- }
59
16
  /** Stored authorization session for PKCE flow */
60
17
  export interface AuthorizationSession {
61
18
  clientId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elnora-ai/mcp-server",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "mcpName": "io.github.Elnora-AI/elnora-mcp-server",
5
5
  "description": "MCP server for Elnora Platform — AI-powered bioprotocol optimization",
6
6
  "type": "module",
@@ -43,6 +43,7 @@
43
43
  "@modelcontextprotocol/sdk": "^1.27.0",
44
44
  "axios": "^1.8.0",
45
45
  "express": "^5.1.0",
46
+ "express-rate-limit": "^8.3.0",
46
47
  "zod": "^3.24.0"
47
48
  },
48
49
  "devDependencies": {