Skip to main content
Glama

PRTS MCP Server

PyPI npm License: MIT

Language / 语言: English | 中文


English

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.

Implementations

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

Release Lines

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)

Auto-Sync data contract

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_namename, output channel), and docs/migration-0.x-to-1.0.md for the 0.x → 1.0 transition.

MCP protocol compatibility

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.

Tools

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

Output Channel

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):

  • PythonPRTS_OUTPUT_CHANNEL environment variable.

  • TypeScript?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.

Image Artwork

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.

Quick Start

Since 2.3.0 both implementations support both transports — pick by use case, not by language:

  • Local stdio (Claude Desktop / Claude Code) → Python prts-mcp (stdio, default) or TypeScript npx prts-mcp-ts-stdio

  • HTTP server (self-hosted, remote access) → Python PRTS_TRANSPORT=http prts-mcp or TypeScript npx prts-mcp-ts

  • See python/ and ts/ for per-implementation details

The TypeScript implementation supports Bun and Node.js. Since 2.2.0 Bun is the default production runtime: the default ts/Dockerfile, the primary CI verification path, and the recommended Docker deployment all run under Bun (verified against Bun 1.3.14). Node.js remains a supported legacy/optional runtime via the prts-mcp-ts npm bin (so npx prts-mcp-ts stays zero-dependency), npm install -g, and the ts/Dockerfile.node build path. The npm publishing path still uses npm CLI (npm publish --provenance, runtime-agnostic).

