Skip to main content
Glama

DAPA MCP

DAPA MCP — это сервер Model Context Protocol только для чтения, поддерживающий задачи в сфере оборонных закупок Республики Корея. Вместо памяти LLM он обращается к открытому API совместного использования национальной правовой информации Министерства законодательства и к DAPA_info с указанием источников. Ключевой принцип: Search → Retrieve → Verify → Compare → Cite → Explain.

v0.1.0 реализует Core и первый этап MCP-паритета по правовой информации. Предоставляет локальный stdio и 17 инструментов, официальный каталог законов и административных правил DAPA, структурированные детали законов, поиск истории изменений и поиск на дату. Streamable HTTP, патенты, статьи, новости, открытые данные и сравнение старой и новой редакций ещё не реализованы и перечислены в ROADMAP.md.

Почему MCP

  • Официальный Source ставится в приоритет, чтобы не путать действующие законы с прежними или отменёнными положениями.

  • Процитированные названия законов, статьи и номера дел проверяются повторным запросом.

  • Различаются NOT_FOUND (обычный нулевой результат) и SOURCE_UNAVAILABLE (timeout, 429, 5xx, повреждённый ответ).

  • К знаниям об организации и рабочих процессах также добавляются источник, дата проверки и статус верификации.

Related MCP server: Korean Law MCP Server

Архитектура

Claude / Gemini / Codex / MCP Client
                  │ stdio
                  ▼
         DAPA MCP Tool Registry
           ├── LawProvider ── 국가법령정보 Open API
           ├── DapaCatalogProvider ── DAPA 공식 목록 스냅샷
           └── DapaInfoProvider ── DAPA_info

Подробное проектирование и записи бенчмарков см. в docs/ARCHITECTURE.md.

Установка и запуск

Требование: Node.js 20.19 или выше.

npm install
cp .env.example .env
npm run build
npm test
npm run start

npm run start — это stdio JSON-RPC сервер, поэтому ожидание в терминале — нормальное поведение. Обычные логи не выводятся в stdout.

Чтобы обновить официальный список законов и административных правил DAPA, выполните следующую команду.

npm run sync:dapa-catalog

Чтобы сопоставить каждый элемент каталога с текущими результатами поиска в Open API национальной правовой информации и создать список несоответствий, выполните следующую команду. В скрипт для разработки явно передаётся общедоступное значение аутентификации по умолчанию.

LAW_API_OC=dusgh4847 npm run audit:dapa-catalog

В PowerShell используйте следующее:

$env:LAW_API_OC = "dusgh4847"
npm run audit:dapa-catalog
Remove-Item Env:LAW_API_OC

Результат сохраняется в DAPA_info/legal/coverage-report.json. missing означает, что название из официального списка DAPA не нашлось в API национальной правовой информации в том же виде; это не утверждает юридического отсутствия. Элементы с историей отмены/принятия, различиями в написании названий и элементы, оригинал которых доступен только в виде файла, требуют отдельной проверки. title_variant — это случай, когда отображаемое название DAPA и каноническое название API различаются, но соответствие документа подтверждено. metadata_mismatch — это случай, когда название совпадает, но номер и дата издания административного правила различаются; external_only — это закон, по которому DAPA предоставляет только внешнюю ссылку на оригинал за пределами национальной правовой информации.

Этот отчёт зависит от снимка каталога. После повторной синхронизации каталога необходимо также заново запустить аудит; количество missing означает кандидатов, ещё не связанных с документами API, а не юридическое отсутствие. Поэтому не считается, что весь каталог полностью покрыт текстами национальной правовой информации.

Чтобы обновить меню 업무·정책 и содержимое под-вкладок каждой страницы в DAPA_info/policy/catalog.json, выполните следующую команду. Собираются только внутренние страницы Управления оборонных закупок, дубликаты удаляются на основе menuSeq и конечного идентификатора страницы. При одновременном двойном запуске обнаруживается файл блокировки, и вторая синхронизация завершается.

npm run sync:dapa-policy

Чтобы последовательно вызвать официальные 14 категорий и 40 детальных API на текущем продакшен-сервере и проверить связь список/текст и ошибки, выполните следующую команду. Настраиваемый пример кода по умолчанию использует коды L/A/O из официального руководства и может быть заменён через переменные окружения.

