Skip to main content
Glama
gotalab

MCP Novel Game Server

by gotalab

MCP Novel Game Server

alt text

ビジュアルノベルゲームのMCPサーバーの作り方

English

Overview

This repository is a novel game server that supports multi-branch scenario stories (visual novels) in both English and Japanese.

This repository is designed as a resource to help you better understand MCP (Model Context Protocol) Resources.

You can run, edit, and add new scenarios easily. The server supports scenario files written in YAML and can be extended with your own stories.

Note: On Cline, everything works out-of-the-box. On other environments like Claude Desktop and Cursor, please use server_tool.py to launch and manage the server properly.

How to Use

1. Install dependencies

uv sync

2. Run the server

{
    "novel-game-server": {
            "command": "uv",
            "args": [
                "--directory",
                "/Users/username/Documents/projects/mcp-novel-game-server", ## Replace with your project root
                "run",
                "src/server.py"
            ]
        }
}

3. Play or test a scenario

  • Place your scenario files in src/stories/<your_story>/

  • You can select scenarios via the server's interface or by specifying scenario IDs in your client.

4. Add a new scenario

  • Create a new directory under src/stories/ (e.g. villainess_rose or villainess_rose_ja)

  • Add scenario YAML files (see existing examples)

  • Add a meta.yaml describing the scenario

5. File structure

project-root/
├── src/
│   ├── server.py
│   └── stories/
│       ├── villainess_rose/
│       ├── villainess_rose_ja/
│       └── ...
├── mcp_example.json
├── pyproject.toml
└── README.md

Notes

  • Use uv as the package manager and runner.

  • Scenarios can be written in English or Japanese.

  • See src/stories/README.md for scenario tree and details.


Related MCP server: Learn MCP Server

日本語

概要

このリポジトリは、分岐型ノベルゲーム(ビジュアルノベル)サーバーです。英語・日本語両対応。

MCP(Model Context Protocol)のリソースを理解するためのリソースとして設計されています。

YAML形式でシナリオを追加・編集できます。

注意: Cline環境ではそのまま動作しますが、それ以外の環境(例えばClaude DesktopやCursor)では server_tool.py を使ってサーバーの起動・管理を行ってください。

使い方

1. 依存パッケージのインストール

uv sync

2. サーバーの起動

{
    "novel-game-server": {
            "command": "uv",
            "args": [
                "--directory",
                "/Users/username/Documents/projects/mcp-novel-game-server", ## ご自身のプロジェクトルートに変更してください
                "run",
                "src/server.py"
            ]
        }
}

3. シナリオのプレイ・テスト

  • src/stories/<your_story>/ にシナリオファイルを配置

  • サーバーのUIまたはクライアントからシナリオIDを指定して選択可能

