Skip to content

3aKHP/prts-mcp

vpython/v1.4.1 Feature

This release adds 1 notable feature for engineering teams evaluating rollout.

Published 15d MCP Data & Storage
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

ai-agent anthropic arknights claude fanfiction game-data
+5 more
mcp mcp-server model-context-protocol prts prts-wiki

Summary

AI summary

Fixed story search timeout caused by ~3000 redundant zip opens in ZipStore.

Changes in this release

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. ZipFile is now cached instead of
    re-opened on every exists()/read_text() call. exists() switches
    from O(n) namelist() to O(1) getinfo(). In search_stories without
    an event_id filter this was ~3000 redundant zip opens, exceeding the
    120 s MCP client timeout.
  • HTTP client reuse. Module-level shared httpx.AsyncClient replaces
    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 .tail preservation. Text after nested <comment> and
    <template> elements in title/value extraction is now preserved instead
    of silently dropped.
  • Story search robustness. read_activity gains page >= 1 validation.
    Exception handling in search_stories and read_activity narrowed from
    bare except Exception to expected error types. Convenience wrappers
    (search_stories, get_event_summary, get_story_summary) now use
    _story_store() for consistency.
  • API error semantics. ValueError replaced with RuntimeError for
    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

Track 3aKHP/prts-mcp

Get notified when new releases ship.

Sign up free

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.

All releases →

Related context

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]