LAW_API_OC=dusgh4847 npm run backtest:law-api

Переменные окружения

Имя

Обязателен

По умолчанию

Описание

LAW_API_OC

нет

dusgh4847

Открытое базовое значение аутентификации для совместного использования национальной правовой информации; можно переопределить отдельным значением.

LAW_API_TIMEOUT_MS

нет

10000

Таймаут запроса.

LAW_API_RETRY_LIMIT

нет

2

Верхний предел повторных попыток при 429/5xx.

LAW_API_CACHE_TTL_MS

нет

300000

TTL кэша поиска API (мс); при 0 кэш отключён.

LAW_API_MAX_TEXT_RESPONSE_BYTES

нет

8388608

Максимальный размер ответа JSON/HTML API в байтах.

LAW_API_MAX_RESOURCE_RESPONSE_BYTES

нет

26214400

Максимальный размер файлов приложений и форм.

LAW_API_MAX_TOOL_RESPONSE_CHARS

нет

250000

Максимальное количество символов JSON-вывода MCP-инструмента API законов.

DAPA_INFO_PATH

нет

./DAPA_info

Корень открытых знаний.

Значение аутентификации по умолчанию dusgh4847 публикуется в коде и документации, чтобы любой мог использовать его сразу. Чтобы использовать отдельное значение, переопределите его через LAW_API_OC. Файл .env исключён из Git.

Настройка API национальной правовой информации

Правовой API можно использовать со значением по умолчанию без отдельной процедуры аутентификации. Если у вас есть собственное значение аутентификации, MCP-клиент передаёт его через переменную окружения LAW_API_OC при запуске сервера; в source_health проверяется law: healthy.

Инструменты MCP

Инструмент

Назначение

search_legal

Поиск законов, административных правил, судебных решений, решений Конституционного суда, разъяснений законодательства и административных пересмотров.

search_legal_content

Сначала запрашивает список кандидатов из API национальной правовой информации, затем вместе с ним запрашивает подробный текст и статьи каждого документа.

get_legal_detail

Детальный просмотр по documentId из результатов поиска.

get_legal_history

Просмотр истории принятия, изменения и отмены законов.

list_legal_apis

Просмотр каталога из 14 категорий и 40 списков/текстов API национальной правовой информации, связанных с DAPA.

query_legal_api

Запрос официального списка/текста по требованию по apiId из каталога.

get_legal_api_body

Автоматическое подключение текстового API по apiId из списка и идентификатору результата; извлечение текста приложений/форм.

verify_citations

Проверка статей законов и номеров дел.

search_dapa_info

Поиск открытых знаний об организации, терминах и задачах.

get_dapa_organization

Детальный просмотр названия организации/псевдонима.

search_dapa_policy

Поиск по меню 업무·정책 и тексту под-вкладок.

get_dapa_policy_page

Получение полного текста раздела «Работа/политика» по ID результата поиска.

search_dapa_legal_catalog

Поиск в официальном списке законов и административных правил DAPA.

get_dapa_legal_catalog_item

Детальный просмотр элемента официального списка DAPA.

get_dapa_legal_content

Получение элемента DAPA с привязкой к тексту национальной правовой информации.

dapa_catalog_status

Состояние синхронизации официального списка DAPA.

source_health

Проверка настройки и состояния Provider.

committee_decision задаёт только контракт ввода; реальный Provider пока не настроен. asOfDate обрабатывается поиском на дату eflaw Министерства законодательства; если материала на эту дату нет, возвращается NOT_FOUND. Значение по умолчанию currentOnlytrue; явный статус истории/отмены также исключается для административных правил. Если нужны более ранние данные, используйте currentOnly: false; если нужен повторный запрос к актуальному API, используйте forceRefresh: true. Базовый TTL кэша для успешных результатов поиска — 5 минут.

Область API национальной правовой информации

