Skip to main content
Glama

ngmcp

ngmcp is an MCP server that exposes Norton Guide database files to AI agents. It is built on top of the ngdb library and uses fastmcp as its MCP framework.

Norton Guides are a classic hypertext help-file format from the DOS era, used widely for Clipper and similar tool documentation.

Installation

NGMCP requires Python 3.12 or later.

The fastest and most modern way to install NGMCP is with uv:

uv tool install ngmcp

If you don't have uv installed you can use uvx.sh to perform the installation. For GNU/Linux or macOS or similar:

curl -LsSf uvx.sh/ngmcp/install.sh | sh

or on Windows:

powershell -ExecutionPolicy ByPass -c "irm https://uvx.sh/ngmcp/install.ps1 | iex"

Using pipx

pipx install ngmcp

Related MCP server: HTTP Client MCP Server

Configuration

How you configure your agent to use the server will depend on the agent you're using. Generally the configuration to use will be:

{
  "mcpServers": {
    "ngmcp": {
      "command": "ngmcp",
      "args": [],
      "env": {
        "NGMCP_GUIDE_DIRS": "/path/to/your/ng/files"
      }
    }
  }
}

[!note] Adjust the command and args depending on your installation method.

Configuration

Environment variable

Default

Description

NGMCP_GUIDE_DIRS

(none)

Colon-separated list of directories to search for .ng files

NGMCP_ALLOW_ABSOLUTE_PATHS

false

Allow tools to open .ng files by absolute path

Available Tools

Tool

Description

get_guide_info

Title, credits, magic, made_with, menu count, and file size

list_menus

Menu structure: title and prompt list for each menu

list_entries

All entries with type, offset, line count, and first line of text

read_entry

Full plain-text content of the entry at a given offset

read_entry_source

Full plain-text Norton Guide source content of the entry at a given offset

follow_link

Follow a short-entry link to the target long entry

line_search_guide

Line-oriented full-text search through all entries

body_search_guide

Full-body-oriented full-text search through all entries

list_guide_files

.ng files in the configured guide directories

Hacking

See Contributing.md.

git clone https://github.com/davep/ngmcp
cd ngmcp
make setup
make checkall

Available Tools

9 tools
body_search_guideA

Search all entries in a Norton Guide for a query string anywhere in the body.

This is similar to line_search_guide but returns the entire entry content for any entry that contains a match, rather than just the matching lines.

The search is also done on the whole body, with lines joined using a space.

Args: path: Absolute path to the .ng file. query: The text string to search for. case_sensitive: When True, the search is case-sensitive. Defaults to False.

Returns: A list of match dictionaries. Each dictionary contains:

- ``offset`` (int): Byte offset of the matching entry.
- ``type`` (str): ``"short"`` or ``"long"``.
- ``lines`` (list[str]): Plain-text lines of the entry.

Raises: FileNotFoundError: If path does not point to an existing file.

Inputs: path (required), query (required), case_sensitive. Returns: result

get_guide_infoA

Return metadata for a Norton Guide database file.

Args: path: Absolute path to the .ng file.

Returns: A dictionary with the following keys:

- ``path`` (str): Resolved path to the guide.
- ``title`` (str): Guide title.
- ``credits`` (list[str]): Up to five credit lines.
- ``magic`` (str): Two-character magic marker (``"NG"`` or ``"EH"``).
- ``made_with`` (str): Tool used to build the guide.
- ``menu_count`` (int): Number of menus in the guide.
- ``file_size`` (int): File size in bytes.
- ``is_valid`` (bool): Whether the file is a recognised Norton Guide.

Raises: FileNotFoundError: If path does not point to an existing file.

Inputs: path (required). Returns: object

line_search_guideA

Search all entries in a Norton Guide for lines matching a query string.

The search is performed on plain text (markup stripped) and returns all entries that contain at least one matching line.

Args: path: Absolute path to the .ng file. query: The text string to search for. case_sensitive: When True, the search is case-sensitive. Defaults to False.

Returns: A list of match dictionaries. Each dictionary contains:

- ``offset`` (int): Byte offset of the matching entry.
- ``type`` (str): ``"short"`` or ``"long"``.
- ``matching_lines`` (list[dict]): Each item has:

  - ``line_index`` (int): Zero-based line number within the entry.
  - ``text`` (str): Plain-text content of the matching line.

