@besales/mcp 0.1.0 → 0.11.1

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 (94) hide show
  1. package/README.md +272 -17
  2. package/dist/auth/connection-store.d.ts +58 -0
  3. package/dist/auth/connection-store.js +208 -0
  4. package/dist/auth/connection-store.js.map +1 -0
  5. package/dist/auth/oauth-client.d.ts +27 -2
  6. package/dist/auth/oauth-client.js +62 -11
  7. package/dist/auth/oauth-client.js.map +1 -1
  8. package/dist/auth/session-workspace.d.ts +2 -0
  9. package/dist/auth/session-workspace.js +20 -0
  10. package/dist/auth/session-workspace.js.map +1 -0
  11. package/dist/auth/token-storage.d.ts +19 -5
  12. package/dist/auth/token-storage.js +11 -6
  13. package/dist/auth/token-storage.js.map +1 -1
  14. package/dist/cli.d.ts +2 -7
  15. package/dist/cli.js +111 -33
  16. package/dist/cli.js.map +1 -1
  17. package/dist/http/api-client.d.ts +4 -13
  18. package/dist/http/api-client.js +18 -18
  19. package/dist/http/api-client.js.map +1 -1
  20. package/dist/index.d.ts +8 -6
  21. package/dist/index.js +3 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/instructions/server-instructions.d.ts +15 -0
  24. package/dist/instructions/server-instructions.js +243 -0
  25. package/dist/instructions/server-instructions.js.map +1 -0
  26. package/dist/package-metadata.js +7 -1
  27. package/dist/package-metadata.js.map +1 -1
  28. package/dist/resources/concepts/feedback-sheets.md +77 -0
  29. package/dist/resources/concepts/sandbox.md +13 -0
  30. package/dist/resources/concepts/workbook-classification.md +241 -0
  31. package/dist/resources/docs/agent-behavior.md +393 -0
  32. package/dist/resources/docs/crm-integration.md +535 -0
  33. package/dist/resources/docs/files-and-uploads.md +295 -0
  34. package/dist/resources/docs/knowledge-base.md +521 -0
  35. package/dist/resources/docs/pipeline-builder.md +221 -0
  36. package/dist/resources/docs/pipeline-settings-deep.md +221 -0
  37. package/dist/resources/docs/platforms.md +513 -0
  38. package/dist/resources/docs/prompt-anatomy.md +298 -0
  39. package/dist/resources/docs/prompt-principles.md +289 -0
  40. package/dist/resources/registry.js +34 -12
  41. package/dist/resources/registry.js.map +1 -1
  42. package/dist/resources/workflows/compare-models.md +46 -0
  43. package/dist/resources/workflows/connect-crm-from-scratch.md +89 -0
  44. package/dist/resources/workflows/connect-datasource-from-scratch.md +92 -0
  45. package/dist/resources/workflows/extract-from-document.md +36 -0
  46. package/dist/resources/workflows/iterate-with-sandbox.md +31 -0
  47. package/dist/resources/workflows/platform-setup-from-scratch.md +113 -0
  48. package/dist/resources/workflows/production-readiness-check.md +41 -0
  49. package/dist/schemas/mcp-tools.json +2636 -182
  50. package/dist/server.js +2 -0
  51. package/dist/server.js.map +1 -1
  52. package/dist/tools/definitions/agent-design.d.ts +215 -0
  53. package/dist/tools/definitions/agent-design.js +643 -0
  54. package/dist/tools/definitions/agent-design.js.map +1 -0
  55. package/dist/tools/definitions/crm-platform.d.ts +211 -0
  56. package/dist/tools/definitions/crm-platform.js +1070 -0
  57. package/dist/tools/definitions/crm-platform.js.map +1 -0
  58. package/dist/tools/definitions/datasource.d.ts +40 -0
  59. package/dist/tools/definitions/datasource.js +196 -0
  60. package/dist/tools/definitions/datasource.js.map +1 -0
  61. package/dist/tools/definitions/knowledge.d.ts +215 -0
  62. package/dist/tools/definitions/knowledge.js +782 -0
  63. package/dist/tools/definitions/knowledge.js.map +1 -0
  64. package/dist/tools/definitions/model-comparison.d.ts +25 -0
  65. package/dist/tools/definitions/model-comparison.js +101 -0
  66. package/dist/tools/definitions/model-comparison.js.map +1 -0
  67. package/dist/tools/definitions/platform-setup.d.ts +412 -0
  68. package/dist/tools/definitions/platform-setup.js +738 -0
  69. package/dist/tools/definitions/platform-setup.js.map +1 -0
  70. package/dist/tools/definitions/session.d.ts +11 -0
  71. package/dist/tools/definitions/session.js +86 -0
  72. package/dist/tools/definitions/session.js.map +1 -0
  73. package/dist/tools/definitions/shared.d.ts +742 -0
  74. package/dist/tools/definitions/shared.js +773 -0
  75. package/dist/tools/definitions/shared.js.map +1 -0
  76. package/dist/tools/definitions.d.ts +873 -88
  77. package/dist/tools/definitions.js +14 -856
  78. package/dist/tools/definitions.js.map +1 -1
  79. package/dist/tools/registry.d.ts +3 -1
  80. package/dist/tools/registry.js +90 -11
  81. package/dist/tools/registry.js.map +1 -1
  82. package/dist/tools/result.d.ts +1 -1
  83. package/dist/tools/result.js +12 -4
  84. package/dist/tools/result.js.map +1 -1
  85. package/dist/utils/logger.js +2 -1
  86. package/dist/utils/logger.js.map +1 -1
  87. package/docs/host-setup.md +34 -15
  88. package/package.json +2 -2
  89. package/scripts/install-claude-desktop.js +89 -11
  90. package/scripts/mock-api-server.js +1 -1
  91. package/scripts/mock-credentials.js +49 -6
  92. package/dist/types/api-contract.gen.d.ts +0 -6975
  93. package/dist/types/api-contract.gen.js +0 -6
  94. package/dist/types/api-contract.gen.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,gBAAgB;IACnB,GAAG,kBAAkB;IACrB,GAAG,cAAc;IACjB,GAAG,gBAAgB;IACnB,GAAG,eAAe;IAClB,GAAG,YAAY;IACf,GAAG,oBAAoB;CACxB,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import type { CallToolResult, Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ConnectionStore } from '../auth/connection-store.js';
