"""Data models for Wikipedia MCP Server structured output."""
from typing import List
from pydantic import BaseModel, Field
class SearchResult(BaseModel):
"""A single search result from Wikipedia."""
title: str = Field(description="Article title")
snippet: str = Field(description="Brief description from search")
url: str = Field(description="Wikipedia article URL")
page_id: int = Field(description="Wikipedia page ID")
class WikipediaSearchResult(BaseModel):
"""Results from searching Wikipedia."""
results: List[SearchResult] = Field(description="List of search results")
query: str = Field(description="Original search query")
total_found: int = Field(description="Total number of results found")
class WikipediaArticle(BaseModel):
"""Full Wikipedia article content."""
title: str = Field(description="Article title")
content: str = Field(description="Full article text (cleaned)")
url: str = Field(description="Wikipedia article URL")
last_modified: str = Field(description="Last modification date (ISO format)")
page_id: int = Field(description="Wikipedia page ID")
word_count: int = Field(description="Approximate word count")
sections: List[str] = Field(description="Section headings for reference")
class WikipediaSummary(BaseModel):
"""Concise Wikipedia article summary."""
title: str = Field(description="Article title")
summary: str = Field(description="First paragraph + key points (max ~500 words)")
url: str = Field(description="Wikipedia article URL")
key_facts: List[str] = Field(description="3-5 bullet points of key information")
page_id: int = Field(description="Wikipedia page ID")
class RelatedArticle(BaseModel):
"""A related Wikipedia article."""
title: str = Field(description="Related article title")
snippet: str = Field(description="Brief description")
url: str = Field(description="Wikipedia article URL")
page_id: int = Field(description="Wikipedia page ID")
relation_type: str = Field(description="Type of relation: linked_from, linked_to, category, similar")
class RelatedArticles(BaseModel):
"""Articles related to a source article."""
source_title: str = Field(description="Original article title")
related: List[RelatedArticle] = Field(description="List of related articles")
total_found: int = Field(description="Total number of related articles found")