list_legal_apis возвращает только метаданные API следующих 14 категорий. Фактический текст ответа запрашивает query_legal_api из Министерства законодательства в момент вызова, а get_legal_api_body получает идентификатор или ссылку на вложение из результата списка и запрашивает текст, поэтому полные правовые данные не загружаются в контекст MCP или DAPA_info. Для каждого API в list_legal_apis возвращается исполняемый bodyTool и, если существует отдельный текстовый API, bodyApiId.

Категория

Обработка списка/текста

Предварительное консультационное заключение

Список/текст BAI baiPvcs.

Первичное разъяснение центральных ведомств

Список/текст DAPA dapaCgmExpc.

База знаний правовой информации

9 видов: термины, статьи, связанные законы, интеллектуальный поиск.

Настраиваемый

6 видов: списки и статьи законов, административных правил и местных нормативных актов; требуется vcode.

Юридические термины

Список/текст lstrm.

Приложения и формы

Списки законов, административных правил, местных актов и извлечение полных текстов HWP/HWPX/PDF/XLSX/DOCX.

Договоры

Список/текст trty.

Решения Конституционного суда

Список/текст detc.

Разъяснения законодательства

Список/текст expc.

Решения по административным пересмотрам

Список/текст decc.

Законы

Список/текст law.

Административные правила

Список/текст admrul.

Местные нормативные акты

Список/текст ordin.

Судебные прецеденты

Список/текст prec.

Для приложений и форм в официальном руководстве нет отдельного текстового API, поэтому передайте 별표서식파일링크 или 별표서식PDF파일링크 из ответа списка в attachmentUrl инструмента get_legal_api_body. Сервер скачивает только официальные ссылки Министерства законодательства и преобразует файлы в текст Markdown. Настраиваемый список интерпретируется через связанный общий текстовый API законов, а настраиваемый API статей — через собственный ответ.

Каталог DAPA сохраняет метаданные области, классификации и даты издания с официального сайта; фактические статьи и юридические тексты запрашиваются через общий API национальной правовой информации в search_legal и get_legal_detail.

Подключение MCP Client

Во всех примерах замените /absolute/path/to/DAPA MCP на фактический абсолютный путь и сначала выполните сборку.

Codex CLI

Текущая команда регистрации локального stdio в Codex CLI имеет следующий вид.

codex mcp add dapa-mcp -- node "/absolute/path/to/DAPA MCP/dist/index.js"
codex mcp list

Claude Code

Используйте формат stdio из официальной документации Claude Code по MCP.

claude mcp add --transport stdio dapa-mcp -- \
  node "/absolute/path/to/DAPA MCP/dist/index.js"
claude mcp list

Claude Desktop в настоящее время рекомендует развертывать локальный сервер как Desktop Extension. v0.1.0 не предоставляет пакет .mcpb, поэтому во время разработки используйте подключение Claude Code через stdio.

Gemini CLI

Следуя официальной документации Gemini CLI по MCP, добавьте его в mcpServers в ~/.gemini/settings.json.

{
  "mcpServers": {
    "dapa-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/DAPA MCP/dist/index.js"],
      "timeout": 30000,
      "trust": false
    }
  }
}

ChatGPT и OpenAI API

MCP-инструменты кастомного коннектора ChatGPT и OpenAI Responses API используют удалённый server_url MCP. v0.1.0 поддерживает только локальный stdio, поэтому не заявляется поддержка прямого подключения. После Phase 2, когда будут добавлены Streamable HTTP и аутентификация, подключайтесь в соответствии с официальной документацией OpenAI по Remote MCP.

Как добавить DAPA_info

Структурированные элементы записываются как JSON с массивом items. Обязательные поля: id, name, category, description, source, sourceUrl, lastVerifiedAt, verified. Непроверенная информация сохраняется с verified: false и не подаётся как официальный факт. Описательные материалы остаются в Markdown, но указывается, что они не заменяют правовые основания.

{
  "items": [
    {
      "id": "term-example",
      "name": "예시 용어",
      "aliases": [],
      "category": "terminology",
      "description": "쉬운 설명",
      "source": "공식 문서명",
      "sourceUrl": "https://example.go.kr/source",
      "lastVerifiedAt": "2026-08-27",
      "verified": false
    }
  ]
}

Разработка и проверка

npm run lint
npm run typecheck
npm test
npm run build

