@grigoreo-dev/otask-mcp 1.2.0 → 1.3.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 +33 -19
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp-http.js +30 -10
- package/dist/mcp-http.js.map +1 -1
- package/dist/schemas/task.d.ts +27 -27
- package/dist/schemas/task.d.ts.map +1 -1
- package/dist/schemas/task.js +9 -3
- package/dist/schemas/task.js.map +1 -1
- package/dist/schemas/workspace.d.ts +21 -21
- package/dist/schemas/workspace.d.ts.map +1 -1
- package/dist/schemas/workspace.js +8 -3
- package/dist/schemas/workspace.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -4
- package/dist/server.js.map +1 -1
- package/dist/services/scope.d.ts +45 -0
- package/dist/services/scope.d.ts.map +1 -0
- package/dist/services/scope.js +147 -0
- package/dist/services/scope.js.map +1 -0
- package/dist/tools/add-comment.d.ts +1 -1
- package/dist/tools/add-comment.d.ts.map +1 -1
- package/dist/tools/add-comment.js +8 -5
- package/dist/tools/add-comment.js.map +1 -1
- package/dist/tools/archive-task.d.ts +1 -1
- package/dist/tools/archive-task.d.ts.map +1 -1
- package/dist/tools/archive-task.js +8 -5
- package/dist/tools/archive-task.js.map +1 -1
- package/dist/tools/create-task.d.ts +1 -1
- package/dist/tools/create-task.d.ts.map +1 -1
- package/dist/tools/create-task.js +7 -7
- package/dist/tools/create-task.js.map +1 -1
- package/dist/tools/get-task.d.ts +1 -1
- package/dist/tools/get-task.d.ts.map +1 -1
- package/dist/tools/get-task.js +6 -4
- package/dist/tools/get-task.js.map +1 -1
- package/dist/tools/list-board.d.ts +1 -1
- package/dist/tools/list-board.d.ts.map +1 -1
- package/dist/tools/list-board.js +13 -9
- package/dist/tools/list-board.js.map +1 -1
- package/dist/tools/list-comments.d.ts +1 -1
- package/dist/tools/list-comments.d.ts.map +1 -1
- package/dist/tools/list-comments.js +8 -5
- package/dist/tools/list-comments.js.map +1 -1
- package/dist/tools/list-members.d.ts +1 -1
- package/dist/tools/list-members.d.ts.map +1 -1
- package/dist/tools/list-members.js +5 -3
- package/dist/tools/list-members.js.map +1 -1
- package/dist/tools/list-project-tasks.d.ts +1 -1
- package/dist/tools/list-project-tasks.d.ts.map +1 -1
- package/dist/tools/list-project-tasks.js +6 -5
- package/dist/tools/list-project-tasks.js.map +1 -1
- package/dist/tools/list-projects.d.ts +1 -1
- package/dist/tools/list-projects.d.ts.map +1 -1
- package/dist/tools/list-projects.js +5 -3
- package/dist/tools/list-projects.js.map +1 -1
- package/dist/tools/list-tags.d.ts +1 -1
- package/dist/tools/list-tags.d.ts.map +1 -1
- package/dist/tools/list-tags.js +5 -3
- package/dist/tools/list-tags.js.map +1 -1
- package/dist/tools/move-task.d.ts +1 -1
- package/dist/tools/move-task.d.ts.map +1 -1
- package/dist/tools/move-task.js +8 -5
- package/dist/tools/move-task.js.map +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/update-task.d.ts +1 -1
- package/dist/tools/update-task.d.ts.map +1 -1
- package/dist/tools/update-task.js +10 -7
- package/dist/tools/update-task.js.map +1 -1
- package/package.json +2 -2
- package/dist/http-server.d.ts +0 -3
- package/dist/http-server.d.ts.map +0 -1
- package/dist/http-server.js +0 -92
- package/dist/http-server.js.map +0 -1
- package/dist/proxy/headers.d.ts +0 -3
- package/dist/proxy/headers.d.ts.map +0 -1
- package/dist/proxy/headers.js +0 -37
- package/dist/proxy/headers.js.map +0 -1
- package/dist/proxy/read-body.d.ts +0 -3
- package/dist/proxy/read-body.d.ts.map +0 -1
- package/dist/proxy/read-body.js +0 -18
- package/dist/proxy/read-body.js.map +0 -1
- package/dist/services/http-auth-context.d.ts +0 -7
- package/dist/services/http-auth-context.d.ts.map +0 -1
- package/dist/services/http-auth-context.js +0 -9
- package/dist/services/http-auth-context.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { WsSlugSchema, } from "../schemas/workspace.js";
|
|
2
2
|
import { agentListResult } from "../services/format.js";
|
|
3
|
+
import { resolveWsSlug } from "../services/scope.js";
|
|
3
4
|
import { compactMember } from "../services/task-mapper.js";
|
|
4
5
|
import { jsonToolResult, toolError } from "./helpers.js";
|
|
5
|
-
export function createListMembersTool({ api, }) {
|
|
6
|
+
export function createListMembersTool({ api, scope, }) {
|
|
6
7
|
return {
|
|
7
8
|
name: "otask_list_members",
|
|
8
9
|
config: {
|
|
@@ -10,7 +11,7 @@ export function createListMembersTool({ api, }) {
|
|
|
10
11
|
description: `List workspace members (performers for assignment).
|
|
11
12
|
|
|
12
13
|
Args:
|
|
13
|
-
- ws_slug:
|
|
14
|
+
- ws_slug: optional if OTASK_DEFAULT_WS is set
|
|
14
15
|
|
|
15
16
|
Returns compact members: id, name, email, status_text.
|
|
16
17
|
|
|
@@ -25,7 +26,8 @@ Docs: https://api.otask.ru/docs`,
|
|
|
25
26
|
},
|
|
26
27
|
handler: async ({ ws_slug }) => {
|
|
27
28
|
try {
|
|
28
|
-
const
|
|
29
|
+
const ws = resolveWsSlug(ws_slug, scope);
|
|
30
|
+
const members = await api.listMembers(ws);
|
|
29
31
|
const items = members.map((m) => compactMember((m ?? {})));
|
|
30
32
|
const payload = agentListResult(`${items.length} member(s)`, items);
|
|
31
33
|
return jsonToolResult(payload, payload);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-members.js","sourceRoot":"","sources":["../../src/tools/list-members.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,qBAAqB,CAAC,EACpC,GAAG,
|
|
1
|
+
{"version":3,"file":"list-members.js","sourceRoot":"","sources":["../../src/tools/list-members.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,qBAAqB,CAAC,EACpC,GAAG,EACH,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE;YACN,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE;;;;;;;gCAOa;YAC1B,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;aACpB;SACF;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,aAAa,CACX,CAAC,CAAC,IAAI,EAAE,CAMP,CACF,CACF,CAAC;gBACF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,KAAK,CAAC,MAAM,YAAY,EAAE,KAAK,CAAC,CAAC;gBACpE,OAAO,cAAc,CAAC,OAAO,EAAE,OAA6C,CAAC,CAAC;YAChF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type ListProjectTasksInput } from "../schemas/workspace.js";
|
|
2
2
|
import type { ToolDefinition, ToolDeps } from "./types.js";
|
|
3
|
-
export declare function createListProjectTasksTool({ api,
|
|
3
|
+
export declare function createListProjectTasksTool({ api, scope, }: ToolDeps): ToolDefinition<ListProjectTasksInput>;
|
|
4
4
|
//# sourceMappingURL=list-project-tasks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-project-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/list-project-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"list-project-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/list-project-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAQjC,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,0BAA0B,CAAC,EACzC,GAAG,EACH,KAAK,GACN,EAAE,QAAQ,GAAG,cAAc,CAAC,qBAAqB,CAAC,CA4DlD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ListProjectTasksInputSchema, } from "../schemas/workspace.js";
|
|
2
2
|
import { agentListResult } from "../services/format.js";
|
|
3
|
-
import {
|
|
3
|
+
import { resolveProjectSlug, resolveWsSlug, } from "../services/scope.js";
|
|
4
4
|
import { compactTask } from "../services/task-mapper.js";
|
|
5
5
|
import { jsonToolResult, toolError } from "./helpers.js";
|
|
6
|
-
export function createListProjectTasksTool({ api,
|
|
6
|
+
export function createListProjectTasksTool({ api, scope, }) {
|
|
7
7
|
return {
|
|
8
8
|
name: "otask_list_project_tasks",
|
|
9
9
|
config: {
|
|
@@ -11,7 +11,7 @@ export function createListProjectTasksTool({ api, guard, }) {
|
|
|
11
11
|
description: `List tasks in a project. Project must be on the allow-list when configured.
|
|
12
12
|
|
|
13
13
|
Args:
|
|
14
|
-
- ws_slug, project_slug:
|
|
14
|
+
- ws_slug, project_slug: optional if OTASK_DEFAULT_WS / OTASK_DEFAULT_PROJECT set
|
|
15
15
|
- page, status_id, board_id, board_column_id: optional filters
|
|
16
16
|
|
|
17
17
|
Returns compact tasks via agent list envelope.
|
|
@@ -27,7 +27,8 @@ Docs: https://api.otask.ru/docs`,
|
|
|
27
27
|
},
|
|
28
28
|
handler: async ({ ws_slug, project_slug, page, status_id, board_id, board_column_id, }) => {
|
|
29
29
|
try {
|
|
30
|
-
|
|
30
|
+
const ws = resolveWsSlug(ws_slug, scope);
|
|
31
|
+
const project = await resolveProjectSlug(project_slug, scope, () => api.listProjects(ws));
|
|
31
32
|
const query = {};
|
|
32
33
|
if (page !== undefined)
|
|
33
34
|
query.page = page;
|
|
@@ -38,7 +39,7 @@ Docs: https://api.otask.ru/docs`,
|
|
|
38
39
|
if (board_column_id !== undefined)
|
|
39
40
|
query.board_column_id = board_column_id;
|
|
40
41
|
const hasQuery = Object.keys(query).length > 0;
|
|
41
|
-
const result = await api.listProjectTasks(
|
|
42
|
+
const result = await api.listProjectTasks(ws, project, hasQuery ? query : undefined);
|
|
42
43
|
const items = result.tasks.map((t) => compactTask(t));
|
|
43
44
|
const payload = agentListResult(`${items.length} task(s)`, items, result.meta);
|
|
44
45
|
return jsonToolResult(payload, payload);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-project-tasks.js","sourceRoot":"","sources":["../../src/tools/list-project-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"list-project-tasks.js","sourceRoot":"","sources":["../../src/tools/list-project-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,0BAA0B,CAAC,EACzC,GAAG,EACH,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE;YACN,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE;;;;;;;;gCAQa;YAC1B,WAAW,EAAE,2BAA2B;YACxC,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;aACpB;SACF;QACD,OAAO,EAAE,KAAK,EAAE,EACd,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,eAAe,GAChB,EAAE,EAAE;YACH,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CACtC,YAAY,EACZ,KAAK,EACL,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAC3B,CAAC;gBACF,MAAM,KAAK,GAAgD,EAAE,CAAC;gBAC9D,IAAI,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC1C,IAAI,SAAS,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;gBACzD,IAAI,QAAQ,KAAK,SAAS;oBAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACtD,IAAI,eAAe,KAAK,SAAS;oBAAE,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;gBAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CACvC,EAAE,EACF,OAAO,EACP,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC7B,CAAC;gBACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,eAAe,CAC7B,GAAG,KAAK,CAAC,MAAM,UAAU,EACzB,KAAK,EACL,MAAM,CAAC,IAAI,CACZ,CAAC;gBACF,OAAO,cAAc,CAAC,OAAO,EAAE,OAA6C,CAAC,CAAC;YAChF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type WsSlugInput } from "../schemas/workspace.js";
|
|
2
2
|
import type { ToolDefinition, ToolDeps } from "./types.js";
|
|
3
|
-
export declare function createListProjectsTool({ api, guard, }: ToolDeps): ToolDefinition<WsSlugInput>;
|
|
3
|
+
export declare function createListProjectsTool({ api, guard, scope, }: ToolDeps): ToolDefinition<WsSlugInput>;
|
|
4
4
|
//# sourceMappingURL=list-projects.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-projects.d.ts","sourceRoot":"","sources":["../../src/tools/list-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"list-projects.d.ts","sourceRoot":"","sources":["../../src/tools/list-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,sBAAsB,CAAC,EACrC,GAAG,EACH,KAAK,EACL,KAAK,GACN,EAAE,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAqCxC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { WsSlugSchema, } from "../schemas/workspace.js";
|
|
2
2
|
import { agentListResult } from "../services/format.js";
|
|
3
|
+
import { resolveWsSlug } from "../services/scope.js";
|
|
3
4
|
import { compactProject } from "../services/task-mapper.js";
|
|
4
5
|
import { jsonToolResult, toolError } from "./helpers.js";
|
|
5
|
-
export function createListProjectsTool({ api, guard, }) {
|
|
6
|
+
export function createListProjectsTool({ api, guard, scope, }) {
|
|
6
7
|
return {
|
|
7
8
|
name: "otask_list_projects",
|
|
8
9
|
config: {
|
|
@@ -10,7 +11,7 @@ export function createListProjectsTool({ api, guard, }) {
|
|
|
10
11
|
description: `List projects in a workspace. Results are filtered by the project allow-list when configured.
|
|
11
12
|
|
|
12
13
|
Args:
|
|
13
|
-
- ws_slug:
|
|
14
|
+
- ws_slug: optional if OTASK_DEFAULT_WS is set
|
|
14
15
|
|
|
15
16
|
Returns compact projects: id, slug, name, status_id.
|
|
16
17
|
|
|
@@ -25,7 +26,8 @@ Docs: https://api.otask.ru/docs`,
|
|
|
25
26
|
},
|
|
26
27
|
handler: async ({ ws_slug }) => {
|
|
27
28
|
try {
|
|
28
|
-
const
|
|
29
|
+
const ws = resolveWsSlug(ws_slug, scope);
|
|
30
|
+
const projects = await api.listProjects(ws);
|
|
29
31
|
const allowed = guard.filterProjects(projects);
|
|
30
32
|
const items = allowed.map((p) => compactProject(p));
|
|
31
33
|
const payload = agentListResult(`${items.length} project(s)`, items);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-projects.js","sourceRoot":"","sources":["../../src/tools/list-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,sBAAsB,CAAC,EACrC,GAAG,EACH,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE;YACN,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EAAE;;;;;;;gCAOa;YAC1B,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;aACpB;SACF;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"list-projects.js","sourceRoot":"","sources":["../../src/tools/list-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,sBAAsB,CAAC,EACrC,GAAG,EACH,KAAK,EACL,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE;YACN,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EAAE;;;;;;;gCAOa;YAC1B,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;aACpB;SACF;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,eAAe,CAC7B,GAAG,KAAK,CAAC,MAAM,aAAa,EAC5B,KAAK,CACN,CAAC;gBACF,OAAO,cAAc,CAAC,OAAO,EAAE,OAA6C,CAAC,CAAC;YAChF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type WsSlugInput } from "../schemas/workspace.js";
|
|
2
2
|
import type { ToolDefinition, ToolDeps } from "./types.js";
|
|
3
|
-
export declare function createListTagsTool({ api, }: ToolDeps): ToolDefinition<WsSlugInput>;
|
|
3
|
+
export declare function createListTagsTool({ api, scope, }: ToolDeps): ToolDefinition<WsSlugInput>;
|
|
4
4
|
//# sourceMappingURL=list-tags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-tags.d.ts","sourceRoot":"","sources":["../../src/tools/list-tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"list-tags.d.ts","sourceRoot":"","sources":["../../src/tools/list-tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,GACN,EAAE,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAmCxC"}
|
package/dist/tools/list-tags.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { WsSlugSchema, } from "../schemas/workspace.js";
|
|
2
2
|
import { agentListResult } from "../services/format.js";
|
|
3
|
+
import { resolveWsSlug } from "../services/scope.js";
|
|
3
4
|
import { compactTag } from "../services/task-mapper.js";
|
|
4
5
|
import { jsonToolResult, toolError } from "./helpers.js";
|
|
5
|
-
export function createListTagsTool({ api, }) {
|
|
6
|
+
export function createListTagsTool({ api, scope, }) {
|
|
6
7
|
return {
|
|
7
8
|
name: "otask_list_tags",
|
|
8
9
|
config: {
|
|
@@ -10,7 +11,7 @@ export function createListTagsTool({ api, }) {
|
|
|
10
11
|
description: `List workspace tags for labeling tasks.
|
|
11
12
|
|
|
12
13
|
Args:
|
|
13
|
-
- ws_slug:
|
|
14
|
+
- ws_slug: optional if OTASK_DEFAULT_WS is set
|
|
14
15
|
|
|
15
16
|
Returns compact tags (id, name, slug?, color?) as agent list envelope.
|
|
16
17
|
|
|
@@ -25,7 +26,8 @@ Docs: https://api.otask.ru/docs`,
|
|
|
25
26
|
},
|
|
26
27
|
handler: async ({ ws_slug }) => {
|
|
27
28
|
try {
|
|
28
|
-
const
|
|
29
|
+
const ws = resolveWsSlug(ws_slug, scope);
|
|
30
|
+
const tags = await api.listTags(ws);
|
|
29
31
|
const items = tags.map((t) => compactTag(t));
|
|
30
32
|
const payload = agentListResult(`${items.length} tag(s)`, items);
|
|
31
33
|
return jsonToolResult(payload, payload);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-tags.js","sourceRoot":"","sources":["../../src/tools/list-tags.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,kBAAkB,CAAC,EACjC,GAAG,
|
|
1
|
+
{"version":3,"file":"list-tags.js","sourceRoot":"","sources":["../../src/tools/list-tags.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE;YACN,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE;;;;;;;gCAOa;YAC1B,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;aACpB;SACF;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3B,UAAU,CAAC,CAAgE,CAAC,CAC7E,CAAC;gBACF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,KAAK,CAAC,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC;gBACjE,OAAO,cAAc,CAAC,OAAO,EAAE,OAA6C,CAAC,CAAC;YAChF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type MoveTaskInput } from "../schemas/task.js";
|
|
2
2
|
import type { ToolDefinition, ToolDeps } from "./types.js";
|
|
3
|
-
export declare function createMoveTaskTool({ api, guard, }: ToolDeps): ToolDefinition<MoveTaskInput>;
|
|
3
|
+
export declare function createMoveTaskTool({ api, guard, scope, }: ToolDeps): ToolDefinition<MoveTaskInput>;
|
|
4
4
|
//# sourceMappingURL=move-task.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-task.d.ts","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"move-task.d.ts","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,EACL,KAAK,GACN,EAAE,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,CA+D1C"}
|
package/dist/tools/move-task.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { MoveTaskInputSchema, } from "../schemas/task.js";
|
|
2
2
|
import { assertProjectIdAllowed } from "../services/project-guard.js";
|
|
3
|
+
import { resolveWsSlug } from "../services/scope.js";
|
|
3
4
|
import { buildUpdateBodyFromTask, compactTask, } from "../services/task-mapper.js";
|
|
4
5
|
import { jsonToolResult, toolError } from "./helpers.js";
|
|
5
|
-
export function createMoveTaskTool({ api, guard, }) {
|
|
6
|
+
export function createMoveTaskTool({ api, guard, scope, }) {
|
|
6
7
|
return {
|
|
7
8
|
name: "otask_move_task",
|
|
8
9
|
config: {
|
|
@@ -12,7 +13,8 @@ export function createMoveTaskTool({ api, guard, }) {
|
|
|
12
13
|
Discover column IDs via otask_list_board. Project must be allow-listed when configured.
|
|
13
14
|
|
|
14
15
|
Args:
|
|
15
|
-
- ws_slug
|
|
16
|
+
- ws_slug: optional if OTASK_DEFAULT_WS is set
|
|
17
|
+
- task_slug: task identity
|
|
16
18
|
- board_column_id: target column
|
|
17
19
|
- board_id: optional if changing board
|
|
18
20
|
|
|
@@ -29,16 +31,17 @@ Docs: https://api.otask.ru/docs`,
|
|
|
29
31
|
},
|
|
30
32
|
handler: async ({ ws_slug, task_slug, board_column_id, board_id }) => {
|
|
31
33
|
try {
|
|
32
|
-
const
|
|
34
|
+
const ws = resolveWsSlug(ws_slug, scope);
|
|
35
|
+
const current = await api.getTask(ws, task_slug);
|
|
33
36
|
const projectSlug = typeof current.project_slug === "string"
|
|
34
37
|
? current.project_slug
|
|
35
38
|
: undefined;
|
|
36
|
-
await assertProjectIdAllowed(guard, () => api.listProjects(
|
|
39
|
+
await assertProjectIdAllowed(guard, () => api.listProjects(ws), current.project_id, projectSlug);
|
|
37
40
|
const body = buildUpdateBodyFromTask(current, {
|
|
38
41
|
board_column_id,
|
|
39
42
|
...(board_id !== undefined ? { board_id } : {}),
|
|
40
43
|
});
|
|
41
|
-
const result = await api.updateTask(
|
|
44
|
+
const result = await api.updateTask(ws, task_slug, body);
|
|
42
45
|
const summary = compactTask(result.task);
|
|
43
46
|
return jsonToolResult({
|
|
44
47
|
success: result.success,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-task.js","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE;YACN,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"move-task.js","sourceRoot":"","sources":["../../src/tools/move-task.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACL,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,EACL,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE;YACN,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE;;;;;;;;;;;;gCAYa;YAC1B,WAAW,EAAE,mBAAmB;YAChC,WAAW,EAAE;gBACX,YAAY,EAAE,KAAK;gBACnB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;aACpB;SACF;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,EAAE;YACnE,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACjD,MAAM,WAAW,GACf,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ;oBACtC,CAAC,CAAC,OAAO,CAAC,YAAY;oBACtB,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,sBAAsB,CAC1B,KAAK,EACL,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,EAC1B,OAAO,CAAC,UAAU,EAClB,WAAW,CACZ,CAAC;gBACF,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,EAAE;oBAC5C,eAAe;oBACf,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACzD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzC,OAAO,cAAc,CACnB;oBACE,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,OAAO;iBACd,EACD;oBACE,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,OAAO;iBACd,CACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/types.d.ts
CHANGED
|
@@ -2,10 +2,12 @@ import type { ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
|
|
|
2
2
|
import type { z } from "zod";
|
|
3
3
|
import type { OtaskClient } from "../services/client.js";
|
|
4
4
|
import type { ProjectGuard } from "../services/project-guard.js";
|
|
5
|
+
import type { ScopeContext } from "../services/scope.js";
|
|
5
6
|
/** Shared dependencies injected into every tool factory. */
|
|
6
7
|
export interface ToolDeps {
|
|
7
8
|
api: OtaskClient;
|
|
8
9
|
guard: ProjectGuard;
|
|
10
|
+
scope: ScopeContext;
|
|
9
11
|
}
|
|
10
12
|
export interface ToolConfig {
|
|
11
13
|
title?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;IAC3B,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC;QAChC,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,cAAc,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type UpdateTaskInput } from "../schemas/task.js";
|
|
2
2
|
import type { ToolDefinition, ToolDeps } from "./types.js";
|
|
3
|
-
export declare function createUpdateTaskTool({ api, guard, }: ToolDeps): ToolDefinition<UpdateTaskInput>;
|
|
3
|
+
export declare function createUpdateTaskTool({ api, guard, scope, }: ToolDeps): ToolDefinition<UpdateTaskInput>;
|
|
4
4
|
//# sourceMappingURL=update-task.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-task.d.ts","sourceRoot":"","sources":["../../src/tools/update-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-task.d.ts","sourceRoot":"","sources":["../../src/tools/update-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,oBAAoB,CAAC,EACnC,GAAG,EACH,KAAK,EACL,KAAK,GACN,EAAE,QAAQ,GAAG,cAAc,CAAC,eAAe,CAAC,CA4G5C"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { UpdateTaskInputSchema, } from "../schemas/task.js";
|
|
2
2
|
import { assertProjectIdAllowed } from "../services/project-guard.js";
|
|
3
|
+
import { resolveWsSlug } from "../services/scope.js";
|
|
3
4
|
import { buildUpdateBodyFromTask, summarizeTask, } from "../services/task-mapper.js";
|
|
4
5
|
import { jsonToolResult, toolError } from "./helpers.js";
|
|
5
|
-
export function createUpdateTaskTool({ api, guard, }) {
|
|
6
|
+
export function createUpdateTaskTool({ api, guard, scope, }) {
|
|
6
7
|
return {
|
|
7
8
|
name: "otask_update_task",
|
|
8
9
|
config: {
|
|
@@ -18,8 +19,9 @@ Common updates:
|
|
|
18
19
|
- comment: optional note recorded with the update
|
|
19
20
|
|
|
20
21
|
Args:
|
|
21
|
-
- ws_slug
|
|
22
|
-
-
|
|
22
|
+
- ws_slug: optional if OTASK_DEFAULT_WS is set
|
|
23
|
+
- task_slug: UUID from panel.otask.ru
|
|
24
|
+
- Any task fields to change (all optional except task_slug)
|
|
23
25
|
|
|
24
26
|
Returns updated task summary on success.
|
|
25
27
|
|
|
@@ -35,11 +37,12 @@ Docs: https://api.otask.ru/docs#zadaci-POSTapi-v1-ws--ws_slug--tasks--task_slug-
|
|
|
35
37
|
handler: async (params) => {
|
|
36
38
|
const { ws_slug, task_slug, ...changes } = params;
|
|
37
39
|
try {
|
|
38
|
-
const
|
|
40
|
+
const ws = resolveWsSlug(ws_slug, scope);
|
|
41
|
+
const current = await api.getTask(ws, task_slug);
|
|
39
42
|
const projectSlug = typeof current.project_slug === "string"
|
|
40
43
|
? current.project_slug
|
|
41
44
|
: undefined;
|
|
42
|
-
await assertProjectIdAllowed(guard, () => api.listProjects(
|
|
45
|
+
await assertProjectIdAllowed(guard, () => api.listProjects(ws), current.project_id, projectSlug);
|
|
43
46
|
const body = buildUpdateBodyFromTask(current, {
|
|
44
47
|
...(changes.name !== undefined ? { name: changes.name } : {}),
|
|
45
48
|
...(changes.board_id !== undefined
|
|
@@ -71,9 +74,9 @@ Docs: https://api.otask.ru/docs#zadaci-POSTapi-v1-ws--ws_slug--tasks--task_slug-
|
|
|
71
74
|
...(changes.tags !== undefined ? { tags: changes.tags } : {}),
|
|
72
75
|
});
|
|
73
76
|
if (changes.project_id !== undefined) {
|
|
74
|
-
await assertProjectIdAllowed(guard, () => api.listProjects(
|
|
77
|
+
await assertProjectIdAllowed(guard, () => api.listProjects(ws), changes.project_id);
|
|
75
78
|
}
|
|
76
|
-
const result = await api.updateTask(
|
|
79
|
+
const result = await api.updateTask(ws, task_slug, body);
|
|
77
80
|
const summary = summarizeTask(result.task);
|
|
78
81
|
return jsonToolResult({
|
|
79
82
|
success: result.success,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-task.js","sourceRoot":"","sources":["../../src/tools/update-task.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAEtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,UAAU,oBAAoB,CAAC,EACnC,GAAG,EACH,KAAK,GACI;IACT,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE;YACN,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"update-task.js","sourceRoot":"","sources":["../../src/tools/update-task.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grigoreo-dev/otask-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "MCP server for O!task API — stdio locally, Streamable HTTP for n8n",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
|
-
"url": "
|
|
20
|
+
"url": "https://github.com/grigoreo-dev/otask-mcp.git"
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"scripts": {
|
package/dist/http-server.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":""}
|
package/dist/http-server.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import http from "node:http";
|
|
3
|
-
import { API_BASE_URL } from "./constants.js";
|
|
4
|
-
import { pickForwardRequestHeaders, pickForwardResponseHeaders } from "./proxy/headers.js";
|
|
5
|
-
import { readBody } from "./proxy/read-body.js";
|
|
6
|
-
function getAuthToken() {
|
|
7
|
-
const token = process.env.AUTH_TOKEN?.trim();
|
|
8
|
-
if (!token) {
|
|
9
|
-
throw new Error("AUTH_TOKEN environment variable is required for HTTP proxy mode");
|
|
10
|
-
}
|
|
11
|
-
return token;
|
|
12
|
-
}
|
|
13
|
-
function getPort() {
|
|
14
|
-
const raw = process.env.PORT?.trim() || "3847";
|
|
15
|
-
const port = Number.parseInt(raw, 10);
|
|
16
|
-
if (!Number.isFinite(port) || port < 1 || port > 65535) {
|
|
17
|
-
throw new Error(`Invalid PORT: ${raw}`);
|
|
18
|
-
}
|
|
19
|
-
return port;
|
|
20
|
-
}
|
|
21
|
-
function extractBearerToken(req) {
|
|
22
|
-
const auth = req.headers.authorization;
|
|
23
|
-
if (!auth?.startsWith("Bearer ")) {
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
26
|
-
return auth.slice("Bearer ".length).trim();
|
|
27
|
-
}
|
|
28
|
-
function sendJson(res, status, body) {
|
|
29
|
-
res.writeHead(status, { "Content-Type": "application/json" });
|
|
30
|
-
res.end(JSON.stringify(body));
|
|
31
|
-
}
|
|
32
|
-
async function handleRequest(req, res, authToken) {
|
|
33
|
-
const method = req.method ?? "GET";
|
|
34
|
-
const requestUrl = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
35
|
-
if (requestUrl.pathname === "/health") {
|
|
36
|
-
sendJson(res, 200, { ok: true });
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (!requestUrl.pathname.startsWith("/api/")) {
|
|
40
|
-
sendJson(res, 404, {
|
|
41
|
-
error: "Not found",
|
|
42
|
-
hint: "Proxy only forwards /api/* to O!task API",
|
|
43
|
-
});
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const clientToken = extractBearerToken(req);
|
|
47
|
-
if (!clientToken || clientToken !== authToken) {
|
|
48
|
-
sendJson(res, 401, {
|
|
49
|
-
error: "Unauthorized",
|
|
50
|
-
hint: "Send Authorization: Bearer <AUTH_TOKEN>",
|
|
51
|
-
});
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const upstreamUrl = `${API_BASE_URL}${requestUrl.pathname}${requestUrl.search}`;
|
|
55
|
-
const forwardHeaders = pickForwardRequestHeaders(req.headers);
|
|
56
|
-
forwardHeaders.Authorization = `Bearer ${authToken}`;
|
|
57
|
-
const body = await readBody(req);
|
|
58
|
-
const upstream = await fetch(upstreamUrl, {
|
|
59
|
-
method,
|
|
60
|
-
headers: forwardHeaders,
|
|
61
|
-
body,
|
|
62
|
-
});
|
|
63
|
-
const responseHeaders = pickForwardResponseHeaders(upstream.headers);
|
|
64
|
-
res.writeHead(upstream.status, responseHeaders);
|
|
65
|
-
if (method === "HEAD") {
|
|
66
|
-
res.end();
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const responseBody = Buffer.from(await upstream.arrayBuffer());
|
|
70
|
-
res.end(responseBody);
|
|
71
|
-
}
|
|
72
|
-
function main() {
|
|
73
|
-
const authToken = getAuthToken();
|
|
74
|
-
const port = getPort();
|
|
75
|
-
const server = http.createServer((req, res) => {
|
|
76
|
-
handleRequest(req, res, authToken).catch((error) => {
|
|
77
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
78
|
-
if (!res.headersSent) {
|
|
79
|
-
sendJson(res, 502, { error: "Upstream proxy error", message });
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
res.end();
|
|
83
|
-
console.error("Proxy error after headers sent:", message);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
server.listen(port, () => {
|
|
87
|
-
console.error(`O!task HTTP proxy listening on http://localhost:${port}`);
|
|
88
|
-
console.error(`Forwarding /api/* -> ${API_BASE_URL}/api/*`);
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
main();
|
|
92
|
-
//# sourceMappingURL=http-server.js.map
|
package/dist/http-server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy/headers.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export declare function pickForwardRequestHeaders(headers: Record<string, string | string[] | undefined>): Record<string, string>;
|
|
2
|
-
export declare function pickForwardResponseHeaders(headers: Headers): Record<string, string | string[]>;
|
|
3
|
-
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/proxy/headers.ts"],"names":[],"mappings":"AAWA,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAWnC"}
|
package/dist/proxy/headers.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
const HOP_BY_HOP = new Set([
|
|
2
|
-
"connection",
|
|
3
|
-
"keep-alive",
|
|
4
|
-
"proxy-authenticate",
|
|
5
|
-
"proxy-authorization",
|
|
6
|
-
"te",
|
|
7
|
-
"trailers",
|
|
8
|
-
"transfer-encoding",
|
|
9
|
-
"upgrade",
|
|
10
|
-
]);
|
|
11
|
-
export function pickForwardRequestHeaders(headers) {
|
|
12
|
-
const forward = {};
|
|
13
|
-
for (const [key, value] of Object.entries(headers)) {
|
|
14
|
-
const lower = key.toLowerCase();
|
|
15
|
-
if (HOP_BY_HOP.has(lower) || lower === "host" || lower === "authorization") {
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
if (typeof value === "string") {
|
|
19
|
-
forward[key] = value;
|
|
20
|
-
}
|
|
21
|
-
else if (Array.isArray(value) && value[0]) {
|
|
22
|
-
forward[key] = value[0];
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return forward;
|
|
26
|
-
}
|
|
27
|
-
export function pickForwardResponseHeaders(headers) {
|
|
28
|
-
const forward = {};
|
|
29
|
-
headers.forEach((value, key) => {
|
|
30
|
-
if (HOP_BY_HOP.has(key.toLowerCase())) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
forward[key] = value;
|
|
34
|
-
});
|
|
35
|
-
return forward;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=headers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/proxy/headers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,YAAY;IACZ,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,IAAI;IACJ,UAAU;IACV,mBAAmB;IACnB,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,UAAU,yBAAyB,CACvC,OAAsD;IAEtD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;YAC3E,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAgB;IAEhB,MAAM,OAAO,GAAsC,EAAE,CAAC;IAEtD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-body.d.ts","sourceRoot":"","sources":["../../src/proxy/read-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB1E"}
|
package/dist/proxy/read-body.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export function readBody(req) {
|
|
2
|
-
if (req.method === "GET" || req.method === "HEAD") {
|
|
3
|
-
return Promise.resolve(undefined);
|
|
4
|
-
}
|
|
5
|
-
return new Promise((resolve, reject) => {
|
|
6
|
-
const chunks = [];
|
|
7
|
-
req.on("data", (chunk) => chunks.push(chunk));
|
|
8
|
-
req.on("end", () => {
|
|
9
|
-
if (chunks.length === 0) {
|
|
10
|
-
resolve(undefined);
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
resolve(Buffer.concat(chunks));
|
|
14
|
-
});
|
|
15
|
-
req.on("error", reject);
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=read-body.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-body.js","sourceRoot":"","sources":["../../src/proxy/read-body.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,SAAS,CAAC,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export interface HttpAuthContext {
|
|
2
|
-
/** O!task Bearer from client — passthrough mode only */
|
|
3
|
-
passthroughToken: string;
|
|
4
|
-
}
|
|
5
|
-
export declare function runWithHttpAuthContext<T>(context: HttpAuthContext, fn: () => T | Promise<T>): Promise<T>;
|
|
6
|
-
export declare function getPassthroughToken(): string | undefined;
|
|
7
|
-
//# sourceMappingURL=http-auth-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-auth-context.d.ts","sourceRoot":"","sources":["../../src/services/http-auth-context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAID,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,eAAe,EACxB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
const storage = new AsyncLocalStorage();
|
|
3
|
-
export function runWithHttpAuthContext(context, fn) {
|
|
4
|
-
return Promise.resolve(storage.run(context, fn));
|
|
5
|
-
}
|
|
6
|
-
export function getPassthroughToken() {
|
|
7
|
-
return storage.getStore()?.passthroughToken;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=http-auth-context.js.map
|