Add local helper script for cookie uploading
All checks were successful
Build and Push Docker Image / build (push) Successful in 30s
All checks were successful
Build and Push Docker Image / build (push) Successful in 30s
This commit is contained in:
83
scripts/upload_cookies.py
Executable file
83
scripts/upload_cookies.py
Executable file
@@ -0,0 +1,83 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user