@besales/mcp 0.33.0 → 0.37.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 +45 -12
- package/dist/http/api-client.d.ts +2 -0
- package/dist/http/api-client.js +55 -0
- package/dist/http/api-client.js.map +1 -1
- package/dist/schemas/mcp-tools.json +965 -30
- package/dist/tools/definitions/broadcast-analytics.d.ts +28 -7
- package/dist/tools/definitions/broadcast-analytics.js +399 -33
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-mailing-variants.d.ts +19 -0
- package/dist/tools/definitions/broadcast-mailing-variants.js +107 -0
- package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -0
- package/dist/tools/definitions/getcourse-wave.d.ts +147 -0
- package/dist/tools/definitions/getcourse-wave.js +505 -0
- package/dist/tools/definitions/getcourse-wave.js.map +1 -0
- package/dist/tools/definitions/platform-setup.d.ts +73 -8
- package/dist/tools/definitions/platform-setup.js +106 -504
- package/dist/tools/definitions/platform-setup.js.map +1 -1
- package/dist/tools/definitions/scheduled-tasks.d.ts +4 -0
- package/dist/tools/definitions/scheduled-tasks.js +14 -2
- package/dist/tools/definitions/scheduled-tasks.js.map +1 -1
- package/dist/tools/definitions/session.js +6 -4
- package/dist/tools/definitions/session.js.map +1 -1
- package/dist/tools/definitions/shared.d.ts +53 -0
- package/dist/tools/definitions/shared.js +71 -0
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions.d.ts +121 -15
- package/dist/tools/definitions.js +2 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/registry-mapping-cases-core.d.ts +34 -0
- package/dist/tools/registry-mapping-cases-core.js +700 -0
- package/dist/tools/registry-mapping-cases-core.js.map +1 -0
- package/dist/tools/registry-mapping-cases-platform.d.ts +2 -0
- package/dist/tools/registry-mapping-cases-platform.js +910 -0
- package/dist/tools/registry-mapping-cases-platform.js.map +1 -0
- package/dist/tools/registry.js +12 -6
- package/dist/tools/registry.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -132,11 +132,22 @@ Workspace selection precedence, per tool call:
|
|
|
132
132
|
2. an explicit `workspace_id` argument (only when the env var is not set).
|
|
133
133
|
3. the session binding set by the `besales_workspace_use` tool (in-memory, this
|
|
134
134
|
session/process only — see below).
|
|
135
|
-
4. the
|
|
136
|
-
5. the
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
135
|
+
4. the only connected workspace.
|
|
136
|
+
5. otherwise the call is refused — several workspaces are connected and none was
|
|
137
|
+
chosen.
|
|
138
|
+
|
|
139
|
+
**The global `active` workspace is not an implicit fallback.** It is set on the
|
|
140
|
+
very first `connect` and never revisited, so using it silently would send calls
|
|
141
|
+
to whichever workspace you happened to connect first — returning another
|
|
142
|
+
workspace's data with no error at all. When several workspaces are connected and
|
|
143
|
+
nothing above selects one, the call fails closed; the error names the current
|
|
144
|
+
`active` so you can pass it explicitly if that is what you meant. With exactly
|
|
145
|
+
one connection nothing changes. `besales_workspace_current` reports
|
|
146
|
+
`source: "ambiguous"` and `workspace_id: null` in the same situation, so the
|
|
147
|
+
diagnostic never claims a binding the real call would not use.
|
|
148
|
+
|
|
149
|
+
`BESALES_WORKSPACE_ID` always overrides everything. Get workspace ids from
|
|
150
|
+
`besales-mcp connections`.
|
|
140
151
|
|
|
141
152
|
### GUI hosts without per-session env (e.g. Claude Desktop)
|
|
142
153
|
|
|
@@ -279,7 +290,7 @@ connect each once and pin sessions via `BESALES_WORKSPACE_ID` (or switch the
|
|
|
279
290
|
global default with `besales-mcp use <id>`) — see
|
|
280
291
|
[Multiple Workspaces](#multiple-workspaces).
|
|
281
292
|
|
|
282
|
-
## Available tools (
|
|
293
|
+
## Available tools (169 tools by category)
|
|
283
294
|
|
|
284
295
|
Counts are derived from `src/schemas/mcp-tools.json` (`summary.tools_by_category`)
|
|
285
296
|
and asserted in `src/tools/registry.spec.ts`:
|
|
@@ -288,7 +299,7 @@ and asserted in `src/tools/registry.spec.ts`:
|
|
|
288
299
|
|---|---|---|
|
|
289
300
|
| ICP (profiles, dialogue import, analysis) | 5 | incl. `besales_icp_analysis_*` external pair |
|
|
290
301
|
| ICP — read (profile / segments / scenarios / samples) | 4 | `besales_icp_list` / `_get` / `_scenarios_list` / `_sample_messages` (read-only over existing GET `/api/v2/icp/*`) |
|
|
291
|
-
| Prompt generation / analysis / lint / patch sessions |
|
|
302
|
+
| Prompt generation / analysis / lint / patch sessions | 18 | `besales_prompt_*`, `besales_qa_generation_*` external pairs; `besales_prompt_headroom` — lint headroom + section weights **before** building a draft; `besales_prompt_diff` — line-level divergence between two agents' prompts; `besales_prompt_batch_start` / `_status` / `_resume` — roll one edit across a fleet of agents as a background run |
|
|
292
303
|
| Sandbox / simulation / test-scenario generation | 7 | `besales_sandbox_*`, `besales_simulation_*`, `besales_test_scenario_*` |
|
|
293
304
|
| Model comparison (bake-off) | 4 | `besales_model_catalog_list` + `besales_model_comparison_run_start` / `_get` / `_eval_submit` (on-demand multi-model prompt comparison) |
|
|
294
305
|
| Agent / router / triggers / behavior / facts | 14 | Platform Setup Bridge (incl. `besales_agent_clone`, `besales_behavior_update`, `besales_pipeline_settings_update`, `besales_platform_settings_update`) + `besales_facts_*` |
|
|
@@ -309,13 +320,23 @@ and asserted in `src/tools/registry.spec.ts`:
|
|
|
309
320
|
| Context / overview / audit | 3 | `besales_workspace_overview`, `besales_platform_context_get`, `besales_audit_revert` |
|
|
310
321
|
| Session / workspace binding | 2 | `besales_workspace_use`, `besales_workspace_current` (in-memory per-session, local — no backend) |
|
|
311
322
|
| Dialogue audit | 2 | `besales_dialogues_query`, `besales_dialogue_transcript` — read-only transcript + trigger-action evidence |
|
|
312
|
-
| Broadcast analytics | 2 | `besales_broadcast_analytics_get`, `besales_broadcast_cohorts_list` — authoritative read-only
|
|
313
|
-
| GetCourse waves | 10 | `besales_getcourse_wave_import`, `besales_getcourse_wave_status`, `besales_getcourse_wave_run_start`, `besales_getcourse_wave_run_status`, `besales_getcourse_wave_run_contacts`, `besales_getcourse_wave_run_cancel`, `besales_getcourse_wave_run_batch_start`, `besales_getcourse_wave_run_batch_status`, `besales_getcourse_wave_run_batch_cancel`, `besales_getcourse_wave_run_batch_resume` |
|
|
323
|
+
| Broadcast analytics | 2 | `besales_broadcast_analytics_get`, `besales_broadcast_cohorts_list` — authoritative read-only aggregates, drill-downs, segment/product catalogs, insights and payment-candidate reports from `/broadcast-analytics`, not transcript-derived counts |
|
|
324
|
+
| GetCourse waves | 10 | `besales_getcourse_wave_import`, `besales_getcourse_wave_status`, `besales_getcourse_wave_run_start`, `besales_getcourse_wave_run_status`, `besales_getcourse_wave_run_contacts`, `besales_getcourse_wave_run_cancel`, `besales_getcourse_wave_run_batch_start`, `besales_getcourse_wave_run_batch_status`, `besales_getcourse_wave_run_batch_cancel`, `besales_getcourse_wave_run_batch_resume`; durable confirm использует стабильный `launch_key` + `dry_run_hash`, import/run/batch принимают `segment_description` |
|
|
314
325
|
| Scheduled tasks | 2 | `besales_scheduled_task_list`, `besales_scheduled_task_update` — cron-driven dialogue analysis («суфлёр»): daily summary + hourly status written to the CRM timeline or as a hidden open-line message, never to the client |
|
|
315
326
|
| Follow-up (read) | 2 | `besales_followup_sequence_list`, `besales_followup_step_stats` — read a sequence config before a read-modify-write upsert, and see per-step delivery/skip reasons |
|
|
316
327
|
|
|
317
328
|
Recent capabilities:
|
|
318
329
|
|
|
330
|
+
- **Prompt lint diagnostics** — a rejected `besales_prompt_patch_commit` now carries the
|
|
331
|
+
backend's `lintIssues` (up to 3, e.g. the exact character count over the 80000 hard
|
|
332
|
+
limit) instead of a bare 400. `besales_prompt_headroom` answers the same question
|
|
333
|
+
*before* a draft is built; `besales_prompt_diff` compares two agents' prompts without
|
|
334
|
+
pulling both full texts into context.
|
|
335
|
+
- **Fleet prompt rollout** — `besales_prompt_batch_start` applies one set of patch
|
|
336
|
+
operations across many agents as a background run (33 agents × 3 calls do not fit the
|
|
337
|
+
60s client timeout). Every agent is prepared and fully linted first; only those that
|
|
338
|
+
pass are committed. Poll `besales_prompt_batch_status`; roll forward the failures with
|
|
339
|
+
`besales_prompt_batch_resume` — never by starting a second run.
|
|
319
340
|
- **OAuth PKCE provisioning** — `besales_platform_create_oauth_init` opens the
|
|
320
341
|
authorization flow in the browser for Instagram/Avito so the OAuth code never
|
|
321
342
|
passes through the LLM.
|
|
@@ -333,7 +354,19 @@ Recent capabilities:
|
|
|
333
354
|
- **GetCourse wave-run batches** — queue 1–10 status-mode segments sequentially
|
|
334
355
|
through `besales_getcourse_wave_run_batch_start`; use one `_batch_status` poll,
|
|
335
356
|
reuse a generated `batch_key` on retry, and resume only after resolving two
|
|
336
|
-
consecutive rejected segments.
|
|
357
|
+
consecutive rejected segments. `UNKNOWN` и небезопасный `FAILED` жёстко
|
|
358
|
+
блокируются между волнами; repeat mode не является обходом неопределённого исхода.
|
|
359
|
+
Контакты import/run/batch принимают `email`, `phone`, `first_name`, `last_name` и передают их
|
|
360
|
+
backend-у без потери snake_case→camelCase.
|
|
361
|
+
- **Broadcast mailing variants** — `besales_broadcast_mailing_variant_list/create/update/delete`;
|
|
362
|
+
архивирование через delete или `update(archived=true)` требует `explicit_confirmation=true`
|
|
363
|
+
управляют workspace-каталогом «Вариантов рассылки». Передавай выбранный UUID как
|
|
364
|
+
`mailing_variant_id` в direct, durable или batch GetCourse wave; analytics принимает тот же
|
|
365
|
+
фильтр. Удаление использованного варианта архивирует его и сохраняет историю когорт.
|
|
366
|
+
- **GetCourse school bindings** — `besales_platform_settings_update` принимает
|
|
367
|
+
`getcourse_settings.wave_field_bindings`: роли `launch_type/product/segment/funnel/channels`
|
|
368
|
+
связываются с numeric custom-field ID сделки; `product_value_source` выбирает код или название
|
|
369
|
+
продукта, а `null` очищает настройку школы.
|
|
337
370
|
|
|
338
371
|
## Resources
|
|
339
372
|
|
|
@@ -357,7 +390,7 @@ Inspect them locally:
|
|
|
357
390
|
yarn dlx @modelcontextprotocol/inspector node bin/besales-mcp.js
|
|
358
391
|
```
|
|
359
392
|
|
|
360
|
-
The Inspector should show
|
|
393
|
+
The Inspector should show 169 tools and 31 resources.
|
|
361
394
|
|
|
362
395
|
## Codex Dialogue Audit Skill
|
|
363
396
|
|
|
@@ -401,7 +434,7 @@ Claude Code, and Codex CLI are documented in
|
|
|
401
434
|
- This package calls Animaly only through `ai-aniomaly` `/api/v2/*`.
|
|
402
435
|
- Direct calls to `prompt-services` are intentionally out of scope.
|
|
403
436
|
|
|
404
|
-
The package exposes
|
|
437
|
+
The package exposes 169 active MCP tools from `src/schemas/mcp-tools.json`.
|
|
405
438
|
|
|
406
439
|
### Token scopes
|
|
407
440
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare const API_REQUEST_TIMEOUT_MS = 60000;
|
|
2
|
+
/** Сколько lint-замечаний включать в текст ошибки инструмента, чтобы он остался читаемым. */
|
|
3
|
+
export declare const LINT_ISSUES_IN_ERROR_LIMIT = 3;
|
|
2
4
|
export type ApiMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
|
|
3
5
|
export interface ApiTransportRequest {
|
|
4
6
|
readonly method: ApiMethod;
|
package/dist/http/api-client.js
CHANGED
|
@@ -2,6 +2,8 @@ import axios from 'axios';
|
|
|
2
2
|
import { normalizeApiBaseUrl } from '../auth/oauth-client.js';
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
4
|
export const API_REQUEST_TIMEOUT_MS = 60_000;
|
|
5
|
+
/** Сколько lint-замечаний включать в текст ошибки инструмента, чтобы он остался читаемым. */
|
|
6
|
+
export const LINT_ISSUES_IN_ERROR_LIMIT = 3;
|
|
5
7
|
export class ApiClientError extends Error {
|
|
6
8
|
status;
|
|
7
9
|
responseMessage;
|
|
@@ -89,7 +91,60 @@ export function buildApiUrl(apiBaseUrl, path) {
|
|
|
89
91
|
}
|
|
90
92
|
return `${normalizedBaseUrl}${normalizedPath}`;
|
|
91
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Текст ошибки для инструмента: `message` из тела плюс диагностические поля, которые
|
|
96
|
+
* бэкенд кладёт рядом с ним.
|
|
97
|
+
*
|
|
98
|
+
* Раньше отдавался только `message`, из-за чего `lintIssues` при 400 на
|
|
99
|
+
* `POST /agents/{id}/prompt/drafts/{draftId}/commit` терялись, и вызывающий видел
|
|
100
|
+
* «Prompt failed lint validation» без причины и без цифры (например без «Промпт 81590
|
|
101
|
+
* символов — превышает жёсткий лимит 80000»).
|
|
102
|
+
*/
|
|
92
103
|
function getSafeResponseMessage(data) {
|
|
104
|
+
const baseMessage = extractResponseMessage(data);
|
|
105
|
+
const lintDetail = extractLintIssuesDetail(data);
|
|
106
|
+
if (baseMessage && lintDetail) {
|
|
107
|
+
return `${baseMessage} | ${lintDetail}`;
|
|
108
|
+
}
|
|
109
|
+
return baseMessage ?? lintDetail;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Диагностика из `lintIssues` — whitelist полей, а не тело целиком: в ответе может быть PII,
|
|
113
|
+
* и она не должна попадать в текст ошибки инструмента.
|
|
114
|
+
*/
|
|
115
|
+
function extractLintIssuesDetail(data) {
|
|
116
|
+
if (!data || typeof data !== 'object') {
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
const issues = data.lintIssues;
|
|
120
|
+
if (!Array.isArray(issues) || issues.length === 0) {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
const formatted = issues
|
|
124
|
+
.slice(0, LINT_ISSUES_IN_ERROR_LIMIT)
|
|
125
|
+
.map((issue) => formatLintIssue(issue))
|
|
126
|
+
.filter((item) => item !== undefined);
|
|
127
|
+
if (formatted.length === 0) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
const hidden = issues.length - formatted.length;
|
|
131
|
+
const suffix = hidden > 0 ? ` (и ещё ${hidden})` : '';
|
|
132
|
+
return `lint: ${formatted.join('; ')}${suffix}`;
|
|
133
|
+
}
|
|
134
|
+
function formatLintIssue(issue) {
|
|
135
|
+
if (!issue || typeof issue !== 'object') {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const { severity, category, message } = issue;
|
|
139
|
+
if (typeof message !== 'string' || message.length === 0) {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
const prefix = [severity, category]
|
|
143
|
+
.filter((part) => typeof part === 'string' && part.length > 0)
|
|
144
|
+
.join('/');
|
|
145
|
+
return prefix ? `${prefix} — ${message}` : message;
|
|
146
|
+
}
|
|
147
|
+
function extractResponseMessage(data) {
|
|
93
148
|
if (!data || typeof data !== 'object') {
|
|
94
149
|
return undefined;
|
|
95
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/http/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/http/api-client.ts"],"names":[],"mappings":"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"}
|