@happ-ai/platform-mcp 0.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.
Files changed (39) hide show
  1. package/dist/cli.js +64 -0
  2. package/dist/cli.js.map +1 -0
  3. package/dist/config.js +7 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/credentials.js +48 -0
  6. package/dist/credentials.js.map +1 -0
  7. package/dist/http.js +90 -0
  8. package/dist/http.js.map +1 -0
  9. package/dist/index.js +59 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/login.js +76 -0
  12. package/dist/login.js.map +1 -0
  13. package/dist/tools/activity.tools.js +34 -0
  14. package/dist/tools/activity.tools.js.map +1 -0
  15. package/dist/tools/analytics.tools.js +162 -0
  16. package/dist/tools/analytics.tools.js.map +1 -0
  17. package/dist/tools/assistant-tools.tools.js +86 -0
  18. package/dist/tools/assistant-tools.tools.js.map +1 -0
  19. package/dist/tools/assistants.tools.js +179 -0
  20. package/dist/tools/assistants.tools.js.map +1 -0
  21. package/dist/tools/auth.tools.js +44 -0
  22. package/dist/tools/auth.tools.js.map +1 -0
  23. package/dist/tools/calls.tools.js +99 -0
  24. package/dist/tools/calls.tools.js.map +1 -0
  25. package/dist/tools/channels.tools.js +158 -0
  26. package/dist/tools/channels.tools.js.map +1 -0
  27. package/dist/tools/chats.tools.js +171 -0
  28. package/dist/tools/chats.tools.js.map +1 -0
  29. package/dist/tools/companies.tools.js +180 -0
  30. package/dist/tools/companies.tools.js.map +1 -0
  31. package/dist/tools/folders.tools.js +71 -0
  32. package/dist/tools/folders.tools.js.map +1 -0
  33. package/dist/tools/knowledge.tools.js +71 -0
  34. package/dist/tools/knowledge.tools.js.map +1 -0
  35. package/dist/tools/phones.tools.js +92 -0
  36. package/dist/tools/phones.tools.js.map +1 -0
  37. package/dist/tools/result.js +7 -0
  38. package/dist/tools/result.js.map +1 -0
  39. package/package.json +40 -0
