Data Models
Authoritative, auto-generated reference for the Pydantic models that define tool
inputs and outputs. These are generated directly from
gopher_mcp.models,
so they never drift from the code. For usage examples and error-handling
recipes, see the API Reference.
Request Models
gopher_mcp.models.GopherFetchRequest
Bases: BaseModel
Request model for gopher.fetch tool.
url
class-attribute
instance-attribute
url: str = Field(..., description='Gopher URL to fetch (e.g., gopher://gopher.floodgap.com/1/)', examples=['gopher://gopher.floodgap.com/1/', 'gopher://gopher.floodgap.com/0/about.txt'])
validate_gopher_url
classmethod
Validate that the URL is a proper Gopher URL.
Source code in src/gopher_mcp/models.py
gopher_mcp.models.GeminiFetchRequest
Bases: BaseModel
Request model for gemini_fetch tool.
url
class-attribute
instance-attribute
url: str = Field(..., description='Gemini URL to fetch (e.g., gemini://gemini.circumlunar.space/)', examples=['gemini://gemini.circumlunar.space/', 'gemini://gemini.circumlunar.space/docs/specification.gmi'])
validate_gemini_url
classmethod
Validate that the URL is a proper Gemini URL.
Source code in src/gopher_mcp/models.py
Gopher Result Models
gopher_mcp.models.GopherMenuItem
Bases: BaseModel
Model for a single Gopher menu item.
type
class-attribute
instance-attribute
title
class-attribute
instance-attribute
selector
class-attribute
instance-attribute
host
class-attribute
instance-attribute
port
class-attribute
instance-attribute
gopher_mcp.models.MenuResult
Bases: BaseModel
Result model for Gopher menu responses.
items
class-attribute
instance-attribute
items: list[GopherMenuItem] = Field(..., description='List of menu items')
gopher_mcp.models.TextResult
Bases: BaseModel
Result model for Gopher text responses.
gopher_mcp.models.BinaryResult
Bases: BaseModel
Result model for Gopher binary responses.
gopher_mcp.models.ErrorResult
Bases: BaseModel
Result model for error responses.
error
class-attribute
instance-attribute
Gemini Result Models
gopher_mcp.models.GeminiSuccessResult
Bases: BaseModel
Result model for a successful Gemini response carrying TEXT content.
Binary success responses use :class:GeminiBinaryResult (metadata only), so
content is always decoded text here.
mime_type
class-attribute
instance-attribute
mime_type: GeminiMimeType = Field(..., alias='mimeType', description='Content MIME type')
content
class-attribute
instance-attribute
size
class-attribute
instance-attribute
gopher_mcp.models.GeminiBinaryResult
Bases: BaseModel
Result model for a successful BINARY Gemini response (metadata only).
Mirrors the Gopher :class:BinaryResult: the raw bytes are NOT returned to
the model. A 1 MB body is ~1.4M base64 characters (~350k tokens), so
inlining it would flood the context for content the model can't render
anyway. The consumer gets the size and detected MIME type and can fetch the
resource directly if it genuinely needs the bytes.
mime_type
class-attribute
instance-attribute
mime_type: GeminiMimeType = Field(..., alias='mimeType', description='Detected content MIME type')
size
class-attribute
instance-attribute
gopher_mcp.models.GeminiGemtextResult
Bases: BaseModel
Result model for gemtext content responses.
document
class-attribute
instance-attribute
document: GemtextDocument = Field(..., description='Parsed gemtext document')
raw_content
class-attribute
instance-attribute
charset
class-attribute
instance-attribute
gopher_mcp.models.GeminiInputResult
Bases: BaseModel
Result model for input request responses (status 10/11).
sensitive
class-attribute
instance-attribute
gopher_mcp.models.GeminiRedirectResult
Bases: BaseModel
Result model for redirect responses (status 30/31).
new_url
class-attribute
instance-attribute
permanent
class-attribute
instance-attribute
gopher_mcp.models.GeminiErrorResult
Bases: BaseModel
Result model for error responses.
error
class-attribute
instance-attribute
gopher_mcp.models.GeminiCertificateResult
Bases: BaseModel
Result model for certificate request responses (status 60-62).
message
class-attribute
instance-attribute
status
class-attribute
instance-attribute
status: int = Field(default=60, ge=60, le=69, description='Gemini certificate status code: 60 required, 61 not authorized, 62 not valid')
Gemtext Document Models
gopher_mcp.models.GemtextDocument
Bases: BaseModel
Model for parsed gemtext document.
lines
class-attribute
instance-attribute
lines: list[GemtextLine] = Field(..., description='Document lines')
links
class-attribute
instance-attribute
links: list[GemtextLink] = Field(default_factory=list, description='Extracted links')
content_summary
property
Get summary of content types for LLM consumption.
heading_hierarchy
property
Get document heading structure for navigation.
gopher_mcp.models.GemtextLine
Bases: BaseModel
Model for a single line in gemtext format.
type
class-attribute
instance-attribute
type: GemtextLineType = Field(..., description='Type of gemtext line')
link
class-attribute
instance-attribute
link: GemtextLink | None = Field(None, description='Link data (for link lines)')
level
class-attribute
instance-attribute
alt_text
class-attribute
instance-attribute
heading
class-attribute
instance-attribute
heading: GemtextHeading | None = Field(None, description='Heading data (for heading lines)')
list_item
class-attribute
instance-attribute
list_item: GemtextList | None = Field(None, description='List data (for list lines)')
quote
class-attribute
instance-attribute
quote: GemtextQuote | None = Field(None, description='Quote data (for quote lines)')
preformat
class-attribute
instance-attribute
preformat: GemtextPreformat | None = Field(None, description='Preformat data (for preformat lines)')
gopher_mcp.models.GemtextLink
Bases: BaseModel
Model for gemtext link lines.
url
class-attribute
instance-attribute
text
class-attribute
instance-attribute
is_external
property
Whether the link points outside the current capsule.
External links carry a URL scheme (gemini://, https://,
mailto: ...) or are protocol-relative (//host/...). Scheme-less
relative links (foo.gmi, /abs, ./page) are internal.
validate_url_not_empty
classmethod
gopher_mcp.models.GemtextHeading
Bases: BaseModel
Model for gemtext heading lines.
level
class-attribute
instance-attribute
gopher_mcp.models.GemtextList
gopher_mcp.models.GemtextQuote
gopher_mcp.models.GemtextPreformat
Bases: BaseModel
Model for gemtext preformat content.
content
class-attribute
instance-attribute
alt_text
class-attribute
instance-attribute
is_toggle
class-attribute
instance-attribute
language
class-attribute
instance-attribute
gopher_mcp.models.GemtextLineType
Bases: str, Enum
Types of lines in gemtext format.
MIME and Protocol Types
gopher_mcp.models.GeminiMimeType
Bases: BaseModel
Model for Gemini MIME type parsing.
type
class-attribute
instance-attribute
subtype
class-attribute
instance-attribute
charset
class-attribute
instance-attribute
lang
class-attribute
instance-attribute
supports_charset
get_file_extension
Get common file extension for this MIME type.
Source code in src/gopher_mcp/models.py
gopher_mcp.models.GeminiStatusCode
Bases: IntEnum
Gemini protocol status codes.
gopher_mcp.models.GeminiResponse
Bases: BaseModel
Base model for Gemini protocol responses.
status
class-attribute
instance-attribute
status: GeminiStatusCode | int = Field(..., description='Gemini status code')
meta
class-attribute
instance-attribute
body
class-attribute
instance-attribute
validate_meta_length
classmethod
Validate meta field length (reasonable limit).
URL Models
gopher_mcp.models.GopherURL
Bases: BaseModel
Model for parsed Gopher URLs.
gopher_type
class-attribute
instance-attribute
selector
class-attribute
instance-attribute
search
class-attribute
instance-attribute
validate_port
classmethod
validate_gopher_type
classmethod
Validate Gopher type is a single character.
validate_host
classmethod
Validate hostname is not empty (mirrors GeminiURL).
gopher_mcp.models.GeminiURL
Bases: BaseModel
Model for parsed Gemini URLs.
Based on the gemini://<host>[:<port>][/<path>][?<query>] format.
host
class-attribute
instance-attribute
port
class-attribute
instance-attribute
query
class-attribute
instance-attribute
validate_port
classmethod
validate_host
classmethod
Caching and Security Models
gopher_mcp.models.CacheEntry
Bases: _BaseCacheEntry[GopherFetchResponse]
Model for Gopher cache entries.
value
class-attribute
instance-attribute
timestamp
class-attribute
instance-attribute
gopher_mcp.models.GeminiCacheEntry
Bases: _BaseCacheEntry[GeminiFetchResponse]
Model for Gemini cache entries.
value
class-attribute
instance-attribute
timestamp
class-attribute
instance-attribute
gopher_mcp.models.GeminiCertificateInfo
Bases: BaseModel
Model for client certificate information.
fingerprint
class-attribute
instance-attribute
subject
class-attribute
instance-attribute
issuer
class-attribute
instance-attribute
not_before
class-attribute
instance-attribute
not_after
class-attribute
instance-attribute
port
class-attribute
instance-attribute
gopher_mcp.models.TOFUEntry
Bases: BaseModel
Model for Trust-on-First-Use certificate storage.