ngmcp
Provides tools for reading and searching Norton Guide database files, including entry retrieval, menu navigation, full-text search, and link following.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ngmcp search for 'data types' in the Clipper guide"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Using uv (recommended)
The fastest and most modern way to install NGMCP is with uv:
uv tool install ngmcpIf 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 | shor on Windows:
powershell -ExecutionPolicy ByPass -c "irm https://uvx.sh/ngmcp/install.ps1 | iex"Using pipx
pipx install ngmcpRelated 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
commandandargsdepending on your installation method.
Configuration
Environment variable | Default | Description |
| (none) | Colon-separated list of directories to search for |
|
| Allow tools to open |
Available Tools
Tool | Description |
| Title, credits, magic, |
| Menu structure: title and prompt list for each menu |
| All entries with type, offset, line count, and first line of text |
| Full plain-text content of the entry at a given offset |
| Full plain-text Norton Guide source content of the entry at a given offset |
| Follow a short-entry link to the target long entry |
| Line-oriented full-text search through all entries |
| Full-body-oriented full-text search through all entries |
|
|
Hacking
See Contributing.md.
git clone https://github.com/davep/ngmcp
cd ngmcp
make setup
make checkallAvailable Tools
9 toolsbody_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
follow_linkA
Follow a link in a short entry and return the target long entry.
Short entries in a Norton Guide are index-style pages where each line links to a long entry. This tool loads the short entry at offset, reads the link on line, and returns the plain-text content of the target long entry.
Args: path: Absolute path to the .ng file. offset: Byte offset of the short entry within the guide. line: Zero-based line index within the short entry whose link to follow.
Returns: A dictionary containing:
- ``source_offset`` (int): Offset of the short (source) entry.
- ``source_line`` (int): Line index that was followed.
- ``link_text`` (str): The text of the link line.
- ``target_offset`` (int): Offset of the target long entry.
- ``lines`` (list[str]): Plain-text lines of the target long entry.
- ``see_also`` (list[dict]): See-also items of the target entry, each
with ``text`` and ``offset`` keys.Raises: FileNotFoundError: If path does not point to an existing file. ValueError: If the offset does not point to a short entry, if line is out of range, or if the link has no associated target offset.
Inputs: path (required), offset (required), line (required). Returns: object
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
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
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Read-only access to the My AI Guide directory of AI tools, repos, plugins, news and guides.
Bring your Knacco library into your AI tool: browse, search, read guides and download files.
Search and query nTop's knowledge base and engineering guides from AI applications.
Knowledge base for AI agents: search, read, tasks; write, correct, report outcomes via /mcp/write.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to explore, search, and read codebase repositories and API specifications efficiently, with support for file searching, content search via ripgrep, and reading API specs.14 npmISC
- AlicenseNot gradedqualityDmaintenanceEnables querying and exploring a bundled knowledge base through tools for manifest, table of contents, node retrieval, and full-text search.5 npm1MIT
- AlicenseAqualityDmaintenanceReads and searches GEDCOM 5.5.1 files, enabling AI agents to look up individuals, families, sources, and multimedia references in a family tree.10MIT