@theyahia/mango-office-mcp 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -56
- package/dist/index.d.ts +2 -1
- package/dist/index.js +52 -10
- package/dist/index.js.map +1 -1
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.js +55 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/tools/calls.d.ts +50 -0
- package/dist/tools/calls.js +58 -0
- package/dist/tools/calls.js.map +1 -1
- package/package.json +56 -53
package/README.md
CHANGED
|
@@ -1,56 +1,88 @@
|
|
|
1
|
-
# @theyahia/mango-office-mcp
|
|
2
|
-
|
|
3
|
-
MCP-сервер для Mango Office API — звонки,
|
|
4
|
-
|
|
5
|
-
[](https://www.npmjs.com/package/@theyahia/mango-office-mcp)
|
|
6
|
-
[](https://opensource.org/licenses/MIT)
|
|
7
|
-
|
|
8
|
-
Часть серии [Russian API MCP](https://github.com/theYahia/russian-mcp) (50 серверов) by [@theYahia](https://github.com/theYahia).
|
|
9
|
-
|
|
10
|
-
## Установка
|
|
11
|
-
|
|
12
|
-
### Claude Desktop
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"mcpServers": {
|
|
17
|
-
"mango-office": {
|
|
18
|
-
"command": "npx",
|
|
19
|
-
"args": ["-y", "@theyahia/mango-office-mcp"],
|
|
20
|
-
"env": { "MANGO_API_KEY": "your-key", "MANGO_API_SALT": "your-salt" }
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Claude Code
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
claude mcp add mango-office -e MANGO_API_KEY=your-key -e MANGO_API_SALT=your-salt -- npx -y @theyahia/mango-office-mcp
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### VS Code / Cursor
|
|
33
|
-
|
|
34
|
-
```json
|
|
35
|
-
{ "servers": { "mango-office": { "command": "npx", "args": ["-y", "@theyahia/mango-office-mcp"], "env": { "MANGO_API_KEY": "your-key", "MANGO_API_SALT": "your-salt" } } } }
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
1
|
+
# @theyahia/mango-office-mcp
|
|
2
|
+
|
|
3
|
+
MCP-сервер для Mango Office API — звонки, пользователи, записи, SMS, статистика. **8 инструментов.**
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@theyahia/mango-office-mcp)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
Часть серии [Russian API MCP](https://github.com/theYahia/russian-mcp) (50 серверов) by [@theYahia](https://github.com/theYahia).
|
|
9
|
+
|
|
10
|
+
## Установка
|
|
11
|
+
|
|
12
|
+
### Claude Desktop
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"mcpServers": {
|
|
17
|
+
"mango-office": {
|
|
18
|
+
"command": "npx",
|
|
19
|
+
"args": ["-y", "@theyahia/mango-office-mcp"],
|
|
20
|
+
"env": { "MANGO_API_KEY": "your-key", "MANGO_API_SALT": "your-salt" }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Claude Code
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
claude mcp add mango-office -e MANGO_API_KEY=your-key -e MANGO_API_SALT=your-salt -- npx -y @theyahia/mango-office-mcp
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### VS Code / Cursor
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{ "servers": { "mango-office": { "command": "npx", "args": ["-y", "@theyahia/mango-office-mcp"], "env": { "MANGO_API_KEY": "your-key", "MANGO_API_SALT": "your-salt" } } } }
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Streamable HTTP
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npx @theyahia/mango-office-mcp --http
|
|
42
|
+
# POST /mcp, GET /health — порт 3000 (PORT=8080 для другого)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> Требуется `MANGO_API_KEY` и `MANGO_API_SALT`. Получите в личном кабинете [Mango Office](https://www.mango-office.ru).
|
|
46
|
+
|
|
47
|
+
## Аутентификация
|
|
48
|
+
|
|
49
|
+
Все запросы подписываются HMAC-SHA256: `sign = HMAC(apiKey + json + apiSalt)`.
|
|
50
|
+
Базовый URL: `https://app.mango-office.ru/vpbx/`.
|
|
51
|
+
|
|
52
|
+
## Инструменты (6)
|
|
53
|
+
|
|
54
|
+
| Инструмент | Описание | API endpoint |
|
|
55
|
+
|------------|----------|--------------|
|
|
56
|
+
| `get_calls` | История звонков за период | `stats/request` |
|
|
57
|
+
| `get_users` | Список пользователей | `config/users/request` |
|
|
58
|
+
| `make_call` | Инициировать исходящий звонок | `commands/callback` |
|
|
59
|
+
| `get_stats` | Сводная статистика звонков | `stats/request` |
|
|
60
|
+
| `get_recording` | Ссылка на запись разговора | `queries/recording/post` |
|
|
61
|
+
| `send_sms` | Отправить SMS | `commands/sms` |
|
|
62
|
+
|
|
63
|
+
## Skills (2)
|
|
64
|
+
|
|
65
|
+
| Инструмент | Описание |
|
|
66
|
+
|------------|----------|
|
|
67
|
+
| `skill_call_history` | История звонков за сегодня — готовый отчёт |
|
|
68
|
+
| `skill_stats` | Статистика звонков за сегодня — сводка |
|
|
69
|
+
|
|
70
|
+
## Примеры
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Покажи звонки за последний час
|
|
74
|
+
Список пользователей Mango Office
|
|
75
|
+
Позвони с 101 на +79001234567
|
|
76
|
+
Статистика звонков за сегодня
|
|
77
|
+
Скачай запись разговора rec_123
|
|
78
|
+
Отправь SMS с 101 на +79001234567 "Перезвоните"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Mango Office
|
|
82
|
+
|
|
83
|
+
[Mango Office](https://www.mango-office.ru/?utm_source=github&utm_medium=mcp) — облачная телефония для бизнеса.
|
|
84
|
+
Реферальная программа: **до 25% пожизненно** от платежей приведённых клиентов.
|
|
85
|
+
|
|
86
|
+
## Лицензия
|
|
87
|
+
|
|
88
|
+
MIT
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,17 +1,59 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
-
import { getCallsSchema, handleGetCalls, getUsersSchema, handleGetUsers } from "./tools/calls.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
import { getCallsSchema, handleGetCalls, getUsersSchema, handleGetUsers, makeCallSchema, handleMakeCall, getStatsSchema, handleGetStats, getRecordingSchema, handleGetRecording, sendSmsSchema, handleSendSms, } from "./tools/calls.js";
|
|
5
|
+
import { skillCallHistory, skillStats } from "./skills/index.js";
|
|
6
|
+
export function createServer() {
|
|
7
|
+
const server = new McpServer({
|
|
8
|
+
name: "mango-office-mcp",
|
|
9
|
+
version: "1.1.0",
|
|
10
|
+
});
|
|
11
|
+
// --- Tools (6) ---
|
|
12
|
+
server.tool("get_calls", "Получить историю звонков Mango Office за период.", getCallsSchema.shape, async (params) => ({ content: [{ type: "text", text: await handleGetCalls(params) }] }));
|
|
13
|
+
server.tool("get_users", "Получить список пользователей Mango Office.", getUsersSchema.shape, async (params) => ({ content: [{ type: "text", text: await handleGetUsers(params) }] }));
|
|
14
|
+
server.tool("make_call", "Инициировать исходящий звонок (callback) через Mango Office.", makeCallSchema.shape, async (params) => ({ content: [{ type: "text", text: await handleMakeCall(params) }] }));
|
|
15
|
+
server.tool("get_stats", "Получить сводную статистику звонков за период.", getStatsSchema.shape, async (params) => ({ content: [{ type: "text", text: await handleGetStats(params) }] }));
|
|
16
|
+
server.tool("get_recording", "Получить ссылку на запись разговора.", getRecordingSchema.shape, async (params) => ({ content: [{ type: "text", text: await handleGetRecording(params) }] }));
|
|
17
|
+
server.tool("send_sms", "Отправить SMS через Mango Office.", sendSmsSchema.shape, async (params) => ({ content: [{ type: "text", text: await handleSendSms(params) }] }));
|
|
18
|
+
// --- Skills (2) ---
|
|
19
|
+
server.tool("skill_call_history", "История звонков за сегодня — готовый отчёт.", {}, async () => ({ content: [{ type: "text", text: await skillCallHistory() }] }));
|
|
20
|
+
server.tool("skill_stats", "Статистика звонков за сегодня — сводка.", {}, async () => ({ content: [{ type: "text", text: await skillStats() }] }));
|
|
21
|
+
return server;
|
|
22
|
+
}
|
|
11
23
|
async function main() {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
24
|
+
const args = process.argv.slice(2);
|
|
25
|
+
if (args.includes("--http")) {
|
|
26
|
+
const { StreamableHTTPServerTransport } = await import("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
27
|
+
const http = await import("node:http");
|
|
28
|
+
const port = Number(process.env.PORT) || 3000;
|
|
29
|
+
const httpServer = http.createServer(async (req, res) => {
|
|
30
|
+
if (req.url === "/health") {
|
|
31
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
32
|
+
res.end(JSON.stringify({ status: "ok", tools: 8 }));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (req.url === "/mcp") {
|
|
36
|
+
const server = createServer();
|
|
37
|
+
const transport = new StreamableHTTPServerTransport({
|
|
38
|
+
sessionIdGenerator: undefined,
|
|
39
|
+
});
|
|
40
|
+
await server.connect(transport);
|
|
41
|
+
await transport.handleRequest(req, res);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
res.writeHead(404);
|
|
45
|
+
res.end("Not Found");
|
|
46
|
+
});
|
|
47
|
+
httpServer.listen(port, () => {
|
|
48
|
+
console.error(`[mango-office-mcp] HTTP server on port ${port}. POST /mcp, GET /health`);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const server = createServer();
|
|
53
|
+
const transport = new StdioServerTransport();
|
|
54
|
+
await server.connect(transport);
|
|
55
|
+
console.error("[mango-office-mcp] Сервер запущен (stdio). 8 инструментов. Требуется MANGO_API_KEY + MANGO_API_SALT.");
|
|
56
|
+
}
|
|
15
57
|
}
|
|
16
58
|
main().catch((error) => {
|
|
17
59
|
console.error("[mango-office-mcp] Ошибка:", error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* skill-call-history: "История звонков за сегодня"
|
|
3
|
+
* Returns today's calls formatted for human reading.
|
|
4
|
+
*/
|
|
5
|
+
export declare function skillCallHistory(): Promise<string>;
|
|
6
|
+
/**
|
|
7
|
+
* skill-stats: "Статистика звонков"
|
|
8
|
+
* Returns aggregated call statistics for today.
|
|
9
|
+
*/
|
|
10
|
+
export declare function skillStats(): Promise<string>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { mangoPost } from "../client.js";
|
|
2
|
+
/**
|
|
3
|
+
* skill-call-history: "История звонков за сегодня"
|
|
4
|
+
* Returns today's calls formatted for human reading.
|
|
5
|
+
*/
|
|
6
|
+
export async function skillCallHistory() {
|
|
7
|
+
const now = Math.floor(Date.now() / 1000);
|
|
8
|
+
const startOfDay = now - (now % 86400);
|
|
9
|
+
const result = await mangoPost("stats/request", {
|
|
10
|
+
date_from: String(startOfDay),
|
|
11
|
+
date_to: String(now),
|
|
12
|
+
limit: 50,
|
|
13
|
+
});
|
|
14
|
+
const data = result;
|
|
15
|
+
const records = data?.records ?? [];
|
|
16
|
+
if (records.length === 0) {
|
|
17
|
+
return "Сегодня звонков не было.";
|
|
18
|
+
}
|
|
19
|
+
const lines = records.map((r, i) => {
|
|
20
|
+
const from = r.from ?? "неизвестно";
|
|
21
|
+
const to = r.to ?? "неизвестно";
|
|
22
|
+
const duration = r.duration ?? 0;
|
|
23
|
+
const status = r.disconnect_reason === 1110 ? "отвечен" : "пропущен";
|
|
24
|
+
return `${i + 1}. ${from} → ${to} | ${duration}с | ${status}`;
|
|
25
|
+
});
|
|
26
|
+
return `История звонков за сегодня (${records.length} шт.):\n${lines.join("\n")}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* skill-stats: "Статистика звонков"
|
|
30
|
+
* Returns aggregated call statistics for today.
|
|
31
|
+
*/
|
|
32
|
+
export async function skillStats() {
|
|
33
|
+
const now = Math.floor(Date.now() / 1000);
|
|
34
|
+
const startOfDay = now - (now % 86400);
|
|
35
|
+
const result = await mangoPost("stats/request", {
|
|
36
|
+
date_from: String(startOfDay),
|
|
37
|
+
date_to: String(now),
|
|
38
|
+
});
|
|
39
|
+
const data = result;
|
|
40
|
+
const records = data?.records ?? [];
|
|
41
|
+
const total = records.length;
|
|
42
|
+
const answered = records.filter((r) => r.disconnect_reason === 1110).length;
|
|
43
|
+
const missed = total - answered;
|
|
44
|
+
const totalDuration = records.reduce((sum, r) => sum + (Number(r.duration) || 0), 0);
|
|
45
|
+
const avgDuration = total > 0 ? Math.round(totalDuration / total) : 0;
|
|
46
|
+
return [
|
|
47
|
+
`Статистика звонков за сегодня:`,
|
|
48
|
+
` Всего: ${total}`,
|
|
49
|
+
` Отвечено: ${answered}`,
|
|
50
|
+
` Пропущено: ${missed}`,
|
|
51
|
+
` Общая длительность: ${totalDuration}с`,
|
|
52
|
+
` Средняя длительность: ${avgDuration}с`,
|
|
53
|
+
].join("\n");
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/calls.d.ts
CHANGED
|
@@ -21,3 +21,53 @@ export declare const getUsersSchema: z.ZodObject<{
|
|
|
21
21
|
limit?: number | undefined;
|
|
22
22
|
}>;
|
|
23
23
|
export declare function handleGetUsers(params: z.infer<typeof getUsersSchema>): Promise<string>;
|
|
24
|
+
export declare const makeCallSchema: z.ZodObject<{
|
|
25
|
+
from: z.ZodString;
|
|
26
|
+
to: z.ZodString;
|
|
27
|
+
line: z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
from: string;
|
|
30
|
+
to: string;
|
|
31
|
+
line?: string | undefined;
|
|
32
|
+
}, {
|
|
33
|
+
from: string;
|
|
34
|
+
to: string;
|
|
35
|
+
line?: string | undefined;
|
|
36
|
+
}>;
|
|
37
|
+
export declare function handleMakeCall(params: z.infer<typeof makeCallSchema>): Promise<string>;
|
|
38
|
+
export declare const getStatsSchema: z.ZodObject<{
|
|
39
|
+
date_from: z.ZodString;
|
|
40
|
+
date_to: z.ZodString;
|
|
41
|
+
}, "strip", z.ZodTypeAny, {
|
|
42
|
+
date_from: string;
|
|
43
|
+
date_to: string;
|
|
44
|
+
}, {
|
|
45
|
+
date_from: string;
|
|
46
|
+
date_to: string;
|
|
47
|
+
}>;
|
|
48
|
+
export declare function handleGetStats(params: z.infer<typeof getStatsSchema>): Promise<string>;
|
|
49
|
+
export declare const getRecordingSchema: z.ZodObject<{
|
|
50
|
+
recording_id: z.ZodString;
|
|
51
|
+
action: z.ZodDefault<z.ZodEnum<["play", "download"]>>;
|
|
52
|
+
}, "strip", z.ZodTypeAny, {
|
|
53
|
+
recording_id: string;
|
|
54
|
+
action: "play" | "download";
|
|
55
|
+
}, {
|
|
56
|
+
recording_id: string;
|
|
57
|
+
action?: "play" | "download" | undefined;
|
|
58
|
+
}>;
|
|
59
|
+
export declare function handleGetRecording(params: z.infer<typeof getRecordingSchema>): Promise<string>;
|
|
60
|
+
export declare const sendSmsSchema: z.ZodObject<{
|
|
61
|
+
from_extension: z.ZodString;
|
|
62
|
+
to_number: z.ZodString;
|
|
63
|
+
text: z.ZodString;
|
|
64
|
+
}, "strip", z.ZodTypeAny, {
|
|
65
|
+
to_number: string;
|
|
66
|
+
from_extension: string;
|
|
67
|
+
text: string;
|
|
68
|
+
}, {
|
|
69
|
+
to_number: string;
|
|
70
|
+
from_extension: string;
|
|
71
|
+
text: string;
|
|
72
|
+
}>;
|
|
73
|
+
export declare function handleSendSms(params: z.infer<typeof sendSmsSchema>): Promise<string>;
|
package/dist/tools/calls.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { mangoPost } from "../client.js";
|
|
3
|
+
// --- get_calls: История звонков ---
|
|
3
4
|
export const getCallsSchema = z.object({
|
|
4
5
|
date_from: z.string().describe("Начало периода (UNIX timestamp или ISO 8601)"),
|
|
5
6
|
date_to: z.string().describe("Конец периода (UNIX timestamp или ISO 8601)"),
|
|
@@ -13,6 +14,7 @@ export async function handleGetCalls(params) {
|
|
|
13
14
|
});
|
|
14
15
|
return JSON.stringify(result, null, 2);
|
|
15
16
|
}
|
|
17
|
+
// --- get_users: Список пользователей ---
|
|
16
18
|
export const getUsersSchema = z.object({
|
|
17
19
|
limit: z.number().int().min(1).max(1000).default(100).describe("Количество пользователей"),
|
|
18
20
|
});
|
|
@@ -22,4 +24,60 @@ export async function handleGetUsers(params) {
|
|
|
22
24
|
});
|
|
23
25
|
return JSON.stringify(result, null, 2);
|
|
24
26
|
}
|
|
27
|
+
// --- make_call: Инициировать звонок ---
|
|
28
|
+
export const makeCallSchema = z.object({
|
|
29
|
+
from: z.string().describe("Внутренний номер или SIP-аккаунт инициатора"),
|
|
30
|
+
to: z.string().describe("Номер назначения (E.164 или внутренний)"),
|
|
31
|
+
line: z.string().optional().describe("Линия (CallerID) для исходящего звонка"),
|
|
32
|
+
});
|
|
33
|
+
export async function handleMakeCall(params) {
|
|
34
|
+
const body = {
|
|
35
|
+
from: { extension: params.from },
|
|
36
|
+
to_number: params.to,
|
|
37
|
+
command_id: `mcp_${Date.now()}`,
|
|
38
|
+
};
|
|
39
|
+
if (params.line)
|
|
40
|
+
body.line_number = params.line;
|
|
41
|
+
const result = await mangoPost("commands/callback", body);
|
|
42
|
+
return JSON.stringify(result, null, 2);
|
|
43
|
+
}
|
|
44
|
+
// --- get_stats: Статистика звонков (сводная) ---
|
|
45
|
+
export const getStatsSchema = z.object({
|
|
46
|
+
date_from: z.string().describe("Начало периода (UNIX timestamp или ISO 8601)"),
|
|
47
|
+
date_to: z.string().describe("Конец периода (UNIX timestamp или ISO 8601)"),
|
|
48
|
+
});
|
|
49
|
+
export async function handleGetStats(params) {
|
|
50
|
+
const result = await mangoPost("stats/request", {
|
|
51
|
+
date_from: params.date_from,
|
|
52
|
+
date_to: params.date_to,
|
|
53
|
+
});
|
|
54
|
+
return JSON.stringify(result, null, 2);
|
|
55
|
+
}
|
|
56
|
+
// --- get_recording: Получить запись звонка ---
|
|
57
|
+
export const getRecordingSchema = z.object({
|
|
58
|
+
recording_id: z.string().describe("ID записи разговора"),
|
|
59
|
+
action: z.enum(["play", "download"]).default("play").describe("Действие: play (ссылка) или download"),
|
|
60
|
+
});
|
|
61
|
+
export async function handleGetRecording(params) {
|
|
62
|
+
const result = await mangoPost("queries/recording/post", {
|
|
63
|
+
recording_id: params.recording_id,
|
|
64
|
+
action: params.action,
|
|
65
|
+
});
|
|
66
|
+
return JSON.stringify(result, null, 2);
|
|
67
|
+
}
|
|
68
|
+
// --- send_sms: Отправить SMS ---
|
|
69
|
+
export const sendSmsSchema = z.object({
|
|
70
|
+
from_extension: z.string().describe("Внутренний номер отправителя"),
|
|
71
|
+
to_number: z.string().describe("Номер получателя"),
|
|
72
|
+
text: z.string().max(1000).describe("Текст сообщения"),
|
|
73
|
+
});
|
|
74
|
+
export async function handleSendSms(params) {
|
|
75
|
+
const result = await mangoPost("commands/sms", {
|
|
76
|
+
from_extension: params.from_extension,
|
|
77
|
+
to_number: params.to_number,
|
|
78
|
+
text: params.text,
|
|
79
|
+
command_id: `mcp_sms_${Date.now()}`,
|
|
80
|
+
});
|
|
81
|
+
return JSON.stringify(result, null, 2);
|
|
82
|
+
}
|
|
25
83
|
//# sourceMappingURL=calls.js.map
|
package/dist/tools/calls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/tools/calls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC9E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CACrF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsC;IACzE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,EAAE;QAC9C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsC;IACzE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,sBAAsB,EAAE;QACrD,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/tools/calls.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,53 +1,56 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@theyahia/mango-office-mcp",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "MCP server for Mango Office API — calls, users.
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"mango-office-mcp": "dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"dist"
|
|
12
|
-
],
|
|
13
|
-
"engines": {
|
|
14
|
-
"node": ">=18.0.0"
|
|
15
|
-
},
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "tsc",
|
|
18
|
-
"dev": "tsx src/index.ts",
|
|
19
|
-
"start": "node dist/index.js",
|
|
20
|
-
"prepublishOnly": "npm run build"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
},
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@theyahia/mango-office-mcp",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "MCP server for Mango Office API — calls, users, recordings, SMS, statistics. 8 tools.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mango-office-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18.0.0"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"dev": "tsx src/index.ts",
|
|
19
|
+
"start": "node dist/index.js",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
26
|
+
"zod": "^3.24.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^22.0.0",
|
|
30
|
+
"tsx": "^4.19.0",
|
|
31
|
+
"typescript": "^5.7.0",
|
|
32
|
+
"vitest": "^4.1.2"
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"mcpName": "io.github.theYahia/mango-office-mcp",
|
|
38
|
+
"keywords": [
|
|
39
|
+
"mcp",
|
|
40
|
+
"mcp-server",
|
|
41
|
+
"model-context-protocol",
|
|
42
|
+
"claude",
|
|
43
|
+
"ai",
|
|
44
|
+
"russian-api",
|
|
45
|
+
"mango-office",
|
|
46
|
+
"telephony",
|
|
47
|
+
"pbx"
|
|
48
|
+
],
|
|
49
|
+
"license": "MIT",
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "https://github.com/theYahia/mango-office-mcp.git"
|
|
53
|
+
},
|
|
54
|
+
"homepage": "https://github.com/theYahia/mango-office-mcp#readme",
|
|
55
|
+
"author": "theYahia (https://github.com/theYahia)"
|
|
56
|
+
}
|