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
corpus_resource(corpus_name: str) → strGet corpus information.
Parameters
corpus_name: str
describe_corpus(corpus: str | None = None) → dict[(str, Any)]Get corpus structure overview.
Parameters
corpus: str | None= None
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.
Parameters
feature: str | list[str]sample_limit: int= 20corpus: str | None= None
features_resource(corpus_name: str) → strGet list of available features.
Parameters
corpus_name: str
get_node_features(nodes: list[int], features: list[str], corpus: str | None = None) → dict[(str, Any)]Get feature values for a list of nodes.
Parameters
nodes: list[int]features: list[str]corpus: str | None= None
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.
Parameters
sections: list[list[str | int]]limit: int= 50lang: str= 'en'max_override: bool= Falsecorpus: str | None= None
get_text_formats(corpus: str | None = None) → dict[(str, Any)]Get text encoding samples showing original script and transliteration.
Parameters
corpus: str | None= None
list_corpora() → dict[(str, Any)]List all currently loaded corpora.
list_features(kind: str = 'all', node_types: list[str] | None = None, corpus: str | None = None) → dict[(str, Any)]List features with optional filtering.
Parameters
kind: str= 'all'node_types: list[str] | None= Nonecorpus: str | None= None
main() → NoneRun the MCP server with configurable transport.
node_resource(corpus_name: str, node_id: int) → strGet node information.
Parameters
corpus_name: strnode_id: int
search(template: str, return_type: str = 'results', aggregate_features: list[str] | None = None, group_by_section: bool = False, top_n: int = 50, limit: int = 100, max_override: bool = False, corpus: str | None = None) → dict[(str, Any)]Search for patterns in the corpus.
Parameters
template: strreturn_type: str= 'results'aggregate_features: list[str] | None= Nonegroup_by_section: bool= Falsetop_n: int= 50limit: int= 100max_override: bool= Falsecorpus: str | None= None
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.
Parameters
cursor_id: stroffset: int= 0limit: int= 100max_override: bool= False
search_syntax_guide(section: str | None = None) → dict[(str, Any)]Get documentation on search template syntax.
Parameters
section: str | None= None
types_resource(corpus_name: str) → strGet node type information.
Parameters
corpus_name: str