Release Notes
v1.0.3 (2026-05-25)
Internal
.mcp/server.jsondeclares 3 environment variables for MCP Server Registry discovery:DATA_GO_KR_API_KEY(secret, optional — soft-fails to elicitation per ADR-001),PUBLICDATA_TIMEOUT_SECONDS(default30),PUBLICDATA_MAX_RESPONSE_LENGTH(default50000). Pure descriptor change — runtime behaviour and ADR-001 credential resolution chain (env → Elicit, max 2 re-elicits) are unaffected.- Pack-time
VerifyServerJsonVersionMSBuild target catches drift between csproj<Version>and the two version fields in.mcp/server.jsonbefore producing a stale nupkg. publish-mcp-registry.ymlGitHub Actions workflow (manualworkflow_dispatch) drives the MCP Server Registry update via GitHub OIDC. Run AFTER NuGet indexing because the registry validates the published nupkg README'smcp-nameline.
v1.0.2 (2026-04-22)
Changed
call_apidescription — rewritten to spell out thediscover_api→describe_api→call_apiworkflow, explicitly forbid passing a serviceId fromdiscover_apias input, and document that theparamsargument is a JSON STRING (not an object) with a concrete example. The per-parameterurlandparamsdescriptions repeat those constraints at the argument level so schema validators surface them.discover_apidescription — clarifies that the returnedserviceIdis the input fordescribe_api, not forcall_api, and thatdescribe_apimust be called beforecall_api.describe_apidescription — states that it returnsoperations[].urlandrequest_parameters[], which are the required inputs forcall_api, and that a serviceId must never be passed directly tocall_api.
Context
External hosts (AssistStudio) now dispatch MCP tools through a search_tools + invoke_tool pair rather than a per-step sub-agent. In that flow the main conversation does not automatically loop discover_api → describe_api, so models sometimes called call_api with a guessed schema (service_id and a raw parameters object) and hit a generic server failure on every call. Baking the workflow and parameter shape into the tool descriptions lets the model choose correct arguments without an extra schema-discovery round-trip — no code behaviour changed.
v1.0.1 (2026-04-20)
- Update MCP package metadata to the latest
server.jsonformat for NuGet and VS Code integration.
v1.0.0 (2026-04-18)
ADR-001 Phase 1: Lazy credential resolution. Pilot implementation of the FieldCure MCP credential management ADR. Non-breaking for existing users who set an env var.
Added
ApiKeyResolverservice — resolves theserviceKeyvia the priority chain: CLI arg (--api-key, debug only) →DATA_GO_KR_API_KEYenv var →PUBLICDATA_API_KEYlegacy env var → MCP Elicitation (spec 2025-06-18+) → soft-fail. The resolved key is cached in process memory for the session; it is never persisted to disk by the server.InvalidApiKeyException— thrown by the HTTP client on upstream 401/403 so tools can trigger cache invalidation and a single retry.KeyedCallhelper — wraps tool invocations with the resolve → run → (on invalid key) invalidate + retry loop. Session-level re-elicit cap of 2 prevents loops.- Soft-fail path — the server no longer aborts startup when no key is configured.
tools/listalways responds; per-tool calls return a structured error pointing atDATA_GO_KR_API_KEYand noting the Elicitation fallback.
Changed
- Env var rename:
PUBLICDATA_API_KEY→DATA_GO_KR_API_KEY(canonical name matching external Korean government API conventions). The legacy name continues to work as a fallback and is documented as such in.mcp/server.jsonand README. PublicDataHttpClientno longer owns the API key. Each public method accepts anapiKeyparameter supplied by the caller (resolved viaApiKeyResolver). The client throwsInvalidApiKeyExceptionon HTTP 401/403.Program.cs— removed thethrow new InvalidOperationException("PUBLICDATA_API_KEY is required")guard. Startup only reads--api-keyas an optional seed for the resolver; env var and Elicitation are evaluated lazily at tool call time.- Package version bumped to 1.0.0 (initial release on the ADR-001 credential management strategy).
Migration
Existing users who had set PUBLICDATA_API_KEY need no action — the legacy env var continues to be read. To adopt the canonical name, rename to DATA_GO_KR_API_KEY. Hosts that support MCP Elicitation (e.g. AssistStudio) may skip env var configuration entirely; the server will request the key on first tool use.
v0.2.0 (2026-04-14)
Changed
- Centralize
JsonSerializerOptions— extract sharedMcpJson.Optionsto eliminate per-tool serializer configuration duplication - Docs — inline
PackageReleaseNotesin csproj, rename Ecosystem section, add GitHub Releases workflow
v0.1.0 (2026-04-05)
Initial release.
Features
- 3 MCP tools for Korean public data access via stdio transport
discover_api— search data.go.kr APIs by keyword withlist_iddeduplicationdescribe_api— get operations, request parameters, and response fields for a specific APIcall_api— call any data.go.kr API with automaticserviceKeyinjection and response normalization
- XML → JSON normalization — strips
response/header/body/itemswrapper, returns clean JSON - Error code mapping — translates data.go.kr error codes (12, 20, 22, 30, 31) into Korean guidance messages
- SSRF protection — domain whitelist limits calls to approved government hosts (
api.odcloud.kr,apis.data.go.kr,api.data.go.kr,openapi.data.go.kr,www.law.go.kr,open.neis.go.kr) - API key masking —
serviceKeyreplaced with***in all error output - EUC-KR support — legacy encoding from older government APIs auto-detected and converted
- dotnet tool packaging for global installation via NuGet
Tech Stack
- .NET 8.0
- MCP C# SDK v1.2.0
- Microsoft.Extensions.Hosting
- MSTest (35 tests)