Тесты включают нормализацию, поиск по локальным знаниям, wire-fake официального API, ответы 429/5xx/повреждённые, проверку цитирования и список/вызовы реального stdio MCP.

Безопасность и юридические предостережения

  • Сохраняйте только информацию, доступную для публикации. Запрещаются персональные данные, закрытые сведения о проектах, военная тайна и адреса внутренних сетей.

  • Результаты MCP не заменяют юридические заключения или принятие политических решений.

  • verified: true означает, что соответствующие данные были получены из официального Source, а не гарантию юридической оценки.

  • Новости, даже если они будут добавлены в будущем, не используются в качестве правового основания.

Источники данных и License

Исходный код распространяется под лицензией MIT. Права на предоставленные данные и условия их использования определяются политикой каждой организации-провайдера. Подробное уведомление находится в NOTICE.

Available Tools

17 tools
dapa_catalog_statusB
Read-onlyIdempotent

DAPA 공식 법령·행정규칙 카탈로그의 동기화 상태를 반환합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is well covered. The description adds that the returned value is about catalog synchronization, but it does not describe response freshness, format, possible failure modes, or any operational behavior beyond the annotated read-only nature.

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 a single concise sentence that states the resource and the returned information without filler or redundant phrasing. It is appropriately minimal for a zero-parameter status tool.

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

Completeness3/5

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

For a parameterless, read-only status tool, the description is mostly adequate, and the annotations cover side-effect safety. However, there is no output schema, and the description does not explain what 'synchronization status' means or what possible values an agent should expect, leaving some ambiguity about how to interpret the response.

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 input schema has no properties, so there are no parameters to document. With 0 parameters, the baseline of 4 applies, and the description justifiably contains no parameter-level detail.

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

Purpose4/5

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

The description clearly states a specific action and resource: it returns the synchronization status of the DAPA official laws and administrative rules catalog. However, it does not explicitly differentiate itself from siblings such as source_health, which may also relate to status-like queries.

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

Usage Guidelines2/5

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

The description gives no guidance about when to use this tool versus alternatives, and no exclusions or preferred conditions. The only implied usage is 'when you need the catalog sync status,' but the description does not discuss sibling tools or decision criteria.

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

get_dapa_organizationA
Read-onlyIdempotent

방위사업청 조직명 또는 별칭으로 조직 상세를 조회합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes조직명 또는 별칭

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the method of lookup (by name or alias) but does not go beyond that; no contradictions exist.

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 a single, tightly written Korean sentence that conveys the resource, the lookup key, and the operation. Every word earns its place; there is no redundancy or filler.

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?

For a simple, read-only lookup tool with one well-documented parameter and rich safety annotations, the description is complete enough for an agent to select and invoke it correctly. No output schema exists, but the phrase '조직 상세' sufficiently indicates the return is organization detail information.

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%: the single required parameter 'query' is already documented as '조직명 또는 별칭' (organization name or alias). The description essentially restates this same meaning without adding format, examples, or disambiguation guidance, so it adds no new semantic value beyond the schema.

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

Purpose4/5

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

The description uses a specific verb ('조회합니다' - retrieves) with a clear resource ('방위사업청 조직 상세' - DAPA organization details) and a clear lookup method (by organization name or alias). It is unambiguous and distinct from the legal/policy-focused sibling tools, though it does not explicitly contrast itself with any sibling.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, no exclusions, and no context about when this lookup is appropriate. The sibling names imply it is organization-related rather than legal/policy-related, but that inference is left entirely to the agent.

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

get_dapa_policy_pageA
Read-onlyIdempotent

search_dapa_policy에서 받은 ID로 업무·정책 페이지 전체 본문을 조회합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds that the tool returns the entire page body, which is useful, but it doesn't disclose return format, error behavior, or any additional constraints. This is adequate but not rich.

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?

A single, front-loaded sentence with no filler. It efficiently communicates the action, resource, and parameter source in one compact statement.

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?

The tool is simple: one parameter, no output schema, and rich safety annotations. The description covers what the tool returns (full body text) and the prerequisite ID source. It is complete enough for the low complexity, though a bit more detail about response format would be ideal.

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?