Raises: FileNotFoundError: If path does not point to an existing file.

Inputs: path (required), query (required), case_sensitive. Returns: result

list_entriesA

List all entries in a Norton Guide database file.

Args: path: Absolute path to the .ng file.

Returns: A list of entry summary dictionaries. Each dictionary contains:

- ``offset`` (int): Byte offset of the entry within the guide.
- ``type`` (str): Entry type — ``"short"`` or ``"long"``.
- ``line_count`` (int): Number of lines in the entry.
- ``first_line`` (str): Plain-text content of the first line, or an
  empty string if the entry contains no lines.

Raises: FileNotFoundError: If path does not point to an existing file.

Inputs: path (required). Returns: result

list_guide_filesA

List Norton Guide (.ng) files available to the server.

Args: directory: Optional directory path to restrict the listing to. When omitted all configured guide directories are searched.

Returns: A sorted list of file-info dictionaries, each containing:

- ``path`` (str): Absolute path to the .ng file.
- ``name`` (str): Filename (without directory).
- ``size`` (int): File size in bytes.

Raises: FileNotFoundError: If directory is provided but does not exist. PermissionError: If directory is outside the configured guide dirs and allow_absolute_paths is False.

Inputs: directory. Returns: result

list_menusA

Return the menu structure of a Norton Guide database file.

Each menu in the guide is returned as a dictionary describing its title, the list of prompt strings, and the guide offsets associated with each prompt.

Args: path: Absolute path to the .ng file.

Returns: A list of menu dictionaries. Each dictionary contains:

- ``title`` (str): The menu title.
- ``prompts`` (list[str]): The menu prompt strings.
- ``offsets`` (list[int]): The guide offset for each prompt.

Raises: FileNotFoundError: If path does not point to an existing file.

Inputs: path (required). Returns: result

read_entryA

Return the full plain-text content of the entry at a given offset.

Args: path: Absolute path to the .ng file. offset: Byte offset of the entry within the guide, as returned by list_entries or list_menus.

Returns: A dictionary containing:

- ``offset`` (int): The entry's offset.
- ``type`` (str): ``"short"`` or ``"long"``.
- ``lines`` (list[str]): Plain-text lines of the entry.
- ``see_also`` (list[dict]): For long entries only — each item has
  ``text`` (str) and ``offset`` (int) keys.  Empty list for short
  entries.

Raises: FileNotFoundError: If path does not point to an existing file. ValueError: If the offset does not point to a valid entry.

Inputs: path (required), offset (required). Returns: object

read_entry_sourceA

Return the raw source lines of the entry at a given offset.

Args: path: Absolute path to the .ng file. offset: Byte offset of the entry within the guide, as returned by list_entries or list_menus.

Returns: A dictionary containing:

- ``offset`` (int): The entry's offset.
- ``type`` (str): ``"short"`` or ``"long"``.
- ``lines`` (list[str]): Raw source lines of the entry, as strings.
- ``see_also`` (list[dict]): For long entries only — each item has
  ``text`` (str) and ``offset`` (int) keys.  Empty list for short
  entries.

Inputs: path (required), offset (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 9 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: searching by body vs line, reading raw vs parsed, listing entries vs files vs menus, and following links. No two tools overlap in functionality.

    Naming Consistency4/5

    Tool names use snake_case and are descriptive, but they employ different verb patterns: list_, get_, read_, search_ and follow_. While each group is consistent internally, the overall pattern is not uniform.

    Tool Count5/5

    With 9 tools, the set is well-scoped for exploring Norton Guide databases. It covers all necessary operations (listing, reading, searching, linking, metadata) without being excessive.

    Completeness5/5

    The tool surface covers all expected interactions with a read-only Norton Guide: browsing by lists and menus, full-text search, reading entries (both plain and raw), following links, and retrieving guide metadata. No obvious gaps.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to read and navigate EPUB files through 13 specialized tools for pagination, full-text search, metadata access, and footnote resolution. Supports session-based reading with table of contents navigation and chapter summaries.
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Reads and searches GEDCOM 5.5.1 files, enabling AI agents to look up individuals, families, sources, and multimedia references in a family tree.
      10
      MIT