finta-aurora-mcp 1.0.0__tar.gz → 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/PKG-INFO +1 -1
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp/__init__.py +1 -1
- finta_aurora_mcp-1.0.1/finta_aurora_mcp/auth.py +302 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp.egg-info/PKG-INFO +1 -1
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/pyproject.toml +1 -1
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/setup.py +1 -1
- finta_aurora_mcp-1.0.0/finta_aurora_mcp/auth.py +0 -105
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/MANIFEST.in +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/README.md +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp/fix_org_info.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp/mcp.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp.egg-info/SOURCES.txt +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp.egg-info/dependency_links.txt +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp.egg-info/requires.txt +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp.egg-info/top_level.txt +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/setup.cfg +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/__init__.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/addInvestorToTrackerTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/contactSupportTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/editInvestorTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/getInvestorTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/imageTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/pdfScraperTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/pineconeKnowledgeTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/pineconeResourceTool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/serpAPITool.py +0 -0
- {finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/tools/webScraperTool.py +0 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Aurora MCP Authentication
|
|
4
|
+
Simple OAuth login - opens browser and stores token.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
import webbrowser
|
|
10
|
+
import http.server
|
|
11
|
+
import socketserver
|
|
12
|
+
import urllib.parse
|
|
13
|
+
import json
|
|
14
|
+
import requests
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
FINTA_API_URL_STAGING = "https://us-central1-equity-token-stage.cloudfunctions.net"
|
|
18
|
+
FINTA_API_URL_PRODUCTION = "https://us-central1-equity-token.cloudfunctions.net"
|
|
19
|
+
|
|
20
|
+
def get_api_url():
|
|
21
|
+
"""Get API URL based on environment."""
|
|
22
|
+
use_staging = os.getenv("FINTA_STAGING", "true").lower() == "true"
|
|
23
|
+
return FINTA_API_URL_STAGING if use_staging else FINTA_API_URL_PRODUCTION
|
|
24
|
+
|
|
25
|
+
def get_token_path():
|
|
26
|
+
"""Get path to store token."""
|
|
27
|
+
return Path.home() / ".cursor" / "aurora_token.json"
|
|
28
|
+
|
|
29
|
+
def main():
|
|
30
|
+
print("Aurora MCP Authentication")
|
|
31
|
+
print("=" * 40)
|
|
32
|
+
print("Opening browser for login...\n")
|
|
33
|
+
|
|
34
|
+
api_url = get_api_url()
|
|
35
|
+
auth_url = (
|
|
36
|
+
f"{api_url}/auroraOAuthAuthorize?"
|
|
37
|
+
f"response_type=code&"
|
|
38
|
+
f"client_id=cursor&"
|
|
39
|
+
f"redirect_uri=http://localhost:8765/callback"
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
webbrowser.open(auth_url)
|
|
43
|
+
|
|
44
|
+
auth_success = False
|
|
45
|
+
auth_error = None
|
|
46
|
+
|
|
47
|
+
class CallbackHandler(http.server.SimpleHTTPRequestHandler):
|
|
48
|
+
def do_GET(self):
|
|
49
|
+
nonlocal auth_success, auth_error
|
|
50
|
+
|
|
51
|
+
query = urllib.parse.urlparse(self.path).query
|
|
52
|
+
params = urllib.parse.parse_qs(query)
|
|
53
|
+
|
|
54
|
+
if 'code' in params:
|
|
55
|
+
code = params['code'][0]
|
|
56
|
+
api_url = get_api_url()
|
|
57
|
+
|
|
58
|
+
try:
|
|
59
|
+
resp = requests.post(
|
|
60
|
+
f"{api_url}/auroraOAuthToken",
|
|
61
|
+
json={
|
|
62
|
+
"grant_type": "authorization_code",
|
|
63
|
+
"code": code,
|
|
64
|
+
"redirect_uri": "http://localhost:8765/callback"
|
|
65
|
+
},
|
|
66
|
+
timeout=10
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
if resp.status_code == 200:
|
|
70
|
+
token_data = resp.json()
|
|
71
|
+
access_token = token_data.get("access_token")
|
|
72
|
+
|
|
73
|
+
token_path = get_token_path()
|
|
74
|
+
token_path.parent.mkdir(exist_ok=True)
|
|
75
|
+
with open(token_path, 'w') as f:
|
|
76
|
+
json.dump(token_data, f, indent=2)
|
|
77
|
+
|
|
78
|
+
auth_success = True
|
|
79
|
+
|
|
80
|
+
self.send_response(200)
|
|
81
|
+
self.send_header('Content-type', 'text/html; charset=utf-8')
|
|
82
|
+
self.end_headers()
|
|
83
|
+
html = """<!DOCTYPE html>
|
|
84
|
+
<html>
|
|
85
|
+
<head>
|
|
86
|
+
<meta charset="UTF-8">
|
|
87
|
+
<title>Authentication Successful</title>
|
|
88
|
+
<style>
|
|
89
|
+
body {
|
|
90
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
91
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
92
|
+
color: white;
|
|
93
|
+
margin: 0;
|
|
94
|
+
padding: 0;
|
|
95
|
+
display: flex;
|
|
96
|
+
justify-content: center;
|
|
97
|
+
align-items: center;
|
|
98
|
+
min-height: 100vh;
|
|
99
|
+
}
|
|
100
|
+
.container {
|
|
101
|
+
text-align: center;
|
|
102
|
+
padding: 40px;
|
|
103
|
+
background: rgba(255, 255, 255, 0.1);
|
|
104
|
+
border-radius: 20px;
|
|
105
|
+
backdrop-filter: blur(10px);
|
|
106
|
+
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
|
|
107
|
+
}
|
|
108
|
+
h1 {
|
|
109
|
+
font-size: 2.5em;
|
|
110
|
+
margin-bottom: 20px;
|
|
111
|
+
}
|
|
112
|
+
p {
|
|
113
|
+
font-size: 1.2em;
|
|
114
|
+
margin: 10px 0;
|
|
115
|
+
}
|
|
116
|
+
.checkmark {
|
|
117
|
+
font-size: 4em;
|
|
118
|
+
margin-bottom: 20px;
|
|
119
|
+
}
|
|
120
|
+
</style>
|
|
121
|
+
</head>
|
|
122
|
+
<body>
|
|
123
|
+
<div class="container">
|
|
124
|
+
<div class="checkmark">✓</div>
|
|
125
|
+
<h1>Authentication Successful!</h1>
|
|
126
|
+
<p>Your token has been saved.</p>
|
|
127
|
+
<p>You can close this window now.</p>
|
|
128
|
+
<p><strong>Next step:</strong> Restart Cursor to use Aurora MCP.</p>
|
|
129
|
+
</div>
|
|
130
|
+
<script>
|
|
131
|
+
// Keep the page open for a few seconds so user can see the message
|
|
132
|
+
setTimeout(function() {
|
|
133
|
+
// Page will stay open, user can close manually
|
|
134
|
+
}, 5000);
|
|
135
|
+
</script>
|
|
136
|
+
</body>
|
|
137
|
+
</html>"""
|
|
138
|
+
self.wfile.write(html.encode('utf-8'))
|
|
139
|
+
print("\n✓ Authentication successful!")
|
|
140
|
+
print(f"✓ Token stored at: {token_path}")
|
|
141
|
+
print("\nRestart Cursor to use Aurora MCP.")
|
|
142
|
+
return
|
|
143
|
+
else:
|
|
144
|
+
error_msg = f"Failed to get token: {resp.status_code} - {resp.text}"
|
|
145
|
+
auth_error = error_msg
|
|
146
|
+
print(f"\n✗ {error_msg}")
|
|
147
|
+
self.send_response(200)
|
|
148
|
+
self.send_header('Content-type', 'text/html; charset=utf-8')
|
|
149
|
+
self.end_headers()
|
|
150
|
+
html = f"""<!DOCTYPE html>
|
|
151
|
+
<html>
|
|
152
|
+
<head>
|
|
153
|
+
<meta charset="UTF-8">
|
|
154
|
+
<title>Authentication Error</title>
|
|
155
|
+
<style>
|
|
156
|
+
body {{
|
|
157
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
158
|
+
background: #f5f5f5;
|
|
159
|
+
color: #333;
|
|
160
|
+
margin: 0;
|
|
161
|
+
padding: 40px;
|
|
162
|
+
text-align: center;
|
|
163
|
+
}}
|
|
164
|
+
.error {{
|
|
165
|
+
background: white;
|
|
166
|
+
padding: 40px;
|
|
167
|
+
border-radius: 10px;
|
|
168
|
+
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
169
|
+
max-width: 600px;
|
|
170
|
+
margin: 0 auto;
|
|
171
|
+
}}
|
|
172
|
+
h1 {{ color: #d32f2f; }}
|
|
173
|
+
</style>
|
|
174
|
+
</head>
|
|
175
|
+
<body>
|
|
176
|
+
<div class="error">
|
|
177
|
+
<h1>✗ Authentication Failed</h1>
|
|
178
|
+
<p>{error_msg}</p>
|
|
179
|
+
<p>Please try running <code>aurora-authenticate</code> again.</p>
|
|
180
|
+
</div>
|
|
181
|
+
</body>
|
|
182
|
+
</html>"""
|
|
183
|
+
self.wfile.write(html.encode('utf-8'))
|
|
184
|
+
return
|
|
185
|
+
except Exception as e:
|
|
186
|
+
error_msg = f"Error: {str(e)}"
|
|
187
|
+
auth_error = error_msg
|
|
188
|
+
print(f"\n✗ {error_msg}")
|
|
189
|
+
self.send_response(200)
|
|
190
|
+
self.send_header('Content-type', 'text/html; charset=utf-8')
|
|
191
|
+
self.end_headers()
|
|
192
|
+
html = f"""<!DOCTYPE html>
|
|
193
|
+
<html>
|
|
194
|
+
<head>
|
|
195
|
+
<meta charset="UTF-8">
|
|
196
|
+
<title>Authentication Error</title>
|
|
197
|
+
<style>
|
|
198
|
+
body {{
|
|
199
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
200
|
+
background: #f5f5f5;
|
|
201
|
+
color: #333;
|
|
202
|
+
margin: 0;
|
|
203
|
+
padding: 40px;
|
|
204
|
+
text-align: center;
|
|
205
|
+
}}
|
|
206
|
+
.error {{
|
|
207
|
+
background: white;
|
|
208
|
+
padding: 40px;
|
|
209
|
+
border-radius: 10px;
|
|
210
|
+
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
211
|
+
max-width: 600px;
|
|
212
|
+
margin: 0 auto;
|
|
213
|
+
}}
|
|
214
|
+
h1 {{ color: #d32f2f; }}
|
|
215
|
+
</style>
|
|
216
|
+
</head>
|
|
217
|
+
<body>
|
|
218
|
+
<div class="error">
|
|
219
|
+
<h1>✗ Authentication Error</h1>
|
|
220
|
+
<p>{error_msg}</p>
|
|
221
|
+
<p>Please try running <code>aurora-authenticate</code> again.</p>
|
|
222
|
+
</div>
|
|
223
|
+
</body>
|
|
224
|
+
</html>"""
|
|
225
|
+
self.wfile.write(html.encode('utf-8'))
|
|
226
|
+
return
|
|
227
|
+
|
|
228
|
+
# Default response for any other requests
|
|
229
|
+
self.send_response(200)
|
|
230
|
+
self.send_header('Content-type', 'text/html; charset=utf-8')
|
|
231
|
+
self.end_headers()
|
|
232
|
+
html = """<!DOCTYPE html>
|
|
233
|
+
<html>
|
|
234
|
+
<head>
|
|
235
|
+
<meta charset="UTF-8">
|
|
236
|
+
<title>Processing...</title>
|
|
237
|
+
<style>
|
|
238
|
+
body {
|
|
239
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
240
|
+
background: #f5f5f5;
|
|
241
|
+
color: #333;
|
|
242
|
+
margin: 0;
|
|
243
|
+
padding: 40px;
|
|
244
|
+
text-align: center;
|
|
245
|
+
}
|
|
246
|
+
.loading {
|
|
247
|
+
background: white;
|
|
248
|
+
padding: 40px;
|
|
249
|
+
border-radius: 10px;
|
|
250
|
+
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
251
|
+
max-width: 400px;
|
|
252
|
+
margin: 0 auto;
|
|
253
|
+
}
|
|
254
|
+
.spinner {
|
|
255
|
+
border: 4px solid #f3f3f3;
|
|
256
|
+
border-top: 4px solid #667eea;
|
|
257
|
+
border-radius: 50%;
|
|
258
|
+
width: 40px;
|
|
259
|
+
height: 40px;
|
|
260
|
+
animation: spin 1s linear infinite;
|
|
261
|
+
margin: 20px auto;
|
|
262
|
+
}
|
|
263
|
+
@keyframes spin {
|
|
264
|
+
0% { transform: rotate(0deg); }
|
|
265
|
+
100% { transform: rotate(360deg); }
|
|
266
|
+
}
|
|
267
|
+
</style>
|
|
268
|
+
</head>
|
|
269
|
+
<body>
|
|
270
|
+
<div class="loading">
|
|
271
|
+
<div class="spinner"></div>
|
|
272
|
+
<h2>Processing authentication...</h2>
|
|
273
|
+
<p>Please wait...</p>
|
|
274
|
+
</div>
|
|
275
|
+
</body>
|
|
276
|
+
</html>"""
|
|
277
|
+
self.wfile.write(html.encode('utf-8'))
|
|
278
|
+
|
|
279
|
+
def log_message(self, *args):
|
|
280
|
+
pass
|
|
281
|
+
|
|
282
|
+
with socketserver.TCPServer(("", 8765), CallbackHandler) as httpd:
|
|
283
|
+
print("Waiting for authentication callback...")
|
|
284
|
+
print("(Press Ctrl+C to cancel)\n")
|
|
285
|
+
try:
|
|
286
|
+
# Handle multiple requests (browser might make multiple requests)
|
|
287
|
+
# Keep server open for 30 seconds to handle any reloads
|
|
288
|
+
import time
|
|
289
|
+
start_time = time.time()
|
|
290
|
+
while time.time() - start_time < 30:
|
|
291
|
+
httpd.timeout = 1
|
|
292
|
+
httpd.handle_request()
|
|
293
|
+
if auth_success or auth_error:
|
|
294
|
+
# Give browser time to display the page
|
|
295
|
+
time.sleep(2)
|
|
296
|
+
break
|
|
297
|
+
except KeyboardInterrupt:
|
|
298
|
+
print("\n\n✗ Authentication cancelled.")
|
|
299
|
+
sys.exit(1)
|
|
300
|
+
|
|
301
|
+
if __name__ == "__main__":
|
|
302
|
+
main()
|
|
@@ -10,7 +10,7 @@ if readme_file.exists():
|
|
|
10
10
|
|
|
11
11
|
setup(
|
|
12
12
|
name="finta-aurora-mcp",
|
|
13
|
-
version="1.0.
|
|
13
|
+
version="1.0.1",
|
|
14
14
|
description="Aurora MCP client for Cursor/Claude Desktop - Chat with Finta's AI assistant",
|
|
15
15
|
long_description=long_description,
|
|
16
16
|
long_description_content_type="text/markdown",
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Aurora MCP Authentication
|
|
4
|
-
Simple OAuth login - opens browser and stores token.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import os
|
|
8
|
-
import sys
|
|
9
|
-
import webbrowser
|
|
10
|
-
import http.server
|
|
11
|
-
import socketserver
|
|
12
|
-
import urllib.parse
|
|
13
|
-
import json
|
|
14
|
-
import requests
|
|
15
|
-
from pathlib import Path
|
|
16
|
-
|
|
17
|
-
FINTA_API_URL_STAGING = "https://us-central1-equity-token-stage.cloudfunctions.net"
|
|
18
|
-
FINTA_API_URL_PRODUCTION = "https://us-central1-equity-token.cloudfunctions.net"
|
|
19
|
-
|
|
20
|
-
def get_api_url():
|
|
21
|
-
"""Get API URL based on environment."""
|
|
22
|
-
use_staging = os.getenv("FINTA_STAGING", "true").lower() == "true"
|
|
23
|
-
return FINTA_API_URL_STAGING if use_staging else FINTA_API_URL_PRODUCTION
|
|
24
|
-
|
|
25
|
-
def get_token_path():
|
|
26
|
-
"""Get path to store token."""
|
|
27
|
-
return Path.home() / ".cursor" / "aurora_token.json"
|
|
28
|
-
|
|
29
|
-
def main():
|
|
30
|
-
print("Aurora MCP Authentication")
|
|
31
|
-
print("=" * 40)
|
|
32
|
-
print("Opening browser for login...\n")
|
|
33
|
-
|
|
34
|
-
api_url = get_api_url()
|
|
35
|
-
auth_url = (
|
|
36
|
-
f"{api_url}/auroraOAuthAuthorize?"
|
|
37
|
-
f"response_type=code&"
|
|
38
|
-
f"client_id=cursor&"
|
|
39
|
-
f"redirect_uri=http://localhost:8765/callback"
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
webbrowser.open(auth_url)
|
|
43
|
-
|
|
44
|
-
class CallbackHandler(http.server.SimpleHTTPRequestHandler):
|
|
45
|
-
def do_GET(self):
|
|
46
|
-
query = urllib.parse.urlparse(self.path).query
|
|
47
|
-
params = urllib.parse.parse_qs(query)
|
|
48
|
-
|
|
49
|
-
if 'code' in params:
|
|
50
|
-
code = params['code'][0]
|
|
51
|
-
api_url = get_api_url()
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
resp = requests.post(
|
|
55
|
-
f"{api_url}/auroraOAuthToken",
|
|
56
|
-
json={
|
|
57
|
-
"grant_type": "authorization_code",
|
|
58
|
-
"code": code,
|
|
59
|
-
"redirect_uri": "http://localhost:8765/callback"
|
|
60
|
-
},
|
|
61
|
-
timeout=10
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
if resp.status_code == 200:
|
|
65
|
-
token_data = resp.json()
|
|
66
|
-
access_token = token_data.get("access_token")
|
|
67
|
-
|
|
68
|
-
token_path = get_token_path()
|
|
69
|
-
token_path.parent.mkdir(exist_ok=True)
|
|
70
|
-
with open(token_path, 'w') as f:
|
|
71
|
-
json.dump(token_data, f, indent=2)
|
|
72
|
-
|
|
73
|
-
self.send_response(200)
|
|
74
|
-
self.send_header('Content-type', 'text/html; charset=utf-8')
|
|
75
|
-
self.end_headers()
|
|
76
|
-
html = """<html><body style="font-family: system-ui; padding: 40px; text-align: center;"><h1>Authentication Successful!</h1><p>Token has been stored.</p><p>You can close this window and restart Cursor.</p></body></html>"""
|
|
77
|
-
self.wfile.write(html.encode('utf-8'))
|
|
78
|
-
print("\n✓ Authentication successful!")
|
|
79
|
-
print(f"✓ Token stored at: {token_path}")
|
|
80
|
-
print("\nRestart Cursor to use Aurora MCP.")
|
|
81
|
-
return
|
|
82
|
-
else:
|
|
83
|
-
print(f"\n✗ Failed to get token: {resp.status_code} - {resp.text}")
|
|
84
|
-
except Exception as e:
|
|
85
|
-
print(f"\n✗ Error: {e}")
|
|
86
|
-
|
|
87
|
-
self.send_response(200)
|
|
88
|
-
self.send_header('Content-type', 'text/html')
|
|
89
|
-
self.end_headers()
|
|
90
|
-
self.wfile.write(b"<h1>Processing...</h1>")
|
|
91
|
-
|
|
92
|
-
def log_message(self, *args):
|
|
93
|
-
pass
|
|
94
|
-
|
|
95
|
-
with socketserver.TCPServer(("", 8765), CallbackHandler) as httpd:
|
|
96
|
-
print("Waiting for authentication callback...")
|
|
97
|
-
print("(Press Ctrl+C to cancel)\n")
|
|
98
|
-
try:
|
|
99
|
-
httpd.handle_request()
|
|
100
|
-
except KeyboardInterrupt:
|
|
101
|
-
print("\n\n✗ Authentication cancelled.")
|
|
102
|
-
sys.exit(1)
|
|
103
|
-
|
|
104
|
-
if __name__ == "__main__":
|
|
105
|
-
main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{finta_aurora_mcp-1.0.0 → finta_aurora_mcp-1.0.1}/finta_aurora_mcp.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|