@sinch/mcp
Version:
Sinch MCP server
49 lines • 3.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.numberLookupHandler = exports.registerNumberLookup = void 0;
const zod_1 = require("zod");
const verification_service_helper_1 = require("./utils/verification-service-helper");
const utils_1 = require("../../utils");
const types_1 = require("../../types");
const verification_tools_helper_1 = require("./utils/verification-tools-helper");
const TOOL_KEY = 'numberLookup';
const TOOL_NAME = (0, verification_tools_helper_1.getToolName)(TOOL_KEY);
const registerNumberLookup = (server, tags) => {
if (!(0, verification_tools_helper_1.shouldRegisterTool)(TOOL_KEY, tags))
return;
server.tool(TOOL_NAME, 'With quick and easy access to Number Lookup, you can enhance your communications and keep your database as clean as a whistle. Number Lookup checks against first-party numbering sources and provides real-time feedback. Test numbers to ensure your recipients are ready and waiting to receive your messages!', {
phoneNumber: zod_1.z.string().describe('Phone number in E.164 format to look up'),
}, exports.numberLookupHandler);
};
exports.registerNumberLookup = registerNumberLookup;
const numberLookupHandler = async ({ phoneNumber }) => {
const maybeCredentials = (0, verification_service_helper_1.getVerificationCredentials)();
if ((0, utils_1.isPromptResponse)(maybeCredentials)) {
return maybeCredentials.promptResponse;
}
const credentials = maybeCredentials;
// TODO: use the SinchClient once it supports the Number Lookup API to use the signed request instead of basic authentication
const resp = await fetch('https://number-lookup.api.sinch.com/v1/lookups', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: 'Basic ' + Buffer.from(`${credentials.applicationKey}:${credentials.applicationSecret}`).toString('base64'),
'User-Agent': (0, utils_1.formatUserAgent)(TOOL_NAME, credentials.applicationKey),
},
body: JSON.stringify({
number: phoneNumber,
features: ['LineType']
})
});
if (!resp.ok) {
const errorText = await resp.text();
return new types_1.PromptResponse(`Failed to look up number ${phoneNumber}. Status: ${resp.status}, Error: ${errorText}`).promptResponse;
}
const data = await resp.json();
if (!data.line || !data.line.carrier || !data.line.type || !data.countryCode || !data.number) {
return new types_1.PromptResponse(`Number lookup for ${phoneNumber} returned incomplete data.`).promptResponse;
}
return new types_1.PromptResponse(`Line type features: carrier ${data.line.carrier}, type: ${data.line.type}), mobileCountryCode: ${data.line.mobileCountryCode}, mobileNetworkCode: ${data.line.mobileNetworkCode}, countryCode: ${data.countryCode}, number: ${data.number}, traceId: ${data.traceId}`).promptResponse;
};
exports.numberLookupHandler = numberLookupHandler;
//# sourceMappingURL=number-lookup.js.map