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.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
An MCP Server for Arknights fan creation (同人創作) AI agents. Powered by the PRTS Wiki MediaWiki API and auto-synced operator game data, it gives any MCP-compatible client — Claude Desktop, Claude Code, Chatbox, and more — live access to lore, operator archives, and voice lines from the world of Terra.
This repository contains two independent implementations for different deployment scenarios:
| Directory | Language | Transport | Use case |
|---|---|---|---|
python/ | Python 3.10+ | stdio + Streamable HTTP | Local Claude Desktop / Claude Code (stdio), self-hosted HTTP server |
ts/ | TypeScript / Node.js + Bun | Streamable HTTP + stdio | Self-hosted HTTP server, local stdio for Claude Desktop / Code |
Two release lines ship in parallel:
| Line | Version | Tools | Status |
|---|---|---|---|
2.7 (main) | 2.7.3 | 24 | Operator base skills, local artwork skin metadata, repair-aware data sync, and consistent chapter summaries. |
1.7 LTS (lts/1.7) | 1.7.0 | 32 | Stable maintenance line. 1.7.x accepts only compatibility, security, data-sync, and critical bug fixes. |
The main and develop lines use the self-built arknights-data-pipeline Release exclusively for default Auto-Sync. The 1.7 LTS line retains its legacy upstream compatibility until a separate, backwards-compatible migration; changes to the new factory path must not be backported to LTS as an implicit source switch.
| Area | Python | TypeScript |
|---|---|---|
| MCP tools | Same 24 public tool names and required parameters (2.x) / 32 on 1.7 LTS | Same 24 (2.x) / 32 on 1.7 LTS |
| GameData | GAMEDATA_PATH or auto-synced zh_CN-excel.zip | GAMEDATA_PATH or auto-synced zh_CN-excel.zip |
| Level data | Auto-synced zh_CN-levels.zip beside GameData | Auto-synced zh_CN-levels.zip beside GameData |
| Story data | STORYJSON_PATH or auto-synced zh_CN.zip | STORYJSON_PATH or auto-synced zh_CN.zip |
| Image artwork (2.5) | Enabled by default; MediaWiki on-demand or AKDP local assets (LOCAL_IMAGE=true) | Enabled by default; MediaWiki on-demand or AKDP local assets (LOCAL_IMAGE=true) |
| Bundled fallback data | Docker image only | Docker image and published npm package (PyPI stays data-light) |
Both implementations consume the self-built arknights-data-pipeline Release. New releases carry a manifest.json with the prts-mcp-data/v1 contract, source versionId, and SHA-256/size for each archive; a mismatch is rejected before activation, while pre-manifest releases remain readable during the transition. The last activated generation stays in place on download, schema, or manifest failure.
GITHUB_MIRRORS is an explicit fallback for GitHub URL access. Mirror entries have surrounding whitespace and trailing slashes normalized automatically in both implementations. In Node deployments, standard HTTP_PROXY/HTTPS_PROXY (including lowercase spellings) are honored via Undici; Bun keeps its native fetch path. Proxy support does not weaken manifest or ZIP validation.
See docs/migration-1.x-to-2.0.md for the 1.x → 2.0 breaking changes (tool consolidation, operator_name → name, output channel), and docs/migration-0.x-to-1.0.md for the 0.x → 1.0 transition.
2.6.0 retains the established initialize/session flow for legacy MCP clients and adds opt-in support for the 2026-07-28 protocol era. Modern HTTP requests use the modern envelope and are stateless; they do not send Mcp-Session-Id. For stdio, the first request on a connection selects the era, so open a separate connection when changing protocol modes. See the 2.5 → 2.6 migration guide before switching a client to modern mode.
Both implementations expose the same tool set:
| Tool | Description |
|---|---|
search_prts(query, limit) | Search PRTS Wiki by keyword, returns matching article titles |
prts_page(page_title, action, ...) | Read a wiki page or metadata; template returns rendered fields from top-level templates |
get_operator_archives(name) | Retrieve operator archive records (Chinese name) |
get_operator_voicelines(name) | Retrieve operator voice lines (Chinese name) |
get_operator_basic_info(name) | Retrieve basic operator profile: class, rarity, faction, recruit tags, talents, base skills (Chinese name) |
list_story_events(category?) | List story events; optional filter: main (main story) or activities |
list_stories(event_id, include_summaries?) | List chapters of an event in official order; include_summaries adds the event-level overview + per-chapter summaries |
get_story_summary(story_key) | Single-chapter summary (LLM long summary or official one-liner) |
read_story(story_key, include_narration) | Read full dialogue for a single chapter |
read_activity(event_id, include_narration, page, page_size) | Read a complete activity's transcript, with pagination |
search(scope, pattern, max_results) | Full-text regex search within a data domain: scope ∈ operators / enemies / stages / items / building_skills |
search_stories(pattern, character?, line_type?, context_lines?, max_results?, event_id?) | Full-text regex search across story dialogue, narration, and choice lines with filtering |
list_enemies() | List all enemies in the handbook with threat level and description |
get_enemy_info(name, stage_id?) | Retrieve full enemy handbook entry by name, or stage-specific stats when stage_id is provided |
get_stage_enemies(stage_id) | List enemies actually spawned in a stage, with stage-specific levels and combat stats |
get_enemy_appearances(name, limit?, offset?) | Reverse lookup stages where an enemy actually spawns |
list_stages(chapter?, type?, limit?, offset?) | List stages with optional zone and stage-type filters |
get_stage_info(stage_id) | Retrieve detailed stage information by stage ID |
list_items(category?, limit?, offset?) | List items/materials from item_table.json with optional category filtering |
get_item_info(name) | Retrieve item/material details, usage, obtain methods, drops, production, and shop links |
get_operator_memoirs(name) | Resolve an operator's memoir (干员密录) story keys for follow-up read_story calls |
find_character_appearances(name, scope?, max_events?) | Find chapters/events where a character speaks (dialog) or is mentioned (name substring) |
find_speakers_in(event_id) | List every speaker in an event with dialog line counts |
operator_artwork(operator_name, action, artwork_id?, variant?) | List operator illustrations/skins (local list carries skin collection/acquisition metadata) and retrieve image variants (base64); MediaWiki by default, AKDP local assets when LOCAL_IMAGE=true |
Both implementations keep markdown as the default, human-readable output on MCP's content field. Deployments whose client consumes MCP-native structuredContent can opt in via a connection-level output_channel knob (content (default) / structured / both):
PRTS_OUTPUT_CHANNEL environment variable.?output_channel= query string, x-prts-output-channel header, or PRTS_OUTPUT_CHANNEL env.The default content requires no configuration and is unchanged from 1.x. See the 2.0 migration guide for the per-tool mapping and the rationale for choosing a channel over a per-call format parameter.
The operator_artwork tool (2.5.0+) is enabled by default. Two data source modes are selected by LOCAL_IMAGE:
| Variable | Default | Description |
|---|---|---|
IMAGES_ENABLED | true | Master switch; false hides operator_artwork. |
LOCAL_IMAGE | false | true = sync AKDP local PNG assets (~1.5 GB); false = fetch on-demand from PRTS MediaWiki (zero download). |
PRTS_IMAGE_CACHE | true | In-memory LRU cache (256 MiB) for MediaWiki images; only effective when LOCAL_IMAGE=false. |
ORIGINAL_IMAGE | false | Also sync original-resolution shards; only effective when LOCAL_IMAGE=true. |
PRTS_IMAGE_DIR | ~/.local/share/prts-mcp/images/ | AKDP asset sync target; only effective when LOCAL_IMAGE=true. Docker: /data/images. |
Zero-config: the tool works immediately via MediaWiki with caching. For the full offline AKDP experience, set LOCAL_IMAGE=true (triggers ~1.5 GB background sync). For the complete environment-variable list, see docs/user/environment-variables.md.
Since 2.3.0 both implementations support both transports — pick by use case, not by language:
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/3akhp-prts-mcp)<a href="https://allmcps.com/mcp/3akhp-prts-mcp"><img src="https://allmcps.com/api/badge/3akhp-prts-mcp?style=directory" alt="Prts MCP on AllMCPs" /></a>