# MyKIFRS

> Full-text search over K-IFRS/K-GAAP standards and KASB accounting Q&A for Korean accountants

- name: kr.eocpa/mykifrs
- version: 0.13.0
- connection class: R1 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/kr.eocpa%2Fmykifrs
- tools: https://api.protogrid.dev/v1/servers/kr.eocpa%2Fmykifrs/tools

**An agent can connect on its own if it already holds `X_EOCPA_TOKEN`, `X_EOCPA_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "mykifrs": {
      "type": "http",
      "url": "https://mykifrs.eocpa.kr/mcp",
      "headers": {
        "x-eocpa-token": "${X_EOCPA_TOKEN}",
        "Authorization": "${X_EOCPA_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${X_EOCPA_TOKEN}`, `${X_EOCPA_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-99% +updated-4d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 5 of 5 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,648 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 1 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 1,648 tokens to load them all
- tool set hash: bf73f138397dfcf51e7b0698d9f933a3
- tools last changed: 2026-10-17T08:14:00.594Z
- badge: [![protogrid quality](https://protogrid.dev/badge/kr.eocpa/mykifrs.svg)](https://protogrid.dev/servers/kr.eocpa/mykifrs)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-17 `get_usage_stats` removed
  - MyKIFRS MCP의 get_usage_stats 도구는 이 MCP 서버의 도구 사용량 통계를 반환합니다. [Purpose] - Per-tool usage·latency (avg/percentiles)·error rate·daily trend. [Usage] 1. "최근 30일 사용량" → (인자 없음) 2. "지난 7일만" → days=7 3. "전체 기간" → days=0 [Response] - Both tiers: { visibility, period:{days, since, until}, overview:{total_calls, unique_users, errors, error_rate, p50_ms, p90_ms, p99_ms}, by_tool:[{tool, calls, errors, error_rate, avg_ms, p99_ms, users}], by_day:[{day, calls}] } - visibility="public" adds `note`; period.days = "all" when days=0. - visibility="operator" adds users:[{user, is_owner, calls, distinct_tools, first_seen, last_seen, tools:[{tool, calls, avg_ms}]}] and top_targets:[{target, tool, calls, users}]. [Rules] - Tier by requester: admin token·local stdio → "operator", else "public". - users·top_targets exist only at operator tier — absence ≠ 0. - `user` is a truncated SHA-256 of the 접속 토큰 — not a person. stdio calls (no hash) never appear. - Timings = server-side handler time (no network).

Full history: https://api.protogrid.dev/v1/servers/kr.eocpa%2Fmykifrs/changes

## Remotes

- https://mykifrs.eocpa.kr/mcp (streamable-http, auth api_key ${X_EOCPA_TOKEN}, reachable true, uptime30d 0.9916667)

## Packages

_none_

## Tools (5)

- `get_paragraph`: MyKIFRS MCP의 get_paragraph 도구는 기준서 문단 전문을 앞뒤 문맥과 함께 반환합니다.

[Purpose]
- To quote a found 문단 exactly — a search snippet is never quotable evidence.
- To check 조건절·예외 with neighbors.

[Usage]
1. "1116호 33문단 원문" → unique_key="1116-33"
2. "앞뒤로 더 넓게" → unique_key="1116-33", context=5

[Response]
- { standard:{std_num, title, category}, target, related_qnas:[doc_number], items:[…] }
- items[]: { seq, item_type, unique_key, para_num, level, title, ref, content_text };
  item_type "paragraph"=본문, "title"=제목.
- related_qnas → get_qna.
- Miss → { error: "문단 없음: {unique_key}", similar:[{unique_key, para_num}] } (≤5).

[Rules]
- unique_key = "{기준서번호}-{문단번호}"; 문단 numbers aren't digits-only (B58·6.1.1) —
  pass verbatim, never normalize.
- Keys can carry a "-N" suffix ("1109-B2.7" misses, "1109-B2.7-1" hits — 12% of 문단). On a miss
  retry a `similar` candidate; never read it as "the 문단 does not exist".
- context expands within one part — boundaries return fewer items; not an error.
- Quote content_text, never a snippet.
- `get_qna`: MyKIFRS MCP의 get_qna 도구는 질의회신 전문을 반환합니다.

[Purpose]
- The 회신 full text for a doc_number (search_qnas, get_paragraph's related_qnas) or a qna_key (search_qnas).

[Usage]
1. "2017-001 회신 전문" → doc_number="2017-001"
2. "legacy:6009 전문" → qna_key="legacy:6009"

[Response]
- { results:[{source, qna_key, doc_number, date, title, rel_stds, full_content, org}] }
- Miss → { error: "문서번호 없음: {doc_number}", similar:[{source, qna_key, doc_number, title}] } (≤5 부분일치)
  or { error: "qna_key 없음: {qna_key}" }.
- source / org / rel_stds: same meaning as in search_qnas.

[Rules]
- results is an array; doc_number is NOT unique ("GKQA03-100" → 2 rows). Never answer from the first
  row alone — pin one by qna_key.
- qna_key = "{source}:{id}" exactly as returned; if both arguments are given, qna_key wins.
- 번호 formats differ by series ("2021-G-KQA005" · "GKQA01-085" · "금감원사례-1") — pass the value as
  received, never alter case or separators.
- On a miss, re-ask using `similar` rather than guessing another 번호.
- `list_standards`: MyKIFRS MCP의 list_standards 도구는 수록된 기준서 카탈로그를 반환합니다.

[Purpose]
- Which 기준서 are in the corpus, and which numbers feed search_standards' std_num filter.

[Usage]
1. "수록된 기준서 전부" → (인자 없음)
2. "감사기준서만" → category="audit"
3. "내부회계관리제도 관련" → category="icfr"

[Response]
- { count, standards:[{std_num, title, category}] }
- category values: kifrs(한국채택국제회계기준) · interpretation(해석서) · concept(재무보고를 위한 개념체계)
  · kgaap(일반기업회계기준) · audit(감사기준서) · icfr(내부회계관리제도) · esg(KSSB 지속가능성 공시기준)
  · translation(번역본) · special(특수분야).

[Rules]
- Lists 수집 성공(crawl_status='ok') 기준서 only — an absent 기준서 means "미수집", not "존재하지 않음".
- category is a free-form string, not an enum: an unknown value returns count=0, not an error.
- `search_qnas`: MyKIFRS MCP의 search_qnas 도구는 회계기준원·금융감독원·신속처리질의·IFRS 해석위원회 질의회신 3,669건을 전문검색합니다.

[Purpose]
- Official 회신 for practice issues the 기준서 text alone cannot settle.
- For 회신 tied to a 문단, get_paragraph's related_qnas is more precise.

[Usage]
1. "전환사채 콜옵션 회계처리 질의회신" → query="전환사채 콜옵션"
2. "리스료 재측정 회신 30건" → query="리스료 재측정", limit=30

[Response]
- { hits, results:[{source, qna_key, doc_number, date, title, rel_stds, org, snippet}] }
- source = 수록 세대 ("v2" 현행 / "legacy" 구 QnA), NOT the 회신 기관.
- org = 회신 기관: 회계기준원 / 금융감독원 / 신속처리질의 / IFRS 해석위원회 논의결과 ("구 QnA" = unmapped
  legacy 유형).
- rel_stds is raw HTML: <span data-std="1109" data-id="6.1.1"> → unique_key "1109-6.1.1".

[Rules]
- Tokens ≥3 chars → FTS (AND, rank); 1~2 chars → LIKE.
- Never present `source` as the 회신 기관 — use `org`.
- Strip HTML in rel_stds; build 문단 키 from data-std/data-id.
- qna_key ("{source}:{id}") is get_qna's single-row handle — use it when doc_number is "" or duplicated.
  legacy 회신 are mostly 2000~2011 (구 기업회계기준) — check `date` before citing.
- `search_standards`: MyKIFRS MCP의 search_standards 도구는 K-IFRS·일반기업회계기준·감사기준서·내부회계관리제도·ESG(KSSB) 기준서 본문을 전문검색합니다.

[Purpose]
- Find the 기준서 문단 grounding a treatment ("사용권자산 손상 is which 문단?").
- For a hit's 원문·문맥, pass its unique_key to get_paragraph.

[Usage]
1. "사용권자산 손상 관련 기준" → query="사용권자산 손상"
2. "1116호 안에서만 리스료 재측정" → query="리스료 재측정", std_num=1116
3. "수익 인식 5단계 문단 30개까지" → query="수익 인식 단계", limit=30

[Response]
- { hits, results:[{std_num, std_title, category, unique_key, snippet}] }
- unique_key = "{std_num}-{문단번호}" (e.g. "1116-33", "1109-6.1.1", "2-2.7") — feed to get_paragraph.
- snippet marks matches with ⟦…⟧ and elides with "…".
- Empty query returns { error: "검색어가 비어 있음" }.

[Rules]
- Tokens of ≥3 chars go to FTS (AND-joined, rank-ordered); 1~2 char tokens become LIKE filters.
  Short-token-only queries work but are ordered by std_num, not relevance.
- Body 문단 only (item_type='paragraph') — 제목 rows are excluded, so a hit is always body text.
- snippet is a fragment, never the whole 문단 — do not quote it as 기준서 원문.
