@baasix/baasix 0.1.26 → 0.1.28
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/dist/routes/mcp.route.d.ts +2 -3
- package/dist/routes/mcp.route.d.ts.map +1 -1
- package/dist/routes/mcp.route.js +65 -47
- package/dist/routes/mcp.route.js.map +1 -1
- package/dist/services/MCPService.d.ts +28 -6
- package/dist/services/MCPService.d.ts.map +1 -1
- package/dist/services/MCPService.js +904 -702
- package/dist/services/MCPService.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,9 +5,8 @@
|
|
|
5
5
|
* Enable via environment variable: MCP_ENABLED=true
|
|
6
6
|
*
|
|
7
7
|
* Authentication options (in priority order):
|
|
8
|
-
* 1.
|
|
9
|
-
* 2.
|
|
10
|
-
* 3. Authorization header or cookie from request (like normal API calls)
|
|
8
|
+
* 1. X-MCP-Email + X-MCP-Password headers - Uses internal auth service to login
|
|
9
|
+
* 2. Authorization header or cookie from request (auth middleware populates accountability)
|
|
11
10
|
*
|
|
12
11
|
* Supports both stateful (with sessions) and stateless modes.
|
|
13
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.route.d.ts","sourceRoot":"","sources":["../../baasix/routes/mcp.route.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"mcp.route.d.ts","sourceRoot":"","sources":["../../baasix/routes/mcp.route.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAC;;;mBAkN/B,OAAO,aAAa,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC;;AA2LhF,wBAGE"}
|
package/dist/routes/mcp.route.js
CHANGED
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
* Enable via environment variable: MCP_ENABLED=true
|
|
7
7
|
*
|
|
8
8
|
* Authentication options (in priority order):
|
|
9
|
-
* 1.
|
|
10
|
-
* 2.
|
|
11
|
-
* 3. Authorization header or cookie from request (like normal API calls)
|
|
9
|
+
* 1. X-MCP-Email + X-MCP-Password headers - Uses internal auth service to login
|
|
10
|
+
* 2. Authorization header or cookie from request (auth middleware populates accountability)
|
|
12
11
|
*
|
|
13
12
|
* Supports both stateful (with sessions) and stateless modes.
|
|
14
13
|
*
|
|
@@ -39,83 +38,102 @@ async function loadMCPDependencies() {
|
|
|
39
38
|
removeMCPSession = mcpService.removeMCPSession;
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
|
-
// Cache for
|
|
43
|
-
const
|
|
41
|
+
// Cache for email/password-based login (per email)
|
|
42
|
+
const loginCache = new Map();
|
|
44
43
|
/**
|
|
45
|
-
* Login using email and password
|
|
46
|
-
*
|
|
44
|
+
* Login using email and password via internal auth service (no HTTP round-trip).
|
|
45
|
+
* Uses getAuthInstance().signIn() directly, same as the auth route handlers.
|
|
47
46
|
*/
|
|
48
|
-
async function performLogin(email, password, cacheKey) {
|
|
49
|
-
// Check if we have a valid cached
|
|
50
|
-
const cached =
|
|
51
|
-
if (cached && Date.now() < cached.expiry
|
|
52
|
-
return cached.accountability;
|
|
47
|
+
async function performLogin(email, password, cacheKey, ip) {
|
|
48
|
+
// Check if we have a valid cached accountability for this email
|
|
49
|
+
const cached = loginCache.get(cacheKey);
|
|
50
|
+
if (cached && Date.now() < cached.expiry) {
|
|
51
|
+
return { ...cached.accountability, ipaddress: ip };
|
|
53
52
|
}
|
|
54
53
|
try {
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
});
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
user: response.data.user?.id || null,
|
|
66
|
-
role: response.data.user?.role?.name || response.data.user?.role_Id || null,
|
|
67
|
-
admin: response.data.user?.role?.name === "administrator",
|
|
68
|
-
ip: "127.0.0.1",
|
|
69
|
-
};
|
|
70
|
-
// Cache for 55 minutes (tokens typically last 1 hour)
|
|
71
|
-
headerLoginCache.set(cacheKey, {
|
|
72
|
-
token: response.data.token,
|
|
73
|
-
expiry: Date.now() + 55 * 60 * 1000,
|
|
74
|
-
accountability,
|
|
75
|
-
});
|
|
76
|
-
console.info(`[MCP] Login successful for ${email}`);
|
|
77
|
-
return accountability;
|
|
54
|
+
const { getAuthInstance } = await import("./auth.route.js");
|
|
55
|
+
const auth = getAuthInstance();
|
|
56
|
+
if (!auth) {
|
|
57
|
+
console.error("[MCP] Auth service not initialized yet");
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const result = await auth.signIn({ email, password, ipAddress: ip });
|
|
61
|
+
if (!result || !result.user) {
|
|
62
|
+
console.error(`[MCP] Login failed for ${email}: invalid credentials`);
|
|
63
|
+
return null;
|
|
78
64
|
}
|
|
65
|
+
// Build accountability matching the shape the auth middleware produces
|
|
66
|
+
const isAdmin = result.role?.name === "administrator";
|
|
67
|
+
const accountability = {
|
|
68
|
+
user: {
|
|
69
|
+
id: result.user.id,
|
|
70
|
+
email: result.user.email,
|
|
71
|
+
firstName: result.user.firstName,
|
|
72
|
+
lastName: result.user.lastName,
|
|
73
|
+
isAdmin,
|
|
74
|
+
role: result.role?.name || "public",
|
|
75
|
+
},
|
|
76
|
+
role: result.role ? {
|
|
77
|
+
id: result.role.id,
|
|
78
|
+
name: result.role.name,
|
|
79
|
+
isTenantSpecific: result.role.isTenantSpecific,
|
|
80
|
+
} : null,
|
|
81
|
+
permissions: result.permissions || [],
|
|
82
|
+
tenant: result.tenant?.id || null,
|
|
83
|
+
ipaddress: ip,
|
|
84
|
+
};
|
|
85
|
+
// Cache for 55 minutes (tokens typically last 1 hour)
|
|
86
|
+
loginCache.set(cacheKey, {
|
|
87
|
+
accountability,
|
|
88
|
+
expiry: Date.now() + 55 * 60 * 1000,
|
|
89
|
+
});
|
|
90
|
+
// Store the JWT token so MCP tools can call routes with Bearer auth
|
|
91
|
+
accountability.token = result.token;
|
|
92
|
+
console.info(`[MCP] Login successful for ${email} (admin: ${isAdmin})`);
|
|
93
|
+
return accountability;
|
|
79
94
|
}
|
|
80
95
|
catch (error) {
|
|
81
96
|
const err = error;
|
|
82
97
|
console.error(`[MCP] Login failed for ${email}:`, err.message);
|
|
83
|
-
|
|
98
|
+
loginCache.delete(cacheKey);
|
|
84
99
|
}
|
|
85
100
|
return null;
|
|
86
101
|
}
|
|
87
102
|
/**
|
|
88
103
|
* Get accountability from request headers
|
|
89
|
-
* Priority: 1. X-MCP-Email/Password headers, 2. Authorization Bearer token
|
|
104
|
+
* Priority: 1. X-MCP-Email/Password headers, 2. Authorization Bearer token (auth middleware)
|
|
90
105
|
*/
|
|
91
106
|
async function getAccountability(req) {
|
|
107
|
+
const ip = req.ip || "127.0.0.1";
|
|
92
108
|
// Priority 1: X-MCP-Email and X-MCP-Password headers (email/password auth)
|
|
93
|
-
// Check this first since token header might be empty when using email/password
|
|
94
109
|
const headerEmail = req.headers["x-mcp-email"];
|
|
95
110
|
const headerPassword = req.headers["x-mcp-password"];
|
|
96
111
|
if (headerEmail && headerPassword) {
|
|
97
|
-
const result = await performLogin(headerEmail, headerPassword, `header:${headerEmail}
|
|
112
|
+
const result = await performLogin(headerEmail, headerPassword, `header:${headerEmail}`, ip);
|
|
98
113
|
if (result) {
|
|
99
|
-
return { accountability:
|
|
114
|
+
return { accountability: result };
|
|
100
115
|
}
|
|
101
116
|
return {
|
|
102
117
|
accountability: null,
|
|
103
118
|
error: "Invalid email or password.",
|
|
104
119
|
};
|
|
105
120
|
}
|
|
106
|
-
// Priority 2: Authorization Bearer token (
|
|
121
|
+
// Priority 2: Authorization Bearer token (auth middleware already populated req.accountability)
|
|
107
122
|
const authHeader = req.headers["authorization"];
|
|
108
123
|
if (authHeader?.startsWith("Bearer ")) {
|
|
109
124
|
const token = authHeader.substring(7).trim();
|
|
110
125
|
if (token) {
|
|
111
|
-
//
|
|
126
|
+
// req.accountability is already populated by auth middleware with the full shape:
|
|
127
|
+
// { user: { id, email, isAdmin, role, ... }, role: { id, name, isTenantSpecific }, permissions, tenant, ipaddress }
|
|
112
128
|
if (req.accountability?.user || req.accountability?.role) {
|
|
113
129
|
return {
|
|
114
130
|
accountability: {
|
|
115
|
-
user: req.accountability.user,
|
|
116
|
-
role: req.accountability.role,
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
user: req.accountability.user || null,
|
|
132
|
+
role: req.accountability.role || null,
|
|
133
|
+
permissions: req.accountability.permissions || [],
|
|
134
|
+
tenant: req.accountability.tenant || null,
|
|
135
|
+
ipaddress: ip,
|
|
136
|
+
token,
|
|
119
137
|
},
|
|
120
138
|
};
|
|
121
139
|
}
|
|
@@ -177,7 +195,7 @@ const registerEndpoint = async (app, _context) => {
|
|
|
177
195
|
transport = new StreamableHTTPServerTransport({
|
|
178
196
|
sessionIdGenerator: () => sessionId,
|
|
179
197
|
onsessioninitialized: (sid) => {
|
|
180
|
-
console.info(`[MCP] Session initialized: ${sid} (user: ${sessionAccountability.user}, role: ${sessionAccountability.role})`);
|
|
198
|
+
console.info(`[MCP] Session initialized: ${sid} (user: ${sessionAccountability.user?.id || 'null'}, role: ${sessionAccountability.role?.name || 'null'}, admin: ${sessionAccountability.user?.isAdmin || false})`);
|
|
181
199
|
setMCPSession(sid, sessionAccountability);
|
|
182
200
|
},
|
|
183
201
|
onsessionclosed: (sid) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.route.js","sourceRoot":"","sources":["../../baasix/routes/mcp.route.ts"],"names":[],"mappings":"AAAA,cAAc;AACd
|
|
1
|
+
{"version":3,"file":"mcp.route.js","sourceRoot":"","sources":["../../baasix/routes/mcp.route.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCPService - Model Context Protocol Server for Baasix
|
|
3
3
|
*
|
|
4
|
-
* This service provides MCP tools that
|
|
5
|
-
*
|
|
4
|
+
* This service provides MCP tools that call Baasix HTTP routes internally,
|
|
5
|
+
* ensuring all route-level validation, permission checks, and cache
|
|
6
|
+
* invalidation are applied consistently.
|
|
6
7
|
*
|
|
7
8
|
* Enable via environment variable: MCP_ENABLED=true
|
|
8
9
|
* Access at: http://localhost:8056/mcp (or custom MCP_PATH)
|
|
@@ -12,11 +13,32 @@
|
|
|
12
13
|
* The explicit type annotations are kept for documentation and IDE support.
|
|
13
14
|
*/
|
|
14
15
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
16
|
+
/**
|
|
17
|
+
* MCPAccountability mirrors the shape built by the auth middleware.
|
|
18
|
+
* Used for session management and passed as bearer token for route calls.
|
|
19
|
+
*
|
|
20
|
+
* Shape: { user: { id, email, isAdmin, role, ... }, role: { id, name, isTenantSpecific }, permissions[], tenant, ipaddress, token }
|
|
21
|
+
*/
|
|
15
22
|
interface MCPAccountability {
|
|
16
|
-
user:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
user: {
|
|
24
|
+
id: string | number;
|
|
25
|
+
email?: string;
|
|
26
|
+
firstName?: string;
|
|
27
|
+
lastName?: string;
|
|
28
|
+
isAdmin: boolean;
|
|
29
|
+
role: string;
|
|
30
|
+
[key: string]: any;
|
|
31
|
+
} | null;
|
|
32
|
+
role: {
|
|
33
|
+
id: string | number;
|
|
34
|
+
name: string;
|
|
35
|
+
isTenantSpecific?: boolean;
|
|
36
|
+
description?: string;
|
|
37
|
+
} | null;
|
|
38
|
+
permissions: any[];
|
|
39
|
+
tenant: string | number | null;
|
|
40
|
+
ipaddress: string;
|
|
41
|
+
token?: string;
|
|
20
42
|
}
|
|
21
43
|
/**
|
|
22
44
|
* Store accountability info for an MCP session
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MCPService.d.ts","sourceRoot":"","sources":["../../baasix/services/MCPService.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"MCPService.d.ts","sourceRoot":"","sources":["../../baasix/services/MCPService.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE;;;;;GAKG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,IAAI,CAAC;IACT,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAySD;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAExF;AA0BD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAExD;AAmCD;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,CA+wD3C;;;;;;AAED,wBAAoE"}
|