Skip to main content
Glama
agentladle

mcp-dart

by agentladle

AgentLadle MCP DART

Inglés | 中文

🇨🇳/🇭🇰 MCP alojado en la nube para empresas que cotizan en A-share y en Hong Kong (informes anuales de los últimos 3 años e informes intermedios más recientes). Leer más | Obtener clave de API

Un servidor MCP (Model Context Protocol) que proporciona herramientas para descubrir, descargar, analizar y buscar informes financieros DART de Corea (금융감독원 전자공시시스템).

Permite a los asistentes de IA (Claude, Cursor, etc.) acceder a los datos Open DART de Corea mediante 6 herramientas estructuradas, desde resolver el nombre de una empresa hasta buscar palabras clave en las páginas de los informes.

Características

  • 6 herramientas MCP para datos DART: resolver nombre de empresa, listar informes, descargar+analizar, obtener TOC, leer páginas, búsqueda de palabras clave

  • Soporte completo para informes financieros 정기공시 — A001 사업보고서 (anual), A002 반기보고서 (semestral), A003 분기보고서 (trimestral), cada uno con una sección dedicada en toc.yaml derivada del XML real de DART

  • Analizador multiformato con detección automática — el XML estructurado SECTION-N (tipos A/B/D/E) se dirige al analizador de árbol de secciones (toc.yaml cuando está disponible; extracción genérica de árbol en caso contrario); las divulgaciones HTML de una sola página (I001 수시공시, I002 공정공시/잠정실적) se dirigen al analizador de extracción HTML. El formato se detecta por el contenido del archivo, no está codificado según el tipo.

  • Análisis profesional de documentos DART — extracción directa de rutas XML (./P, ./TABLE) y alineación estándar de TOC (A001: 123 códigos / 110 hojas; A002: 53 códigos / 43 hojas; A003: 59 códigos / 48 hojas)

  • 章节树 + 节内限页 modelo de paginación — las páginas respetan el árbol de secciones estándar de DART (precisión frente a la división fija en fragmentos de 4000 caracteres)

  • Búsqueda adaptada al coreano — coincidencia por subcadenas (sin límites de palabra \b), normalización TF por recuento de caracteres, sugerencias de variantes morfológicas

  • Caché local de tres niveles — archivos ZIP, XML extraído y JSON analizado se guardan por separado en ~/.agentladle/mcp-dart/data/{zip,xml,json}/

  • Idempotente — los informes ya descargados/analizados se omiten automáticamente

  • Python puro, multiplataforma (Windows / macOS / Linux)

Related MCP server: MCP OpenDART

Requisitos previos

Nota: Después de instalar uv, reinicia tu terminal y el cliente MCP (p. ej. Cherry Studio) para que el comando uv sea reconocido.

Inicio rápido

Añade a la configuración de tu cliente MCP (Claude Desktop, Cursor, etc.):

{
  "mcpServers": {
    "mcp-dart": {
      "command": "uvx",
      "args": ["agentladle-mcp-dart"],
      "env": {
        "DART_API_KEY": "your_dart_api_key_here",
        "UV_HTTP_TIMEOUT": "300"
      }
    }
  }
}

Eso es todo. uvx descargará automáticamente el paquete y sus dependencias desde PyPI — sin clonar, sin instalación manual, sin configuración de rutas.

¿Red lenta? La primera ejecución de uvx descarga muchas dependencias (incluidas dart-fss, pandas, etc.). El tiempo de espera predeterminado de 30 s puede ser demasiado corto y provocar que MCP cierre la conexión (Connection closed). Establece UV_HTTP_TIMEOUT en "300" para evitar tiempos de espera en la descarga. Si aun así falla, usa la alternativa de instalación con pip que aparece a continuación.

Alternativa: archivo .env

Si prefieres no inyectar la clave mediante el bloque env del cliente MCP, copia .env.example a una de las siguientes ubicaciones:

  • ./.env (anulación por proyecto; ignorado por git: nunca subas una clave real)

  • ~/.agentladle/mcp-dart/.env (predeterminado global de usuario)

