Skip to main content
Glama

ARIM MCP Server

An MCP (stdio) server that lets Claude directly query measurement data, statistics, corrections, and reports from the Arim Air monitoring system.

Query-only. It does not include features that change server state (report publishing, applying corrections, device commands, backfill, alarm registration/deletion).

Installation

Node.js 18 or higher is required.

macOS / Linux

cd /Users/amdmania/Project/arimair-mcp
npm install
npm run build
./setup-arim-mcp.sh     # Claude Code + Claude Desktop 자동 등록

Windows

Place the repository in a location of your choice (e.g., C:\Users\<user>\arimair-mcp) and run it from that folder. The installation script resolves paths relative to its own location, so it works no matter where you put it.

In PowerShell:

cd C:\Users\<사용자>\arimair-mcp
npm install
npm run build
powershell -ExecutionPolicy Bypass -File .\setup-arim-mcp.ps1

-ExecutionPolicy Bypass is an option that allows running an unsigned script just this once. It does not change system policy.

What the installation script does (common)

The server address is fixed to the production server (https://monitor.arimair.com), so it is not prompted for. Both scripts only ask for the ID, password, and account type, then register in the two places below.

  • Claude Code CLI (claude mcp add arim -s user) — skipped if the claude command is not available

  • Claude Desktop configuration file — the existing file is backed up as .bak.<timestamp>, and other MCP servers already registered are preserved

OS

Claude Desktop configuration path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

After registration, you must fully quit and reopen Claude Desktop for the tools to appear.

Manual registration

# macOS / Linux
claude mcp add arim -s user -t stdio \
  -e ARIM_API_BASE_URL=https://monitor.arimair.com \
  -e ARIM_MCP_USER=<아이디> \
  -e ARIM_MCP_PASS=<비밀번호> \
  -- node /Users/amdmania/Project/arimair-mcp/build/index.js
# Windows (PowerShell) — 경로는 실제 설치 위치로
claude mcp add arim -s user -t stdio `
  -e "ARIM_API_BASE_URL=https://monitor.arimair.com" `
  -e "ARIM_MCP_USER=<아이디>" `
  -e "ARIM_MCP_PASS=<비밀번호>" `
  -- node C:\Users\<사용자>\arimair-mcp\build\index.js

If you did not register a password, you can log in with the arim_login tool after connecting.

Related MCP server: GigAPI MCP Server

Environment variables

Variable

Default value

Description

ARIM_API_BASE_URL

https://monitor.arimair.com

Target server address. The installation script registers it fixed to this value, so you normally do not need to touch it; only change it to http://localhost:9080 etc. when connecting to a local server for testing

ARIM_MCP_USER

—

Auto-login ID

ARIM_MCP_PASS

—

Auto-login password

ARIM_MCP_USER_TYPE

admin

admin or user

ARIM_API_TIMEOUT

20000

Request timeout (ms)

If credentials are set as environment variables, the server auto-logs in on the first tool call, and if the session expires, it re-logs in once and retries.

Authentication method

The ARIM server does not issue JWTs; it authenticates via HttpSession + session cookie (Spring Session's SESSION). The MCP stores the cookie received from the /account/login call and sends it with subsequent requests.

All requests include the X-Mcp-Client: 1 header. When this header is present, the server's AuthorizeInterceptor returns a 401 JSON instead of a 302 redirect to the login page, and the MCP treats this as session expiry and re-logs in.

Sites

Device, measurement data, statistics, and report queries are all based on the currently selected site. Internally, the server uses the session's monitorId (the monitoring target administrator account), but the tools treat it as a "site." This is the same as the site selection combo at the top of the web screen.

site_list                        → 선택 가능한 사이트와 현재 사이트
site_select { site: "울산 환경보건센터" }   → 사이트 변경

site_select accepts even a partial site name. Even if the words are in a different order than the registered name (e.g., the registered name is [환경보건센터] 울산 울산대), it will find it as long as all the words are present. It searches the display name (company), the contact person's name (name), and the siteId.

  • If there are multiple candidates, it does not pick one arbitrarily; it returns the candidate list (e.g., "환경보건센터" → 9 locations)

  • An exact name match takes precedence over partial matches (e.g., "도로교통연구원" → arimsc_ex)

General user accounts see only approved providers; admin accounts see the full list (same rule as the web screen).

Tool list

Authentication

Tool

Description

arim_login

Log in (can use environment variable credentials)

arim_whoami

Query login status / monitorId / system settings

arim_logout

End session

Sites

Tool

Description

site_list

List selectable sites and the current site

site_select

Change the query target site

Devices

Tool

Description

device_list

Device list

device_get

Device details

device_realtime

Latest values for all devices (raw)

device_realtime_correction

Latest values for all devices (corrected)

device_nearby_stations

Nearby Air Korea stations

Measurement data

Tool

Description

data_search

Period query (auto-switches between raw/hourly average/daily average by period)

data_raw_search

Always queries minute-level raw data

data_recent

Most recently collected data

Statistics & weather

Tool

Description

stat_daily_avg

Query average data

stat_collection_rate

Collection rate (missing rate) by device × date

stat_weather_stations

KMA station list

stat_weather

KMA observation history (hourly/daily)

sensor_list

Sensor metadata (unit, decimal places)

Corrections

Tool

Description

correction_devices

Devices subject to correction and application status

correction_trend

Correction factor trend (last 12 months)

correction_compare

Time series comparison before/after correction

correction_factors

Correction factors for a specific application month

correction_versions

Correction model version history

Reports

Tool

Description

report_list

Publication history

report_get

History details

report_months

List of target months for publication

report_v2_html

New report (V2) HTML body

Alarms

Tool

Description

alarm_list

Alarm occurrence history

alarm_config_list

Sensor threshold SMS notification settings

Monitoring aggregation

Tool

Description

monitor_device_state

Operation/communication status aggregation

monitor_working_percent

Normal operation rate

monitor_data_count

Collection count aggregation

monitor_fault_devices

Faulty/abnormal devices

monitor_search

Monitoring period query

monitor_rose / monitor_rose_search

Pollution rose

Large response handling

Time series query tools accept maxRows (default 500). The server has no row limit, so even a single day of minute-level queries can produce over 1,400 rows; when exceeded, the server performs uniform interval sampling and returns totalRows / returnedRows / sampled in the response. The last (most recent) row is always preserved.

Server-side dependencies

This MCP assumes the following server changes.

Location

Change

route/AuthorizeInterceptor.java

Return 401 JSON when X-Mcp-Client: 1 header is present

controller/AccountController.java

Add GET /account/me

controller/SettingController.java

Add GET /setting/sensorlist

If /account/me and /setting/sensorlist are missing, only arim_whoami, sensor_list, and alarm_config_list (when adminId is omitted) will not work; the other tools will work normally. site_list also works, but without /account/me it cannot ask the server for the current site, so it displays the value selected via site_select in this session as the current site.

The site feature itself uses only existing APIs (/site/update/{id}, /admin/list, /datarequest/providerlist) without any server modification.

Available Tools

36 tools
alarm_config_listA

센서 임계치 문자 알림 설정을 조회한다. adminId 를 생략하면 arim_whoami 의 monitorId 를 쓴다.

Inputs: adminId.

alarm_listB

발생한 알람 이력을 조회한다.

Inputs: maxRows.

arim_loginA

ARIM 모니터링 서버에 로그인해 세션을 만든다. 인자를 생략하면 ARIM_MCP_USER/ARIM_MCP_PASS 환경변수를 쓴다.

Inputs: userId, password, userType.

arim_logoutA

세션을 종료하고 쿠키를 폐기한다.

Inputs: no named parameters.

arim_whoamiA

현재 로그인 상태와 조회 필터의 기준이 되는 monitorId, 시스템 설정을 조회한다.

Inputs: no named parameters.

correction_compareA

보정 전/후 시간별 시계열을 나란히 조회한다. 보정 효과 검증에 쓴다.

Inputs: endDate (required), deviceId (required), startDate (required), maxRows.

correction_devicesB

보정 대상 측정기 목록과 보정 적용 현황을 조회한다.

Inputs: no named parameters.

correction_factorsB

특정 적용월에 사용된 보정 인자를 조회한다.

Inputs: deviceId (required), applyMonth (required).

correction_trendA

측정기의 보정 인자 변화 추이(최근 12개월)를 조회한다.

Inputs: deviceId (required), item.

correction_versionsA

보정 모델의 버전 이력(성능 지표 포함)을 조회한다.

Inputs: deviceId (required), item, limit, periodType.

data_recentB

측정기의 최근 수집 데이터를 조회한다.

Inputs: deviceId (required), maxRows.

device_getB

측정기 한 대의 상세 정보를 조회한다.

Inputs: deviceId (required).

device_listA

로그인 계정이 볼 수 있는 측정기 목록을 조회한다. (id, 이름, 주소, 경위도, 센서/네트워크 상태, 보정 적용 여부)

Inputs: no named parameters.

device_nearby_stationsA

측정기 인근의 에어코리아 측정소 목록을 거리순으로 조회한다. 보정 기준국 확인에 쓴다.

Inputs: deviceId (required).

device_realtimeA

전체 측정기의 최신 측정값을 조회한다. (보정 미적용 원시값 기준)

Inputs: no named parameters.

device_realtime_correctionA

전체 측정기의 최신 측정값을 보정 적용값으로 조회한다.

Inputs: no named parameters.

monitor_data_countB

데이터 수집 건수 집계를 조회한다.

Inputs: no named parameters.

monitor_device_stateB

측정기 가동/통신 상태 집계를 조회한다.

Inputs: no named parameters.

monitor_fault_devicesA

고장·이상 상태로 판정된 측정기 목록을 조회한다.

Inputs: no named parameters.

monitor_roseB

오염장미도(풍향별 농도 분포) 데이터를 조회한다.

Inputs: period (required).

monitor_working_percentB

측정기 정상 가동률을 조회한다.

Inputs: no named parameters.

report_getB

리포트 발행 이력 한 건의 상세를 조회한다.

Inputs: no (required).

report_listB

리포트 발행 이력을 조회한다. (측정기, 대상월, 생성/메일 발송 여부, 파일명)

Inputs: no named parameters.

report_monthsA

리포트를 발행할 수 있는 대상 월 목록을 조회한다.

Inputs: no named parameters.

report_v2_htmlA

신규 리포트(V2)의 HTML 본문을 조회한다. 저장본이 없으면 서버가 생성하며 LLM 소견 생성 때문에 오래 걸릴 수 있다.

Inputs: deviceId (required), yearMonth (required), maxChars.

sensor_listA

센서 메타 정보(항목 id, 이름, 단위, 소수점 자릿수)를 조회한다. 측정값 해석·표기에 쓴다. digit 은 'F1','F2' 형식이라 숫자만 뽑아 쓴다.

Inputs: no named parameters.

site_listA

조회 대상으로 선택할 수 있는 사이트 목록과 현재 선택된 사이트를 조회한다. 측정기·데이터·리포트 조회는 모두 현재 사이트를 기준으로 한다.

Inputs: no named parameters.

site_selectA

조회 대상 사이트를 바꾼다. 사이트 이름의 일부(예: '부산시설공단')만 줘도 되고, 정확한 siteId 를 줘도 된다. 이후의 모든 조회가 이 사이트 기준으로 바뀐다.

Inputs: site (required).

stat_collection_rateA

측정기 × 일자별 데이터 수집률(결측률)을 조회한다. 결측 구간 파악에 쓴다.

Inputs: end (required), start (required), maxRows, deviceId.

stat_daily_avgA

평균 데이터를 기간으로 조회한다. 1일 이하는 원시, 30일 이하는 시간평균, 초과는 일평균으로 서버가 자동 전환한다.

Inputs: endDate (required), deviceId (required), startDate (required), maxRows.

stat_weatherA

기상청 관측 이력(기온·풍향·풍속·습도 등)을 시간별 또는 일별로 조회한다.

Inputs: stnId (required), endDate (required), startDate (required), mode, +1 more.

stat_weather_stationsA

기상청(KMA) 관측소 목록을 조회한다. stat_weather 의 stnId 를 찾을 때 쓴다.

Inputs: no named parameters.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 36 tools

    Disambiguation2/5

    Multiple tools overlap in purpose, especially around data queries: data_recent vs device_realtime, monitor_search vs data_search vs data_raw_search vs stat_daily_avg, and monitor_rose vs monitor_rose_search. Descriptions clarify some differences, but several tool boundaries remain unclear and could easily cause misselection.

    Naming Consistency3/5

    Most tool names use snake_case with domain prefixes like device_, data_, stat_, correction_, report_, and monitor_, which provides structure. However, action verbs are inconsistent and some names are non-verb nouns or adjectives such as data_recent, monitor_rose, correction_factors, and report_v2_html, making the pattern less predictable.

    Tool Count2/5

    With 36 tools, the server exceeds the 25+ threshold and feels heavy. Several tools could be consolidated, such as the realtime variants, rose variants, and overlapping period-based data query tools, even though the overall domain is fairly broad.

    Completeness4/5

    The tool set gives broad read coverage for authentication, site/device context, raw and aggregated measurements, corrections, reports, and alarms. The lack of create/update/delete operations is acceptable for a monitoring-focused server, though alarm config is read-only and some reporting workflows are only partially surfaced.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      This read-only MCP Server allows you to connect to Adobe Analytics data from Claude Desktop through CData JDBC Drivers. For full CRUD support, check out the first managed MCP platform: CData Connect AI (https://www.cdata.com/ai/).
      3
      MIT
    • A
      license
      C
      quality
      D
      maintenance
      An MCP server that provides seamless integration with Claude Desktop for querying and managing timeseries data in GigAPI Timeseries Lake.
      7
      6
      Apache 2.0
    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server for the air-Q Cloud API, enabling remote retrieval of air quality sensor data and historical analysis through read-only tools like listing devices, fetching readings, and exporting charts or data.
      46 PyPI
      Apache 2.0
    • A
      license
      A
      quality
      D
      maintenance
      Read-only MCP server enabling natural language querying of personal health and cultural activity scores from the health.ojimpo.com dashboard via Claude.
      5
      14 npm
      MIT