Skip to main content
Glama
hyunhoonj

Youth Activity Information MCP Server

by hyunhoonj

get_sigungu_list

Retrieve a list of districts (sigungu) within a specific province or metropolitan city in South Korea to enable regional filtering for youth activity searches.

Instructions

특정 시도의 시군구(기초자치단체) 목록을 조회합니다

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sidoYes시도명 (예: 서울, 부산광역시, 경기도)
pageNoNo페이지 번호 (기본값: 1)
numOfRowsNo한 페이지 결과 수 (기본값: 100)

Implementation Reference

  • MCP tool handler for 'get_sigungu_list': extracts parameters from args, calls youthApiClient.getSigunguList, formats the paginated list of sigungu (districts) with names and codes into a readable text response.
    case "get_sigungu_list": {
      const sido = args?.sido as string;
      const pageNo = (args?.pageNo as number) || 1;
      const numOfRows = (args?.numOfRows as number) || 100;
    
      const result = await youthApiClient.getSigunguList(
        sido,
        pageNo,
        numOfRows
      );
    
      let resultText = `📍 시군구 목록 (전체 ${result.totalCount}개)\n\n`;
      if (Array.isArray(result.items)) {
        result.items.forEach((item: any, index: number) => {
          resultText += `${index + 1}. ${item.sigunguNm || "N/A"} (코드: ${
            item.sigunguCode || "N/A"
          })\n`;
        });
      } else if (result.items) {
        resultText += `1. ${result.items.sigunguNm || "N/A"} (코드: ${
          result.items.sigunguCode || "N/A"
        })\n`;
      } else {
        resultText += "조회된 항목이 없습니다.\n";
      }
      resultText += `\n페이지: ${pageNo}/${Math.ceil(
        result.totalCount / numOfRows
      )}`;
    
      return {
        content: [
          {
            type: "text",
            text: resultText,
          },
        ],
      };
    }
  • src/index.ts:75-96 (registration)
    Tool registration in ListTools handler: defines name, description, and input schema requiring 'sido' (province name) with optional pagination.
    {
      name: "get_sigungu_list",
      description: "특정 시도의 시군구(기초자치단체) 목록을 조회합니다",
      inputSchema: {
        type: "object",
        properties: {
          sido: {
            type: "string",
            description: "시도명 (예: 서울, 부산광역시, 경기도)",
          },
          pageNo: {
            type: "number",
            description: "페이지 번호 (기본값: 1)",
          },
          numOfRows: {
            type: "number",
            description: "한 페이지 결과 수 (기본값: 100)",
          },
        },
        required: ["sido"],
      },
    },
  • YouthApiClient method that performs the actual API call to '/getSigunguList', sends params including serviceKey and sido (province name), parses XML response, validates resultCode, extracts totalCount and items, handles errors.
    async getSigunguList(
      sido: string,
      pageNo: number = 1,
      numOfRows: number = 100
    ): Promise<any> {
      try {
        const response = await this.client.get("/getSigunguList", {
          params: {
            serviceKey: this.serviceKey,
            sido,
            pageNo,
            numOfRows,
          },
        });
    
        const parsedData = await this.parseXmlResponse(response.data);
    
        if (parsedData.response) {
          const header = parsedData.response.header;
          const body = parsedData.response.body;
    
          if (header?.resultCode !== "00") {
            throw new Error(
              `API 오류: ${header?.resultMsg || "알 수 없는 오류"}`
            );
          }
    
          return {
            totalCount: parseInt(body?.totalCount || "0"),
            items: body?.items?.item || [],
            pageNo,
            numOfRows,
          };
        }
    
        throw new Error("예상치 못한 응답 형식");
      } catch (error) {
        if (axios.isAxiosError(error)) {
          throw new Error(
            `API 호출 실패: ${error.message}${
              error.response?.data ? ` - ${error.response.data}` : ""
            }`
          );
        }
        throw error;
      }
    }
  • Input schema definition for the tool: object with required 'sido' string, optional 'pageNo' and 'numOfRows' numbers.
    inputSchema: {
      type: "object",
      properties: {
        sido: {
          type: "string",
          description: "시도명 (예: 서울, 부산광역시, 경기도)",
        },
        pageNo: {
          type: "number",
          description: "페이지 번호 (기본값: 1)",
        },
        numOfRows: {
          type: "number",
          description: "한 페이지 결과 수 (기본값: 100)",
        },
      },
      required: ["sido"],
    },

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/hyunhoonj/mcp-test'

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