This release adds 1 notable feature for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+5 more
Summary
AI summaryFixed story search timeout caused by ~3000 redundant zip opens in ZipStore.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
E2E test suite added, covering MCP protocol handshake, all 21 tools, operator data, and graceful degradation of optional data. E2E test suite added, covering MCP protocol handshake, all 21 tools, operator data, and graceful degradation of optional data. Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
HTTP client reuse implements module-level shared AsyncClient, recovering connection pooling and avoiding repeated TLS handshakes. HTTP client reuse implements module-level shared AsyncClient, recovering connection pooling and avoiding repeated TLS handshakes. Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
Rate limiter race condition fixed by switching to slot-based reservation scheme. Rate limiter race condition fixed by switching to slot-based reservation scheme. Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
ZipStore zip instance caching reduces redundant zip opens by ~3000, preventing MCP client timeout. ZipStore zip instance caching reduces redundant zip opens by ~3000, preventing MCP client timeout. Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Bugfix | Medium |
Story search robustness improved with `page >= 1` validation in `read_activity`, narrowed exception handling, and consistent use of `_story_store()` in wrappers. Story search robustness improved with `page >= 1` validation in `read_activity`, narrowed exception handling, and consistent use of `_story_store()` in wrappers. Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Bugfix | Medium |
Parsetree `.tail` preservation ensures text after nested `<comment>` and `<template>` elements is no longer silently dropped. Parsetree `.tail` preservation ensures text after nested `<comment>` and `<template>` elements is no longer silently dropped. Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Bugfix | Medium |
API error semantics updated: `ValueError` replaced with `RuntimeError` for MediaWiki API errors to match Python hierarchy. API error semantics updated: `ValueError` replaced with `RuntimeError` for MediaWiki API errors to match Python hierarchy. Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Bugfix | Medium |
ZipStore caches `ZipFile` instances, using O(1) `getinfo()` instead of O(n) `namelist()`, cutting ~3000 redundant opens. ZipStore caches `ZipFile` instances, using O(1) `getinfo()` instead of O(n) `namelist()`, cutting ~3000 redundant opens. Source: granite4.1:30b@2026-05-19-audit Confidence: low |
— |
| Bugfix | Medium |
Story search now validates `page >= 1`, narrows exception handling, and uses `_story_store()` consistently in wrapper functions. Story search now validates `page >= 1`, narrows exception handling, and uses `_story_store()` consistently in wrapper functions. Source: granite4.1:30b@2026-05-19-audit Confidence: low |
— |
Full changelog
Fixed
- ZipStore zip instance caching.
ZipFileis now cached instead of
re-opened on everyexists()/read_text()call.exists()switches
from O(n)namelist()to O(1)getinfo(). Insearch_storieswithout
anevent_idfilter this was ~3000 redundant zip opens, exceeding the
120 s MCP client timeout. - HTTP client reuse. Module-level shared
httpx.AsyncClientreplaces
per-call instantiation (7 call sites), recovering connection pooling and
avoiding repeated TLS handshakes. - Rate limiter race condition. Slot-based reservation scheme (matching
the TS implementation) replaces the check-then-act pattern that could
allow concurrent coroutines to exceed the configured rate. - Parsetree
.tailpreservation. Text after nested<comment>and
<template>elements in title/value extraction is now preserved instead
of silently dropped. - Story search robustness.
read_activitygainspage >= 1validation.
Exception handling insearch_storiesandread_activitynarrowed from
bareexcept Exceptionto expected error types. Convenience wrappers
(search_stories,get_event_summary,get_story_summary) now use
_story_store()for consistency. - API error semantics.
ValueErrorreplaced withRuntimeErrorfor
MediaWiki API errors, matching the Python exception hierarchy convention.
Added
- E2E test suite. MCP protocol-level test (
test_e2e.py) covering
handshake, tool surface (all 21 tools), operator data, and graceful
degradation when optional data is unavailable.
Install
pip install prts-mcp==1.4.1
Docker
docker pull ghcr.io/3akhp/prts-mcp:1.4.1
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About 3aKHP/prts-mcp
MCP Server for Arknights, querying the PRTS Wiki API and serving auto-synced operator archives and voice lines from game data. Designed for fan-creation (同人創作) AI agents. Python (stdio/Docker) and TypeScript (Streamable HTTP) implementations.
Related context
Related tools
Earlier breaking changes
- vts/v1.0.0 Public tool surface frozen; 9 MCP tool names, parameters, and response formats locked.
Beta — feedback welcome: [email protected]