@visionpoint/avps-mcp 1.0.0 → 1.0.2
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/auth.d.ts +5 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +23 -7
- package/dist/auth.js.map +1 -1
- package/dist/index.js +164 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/auth.d.ts
CHANGED
|
@@ -7,5 +7,10 @@ export interface AuthResult {
|
|
|
7
7
|
userName: string;
|
|
8
8
|
userEmail: string;
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Try to acquire token silently from cache (no user interaction)
|
|
12
|
+
* Returns null if no valid cached token exists
|
|
13
|
+
*/
|
|
14
|
+
export declare function tryAcquireTokenSilent(): Promise<AuthResult | null>;
|
|
10
15
|
export declare function authenticate(): Promise<AuthResult>;
|
|
11
16
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoCH,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoCH,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB;AAkED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CASxE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAcxD"}
|
package/dist/auth.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Device code flow for Claude Desktop users
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.tryAcquireTokenSilent = tryAcquireTokenSilent;
|
|
7
8
|
exports.authenticate = authenticate;
|
|
8
9
|
const msal_node_1 = require("@azure/msal-node");
|
|
9
10
|
const tokenCache_1 = require("./tokenCache");
|
|
@@ -69,6 +70,27 @@ function decodeJwtPayload(token) {
|
|
|
69
70
|
}
|
|
70
71
|
return JSON.parse(Buffer.from(parts[1], 'base64').toString('utf-8'));
|
|
71
72
|
}
|
|
73
|
+
function extractAuthResult(authResult) {
|
|
74
|
+
const tokenToDecode = authResult.idToken || authResult.accessToken;
|
|
75
|
+
const decoded = decodeJwtPayload(tokenToDecode);
|
|
76
|
+
return {
|
|
77
|
+
accessToken: authResult.accessToken,
|
|
78
|
+
userName: decoded.name || '',
|
|
79
|
+
userEmail: decoded.email || decoded.preferred_username || decoded.upn || '',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Try to acquire token silently from cache (no user interaction)
|
|
84
|
+
* Returns null if no valid cached token exists
|
|
85
|
+
*/
|
|
86
|
+
async function tryAcquireTokenSilent() {
|
|
87
|
+
const pca = await getMsalInstance();
|
|
88
|
+
const authResult = await acquireTokenSilent(pca);
|
|
89
|
+
if (!authResult?.accessToken) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return extractAuthResult(authResult);
|
|
93
|
+
}
|
|
72
94
|
async function authenticate() {
|
|
73
95
|
const pca = await getMsalInstance();
|
|
74
96
|
let authResult = await acquireTokenSilent(pca);
|
|
@@ -78,12 +100,6 @@ async function authenticate() {
|
|
|
78
100
|
if (!authResult?.accessToken) {
|
|
79
101
|
throw new Error('Failed to acquire access token');
|
|
80
102
|
}
|
|
81
|
-
|
|
82
|
-
const decoded = decodeJwtPayload(tokenToDecode);
|
|
83
|
-
return {
|
|
84
|
-
accessToken: authResult.accessToken,
|
|
85
|
-
userName: decoded.name || '',
|
|
86
|
-
userEmail: decoded.email || decoded.preferred_username || decoded.upn || '',
|
|
87
|
-
};
|
|
103
|
+
return extractAuthResult(authResult);
|
|
88
104
|
}
|
|
89
105
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -60,26 +60,77 @@ const auth_1 = require("./auth");
|
|
|
60
60
|
const DEFAULT_API_URL = 'https://av-professional-services.gentleground-65cfe420.eastus2.azurecontainerapps.io';
|
|
61
61
|
const API_URL = process.env.MCP_SERVER_URL || DEFAULT_API_URL;
|
|
62
62
|
const RPC_ENDPOINT = `${API_URL}/mcp/rpc`;
|
|
63
|
-
//
|
|
63
|
+
// Server info for MCP initialize response
|
|
64
|
+
const SERVER_INFO = {
|
|
65
|
+
name: 'avps-mcp',
|
|
66
|
+
version: '1.0.2',
|
|
67
|
+
};
|
|
68
|
+
// MCP capabilities we support
|
|
69
|
+
const SERVER_CAPABILITIES = {
|
|
70
|
+
tools: {},
|
|
71
|
+
resources: {},
|
|
72
|
+
};
|
|
73
|
+
// Authenticated user (null until authenticated)
|
|
64
74
|
let auth = null;
|
|
75
|
+
// Flag to track if authentication is in progress
|
|
76
|
+
let authInProgress = false;
|
|
65
77
|
/**
|
|
66
78
|
* Log to stderr (safe for stdio transport)
|
|
67
79
|
*/
|
|
68
80
|
function log(message) {
|
|
69
81
|
console.error(`[AVPS MCP] ${message}`);
|
|
70
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Send JSON response to stdout
|
|
85
|
+
*/
|
|
86
|
+
function sendResponse(response) {
|
|
87
|
+
console.log(JSON.stringify(response));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Send error response
|
|
91
|
+
*/
|
|
92
|
+
function sendError(id, code, message) {
|
|
93
|
+
sendResponse({
|
|
94
|
+
jsonrpc: '2.0',
|
|
95
|
+
id,
|
|
96
|
+
error: { code, message },
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Ensure user is authenticated, triggering device code flow if needed
|
|
101
|
+
*/
|
|
102
|
+
async function ensureAuthenticated() {
|
|
103
|
+
if (auth) {
|
|
104
|
+
return auth;
|
|
105
|
+
}
|
|
106
|
+
if (authInProgress) {
|
|
107
|
+
// Wait for in-progress auth to complete
|
|
108
|
+
while (authInProgress) {
|
|
109
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
110
|
+
}
|
|
111
|
+
if (auth)
|
|
112
|
+
return auth;
|
|
113
|
+
}
|
|
114
|
+
authInProgress = true;
|
|
115
|
+
try {
|
|
116
|
+
auth = await (0, auth_1.authenticate)();
|
|
117
|
+
log(`Authenticated as: ${auth.userName} (${auth.userEmail})`);
|
|
118
|
+
return auth;
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
authInProgress = false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
71
124
|
/**
|
|
72
125
|
* Send JSON-RPC request to the API
|
|
73
126
|
*/
|
|
74
127
|
async function sendToApi(request) {
|
|
75
|
-
|
|
76
|
-
throw new Error('Not authenticated');
|
|
77
|
-
}
|
|
128
|
+
const currentAuth = await ensureAuthenticated();
|
|
78
129
|
const response = await fetch(RPC_ENDPOINT, {
|
|
79
130
|
method: 'POST',
|
|
80
131
|
headers: {
|
|
81
132
|
'Content-Type': 'application/json',
|
|
82
|
-
Authorization: `Bearer ${
|
|
133
|
+
Authorization: `Bearer ${currentAuth.accessToken}`,
|
|
83
134
|
},
|
|
84
135
|
body: JSON.stringify(request),
|
|
85
136
|
});
|
|
@@ -89,6 +140,67 @@ async function sendToApi(request) {
|
|
|
89
140
|
}
|
|
90
141
|
return response.json();
|
|
91
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Handle MCP initialize request locally (no auth needed)
|
|
145
|
+
*/
|
|
146
|
+
function handleInitialize(request) {
|
|
147
|
+
const response = {
|
|
148
|
+
jsonrpc: '2.0',
|
|
149
|
+
id: request.id,
|
|
150
|
+
result: {
|
|
151
|
+
protocolVersion: '2024-11-05',
|
|
152
|
+
capabilities: SERVER_CAPABILITIES,
|
|
153
|
+
serverInfo: SERVER_INFO,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
sendResponse(response);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Handle tools/list - proxy to API if authenticated, return empty if not
|
|
160
|
+
*/
|
|
161
|
+
async function handleToolsList(request) {
|
|
162
|
+
if (auth) {
|
|
163
|
+
// Proxy to API for full tool list
|
|
164
|
+
try {
|
|
165
|
+
const response = await sendToApi(request);
|
|
166
|
+
sendResponse(response);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
sendError(request.id, -32603, error.message);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
// Return empty list - Claude will re-fetch after auth
|
|
174
|
+
sendResponse({
|
|
175
|
+
jsonrpc: '2.0',
|
|
176
|
+
id: request.id,
|
|
177
|
+
result: { tools: [] },
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Handle resources/list - proxy to API if authenticated, return empty if not
|
|
183
|
+
*/
|
|
184
|
+
async function handleResourcesList(request) {
|
|
185
|
+
if (auth) {
|
|
186
|
+
// Proxy to API for full resource list
|
|
187
|
+
try {
|
|
188
|
+
const response = await sendToApi(request);
|
|
189
|
+
sendResponse(response);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
sendError(request.id, -32603, error.message);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Return empty list - Claude will re-fetch after auth
|
|
197
|
+
sendResponse({
|
|
198
|
+
jsonrpc: '2.0',
|
|
199
|
+
id: request.id,
|
|
200
|
+
result: { resources: [] },
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
92
204
|
/**
|
|
93
205
|
* Handle incoming JSON-RPC message from stdin
|
|
94
206
|
*/
|
|
@@ -101,22 +213,46 @@ async function handleMessage(line) {
|
|
|
101
213
|
// Invalid JSON - ignore
|
|
102
214
|
return;
|
|
103
215
|
}
|
|
216
|
+
const method = request.method;
|
|
217
|
+
// Handle notifications (no response needed)
|
|
218
|
+
if (method?.startsWith('notifications/')) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
104
221
|
try {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
222
|
+
switch (method) {
|
|
223
|
+
case 'initialize':
|
|
224
|
+
// Handle locally - respond immediately
|
|
225
|
+
handleInitialize(request);
|
|
226
|
+
break;
|
|
227
|
+
case 'initialized':
|
|
228
|
+
// Client notification that init is complete - no response
|
|
229
|
+
break;
|
|
230
|
+
case 'tools/list':
|
|
231
|
+
// Return empty if not authenticated, full list if authenticated
|
|
232
|
+
await handleToolsList(request);
|
|
233
|
+
break;
|
|
234
|
+
case 'resources/list':
|
|
235
|
+
// Return empty if not authenticated, full list if authenticated
|
|
236
|
+
await handleResourcesList(request);
|
|
237
|
+
break;
|
|
238
|
+
case 'tools/call':
|
|
239
|
+
// Requires auth - will trigger device code flow if needed
|
|
240
|
+
const response = await sendToApi(request);
|
|
241
|
+
sendResponse(response);
|
|
242
|
+
break;
|
|
243
|
+
default:
|
|
244
|
+
// Proxy all other requests to API
|
|
245
|
+
if (request.id !== undefined) {
|
|
246
|
+
const apiResponse = await sendToApi(request);
|
|
247
|
+
sendResponse(apiResponse);
|
|
248
|
+
}
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
108
251
|
}
|
|
109
252
|
catch (error) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
id: request.id,
|
|
114
|
-
error: {
|
|
115
|
-
code: -32603,
|
|
116
|
-
message: error.message,
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
console.log(JSON.stringify(errorResponse));
|
|
253
|
+
if (request.id !== undefined) {
|
|
254
|
+
sendError(request.id, -32603, error.message);
|
|
255
|
+
}
|
|
120
256
|
}
|
|
121
257
|
}
|
|
122
258
|
/**
|
|
@@ -125,16 +261,20 @@ async function handleMessage(line) {
|
|
|
125
261
|
async function main() {
|
|
126
262
|
log('Starting AVPS MCP Bridge...');
|
|
127
263
|
log(`API: ${API_URL}`);
|
|
128
|
-
//
|
|
264
|
+
// Try silent auth from cache (non-blocking)
|
|
129
265
|
try {
|
|
130
|
-
auth = await (0, auth_1.
|
|
131
|
-
|
|
266
|
+
auth = await (0, auth_1.tryAcquireTokenSilent)();
|
|
267
|
+
if (auth) {
|
|
268
|
+
log(`Authenticated from cache: ${auth.userName} (${auth.userEmail})`);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
log('No cached credentials - will authenticate on first tool call');
|
|
272
|
+
}
|
|
132
273
|
}
|
|
133
274
|
catch (error) {
|
|
134
|
-
log(`
|
|
135
|
-
process.exit(1);
|
|
275
|
+
log(`Silent auth check failed: ${error.message}`);
|
|
136
276
|
}
|
|
137
|
-
// Set up stdin reader
|
|
277
|
+
// Set up stdin reader IMMEDIATELY (don't block on auth)
|
|
138
278
|
const rl = readline.createInterface({
|
|
139
279
|
input: process.stdin,
|
|
140
280
|
output: process.stdout,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,mDAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|