y establece:

DART_API_KEY=your_dart_api_key_here

El primer .env existente tiene prioridad; las variables de entorno explícitas definidas en el cliente MCP siempre anulan .env. Consulta .env.example para más detalles.

Alternativa: instalación con pip

Si prefieres gestionar el entorno tú mismo:

pip install agentladle-mcp-dart

A continuación, configura (no es necesario uvx):

{
  "mcpServers": {
    "mcp-dart": {
      "command": "agentladle-mcp-dart",
      "env": { "DART_API_KEY": "your_dart_api_key_here" }
    }
  }
}

Alternativa: ejecutar desde el código fuente (desarrollo local)

Clona el repositorio y ejecuta directamente:

git clone https://github.com/agentladle/mcp-dart.git

A continuación, configura tu cliente MCP:

{
  "mcpServers": {
    "mcp-dart": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-dart", "agentladle-mcp-dart"],
      "env": { "DART_API_KEY": "your_dart_api_key_here" }
    }
  }
}

Reemplaza /path/to/mcp-dart con la ruta real del repositorio clonado.

Flujo de datos

DART OpenAPI                      Local Files (~/.agentladle/mcp-dart/data/)
────────────                      ──────────────────────────────────────────
corp_list (dart-fss)  ──→         corp_list.csv                (CSV cache, ~114k corps)
search_dart_company    ──→        corp_list.csv lookup         (Tool 6: name → stock_code)
                                     │
search_filings API     ──→        zip/{rcept_no}.zip           (Tool 2: download)
                                     │
