Skip to main content
Glama
hypn4

opendart-fss-mcp

by hypn4
README.md
# opendart-fss-mcp

![Python 3.14+](https://img.shields.io/badge/python-3.14%2B-blue)

[한국어](README.ko.md)

MCP server for Korea's DART (Financial Supervisory Service) corporate disclosure API.

## What is OpenDART?

[DART (Data Analysis, Retrieval and Transfer System)](https://dart.fss.or.kr) is Korea's equivalent of the SEC's EDGAR system. It is the official electronic disclosure system operated by the Financial Supervisory Service (FSS) where all Korean corporations submit their financial reports, major event disclosures, and shareholding information.

[OpenDART](https://opendart.fss.or.kr) provides a public API to access this data programmatically.

## Features

- **85 tools** covering 7 categories — disclosure search, financial statements, periodic reports, shareholding, major events, securities registration, and utilities
- Runs as a **stdio** or **HTTP (Streamable HTTP)** MCP server
- Works with **Claude Desktop**, **Claude Code**, and any MCP-compatible client
- **Smart company search** — 6-tier search with Korean initial consonant (chosung) matching and fuzzy typo correction
  - `"삼성전자"` exact match, `"삼성"` prefix, `"전자"` substring
  - `"ㅅㅅㅈㅈ"` chosung → 삼성전자, `"ㅅㅅSDI"` mixed → 삼성SDI
  - `"삼선전자"` fuzzy → 삼성전자
- Built on [FastMCP](https://github.com/jlowin/fastmcp) and [opendart-fss](https://github.com/hypn4/opendart-fss-python) SDK

## Prerequisites

- **Python 3.14+**
- **[uv](https://docs.astral.sh/uv/)** (recommended package manager)
- **OpenDART API Key** — get one free at [opendart.fss.or.kr](https://opendart.fss.or.kr)

## Installation

```bash
uv pip install opendart-fss-mcp
```

Or install from source:

```bash
git clone https://github.com/hypn4/opendart-fss-mcp.git
cd opendart-fss-mcp
uv sync
```

## Configuration

Copy `.env.example` to `.env` and set your values:

```bash
cp .env.example .env
```

| Variable | Description | Default |
|---|---|---|
| `OPENDART_API_KEY` | OpenDART API key (**required**) | — |
| `OPENDART_MCP_TRANSPORT` | Transport protocol: `stdio` \| `http` | `stdio` |
| `OPENDART_MCP_HOST` | HTTP bind address | `127.0.0.1` |
| `OPENDART_MCP_PORT` | HTTP port | `8000` |
| `OPENDART_MCP_LOG_LEVEL` | Log level: `DEBUG` \| `INFO` \| `WARNING` \| `ERROR` \| `CRITICAL` | `INFO` |

## Usage

### Claude Desktop

Add to your Claude Desktop configuration (`claude_desktop_config.json`):

**From PyPI:**

```json
{
  "mcpServers": {
    "opendart": {
      "command": "uvx",
      "args": [
        "--from", "opendart-fss-mcp",
        "opendart-mcp"
      ],
      "env": {
        "OPENDART_API_KEY": "your_api_key_here"
      }
    }
  }
}
```

**From source:**

```json
{
  "mcpServers": {
    "opendart": {
      "command": "uv",
      "args": [
        "run",
        "--directory", "/path/to/opendart-fss-mcp",
        "opendart-mcp"
      ],
      "env": {
        "OPENDART_API_KEY": "your_api_key_here"
      }
    }
  }
}
```

### Claude Code

**From PyPI:**

```bash
claude mcp add opendart -e OPENDART_API_KEY=your_api_key_here -- uvx --from opendart-fss-mcp opendart-mcp
```

**From source:**

```bash
claude mcp add opendart -e OPENDART_API_KEY=your_api_key_here -- uv run --directory /path/to/opendart-fss-mcp opendart-mcp
```

### CLI

```bash
# stdio mode (default)
opendart-mcp

# HTTP mode
opendart-mcp --transport http --host 127.0.0.1 --port 8000
```

### FastMCP

```bash
fastmcp run src/opendart_fss_mcp/server.py:mcp
```

### Example Prompts

> Show me Samsung Electronics' 2024 consolidated financial statements

> Compare revenue and operating profit for Samsung, SK Hynix, and LG Electronics in 2023

> Who are the largest shareholders of Hyundai Motor?

> What dividends did Samsung pay last year?

> Search for M&A-related disclosures from January to June 2024

> Has Samsung announced any convertible bond issuances recently?

> Show me the executive compensation for POSCO Holdings

> What is the auditor's opinion on Kakao's financial statements?

## Available Tools

85 tools organized into 7 categories:

| Category | Prefix | Tools | Description |
|---|---|---|---|
| Disclosure | `disclosure_` | 5 | Company search, disclosure list, document viewer |
| Financial | `financial_` | 7 | Financial statements (single/multi account, XBRL) |
| Report | `report_` | 28 | Periodic report key items (compensation, capital, directors, etc.) |
| Shareholding | `shareholder_` | 2 | Major shareholder and executive holdings |
| Major Events | `event_` | 36 | M&A, capital changes, stock events, lawsuits, and more |
| Registration | `registration_` | 6 | Securities registration statement details |
| Utility | `utility_` | 1 | Current date/time (KST) |

## Development

```bash
# Install dev dependencies
uv sync

# Run tests
uv run pytest

# Lint & format
uv run ruff check .
uv run ruff format .

# Type check
uv run pyright
```

## License

MIT

## Links

- [OpenDART](https://opendart.fss.or.kr) — Official OpenDART API portal
- [DART](https://dart.fss.or.kr) — Electronic Disclosure System
- [opendart-fss](https://github.com/hypn4/opendart-fss-python) — Python SDK for OpenDART API

TDQS

C2.9/5.0

Scored across 85 tools

Disambiguation3/5

Many tools are clearly separated by domain prefixes (financial_, report_, event_, etc.), but within groups there are overlapping concepts like report_director_compensation vs report_director_compensation_approval vs report_director_individual_compensation vs report_director_compensation_by_type, and event_asset_transfer vs event_business_acquisition vs event_business_disposal which could confuse an agent. The descriptions are terse and similar, making selection harder.

Naming Consistency4/5

The naming convention is largely consistent: domain prefix (financial_, report_, event_, disclosure_, registration_, shareholder_, utility_) followed by a descriptive noun phrase. However, there are minor inconsistencies such as 'financial_multi_account' vs 'financial_single_account' vs 'financial_single_indicators' and 'report_largest_shareholder_changes' vs 'report_largest_shareholders' which break the pattern slightly.

Tool Count2/5

85 tools is far beyond the typical well-scoped MCP server. While the domain (Korean financial disclosure) is broad, the tool count is excessive and will overwhelm agents. Many tools could be consolidated with parameters (e.g., a single event_decision tool with an event_type parameter).

Completeness4/5

The tool surface covers a wide range of financial disclosures: financial statements, XBRL, reports, events, registrations, and shareholder data. There are some minor gaps like no explicit tool for updating or deleting data, but for a read-only public disclosure API, the coverage is quite comprehensive. The inclusion of utility_get_current_date and disclosure_search_company helps agents navigate the API.

Maintenance

ActivityInactive
ResponsivenessNo issues