eToro MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@eToro MCP ServerWhat's the current price of Bitcoin?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
eToro Read-Only MCP Server
A local read-only Model Context Protocol (MCP) server
that wraps eToro's Agent Portfolios
public API (https://public-api.etoro.com/api/v1).
It lets an MCP-compatible AI client (Claude Desktop, Claude Code, Cursor, etc.) read your real eToro portfolio — total value, P&L, holdings breakdown, positions, and instrument lookups — directly in chat.
Why "read-only" matters
eToro's official agent-portfolios skill bundles read endpoints (portfolio info, instrument search) together with write/trade endpoints (create agent-portfolio, open position, close position). This project deliberately implements only the read endpoints. There is no code path, tool, or parameter anywhere in this repo that can place, modify, close, or rebalance a trade.
See src/etoroClient.js — it has a hardcoded allowlist
of GET-only paths and the underlying fetch call's method is hardcoded to
"GET".
Related MCP server: eToro Portfolio Connector
Tools exposed
Tool | Description |
| Verifies your API credentials and lists any agent-portfolios on the account |
| Total portfolio value, total invested, unrealized P&L, available cash |
| Open positions grouped by instrument: invested, current value, P&L, P&L%, portfolio weight% |
| Raw |
| Resolve a trading symbol (e.g. |
| Display metadata (name, type, exchange, etc.) for one or more instrument IDs |
Prerequisites
Node.js >= 18 (tested on Node 24). Download from nodejs.org.
An eToro account with the Agent Portfolios feature available (beta).
An MCP-compatible client: Claude Desktop, Claude Code, or Cursor.
1. Get your eToro API credentials
Go to eToro → Settings → Trade (https://www.etoro.com/settings/trade).
Generate an API key. Use a key WITHOUT
real:writepermission — this server only ever issues GET requests and doesn't need (or use) write access.You'll get:
A shared application key (
x-api-key) — documented publicly in eToro's agent-portfolios SKILL.md.Your private per-user key (
x-user-key) — keep this secret.
2. Clone and install
git clone https://github.com/ranjanvipul88/eToro-mcp.git
cd eToro-mcp
npm install3. Configure credentials
cp .env.example .envEdit .env:
ETORO_API_KEY=<shared app key from eToro's agent-portfolios SKILL.md>
ETORO_USER_KEY=<your private per-user key>.env is gitignored — never commit it.
4. Test the connection (optional but recommended)
npm run test:connectionThis calls the eToro API directly (no MCP) and prints:
your agent-portfolio list (and whether your key has write permission)
an aggregated holdings breakdown with current value, invested amount, and P&L
If this works, the MCP server will work too.
5. Set up with Claude Code
A project-scoped .mcp.json is included. From the project directory, open
Claude Code and run:
/mcpApprove the etoro-readonly server when prompted. Then ask things like:
What's my eToro portfolio summary? Show me my eToro holdings breakdown.
Or register it manually from any directory:
claude mcp add etoro-readonly node /absolute/path/to/eToro-mcp/src/index.js6. Set up with Claude Desktop
Edit your Claude Desktop config file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Add an entry under mcpServers (use the absolute path to src/index.js):
{
"mcpServers": {
"etoro-readonly": {
"command": "node",
"args": ["/absolute/path/to/eToro-mcp/src/index.js"]
}
}
}Windows path tip: use double backslashes, e.g.
"D:\\eToro-mcp\\src\\index.js".
Fully quit and restart Claude Desktop (MCP servers are only loaded on startup — closing the window isn't enough). Start a new chat and ask:
Check my eToro connection. What's my eToro portfolio summary?
Approve the etoro-readonly tools when prompted.
Troubleshooting: fetch failed in Claude Desktop
If the server connects in Claude Code / npm run test:connection but
Claude Desktop reports fetch failed, it's usually a TLS/CA issue specific
to how the Desktop app spawns Node (not an issue with the API or this code).
Add an env block to the config entry:
{
"mcpServers": {
"etoro-readonly": {
"command": "node",
"args": ["/absolute/path/to/eToro-mcp/src/index.js"],
"env": {
"NODE_OPTIONS": "--use-system-ca",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
}Note:
NODE_TLS_REJECT_UNAUTHORIZED=0disables TLS certificate validation for this process. Only use this if you understand the trade-off (it's a common workaround on machines with corporate antivirus/TLS-inspection proxies that intercept HTTPS).
Project structure
.
├── src/
│ ├── index.js # MCP server (stdio transport), registers tools
│ ├── etoroClient.js # eToro API client — GET-only allowlist
│ └── test-connection.js # standalone script to test API credentials
├── .env.example # credential template (copy to .env)
├── .mcp.json # Claude Code project-scoped MCP registration
├── package.json
└── README.mdNotes & limitations
Requests are throttled to ~1 every 3.1 seconds, per eToro's documented 20 requests/minute rate limit.
instrumentIdsquery parameters are sent with literal commas (instrumentIds=1,2,3) — eToro's API returns HTTP 500 if commas are URL-encoded as%2C.This project is unaffiliated with eToro. Use at your own risk and review
src/etoroClient.jsbefore connecting your own account.
License
MIT
Available Tools
6 toolsetoro_check_connectionCheck eToro connectionA
Verifies the configured eToro API key works and lists any agent-portfolios on the account (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It explicitly notes 'read-only', which is a key safety trait, and mentions the listing behavior. It doesn't discuss error handling or rate limits, but for a zero-parameter connectivity check, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the primary purpose ('Verifies'), followed by a secondary behavior. Every word earns its place, with no repetition of the schema or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity—no parameters, no output schema, and no annotation complexity—the description fully covers what an agent needs to know: what it verifies, that it's read-only, and what additional information it returns. It is complete for its intended scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the schema is automatically 100% covered. The baseline for zero-parameter tools is 4; the description doesn't need to add parameter meaning. It correctly stays focused on behavior rather than inventing param details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Verifies') and names the resource ('configured eToro API key'), plus the additional action of listing agent-portfolios. It clearly distinguishes from sibling tools like etoro_portfolio_summary or etoro_holdings, which focus on data retrieval rather than connection verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for checking API connectivity and lists agent-portfolios as a read-only side effect. It doesn't explicitly state when to use this instead of siblings, but the unique purpose (verification) makes the context clear. Slight deduction for not naming an alternative or exclusion scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etoro_holdingsGet eToro holdings breakdownA
Returns open positions grouped by instrument with invested amount, current value, P&L, P&L%, and portfolio weight % (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly labels the operation as '(read-only)', which is a key behavioral disclosure given the absence of annotations. It also discloses that results are grouped by instrument and lists the exact fields returned, providing behavioral context beyond the tool name and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that states the verb, resource, grouping behavior, and returned metrics without redundancy. Every element adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters) and the absence of an output schema, the description adequately communicates the return contents and behavior. It covers the grouping, the specific fields, and the read-only nature, making it sufficiently complete for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty with 100% coverage. According to the rubric, zero-param tools receive a baseline of 4, and the description has no need to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Returns' and identifies the resource as 'open positions grouped by instrument' with detailed metrics (invested amount, current value, P&L, P&L%, portfolio weight %). This clearly distinguishes it from sibling tools like etoro_portfolio_summary or etoro_raw_pnl, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you need a holdings breakdown), but it does not explicitly mention alternatives or when-not conditions. For example, it doesn't state 'use etoro_portfolio_summary for overall portfolio totals' or 'use etoro_raw_pnl for transaction-level P&L.' This is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etoro_instrument_detailsGet eToro instrument detailsA
Fetches display metadata (name, type, exchange, etc.) for one or more instrument IDs (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| instrumentIds | Yes | List of eToro instrument IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It explicitly states 'read-only', which is a key safety trait. It does not mention error behavior or output format, but for a simple read operation this is reasonable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word adds value, and the parenthetical 'read-only' is a useful qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with one documented parameter and no output schema. The description explains what it does and its safe nature, which is sufficient for an agent to select it. It could mention the output structure but that is not necessary for basic selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the parameter (list of eToro instrument IDs) with 100% coverage, so the description adds little beyond restating 'one or more'. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Fetches' and clearly identifies the resource as display metadata (name, type, exchange, etc.) for instrument IDs. This distinguishes it from siblings like etoro_search_instrument (which finds instruments) and portfolio-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one or more instrument IDs' clearly implies use when you already have IDs and need display metadata. It does not explicitly name alternatives (e.g., search when you lack IDs), but the context is clear enough for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etoro_portfolio_summaryGet eToro portfolio summaryA
Returns total portfolio value, total invested, unrealized P&L, and available cash for the real eToro account (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly marks the operation as 'read-only' and lists the exact return fields, which is sufficient behavioral disclosure for a no-parameter read. Since there are no annotations, this is a key safety hint provided directly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence that is front-loaded with the main output and immediately clarifies read-only status.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool without an output schema, the description fully covers the returned metrics and the account scope. No additional context is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description needs no parameter specifics. The baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns portfolio-level metrics (total value, invested, unrealized P&L, available cash) for the real eToro account. However, it does not explicitly differentiate from sibling tools like etoro_holdings or etoro_raw_pnl, though the listed metrics imply a summary scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over siblings such as etoro_holdings or etoro_raw_pnl. The description simply lists what is returned without any usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etoro_raw_pnlGet raw eToro PnL/positions payloadA
Returns the raw response from /trading/info/real/pnl: every open position, pending order, and account-level PnL (read-only, large output).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It adds useful context by stating the tool is read-only and produces large output, which helps set expectations. However, it does not mention authentication requirements, rate limits, potential errors, or the exact response format, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately names the endpoint and then lists the payload contents. Every word earns its place, with no redundancy or filler. This is exemplary conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description provides adequate context by specifying the exact endpoint, the types of data included (open positions, pending orders, account-level PnL), and cautioning about large output. It does not detail pagination or interpretation, but for a simple raw dump tool, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and per the rubric the baseline is 4. There is no parameter detail needed, and the description correctly focuses on the return value rather than inputs. It does not introduce any parameter confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and explicit resource ('/trading/info/real/pnl') with a clear scope: every open position, pending order, and account-level PnL. This differentiates it from siblings like etoro_portfolio_summary or etoro_holdings, which likely provide processed/summary data rather than the raw payload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by emphasizing 'raw response' and 'large output', suggesting it is for consumers needing unprocessed data rather than summaries. However, it does not explicitly state when to choose this over sibling tools or mention any exclusion criteria, so the guidance remains implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etoro_search_instrumentSearch eToro instrument by symbolA
Resolves a trading symbol (e.g. AAPL, BTC) to an eToro instrument ID (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Instrument symbol, e.g. AAPL, MSFT, BTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and explicitly labels the operation as 'read-only', which is the key behavioral trait for safety. It does not mention error handling or failure cases, but this is acceptable for a simple lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the core function. Every word earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description adequately covers input, output, and safety. It could add a note about how this relates to sibling tools like etoro_instrument_details, but overall it is complete enough for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already provides examples for 'symbol'. The description adds the context that the purpose is ID resolution, but it does not significantly enhance the parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Resolves') and resource ('trading symbol to an eToro instrument ID'). It distinguishes itself from siblings like etoro_instrument_details, which likely consumes the ID rather than producing it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case (when you need an instrument ID from a symbol) but does not explicitly state when to use this versus alternatives like etoro_instrument_details, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v1.0.0- First observed
etoro_check_connection - First observed
etoro_holdings - First observed
etoro_instrument_details - First observed
etoro_portfolio_summary - First observed
etoro_raw_pnl - First observed
etoro_search_instrument
TDQS
Most tools are clearly distinct: connection check, portfolio summary, holdings, raw PnL, instrument search, and instrument details. However, etoro_holdings and etoro_raw_pnl both report open positions, and could be confused if an agent doesn't read descriptions carefully.
All tools share the etoro_ prefix and use snake_case, but there is a mix of verb-led names (check_connection, search_instrument) and noun-led names (portfolio_summary, holdings, raw_pnl, instrument_details). The pattern is not uniform verb_noun, but it remains readable and predictable.
With 6 tools, the set is well-scoped for a read-only eToro integration. Each tool covers a distinct aspect of account viewing and instrument lookup, avoiding bloat while providing essential functionality.
The toolset provides solid read-only coverage: connection verification, portfolio overview, detailed positions, raw P&L, instrument search, and instrument details. Minor gaps include no historical transactions or watchlist functionality, but core usage is well supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Trade across 22+ exchanges and brokers from any MCP-capable AI agent, no install required.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server connecting AI assistants to eToro for portfolio analysis, market research, and trading, with 35 tools.35771MIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server that connects Claude to your eToro account, enabling queries about your portfolio, P\&L, balances, watchlists, live prices, and price history.MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables autonomous AI agents to connect to Tastytrade for market scanning, option strategies, account management, and optionally placing trades with built-in safety controls.9MIT
- FlicenseAqualityDmaintenanceAn MCP server that wraps the Trading 212 Public API, enabling AI agents to interact with your Trading 212 brokerage account through natural language.16-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ranjanvipul88/etoro-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server