ttbkk-mcp-server
Version:
MCP server providing access to Korean tteokbokki restaurant database with search, location-based queries, and brand information
61 lines β’ 2.5 kB
JavaScript
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
const TTBKK_EDGE_URL = 'https://izhutepzzveasglrlbcx.supabase.co';
const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Iml6aHV0ZXB6enZlYXNnbHJsYmN4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3Mjc5NTkyMzgsImV4cCI6MjA0MzUzNTIzOH0.kxdrs6OI-fD2QXsdmqZJx_Knm_gwDEXFYqgte46akEw';
/**
* Convert address or place name to coordinates using ttbkk-edge geocoding API
*/
export async function geocodeAddress(args) {
try {
const { query, provider = 'kakao' } = args;
if (!query || typeof query !== 'string') {
throw new McpError(ErrorCode.InvalidParams, 'Query parameter is required and must be a string');
}
const requestBody = {
query,
provider,
limit: 1
};
console.log(`πΊοΈ [Geocoding] Searching for: "${query}"`);
const response = await fetch(`${TTBKK_EDGE_URL}/functions/v1/geocoding`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${SUPABASE_ANON_KEY}`
},
body: JSON.stringify(requestBody)
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
if (!result.success) {
console.log(`β [Geocoding] Failed: ${result.error?.message}`);
return {
error: result.error?.message || 'Geocoding failed',
query,
provider
};
}
const data = result.data;
console.log(`β
[Geocoding] Found: ${data.formatted_address} (${data.latitude}, ${data.longitude})`);
return {
success: true,
query,
result: {
name: data.formatted_address,
address: data.address,
coordinates: {
latitude: data.latitude,
longitude: data.longitude
},
provider: data.provider,
confidence: data.confidence
}
};
}
catch (error) {
console.error('β [Geocoding] Error:', error);
throw new McpError(ErrorCode.InternalError, `Failed to geocode address: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
//# sourceMappingURL=geocoding.js.map