Skip to main content
Glama

Wikipedia MCP Server

__main__.py6.2 kB
""" Main entry point for the Wikipedia MCP server. """ import argparse import logging import sys import os from dotenv import load_dotenv from wikipedia_mcp.server import create_server # Load environment variables from .env file if it exists load_dotenv() def main(): """Run the Wikipedia MCP server.""" class LanguageAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, values) setattr(namespace, '_language_explicitly_set', True) parser = argparse.ArgumentParser( description="Wikipedia MCP Server", formatter_class=argparse.RawTextHelpFormatter, ) parser.add_argument( "--log-level", type=str, default="INFO", choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], help="Logging level" ) parser.add_argument( "--transport", type=str, default="stdio", choices=["stdio", "sse"], help="Transport protocol for MCP communication (stdio for Claude Desktop, sse for HTTP streaming)" ) parser.add_argument( "--language", "-l", type=str, default="en", action=LanguageAction, help="Language code for Wikipedia (e.g., en, ja, es, zh-hans). Default: en" ) parser.add_argument( "--country", "-c", type=str, help="Country/locale code for Wikipedia (e.g., US, CN, TW, Japan). Overrides --language if provided. See --list-countries for supported countries." ) parser.add_argument( "--list-countries", action="store_true", help="List all supported country/locale codes and exit" ) parser.add_argument( "--port", type=int, default=8000, help="Port for SSE transport (default: 8000, optional)" ) parser.add_argument( "--host", type=str, default="127.0.0.1", help="Host to bind SSE server to (default: 127.0.0.1, use 0.0.0.0 for all interfaces)" ) parser.add_argument( "--enable-cache", action="store_true", help="Enable caching for Wikipedia API calls (optional)" ) parser.add_argument( "--access-token", type=str, help="Access token for Wikipedia API (optional, can also be set via WIKIPEDIA_ACCESS_TOKEN environment variable)" ) args = parser.parse_args() # Handle --list-countries if args.list_countries: from wikipedia_mcp.wikipedia_client import WikipediaClient client = WikipediaClient() print("Supported Country/Locale Codes:") print("=" * 40) # Group by language for better readability country_by_lang = {} for country, lang in client.COUNTRY_TO_LANGUAGE.items(): if lang not in country_by_lang: country_by_lang[lang] = [] country_by_lang[lang].append(country) # Sort languages and show examples for lang in sorted(country_by_lang.keys()): countries = country_by_lang[lang] # Show up to 5 country codes per language country_examples = countries[:5] if len(countries) > 5: country_examples.append(f"... (+{len(countries) - 5} more)") print(f"{lang:>6}: {', '.join(country_examples)}") print("\nExamples:") print(" wikipedia-mcp --country US # English (United States)") print(" wikipedia-mcp --country CN # Chinese Simplified (China)") print(" wikipedia-mcp --country TW # Chinese Traditional (Taiwan)") print(" wikipedia-mcp --country Japan # Japanese") return # Validate that both --language and --country are not provided (when language is explicitly set) if args.country and getattr(args, '_language_explicitly_set', False): print("Error: Cannot specify both --language and --country. Use one or the other.") parser.print_help() return # Configure logging - use basicConfig for simplicity but ensure it goes to stderr logging.basicConfig( level=getattr(logging, args.log_level.upper()), format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", stream=sys.stderr, force=True # Override any existing basicConfig ) logger = logging.getLogger(__name__) # Get access token from argument or environment variable access_token = args.access_token or os.getenv('WIKIPEDIA_ACCESS_TOKEN') # Create and start the server try: server = create_server(language=args.language, country=args.country, enable_cache=args.enable_cache, access_token=access_token) except ValueError as e: logger.error("Configuration error: %s", e) print(f"Error: {e}") print("\nUse --list-countries to see supported country codes.") return # Log startup information using our configured logger if args.country: logger.info("Starting Wikipedia MCP server with %s transport for country: %s", args.transport, args.country) else: logger.info("Starting Wikipedia MCP server with %s transport for language: %s", args.transport, args.language) if args.transport != "stdio": config_template = """ { "mcpServers": { "wikipedia": { "command": "wikipedia-mcp" } } } """ logger.info("To use with Claude Desktop, configure claude_desktop_config.json with:%s", config_template) else: logger.info("Using stdio transport - suppressing direct stdout messages for MCP communication.") logger.info("To use with Claude Desktop, ensure 'wikipedia-mcp' command is in your claude_desktop_config.json.") if args.transport == "sse": logger.info("Starting SSE server on %s:%d", args.host, args.port) server.run(transport=args.transport, port=args.port, host=args.host) else: server.run(transport=args.transport) if __name__ == "__main__": main()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Rudra-ravi/wikipedia-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server