4. 新しいシナリオの追加

  • src/stories/ 配下に新しいディレクトリを作成(例: villainess_rosevillainess_rose_ja

  • YAMLファイルでシナリオを作成

  • シナリオ説明用の meta.yaml も追加

5. ファイル構成例

project-root/
├── src/
│   ├── server.py
│   └── stories/
│       ├── villainess_rose/
│       ├── villainess_rose_ja/
│       └── ...
├── mcp_example.json
├── pyproject.toml
└── README.md

注意

  • パッケージ管理・実行は uv を利用してください。

  • シナリオは英語・日本語どちらでも作成可能です。

  • シナリオの詳細やツリーは src/stories/README.md を参照してください。

Available Tools

3 tools
chooseC

Record player's choice within their selected story.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_idYes
current_scene_idYes
choice_idYes
free_textNo

TDQS

C2.4/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, but it only says 'record'. It fails to mention if the action is idempotent, if it can be overwritten, or any side effects. This is insufficient for safe usage.

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

Conciseness3/5

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

The description is a single sentence, making it concise, but it sacrifices necessary detail. Every word is needed, but additional context would improve it.

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

Completeness1/5

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

Given no output schema or annotations, the description is severely incomplete. It does not explain return values, error conditions, or prerequisites like having an active story.

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

Parameters1/5

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

The schema has 0% description coverage, and the description adds no parameter details. It does not explain the role of player_id, current_scene_id, choice_id, or free_text beyond their names.

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

Purpose4/5

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

The description clearly states the tool records a player's choice within a selected story, distinguishing it from siblings like load_scene_image and select_story. However, it lacks explicit mention that the choice is tied to a specific scene, which is evident from the schema.

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 is provided on when to use this tool versus alternatives, such as selecting a story or loading an image. The agent is left to infer usage from the name alone.

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

load_scene_imageC

Return the image for the player's current story and scene. Resize and compress until data size <= 1MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_idYes
scene_idYes
max_widthNo
max_heightNo

TDQS

C2.9/5.0
Behavior3/5

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

Adds one behavioral trait: resizing/compressing until data size <= 1MB. However, no annotations exist, so the description carries the full burden. It does not disclose authentication needs, rate limits, error handling, or behavior when compression fails.

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 sentences with no wasted words. The core action is front-loaded. Every sentence adds value: purpose and behavioral constraint.

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

Completeness2/5

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

No output schema, yet description does not specify return format (e.g., base64, URL) or error cases. For a tool with 4 parameters and no annotations, the description is incomplete. It covers basic purpose but omits many usage details.

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

Parameters1/5

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

Schema coverage is 0%, and the description provides no explanation of parameters. It mentions resizing/compression but does not link to max_width or max_height. The description fails to compensate for the lack of parameter descriptions in the schema.

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

Purpose4/5

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

The description clearly states it returns an image for the player's current story and scene, with resizing/compression. The verb 'Return' and resource 'image for the player's current story and scene' are specific. While siblings are different actions, it doesn't explicitly differentiate or highlight its unique role.

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. No mention of context, prerequisites, or exclusions. The description implies it should be used when an image is needed for a scene, but lacks explicit usage direction.

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

select_storyC

Bind a story to the player and return its opening scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_idYes
story_idYes

TDQS

C2.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 must carry the full burden of behavioral disclosure. The description only states the action and return value but does not elaborate on side effects, failure modes, or required permissions (e.g., whether binding is permanent, what happens if the story is already bound, or if the player exists).

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

Conciseness3/5

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

The description is a single sentence that earns its place by stating the core purpose and return value. However, it leans toward under-specification, lacking necessary details for a tool with no annotations or output schema. It is concise but not sufficiently informative.

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

Completeness2/5

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

Given the lack of annotations, output schema, and parameter descriptions, the description is incomplete. It does not cover parameter semantics, usage context, or behavioral details, leaving significant gaps for an agent to use the tool correctly.

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?

The input schema has 0% description coverage for its two parameters, and the description adds no additional meaning beyond the parameter names 'player_id' and 'story_id'. While the names are self-explanatory, the description fails to explain expected formats, constraints, or relationships between parameters.

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 'Bind a story to the player' and the return 'its opening scene', using specific verbs and resources. It distinguishes itself from siblings 'choose' (likely for making choices) and 'load_scene_image' (loading an image) by focusing on binding a story and returning the opening scene.

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 is provided on when to use this tool versus the siblings 'choose' or 'load_scene_image'. There is no context about prerequisites, typical use cases, or scenarios where alternative tools should be used instead.

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. 3 tool updatesv0.1.0
    • First observedchoose
    • First observedload_scene_image
    • First observedselect_story

TDQS

B3.1/5.0
Disambiguation5/5

Each tool has a distinct purpose: selecting a story, recording a choice, and loading a scene image. No overlap in functionality.

Naming Consistency4/5

All tool names use lowercase with underscores, but the structure varies: 'choose' is a single verb while others follow verb_noun pattern. The inconsistency is minor.

Tool Count5/5

With 3 tools, the server is well-scoped for a simple novel game interface. Each tool serves a clear purpose without unnecessary bloat.

Completeness3/5

The basic interaction flow is covered, but missing tools like fetching story list, scene text, or saving progress leave notable gaps that agents may need to work around.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

  • A
    license
    B
    quality
    D
    maintenance
    A beginner-friendly Model Context Protocol (MCP) server that helps users understand MCP concepts, provides interactive examples, and lists available MCP servers. This server is designed to be a helpful companion for developers working with MCP. Also comes with a huge list of servers you can install.
    3
    14
    66
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server designed for learning and experimentation. It provides a foundational setup for developers to build, run, and debug MCP server implementations using Node.js.
    -

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/gotalab/mcp-novel-game-server'

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