@brxce/mcp-server 1.0.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 +220 -0
- package/dist/config/environment.d.ts +8 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +16 -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 +167 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/worknode-prompts.d.ts +7 -0
- package/dist/prompts/worknode-prompts.d.ts.map +1 -0
- package/dist/prompts/worknode-prompts.js +369 -0
- package/dist/prompts/worknode-prompts.js.map +1 -0
- package/dist/prompts/workspace-context-prompt.d.ts +4 -0
- package/dist/prompts/workspace-context-prompt.d.ts.map +1 -0
- package/dist/prompts/workspace-context-prompt.js +101 -0
- package/dist/prompts/workspace-context-prompt.js.map +1 -0
- package/dist/resources/user-resource.d.ts +4 -0
- package/dist/resources/user-resource.d.ts.map +1 -0
- package/dist/resources/user-resource.js +40 -0
- package/dist/resources/user-resource.js.map +1 -0
- package/dist/resources/workspace-members-resource.d.ts +4 -0
- package/dist/resources/workspace-members-resource.d.ts.map +1 -0
- package/dist/resources/workspace-members-resource.js +39 -0
- package/dist/resources/workspace-members-resource.js.map +1 -0
- package/dist/resources/workspace-resource.d.ts +4 -0
- package/dist/resources/workspace-resource.d.ts.map +1 -0
- package/dist/resources/workspace-resource.js +27 -0
- package/dist/resources/workspace-resource.js.map +1 -0
- package/dist/services/api-client.d.ts +17 -0
- package/dist/services/api-client.d.ts.map +1 -0
- package/dist/services/api-client.js +118 -0
- package/dist/services/api-client.js.map +1 -0
- package/dist/tools/meeting-agenda-tool.d.ts +7 -0
- package/dist/tools/meeting-agenda-tool.d.ts.map +1 -0
- package/dist/tools/meeting-agenda-tool.js +452 -0
- package/dist/tools/meeting-agenda-tool.js.map +1 -0
- package/dist/tools/meeting-create-tool.d.ts +8 -0
- package/dist/tools/meeting-create-tool.d.ts.map +1 -0
- package/dist/tools/meeting-create-tool.js +309 -0
- package/dist/tools/meeting-create-tool.js.map +1 -0
- package/dist/tools/meeting-decisions-tool.d.ts +7 -0
- package/dist/tools/meeting-decisions-tool.d.ts.map +1 -0
- package/dist/tools/meeting-decisions-tool.js +431 -0
- package/dist/tools/meeting-decisions-tool.js.map +1 -0
- package/dist/tools/meeting-list-tool.d.ts +7 -0
- package/dist/tools/meeting-list-tool.d.ts.map +1 -0
- package/dist/tools/meeting-list-tool.js +305 -0
- package/dist/tools/meeting-list-tool.js.map +1 -0
- package/dist/tools/meeting-notes-tool.d.ts +7 -0
- package/dist/tools/meeting-notes-tool.d.ts.map +1 -0
- package/dist/tools/meeting-notes-tool.js +318 -0
- package/dist/tools/meeting-notes-tool.js.map +1 -0
- package/dist/tools/meeting-update-tool.d.ts +7 -0
- package/dist/tools/meeting-update-tool.d.ts.map +1 -0
- package/dist/tools/meeting-update-tool.js +310 -0
- package/dist/tools/meeting-update-tool.js.map +1 -0
- package/dist/tools/tag-category-tool.d.ts +4 -0
- package/dist/tools/tag-category-tool.d.ts.map +1 -0
- package/dist/tools/tag-category-tool.js +293 -0
- package/dist/tools/tag-category-tool.js.map +1 -0
- package/dist/tools/tag-search-tool.d.ts +4 -0
- package/dist/tools/tag-search-tool.d.ts.map +1 -0
- package/dist/tools/tag-search-tool.js +358 -0
- package/dist/tools/tag-search-tool.js.map +1 -0
- package/dist/tools/tag-tool.d.ts +4 -0
- package/dist/tools/tag-tool.d.ts.map +1 -0
- package/dist/tools/tag-tool.js +450 -0
- package/dist/tools/tag-tool.js.map +1 -0
- package/dist/tools/worknode-archive-tool.d.ts +7 -0
- package/dist/tools/worknode-archive-tool.d.ts.map +1 -0
- package/dist/tools/worknode-archive-tool.js +163 -0
- package/dist/tools/worknode-archive-tool.js.map +1 -0
- package/dist/tools/worknode-create-tool.d.ts +4 -0
- package/dist/tools/worknode-create-tool.d.ts.map +1 -0
- package/dist/tools/worknode-create-tool.js +382 -0
- package/dist/tools/worknode-create-tool.js.map +1 -0
- package/dist/tools/worknode-my-work-tool.d.ts +8 -0
- package/dist/tools/worknode-my-work-tool.d.ts.map +1 -0
- package/dist/tools/worknode-my-work-tool.js +302 -0
- package/dist/tools/worknode-my-work-tool.js.map +1 -0
- package/dist/tools/worknode-search-tool.d.ts +4 -0
- package/dist/tools/worknode-search-tool.d.ts.map +1 -0
- package/dist/tools/worknode-search-tool.js +289 -0
- package/dist/tools/worknode-search-tool.js.map +1 -0
- package/dist/tools/worknode-subtree-tool.d.ts +4 -0
- package/dist/tools/worknode-subtree-tool.d.ts.map +1 -0
- package/dist/tools/worknode-subtree-tool.js +175 -0
- package/dist/tools/worknode-subtree-tool.js.map +1 -0
- package/dist/tools/worknode-tag-tool.d.ts +4 -0
- package/dist/tools/worknode-tag-tool.d.ts.map +1 -0
- package/dist/tools/worknode-tag-tool.js +353 -0
- package/dist/tools/worknode-tag-tool.js.map +1 -0
- package/dist/tools/worknode-update-tool.d.ts +4 -0
- package/dist/tools/worknode-update-tool.d.ts.map +1 -0
- package/dist/tools/worknode-update-tool.js +409 -0
- package/dist/tools/worknode-update-tool.js.map +1 -0
- package/dist/tools/workspace-inbox-tool.d.ts +8 -0
- package/dist/tools/workspace-inbox-tool.d.ts.map +1 -0
- package/dist/tools/workspace-inbox-tool.js +210 -0
- package/dist/tools/workspace-inbox-tool.js.map +1 -0
- package/dist/tools/workspace-tree-tool.d.ts +4 -0
- package/dist/tools/workspace-tree-tool.d.ts.map +1 -0
- package/dist/tools/workspace-tree-tool.js +419 -0
- package/dist/tools/workspace-tree-tool.js.map +1 -0
- package/package.json +61 -0
package/README.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# BRXCE MCP Server
|
|
2
|
+
|
|
3
|
+
Model Context Protocol (MCP) server for BRXCE workspace management.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### From npm (Recommended for Claude Desktop users)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Global installation
|
|
11
|
+
npm install -g @brxce/mcp-server
|
|
12
|
+
|
|
13
|
+
# Or use with npx (no installation needed)
|
|
14
|
+
npx @brxce/mcp-server
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Claude Desktop Configuration
|
|
18
|
+
|
|
19
|
+
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"mcpServers": {
|
|
24
|
+
"brxce-mcp": {
|
|
25
|
+
"command": "npx",
|
|
26
|
+
"args": ["-y", "@brxce/mcp-server"],
|
|
27
|
+
"env": {
|
|
28
|
+
"AUTH_TOKEN": "your_auth_token_here"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Getting your AUTH_TOKEN:**
|
|
36
|
+
1. Login to BRXCE: https://api.brxce.com/api/v1/auth/login
|
|
37
|
+
2. Copy the `accessToken` from the response
|
|
38
|
+
3. Add it to the config above
|
|
39
|
+
|
|
40
|
+
**Optional environment variables:**
|
|
41
|
+
- `BACKEND_URL`: Custom backend URL (default: Production)
|
|
42
|
+
- `MCP_DEBUG`: Enable debug logging (default: false)
|
|
43
|
+
|
|
44
|
+
## Development
|
|
45
|
+
|
|
46
|
+
### 1. Build the server
|
|
47
|
+
```bash
|
|
48
|
+
pnpm build
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2. Run with MCP Inspector (Recommended)
|
|
52
|
+
|
|
53
|
+
The easiest way to run the inspector with the config file:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# From project root
|
|
57
|
+
make mcp-inspect
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
This will:
|
|
61
|
+
- Build the MCP server
|
|
62
|
+
- Use `inspector-config.json` with AUTH_TOKEN included
|
|
63
|
+
- Open the browser with Inspector UI
|
|
64
|
+
- Test resources: `user://me`, `workspace://{id}`
|
|
65
|
+
|
|
66
|
+
**First-time setup:**
|
|
67
|
+
If you don't have `inspector-config.json`:
|
|
68
|
+
1. Copy from example: `cp inspector-config.example.json inspector-config.json`
|
|
69
|
+
2. Add your AUTH_TOKEN (see "Getting an Auth Token" below)
|
|
70
|
+
|
|
71
|
+
**Alternative methods:**
|
|
72
|
+
|
|
73
|
+
#### Option A: Direct command with config file
|
|
74
|
+
```bash
|
|
75
|
+
npx @modelcontextprotocol/inspector --config inspector-config.json --server brxce-mcp
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### Option B: Using command line flags (not recommended)
|
|
79
|
+
```bash
|
|
80
|
+
npx @modelcontextprotocol/inspector \
|
|
81
|
+
-e BACKEND_URL=http://localhost:3003/api/v1 \
|
|
82
|
+
-e MCP_DEBUG=true \
|
|
83
|
+
-e AUTH_TOKEN=your_token_here \
|
|
84
|
+
node dist/index.js
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Configuration
|
|
88
|
+
|
|
89
|
+
### Environment Variables
|
|
90
|
+
|
|
91
|
+
- `BACKEND_URL`: BRXCE backend API endpoint (default: `http://localhost:3003/api/v1`)
|
|
92
|
+
- `MCP_DEBUG`: Enable debug logging (default: `false`)
|
|
93
|
+
- `AUTH_TOKEN`: JWT authentication token (required)
|
|
94
|
+
- `REFRESH_TOKEN`: JWT refresh token (optional)
|
|
95
|
+
|
|
96
|
+
### Available Servers in Config
|
|
97
|
+
|
|
98
|
+
The `inspector-config.json` includes two pre-configured servers:
|
|
99
|
+
|
|
100
|
+
- **brxce-mcp**: For Dev-Local environment (port 3003)
|
|
101
|
+
- **brxce-mcp-local**: For Local environment (port 3000)
|
|
102
|
+
|
|
103
|
+
## Resources
|
|
104
|
+
|
|
105
|
+
The MCP server exposes the following resources:
|
|
106
|
+
|
|
107
|
+
### `user://me`
|
|
108
|
+
Returns current user information along with their accessible workspaces.
|
|
109
|
+
|
|
110
|
+
**Example response:**
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"user": {
|
|
114
|
+
"id": "user-id",
|
|
115
|
+
"email": "user@example.com",
|
|
116
|
+
"username": "username",
|
|
117
|
+
"name": "User Name",
|
|
118
|
+
"createdAt": "2024-01-01T00:00:00.000Z",
|
|
119
|
+
"updatedAt": "2024-01-01T00:00:00.000Z"
|
|
120
|
+
},
|
|
121
|
+
"workspaces": [
|
|
122
|
+
{
|
|
123
|
+
"id": 1,
|
|
124
|
+
"name": "My Workspace",
|
|
125
|
+
"slug": "my-workspace",
|
|
126
|
+
"description": "Workspace description",
|
|
127
|
+
"workspaceType": "TEAM",
|
|
128
|
+
"planType": "FREE",
|
|
129
|
+
"spaceId": 1,
|
|
130
|
+
"userRole": "OWNER"
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### `workspace://{id}`
|
|
137
|
+
Returns detailed information for a specific workspace.
|
|
138
|
+
|
|
139
|
+
**Example:**
|
|
140
|
+
- `workspace://1` - Get details for workspace ID 1
|
|
141
|
+
- `workspace://42` - Get details for workspace ID 42
|
|
142
|
+
|
|
143
|
+
## Development
|
|
144
|
+
|
|
145
|
+
### Project Structure
|
|
146
|
+
```
|
|
147
|
+
src/
|
|
148
|
+
├── config/
|
|
149
|
+
│ └── environment.ts # Environment configuration
|
|
150
|
+
├── resources/
|
|
151
|
+
│ ├── user-resource.ts # User + Workspaces resource
|
|
152
|
+
│ └── workspace-resource.ts # Individual workspace resource
|
|
153
|
+
├── services/
|
|
154
|
+
│ └── api-client.ts # HTTP client for backend API
|
|
155
|
+
└── index.ts # MCP server entry point
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Scripts
|
|
159
|
+
```bash
|
|
160
|
+
# Development mode (watch)
|
|
161
|
+
pnpm dev
|
|
162
|
+
|
|
163
|
+
# Build
|
|
164
|
+
pnpm build
|
|
165
|
+
|
|
166
|
+
# Type checking
|
|
167
|
+
pnpm check-types
|
|
168
|
+
|
|
169
|
+
# Linting
|
|
170
|
+
pnpm lint
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Getting an Auth Token
|
|
174
|
+
|
|
175
|
+
To get a valid `AUTH_TOKEN`:
|
|
176
|
+
|
|
177
|
+
1. **Using backend API:**
|
|
178
|
+
```bash
|
|
179
|
+
# Login
|
|
180
|
+
curl -X POST http://localhost:3003/api/v1/auth/login \
|
|
181
|
+
-H "Content-Type: application/json" \
|
|
182
|
+
-d '{
|
|
183
|
+
"email": "your@email.com",
|
|
184
|
+
"password": "your-password"
|
|
185
|
+
}'
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
2. **Copy the `accessToken` from the response**
|
|
189
|
+
|
|
190
|
+
3. **Update `inspector-config.json`:**
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"mcpServers": {
|
|
194
|
+
"brxce-mcp": {
|
|
195
|
+
...
|
|
196
|
+
"env": {
|
|
197
|
+
...
|
|
198
|
+
"AUTH_TOKEN": "paste-your-token-here"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Troubleshooting
|
|
206
|
+
|
|
207
|
+
### "Failed to fetch user" error
|
|
208
|
+
- Check if backend is running: `curl http://localhost:3003/health`
|
|
209
|
+
- Verify `BACKEND_URL` matches your backend port
|
|
210
|
+
- Ensure `AUTH_TOKEN` is valid and not expired
|
|
211
|
+
|
|
212
|
+
### "Network error when calling" error
|
|
213
|
+
- Verify backend is accessible
|
|
214
|
+
- Check firewall/network settings
|
|
215
|
+
- Ensure the backend port in `BACKEND_URL` is correct
|
|
216
|
+
|
|
217
|
+
### Inspector not connecting
|
|
218
|
+
- Make sure you've built the server first (`pnpm build`)
|
|
219
|
+
- Check that `dist/index.js` exists
|
|
220
|
+
- Verify the path in `inspector-config.json` is correct
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,eAAe,IAAI,iBAAiB,CAgBnD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function loadEnvironment() {
|
|
2
|
+
// 환경 변수 우선순위:
|
|
3
|
+
// 1. BACKEND_URL (MCP 전용)
|
|
4
|
+
// 2. NEXT_PUBLIC_API_URL (루트 .env에서 공유)
|
|
5
|
+
// 3. 기본값 (Production URL - npm 패키지 사용자용)
|
|
6
|
+
const backendUrl = process.env.BACKEND_URL ||
|
|
7
|
+
process.env.NEXT_PUBLIC_API_URL ||
|
|
8
|
+
'https://brxce-backend-production-1013529945435.asia-northeast3.run.app/api/v1';
|
|
9
|
+
return {
|
|
10
|
+
backendUrl,
|
|
11
|
+
authToken: process.env.AUTH_TOKEN,
|
|
12
|
+
refreshToken: process.env.REFRESH_TOKEN,
|
|
13
|
+
debug: process.env.DEBUG === 'true' || process.env.MCP_DEBUG === 'true',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,eAAe;IAC7B,cAAc;IACd,0BAA0B;IAC1B,wCAAwC;IACxC,yCAAyC;IACzC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,+EAA+E,CAAC;IAElF,OAAO;QACL,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QACjC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QACvC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM;KACxE,CAAC;AACJ,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,167 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import jwt from 'jsonwebtoken';
|
|
5
|
+
import { loadEnvironment } from './config/environment.js';
|
|
6
|
+
import { ApiClient } from './services/api-client.js';
|
|
7
|
+
import { registerUserResource } from './resources/user-resource.js';
|
|
8
|
+
import { registerWorkspaceResource } from './resources/workspace-resource.js';
|
|
9
|
+
import { registerWorkspaceMembersResource } from './resources/workspace-members-resource.js';
|
|
10
|
+
import { registerWorkspaceTreeTool } from './tools/workspace-tree-tool.js';
|
|
11
|
+
import { registerWorknodeSubtreeTool } from './tools/worknode-subtree-tool.js';
|
|
12
|
+
import { registerWorknodeCreateTool } from './tools/worknode-create-tool.js';
|
|
13
|
+
import { registerWorknodeUpdateTool } from './tools/worknode-update-tool.js';
|
|
14
|
+
import { registerWorknodeMyWorkTool } from './tools/worknode-my-work-tool.js';
|
|
15
|
+
import { registerWorknodePrompts } from './prompts/worknode-prompts.js';
|
|
16
|
+
import { registerWorkspaceContextPrompt } from './prompts/workspace-context-prompt.js';
|
|
17
|
+
import { registerTagCategoryTools } from './tools/tag-category-tool.js';
|
|
18
|
+
import { registerTagTools } from './tools/tag-tool.js';
|
|
19
|
+
import { registerWorknodeTagTools } from './tools/worknode-tag-tool.js';
|
|
20
|
+
import { registerTagSearchTools } from './tools/tag-search-tool.js';
|
|
21
|
+
import { registerWorkspaceInboxTool } from './tools/workspace-inbox-tool.js';
|
|
22
|
+
import { registerWorknodeArchiveTools } from './tools/worknode-archive-tool.js';
|
|
23
|
+
import { registerWorknodeSearchTool } from './tools/worknode-search-tool.js';
|
|
24
|
+
import { registerMeetingCreateTool } from './tools/meeting-create-tool.js';
|
|
25
|
+
import { registerMeetingListTools } from './tools/meeting-list-tool.js';
|
|
26
|
+
import { registerMeetingUpdateTool } from './tools/meeting-update-tool.js';
|
|
27
|
+
import { registerMeetingNotesTools } from './tools/meeting-notes-tool.js';
|
|
28
|
+
import { registerMeetingDecisionsTools } from './tools/meeting-decisions-tool.js';
|
|
29
|
+
import { registerMeetingAgendaTools } from './tools/meeting-agenda-tool.js';
|
|
30
|
+
async function bootstrap() {
|
|
31
|
+
// Always log environment variables for debugging
|
|
32
|
+
console.error('[MCP] Environment variables:');
|
|
33
|
+
console.error(' BACKEND_URL:', process.env.BACKEND_URL);
|
|
34
|
+
console.error(' AUTH_TOKEN:', process.env.AUTH_TOKEN ? 'SET' : 'NOT SET');
|
|
35
|
+
console.error(' MCP_DEBUG:', process.env.MCP_DEBUG);
|
|
36
|
+
const config = loadEnvironment();
|
|
37
|
+
console.error('[MCP] Starting BRXCE MCP Server');
|
|
38
|
+
console.error('[MCP] Configuration:', {
|
|
39
|
+
backendUrl: config.backendUrl,
|
|
40
|
+
hasAuthToken: Boolean(config.authToken),
|
|
41
|
+
hasRefreshToken: Boolean(config.refreshToken),
|
|
42
|
+
debug: config.debug,
|
|
43
|
+
});
|
|
44
|
+
// Extract user information from auth token
|
|
45
|
+
let currentUserId;
|
|
46
|
+
if (config.authToken) {
|
|
47
|
+
try {
|
|
48
|
+
const decoded = jwt.decode(config.authToken);
|
|
49
|
+
const maybeUserId = decoded?.['userId'];
|
|
50
|
+
if (typeof maybeUserId === 'string') {
|
|
51
|
+
currentUserId = maybeUserId;
|
|
52
|
+
if (config.debug) {
|
|
53
|
+
console.error(`[MCP] Authenticated user: ${currentUserId}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (config.debug) {
|
|
59
|
+
console.error('[MCP] Failed to decode auth token:', error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Initialize API client
|
|
64
|
+
const apiClient = new ApiClient({
|
|
65
|
+
baseUrl: config.backendUrl,
|
|
66
|
+
authToken: config.authToken,
|
|
67
|
+
});
|
|
68
|
+
const server = new McpServer({
|
|
69
|
+
name: 'brxce-mcp-server',
|
|
70
|
+
version: '1.0.0',
|
|
71
|
+
capabilities: {
|
|
72
|
+
resources: {
|
|
73
|
+
subscribe: true,
|
|
74
|
+
listChanged: true,
|
|
75
|
+
},
|
|
76
|
+
tools: {},
|
|
77
|
+
prompts: {}, // Prompts capability enabled
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
// Register resources
|
|
81
|
+
registerUserResource(server, apiClient);
|
|
82
|
+
registerWorkspaceResource(server, apiClient);
|
|
83
|
+
registerWorkspaceMembersResource(server, apiClient);
|
|
84
|
+
// Register tools
|
|
85
|
+
registerWorkspaceTreeTool(server, apiClient);
|
|
86
|
+
registerWorknodeSubtreeTool(server, apiClient);
|
|
87
|
+
registerWorknodeCreateTool(server, apiClient);
|
|
88
|
+
registerWorknodeUpdateTool(server, apiClient);
|
|
89
|
+
registerWorknodeMyWorkTool(server, apiClient);
|
|
90
|
+
registerWorkspaceInboxTool(server, apiClient);
|
|
91
|
+
registerWorknodeArchiveTools(server, apiClient);
|
|
92
|
+
registerWorknodeSearchTool(server, apiClient);
|
|
93
|
+
registerTagCategoryTools(server, apiClient);
|
|
94
|
+
registerTagTools(server, apiClient);
|
|
95
|
+
registerWorknodeTagTools(server, apiClient);
|
|
96
|
+
registerTagSearchTools(server, apiClient);
|
|
97
|
+
registerMeetingCreateTool(server, apiClient);
|
|
98
|
+
registerMeetingListTools(server, apiClient);
|
|
99
|
+
registerMeetingUpdateTool(server, apiClient);
|
|
100
|
+
registerMeetingNotesTools(server, apiClient);
|
|
101
|
+
registerMeetingDecisionsTools(server, apiClient);
|
|
102
|
+
registerMeetingAgendaTools(server, apiClient);
|
|
103
|
+
// Register prompts
|
|
104
|
+
registerWorknodePrompts(server, apiClient);
|
|
105
|
+
registerWorkspaceContextPrompt(server, apiClient);
|
|
106
|
+
if (config.debug) {
|
|
107
|
+
console.error('[MCP] Resources registered:');
|
|
108
|
+
console.error(' - user://me (user + workspaces + members)');
|
|
109
|
+
console.error(' - workspace://{id}');
|
|
110
|
+
console.error(' - workspace://{workspaceId}/members');
|
|
111
|
+
console.error('[MCP] Tools registered:');
|
|
112
|
+
console.error(' - brxce_workspace_overview');
|
|
113
|
+
console.error(' - brxce_worknode_subtree');
|
|
114
|
+
console.error(' - brxce_create_worknodes');
|
|
115
|
+
console.error(' - brxce_update_worknodes');
|
|
116
|
+
console.error(' - brxce_my_work');
|
|
117
|
+
console.error(' - brxce_workspace_inbox');
|
|
118
|
+
console.error(' - brxce_archive_worknodes');
|
|
119
|
+
console.error(' - brxce_unarchive_worknodes');
|
|
120
|
+
console.error(' - brxce_search_worknodes');
|
|
121
|
+
console.error(' - brxce_list_tag_categories');
|
|
122
|
+
console.error(' - brxce_create_tag_category');
|
|
123
|
+
console.error(' - brxce_update_tag_category');
|
|
124
|
+
console.error(' - brxce_delete_tag_category');
|
|
125
|
+
console.error(' - brxce_list_tags');
|
|
126
|
+
console.error(' - brxce_create_tag');
|
|
127
|
+
console.error(' - brxce_update_tag');
|
|
128
|
+
console.error(' - brxce_delete_tag');
|
|
129
|
+
console.error(' - brxce_add_tags_to_worknode');
|
|
130
|
+
console.error(' - brxce_get_worknode_tags');
|
|
131
|
+
console.error(' - brxce_remove_tag_from_worknode');
|
|
132
|
+
console.error(' - brxce_batch_assign_tags');
|
|
133
|
+
console.error(' - brxce_search_tags');
|
|
134
|
+
console.error(' - brxce_get_tag_stats');
|
|
135
|
+
console.error(' - brxce_find_worknodes_by_tags');
|
|
136
|
+
console.error(' - brxce_create_meeting');
|
|
137
|
+
console.error(' - brxce_list_meetings');
|
|
138
|
+
console.error(' - brxce_get_meeting');
|
|
139
|
+
console.error(' - brxce_add_meeting_note');
|
|
140
|
+
console.error(' - brxce_list_meeting_notes');
|
|
141
|
+
console.error(' - brxce_update_meeting_note');
|
|
142
|
+
console.error(' - brxce_delete_meeting_note');
|
|
143
|
+
console.error(' - brxce_add_meeting_decision');
|
|
144
|
+
console.error(' - brxce_list_meeting_decisions');
|
|
145
|
+
console.error(' - brxce_update_meeting_decision');
|
|
146
|
+
console.error(' - brxce_delete_meeting_decision');
|
|
147
|
+
console.error(' - brxce_add_agenda_item');
|
|
148
|
+
console.error(' - brxce_list_agenda_items');
|
|
149
|
+
console.error(' - brxce_update_agenda_item');
|
|
150
|
+
console.error(' - brxce_delete_agenda_item');
|
|
151
|
+
console.error('[MCP] Prompts registered:');
|
|
152
|
+
console.error(' - /my-active-work');
|
|
153
|
+
console.error(' - /my-completed-work');
|
|
154
|
+
console.error(' - /my-urgent-tasks');
|
|
155
|
+
console.error(' - /my-inbox');
|
|
156
|
+
}
|
|
157
|
+
const transport = new StdioServerTransport();
|
|
158
|
+
await server.connect(transport);
|
|
159
|
+
if (config.debug) {
|
|
160
|
+
console.error('[MCP] Server connected to STDIO transport');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
bootstrap().catch((error) => {
|
|
164
|
+
console.error('[MCP] Fatal error:', error);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { ApiClient } from '../services/api-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register WorkNode-related prompts for common user workflows
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerWorknodePrompts(server: McpServer, apiClient: ApiClient): void;
|
|
7
|
+
//# sourceMappingURL=worknode-prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worknode-prompts.d.ts","sourceRoot":"","sources":["../../src/prompts/worknode-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AActD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAwa9E"}
|