Data Sources

  • PRTS Wiki API (https://prts.wiki/api.php) — lore articles, faction info, world-building entries

  • arknights-data-pipeline (3aKHP/arknights-data-pipeline) — self-hosted data factory producing game data tables (zh_CN-excel.zip), level combat data (zh_CN-levels.zip), and parsed story dialogue with LLM summaries (zh_CN.zip) from a single GitHub Release

Game data lives in the gamedata volume. Level combat data lives in the gamedata-levels volume. Story data lives in the storyjson volume. After the server starts listening, all three are checked in the background immediately and then every hour without restarting the process. Set PRTS_AUTO_SYNC_INTERVAL_SECONDS to 60..604800 to change the interval, or 0 to keep startup sync only.

Published Docker images and the npm package include bundled fallback game/level/story data prepared by CI. The PyPI package stays lightweight and does not embed these data files; it relies on startup auto-sync or user-provided data paths.

Development

See CONTRIBUTING.md for the contribution workflow and docs/dev/ENVIRONMENT.md for Linux/WSL, Windows, and macOS development setup.


Related MCP server: Doctah-MCP

中文

明日方舟同人创作辅助 MCP Server。通过 PRTS Wiki API 和自动同步的干员数据,为 MCP 客户端(Claude Desktop、Claude Code、Chatbox 等)提供泰拉世界观检索与干员资料查询能力。

实现版本

本仓库包含两个独立实现,适用于不同的部署场景:

目录

语言

传输方式

适用场景

python/

Python 3.10+

stdio + Streamable HTTP

Claude Desktop / Claude Code 本地接入(stdio)、自建 HTTP 服务

ts/

TypeScript / Node.js + Bun

Streamable HTTP + stdio

自建 HTTP 服务、Claude Desktop / Claude Code 本地接入(stdio)

版本线

两个版本线并行维护:

版本线

版本

工具数

状态

2.7main

2.7.3

24

干员基建技能、本地立绘皮肤元数据、数据修订同步、章节摘要一致性修复。

1.7 LTSlts/1.7

1.7.0

32

稳定维护线。1.7.x 仅接受兼容性、安全性、数据同步和关键缺陷修复。

范围

Python

TypeScript

MCP 工具

相同的 24 个工具名和必填参数(2.x)/ 1.7 LTS 为 32 个

相同的 24 个(2.x)/ 1.7 LTS 为 32 个

干员数据

GAMEDATA_PATH 或自动同步 zh_CN-excel.zip

GAMEDATA_PATH 或自动同步 zh_CN-excel.zip

关卡战斗数据

自动同步与 GameData 并列的 zh_CN-levels.zip

自动同步与 GameData 并列的 zh_CN-levels.zip

剧情数据

STORYJSON_PATH 或自动同步 zh_CN.zip

STORYJSON_PATH 或自动同步 zh_CN.zip

立绘图片(2.5)

默认开启;MediaWiki 按需获取或 AKDP 本地资产(LOCAL_IMAGE=true

默认开启;MediaWiki 按需获取或 AKDP 本地资产(LOCAL_IMAGE=true

bundled 兜底数据

Docker 镜像

Docker 镜像和正式 npm 包(PyPI 保持轻量)

Auto-Sync 数据契约

两套实现都消费自建 arknights-data-pipeline Release。新 Release 附带 manifest.json,声明 prts-mcp-data/v1 契约、源 versionId 以及每个压缩包的大小/SHA-256;不匹配会在激活前拒绝,迁移期间仍兼容没有 manifest 的旧 Release。下载、结构或 manifest 校验失败时,服务继续使用上一代已激活数据。

GITHUB_MIRRORS 是显式的 GitHub 访问备用路径;条目的首尾空白与尾部斜杠在两种实现中都会自动归一化。Node 部署会通过 Undici 使用标准 HTTP_PROXY/HTTPS_PROXY(也识别小写变量),Bun 保持原生 fetch 路径。代理不会绕过 manifest 或 ZIP 校验。

1.x → 2.0 的破坏性变更(工具面合并、operator_namename、output channel)见 docs/migration-1.x-to-2.0.md;0.x → 1.0 迁移见 docs/migration-0.x-to-1.0.md

MCP 协议兼容性

2.6.0 保留既有 initialize/session 的 legacy MCP 客户端流程,并新增 opt-in 的 2026-07-28 协议时代支持。现代 HTTP 请求使用现代 envelope 且无状态,不发送 Mcp-Session-Id;stdio 由连接上的第一条请求选择协议时代,切换协议模式时请新建连接。把客户端切换到 modern 前,请先阅读 2.5 → 2.6 迁移指南

工具集

两个实现提供相同的工具集:

工具

说明

search_prts(query, limit)

关键词搜索 PRTS 维基词条,返回匹配标题列表

prts_page(page_title, action, ...)

读取词条正文或元数据;template 返回顶层模板的结构化、已渲染字段数据

get_operator_archives(name)

获取干员档案资料(中文名)

get_operator_voicelines(name)

获取干员语音记录(中文名)

get_operator_basic_info(name)

获取干员基本信息:职业、稀有度、所属、招募标签、天赋、基建技能(中文名)

list_story_events(category?)

列出剧情活动,可选过滤:main(主线)或 activities(活动)

list_stories(event_id, include_summaries?)

列出指定活动的章节(按官方顺序);include_summaries 附活动级概览 + 每章梗概

get_story_summary(story_key)

获取单章梗概(LLM 长摘要或官方一句话简介)

read_story(story_key, include_narration)

读取单章完整台词

read_activity(event_id, include_narration, page, page_size)

读取整个活动的完整剧情,支持分页

search(scope, pattern, max_results)

在指定数据域执行全文正则搜索:scope ∈ operators / enemies / stages / items / building_skills(基建技能跨干员反查)

search_stories(pattern, character?, line_type?, context_lines?, max_results?, event_id?)

在剧情台词中执行全文正则搜索,支持按角色和台词类型过滤

list_enemies()

列出敌方图鉴中所有敌人及其威胁等级和描述

get_enemy_info(name, stage_id?)

获取指定敌人的详细图鉴资料;传入 stage_id 时返回关卡级数值

get_stage_enemies(stage_id)

获取指定关卡实际出场敌人及关卡级等级/战斗属性

get_enemy_appearances(name, limit?, offset?)

反查指定敌人实际出现在哪些关卡

list_stages(chapter?, type?, limit?, offset?)

列出关卡,支持按章节/区域和关卡类型过滤

get_stage_info(stage_id)

根据关卡 ID 获取关卡详细信息

list_items(category?, limit?, offset?)

列出物品/材料,支持按类别过滤和分页

get_item_info(name)

获取物品/材料详情、用途、获取方式、掉落、基建产出和商店关联

get_operator_memoirs(name)

解析干员密录的 story_key,便于后续 read_story 调用

find_character_appearances(name, scope?, max_events?)

查找角色在哪些章节/活动中开口(对话)或被提及(名字子串)

find_speakers_in(event_id)

列出指定活动中所有发言角色及其对话行数

operator_artwork(operator_name, action, artwork_id?, variant?)

列出干员立绘/时装(本地模式附带皮肤系列/获取方式等元数据)并获取图片变体(base64);默认走 MediaWiki,LOCAL_IMAGE=true 时使用 AKDP 本地资产

输出通道

两个实现默认在 MCP 的 content 字段输出人类可读的 markdown。若部署环境使用的客户端能消费 MCP 原生的 structuredContent,可通过连接级output_channel 开关(content(默认)/ structured / both)启用:

  • PythonPRTS_OUTPUT_CHANNEL 环境变量。

  • TypeScript?output_channel= 查询字符串、x-prts-output-channel 请求头,或 PRTS_OUTPUT_CHANNEL 环境变量。

默认 content 无需任何配置,与 1.x 一致。各工具的通道映射,以及「为何选连接级通道而非 per-call 格式参数」的设计理由,见 2.0 迁移指南

立绘工具

operator_artwork 工具(2.5.0+)默认开启。通过 LOCAL_IMAGE 选择数据源:

变量

缺省值

说明

IMAGES_ENABLED

true

主开关;false 隐藏 operator_artwork

LOCAL_IMAGE

false

true = 同步 AKDP 本地 PNG 资产(~1.5 GB);false = 从 PRTS MediaWiki 按需获取(零下载)。

PRTS_IMAGE_CACHE

true

MediaWiki 图片的内存 LRU 缓存(256 MiB);仅在 LOCAL_IMAGE=false 时生效。

ORIGINAL_IMAGE

false

额外同步原图分辨率分片;仅在 LOCAL_IMAGE=true 时生效。

PRTS_IMAGE_DIR

~/.local/share/prts-mcp/images/

AKDP 资产同步目标;仅在 LOCAL_IMAGE=true 时生效。Docker:/data/images

零配置即可使用:默认走 MediaWiki + 缓存。若需离线全量体验,设置 LOCAL_IMAGE=true(触发 ~1.5 GB 后台同步)。完整环境变量清单见环境变量参考

快速开始

自 2.3.0 起两个实现都支持双传输——按场景选择,而非按语言:

  • 本地 stdio 接入(Claude Desktop / Claude Code)→ Python prts-mcp(stdio,默认)或 TypeScript npx prts-mcp-ts-stdio

  • HTTP 服务部署(自建服务器,供他人调用)→ Python PRTS_TRANSPORT=http prts-mcp 或 TypeScript npx prts-mcp-ts

  • 详见 python/ts/

TypeScript 实现支持 Bun 与 Node.js。自 2.2.0 起 Bun 是默认生产运行时:默认 ts/Dockerfile、CI 主验证链与推荐 Docker 部署均在 Bun 下运行(最低验证版本 Bun 1.3.14)。Node.js 保留为受支持的 legacy/可选运行时,通过 prts-mcp-ts npm bin(因此 npx prts-mcp-ts 仍零额外运行时依赖)、npm install -gts/Dockerfile.node 构建路径提供。npm 发布路径仍走 npm CLI(npm publish --provenance,与运行时无关)。

数据源

  • PRTS Wiki API (https://prts.wiki/api.php) — 世界观词条、阵营设定

  • arknights-data-pipeline (3aKHP/arknights-data-pipeline) — 自建数据工厂,从单一 GitHub Release 产出游戏数据表(zh_CN-excel.zip)、关卡战斗数据(zh_CN-levels.zip)和剧情台词解析+LLM 摘要(zh_CN.zip

干员/表格数据存放在 gamedata volume,关卡战斗数据存放在 gamedata-levels volume,剧情数据存放在 storyjson volume。服务器开始监听后会立即在后台检查,此后默认每小时检查一次,无需重启进程。可用 PRTS_AUTO_SYNC_INTERVAL_SECONDS=60..604800 调整周期,或设为 0 仅保留启动同步。

正式发布的 Docker 镜像和 npm 包会由 CI 预置 bundled 兜底数据;PyPI 包保持轻量,不内置这些数据文件,依赖启动时 auto-sync 或用户自行提供数据路径。

开发与贡献

贡献流程见 CONTRIBUTING.md,Linux/WSL、Windows 和 macOS 的开发环境入口见 docs/dev/ENVIRONMENT.md


License

MIT

Available Tools

9 tools
get_operator_archivesA

获取指定干员的档案资料(使用游戏内中文名,如"阿米娅")。

ParametersJSON Schema
NameRequiredDescriptionDefault
operator_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Adds naming convention hint but lacks disclosure of authentication, rate limits, error handling, or what happens if operator is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no waste. Front-loaded with action and resource. Efficient for a parameter with required name hint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be explained. Description provides basic context but could elaborate on what 'archive data' entails (e.g., background, skills? ). Adequate but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, so description compensates by instructing to use the in-game Chinese name, adding meaning beyond the generic string type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (获取/obtain) and resource (干员的档案资料/operator archive data). It specifies to use the in-game Chinese name, which adds precision. Distinguishes from siblings like get_operator_basic_info and get_operator_voicelines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for retrieving archive data but no explicit guidance on when to use vs. alternatives. No mention of when not to use or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_operator_basic_infoA

获取指定干员的基本信息:职业、稀有度、所属、招募标签、天赋等(使用游戏内中文名,如"阿米娅")。

ParametersJSON Schema
NameRequiredDescriptionDefault
operator_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so description bears full burden. It lists return fields but does not disclose behavior for invalid names, error handling, or that it is read-only. Output schema exists but description alone is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with key information and an example. No redundant words, front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, description is sufficient for basic usage. It covers what the tool returns and input format. Lacks mention of error scenarios or prerequisites, but tool is simple.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage for the only parameter. The description adds essential meaning: it expects the in-game Chinese name (e.g., '阿米娅'), going beyond raw schema type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'get' and resource 'basic info of a specified operator', listing specific fields like class, rarity, affiliation. It distinguishes from siblings by specifying 'basic info' vs archives or voicelines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description instructs to use in-game Chinese names (e.g., 'Amiya'), which is helpful. However, it lacks explicit guidance on when to use this tool versus siblings like get_operator_archives or read_prts_page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_operator_voicelinesA

获取指定干员的语音记录(使用游戏内中文名,如"阿米娅")。

ParametersJSON Schema
NameRequiredDescriptionDefault
operator_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It only mentions the naming convention for the parameter but omits other behavioral traits such as authentication requirements, rate limits, error handling (e.g., if operator is not found), or any side effects. The description is insufficient for a complete behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the essential information. Every word contributes value without redundancy, making it highly efficient for an AI agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and has an output schema, so description does not need to explain return values. However, it lacks context on error handling, prerequisites (e.g., whether operator must exist), or additional behavioral constraints. It covers the most critical usage hint but leaves gaps in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds crucial meaning by specifying that operator_name should be the in-game Chinese name (e.g., '阿米娅'), which is not present in the schema. This significantly aids correct parameter usage, though it does not cover formatting details like case sensitivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves voice records of a specified operator (a specific resource) using the verb '获取' (retrieve/get). It distinguishes from siblings like get_operator_archives and get_operator_basic_info, which deal with other types of operator data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs using the in-game Chinese name (e.g., '阿米娅'), providing a clear usage guideline. However, it does not explicitly state when not to use this tool or compare it to alternatives, though the sibling context makes the distinction reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_storiesA

列出指定活动的所有剧情章节(按官方顺序排列)。

Args:
    event_id: 活动 ID,如 "act31side"(可从 list_story_events 获取)。
ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that output is ordered, but omits details about error handling, permissions, or side effects. This is insufficient for a tool with no safety annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with the purpose stated in a single sentence plus an args section. Every piece of text adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (one required string param, no enums, output schema exists), the description covers the core functionality adequately. It lacks guidance on invalid inputs or empty results, but the presence of an output schema mitigates the need for return value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description adds meaningful context: event_id is an activity ID (e.g., 'act31side') retrievable from list_story_events. This clarifies the parameter beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('列出所有剧情章节') and the resource ('指定活动'), with explicit mention of ordering ('按官方顺序排列'). It distinguishes from siblings like list_story_events and read_story.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that event_id can be obtained from list_story_events, providing a direct link for when to use this tool. However, it does not explicitly state when not to use it or mention alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_story_eventsA

列出明日方舟剧情活动列表。

Args:
    category: 可选过滤分类。"main" = 主线章节,"activities" = 活动剧情(含联动)。
              不填则返回全部活动。建议先调用本工具了解活动全貌,再用 list_stories 查询具体章节。
ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes the tool as a list operation with optional filtering, but does not disclose behavioral traits such as data freshness, pagination, or error handling. For a simple read-only tool, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a clear purpose statement followed by a structured Args section. Every sentence provides necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and an output schema, the description covers everything needed: purpose, filter usage, and cross-tool guidance. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description explains the category parameter with possible values ('main', 'activities') and their meanings, adding value beyond the minimal schema. The single parameter is well documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists Arknights story events with an optional category filter ('main' or 'activities'), and distinguishes it from the sibling tool list_stories by suggesting using this for overview and list_stories for details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends using this tool first for an overall view and then list_stories for specific chapters, providing clear usage context. It does not explicitly state when not to use it, but the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_activityA

读取整个活动的完整剧情台词(按官方章节顺序合并)。

适合需要了解完整活动故事的场景。单次活动文本量可能较大,可用 page 参数分批获取。

Args:
    event_id: 活动 ID,如 "act31side"。
    include_narration: 是否包含旁白,默认 True。
    page: 分页页码(从 1 开始)。不填则返回全部章节。
    page_size: 每页章节数,默认 5。
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
event_idYes
page_sizeNo
include_narrationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

无注释,描述承担披露责任。提到文本量大可分页,但未说明权限、错误处理或返回格式。行为方面基本但不够全面。

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

描述先提主要目的,再给出使用背景,最后逐参数说明。结构清晰,没有冗余信息,长度适中。

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

解释了如何使用分页处理大量文本,涵盖了所有参数和基本行为。虽然有输出模式,但未提及返回内容的具体结构,不过对于读取工具已足够。

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

描述中对每个参数都给出了解释和示例(如 event_id 的 'act31side'),补充了模式中缺失的语义(模式覆盖率0%),有效指导调用。

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

明确指定了动作(读取)、资源(活动完整剧情台词)和范围(整个活动,按官方章节顺序合并)。与兄弟工具(如 read_story)自然区分开。

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

提供了使用场景(需要了解完整活动故事)和分批获取的提示,但没有明确说明何时不使用或对比替代工具。

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_prts_pageB

读取 PRTS 维基指定词条的纯文本内容。

ParametersJSON Schema
NameRequiredDescriptionDefault
page_titleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior. It only states output is 'plain text' but omits details like error handling, idempotency, required permissions, or page existence behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words. However, some necessary details are omitted, so it's not perfectly balanced.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter and an output schema, the description is minimally adequate but could be more complete by mentioning what happens on invalid input or additional behavioral aspects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain the single parameter 'page_title'. It only vaguely refers to 'specified entry', missing details like exact title format, case sensitivity, or special characters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'reads' and the resource 'plain text content of a specified entry on the PRTS wiki'. It distinguishes from sibling tools which are operator-specific or story-specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like search_prts or the operator-specific tools. The description gives no context for appropriate use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_storyA

读取单章剧情的完整台词。

Args:
    story_key: 章节 key,如 "activities/act31side/level_act31side_01_beg"(可从 list_stories 获取)。
    include_narration: 是否包含旁白和场景描述,默认 True。
ParametersJSON Schema
NameRequiredDescriptionDefault
story_keyYes
include_narrationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It explains the operation is a read and describes parameters, but does not disclose error handling, required permissions, or behavior for invalid input. Adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus bullet-like argument descriptions. Every sentence is necessary and front-loaded with the core purpose. No redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two parameters and an output schema exists. The description adequately covers what the tool does, the required and optional parameters, and hints at integration with list_stories. No additional context needed for the given complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining the purpose of include_narration (whether to include narration/scene descriptions) and provides an example and source for story_key. Adds significant value beyond the schema's type info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb ('读取' meaning read) and resource ('单章剧情的完整台词' meaning complete dialogue of a single story chapter). It distinguishes from siblings like list_stories (listing) and read_activity (reading activity data) by focusing specifically on dialogue content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete example for story_key and notes it can be obtained from list_stories, but does not explicitly state when to use vs alternatives or when not to use. Usage is implied rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_prtsB

搜索 PRTS 明日方舟中文维基词条。返回匹配的词条标题和摘要。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states 'search and return' without mentioning side effects, permissions, rate limits, or read-only behavior. Minimal transparency beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the action. No unnecessary words, every sentence provides value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple search tool, stating what it does and returns. However, lacks usage guidelines and parameter explanation, which are needed given the zero schema coverage and absence of annotations. The output schema exists but is not referenced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description does not explain the parameters. 'query' is somewhat obvious, but 'limit' is not mentioned, leaving its purpose unclear. The description fails to compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches PRTS Arknights Chinese wiki entries and returns titles and summaries. It distinguishes from siblings like 'read_prts_page' by identifying it as a search function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like 'read_prts_page'. The description implies usage for searching but does not specify when not to use it or provide context for selection among siblings.

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.

  1. 9 tool updatesv0.2.14
    • Addedget_operator_archives
    • Addedget_operator_basic_info
    • Addedget_operator_voicelines
    • Addedlist_stories
    • Addedlist_story_events
    • Addedread_activity
    • Addedread_prts_page
    • Addedread_story
    • Addedsearch_prts
  2. 9 tool updatesv0.2.13
    • Removedget_operator_archives
    • Removedget_operator_basic_info
    • Removedget_operator_voicelines
    • Removedlist_stories
    • Removedlist_story_events
    • Removedread_activity
    • Removedread_prts_page
    • Removedread_story
    • Removedsearch_prts

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct resource: operator info (archives, basic, voicelines) and story browsing (events, chapters, full activity, single chapter) plus search and page reading. No overlaps.

Naming Consistency4/5

Most tools follow verb_noun pattern (get_*, list_*, read_*, search_*). Minor inconsistency: 'list_stories' lists chapters for an event, not stories, and differs from 'list_story_events' and 'read_story'.

Tool Count5/5

9 tools is well-scoped for a specific game wiki assistant. Each tool serves a clear purpose without being too many or too few.

Completeness4/5

Covers operator profiles and story content comprehensively. Missing explicit operator skills/stats tools, but archives may include them. Domain coverage is good for stated purpose.

Maintenance

ActivityActive
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    C
    maintenance
    A MCP server that allows you to search and retrieve content on any wiki site using MediaWiki with LLMs 🤖. wikipedia.org, fandom.com, wiki.gg and more sites using Mediawiki are supported!
    2
    26
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search and access Arknights game data including operator information, enemy intelligence, skills, talents, and attributes through PRTS.wiki integration. Provides fuzzy search functionality for operators and enemies with clean Markdown output.
    9
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/3aKHP/prts-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server