Skip to main content
Glama

mcp-seoul-rtd

서울시 실시간 도시데이터(citydata)를 제공하는 MCP 서버입니다. 서울 주요 121개 장소의 실시간 인구 혼잡도, 도로소통, 주차장, 지하철·버스, 따릉이, 전기차충전소, 날씨, 문화행사, 상권, 사고통제, 재난문자, 뉴스를 조회할 수 있습니다.

Tools

Tool

설명

list_places

실시간 도시데이터가 제공되는 121개 장소 목록. query 로 부분 일치 필터

get_citydata

한 장소의 실시간 도시데이터 조회. place 는 장소명(부분 일치)/장소코드, categories 로 섹션 선택

get_congestion_ranking

121개 장소를 현재 혼잡도 순으로 정렬. top 으로 상위 개수(기본 10), category 로 분류 필터

categories 값: population, traffic, parking, subway, bus, bike, charger, weather, event, commercial, accident, alert, news

Related MCP server: Seoul Mobility Advisor

API 키

서울 열린데이터광장에서 인증키를 발급받아 SEOUL_OPEN_API_KEY 환경변수로 전달합니다.

  • 샘플키 sample 로는 '광화문·덕수궁' 한 곳만 조회할 수 있습니다.

  • 주의: API 엔드포인트(openapi.seoul.go.kr:8088)는 평문 HTTP 이며 인증키가 URL 에 포함됩니다.

Claude Code / Claude Desktop 설정

Claude Code 는 CLI 로 등록할 수 있습니다.

claude mcp add seoul-rtd -e SEOUL_OPEN_API_KEY=<발급받은 인증키> -- npx -y mcp-seoul-rtd

기본으로 현재 프로젝트의 local 범위에 저장됩니다. --scope user 를 주면 모든 프로젝트에서, --scope project 를 주면 .mcp.json 파일로 팀과 공유할 수 있습니다. 등록 후 /mcp 로 연결 상태를 확인하세요.

Claude Desktop 은 claude_desktop_config.json (설정 → Developer → Edit Config) 에 아래 블록을 추가합니다.

{
  "mcpServers": {
    "seoul-rtd": {
      "command": "npx",
      "args": ["-y", "mcp-seoul-rtd"],
      "env": {
        "SEOUL_OPEN_API_KEY": "<발급받은 인증키>"
      }
    }
  }
}

라이선스

  • 이 패키지의 코드는 MIT 라이선스입니다.

  • 제공되는 데이터의 저작권은 서울특별시에 있으며, 공공누리 제1유형(출처표시)에 따라 상업적 이용과 변경이 가능합니다. 데이터를 이용할 때는 출처를 표시해야 합니다. 예: "출처: 서울 열린데이터광장(서울특별시)"

  • 모든 tool 의 출력에는 위 출처표시 줄이 자동으로 포함됩니다.

Available Tools

3 tools
get_citydata실시간 도시데이터A
Read-only

서울 주요 장소 한 곳의 실시간 도시데이터를 조회합니다. 인구 혼잡도, 도로소통, 주차장, 지하철, 버스, 따릉이, 전기차충전소, 날씨, 문화행사, 상권, 사고통제, 재난문자, 뉴스를 제공합니다. categories 로 필요한 데이터만 고르면 출력이 줄어듭니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
placeYes장소명(부분 일치 지원) 또는 장소코드(POIxxx). 예: 광화문, 강남역
categoriesNo조회할 데이터 종류. 생략하면 전체

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint: true, so the description need not repeat read-only status. It adds valuable behavioral context by explaining that output size can be reduced with the categories parameter and by listing the 13 data domains. It does not discuss rate limits, caching, or error behavior, but for a read-only data retrieval, the provided context is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two well-structured sentences: the first states the core purpose and scope, the second gives a practical usage tip. Every word adds value, with no repetition of schema information or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 data types) and lack of output schema, the description provides a comprehensive list of available data categories and explains the output reduction behavior. It could additionally note the exact return format or behavior for invalid places, but the schema covers place matching details, so overall completeness is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage with descriptions for both place (including partial matching and examples) and categories (enum values). The description adds semantic meaning by translating the enum names into human-readable Korean categories (e.g., population → 인구 혼잡도), which helps an agent understand what each parameter controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('retrieves real-time city data for one major place in Seoul') and enumerates the specific data types provided. It distinguishes itself from sibling tools (list_places, get_congestion_ranking) by focusing on detailed data for a single location, not listing or ranking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for querying detailed data of a single place and offers guidance on filtering with categories, but it does not explicitly state when to use this tool over alternatives. It lacks clear exclusions or direct references to sibling tools, such as 'for rankings, use get_congestion_ranking'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_congestion_ranking혼잡도 순위A
Read-only

