senq-mcp 1.4.3 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -4
- package/dist/setup.js +2 -2
- package/package.json +1 -1
- package/src/index.ts +4 -4
- package/src/setup.ts +2 -2
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ if (process.argv[2] === "setup") {
|
|
|
9
9
|
await runSetup();
|
|
10
10
|
process.exit(0);
|
|
11
11
|
}
|
|
12
|
-
const server = new Server({ name: "senq-mcp", version: "1.4.
|
|
12
|
+
const server = new Server({ name: "senq-mcp", version: "1.4.4" }, {
|
|
13
13
|
capabilities: { tools: {}, prompts: {} },
|
|
14
14
|
instructions: `Ты подключён к Senq — системе управления задачами агентства.
|
|
15
15
|
|
|
@@ -361,7 +361,7 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
361
361
|
return {
|
|
362
362
|
content: [{
|
|
363
363
|
type: "text",
|
|
364
|
-
text: `Найдено задач: ${total}\n\n
|
|
364
|
+
text: `Найдено задач: ${total}\n\nДля каждой задачи и подзадачи: форматируй название как [название](url). Поле daysOverdue — дней просрочки (показывай для всех, включая подзадачи). daysLate < 0 = закрыта раньше срока, > 0 = с опозданием, 0 = в срок. Имя исполнителя — [имя](assigneeUrl).\n\n${JSON.stringify(tasks, null, 2)}`,
|
|
365
365
|
}],
|
|
366
366
|
};
|
|
367
367
|
}
|
|
@@ -451,7 +451,7 @@ const PROMPTS = [
|
|
|
451
451
|
{
|
|
452
452
|
name: "что-просрочено",
|
|
453
453
|
description: "Просроченные задачи — мои или конкретного сотрудника",
|
|
454
|
-
arguments: [{ name: "сотрудник", description: "Имя или email
|
|
454
|
+
arguments: [{ name: "сотрудник", description: "Имя или email (необязательно)", required: false }],
|
|
455
455
|
},
|
|
456
456
|
{
|
|
457
457
|
name: "создать-задачу",
|
|
@@ -488,7 +488,7 @@ server.setRequestHandler(GetPromptRequestSchema, async (req) => {
|
|
|
488
488
|
else if (name === "что-просрочено") {
|
|
489
489
|
const emp = promptArgs?.["сотрудник"];
|
|
490
490
|
if (emp) {
|
|
491
|
-
messages.push({ role: "user", content: { type: "text", text: `Сначала найди сотрудника «${emp}» через find_employee, затем покажи его просроченные задачи через list_team_tasks с status=open. Для каждой задачи
|
|
491
|
+
messages.push({ role: "user", content: { type: "text", text: `Сначала найди сотрудника «${emp}» через find_employee, затем покажи его просроченные задачи через list_team_tasks с status=open. Для каждой задачи и подзадачи укажи сколько дней просрочена (поле daysOverdue). Форматируй названия как markdown-ссылки.` } });
|
|
492
492
|
}
|
|
493
493
|
else {
|
|
494
494
|
messages.push({ role: "user", content: { type: "text", text: "Что у меня просрочено? Используй list_tasks и покажи задачи с прошедшим дедлайном. Для каждой укажи срок и сколько дней просрочено." } });
|
package/dist/setup.js
CHANGED
|
@@ -78,7 +78,7 @@ function mergeConfig(configPath, apiKey) {
|
|
|
78
78
|
catch { /* corrupt — start fresh */ }
|
|
79
79
|
}
|
|
80
80
|
const mcpServers = config["mcpServers"] ?? {};
|
|
81
|
-
mcpServers["senq"] = { command: "npx", args: ["senq-mcp
|
|
81
|
+
mcpServers["senq"] = { command: "npx", args: ["senq-mcp"], env: { SENQ_API_KEY: apiKey } };
|
|
82
82
|
config["mcpServers"] = mcpServers;
|
|
83
83
|
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
84
84
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
@@ -89,7 +89,7 @@ function mergeCodexConfig(configPath, apiKey) {
|
|
|
89
89
|
if (fs.existsSync(configPath)) {
|
|
90
90
|
existing = fs.readFileSync(configPath, "utf8");
|
|
91
91
|
}
|
|
92
|
-
const senqBlock = `[mcp_servers.senq]\ncommand = "npx"\nargs = ["senq-mcp
|
|
92
|
+
const senqBlock = `[mcp_servers.senq]\ncommand = "npx"\nargs = ["senq-mcp"]\n\n[mcp_servers.senq.env]\nSENQ_API_KEY = "${apiKey}"`;
|
|
93
93
|
if (existing.includes("[mcp_servers.senq]")) {
|
|
94
94
|
// Replace existing senq block
|
|
95
95
|
const updated = existing.replace(/\[mcp_servers\.senq\][\s\S]*?SENQ_API_KEY\s*=\s*"[^"]*"/, senqBlock);
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -17,7 +17,7 @@ if (process.argv[2] === "setup") {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
const server = new Server(
|
|
20
|
-
{ name: "senq-mcp", version: "1.4.
|
|
20
|
+
{ name: "senq-mcp", version: "1.4.4" },
|
|
21
21
|
{
|
|
22
22
|
capabilities: { tools: {}, prompts: {} },
|
|
23
23
|
instructions: `Ты подключён к Senq — системе управления задачами агентства.
|
|
@@ -342,7 +342,7 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
342
342
|
return {
|
|
343
343
|
content: [{
|
|
344
344
|
type: "text",
|
|
345
|
-
text: `Найдено задач: ${total}\n\n
|
|
345
|
+
text: `Найдено задач: ${total}\n\nДля каждой задачи и подзадачи: форматируй название как [название](url). Поле daysOverdue — дней просрочки (показывай для всех, включая подзадачи). daysLate < 0 = закрыта раньше срока, > 0 = с опозданием, 0 = в срок. Имя исполнителя — [имя](assigneeUrl).\n\n${JSON.stringify(tasks, null, 2)}`,
|
|
346
346
|
}],
|
|
347
347
|
};
|
|
348
348
|
}
|
|
@@ -439,7 +439,7 @@ const PROMPTS = [
|
|
|
439
439
|
{
|
|
440
440
|
name: "что-просрочено",
|
|
441
441
|
description: "Просроченные задачи — мои или конкретного сотрудника",
|
|
442
|
-
arguments: [{ name: "сотрудник", description: "Имя или email
|
|
442
|
+
arguments: [{ name: "сотрудник", description: "Имя или email (необязательно)", required: false }],
|
|
443
443
|
},
|
|
444
444
|
{
|
|
445
445
|
name: "создать-задачу",
|
|
@@ -478,7 +478,7 @@ server.setRequestHandler(GetPromptRequestSchema, async (req) => {
|
|
|
478
478
|
} else if (name === "что-просрочено") {
|
|
479
479
|
const emp = promptArgs?.["сотрудник"];
|
|
480
480
|
if (emp) {
|
|
481
|
-
messages.push({ role: "user", content: { type: "text", text: `Сначала найди сотрудника «${emp}» через find_employee, затем покажи его просроченные задачи через list_team_tasks с status=open. Для каждой задачи
|
|
481
|
+
messages.push({ role: "user", content: { type: "text", text: `Сначала найди сотрудника «${emp}» через find_employee, затем покажи его просроченные задачи через list_team_tasks с status=open. Для каждой задачи и подзадачи укажи сколько дней просрочена (поле daysOverdue). Форматируй названия как markdown-ссылки.` } });
|
|
482
482
|
} else {
|
|
483
483
|
messages.push({ role: "user", content: { type: "text", text: "Что у меня просрочено? Используй list_tasks и покажи задачи с прошедшим дедлайном. Для каждой укажи срок и сколько дней просрочено." } });
|
|
484
484
|
}
|
package/src/setup.ts
CHANGED
|
@@ -82,7 +82,7 @@ function mergeConfig(configPath: string, apiKey: string): void {
|
|
|
82
82
|
try { config = JSON.parse(fs.readFileSync(configPath, "utf8")); } catch { /* corrupt — start fresh */ }
|
|
83
83
|
}
|
|
84
84
|
const mcpServers = (config["mcpServers"] as Record<string, unknown>) ?? {};
|
|
85
|
-
mcpServers["senq"] = { command: "npx", args: ["senq-mcp
|
|
85
|
+
mcpServers["senq"] = { command: "npx", args: ["senq-mcp"], env: { SENQ_API_KEY: apiKey } };
|
|
86
86
|
config["mcpServers"] = mcpServers;
|
|
87
87
|
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
88
88
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
@@ -95,7 +95,7 @@ function mergeCodexConfig(configPath: string, apiKey: string): void {
|
|
|
95
95
|
existing = fs.readFileSync(configPath, "utf8");
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
const senqBlock = `[mcp_servers.senq]\ncommand = "npx"\nargs = ["senq-mcp
|
|
98
|
+
const senqBlock = `[mcp_servers.senq]\ncommand = "npx"\nargs = ["senq-mcp"]\n\n[mcp_servers.senq.env]\nSENQ_API_KEY = "${apiKey}"`;
|
|
99
99
|
|
|
100
100
|
if (existing.includes("[mcp_servers.senq]")) {
|
|
101
101
|
// Replace existing senq block
|