MyFSS
Server Details
Full-text search over FSS/FSC accounting supervision documents for Korean accounting professionals
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
5 toolsget_document문서 전문ARead-onlyIdempotentInspect
MyFSS MCP의 get_document 도구는 문서 전문을 반환합니다 — 첨부 HWP를 마크다운으로 변환한 본문.
[Purpose]
To read and quote a found document — summary·snippet are never quoting grounds.
[Usage]
"그 자료 본문 보여줘" → ntt_id=12345
"길어서 잘렸는데 이어서" → ntt_id=12345, offset_chars=60000
"앞부분만 짧게" → ntt_id=12345, max_chars=8000
[Response]
{ ntt_id, date, board, source, title, nature, topics, depts, summary, url, attachments:[{file_name, ext, parsed}], body_total_chars, offset_chars, truncated, body }
truncated=true means offset_chars+max_chars < body_total_chars — raise offset_chars to continue.
Unknown id returns { error: "ntt_id {n} 없음" }.
body = "(본문 없음)" when nothing was parsed and no HTML 본문 exists.
[Rules]
body = parsed attachments (parsed=true) joined under "## 첨부: {file_name}" heads; with no attachment body it falls back to the detail-page HTML body (mostly FSC).
attachments with parsed=false are NOT in body — disclose the gap, never hide it.
Continue with offset_chars; raising max_chars grows the whole response.
| Name | Required | Description | Default |
|---|---|---|---|
| ntt_id | Yes | search_documents/list_recent가 반환한 ntt_id | |
| max_chars | No | 본문 최대 길이(자) | |
| offset_chars | No | 본문 시작 오프셋 (긴 문서 이어읽기) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and idempotent, and the description adds substantial behavior: truncated semantics, offset continuation, fallback from parsed HWP attachments to HTML body, exclusion of parsed=false attachments, unknown-id error format, and '(본문 없음)' placeholder. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into Purpose, Usage, Response, and Rules, with the most important scoping statement first. Every section earns its place; the labeled format and short example mappings make it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry return-value information; it enumerates the response fields, explains truncated and error cases, and documents body fallback behavior. Given the tool's moderate complexity, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description enriches parameter meaning: offset_chars=60000 for continuing, max_chars=8000 for a short excerpt, and the rule that raising max_chars grows the whole response while offset_chars moves the window. This is actionable guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: returns the full document body, with HWP attachments converted to markdown. The Purpose line explicitly frames it as the quoting/reading follow-up to a found document, distinguishing it from search_documents/list_recent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains clear context and usage examples ('그 자료 본문 보여줘' -> ntt_id), and says summary/snippet are never quoting grounds, implying get_document is for exact reading. It does not explicitly name alternative tools or state when not to use it, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_stats사용량 통계ARead-onlyIdempotentInspect
MyFSS MCP의 get_usage_stats 도구는 이 MCP 서버의 도구 사용량 통계를 반환합니다.
[Purpose]
Per-tool usage·latency (avg/percentiles)·error rate·daily trend.
[Usage]
"최근 30일 사용량" → (인자 없음)
"지난 7일만" → days=7
"전체 기간" → 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.
useris a truncated SHA-256 of the 접속 토큰 — not a person. stdio calls (no hash) never appear.Timings = server-side handler time (no network).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | 최근 N일 윈도 (0이면 전체 기간, 기본 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description adds substantial behavioral context beyond that: tiering by requester (admin/local stdio vs. public), what fields exist only at operator tier, that absence of users/top_targets does not mean zero, that user is a truncated SHA-256 token hash rather than a person, and that timings are server-side only. This is rich transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into Purpose, Usage, Response, and Rules sections, with all information necessary for a no-output-schema tool. Every section earns its place; the response shape and tier rules are critical since no output schema exists. It is detailed without being redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter statistical tool with no output schema, the description covers everything an agent needs: what data is returned, how the response varies by visibility tier, the meaning of days values, and edge-case semantics such as stdio calls never appearing. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents days (default 30, 0 means full period), so coverage is 100%. The description adds value by giving concrete natural-language triggers and clarifying the meaning of days=0 versus the default. This is helpful, though the schema already carries the core semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'MyFSS MCP의 get_usage_stats 도구는 이 MCP 서버의 도구 사용량 통계를 반환합니다' and lists the exact metrics (per-tool usage, latency percentiles, error rate, daily trend). This clearly differentiates it from the document-focused siblings (get_document, list_recent, list_tags, search_documents).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a dedicated Usage section with natural-language mappings to the days parameter: recent 30 days → no argument, last 7 days → days=7, full period → days=0. It gives clear context for when to call with each value, though it does not explicitly discuss when to choose this tool over sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent최신 문서 목록ARead-onlyIdempotentInspect
MyFSS MCP의 list_recent 도구는 최신 문서 목록을 게시일 내림차순으로 반환합니다.
[Purpose]
Query-less skim of "what came out lately", optionally narrowed by 게시판.
[Usage]
"최근 자료 뭐 있어" → (인자 없음 — limit=20)
"감리 지적사례 최신 10건" → board="sanction_case", limit=10
"금융위 보도자료 최신" → board="fsc_press"
[Response]
{ results:[{ntt_id, date, board, source, title, nature, topics, depts, summary, url}] }
No total/offset — this tool has no pagination, and no snippet (there is no query).
[Rules]
board takes the English key while the response returns the 한글 라벨 — same asymmetry as search_documents; never feed the response board back as a parameter.
Sorted by 게시일(date) — retroactively registered old documents never surface as new.
For period/topic narrowing or larger volumes use search_documents.
| Name | Required | Description | Default |
|---|---|---|---|
| board | No | 게시판 필터 | |
| limit | No | 최대 결과 수 (기본 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds meaningful behavioral context beyond them: no pagination, no total/offset, no snippet, ordering by publish date, and the subtle point that retroactively registered old documents never surface as new. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally well structured with [Purpose], [Usage], [Response], and [Rules] sections. Every section earns its place and important caveats are front-loaded before deeper behaviors.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description supplies the response shape, the absence of pagination and snippet, sort behavior, and routing to search_documents for larger/narrower queries. This is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds crucial semantics not present in the schema: board uses English keys while responses return Korean labels, and includes a warning not to feed the response board back as a parameter. The usage examples also clarify valid value mappings and the limit default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns the recent document list sorted by publish date descending. The [Purpose] section explicitly frames it as a query-less skim, and contrasts it with search_documents, making differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete natural-language usage examples that map directly to parameter values, and explicitly says to use search_documents for period/topic narrowing or larger volumes. This gives the agent both when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tags검색 어휘 사전ARead-onlyIdempotentInspect
MyFSS MCP의 list_tags 도구는 검색 필터에 넣을 수 있는 어휘를 반환합니다 — 주제 태그·문서 성격·게시판·주요 담당부서.
[Purpose]
Which values actually exist for search_documents' topics·nature·board·dept. Invented values return 0 rows, not an error — check here before a futile search.
[Usage]
"어떤 주제로 검색할 수 있어?" → (인자 없음)
[Response]
{ topics:[{name, n}], natures:[{name, n}], boards:[{key, label, n}], depts_top25:[{name, n}] }
n = 그 값이 붙은 문서 수.
boards[].key is what the board parameter takes; boards[].label is what responses show.
[Rules]
topics is exact-match — no partial/synonym matching; pass a name from here verbatim.
dept is the opposite, partial match — a fragment like "회계감리" works.
depts_top25 is only the top 25 — a 부서 missing from the list still exists.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint), so the description carries a lighter burden and far exceeds it. It adds genuinely non-obvious behaviors: exact-match vs partial-match semantics for different fields, '0 rows, not an error' for invented values, boards[].key vs label distinction, and the top-25 truncation of depts_top25.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into [Purpose], [Usage], [Response], and [Rules] sections, with the core purpose front-loaded in the first sentence. Every sentence earns its place — matching rules, response shape, and caveats are each stated once with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-arg, read-only tool with no output schema, the description carries full responsibility for return-value documentation and handles it completely: full response shape, meaning of n, key/label distinction, matching behavior, and edge cases (missing dept, empty results). No information an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4, and the description exceeds it substantially. The [Response] and [Rules] sections document the semantic meaning of every returned value field — the exact n count, the key/label contract for the board parameter, the partial-match rule for dept, and the open-world caveat that absent depts still exist. This effectively documents the vocabulary contract that search_documents' parameters depend on.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line names a specific verb (반환합니다/returns) and a specific resource (search-filter vocabulary: 주제 태그·문서 성격·게시판·주요 담당부서). The [Purpose] section cements differentiation by tying the tool to search_documents' exact fields (topics·nature·board·dept), making it clearly distinguishable from siblings like get_document and list_recent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'check here before a futile search' because invented values return 0 rows rather than an error. It also names the consuming sibling (search_documents). It stops short of a 5 because it never states when not to use the tool (no explicit exclusions of alternatives).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documents회계·공시 자료 전문검색ARead-onlyIdempotentInspect
MyFSS MCP의 search_documents 도구는 금융감독원(FSS)·금융위원회(FSC) 회계·공시 자료를 전문검색합니다.
[Purpose]
What 감독당국 checks — 심사·감리 지적사례·감독지침·모범사례 등 게시판 11종.
Filters alone (no query) sweep a topic.
[Usage]
"전환사채 콜옵션 관련 감독원 자료" → query="전환사채 콜옵션"
"작년 감리 지적사례 전부" → board="sanction_case", date_from="2025-01-01", date_to="2025-12-31"
"내부회계관리제도 주제로 20건" → topics=["내부회계관리제도"], limit=20
[Response]
{ total, showing, offset, note, results:[{ntt_id, date, board, source, title, nature, topics, depts, summary, url, snippet?}] }
total = 전체 건수, showing = 이번 페이지 — paginate with offset.
source: "fss"=금융감독원, "fsc"=금융위원회.
snippet marks matches with [ … ]; only when a query matched.
[Rules]
board is asymmetric: param = English key, response = 한글 라벨 — never feed it back.
topics·depts are joined strings (", " / " / "), not arrays — split first.
≥3-char tokens → FTS (AND, rank); 1~2-char → LIKE. No query → 게시일 DESC, no snippet.
Corpus = 2010 onward (absent = 미수록); quote body via get_document, not summary·snippet.
| Name | Required | Description | Default |
|---|---|---|---|
| dept | No | 담당부서명 부분일치 (예: '회계감리') | |
| board | No | 게시판 필터 | |
| limit | No | 최대 결과 수 (기본 15) | |
| query | No | 검색 키워드 (공백 구분, 예: '전환사채 콜옵션') | |
| nature | No | 문서 성격 필터 | |
| offset | No | 페이지네이션 오프셋 | |
| source | No | 발행기관 필터 (fss=금융감독원, fsc=금융위원회) | |
| topics | No | 주제 태그 필터 (하나라도 일치, list_tags의 topics 값) | |
| date_to | No | YYYY-MM-DD 이전 | |
| date_from | No | YYYY-MM-DD 이후 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations: it discloses the board key/label asymmetry, that topics/depts are joined strings requiring split, the FTS-vs-LIKE token length rule, no-query descending date ordering, corpus coverage from 2010, and snippet-only-on-match behavior. This is rich, non-obvious behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-organized into Purpose, Usage, Response, and Rules sections. Every line carries necessary information for a 10-parameter search tool, and front-loading the purpose makes it scannable despite the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents the response shape, pagination via total/offset, source labels, snippet conditions, and the get_document fallback for body content. It also addresses search semantics, board asymmetry, and corpus boundaries, leaving no significant calling gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantial meaning: query-to-parameter examples, the board English-key/한글-label mismatch, filter-only sweeping, and the no-query behavior. It clarifies how to combine parameters effectively, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs full-text search over FSS/FSC accounting and disclosure materials, and it enumerates the board categories and example queries. However, it never explicitly distinguishes itself from sibling tools like list_recent or list_tags; the differentiation is only implied by the term '전문검색' and a later rule mentioning get_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The [Usage] section provides three concrete natural-language-to-parameter mappings and a rule directing users to get_document for quote bodies. It lacks explicit when-not-to-use guidance for the sibling list tools, though the examples give clear context for typical search scenarios.
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.
5 tool updates
- First observed
get_document - First observed
get_usage_stats - First observed
list_recent - First observed
list_tags - First observed
search_documents
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Full-text search over K-IFRS/K-GAAP standards and KASB accounting Q&A for Korean accountants
61Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals
Search company disclosures and financial statements from the Korean market. Retrieve stock profile…
Citation-guarded retrieval over 22M Taiwan court judgments and administrative interpretations
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables full-text search and retrieval of Korean FSS/FSC accounting supervision and disclosure documents, including attachment bodies, summaries, and metadata, via a remote MCP server.MIT
- AlicenseNot gradedqualityCmaintenanceEnables full-text search and retrieval of Korean accounting standards (K-IFRS, K-GAAP, auditing, ICFR, KSSB) and authoritative Q&A, returning verbatim paragraphs with context and related regulatory guidance.MIT
- AlicenseAqualityCmaintenanceEnables precise search of financial statement footnotes from Korean DART electronic disclosure, filtering by market, industry, and topic with high precision through rule-based topic matching.7MIT
- FlicenseNot gradedqualityBmaintenanceEnables searching and retrieving Korean accounting standards (K-IFRS, general corporate accounting standards, and other standards) and Q&A summaries from the KASB database. Provides four tools for keyword search and real-time retrieval of standard texts and Q&A details.-
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool has a distinct role: search_documents handles query-based search with pagination, list_recent is the no-query recent feed, list_tags supplies filter vocabulary, get_document retrieves full text, and get_usage_stats is server telemetry. The only mild overlap is between list_recent and a query-less search_documents, but the descriptions explicitly separate quick skim from fuller search.
All tool names follow a consistent verb_noun snake_case pattern: get_document, get_usage_stats, list_recent, list_tags, search_documents. The naming is predictable and makes the purpose of each tool immediately clear.
Five tools is well-scoped for a read-only regulatory document search and retrieval server. The set covers discovery, search, vocabulary validation, full-text access, and usage monitoring without redundant or excessive tools.
The core workflow is fully covered: discover documents via search or recent listing, validate filter values via list_tags, and retrieve full text with pagination via get_document. Since this is a read-only corpus, the absence of create/update/delete tools is appropriate rather than a gap.