서울 주요 121개 장소를 현재 혼잡도(붐빔 > 약간 붐빔 > 보통 > 여유) 순으로 정렬해 반환합니다. "지금 가장 붐비는 곳이 어디야?" 같은 질문에 사용하세요. category 로 분류를 좁힐 수 있습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo상위 몇 곳을 표시할지. 기본 10
categoryNo분류 필터. 생략하면 전체

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already covers the safety profile, so the bar is lower. The description adds meaningful behavioral context by specifying the sorting order and the filtering option, which goes beyond the annotation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the core function and immediately providing a usage example. Every word contributes value; no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two optional parameters and no output schema, the description adequately conveys what is returned (a sorted list of 121 places) and how to filter. A minor gap is that it does not describe the exact response fields (e.g., place name, congestion level), but this is not critical for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: both top (default 10, max 121) and category (enum of 5 values) are fully described in the schema. The description only adds that category can narrow the classification, which is marginal beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns Seoul's 121 major places sorted by current congestion level, using the specific verb '반환합니다' and naming the exact resource. The congestion-order detail (붐빔 > 약간 붐빔 > 보통 > 여유) and the category filter explicitly distinguish it from sibling tools like list_places and get_citydata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete use-case example ('지금 가장 붐비는 곳이 어디야?') and explains that category can narrow the result, which is strong usage guidance. However, it does not explicitly mention when not to use this tool or name alternatives, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_places장소 목록A
Read-only

서울시 실시간 도시데이터가 제공되는 주요 121개 장소를 나열합니다. query 로 장소명을 부분 일치 필터링할 수 있습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo장소명 부분 일치 필터. 생략하면 전체

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already declaring the safe read-only nature, the description adds useful context by specifying the exact count (121 places) and that these are places with real-time city data. It also discloses the partial-match filtering behavior, going beyond the annotation and enriching the agent's understanding of the tool's scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the primary purpose, and includes the key filter capability. Every word is informative, with no redundancy or filler, making it exceptionally concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter and no output schema, the description is nearly complete. It covers the core purpose, the dataset scope, and the filtering behavior. A minor gap is that it doesn't explicitly state what the output list contains (e.g., place names and/or IDs), but the title and description strongly imply a list of place identifiers, so it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single optional 'query' parameter, which already describes it as a partial match filter and that omitting it returns all. The tool description merely restates this ('query 로 장소명을 부분 일치 필터링할 수 있습니다'), adding no new semantic information. Thus the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb '나열합니다' (lists) and specifies the resource as '서울시 실시간 도시데이터가 제공되는 주요 121개 장소' (main 121 places with real-time city data). This clearly defines the tool's function and distinguishes it from siblings like get_citydata and get_congestion_ranking, which focus on data retrieval and rankings rather than listing places.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing available places where Seoul real-time data exists, but it does not explicitly mention alternatives or when-not-to-use. It states the optional query filter for partial matching, but lacks direct comparison to sibling tools or exclusions, making the usage guidance only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.3.2
    • First observedget_citydata
    • First observedget_congestion_ranking
    • First observedlist_places

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool serves a distinct purpose: listing available places, fetching detailed data for a single place, and comparing congestion across places. There is no overlap in their primary functions.

Naming Consistency5/5

All tool names follow the same verb_noun pattern with lowercase and underscores: list_places, get_citydata, get_congestion_ranking. This is highly predictable and consistent.

Tool Count5/5

Three tools is a minimal but well-scoped set for a real-time Seoul city data server. Each tool covers a necessary aspect: enumeration, retrieval, and ranking, with no redundancy.

Completeness5/5

The toolset fully covers the domain of accessing real-time city data: listing available places, retrieving detailed data by place with optional category filtering, and obtaining a congestion ranking across all places. There are no obvious gaps for its intended purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers