Documentation

server

FastMCP server for Context-Fabric.

This module defines the MCP server that exposes corpus operations to AI agents via the Model Context Protocol.

Transports: - stdio (default): For Claude Desktop and local MCP clients - sse (--sse PORT): Server-Sent Events for remote MCP clients (e.g., Cursor) - http (--http PORT): Streamable HTTP for production deployments

Tool Set (10 tools): Discovery: - list_corpora: List available corpora - describe_corpus: Corpus structure (node types, sections) - list_features: Browse features with optional node_type filter - describe_feature: Feature details with sample values - get_text_formats: Text encoding samples (cached) Search: - search: Pattern search with return_type (results/count/statistics/passages) - search_continue: Paginated search continuation - search_syntax_guide: Search syntax docs (section-based) Data Access: - get_passages: Batch section lookup - get_node_features: Batch feature lookup

Note: Usage guide is provided via MCP instructions field at connection time.

Functions

function
corpus_resource(corpus_name: str) str

Get corpus information.

Get corpus information. Returns detailed information about a loaded corpus including node types, features, and statistics.
Parameters
  • corpus_name: str
function
describe_corpus(corpus: str | None = None) dict[(str, Any)]

Get corpus structure overview.

Get corpus structure overview. Returns node types and section structure. Use list_features() to browse features, describe_feature() for details, get_text_formats() for encoding. Args: corpus: Corpus name (defaults to current corpus) Returns: Corpus overview including: - node_types: All node types with counts - sections: Section hierarchy levels
Parameters
  • corpus: str | None= None
function
describe_feature(feature: str | list[str], sample_limit: int = 20, corpus: str | None = None) dict[(str, Any)]

Get detailed info about one or more features.

Get detailed info about one or more features. Returns metadata, node_types, and sample values (by frequency). Use list_features() first to browse available features. Args: feature: Feature name or list of names (e.g., "sp" or ["sp", "vt"]) sample_limit: Max sample values per feature (default 20) corpus: Corpus name (defaults to current corpus) Returns: Feature details including: - name, kind, value_type, description - node_types: Which object types have this feature - unique_values: Count of unique values - sample_values: Top values by frequency with counts
Parameters
  • feature: str | list[str]
  • sample_limit: int= 20
  • corpus: str | None= None
function
features_resource(corpus_name: str) str

Get list of available features.

Get list of available features. Returns lists of node features and edge features available in the corpus.
Parameters
  • corpus_name: str
function
get_node_features(nodes: list[int], features: list[str], corpus: str | None = None) dict[(str, Any)]

Get feature values for a list of nodes.

Get feature values for a list of nodes. Batch lookup of feature values for multiple nodes. Args: nodes: List of node IDs features: List of feature names to retrieve corpus: Corpus name (defaults to current corpus) Returns: Feature values for each node.
Parameters
  • nodes: list[int]
  • features: list[str]
  • corpus: str | None= None
function
get_passages(sections: list[list[str | int]], limit: int = 50, lang: str = 'en', max_override: bool = False, corpus: str | None = None) dict[(str, Any)]

Get passages by section references.

Get passages by section references. Batch lookup of multiple sections at once. Args: sections: List of section references, e.g., [['Genesis', 1, 1], ['Exodus', 2, 3]] limit: Maximum sections to return (default 50) lang: ISO 639 language code for section names (e.g., 'en' for English book names) max_override: Bypass limit cap. May produce large responses - use judiciously. corpus: Corpus name (defaults to current corpus) Returns: List of passages with text and node information.
Parameters
  • sections: list[list[str | int]]
  • limit: int= 50
  • lang: str= 'en'
  • max_override: bool= False
  • corpus: str | None= None
function
get_text_formats(corpus: str | None = None) dict[(str, Any)]

Get text encoding samples showing original script and transliteration.

Get text encoding samples showing original script and transliteration. Returns format pairs with diverse samples. Use when constructing search queries that need specific text encodings. Results are cached per corpus. Args: corpus: Corpus name (defaults to current corpus) Returns: Text format information with sample pairs.
Parameters
  • corpus: str | None= None
function
list_corpora() dict[(str, Any)]

List all currently loaded corpora.

List all currently loaded corpora. Returns: Dictionary with 'corpora' list and 'current' corpus name.
function
list_features(kind: str = 'all', node_types: list[str] | None = None, corpus: str | None = None) dict[(str, Any)]

List features with optional filtering.

List features with optional filtering. Returns lightweight catalog for discovery. Use node_types to filter by object type. For full details with samples, use describe_feature(). Args: kind: Filter by "all", "node", or "edge" node_types: Filter to features for these types (e.g., ["word"]) corpus: Corpus name (defaults to current corpus) Returns: List of features with name, kind, value_type, description.
Parameters
  • kind: str= 'all'
  • node_types: list[str] | None= None
  • corpus: str | None= None
function
main() None

Run the MCP server with configurable transport.

function
node_resource(corpus_name: str, node_id: int) str

Get node information.

Get node information. Returns detailed information about a specific node including type, text, section reference, and slot positions.
Parameters
  • corpus_name: str
  • node_id: int
function
search_continue(cursor_id: str, offset: int = 0, limit: int = 100, max_override: bool = False) dict[(str, Any)]

Continue a paginated search using a cursor ID.

Continue a paginated search using a cursor ID. Use this to get additional pages of results from a previous search. Cursors expire after 5 minutes. Args: cursor_id: The cursor ID from a previous search offset: Number of results to skip limit: Maximum number of results to return (default 100) max_override: Bypass limit cap. May produce large responses - use judiciously. Returns: Next page of search results with updated cursor.
Parameters
  • cursor_id: str
  • offset: int= 0
  • limit: int= 100
  • max_override: bool= False
function
search_syntax_guide(section: str | None = None) dict[(str, Any)]

Get documentation on search template syntax.

Get documentation on search template syntax. Call without args for summary + available sections. Call with section name to get detailed content for that topic. Args: section: Optional section name (basics, structure, relations, quantifiers, examples). None returns overview. Returns: Without section: summary + list of available sections. With section: detailed content for that section.
Parameters
  • section: str | None= None
function
types_resource(corpus_name: str) str

Get node type information.

Get node type information. Returns information about all node types including counts and node ranges.
Parameters
  • corpus_name: str