veas
Version:
Veas CLI - Command-line interface for Veas platform
84 lines • 3.2 kB
JavaScript
import { getBestAuthToken, prepareMCPHeaders } from './auth-wrapper.js';
export async function getMCPTools(tokenOrAuthToken) {
const apiUrl = process.env.VEAS_API_URL || 'https://veas.app';
let authToken;
if (typeof tokenOrAuthToken === 'string') {
authToken = {
token: tokenOrAuthToken,
type: tokenOrAuthToken.includes('_') ? 'pat' : 'cli',
};
}
else if (tokenOrAuthToken) {
authToken = tokenOrAuthToken;
}
else {
authToken = await getBestAuthToken();
}
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 10000);
try {
const mcpUrl = `${apiUrl}/api/mcp/mcp`;
console.log(`[getMCPTools] Fetching from ${mcpUrl}`);
console.log(`[getMCPTools] Using ${authToken.type} token: ${authToken.token.substring(0, 20)}...`);
const response = await fetch(mcpUrl, {
method: 'POST',
headers: prepareMCPHeaders(authToken),
body: JSON.stringify({
jsonrpc: '2.0',
method: 'tools/list',
params: {},
id: 'list-tools',
}),
signal: controller.signal,
});
clearTimeout(timeout);
console.log(`[getMCPTools] Response status: ${response.status} ${response.statusText}`);
const headers = {};
response.headers.forEach((value, key) => {
headers[key] = value;
});
console.log(`[getMCPTools] Response headers:`, headers);
if (!response.ok) {
const body = await response.text();
console.log(`[getMCPTools] Error response body: ${body.substring(0, 500)}`);
throw new Error(`Failed to fetch tools: ${response.status} ${response.statusText} - ${body.substring(0, 200)}`);
}
const contentType = response.headers.get('content-type') || '';
const text = await response.text();
let result;
if (contentType.includes('text/event-stream') || text.startsWith('event:')) {
const lines = text.split('\n');
const dataLine = lines.find(line => line.startsWith('data: '));
if (dataLine) {
const jsonData = dataLine.substring(6);
result = JSON.parse(jsonData);
}
else {
throw new Error('Invalid SSE response: no data line found');
}
}
else {
result = JSON.parse(text);
}
if (result?.error) {
throw new Error(`Failed to list tools: ${result.error.message}`);
}
if (result?.result?.tools) {
return result.result.tools;
}
else if (result?.tools) {
return result.tools;
}
else if (Array.isArray(result)) {
return result;
}
return [];
}
catch (error) {
if ((error instanceof Error ? error : new Error(String(error))).name === 'AbortError') {
throw new Error('Request timeout - MCP server took too long to respond');
}
throw error;
}
}
//# sourceMappingURL=tools-registry.js.map