With 0% schema description coverage, the description compensates by explaining that the single 'id' parameter is the ID received from search_dapa_policy. This gives the parameter semantic meaning beyond the raw schema, though it does not specify the ID format or how to extract it from search results.

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 the full body text') and the resource ('work/policy page'), and specifies that the ID comes from search_dapa_policy. This distinguishes it from sibling tools like get_dapa_legal_content and search_dapa_policy itself.

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 description provides a clear usage context: call this after search_dapa_policy to fetch the full page body for a returned ID. It does not explicitly list exclusions or alternatives, but the ID-source constraint makes the intended workflow obvious.

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

search_dapa_infoB
Read-onlyIdempotent

공개 출처 기반 DAPA_info에서 조직·용어·업무 지식을 검색합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
categoriesNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the search is based on public sources, which is useful context, but it does not disclose other behavioral details such as result ordering, filtering behavior, pagination, or any limitations. It is consistent with the annotations, so no contradiction exists.

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 a single succinct Korean sentence with no filler or redundancy. It front-loads the key information—public-source basis, resource name, and subject scope—and every phrase earns its place. This is an appropriately sized description for a straightforward search tool.

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

Completeness2/5

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

With three parameters, no output schema, and a large set of sibling tools, the description is too minimal to be contextually complete. It does not explain return values, how queries should be structured, what categories control, or how this tool relates to similar search tools. The read-only annotations cover safety but not operational completeness.

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

Parameters1/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining parameters like query, limit, and categories. It completely fails to do so, mentioning only the broad knowledge types that loosely correspond to category values without explaining their meaning, format, or defaults. The description adds no value beyond the schema's structural definitions.

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

Purpose4/5

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

The description states a specific verb (검색합니다, 'searches'), a clear resource (DAPA_info), and a scoped set of subjects (조직·용어·업무 지식, 'organization, terminology, and work knowledge'). This makes the tool's function clear at a glance, but it does not explicitly differentiate it from sibling tools such as search_legal or search_dapa_policy, relying on the resource and subject scope to imply the distinction.

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 when to use the tool: when searching DAPA_info for organizational, terminology, or work knowledge. However, it provides no explicit guidance about when not to use it, nor does it mention alternatives among the many sibling search tools. The usage context is present but not fully developed.

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

search_dapa_policyB
Read-onlyIdempotent

방위사업청 업무·정책 메뉴와 하위 탭에서 동기화한 공개 본문을 검색합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
sectionNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds useful context that the content is public and synchronized from specific menus, but it does not disclose pagination, ranking, or synchronization freshness.

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 a single tight sentence with no filler. It front-loads the action and object, making it easy to scan.

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

Completeness3/5

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

For a simple read-only search with one required parameter, this is minimally viable: an agent can invoke it with just a query. However, the optional section parameter is unexplained, there is no output schema, and the definition does not differentiate it among 15 sibling tools.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain query syntax, the meaning of limit, or valid section values. The mention of 'menu and sub-tabs' hints at the section parameter's conceptual scope, but it does not actually map to the parameter.

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

Purpose4/5

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

States a specific verb and resource: it searches public body text synchronized from the DAPA work/policy menu and its sub-tabs. This makes the tool's scope reasonably distinct from legal-search and general-info siblings, though it does not name an alternative.

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

Usage Guidelines2/5

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

The description gives no explicit when-to-use or when-not-to-use guidance. An agent must infer the appropriate context from the name and the phrase 'searches', leaving ambiguity against close siblings like search_dapa_info and search_legal_content.

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

source_healthA
Read-onlyIdempotent

각 데이터 Provider의 설정 및 가용 상태를 반환합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the return content (configuration and availability), but it does not disclose behavior such as freshness, failure modes, or how availability is determined.

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 a single concise sentence that front-loads the action ('returns') and the resource ('configuration and availability status of each data provider'). There is 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 no-parameter read-only status tool, the description is mostly complete and the annotations cover safety. However, there is no output schema and the description only vaguely names 'configuration and availability status' without specifying the exact response shape or fields.

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 tool has zero parameters, so the description is not expected to explain parameter semantics. The schema and description are consistent, with 100% coverage of an empty parameter set.

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

