| 1 | from __future__ import annotations |
| 2 | |
| 3 | import argparse |
| 4 | import logging |
| 5 | import sys |
| 6 | |
| 7 | from mcp.server.transport_security import TransportSecuritySettings |
| 8 | |
| 9 | from yahoo_mcp_server.server import create_yahoo_mcp_server |
| 10 | from yahoo_mcp_server.settings import YahooMcpSettings |
| 11 | |
| 12 | |
| 13 | def main() -> None: |
| 14 | settings = YahooMcpSettings() |
| 15 | parser = argparse.ArgumentParser(description="First-party Yahoo Finance MCP server") |
| 16 | parser.add_argument( |
| 17 | "--transport", choices=("stdio", "streamable-http"), default=settings.transport |
| 18 | ) |
| 19 | args = parser.parse_args() |
| 20 | logging.basicConfig(level=logging.INFO, stream=sys.stderr, format="%(message)s") |
| 21 | server = create_yahoo_mcp_server(settings) |
| 22 | if args.transport == "stdio": |
| 23 | server.run("stdio") |
| 24 | return |
| 25 | server.run( |
| 26 | "streamable-http", |
| 27 | host=settings.host, |
| 28 | port=settings.port, |
| 29 | streamable_http_path=settings.http_path, |
| 30 | stateless_http=True, |
| 31 | json_response=True, |
| 32 | max_request_body_size=settings.max_request_body_bytes, |
| 33 | transport_security=TransportSecuritySettings( |
| 34 | enable_dns_rebinding_protection=True, |
| 35 | allowed_hosts=settings.allowed_hosts, |
| 36 | allowed_origins=settings.allowed_origins, |
| 37 | ), |
| 38 | ) |
| 39 | |
| 40 | |
| 41 | if __name__ == "__main__": |
| 42 | main() |