ta-mcp.tradevoicelab.com
search-mcp.tradevoicelab.com
experts-mcp.tradevoicelab.com
Add the portal URL to your MCP client config. On first use, a browser window opens to log in with your TradeVoice account โ then stays silent for 24 hours.
claude_desktop_config.json{
"mcpServers": {
"tradevoice": {
"command": "npx",
"args": ["-y", "mcp-remote@latest", "https://mcp.tradevoicelab.com/mcp"],
"env": { "MCP_REMOTE_AUTH": "oauth" }
}
}
}
claude mcp add tradevoice --transport http https://mcp.tradevoicelab.com/mcp # โ browser opens once for OAuth login, then silent for 24h
.cursor/mcp.json{
"mcpServers": {
"tradevoice": {
"command": "npx",
"args": ["-y", "mcp-remote@latest", "https://mcp.tradevoicelab.com/mcp"],
"env": { "MCP_REMOTE_AUTH": "oauth" }
}
}
}
Use your CF Access token (from the A2A section below) to call individual MCP servers directly โ no browser needed.
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
headers = {
"CF-Access-Client-Id": "your-client-id", # from A2A section below
"CF-Access-Client-Secret": "your-client-secret",
}
async with streamablehttp_client(
"https://ta-mcp1.tradevoicelab.com/mcp", headers=headers) as (r, w, _):
async with ClientSession(r, w) as session:
await session.initialize()
result = await session.call_tool("ta_trend_signals", {"symbol": "NVDA"})
print(result.content[0].text)
ta-mcp1
search-mcp1
experts-mcp1
(.tradevoicelab.com/mcp)
One token works on both A2A servers. Generate it once, copy both values, and add them as headers on every request. The client secret is shown only once โ regenerate if lost.
a2a.tradevoicelab.com
Route questions to 23 domain experts via A2A JSON-RPC. Use @expert_name to target a specific expert, or omit it and the router picks the best match.
import httpx
headers = {
"CF-Access-Client-Id": "your-client-id",
"CF-Access-Client-Secret": "your-client-secret",
}
async with httpx.AsyncClient(headers=headers) as client:
r = await client.post(
"https://a2a.tradevoicelab.com/experts/risk_analyst/a2a",
json={"message": "@risk_analyst What is the downside risk for NVDA?"}
)
alpaca-a2a.tradevoicelab.com
27 trading actions on Alpaca Markets via A2A JSON-RPC. Requires both a CF Access token (above)
and your own Alpaca API credentials passed per-request in the metadata.
Use "demo": true to test with fixture data โ no real Alpaca account needed.
Your credentials are never stored on our side โ pass them in the metadata of every Alpaca A2A request:
r = await client.post(
"https://alpaca-a2a.tradevoicelab.com/a2a/jsonrpc",
json={
"jsonrpc": "2.0", "id": 1, "method": "SendMessage",
"params": {"message": {
"role": "ROLE_USER", "messageId": "1", "contextId": "1",
"parts": [{"text": "{\"action\": \"get_account\"}"}],
"metadata": {
"alpaca_api_key": "YOUR_API_KEY",
"alpaca_api_secret": "YOUR_API_SECRET",
"alpaca_endpoint": "https://paper-api.alpaca.markets/v2"
}
}}
}
)