search
Find wiki pages across MediaWiki sites like Wikipedia and Fandom by entering search terms, returning relevant results for research and information gathering.
Instructions
Search for a wiki page. The shorter the request, the better, preferably containing only the main term to be searched. Args: query: The query to search for limit: The number of results to return Returns: A list of pages that match the query
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
Implementation Reference
- src/mediawiki_mcp_server/main.py:54-71 (handler)The main handler function for the 'search' MCP tool. It takes a query and limit, constructs API parameters, calls the make_request helper to query the MediaWiki search API, and returns the response.@mcp.tool() async def search(query: str, limit: int = 5): """ Search for a wiki page. The shorter the request, the better, preferably containing only the main term to be searched. Args: query: The query to search for limit: The number of results to return Returns: A list of pages that match the query """ path = "search/page" params = { "q": query, "limit": limit, } response = await make_request(path, params) return response
- Input schema defined by type hints (query: str, limit: int=5) and docstring describing parameters and return value.async def search(query: str, limit: int = 5): """ Search for a wiki page. The shorter the request, the better, preferably containing only the main term to be searched. Args: query: The query to search for limit: The number of results to return Returns: A list of pages that match the query """
- src/mediawiki_mcp_server/main.py:54-54 (registration)The @mcp.tool() decorator registers the search function as an MCP tool with FastMCP instance.@mcp.tool()
- Helper function to make HTTP requests to the MediaWiki API, handling proxies, redirects, and errors. Used by the search tool.async def make_request(path: str, params: dict) -> httpx.Response: headers = { "User-Agent": USER_AGENT, } url = config.base_url + config.path_prefix + path proxies = get_proxy_settings() async with httpx.AsyncClient(proxies=proxies, follow_redirects=True) as client: try: response = await client.get(url, headers=headers, params=params) if response.status_code in (301, 302, 303, 307, 308): final_response = await client.get( response.headers["Location"], headers=headers ) return final_response.json() return response.json() except httpx.HTTPStatusError as e: logger.error(e) return {"error": e}