ZIP extraction         ──→        xml/{rcept_no}/*.xml           (Tool 2: extract)
                                     │
dart_parsers + toc.yaml ──→       json/{stock_code}_{rcept_no}.json  (Tool 2: parse)
                                     │
Local TF search        ──→        search results               (Tool 5: keyword_search)
TOC (section_tree)     ──→        section_tree + page ranges   (Tool 3: get_report_toc)
Page range read        ──→        page content                 (Tool 4: get_report_pages)

Herramientas

#

Tool

Descripción

1

list_dart_filings

Lista los informes DART de una empresa coreana por código bursátil (devuelve rcept_no)

2

download_dart_report

Descarga un ZIP de informe DART y lo analiza en una caché JSON de árbol de secciones

3

get_report_toc

Obtiene el section_tree (TOC) con rangos de página — derivado de toc.yaml, no heurístico

4

get_report_pages

Lee páginas por número global de página o por section_code

5

keyword_search

Búsqueda de texto completo por subcadenas coreanas con TF por recuento de caracteres + refuerzo por posición

6

search_dart_company

Resuelve un nombre de empresa (coreano/inglés) a stock_code / corp_code mediante la caché local corp_list.csv

Herramienta 1: list_dart_filings

Lista los informes DART disponibles para una empresa surcoreana que cotiza en bolsa.

Parámetro

Tipo

Requerido

Descripción

stock_code

string

Código bursátil coreano de 6 dígitos, p. ej. "005930" (Samsung Electronics)

bgn_de

string

Fecha de inicio YYYYMMDD (por defecto: 20150101)

end_de

string

Fecha de fin YYYYMMDD (por defecto: hoy)

report_types

string[]

Tipos de detalle DART a filtrar (por defecto: ["A001","A002","A003"] — 사업/반기/분기보고서)

limit

int

Máximo de informes a devolver (por defecto 20, máximo 100)

Devuelve el rcept_no, rcept_dt, report_nm, corp_code, report_type de cada informe y un indicador parseable (true para cualquier tipo DART válido: el analizador detecta automáticamente el formato del documento en el momento del análisis).

Herramienta 2: download_dart_report

Descarga y analiza un único informe DART. Fusiona el download + parse del flujo SEC en un solo paso. Idempotente (se omite si está en caché y es válido).

Parámetro

Tipo

Requerido

Descripción

rcept_no

string

Número de recibo DART de 14 dígitos (de list_dart_filings)

stock_code

string

Código bursátil de 6 dígitos para el nombre del archivo JSON ({stock_code}_{rcept_no}.json); si se omite, se guarda en caché como {rcept_no}.json — la búsqueda sigue funcionando mediante rcept_no

rcept_dt

string

Fecha de recibo YYYYMMDD (informativo)

report_type

string

Tipo de detalle DART, por defecto "A001". Se acepta cualquier tipo válido de types.yaml; el analizador detecta automáticamente el formato del documento (XML de árbol de secciones para A/B/D/E, HTML para I001/I002).

force_parse

bool

Reanalizar aunque exista JSON en caché

Herramienta 3: get_report_toc

Recupera el section_tree DART completo (tabla de contenidos) de un informe analizado. Construido directamente desde toc.yaml alineado con el XML analizado — los rangos de página son autoritativos, no heurísticos.

Parámetro

Tipo

Requerido

Descripción

rcept_no

string

Número de recibo DART de 14 dígitos

stock_code

string

Código bursátil (mejora la búsqueda en caché)

Cada nodo tiene section_code, title, start_page, end_page, local_pages, matched (bool: si el XML coincide con esta entrada del TOC) y children. Pasa cualquier section_code al parámetro section_code de la Herramienta 4 para leer todo ese subárbol.

Herramienta 4: get_report_pages

Lee el contenido completo de las páginas por rango global de páginas o por section_code.

Parámetro

Tipo

Requerido

Descripción

rcept_no

string

Número de recibo DART de 14 dígitos

start_page

int

Página de inicio (basada en 1); por defecto 1; se ignora si section_code está definido

page_count

int

Páginas a devolver (por defecto 3, máximo 10). Se ignora cuando end_page es positivo.

end_page

int

Página final inclusiva (p. ej. start_page=12, end_page=14). 0 = no definido.

section_code

string

Código de sección DART (p. ej. "020100"); anula los argumentos de rango de páginas y devuelve el subárbol completo

stock_code

string

Código bursátil (ayuda para la búsqueda en caché)

Herramienta 5: keyword_search

Búsqueda de texto completo adaptada al coreano. Puntuación:

  • TF = recuento de subcadenas / recuento de caracteres sin espacios en blanco (el coreano no tiene palabras delimitadas por espacios)

  • Refuerzo de posición ×1.2 si la primera coincidencia está en el 20 % superior de la página

  • El modo de coincidencia ALL aplica una bonificación ×2.0 cuando todas las palabras clave coinciden

Parámetro

Tipo

Requerido

Descripción

rcept_no

string

Número de recibo DART de 14 dígitos

keywords

string[]

1–5 palabras clave en coreano (o ASCII); pasa variantes morfológicas como ["매출", "매출액"]

match_mode

string

"ANY" (por defecto) o "ALL"

max_results

int

Máximo de coincidencias (por defecto 5, máximo 50)

stock_code

string

Código bursátil (ayuda para la búsqueda en caché)

Cada coincidencia devuelve page_number, score, keyword_hits, snippet (resaltado con **...**) y el contexto de la sección (section_code/section_title).

Herramienta 6: search_dart_company

Resuelve un nombre de empresa (en coreano o inglés) a un stock_code / corp_code. Consulta la caché local corp_list.csv (sin llamada de red después del primer precargado). Usa esta herramienta antes de list_dart_filings / download_dart_report siempre que el usuario mencione una empresa por su nombre pero no proporcione un stock_code de 6 dígitos.

Parameter

Type

Required

Description

query

string

Nombre de la empresa (corp_name en coreano o corp_eng_name en inglés), p. ej. "삼성전자" o "Samsung"

exact

bool

true = coincidencia exacta de nombre; false (predeterminado) = contiene subcadena sin distinguir mayúsculas/minúsculas

limit

int

Máximo de coincidencias (predeterminado 20, máx. 50)

include_delisting

bool

true = también devuelve empresas excluidas de cotización / no cotizadas; false (predeterminado) = solo empresas cotizadas con un stock_code de 6 dígitos

Cada coincidencia contiene corp_name, corp_eng_name, stock_code, corp_code, modify_date. Cuando se devuelven varias coincidencias, selecciona el stock_code correcto y pásalo a list_dart_filings.

Configuración

Después de la primera ejecución, se crea un archivo de configuración predeterminado en ~/.agentladle/mcp-dart/config.yaml:

dart:
  api_key: ""

paths:
  data_dir: "~/.agentladle/mcp-dart/data"
  zip_dir: "~/.agentladle/mcp-dart/data/zip"
  xml_dir: "~/.agentladle/mcp-dart/data/xml"
  json_dir: "~/.agentladle/mcp-dart/data/json"

parsing:
  page_char_limit: 4000
  max_pages_per_section: 10      # soft target (precision preserved on overflow)

download:
  delay_between_requests: 0.2

Prioridad de resolución de DART_API_KEY (de mayor a menor):

  1. Variable de entorno real del sistema operativo (DART_API_KEY=xxx uvx agentladle-mcp-dart)

  2. Archivo .env — primero ./.env, luego ~/.agentladle/mcp-dart/.env

  3. dart.api_key en ~/.agentladle/mcp-dart/config.yaml

Estructura del directorio de datos

~/.agentladle/mcp-dart/
├── .env                              # Optional user-global API key (git-ignored)
├── config.yaml                       # Configuration (auto-created)
└── data/
    ├── corp_list.csv                 # ~114k Korean companies (CSV cache, dart-fss)
    ├── zip/
    │   └── {rcept_no}.zip            # Original DART archive (retained after download)
    ├── xml/
    │   └── {rcept_no}/               # Extracted XML per filing
    │       ├── {rcept_no}.xml        # Main DART XML
    │       └── {rcept_no}_NNNNN.xml  # Optional attachments
    └── json/
        └── {stock_code}_{rcept_no}.json   # Parsed section_tree + pages + coverage

Convención de nombres de archivo: {stock_code}_{rcept_no}.json cuando se conoce stock_code; {rcept_no}.json cuando se omitió stock_code en el momento de la descarga. find_json_file también recurre al glob *_{rcept_no}.json y a las estructuras heredadas raw/ / xml/ en la misma ubicación.

Ejemplo de uso

Las herramientas siguen un enfoque EAFP (más fácil pedir perdón que permiso). Los asistentes de IA deben intentar leer/buscar directamente y confiar en los errores para activar las descargas.

Escenario A: El archivo ya existe localmente (ruta más corta)

User: "Analyze Samsung's latest financial report."

1. keyword_search(rcept_no="<rcept_no>", keywords=["매출", "매출액", "영업이익"])
   → Returns page snippets matching the keywords immediately.

Escenario B: Falta el archivo (se activa el respaldo)

User: "What does LG Energy Solution's latest annual report say about R&D?"

1. keyword_search(rcept_no="<rcept_no>", keywords=["연구개발", "R&D"])
   → Error: Parsed report not found.
2. list_dart_filings(stock_code="373220", report_types=["A001"])
   → Returns the correct rcept_no.
3. download_dart_report(rcept_no="<rcept_no>")
   → Downloads ZIP, extracts XMLs, parses to JSON cache.
4. keyword_search(rcept_no="<rcept_no>", keywords=["연구개발", "R&D"])
   → Now returns hits with section context.

Escenario C: Divulgación ad hoc más reciente (guía de ganancias de Samsung / 잠정실적)

User: "Analyze Samsung's latest earnings guidance."

1. list_dart_filings(stock_code="005930", report_types=["I002"], limit=1)
   → Returns the latest 공정공시 (e.g. 잠정실적 / provisional earnings).
2. download_dart_report(rcept_no="<rcept_no>", stock_code="005930", report_type="I002")
   → Parses the HTML single-page disclosure.
3. keyword_search(rcept_no="<rcept_no>", keywords=["매출", "영업이익", "실적"])
   → AI summarizes revenue, operating profit, and YoY change.

Stack tecnológico

Component

Choice

Purpose

MCP Framework

mcp (FastMCP)

Servidor MCP con transporte stdio

API / Download

dart-fss (MIT)

Autenticación de DART, lista de empresas, descarga ZIP

XML Parsing

lxml

Motor central de análisis

Structured Data

pandas

Caché CSV de corp_list (dependencia de dart-fss)

TOC / Format Config

pyyaml

Cargadores de toc.yaml / types.yaml / formats.yaml

Search

Python built-in

TF por recuento de caracteres + refuerzo de posición

Licencia

MIT

Available Tools

6 tools
download_dart_reportA

Download and parse a single DART filing. Combines the SEC flow's download_sec_report + parse_sec_report into one step.

Args: rcept_no: 14-digit DART receipt number (from list_dart_filings) stock_code: optional 6-digit stock code for the JSON filename ({stock_code}_{rcept_no}.json). When omitted, resolves from an existing cache or uses {rcept_no}.json. rcept_dt: optional receipt date YYYYMMDD (informational) report_type: DART detail type code, default "A001". Any valid type from types.yaml is accepted; the parser auto-detects the document format. force_parse: re-parse even if a cached JSON exists

ParametersJSON Schema
NameRequiredDescriptionDefault
rcept_dtNo
rcept_noYes
stock_codeNo
force_parseNo
report_typeNoA001

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description fully carries the transparency burden. It discloses caching behavior, auto-detection of document format, and parsing routes for different report types. It lacks explicit mention of side effects like network usage, but covers core behavioral traits.

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

Conciseness4/5

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

The description is longer but well-structured with strategy and critical rules in XML tags. Every sentence adds value, and the purpose is front-loaded. Minor room for cutting verbosity without losing meaning.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, multiple report types, caching), the description covers workflow, error handling, auto-detection, parameter usage, and sibling relationships. The presence of an output schema complements the description.

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

Parameters5/5

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

Schema coverage is 0%, but the description provides rich parameter details: rcept_no's format and source, stock_code's role in file naming, rcept_dt's informational nature, report_type's default and flexibility, and force_parse's meaning. This adds significant value over the bare schema.

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's action ('Download and parse a single DART filing') and distinguishes it from siblings by noting it combines two SEC flow steps. This provides specificity and uniqueness.

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

Usage Guidelines5/5

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

The description includes an explicit strategy that tells the agent when to invoke this tool (only on 'file not found' errors from other tools) and critical rules that prevent misuse (never assume download before search). This provides thorough usage guidance.

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

get_report_pagesA

Retrieve page content from a parsed DART report.

Two modes:

  • By global page range: pass start_page + (page_count OR end_page). If both are given, end_page wins (inclusive). Per plan §Verification step 4: get_report_pages(rcept_no, start_page=12, end_page=14).

  • By section_code: pass section_code (e.g., "020100"); returns all pages in that section (overrides start_page/page_count/end_page).

Args: rcept_no: 14-digit DART receipt number start_page: Starting page number (1-based); ignored if section_code is set page_count: Consecutive pages to return (default 3, max 10). Ignored when end_page is positive. end_page: Inclusive end page (1-based). Use for start_page=12, end_page=14 style ranges (plan §Verification). 0 = interpret as not-set. section_code: Optional DART section code (e.g., "020100"); overrides start_page/page_count/end_page and returns all of that section stock_code: optional 6-digit stock code for cache hit rate

ParametersJSON Schema
NameRequiredDescriptionDefault
end_pageNo
rcept_noYes
page_countNo
start_pageNo
stock_codeNo
section_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description clearly explains parameter interactions (end_page wins over page_count, section_code overrides others), default values, and cache hint via stock_code. No contradictions.

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

Conciseness4/5

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

The description is well-structured with sections and bullet points, but slightly verbose with some repeated explanations (e.g., end_page winning). Still, each sentence adds value, so it remains efficient.

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

Completeness5/5

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

Despite no annotations, the description covers all aspects: modes, parameter usage, strategy, rules, and acknowledges the output schema (not shown). It is complete for an agent to use the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, but the description provides detailed parameter meanings, default values, interactions, and examples (e.g., stock_code for cache hit rate), going far beyond the bare schema.

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 retrieves page content from a parsed DART report, specifies two modes (page range vs section_code), and distinguishes from sibling tools like keyword_search and get_report_toc.

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

Usage Guidelines5/5

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

The description includes a <strategy> block advising to use this tool for reading large continuous blocks and to prefer keyword_search for targeted fact-finding. <critical_rules> advise keeping page_count reasonable and using get_report_toc for section_code.

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

get_report_tocA

Retrieve the complete DART section_tree (Table of Contents) for a parsed report. Each entry includes start_page, end_page, local_pages, and children.

Args: rcept_no: 14-digit DART receipt number (from list_dart_filings) stock_code: optional 6-digit stock code (improves cache hit rate when JSON file naming uses standard prefix)

ParametersJSON Schema
NameRequiredDescriptionDefault
rcept_noYes
stock_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool does NOT use heuristic page-scan; section_tree is built directly from toc.yaml and parsed XML, making page ranges authoritative. It also notes that an optional stock_code improves cache hit rate, adding behavioral insight.

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 well-structured with sections (main description, <strategy>, <critical_rules>, args). It is front-loaded with the key purpose. Every sentence adds value with no redundancy.

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

Completeness5/5

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

Given the presence of an output schema (not shown but indicated), the description need not explain return values. It adequately covers purpose, usage guidelines, behavioral transparency, and parameter semantics for a simple tool with 2 parameters (1 required) and a well-defined output.

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

Parameters5/5

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

Schema coverage is 0%, so the description compensates fully. It explains that rcept_no is a 14-digit DART receipt number from list_dart_filings, and stock_code is an optional 6-digit code that improves cache hit rate. This adds valuable context beyond the schema's title and default.

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 it retrieves the complete DART section_tree (Table of Contents) for a parsed report, specifying entry fields (start_page, end_page, local_pages, children). This distinguishes it from siblings like get_report_pages (which reads sections) and list_dart_filings (which lists filings).

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?

The <strategy> block explicitly says 'Directly invoke this tool to understand the structural layout of the report' and explains that returned section_code values can be passed to get_report_pages. This provides clear guidance on when to use and how it integrates with sibling tools, though it does not explicitly state when not to use it.

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

list_dart_filingsA

List DART filings for a Korean listed company by stock code.

Args: stock_code: 6-digit Korean stock code, e.g. "005930" (Samsung Electronics) bgn_de: Start date YYYYMMDD, e.g. "20230101" (optional) end_de: End date YYYYMMDD, e.g. "20241231" (optional) report_types: DART report detail types to filter (default: ["A001","A002","A003"]) limit: Maximum number of filings to return (default 20, max 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
bgn_deNo
end_deNo
stock_codeYes
report_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the parser auto-detects format, that non-parseable types are flagged, and that omitting dates returns most recent filings. This provides useful behavioral context beyond parameter syntax.

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?

Description is well-structured with separate strategy and critical rules sections, concise sentences, and no redundant information. Every sentence adds distinct value.

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?

Despite having an output schema (not shown), the description mentions that it returns rcept_no and flags non-parseable types. For a 5-parameter tool, this is sufficient to understand the tool's role and output, though additional return value details could be included.

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

Parameters5/5

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

Schema description coverage is 0%, so description compensates fully. It provides concrete examples for stock_code ('005930'), format for dates (YYYYMMDD), default values for report_types and limit, and max value for limit. All five parameters are clearly explained.

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?

Description uses specific verb 'List' and explicitly states resource 'DART filings for a Korean listed company by stock code'. It clearly distinguishes from sibling tool 'download_dart_report' by mentioning it returns 'rcept_no' needed for download.

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?

The strategy section instructs to invoke this tool before downloading, and the critical rules provide concrete guidance on using return value for download_dart_report and handling date parameters. However, it does not explicitly contrast with other siblings like get_report_pages.

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

search_dart_companyA

Search Korean listed companies by name (Korean or English) and return their stock_code / corp_code. Use this when the user references a company by name without providing a 6-digit stock_code.

Args: query: Company name (Korean or English), e.g. "삼성전자" or "Samsung" exact: If True, match the name exactly; if False (default), substring contains. limit: Max number of matches to return (default 20, max 50). include_delisting: If True, also return delisted / non-listed companies (those without a 6-digit stock_code). Defaults to False.

ParametersJSON Schema
NameRequiredDescriptionDefault
exactNo
limitNo
queryYes
include_delistingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavior: case-insensitive matching, exact vs. substring modes, returning all candidates on multiple matches (not guessing), and the include_delisting option. No contradictions.

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

Conciseness4/5

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

The description is well-structured with sections for strategy, critical rules, and examples. It is comprehensive but slightly lengthy; however, every sentence adds value. Front-loading the core purpose helps efficient reading.

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

Completeness5/5

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

Given the tool's complexity (4 parameters, ambiguity resolution, sibling coordination) and presence of an output schema, the description is complete: it explains purpose, usage, parameter details, return behavior, and provides examples. No gaps remain.

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

Parameters5/5

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

The description details all 4 parameters beyond the schema: query (Korean/English name), exact (exact match vs substring), limit (default 20, max 50), include_delisting (returns delisted companies). Schema coverage is 0%, so the description fully compensates.

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 searches Korean listed companies by name (Korean or English) and returns stock_code/corp_code. It distinguishes from sibling tools like list_dart_filings by explicitly stating to resolve stock_code first. Examples solidify the purpose.

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

Usage Guidelines5/5

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

The <strategy> section explicitly says to invoke this tool FIRST when a company name is given without a stock_code. The <critical_rules> specify to SKIP if a stock_code is already provided and call list_dart_filings directly. This provides clear when-to-use and when-not-to-use guidance with alternatives.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observeddownload_dart_report
    • First observedget_report_pages
    • First observedget_report_toc
    • First observedkeyword_search
    • First observedlist_dart_filings
    • First observedsearch_dart_company

TDQS

A4.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct task: company lookup, filing listing, downloading/parsing, table of contents retrieval, page reading, and keyword search. There is no overlap in functionality.

Naming Consistency4/5

Most tools follow a verb_noun pattern (search_dart_company, list_dart_filings, download_dart_report, get_report_toc, get_report_pages). One tool (keyword_search) uses a noun_verb structure, which is a minor deviation but still understandable.

Tool Count5/5

Six tools cover the core workflow for DART financial filings: search company, list filings, download, get structure, read pages, and search within. The count is well-scoped for the domain.

Completeness5/5

The tool set provides comprehensive coverage for a read-only financial filings system: find company, list filings, download/parse, navigate structure, read content, and search. No obvious gaps for the intended purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to query Korean listed companies' financial statements, public disclosures, executive information, and shareholder structures in real-time using the DART API.
    2
    -
  • F
    license
    C
    quality
    Not graded
    maintenance
    Enables AI assistants to access South Korea's financial disclosure system (OpenDART), allowing users to retrieve corporate financial reports, disclosure documents, shareholder information, and automatically extract and search financial statement notes through natural language queries.
    85
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to access Korean corporate disclosure data from DART, allowing natural language queries about companies, financial statements, and disclosures.
    27
    2
    MIT