@edicarlos.lds/businessmap-mcp 1.0.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.
- package/LICENSE +21 -0
- package/README.md +200 -0
- package/dist/client/businessmap-client.d.ts +37 -0
- package/dist/client/businessmap-client.d.ts.map +1 -0
- package/dist/client/businessmap-client.js +196 -0
- package/dist/client/businessmap-client.js.map +1 -0
- package/dist/config/environment.d.ts +16 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +60 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/server/mcp-server.d.ts +16 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +593 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/types/businessmap.d.ts +158 -0
- package/dist/types/businessmap.d.ts.map +1 -0
- package/dist/types/businessmap.js +3 -0
- package/dist/types/businessmap.js.map +1 -0
- package/package.json +77 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Edicarlos Lopes
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# BusinessMap MCP Server
|
|
2
|
+
|
|
3
|
+
Model Context Protocol server for BusinessMap (Kanbanize) integration.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### Via NPX (Recommended)
|
|
8
|
+
|
|
9
|
+
You can run the BusinessMap MCP server directly using npx without installing it globally:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx @edicarlos.lds/businessmap-mcp
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Global Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g @edicarlos.lds/businessmap-mcp
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Configuration
|
|
22
|
+
|
|
23
|
+
### Environment Variables
|
|
24
|
+
|
|
25
|
+
The server requires the following environment variables:
|
|
26
|
+
|
|
27
|
+
- `BUSINESSMAP_API_TOKEN`: Your BusinessMap API token
|
|
28
|
+
- `BUSINESSMAP_API_URL`: Your BusinessMap API URL (e.g., `https://your-account.kanbanize.com/api/v2`)
|
|
29
|
+
- `BUSINESSMAP_READ_ONLY_MODE`: Set to `"true"` for read-only mode, `"false"` to allow modifications (optional, defaults to `"false"`)
|
|
30
|
+
|
|
31
|
+
### Claude Desktop Configuration
|
|
32
|
+
|
|
33
|
+
Add the following configuration to your Claude Desktop `claude_desktop_config.json` file:
|
|
34
|
+
|
|
35
|
+
#### Using NPX:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"mcpServers": {
|
|
40
|
+
"Businessmap": {
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": ["-y", "@edicarlos.lds/businessmap-mcp"],
|
|
43
|
+
"env": {
|
|
44
|
+
"BUSINESSMAP_API_TOKEN": "your_token_here",
|
|
45
|
+
"BUSINESSMAP_API_URL": "https://your-account.kanbanize.com/api/v2",
|
|
46
|
+
"BUSINESSMAP_READ_ONLY_MODE": "false"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
#### Using Global Installation:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"mcpServers": {
|
|
58
|
+
"Businessmap": {
|
|
59
|
+
"command": "businessmap-mcp",
|
|
60
|
+
"env": {
|
|
61
|
+
"BUSINESSMAP_API_TOKEN": "your_token_here",
|
|
62
|
+
"BUSINESSMAP_API_URL": "https://your-account.kanbanize.com/api/v2",
|
|
63
|
+
"BUSINESSMAP_READ_ONLY_MODE": "false"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Manual Setup
|
|
71
|
+
|
|
72
|
+
1. Clone this repository:
|
|
73
|
+
```bash
|
|
74
|
+
git clone https://github.com/edicarloslds/businessmap-mcp.git
|
|
75
|
+
cd businessmap-mcp
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
2. Install dependencies:
|
|
79
|
+
```bash
|
|
80
|
+
npm install
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
3. Create a `.env` file with your BusinessMap credentials:
|
|
84
|
+
```env
|
|
85
|
+
BUSINESSMAP_API_TOKEN=your_token_here
|
|
86
|
+
BUSINESSMAP_API_URL=https://your-account.kanbanize.com/api/v2
|
|
87
|
+
BUSINESSMAP_READ_ONLY_MODE=false
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
4. Build the project:
|
|
91
|
+
```bash
|
|
92
|
+
npm run build
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
5. Start the server:
|
|
96
|
+
```bash
|
|
97
|
+
npm start
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Usage
|
|
101
|
+
|
|
102
|
+
The BusinessMap MCP server provides the following tools:
|
|
103
|
+
|
|
104
|
+
### Workspace Management
|
|
105
|
+
- `mcp_businessmap_list_workspaces` - Get all workspaces
|
|
106
|
+
- `mcp_businessmap_get_workspace` - Get workspace details
|
|
107
|
+
- `mcp_businessmap_create_workspace` - Create new workspace
|
|
108
|
+
|
|
109
|
+
### Board Management
|
|
110
|
+
- `mcp_businessmap_list_boards` - Get all boards (optionally filtered by workspace)
|
|
111
|
+
- `mcp_businessmap_get_board` - Get board details and structure
|
|
112
|
+
- `mcp_businessmap_create_board` - Create new board
|
|
113
|
+
|
|
114
|
+
### Card Management
|
|
115
|
+
- `mcp_businessmap_list_cards` - Get cards from a board with optional filters
|
|
116
|
+
- `mcp_businessmap_get_card` - Get detailed card information
|
|
117
|
+
- `mcp_businessmap_create_card` - Create new card
|
|
118
|
+
- `mcp_businessmap_move_card` - Move card to different column/swimlane
|
|
119
|
+
- `mcp_businessmap_update_card` - Update card properties
|
|
120
|
+
|
|
121
|
+
### User Management
|
|
122
|
+
- `mcp_businessmap_list_users` - Get all users
|
|
123
|
+
- `mcp_businessmap_get_user` - Get user details
|
|
124
|
+
|
|
125
|
+
### Analytics & Reports
|
|
126
|
+
- `mcp_businessmap_get_workflow_analytics` - Get workflow analytics for a board
|
|
127
|
+
- `mcp_businessmap_get_cumulative_flow_data` - Get cumulative flow diagram data
|
|
128
|
+
- `mcp_businessmap_get_cycle_time_report` - Get cycle time report
|
|
129
|
+
- `mcp_businessmap_get_throughput_report` - Get throughput report
|
|
130
|
+
|
|
131
|
+
### System
|
|
132
|
+
- `mcp_businessmap_health_check` - Check API connection
|
|
133
|
+
- `mcp_businessmap_get_api_info` - Get API information
|
|
134
|
+
|
|
135
|
+
## Development
|
|
136
|
+
|
|
137
|
+
### Setup Development Environment
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Install dependencies
|
|
141
|
+
npm install
|
|
142
|
+
|
|
143
|
+
# Run in development mode
|
|
144
|
+
npm run dev
|
|
145
|
+
|
|
146
|
+
# Watch for changes
|
|
147
|
+
npm run watch
|
|
148
|
+
|
|
149
|
+
# Build for production
|
|
150
|
+
npm run build
|
|
151
|
+
|
|
152
|
+
# Run tests
|
|
153
|
+
npm test
|
|
154
|
+
|
|
155
|
+
# Lint code
|
|
156
|
+
npm run lint
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Docker Support
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Build Docker image
|
|
163
|
+
npm run docker:build
|
|
164
|
+
|
|
165
|
+
# Run with Docker Compose
|
|
166
|
+
npm run docker:up
|
|
167
|
+
|
|
168
|
+
# View logs
|
|
169
|
+
npm run docker:logs
|
|
170
|
+
|
|
171
|
+
# Stop containers
|
|
172
|
+
npm run docker:down
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Publishing
|
|
176
|
+
|
|
177
|
+
To publish a new version to npm:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
npm install -g @edicarlos.lds/businessmap-mcp
|
|
181
|
+
businessmap-mcp
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## License
|
|
185
|
+
|
|
186
|
+
MIT
|
|
187
|
+
|
|
188
|
+
## Support
|
|
189
|
+
|
|
190
|
+
For issues and questions:
|
|
191
|
+
1. Check the [Issues](../../issues) page
|
|
192
|
+
2. Review BusinessMap API documentation
|
|
193
|
+
3. Verify your environment configuration
|
|
194
|
+
4. Submit a new issue with detailed information
|
|
195
|
+
|
|
196
|
+
## Related Projects
|
|
197
|
+
|
|
198
|
+
- [Model Context Protocol](https://modelcontextprotocol.io/) - Official MCP documentation
|
|
199
|
+
- [BusinessMap API Documentation](https://businessmap.io/api) - Official API reference
|
|
200
|
+
- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) - Official MCP SDK
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Board, BusinessMapConfig, Card, CreateBoardParams, CreateCardParams, CreateWorkspaceParams, CumulativeFlowData, UpdateCardParams, User, WorkflowAnalytics, Workspace } from '../types/businessmap.js';
|
|
2
|
+
export declare class BusinessMapClient {
|
|
3
|
+
private http;
|
|
4
|
+
private readonly config;
|
|
5
|
+
constructor(config: BusinessMapConfig);
|
|
6
|
+
private transformError;
|
|
7
|
+
getWorkspaces(): Promise<Workspace[]>;
|
|
8
|
+
getWorkspace(workspaceId: number): Promise<Workspace>;
|
|
9
|
+
createWorkspace(params: CreateWorkspaceParams): Promise<Workspace>;
|
|
10
|
+
updateWorkspace(workspaceId: number, params: Partial<CreateWorkspaceParams>): Promise<Workspace>;
|
|
11
|
+
deleteWorkspace(workspaceId: number): Promise<void>;
|
|
12
|
+
getBoards(workspaceId?: number): Promise<Board[]>;
|
|
13
|
+
getBoard(boardId: number): Promise<Board>;
|
|
14
|
+
createBoard(params: CreateBoardParams): Promise<Board>;
|
|
15
|
+
updateBoard(boardId: number, params: Partial<CreateBoardParams>): Promise<Board>;
|
|
16
|
+
deleteBoard(boardId: number): Promise<void>;
|
|
17
|
+
getBoardStructure(boardId: number): Promise<any>;
|
|
18
|
+
getCards(boardId: number, filters?: {
|
|
19
|
+
column_id?: number;
|
|
20
|
+
swimlane_id?: number;
|
|
21
|
+
assignee_user_id?: number;
|
|
22
|
+
}): Promise<Card[]>;
|
|
23
|
+
getCard(cardId: number): Promise<Card>;
|
|
24
|
+
createCard(params: CreateCardParams): Promise<Card>;
|
|
25
|
+
updateCard(params: UpdateCardParams): Promise<Card>;
|
|
26
|
+
moveCard(cardId: number, columnId: number, swimlaneId?: number, position?: number): Promise<Card>;
|
|
27
|
+
deleteCard(cardId: number): Promise<void>;
|
|
28
|
+
getUsers(): Promise<User[]>;
|
|
29
|
+
getUser(userId: number): Promise<User>;
|
|
30
|
+
getWorkflowAnalytics(boardId: number, periodStart: string, periodEnd: string): Promise<WorkflowAnalytics>;
|
|
31
|
+
getCumulativeFlowData(boardId: number, periodStart: string, periodEnd: string): Promise<CumulativeFlowData[]>;
|
|
32
|
+
getCycleTimeReport(boardId: number, periodStart: string, periodEnd: string): Promise<any>;
|
|
33
|
+
getThroughputReport(boardId: number, periodStart: string, periodEnd: string): Promise<any>;
|
|
34
|
+
healthCheck(): Promise<boolean>;
|
|
35
|
+
getApiInfo(): Promise<any>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=businessmap-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"businessmap-client.d.ts","sourceRoot":"","sources":["../../src/client/businessmap-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
export class BusinessMapClient {
|
|
3
|
+
http;
|
|
4
|
+
config;
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
this.http = axios.create({
|
|
8
|
+
baseURL: config.apiUrl,
|
|
9
|
+
headers: {
|
|
10
|
+
apikey: config.apiToken,
|
|
11
|
+
'Content-Type': 'application/json',
|
|
12
|
+
Accept: 'application/json',
|
|
13
|
+
},
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
});
|
|
16
|
+
// Add response interceptor for error handling
|
|
17
|
+
this.http.interceptors.response.use((response) => response, (error) => {
|
|
18
|
+
throw this.transformError(error);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
transformError(error) {
|
|
22
|
+
if (error.response) {
|
|
23
|
+
const apiError = error.response.data;
|
|
24
|
+
return new Error(`BusinessMap API Error: ${apiError.error?.message || error.message}`);
|
|
25
|
+
}
|
|
26
|
+
return new Error(`Network Error: ${error.message}`);
|
|
27
|
+
}
|
|
28
|
+
// Workspace Management
|
|
29
|
+
async getWorkspaces() {
|
|
30
|
+
const response = await this.http.get('/workspaces');
|
|
31
|
+
return response.data.data;
|
|
32
|
+
}
|
|
33
|
+
async getWorkspace(workspaceId) {
|
|
34
|
+
const response = await this.http.get(`/workspaces/${workspaceId}`);
|
|
35
|
+
return response.data.data;
|
|
36
|
+
}
|
|
37
|
+
async createWorkspace(params) {
|
|
38
|
+
if (this.config.readOnlyMode) {
|
|
39
|
+
throw new Error('Cannot create workspace in read-only mode');
|
|
40
|
+
}
|
|
41
|
+
const response = await this.http.post('/workspaces', params);
|
|
42
|
+
return response.data.data;
|
|
43
|
+
}
|
|
44
|
+
async updateWorkspace(workspaceId, params) {
|
|
45
|
+
if (this.config.readOnlyMode) {
|
|
46
|
+
throw new Error('Cannot update workspace in read-only mode');
|
|
47
|
+
}
|
|
48
|
+
const response = await this.http.patch(`/workspaces/${workspaceId}`, params);
|
|
49
|
+
return response.data.data;
|
|
50
|
+
}
|
|
51
|
+
async deleteWorkspace(workspaceId) {
|
|
52
|
+
if (this.config.readOnlyMode) {
|
|
53
|
+
throw new Error('Cannot delete workspace in read-only mode');
|
|
54
|
+
}
|
|
55
|
+
await this.http.delete(`/workspaces/${workspaceId}`);
|
|
56
|
+
}
|
|
57
|
+
// Board Management
|
|
58
|
+
async getBoards(workspaceId) {
|
|
59
|
+
const params = workspaceId ? { workspace_id: workspaceId } : {};
|
|
60
|
+
const response = await this.http.get('/boards', { params });
|
|
61
|
+
return response.data.data;
|
|
62
|
+
}
|
|
63
|
+
async getBoard(boardId) {
|
|
64
|
+
const response = await this.http.get(`/boards/${boardId}`);
|
|
65
|
+
return response.data.data;
|
|
66
|
+
}
|
|
67
|
+
async createBoard(params) {
|
|
68
|
+
if (this.config.readOnlyMode) {
|
|
69
|
+
throw new Error('Cannot create board in read-only mode');
|
|
70
|
+
}
|
|
71
|
+
const response = await this.http.post('/boards', params);
|
|
72
|
+
return response.data.data;
|
|
73
|
+
}
|
|
74
|
+
async updateBoard(boardId, params) {
|
|
75
|
+
if (this.config.readOnlyMode) {
|
|
76
|
+
throw new Error('Cannot update board in read-only mode');
|
|
77
|
+
}
|
|
78
|
+
const response = await this.http.patch(`/boards/${boardId}`, params);
|
|
79
|
+
return response.data.data;
|
|
80
|
+
}
|
|
81
|
+
async deleteBoard(boardId) {
|
|
82
|
+
if (this.config.readOnlyMode) {
|
|
83
|
+
throw new Error('Cannot delete board in read-only mode');
|
|
84
|
+
}
|
|
85
|
+
await this.http.delete(`/boards/${boardId}`);
|
|
86
|
+
}
|
|
87
|
+
async getBoardStructure(boardId) {
|
|
88
|
+
const response = await this.http.get(`/boards/${boardId}/structure`);
|
|
89
|
+
return response.data.data;
|
|
90
|
+
}
|
|
91
|
+
// Card Management
|
|
92
|
+
async getCards(boardId, filters) {
|
|
93
|
+
const params = { board_id: boardId, ...filters };
|
|
94
|
+
const response = await this.http.get('/cards', { params });
|
|
95
|
+
return response.data.data;
|
|
96
|
+
}
|
|
97
|
+
async getCard(cardId) {
|
|
98
|
+
const response = await this.http.get(`/cards/${cardId}`);
|
|
99
|
+
return response.data.data;
|
|
100
|
+
}
|
|
101
|
+
async createCard(params) {
|
|
102
|
+
if (this.config.readOnlyMode) {
|
|
103
|
+
throw new Error('Cannot create card in read-only mode');
|
|
104
|
+
}
|
|
105
|
+
const response = await this.http.post('/cards', params);
|
|
106
|
+
return response.data.data;
|
|
107
|
+
}
|
|
108
|
+
async updateCard(params) {
|
|
109
|
+
if (this.config.readOnlyMode) {
|
|
110
|
+
throw new Error('Cannot update card in read-only mode');
|
|
111
|
+
}
|
|
112
|
+
const { card_id, ...updateData } = params;
|
|
113
|
+
const response = await this.http.patch(`/cards/${card_id}`, updateData);
|
|
114
|
+
return response.data.data;
|
|
115
|
+
}
|
|
116
|
+
async moveCard(cardId, columnId, swimlaneId, position) {
|
|
117
|
+
if (this.config.readOnlyMode) {
|
|
118
|
+
throw new Error('Cannot move card in read-only mode');
|
|
119
|
+
}
|
|
120
|
+
const response = await this.http.patch(`/cards/${cardId}`, {
|
|
121
|
+
column_id: columnId,
|
|
122
|
+
swimlane_id: swimlaneId,
|
|
123
|
+
position: position,
|
|
124
|
+
});
|
|
125
|
+
return response.data.data;
|
|
126
|
+
}
|
|
127
|
+
async deleteCard(cardId) {
|
|
128
|
+
if (this.config.readOnlyMode) {
|
|
129
|
+
throw new Error('Cannot delete card in read-only mode');
|
|
130
|
+
}
|
|
131
|
+
await this.http.delete(`/cards/${cardId}`);
|
|
132
|
+
}
|
|
133
|
+
// User Management
|
|
134
|
+
async getUsers() {
|
|
135
|
+
const response = await this.http.get('/users');
|
|
136
|
+
return response.data.data;
|
|
137
|
+
}
|
|
138
|
+
async getUser(userId) {
|
|
139
|
+
const response = await this.http.get(`/users/${userId}`);
|
|
140
|
+
return response.data.data;
|
|
141
|
+
}
|
|
142
|
+
// Analytics and Reporting
|
|
143
|
+
async getWorkflowAnalytics(boardId, periodStart, periodEnd) {
|
|
144
|
+
const params = {
|
|
145
|
+
board_id: boardId,
|
|
146
|
+
period_start: periodStart,
|
|
147
|
+
period_end: periodEnd,
|
|
148
|
+
};
|
|
149
|
+
const response = await this.http.get('/analytics/workflow', {
|
|
150
|
+
params,
|
|
151
|
+
});
|
|
152
|
+
return response.data.data;
|
|
153
|
+
}
|
|
154
|
+
async getCumulativeFlowData(boardId, periodStart, periodEnd) {
|
|
155
|
+
const params = {
|
|
156
|
+
board_id: boardId,
|
|
157
|
+
period_start: periodStart,
|
|
158
|
+
period_end: periodEnd,
|
|
159
|
+
};
|
|
160
|
+
const response = await this.http.get('/analytics/cumulative-flow', { params });
|
|
161
|
+
return response.data.data;
|
|
162
|
+
}
|
|
163
|
+
async getCycleTimeReport(boardId, periodStart, periodEnd) {
|
|
164
|
+
const params = {
|
|
165
|
+
board_id: boardId,
|
|
166
|
+
period_start: periodStart,
|
|
167
|
+
period_end: periodEnd,
|
|
168
|
+
};
|
|
169
|
+
const response = await this.http.get('/analytics/cycle-time', { params });
|
|
170
|
+
return response.data.data;
|
|
171
|
+
}
|
|
172
|
+
async getThroughputReport(boardId, periodStart, periodEnd) {
|
|
173
|
+
const params = {
|
|
174
|
+
board_id: boardId,
|
|
175
|
+
period_start: periodStart,
|
|
176
|
+
period_end: periodEnd,
|
|
177
|
+
};
|
|
178
|
+
const response = await this.http.get('/analytics/throughput', { params });
|
|
179
|
+
return response.data.data;
|
|
180
|
+
}
|
|
181
|
+
// Utility Methods
|
|
182
|
+
async healthCheck() {
|
|
183
|
+
try {
|
|
184
|
+
await this.http.get('/health');
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async getApiInfo() {
|
|
192
|
+
const response = await this.http.get('/info');
|
|
193
|
+
return response.data;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=businessmap-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"businessmap-client.js","sourceRoot":"","sources":["../../src/client/businessmap-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BusinessMapConfig } from '../types/businessmap.js';
|
|
2
|
+
export interface EnvironmentConfig {
|
|
3
|
+
businessMap: BusinessMapConfig;
|
|
4
|
+
server: {
|
|
5
|
+
name: string;
|
|
6
|
+
version: string;
|
|
7
|
+
port?: number;
|
|
8
|
+
};
|
|
9
|
+
transport: {
|
|
10
|
+
sse: boolean;
|
|
11
|
+
streamableHttp: boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare const config: EnvironmentConfig;
|
|
15
|
+
export declare function validateConfig(): void;
|
|
16
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5D,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE;QACT,GAAG,EAAE,OAAO,CAAC;QACb,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AA0BD,eAAO,MAAM,MAAM,EAAE,iBAgBpB,CAAC;AAEF,wBAAgB,cAAc,IAAI,IAAI,CAgBrC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
// Load environment variables
|
|
3
|
+
dotenv.config();
|
|
4
|
+
function getRequiredEnvVar(name) {
|
|
5
|
+
const value = process.env[name];
|
|
6
|
+
if (!value) {
|
|
7
|
+
throw new Error(`Required environment variable ${name} is not set`);
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
function getBooleanEnvVar(name, defaultValue = false) {
|
|
12
|
+
const value = process.env[name];
|
|
13
|
+
if (value === undefined)
|
|
14
|
+
return defaultValue;
|
|
15
|
+
return value.toLowerCase() === 'true';
|
|
16
|
+
}
|
|
17
|
+
function getNumberEnvVar(name, defaultValue) {
|
|
18
|
+
const value = process.env[name];
|
|
19
|
+
if (value === undefined)
|
|
20
|
+
return defaultValue;
|
|
21
|
+
const parsed = parseInt(value, 10);
|
|
22
|
+
if (isNaN(parsed)) {
|
|
23
|
+
throw new Error(`Environment variable ${name} must be a valid number`);
|
|
24
|
+
}
|
|
25
|
+
return parsed;
|
|
26
|
+
}
|
|
27
|
+
export const config = {
|
|
28
|
+
businessMap: {
|
|
29
|
+
apiUrl: getRequiredEnvVar('BUSINESSMAP_API_URL'),
|
|
30
|
+
apiToken: getRequiredEnvVar('BUSINESSMAP_API_TOKEN'),
|
|
31
|
+
defaultWorkspaceId: getNumberEnvVar('BUSINESSMAP_DEFAULT_WORKSPACE_ID'),
|
|
32
|
+
readOnlyMode: getBooleanEnvVar('BUSINESSMAP_READ_ONLY_MODE', false),
|
|
33
|
+
},
|
|
34
|
+
server: {
|
|
35
|
+
name: process.env.MCP_SERVER_NAME || 'businessmap-mcp',
|
|
36
|
+
version: process.env.MCP_SERVER_VERSION || '1.0.0',
|
|
37
|
+
port: getNumberEnvVar('PORT'),
|
|
38
|
+
},
|
|
39
|
+
transport: {
|
|
40
|
+
sse: getBooleanEnvVar('SSE', false),
|
|
41
|
+
streamableHttp: getBooleanEnvVar('STREAMABLE_HTTP', true),
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
export function validateConfig() {
|
|
45
|
+
// Validate API URL format
|
|
46
|
+
try {
|
|
47
|
+
new URL(config.businessMap.apiUrl);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
throw new Error('BUSINESSMAP_API_URL must be a valid URL');
|
|
51
|
+
}
|
|
52
|
+
// Validate API token is not empty
|
|
53
|
+
if (!config.businessMap.apiToken.trim()) {
|
|
54
|
+
throw new Error('BUSINESSMAP_API_TOKEN cannot be empty');
|
|
55
|
+
}
|
|
56
|
+
console.log(`ā
Configuration validated for ${config.server.name} v${config.server.version}`);
|
|
57
|
+
console.log(`š” BusinessMap API: ${config.businessMap.apiUrl}`);
|
|
58
|
+
console.log(`š Read-only mode: ${config.businessMap.readOnlyMode ? 'enabled' : 'disabled'}`);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,6BAA6B;AAC7B,MAAM,CAAC,MAAM,EAAE,CAAC;AAehB,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,aAAa,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,eAAwB,KAAK;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC7C,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AACxC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,YAAqB;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,yBAAyB,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAsB;IACvC,WAAW,EAAE;QACX,MAAM,EAAE,iBAAiB,CAAC,qBAAqB,CAAC;QAChD,QAAQ,EAAE,iBAAiB,CAAC,uBAAuB,CAAC;QACpD,kBAAkB,EAAE,eAAe,CAAC,kCAAkC,CAAC;QACvE,YAAY,EAAE,gBAAgB,CAAC,4BAA4B,EAAE,KAAK,CAAC;KACpE;IACD,MAAM,EAAE;QACN,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,iBAAiB;QACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO;QAClD,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;KAC9B;IACD,SAAS,EAAE;QACT,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;QACnC,cAAc,EAAE,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC;KAC1D;CACF,CAAC;AAEF,MAAM,UAAU,cAAc;IAC5B,0BAA0B;IAC1B,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AAChG,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { config, validateConfig } from './config/environment.js';
|
|
4
|
+
import { BusinessMapMcpServer } from './server/mcp-server.js';
|
|
5
|
+
async function main() {
|
|
6
|
+
try {
|
|
7
|
+
// Validate configuration
|
|
8
|
+
validateConfig();
|
|
9
|
+
// Create and setup the MCP server
|
|
10
|
+
const businessMapServer = new BusinessMapMcpServer();
|
|
11
|
+
console.error(`š Starting ${config.server.name} v${config.server.version}`);
|
|
12
|
+
console.error(`š” BusinessMap API: ${config.businessMap.apiUrl}`);
|
|
13
|
+
console.error(`š Read-only mode: ${config.businessMap.readOnlyMode ? 'enabled' : 'disabled'}`);
|
|
14
|
+
// Setup transport
|
|
15
|
+
const transport = new StdioServerTransport();
|
|
16
|
+
// Connect server to transport
|
|
17
|
+
await businessMapServer.server.connect(transport);
|
|
18
|
+
console.error('ā
BusinessMap MCP Server is running');
|
|
19
|
+
console.error('š” Use Ctrl+C to stop the server');
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error('ā Failed to start BusinessMap MCP Server:', error);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Handle graceful shutdown
|
|
27
|
+
process.on('SIGINT', () => {
|
|
28
|
+
console.error('\nš Shutting down BusinessMap MCP Server...');
|
|
29
|
+
process.exit(0);
|
|
30
|
+
});
|
|
31
|
+
process.on('SIGTERM', () => {
|
|
32
|
+
console.error('\nš Shutting down BusinessMap MCP Server...');
|
|
33
|
+
process.exit(0);
|
|
34
|
+
});
|
|
35
|
+
// Start the server
|
|
36
|
+
main().catch((error) => {
|
|
37
|
+
console.error('š„ Unhandled error:', error);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,yBAAyB;QACzB,cAAc,EAAE,CAAC;QAEjB,kCAAkC;QAClC,MAAM,iBAAiB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAErD,OAAO,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAEhG,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE7C,8BAA8B;QAC9B,MAAM,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAElD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAEpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export declare class BusinessMapMcpServer {
|
|
3
|
+
private mcpServer;
|
|
4
|
+
private businessMapClient;
|
|
5
|
+
constructor();
|
|
6
|
+
private setupTools;
|
|
7
|
+
private setupWorkspaceTools;
|
|
8
|
+
private setupBoardTools;
|
|
9
|
+
private setupCardTools;
|
|
10
|
+
private setupUserTools;
|
|
11
|
+
private setupAnalyticsTools;
|
|
12
|
+
private setupUtilityTools;
|
|
13
|
+
private setupResources;
|
|
14
|
+
get server(): McpServer;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;;IAa7C,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,mBAAmB;IAgG3B,OAAO,CAAC,eAAe;IAsGvB,OAAO,CAAC,cAAc;IAsLtB,OAAO,CAAC,cAAc;IA8DtB,OAAO,CAAC,mBAAmB;IAsI3B,OAAO,CAAC,iBAAiB;IA4DzB,OAAO,CAAC,cAAc;IAKtB,IAAI,MAAM,IAAI,SAAS,CAEtB;CACF"}
|