All checks were successful
Build and Push Docker Image / build (push) Successful in 30s
84 lines
2.7 KiB
Python
Executable File
84 lines
2.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Helper script to upload cookies.json to the Schwab MCP Server.
|
|
Usage: python3 upload_cookies.py <path_to_cookies.json> [mcp_url]
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
import json
|
|
import httpx
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print("Usage: python3 upload_cookies.py <path_to_cookies.json> [mcp_url]")
|
|
print("\nDefault mcp_url is https://schwab-mcp.ext.ben.io")
|
|
sys.exit(1)
|
|
|
|
cookies_path = sys.argv[1]
|
|
# Standard deployment URL based on deployment plan conventions
|
|
mcp_base_url = sys.argv[2] if len(sys.argv) > 2 else os.getenv("SCHWAB_MCP_URL", "https://schwab-mcp.ext.ben.io")
|
|
|
|
# FastMCP SSE transport typically provides a message endpoint.
|
|
# For a simple direct call, we'll hit the /mcp endpoint if the server supports direct JSON-RPC POSTs,
|
|
# otherwise we'll inform the user.
|
|
mcp_endpoint = f"{mcp_base_url.rstrip('/')}/mcp"
|
|
|
|
if not os.path.exists(cookies_path):
|
|
print(f"Error: File not found: {cookies_path}")
|
|
sys.exit(1)
|
|
|
|
try:
|
|
with open(cookies_path, 'r') as f:
|
|
cookies_json = f.read()
|
|
# Validate JSON structure
|
|
json.loads(cookies_json)
|
|
except json.JSONDecodeError:
|
|
print(f"Error: {cookies_path} is not valid JSON.")
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print(f"Error reading file: {e}")
|
|
sys.exit(1)
|
|
|
|
payload = {
|
|
"jsonrpc": "2.0",
|
|
"id": 1,
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "upload_cookies",
|
|
"arguments": {
|
|
"cookies_json": cookies_json
|
|
}
|
|
}
|
|
}
|
|
|
|
print(f"Sending cookies to {mcp_endpoint}...")
|
|
|
|
try:
|
|
# Note: We use a POST to the /mcp endpoint.
|
|
# In SSE mode, the real endpoint is often dynamic, but many FastMCP
|
|
# wrappers handle direct POSTs for automation.
|
|
response = httpx.post(mcp_endpoint, json=payload, timeout=60.0)
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
if "error" in result:
|
|
print(f"Server returned an error: {result['error']}")
|
|
else:
|
|
# result['result']['content'][0]['text'] usually contains the tool response
|
|
content = result.get("result", {}).get("content", [])
|
|
if content:
|
|
print(f"Response: {content[0].get('text')}")
|
|
else:
|
|
print("Cookies uploaded successfully (no content in response).")
|
|
else:
|
|
print(f"Request failed with status {response.status_code}")
|
|
print(response.text)
|
|
|
|
except Exception as e:
|
|
print(f"Error communicating with MCP server: {e}")
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|