Skip to main content
Glama
nxGnosis

Travel Agent MCP Server

by nxGnosis

GET_VISA_INFO_BY_COUNTRY

Retrieve visa requirements and immigration details for specific countries to plan international travel with accurate, up-to-date information.

Instructions

Get visa information for a specific country.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
countryCodeYes
currencyCodeNo

Implementation Reference

  • The execute function implementing the core logic of the GET_VISA_INFO_BY_COUNTRY tool. It calls the visaService to fetch data and formats a detailed response with country info, news, FAQ, visa types, etc.
    execute: async (params: getVisaCountryParam) => { try { const visaInfoResponse = await visaService.getVisaInfoByCountry( params.countryCode, params.currencyCode, ); let formattedOutput = `šŸ›‚ Visa information for ${params.countryCode}:\n`; if (visaInfoResponse && visaInfoResponse.data) { const { visaCountry, visaNews, visaFaq, visaTypes, bookingsCount } = visaInfoResponse.data; // Country Information if (visaCountry) { formattedOutput += `\nšŸŒ Country: ${visaCountry.name} (${visaCountry.country_code})`; formattedOutput += `\nšŸ“ø Image: ${visaCountry.image || "N/A"}`; formattedOutput += `\nšŸ‘„ Banned Countries: ${visaCountry.banned?.join(", ") || "None"}`; formattedOutput += `\nāœˆļø No Visa Required For: ${visaCountry.no_visa?.join(", ") || "None"}`; formattedOutput += `\nāš ļø Status: ${visaCountry.status || "N/A"}`; } else { formattedOutput += "\nNo country details found."; } // Visa News if (visaNews && visaNews.length > 0) { formattedOutput += "\n\nšŸ“° Visa News:"; visaNews.forEach((news:any) => { formattedOutput += `\n - ${news.title || "No title"}: ${news.content || "No content"}`; }); } // Visa FAQ if (visaFaq && visaFaq.length > 0) { formattedOutput += "\n\nšŸ“š Visa FAQ:"; visaFaq.forEach((faq:any) => { formattedOutput += `\n - šŸ’¬ Question: ${faq.question || "No question"}`; formattedOutput += `\n šŸ’¬ Answer: ${faq.answer || "No answer"}`; }); } // Visa Types if (visaTypes && visaTypes.length > 0) { formattedOutput += "\n\nšŸŽŸļø Visa Types:"; visaTypes.forEach((type:any) => { formattedOutput += `\nVisa Type: ${type.name || "N/A"}`; formattedOutput += `\nšŸŒ Country Code: ${type.country_code || "N/A"}`; formattedOutput += `\n#ļøāƒ£ Base Code: ${type.base_code || "N/A"}`; formattedOutput += `\nšŸ’° Total Price: $${type.total_price || "N/A"}`; formattedOutput += `\nšŸ’° Processing Fee: $${type.processing_fee || "N/A"}`; formattedOutput += `\nšŸ’° Government Fee: $${type.government_fee || "N/A"}`; formattedOutput += `\nšŸ’¼ Entry Type: ${type.entry_type || "N/A"}`; formattedOutput += `\nā° Validity Period: ${type.validity_period || "N/A"} days`; formattedOutput += `\nāœ… Status: ${type.status || "N/A"}`; if (type.keyRequirements && type.keyRequirements.length > 0) { formattedOutput += "\nšŸ“„ Key Requirements:"; type.keyRequirements.forEach((req:any) => { formattedOutput += `\n - ${req.requirement || "N/A"}`; }); } if (type.benefits && type.benefits.length > 0) { formattedOutput += "\n⭐ Benefits:"; type.benefits.forEach((benefit:any) => { formattedOutput += `\n - ${benefit.benefit || "N/A"}`; }); } if (type.additionalRequirements && type.additionalRequirements.length > 0) { formattedOutput += "\nāš ļø Additional Requirements:"; type.additionalRequirements.forEach((additionalRequirement:any) => { formattedOutput += `\n - ${additionalRequirement.question || "N/A"}`; }); } formattedOutput += "\n---\n"; // Add separator between visa types }); } formattedOutput += `\nšŸ›’ Total Bookings: ${bookingsCount || 0}`; } else { formattedOutput += "Could not retrieve visa information."; } return dedent`${formattedOutput}`; } catch (error) { if (error instanceof Error) { return `Error fetching visa information for ${params.countryCode}: ${error.message}`; } return `An unknown error occurred while fetching visa information for ${params.countryCode}`; } }, };
  • Zod schema for tool parameters: required countryCode (ISO alpha-3) and optional currencyCode.
    const getVisaCountryParam = z.object({ countryCode: z .string() .describe("The ISO 3166-1 alpha-3 country code (e.g., 'USA', 'GHA')."), currencyCode: z .string() .optional() .describe( "Optional currency code for the country, if applicable (e.g., 'USD', 'EUR').", ), });
  • src/index.ts:14-15 (registration)
    Registration of the GET_VISA_INFO_BY_COUNTRY tool with the FastMCP server.
    // Add Visa tools server.addTool(getVisaInfoByCountry);
  • Helper service that fetches visa data from the external API, transforms it, and returns structured data used by the tool handler.
    getVisaInfoByCountry: async ( countryCode: string, currencyCode?: string, ): Promise<any> => { let url = `${config.visaApi.baseUrl}/visa/country/details/${countryCode}`; if (currencyCode) { url += `?currencyCode=${currencyCode}`; } try { const response = await fetch(url, { headers: { "x-api-key": config.visaApi.apiKey, }, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const rawData = await response.json(); // Transform the raw data into the expected structure const formattedData = { data: { visaCountry: rawData.data?.visaCountry || null, // Assuming rawData.data.visaCountry contains the country details visaNews: rawData.data?.visaNews || [], visaFaq: rawData.data?.visaFaq || [], visaTypes: rawData.data?.visaTypes || [], bookingsCount: rawData.data?.bookingsCount || 0, }, }; return formattedData; } catch (error) { console.error("Error fetching visa info:", error); throw error; } },

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nxGnosis/TravelAgentMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server