@@ -0,0 +1,92 @@
1
+ import { z } from "zod";
2
+ import { happRequest } from "../http.js";
3
+ import { jsonResult } from "./result.js";
4
+ export function registerPhonesTools(server) {
5
+ server.registerTool("happ_phones_list", {
6
+ title: "Телефоны",
7
+ description: "Список SIP-телефонов компании (GET /assistant-phones-new). Телефон в Happ — это SIP-учётка: номер + sipLogin + хост телефонии.",
8
+ inputSchema: {
9
+ companyId: z.string().uuid().optional().describe("ID компании"),
10
+ assistantId: z.string().uuid().optional().describe("Фильтр по ассистенту")
11
+ }
12
+ }, async ({ companyId, assistantId }) => {
13
+ const phones = await happRequest("GET", "/assistant-phones-new", { params: { companyId, assistantId } });
14
+ return jsonResult(phones);
15
+ });
16
+ server.registerTool("happ_phone_create", {
17
+ title: "Добавить телефон",
18
+ description: "Регистрирует SIP-телефон (POST /assistant-phones-new). Нужны данные SIP-транка от провайдера телефонии. К ассистенту привязывается отдельно через happ_phone_attach.",
19
+ inputSchema: {
20
+ companyId: z.string().uuid().describe("ID компании"),
21
+ phoneNumber: z.string().optional().describe("Номер телефона"),
22
+ sipLogin: z.string().optional().describe("SIP-логин"),
23
+ password: z.string().optional().describe("SIP-пароль"),
24
+ telephonyUrl: z.string().optional().describe("SIP-хост без протокола, например sip.provider.com:5060"),
25
+ comment: z.string().optional().describe("Комментарий"),
26
+ codec: z.string().optional().describe("Аудиокодек, если требует транк")
27
+ }
28
+ }, async (input) => {
29
+ const body = Object.fromEntries(Object.entries(input).filter(([, v]) => v !== undefined));
30
+ const phone = await happRequest("POST", "/assistant-phones-new", { body });
31
+ return jsonResult(phone);
32
+ });
33
+ server.registerTool("happ_phone_get", {
34
+ title: "Телефон",
35
+ description: "Детали телефона по id (GET /assistant-phones-new/:id).",
36
+ inputSchema: {
37
+ phoneId: z.string().uuid().describe("ID телефона")
38
+ }
39
+ }, async ({ phoneId }) => {
40
+ const phone = await happRequest("GET", `/assistant-phones-new/${phoneId}`);
41
+ return jsonResult(phone);
42
+ });
43
+ server.registerTool("happ_phone_update", {
44
+ title: "Обновить телефон",
45
+ description: "Обновляет SIP-настройки телефона (PATCH /assistant-phones-new/:id). Передавай только изменяемые поля. Если телефон привязан к ассистенту — VA-регистрация пере-синкнется.",
46
+ inputSchema: {
47
+ phoneId: z.string().uuid().describe("ID телефона"),
48
+ phoneNumber: z.string().optional().describe("Номер телефона"),
49
+ sipLogin: z.string().optional().describe("SIP-логин"),
50
+ password: z.string().optional().describe("SIP-пароль"),
51
+ telephonyUrl: z.string().optional().describe("SIP-хост"),
52
+ comment: z.string().optional().describe("Комментарий"),
53
+ codec: z.string().optional().describe("Аудиокодек")
54
+ }
55
+ }, async ({ phoneId, ...rest }) => {
56
+ const body = Object.fromEntries(Object.entries(rest).filter(([, v]) => v !== undefined));
57
+ const phone = await happRequest("PATCH", `/assistant-phones-new/${phoneId}`, { body });
58
+ return jsonResult(phone);
59
+ });
60
+ server.registerTool("happ_phone_delete", {
61
+ title: "Удалить телефон",
62
+ description: "Удаляет телефон из платформы (DELETE /assistant-phones-new/:id).",
63
+ inputSchema: {
64
+ phoneId: z.string().uuid().describe("ID телефона")
65
+ }
66
+ }, async ({ phoneId }) => {
67
+ const result = await happRequest("DELETE", `/assistant-phones-new/${phoneId}`);
68
+ return jsonResult(result);
69
+ });
70
+ server.registerTool("happ_phone_attach", {
71
+ title: "Привязать телефон к ассистенту",
72
+ description: "Привязывает существующий телефон к ассистенту (POST /assistant-phones-new/attach).",
73
+ inputSchema: {
74
+ phoneId: z.string().uuid().describe("ID телефона"),
75
+ assistantId: z.string().uuid().describe("ID ассистента")
76
+ }
77
+ }, async ({ phoneId, assistantId }) => {
78
+ const result = await happRequest("POST", "/assistant-phones-new/attach", { body: { phoneId, assistantId } });
79
+ return jsonResult(result);
80
+ });
81
+ server.registerTool("happ_phone_detach", {
82
+ title: "Отвязать телефон",
83
+ description: "Отвязывает телефон от ассистента (POST /assistant-phones-new/detach).",
84
+ inputSchema: {
85
+ phoneId: z.string().uuid().describe("ID телефона")
86
+ }
87
+ }, async ({ phoneId }) => {
88
+ const result = await happRequest("POST", "/assistant-phones-new/detach", { body: { phoneId } });
89
+ return jsonResult(result);
90
+ });
91
+ }
92
+ //# sourceMappingURL=phones.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phones.tools.js","sourceRoot":"","sources":["../../src/tools/phones.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export function textResult(text) {
2
+ return { content: [{ type: "text", text }] };
3
+ }
4
+ export function jsonResult(data) {
5
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
6
+ }
7
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/tools/result.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7E,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@happ-ai/platform-mcp",
3
+ "version": "0.3.0",
4
+ "type": "module",
5
+ "description": "MCP server exposing the Happ platform API as tools (login, companies, assistants, channels, phones)",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/Happ-AI/platform-mcp.git"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "registry": "https://registry.npmjs.org"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "bin": {
21
+ "happ": "dist/index.js",
22
+ "happ-dev": "dist/index.js",
23
+ "happ-mcp": "dist/index.js"
24
+ },
25
+ "dependencies": {
26
+ "@modelcontextprotocol/sdk": "^1.12.0",
27
+ "zod": "^3.24.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^22.0.0",
31
+ "tsx": "^4.19.0",
32
+ "typescript": "^5.6.0"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "dev": "tsx src/index.ts",
37
+ "start": "node dist/index.js",
38
+ "typecheck": "tsc --noEmit"
39
+ }
40
+ }