Purpose4/5

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

The description clearly states the tool returns the configuration and availability status of each data provider, giving a specific verb and resource. It is distinct from the legal-focused sibling tools, though it does not explicitly contrast itself with them.

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

Usage Guidelines2/5

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

The description implies a health/status-check use case but provides no explicit guidance on when to use this tool versus alternatives or any exclusions. An agent would need to infer applicability from the tool name and general context.

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

verify_citationsA
Read-onlyIdempotent

법령 조문 또는 사건번호가 공식 출처에 실제 존재하는지 검증합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
citationsYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds useful context about checking against official sources rather than local data, but it does not disclose what the tool returns or how it behaves when a citation does not exist.

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 a single, focused sentence with no filler. It front-loads the key resource ('statutory provisions or case numbers') and the action ('verify existence'), earning its place entirely.

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

Completeness3/5

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

The tool has one simple parameter and strong annotations, which help. However, there is no output schema and the description does not state the return format or per-citation behavior, leaving an important gap for an agent that needs to interpret the verification result.

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 0%, and the description adds some meaning by clarifying that the 'citations' strings are statutory provisions or case numbers. However, it does not provide format examples or further detail about accepted citation syntax, so the parameter semantics are only partially compensated.

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 states a specific action ('verifies'), a clear resource ('statutory provisions or case numbers'), and the scope ('actual existence in official sources'). This clearly distinguishes it from the many search/get sibling tools by focusing on existence verification rather than retrieval.

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

Usage Guidelines2/5

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

The description implies the tool should be used when one needs to confirm whether legal citations actually exist, but it provides no explicit guidance about when to use this tool versus alternatives such as search_legal, search_legal_content, or get_legal_detail. No exclusions or conditions are mentioned.

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. 17 tool updatesv0.1.0
    • First observeddapa_catalog_status
    • First observedget_dapa_legal_catalog_item
    • First observedget_dapa_legal_content
    • First observedget_dapa_organization
    • First observedget_dapa_policy_page
    • First observedget_legal_api_body
    • First observedget_legal_detail
    • First observedget_legal_history
    • First observedlist_legal_apis
    • First observedquery_legal_api
    • First observedsearch_dapa_info
    • First observedsearch_dapa_legal_catalog
    • First observedsearch_dapa_policy
    • First observedsearch_legal
    • First observedsearch_legal_content
    • First observedsource_health
    • First observedverify_citations

TDQS

B3.4/5.0
Disambiguation3/5

The set is separated by source and action, but get_legal_detail, get_legal_api_body, get_dapa_legal_content, and search_legal_content all concern retrieving legal document text or detail, creating real selection risk. The five search_* tools are more distinct because their source targets are clearer.

Naming Consistency4/5

Most tools follow a predictable verb_noun snake_case pattern such as search_*, get_*, and list_*. A few exceptions like source_health and dapa_catalog_status are noun-phrase status checks, and the placement of 'dapa' varies across names.

Tool Count4/5

With 17 tools, this is on the heavier side but each covers a distinct area: official legal APIs, DAPA catalog, policy pages, organization lookup, citation verification, and provider health. The count is slightly above a lean toolkit but not bloated.

Completeness4/5

The read-only domain is broadly covered with search, detail retrieval, legal history, citation verification, catalog status, policy pages, and organization lookup. Minor gaps remain for enumerated browsing such as listing all policy pages or the full organization tree, but agents can work around them.

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

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables searching and retrieving Korean legal information including laws, court precedents, legal interpretations, and local ordinances from the Korean National Law Information Center API with intelligent search ranking.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time search and analysis of Korean laws, legal precedents, and administrative rules through the National Law Information Center Open API, allowing AI agents to access official legal information for contract review, compliance, and legal research.
    73
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables exploration of Korean National Assembly data by connecting bills, committee reviews, and official records. Allows users to ask natural language questions and receive structured answers with citations to original documents.
    26
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI programs to search and retrieve approved public regulations with citations, supporting PDF, HWP, HWPX, and DOCX formats.
    43
    MIT

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/ai-studying-man/DAPA-MCP'

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