2
3
  import { type ToolApiClient } from '../http/api-client.js';
3
- import { type CreateToolsOptions } from './definitions.js';
4
+ import type { CreateToolsOptions } from './definitions/shared.js';
4
5
  export interface RegisteredTool extends Tool {
5
6
  handler(args: Record<string, unknown>): Promise<CallToolResult> | CallToolResult;
6
7
  }
7
8
  export interface ToolFactoryOptions extends CreateToolsOptions {
8
9
  readonly apiClient?: ToolApiClient;
10
+ readonly store?: ConnectionStore;
9
11
  }
10
12
  export declare function createTools(options?: ToolFactoryOptions): RegisteredTool[];
11
13
  export declare const tools: RegisteredTool[];
@@ -1,10 +1,13 @@
1
- import { ApiClient, ApiClientError } from '../http/api-client.js';
1
+ import { ConnectionStore, WorkspaceResolutionError } from '../auth/connection-store.js';
2
+ import { getSessionWorkspaceId } from '../auth/session-workspace.js';
3
+ import { ApiClient } from '../http/api-client.js';
2
4
  import { getToolContract } from './contracts.js';
3
5
  import { toolDefinitions } from './definitions.js';
4
6
  import { jsonToolResult, mapToolError } from './result.js';
5
7
  const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
6
8
  export function createTools(options = {}) {
7
9
  const apiClient = options.apiClient ?? new ApiClient();
10
+ const store = options.store ?? new ConnectionStore();
8
11
  return toolDefinitions.map((rawDefinition) => {
9
12
  const definition = rawDefinition;
10
13
  const contract = getToolContract(definition.name);
@@ -13,40 +16,116 @@ export function createTools(options = {}) {
13
16
  description: contract.description,
14
17
  inputSchema: contract.inputSchema,
15
18
  async handler(args) {
19
+ let resolvedWorkspaceId;
16
20
  try {
17
21
  const parsedInput = definition.schema.parse(args);
18
- const input = await withDefaultWorkspaceId(parsedInput, definition, apiClient);
22
+ await store.migrateLegacy();
23
+ if (definition.localHandler) {
24
+ const localOutput = await definition.localHandler(parsedInput, {
25
+ store,
26
+ env: process.env,
27
+ });
28
+ return jsonToolResult(localOutput);
29
+ }
30
+ const { workspaceId, apiKey } = await resolveWorkspace(parsedInput, definition, store);
31
+ resolvedWorkspaceId = workspaceId;
32
+ const input = applyWorkspaceId(parsedInput, definition, workspaceId);
33
+ if (!definition.createRequest) {
34
+ throw new Error(`Tool ${definition.name} has neither localHandler nor createRequest`);
35
+ }
19
36
  const request = definition.createRequest(input);
20
37
  const response = request.method
21
- ? await apiClient.request(request.method, request.path, request.body)
22
- : await apiClient.post(request.path, request.body);
38
+ ? await apiClient.request(request.method, request.path, apiKey, request.body)
39
+ : await apiClient.post(request.path, apiKey, request.body);
23
40
  const output = definition.enhanceResponse
24
41
  ? definition.enhanceResponse(response, input)
25
42
  : response;
26
43
  return jsonToolResult(output);
27
44
  }
28
45
  catch (error) {
29
- return mapToolError(error, definition.restartToolName);
46
+ return mapToolError(error, definition.restartToolName, resolvedWorkspaceId);
30
47
  }
31
48
  },
32
49
  };
33
50
  });
34
51
  }
