Koskamo

Metruvo MCP

A read-only MCP server providing portfolio analysis tools for AI assistants, including searching fund catalogs, analyzing portfolio overlap and concentration, and comparing ETFs using published data.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Metruvo MCP logo, by MetruvoVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Metruvo
MCP endpoint (Streamable HTTP)
https://metruvo.com/api/mcp
Vendor documentation

What you can do with it

  • Search the instrument catalogue by name, ISIN or ticker.
  • Analyze overlap, concentration, and exposure for a list of ISINs.
  • Compare two ETFs as a 50/50 portfolio with side-by-side facts.

Source and maintenance

Vendor evidenceRegistry 1.1.1

Protocol and capabilities

Server
metruvo 1.1.0
MCP protocol
2025-06-18
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Read-only portfolio analysis from published fund data. Show the short disclaimer line (structuredContent.disclaimer.short) before results; the full text is in disclaimer.full. Build tables from structuredContent (rows, table, funds) rather than the text. Keep every missingData item, date and coverage figure visible. Explore at https://metruvo.com/check. Include the result's checkUrl as a link so the user can open the same comparison on metruvo.com.

Tools

4 advertised

search_funds
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the published instrument catalogue by name, ISIN or ticker; includes currency and listing identifiers. Returns checkUrl: a shareable link to the same result.

search_funds input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2
    }
  },
  "additionalProperties": false
}
search_funds annotations
{
  "title": "Search funds",
  "readOnlyHint": true,
  "openWorldHint": false
}
xray_portfolio
Advertised by the server during the last successful anonymous check.
Advertised read-only

Analyze free-preview ETF overlap/concentration findings, known ongoing charges and regional/sector exposures from published evidence. Identify each holding with exactly one ISIN or ticker; a ticker can be ambiguous across exchanges. Use positive relative weights, values in one base currency, or omit all amounts for equal weights. Never mix weights and values. At most 10 distinct tickers per call. Dates, coverage and all data gaps accompany the result. Returns checkUrl: a shareable link to the same result.

xray_portfolio input schema
{
  "type": "object",
  "required": [
    "holdings"
  ],
  "properties": {
    "holdings": {
      "type": "array",
      "items": {
        "type": "object",
        "oneOf": [
          {
            "required": [
              "isin"
            ]
          },
          {
            "required": [
              "ticker"
            ]
          }
        ],
        "properties": {
          "isin": {
            "type": "string",
            "pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$",
            "description": "ISIN with a valid check digit."
          },
          "value": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "ticker": {
            "type": "string",
            "pattern": "^[A-Za-z0-9.-]{2,20}$",
            "description": "Exchange ticker, e.g. VWCE or SWDA.L; may match listings on several exchanges."
          },
          "weight": {
            "type": "number",
            "maximum": 100,
            "exclusiveMinimum": 0
          }
        },
        "additionalProperties": false
      },
      "maxItems": 25,
      "minItems": 1
    },
    "baseCurrency": {
      "enum": [
        "EUR",
        "GBP",
        "CHF",
        "USD"
      ],
      "type": "string",
      "default": "EUR"
    }
  },
  "additionalProperties": false
}
xray_portfolio annotations
{
  "title": "Portfolio X-ray",
  "readOnlyHint": true,
  "openWorldHint": false
}
compare_funds
Advertised by the server during the last successful anonymous check.
Advertised read-only

Analyze two ETFs as a 50/50 portfolio, with overlap and issuer facts including dated ongoing charges side by side, and each fund's own region and sector exposure. Identify each side with exactly one ISIN or ticker; a ticker can be ambiguous across exchanges. Unknown facts remain null. Returns checkUrl: a shareable link to the same result.

compare_funds input schema
{
  "type": "object",
  "allOf": [
    {
      "oneOf": [
        {
          "required": [
            "isinA"
          ]
        },
        {
          "required": [
            "tickerA"
          ]
        }
      ]
    },
    {
      "oneOf": [
        {
          "required": [
            "isinB"
          ]
        },
        {
          "required": [
            "tickerB"
          ]
        }
      ]
    }
  ],
  "required": [],
  "properties": {
    "isinA": {
      "type": "string",
      "pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$",
      "description": "ISIN with a valid check digit."
    },
    "isinB": {
      "type": "string",
      "pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$",
      "description": "ISIN with a valid check digit."
    },
    "tickerA": {
      "type": "string",
      "pattern": "^[A-Za-z0-9.-]{2,20}$",
      "description": "Exchange ticker, e.g. VWCE or SWDA.L; may match listings on several exchanges."
    },
    "tickerB": {
      "type": "string",
      "pattern": "^[A-Za-z0-9.-]{2,20}$",
      "description": "Exchange ticker, e.g. VWCE or SWDA.L; may match listings on several exchanges."
    }
  },
  "additionalProperties": false
}
compare_funds annotations
{
  "title": "Compare two funds",
  "readOnlyHint": true,
  "openWorldHint": false
}
rank_funds
Advertised by the server during the last successful anonymous check.
Advertised read-only

Sort 2 to 10 funds by up to three published facts: ongoing charge, US share, pairwise overlap and holdings count. Rows follow the criteria in order. A missing fact sorts last and stays null; it is never estimated. Rates are decimal fractions (0.07 = 7%). Analysis based on published fund data. Returns checkUrl: a shareable link to the same result.

rank_funds input schema
{
  "type": "object",
  "required": [
    "isins",
    "criteria"
  ],
  "properties": {
    "isins": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$",
        "description": "ISIN with a valid check digit."
      },
      "maxItems": 10,
      "minItems": 2,
      "uniqueItems": true
    },
    "criteria": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "metric",
          "direction"
        ],
        "properties": {
          "metric": {
            "enum": [
              "ongoingCharge",
              "usShare",
              "overlap",
              "holdingsCount"
            ],
            "type": "string"
          },
          "direction": {
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "maxItems": 3,
      "minItems": 1
    }
  },
  "additionalProperties": false
}
rank_funds annotations
{
  "title": "Rank funds",
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
949 ms
95th percentile latency
949 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 949 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http metruvo-mcp https://metruvo.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add metruvo-mcp --url https://metruvo.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable metruvo-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "metruvo-mcp": {
      "url": "https://metruvo.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "metruvo-mcp": {
      "type": "streamableHttp",
      "url": "https://metruvo.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start metruvo-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "metruvo-mcp": {
      "type": "http",
      "url": "https://metruvo.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http metruvo-mcp https://metruvo.com/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "metruvo-mcp": {
      "url": "https://metruvo.com/api/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "metruvo-mcp": {
      "serverUrl": "https://metruvo.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Metruvo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Metruvo MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing