67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
# Batch MCP Inbox Check Script
|
|
|
|
## Purpose
|
|
Check email inbox for all accounts in the pool via direct MCP API calls.
|
|
|
|
## Script (Python)
|
|
```python
|
|
import json, re, urllib.request, urllib.error
|
|
|
|
with open('C:/workspace/atxp-pool.json', 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
|
|
total_with_messages = 0
|
|
for i, acc in enumerate(data):
|
|
cs = acc.get('connection_string', '')
|
|
match = re.search(r'connection_token=([^&]+)', cs)
|
|
token = [REDACTED]) if match else None
|
|
acct_id = acc.get('atxp_account_id')
|
|
|
|
if not token:
|
|
[REDACTED]
|
|
|
|
auth = f'https://accounts.atxp.ai?connection_token={token}&account_id={acct_id}'
|
|
body = json.dumps({
|
|
'jsonrpc': '2.0',
|
|
'id': 1,
|
|
'method': 'tools/call',
|
|
'params': {'name': 'email_check_inbox', 'arguments': {}}
|
|
}).encode()
|
|
|
|
req = urllib.request.Request(
|
|
'https://email.mcp.atxp.ai/',
|
|
data=body,
|
|
headers={
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json, text/event-stream',
|
|
'Authorization': f'Bearer {auth}'
|
|
}
|
|
)
|
|
|
|
try:
|
|
with urllib.request.urlopen(req, timeout=10) as resp:
|
|
result = resp.read().decode()
|
|
for line in result.split('\n'):
|
|
if line.startswith('data: '):
|
|
msg_data = json.loads(line[6:])
|
|
content = msg_data.get('result', {}).get('content', [{}])[0].get('text', '{}')
|
|
inbox = json.loads(content)
|
|
msgs = inbox.get('messages', [])
|
|
if msgs:
|
|
total_with_messages += 1
|
|
print(f'{i}: {acct_id} | messages: {len(msgs)}')
|
|
for m in msgs[:2]:
|
|
print(f' - {m.get("subject", "no subject")[:50]} from {m.get("from", "unknown")}')
|
|
except Exception as e:
|
|
pass
|
|
|
|
print(f'\nTotal accounts with messages: {total_with_messages} / {len(data)}')
|
|
```
|
|
|
|
## Notes
|
|
- Requires `Accept: application/json, text/event-stream` header
|
|
- Response is SSE format: `event: message\ndata: {...}`
|
|
- Works for all account types (main and agent)
|
|
- FREE operation (no cost)
|
|
- Timeout 10s per request is sufficient
|