@visionpoint/avps-mcp 1.0.0 → 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/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 +137 -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.1',
|
|
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,44 @@ 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
|
+
}
|
|
92
181
|
/**
|
|
93
182
|
* Handle incoming JSON-RPC message from stdin
|
|
94
183
|
*/
|
|
@@ -101,22 +190,42 @@ async function handleMessage(line) {
|
|
|
101
190
|
// Invalid JSON - ignore
|
|
102
191
|
return;
|
|
103
192
|
}
|
|
193
|
+
const method = request.method;
|
|
194
|
+
// Handle notifications (no response needed)
|
|
195
|
+
if (method?.startsWith('notifications/')) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
104
198
|
try {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
199
|
+
switch (method) {
|
|
200
|
+
case 'initialize':
|
|
201
|
+
// Handle locally - respond immediately
|
|
202
|
+
handleInitialize(request);
|
|
203
|
+
break;
|
|
204
|
+
case 'initialized':
|
|
205
|
+
// Client notification that init is complete - no response
|
|
206
|
+
break;
|
|
207
|
+
case 'tools/list':
|
|
208
|
+
// Return empty if not authenticated, full list if authenticated
|
|
209
|
+
await handleToolsList(request);
|
|
210
|
+
break;
|
|
211
|
+
case 'tools/call':
|
|
212
|
+
// Requires auth - will trigger device code flow if needed
|
|
213
|
+
const response = await sendToApi(request);
|
|
214
|
+
sendResponse(response);
|
|
215
|
+
break;
|
|
216
|
+
default:
|
|
217
|
+
// Proxy all other requests to API
|
|
218
|
+
if (request.id !== undefined) {
|
|
219
|
+
const apiResponse = await sendToApi(request);
|
|
220
|
+
sendResponse(apiResponse);
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
108
224
|
}
|
|
109
225
|
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));
|
|
226
|
+
if (request.id !== undefined) {
|
|
227
|
+
sendError(request.id, -32603, error.message);
|
|
228
|
+
}
|
|
120
229
|
}
|
|
121
230
|
}
|
|
122
231
|
/**
|
|
@@ -125,16 +234,20 @@ async function handleMessage(line) {
|
|
|
125
234
|
async function main() {
|
|
126
235
|
log('Starting AVPS MCP Bridge...');
|
|
127
236
|
log(`API: ${API_URL}`);
|
|
128
|
-
//
|
|
237
|
+
// Try silent auth from cache (non-blocking)
|
|
129
238
|
try {
|
|
130
|
-
auth = await (0, auth_1.
|
|
131
|
-
|
|
239
|
+
auth = await (0, auth_1.tryAcquireTokenSilent)();
|
|
240
|
+
if (auth) {
|
|
241
|
+
log(`Authenticated from cache: ${auth.userName} (${auth.userEmail})`);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
log('No cached credentials - will authenticate on first tool call');
|
|
245
|
+
}
|
|
132
246
|
}
|
|
133
247
|
catch (error) {
|
|
134
|
-
log(`
|
|
135
|
-
process.exit(1);
|
|
248
|
+
log(`Silent auth check failed: ${error.message}`);
|
|
136
249
|
}
|
|
137
|
-
// Set up stdin reader
|
|
250
|
+
// Set up stdin reader IMMEDIATELY (don't block on auth)
|
|
138
251
|
const rl = readline.createInterface({
|
|
139
252
|
input: process.stdin,
|
|
140
253
|
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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"}
|