Skip to main content
Glama
shlomico-tr

eToro MCP Server

Official
by shlomico-tr

fetch_etoro_portfolio

Retrieve a user's eToro portfolio by username using the eToro MCP Server, enabling access to portfolio data without CORS restrictions.

Instructions

Fetch an eToro user's portfolio using their username

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • dist/index.js:52-52 (registration)
    Registration of the fetch_etoro_portfolio tool using server.tool with name, description, input schema, and inline handler function.
    server.tool("fetch_etoro_portfolio", "Fetch an eToro user's portfolio using their username", {
  • Input schema definition using Zod for the tool parameters: username (string) and optional authToken (string).
    username: z.string().describe("The eToro username"), authToken: z.string().optional().describe("Optional: Authorization token for authenticated requests")
  • The core handler function that implements the tool logic: converts eToro username to CID using an external API, generates a client request ID, fetches portfolio data from eToro's API with specific headers mimicking a browser, and returns formatted JSON response.
    }, async (params) => { const { username, authToken = "" } = params; try { // First, convert username to CID const cidResponse = await fetch(`https://helpers.bullsheet.me/api/cid?username=${encodeURIComponent(username)}`, { method: 'GET', headers: { 'accept': '*/*', 'accept-language': 'en-US,en;q=0.9', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=1, i', 'referer': 'https://helpers.bullsheet.me/', 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36' } }); if (!cidResponse.ok) { throw new Error(`Failed to convert username to CID: ${cidResponse.statusText}`); } const cidData = await cidResponse.json(); const cid = cidData.cid; if (!cid) { throw new Error(`Failed to retrieve CID for username: ${username}`); } // Generate a client request ID (UUID-like format) const clientRequestId = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { const r = Math.random() * 16 | 0; const v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); // Now fetch the portfolio using the retrieved CID const response = await fetch(`https://www.etoro.com/sapi/trade-data-real/live/public/portfolios?cid=${cid}&client_request_id=${clientRequestId}`, { method: 'GET', headers: { 'accept': 'application/json, text/plain, */*', 'accept-language': 'en-US,en;q=0.9', 'accounttype': 'Real', 'applicationidentifier': 'ReToro', 'applicationversion': 'v651.621.3', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=1, i', 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36', ...(authToken ? { 'authorization': authToken } : {}) } }); if (!response.ok) { throw new Error(`Failed to fetch portfolio data: ${response.statusText}`); } const portfolioData = await response.json(); return { content: [{ type: "text", text: JSON.stringify({ username, cid, portfolio: portfolioData }, null, 2) }], }; } catch (error) { if (error instanceof Error) { throw new Error(`Failed to fetch portfolio data: ${error.message}`); } throw error; } });

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shlomico-tr/etoroPortfolioMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server