35
52
  export const tools = createTools();
36
- async function withDefaultWorkspaceId(input, definition, apiClient) {
53
+ /**
54
+ * Выбирает воркспейс и его api_key для вызова. Приоритет (env — authoritative):
55
+ * 1. `BESALES_WORKSPACE_ID` (жёсткий пин сессии; несовпадающий explicit → ошибка);
56
+ * 2. явный `workspace_id` в аргументах тула (только без env);
57
+ * 3. session-override (`besales_workspace_use`, in-memory для процесса-сессии);
58
+ * 4. глобальный `active`;
59
+ * 5. единственное подключение;
60
+ * иначе — `WorkspaceResolutionError` с конкретным указанием, что сделать.
61
+ */
62
+ async function resolveWorkspace(input, definition, store, env = process.env, sessionWorkspaceId = getSessionWorkspaceId()) {
63
+ const connections = await store.list();
64
+ if (connections.length === 0) {
65
+ throw new WorkspaceResolutionError('Not connected to any Animaly workspace. Run `besales-mcp connect`.');
66
+ }
67
+ const isConnected = (id) => connections.some((connection) => connection.workspaceId === id);
68
+ const explicitWorkspaceId = definition.defaultWorkspaceId ? getWorkspaceId(input) : undefined;
69
+ const envWorkspaceId = env.BESALES_WORKSPACE_ID?.trim() || undefined;
70
+ const chosen = envWorkspaceId
71
+ ? resolvePinnedWorkspace(envWorkspaceId, explicitWorkspaceId, isConnected)
72
+ : resolveSelectedWorkspace(explicitWorkspaceId, connections, isConnected, sessionWorkspaceId, await store.getActive());
73
+ const apiKey = await store.getKey(chosen);
74
+ if (!apiKey) {
75
+ throw new WorkspaceResolutionError(`Workspace ${chosen} has no stored key (partial state). Run \`besales-mcp connect\` again.`);
76
+ }
77
+ return { workspaceId: chosen, apiKey };
78
+ }
79
+ function resolvePinnedWorkspace(envWorkspaceId, explicitWorkspaceId, isConnected) {
80
+ if (!UUID_PATTERN.test(envWorkspaceId)) {
81
+ throw new WorkspaceResolutionError(`BESALES_WORKSPACE_ID is not a valid workspace id: ${envWorkspaceId}`);
82
+ }
83
+ if (!isConnected(envWorkspaceId)) {
84
+ throw new WorkspaceResolutionError(`This session is pinned to workspace ${envWorkspaceId} via BESALES_WORKSPACE_ID, but it is not connected. Run \`besales-mcp connect\` for it.`);
85
+ }
86
+ if (explicitWorkspaceId && explicitWorkspaceId !== envWorkspaceId) {
87
+ throw new WorkspaceResolutionError(`This session is pinned to workspace ${envWorkspaceId} via BESALES_WORKSPACE_ID; the tool requested ${explicitWorkspaceId}. Cross-workspace calls are refused.`);
88
+ }
89
+ return envWorkspaceId;
90
+ }
91
+ function resolveSelectedWorkspace(explicitWorkspaceId, connections, isConnected, sessionWorkspaceId, active) {
92
+ if (explicitWorkspaceId) {
93
+ if (!isConnected(explicitWorkspaceId)) {
94
+ throw new WorkspaceResolutionError(`Workspace ${explicitWorkspaceId} is not connected. Run \`besales-mcp connect\` for it.`);
95
+ }
96
+ return explicitWorkspaceId;
97
+ }
98
+ if (sessionWorkspaceId && isConnected(sessionWorkspaceId)) {
99
+ return sessionWorkspaceId;
100
+ }
101
+ if (active && isConnected(active)) {
102
+ return active;
103
+ }
104
+ if (connections.length === 1) {
105
+ return connections[0].workspaceId;
106
+ }
107
+ throw new WorkspaceResolutionError('Multiple workspaces connected and none selected. Bind this session with the besales_workspace_use tool, set BESALES_WORKSPACE_ID, or run `besales-mcp use <workspaceId>`.');
108
+ }
109
+ function applyWorkspaceId(input, definition, workspaceId) {
37
110
  if (!definition.defaultWorkspaceId || !isWorkspaceInput(input) || input.workspace_id) {
38
111
  return input;
39
112
  }
40
- const workspaceId = await apiClient.getStoredWorkspaceId();
41
- if (!workspaceId || !UUID_PATTERN.test(workspaceId)) {
42
- throw new ApiClientError('Connected workspace is missing');
43
- }
44
113
  return {
45
114
  ...input,
46
115
  workspace_id: workspaceId,
47
116
  };
48
117
  }
118
+ function getWorkspaceId(input) {
119
+ if (!isWorkspaceInput(input)) {
120
+ return undefined;
121
+ }
122
+ return input.workspace_id && input.workspace_id.length > 0 ? input.workspace_id : undefined;
123
+ }
49
124
  function isWorkspaceInput(input) {
50
- return Boolean(input && typeof input === 'object');
125
+ if (!input || typeof input !== 'object') {
126
+ return false;
127
+ }
128
+ const candidate = input.workspace_id;
129
+ return candidate === undefined || typeof candidate === 'string';
51
130
  }
52
131
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAsB,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAgD,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,YAAY,GAAG,4EAA4E,CAAC;AAUlG,MAAM,UAAU,WAAW,CAAC,UAA8B,EAAE;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,SAAS,EAAE,CAAC;IAEvD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,aAAa,EAAkB,EAAE;QAC3D,MAAM,UAAU,GAAG,aAAwC,CAAC;QAC5D,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,KAAK,CAAC,OAAO,CAAC,IAAI;gBAChB,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;oBAC/E,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM;wBAC7B,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;wBACrE,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe;wBACvC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;wBAC7C,CAAC,CAAC,QAAQ,CAAC;oBAEb,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAqB,WAAW,EAAE,CAAC;AAErD,KAAK,UAAU,sBAAsB,CACnC,KAAY,EACZ,UAAiC,EACjC,SAAwB;IAExB,IAAI,CAAC,UAAU,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE,CAAC;IAC3D,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,cAAc,CAAC,gCAAgC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,YAAY,EAAE,WAAW;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { type CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
2
  export declare function jsonToolResult(value: unknown): CallToolResult;
3
3
  export declare function errorToolResult(message: string): CallToolResult;
4
- export declare function mapToolError(error: unknown, restartToolName?: string): CallToolResult;
4
+ export declare function mapToolError(error: unknown, restartToolName?: string, workspaceId?: string): CallToolResult;
@@ -1,5 +1,6 @@
1
1
  import { ErrorCode, McpError, } from '@modelcontextprotocol/sdk/types.js';
2
2
  import { ZodError } from 'zod';
3
+ import { WorkspaceResolutionError } from '../auth/connection-store.js';
3
4
  import { ApiClientError, ApiClientNetworkError } from '../http/api-client.js';
4
5
  export function jsonToolResult(value) {
5
6
  return {
@@ -22,12 +23,17 @@ export function errorToolResult(message) {
22
23
  ],
23
24
  };
24
25
  }
25
- export function mapToolError(error, restartToolName) {
26
+ export function mapToolError(error, restartToolName, workspaceId) {
26
27
  if (error instanceof ZodError) {
27
28
  throw new McpError(ErrorCode.InvalidParams, formatZodError(error));
28
29
  }
30
+ // Конкретные сообщения резолвера воркспейса (не подключён / неоднозначно /
31
+ // env-конфликт) — иначе ApiClientError-ветка ниже схлопнула бы их в generic.
32
+ if (error instanceof WorkspaceResolutionError) {
33
+ return errorToolResult(error.message);
34
+ }
29
35
  if (error instanceof ApiClientError) {
30
- return mapApiClientError(error, restartToolName);
36
+ return mapApiClientError(error, restartToolName, workspaceId);
31
37
  }
32
38
  if (error instanceof ApiClientNetworkError) {
33
39
  return errorToolResult(`Animaly API network error: ${error.message}`);
@@ -40,7 +46,7 @@ export function mapToolError(error, restartToolName) {
40
46
  }
41
47
  throw new McpError(ErrorCode.InternalError, 'Unknown tool execution error');
42
48
  }
43
- function mapApiClientError(error, restartToolName) {
49
+ function mapApiClientError(error, restartToolName, workspaceId) {
44
50
  if (!error.status) {
45
51
  return errorToolResult('Not connected to Animaly. Run `besales-mcp connect` first.');
46
52
  }
@@ -48,7 +54,9 @@ function mapApiClientError(error, restartToolName) {
48
54
  return errorToolResult(`Animaly API is temporarily unavailable (${error.status}). Try again later.`);
49
55
  }
50
56
  if (error.status === 401) {
51
- return errorToolResult('Animaly rejected stored credentials. Run `besales-mcp connect` again.');
57
+ return errorToolResult(workspaceId
58
+ ? `Animaly rejected stored credentials for workspace ${workspaceId}. Run \`besales-mcp connect\` again for it.`
59
+ : 'Animaly rejected stored credentials. Run `besales-mcp connect` again.');
52
60
  }
53
61
  if (error.status === 403) {
54
62
  return errorToolResult('Animaly rejected this request. The stored key needs `mcp:*` or `mcp:platform-setup` access.');
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/tools/result.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,GAET,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACrC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,eAAwB;IACnE,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAC3C,OAAO,eAAe,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAqB,EAAE,eAAwB;IACxE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC,4DAA4D,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACxB,OAAO,eAAe,CAAC,2CAA2C,KAAK,CAAC,MAAM,qBAAqB,CAAC,CAAC;IACvG,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,eAAe,CAAC,uEAAuE,CAAC,CAAC;IAClG,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,eAAe,CACpB,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,eAAe,CACpB,eAAe;YACb,CAAC,CAAC,qCAAqC,eAAe,kCAAkC;YACxF,CAAC,CAAC,qEAAqE,CAC1E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,eAAe,CACpB,KAAK,CAAC,eAAe;YACnB,CAAC,CAAC,gCAAgC,KAAK,CAAC,eAAe,EAAE;YACzD,CAAC,CAAC,8BAA8B,CACnC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,eAAe,CAAC,8CAA8C,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,eAAe,CACpB,KAAK,CAAC,eAAe;QACnB,CAAC,CAAC,6BAA6B,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,eAAe,EAAE;QACxE,CAAC,CAAC,6BAA6B,KAAK,CAAC,MAAM,IAAI,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,OAAO,KAAK,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;SACtE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/tools/result.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import pino from 'pino';
2
+ const STDERR_FD = 2;
2
3
  export const logger = pino({
3
4
  level: process.env.LOG_LEVEL ?? (process.env.NODE_ENV === 'test' ? 'silent' : 'info'),
4
5
  redact: [
@@ -9,5 +10,5 @@ export const logger = pino({
9
10
  '*.apiKey',
10
11
  '*.*.apiKey',
11
12
  ],
12
- }, pino.destination(2));
13
+ }, pino.destination(STDERR_FD));
13
14
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CACxB;IACE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACrF,MAAM,EAAE;QACN,SAAS;QACT,WAAW;QACX,aAAa;QACb,QAAQ;QACR,UAAU;QACV,YAAY;KACb;CACF,EACD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CACxB;IACE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACrF,MAAM,EAAE;QACN,SAAS;QACT,WAAW;QACX,aAAa;QACb,QAAQ;QACR,UAAU;QACV,YAAY;KACb;CACF,EACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAC5B,CAAC"}
@@ -41,35 +41,49 @@ Use this base URL for local host configs:
41
41
 
42
42
  ```bash
43
43
  export BESALES_API_BASE_URL=http://localhost:3000/api/v2
44
+ export BESALES_OAUTH_AUTHORIZE_URL=http://localhost:5173/settings/mcp/consent
44
45
  ```
45
46
 
46
47
  `prompt-services` is not a host precondition. Hosts talk only to `besales-mcp`,
47
48
  and `besales-mcp` talks only to `ai-aniomaly`.
48
49
 
49
- For production users, omit `BESALES_API_BASE_URL`. The package defaults to
50
- `https://app.besales.ai/api/v2`.
50
+ For production users, omit both variables. The package defaults to
51
+ `BESALES_API_BASE_URL=https://core.besales.ai/api/v2` and
52
+ `BESALES_OAUTH_AUTHORIZE_URL=https://app.besales.ai/settings/mcp/consent`.
51
53
 
52
54
  ## Credentials
53
55
 
54
56
  Live tool calls require an MCP API key stored in the local macOS keychain:
55
57
 
56
58
  ```bash
57
- BESALES_API_BASE_URL=http://localhost:3000/api/v2 node bin/besales-mcp.js connect
59
+ BESALES_API_BASE_URL=http://localhost:3000/api/v2 \
60
+ BESALES_OAUTH_AUTHORIZE_URL=http://localhost:5173/settings/mcp/consent \
61
+ node bin/besales-mcp.js connect
58
62
  BESALES_API_BASE_URL=http://localhost:3000/api/v2 node bin/besales-mcp.js status
59
63
  ```
60
64
 
61
65
  The `connect` command opens the browser and completes
62
- `/api/v2/auth/mcp-connect` through the loopback callback. Use `disconnect` to
63
- clear credentials:
66
+ the frontend consent bridge, which forwards to backend
67
+ `/api/v2/auth/mcp-connect` through the loopback callback. `disconnect` removes the
68
+ active workspace (add an id to remove one, or `--all` to clear every workspace):
69
+
70
+ ```bash
71
+ BESALES_API_BASE_URL=http://localhost:3000/api/v2 node bin/besales-mcp.js disconnect --all
72
+ ```
73
+
74
+ Each connected workspace stores its own API key (several can coexist, even across
75
+ accounts). Connect each one once — re-login in the browser between accounts:
64
76
 
65
77
  ```bash
66
- BESALES_API_BASE_URL=http://localhost:3000/api/v2 node bin/besales-mcp.js disconnect
78
+ node bin/besales-mcp.js connect # workspace A (browser logged into account A)
79
+ node bin/besales-mcp.js connect # workspace B (re-login in the browser first)
80
+ node bin/besales-mcp.js connections # list all connections, marks the active one
67
81
  ```
68
82
 
69
- The connected workspace is stored alongside the API key. Workspace-level tools
70
- default to that workspace; users should not be asked to provide `workspace_id`.
71
- To switch workspaces, disconnect, switch or create the desired workspace in the
72
- web app, then connect again.
83
+ Workspace-level tools default to the session's workspace; users should not be
84
+ asked to provide `workspace_id`. Pin a session with `BESALES_WORKSPACE_ID` in the
85
+ host's `env` block, or set the global default with `besales-mcp use <workspaceId>`.
86
+ See the package README "Multiple Workspaces" section for the full precedence.
73
87
 
74
88
  For MCP protocol smoke without live auth, use the local mock API:
75
89
 
@@ -92,6 +106,7 @@ state.
92
106
 
93
107
  ```bash
94
108
  BESALES_API_BASE_URL=http://localhost:3000/api/v2 \
109
+ BESALES_OAUTH_AUTHORIZE_URL=http://localhost:5173/settings/mcp/consent \
95
110
  yarn dlx @modelcontextprotocol/inspector node bin/besales-mcp.js
96
111
  ```
97
112
 
@@ -109,8 +124,8 @@ BESALES_API_BASE_URL=http://localhost:3000/api/v2 \
109
124
 
110
125
  Expected:
111
126
 
112
- - 31 tools are listed.
113
- - 5 resources are listed.
127
+ - 128 tools are listed.
128
+ - 23 resources are listed.
114
129
  - `besales://concepts/external-execution` opens.
115
130
  - A direct tool, for example `besales_icp_create`, reaches `ai-aniomaly`.
116
131
  - An external pair returns instructions and accepts submit.
@@ -137,7 +152,8 @@ timestamped backup:
137
152
  "command": "/absolute/path/to/node",
138
153
  "args": ["/Users/peresvets/apps/animaly/besales-mcp/bin/besales-mcp.js"],
139
154
  "env": {
140
- "BESALES_API_BASE_URL": "http://localhost:3000/api/v2"
155
+ "BESALES_API_BASE_URL": "http://localhost:3000/api/v2",
156
+ "BESALES_OAUTH_AUTHORIZE_URL": "http://localhost:5173/settings/mcp/consent"
141
157
  }
142
158
  }
143
159
  }
@@ -162,6 +178,7 @@ If `claude` is on `PATH`, add the server at user scope:
162
178
  ```bash
163
179
  claude mcp add --scope user \
164
180
  -e BESALES_API_BASE_URL=http://localhost:3000/api/v2 \
181
+ -e BESALES_OAUTH_AUTHORIZE_URL=http://localhost:5173/settings/mcp/consent \
165
182
  -- besales node /Users/peresvets/apps/animaly/besales-mcp/bin/besales-mcp.js
166
183
  ```
167
184
 
@@ -185,6 +202,7 @@ Codex CLI manages stdio MCP servers through `codex mcp`.
185
202
  ```bash
186
203
  codex mcp add besales \
187
204
  --env BESALES_API_BASE_URL=http://localhost:3000/api/v2 \
205
+ --env BESALES_OAUTH_AUTHORIZE_URL=http://localhost:5173/settings/mcp/consent \
188
206
  -- node /Users/peresvets/apps/animaly/besales-mcp/bin/besales-mcp.js
189
207
  ```
190
208
 
@@ -197,6 +215,7 @@ args = ["/Users/peresvets/apps/animaly/besales-mcp/bin/besales-mcp.js"]
197
215
 
198
216
  [mcp_servers.besales.env]
199
217
  BESALES_API_BASE_URL = "http://localhost:3000/api/v2"
218
+ BESALES_OAUTH_AUTHORIZE_URL = "http://localhost:5173/settings/mcp/consent"
200
219
  ```
201
220
 
202
221
  Verify:
@@ -224,7 +243,7 @@ session may need an app/session restart before new tools appear.
224
243
  Codex App can defer MCP tool schemas until the model searches for them. This is
225
244
  host behavior, not a `besales-mcp` server problem: `codex mcp list/get besales`
226
245
  and MCP Inspector `tools/list` are still the source checks for whether the
227
- server is installed and exposing all 31 tools.
246
+ server is installed and exposing all 128 tools.
228
247
 
229
248
  User-facing prompts must stay natural. Users should ask for the business action,
230
249
  for example:
@@ -245,7 +264,7 @@ Use this matrix for local validation before staging/prod checks.
245
264
 
246
265
  | Host | Config check | Protocol check | Direct tool | External pair |
247
266
  |---|---|---|---|---|
248
- | MCP Inspector | command launches | 31 tools / 5 resources | `besales_icp_create` | instructions -> submit |
267
+ | MCP Inspector | command launches | 128 tools / 23 resources | `besales_icp_create` | instructions -> submit |
249
268
  | Claude Desktop | config JSON has `besales` | server connected | `besales_icp_create` | instructions -> submit |
250
269
  | Claude Code | `claude mcp list` has `besales` | `/mcp` connected | `besales_icp_create` | instructions -> submit |
251
270
  | Codex CLI | `codex mcp list` has `besales` | new session sees tools | `besales_icp_create` | instructions -> submit |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@besales/mcp",
3
- "version": "0.1.0",
3
+ "version": "0.11.1",
4
4
  "description": "Model Context Protocol server for Animaly / Besales",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/be-sales/mcp#readme",
@@ -43,7 +43,7 @@
43
43
  "besales-mcp": "bin/besales-mcp.js"
44
44
  },
45
45
  "scripts": {
46
- "build": "tsc && mkdir -p dist/schemas dist/resources/concepts && cp src/schemas/mcp-tools.json dist/schemas/mcp-tools.json && cp src/resources/concepts/*.md dist/resources/concepts/",
46
+ "build": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc && mkdir -p dist/schemas dist/resources/concepts dist/resources/workflows dist/resources/docs && cp src/schemas/mcp-tools.json dist/schemas/mcp-tools.json && cp src/resources/concepts/*.md dist/resources/concepts/ && cp src/resources/workflows/*.md dist/resources/workflows/ && cp src/resources/docs/*.md dist/resources/docs/",
47
47
  "start": "node bin/besales-mcp.js",
48
48
  "dev:mock": "node scripts/mock-api-server.js",
49
49
  "dev:mock:seed": "node scripts/mock-credentials.js seed",
@@ -11,6 +11,8 @@ const CLAUDE_CONFIG_PATH = join(
11
11
  'Library/Application Support/Claude/claude_desktop_config.json',
12
12
  );
13
13
  const LOCAL_API_BASE_URL = 'http://localhost:3000/api/v2';
14
+ const LOCAL_OAUTH_AUTHORIZE_URL = 'http://localhost:5173/settings/mcp/consent';
15
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
14
16
  const packageRoot = dirname(fileURLToPath(new URL('../package.json', import.meta.url)));
15
17
  const binPath = join(packageRoot, 'bin/besales-mcp.js');
16
18
 
@@ -26,6 +28,68 @@ function ensureObject(value) {
26
28
  return value;
27
29
  }
28
30
 
31
+ /** Парсит `--name <serverName>` / `--workspace <uuid>` из argv. */
32
+ function parseArgs(argv) {
33
+ const args = {};
34
+ for (let index = 0; index < argv.length; index += 1) {
35
+ if (argv[index] === '--name') {
36
+ index += 1;
37
+ args.name = argv[index];
38
+ } else if (argv[index] === '--workspace') {
39
+ index += 1;
40
+ args.workspace = argv[index];
41
+ }
42
+ }
43
+
44
+ return args;
45
+ }
46
+
47
+ /**
48
+ * Какой `mcpServers`-entry установить:
49
+ * - без флагов → дефолтный `besales` с локальными dev-URL (как раньше);
50
+ * - `--name X --workspace <uuid>` → именованный сервер, жёстко привязанный к воркспейсу
51
+ * через `BESALES_WORKSPACE_ID` (прод-дефолты). Привязка живёт в конфиге, поэтому
52
+ * переживает респавн/reconnect — это надёжный способ держать N воркспейсов в GUI-хосте
53
+ * (несколько сессий, каждая на своём воркспейсе), в отличие от in-memory
54
+ * `besales_workspace_use`. Тулы появляются как `mcp__<name>__besales_*`.
55
+ *
56
+ * @throws {Error} если задан только один из `--name` / `--workspace` или невалидный uuid.
57
+ */
58
+ function resolveServer({ name, workspace }, execPath) {
59
+ if (!name && !workspace) {
60
+ return {
61
+ key: 'besales',
62
+ entry: {
63
+ command: execPath,
64
+ args: [binPath],
65
+ env: {
66
+ BESALES_API_BASE_URL: LOCAL_API_BASE_URL,
67
+ BESALES_OAUTH_AUTHORIZE_URL: LOCAL_OAUTH_AUTHORIZE_URL,
68
+ },
69
+ },
70
+ };
71
+ }
72
+
73
+ if (!name || !workspace) {
74
+ throw new Error(
75
+ 'Specify both --name <serverName> and --workspace <uuid> ' +
76
+ '(or neither for the local-dev default besales server).',
77
+ );
78
+ }
79
+ if (!UUID_PATTERN.test(workspace)) {
80
+ throw new Error(`--workspace is not a valid workspace id: ${workspace}`);
81
+ }
82
+
83
+ return {
84
+ key: name,
85
+ entry: {
86
+ command: execPath,
87
+ args: [binPath],
88
+ env: { BESALES_WORKSPACE_ID: workspace },
89
+ },
90
+ };
91
+ }
92
+
29
93
  async function readConfig() {
30
94
  if (!existsSync(CLAUDE_CONFIG_PATH)) {
31
95
  return {};
@@ -41,6 +105,8 @@ async function readConfig() {
41
105
  }
42
106
 
43
107
  async function install() {
108
+ const { key, entry } = resolveServer(parseArgs(process.argv.slice(2)), process.execPath);
109
+
44
110
  await mkdir(dirname(CLAUDE_CONFIG_PATH), { recursive: true });
45
111
 
46
112
  if (existsSync(CLAUDE_CONFIG_PATH)) {
@@ -51,23 +117,35 @@ async function install() {
51
117
 
52
118
  const config = await readConfig();
53
119
  const mcpServers = ensureObject(config.mcpServers);
54
-
55
- mcpServers.besales = {
56
- command: process.execPath,
57
- args: [binPath],
58
- env: {
59
- BESALES_API_BASE_URL: LOCAL_API_BASE_URL,
60
- },
61
- };
120
+ // Только upsert нужного ключа — остальные серверы (besales, pencil, другие пины) не трогаем.
121
+ mcpServers[key] = entry;
62
122
  config.mcpServers = mcpServers;
63
123
 
64
124
  const tempPath = `${CLAUDE_CONFIG_PATH}.tmp-${process.pid}`;
65
125
  await writeFile(tempPath, `${JSON.stringify(config, null, 2)}\n`, 'utf-8');
66
126
  await rename(tempPath, CLAUDE_CONFIG_PATH);
67
127
 
68
- console.log(`Installed besales MCP config at ${CLAUDE_CONFIG_PATH}`);
69
- console.log(`Node: ${process.execPath}`);
70
- console.log(`Command args: ${binPath}`);
128
+ console.log(`Installed MCP server "${key}" at ${CLAUDE_CONFIG_PATH}`);
129
+
130
+ if (entry.env.BESALES_WORKSPACE_ID) {
131
+ console.log(`Pinned to workspace ${entry.env.BESALES_WORKSPACE_ID} (production defaults).`);
132
+ console.log(`Tools will appear as mcp__${key}__besales_* — always this workspace,`);
133
+ console.log('and the pin survives reconnects (unlike the in-memory besales_workspace_use).');
134
+ } else {
135
+ console.log(`Node: ${process.execPath}`);
136
+ console.log(`Command args: ${binPath}`);
137
+ console.log('');
138
+ console.log('Local dev: export the same overrides in the shell before running connect,');
139
+ console.log('otherwise CLI uses production defaults and the issued key will not match');
140
+ console.log('the local backend:');
141
+ console.log('');
142
+ console.log(` export BESALES_API_BASE_URL=${LOCAL_API_BASE_URL}`);
143
+ console.log(` export BESALES_OAUTH_AUTHORIZE_URL=${LOCAL_OAUTH_AUTHORIZE_URL}`);
144
+ console.log(` node ${binPath} connect`);
145
+ }
146
+
147
+ console.log('');
148
+ console.log('Restart Claude Desktop to load the change.');
71
149
  }
72
150
 
73
151
  install().catch((error) => {
@@ -27,7 +27,7 @@ const server = createServer((request, response) => {
27
27
  }
28
28
 
29
29
  const isInstructions = url.pathname.endsWith('/instructions');
30
- const isSubmit = url.pathname.endsWith('/submit') || url.pathname.includes('/submit');
30
+ const isSubmit = url.pathname.includes('/submit');
31
31
 
32
32
  response.writeHead(isSubmit ? 201 : 200, { 'Content-Type': 'application/json' });
33
33
  response.end(