Talval

Value-investing research: fair values, valuation verdicts, quality scores and 13F portfolios

Should I use this

Quality & Safety

A
Description quality
90%
Schema completeness
80%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'compare_stocks' description lacks action verbin compare_stocks

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,453Tokens (tool definitions)
~3.3 KBTypical response size
Moderate attention impact (1.92% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "research": {
      "url": "https://talval.com/mcp"
    }
  }
}

Remote endpoints

https://talval.com/mcpstreamable-http
https://talval.com/mcp/prostreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_stocks(query, limit)

Find a company in Talval's coverage by name or ticker. Typo tolerant. Use this first when you only have a company name.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Company name or ticker, e.g. 'Rheinmetall' or 'RHM.DE'."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "default": 8,
      "description": "How many matches to return. Raise it when a name is ambiguous across listings — Shell and Unilever trade in more than one place."
    }
  },
  "required": [
    "query"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "matches": {
      "type": "array",
      "description": "Empty when nothing in Talval's coverage matches.",
      "items": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "sector": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "ticker"
        ]
      }
    }
  },
  "required": [
    "query",
    "matches"
  ]
}
🟢get_stock_research(ticker)

Talval's valuation verdict, fair-value estimate, upside, quality/safety/value scores and latest filed results for one ticker. End-of-day snapshot with a date.

Input Schema

{
  "type": "object",
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Exact ticker as Talval lists it, e.g. 'AAPL', 'RHM.DE', 'PRU.L'."
    }
  },
  "required": [
    "ticker"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "ticker": {
      "type": "string"
    },
    "covered": {
      "type": "boolean",
      "description": "False when Talval does not cover this ticker; every other field is then null."
    },
    "name": {
      "type": [
        "string",
        "null"
      ]
    },
    "sector": {
      "type": [
        "string",
        "null"
      ]
    },
    "industry": {
      "type": [
        "string",
        "null"
      ]
    },
    "country": {
      "type": [
        "string",
        "null"
      ]
    },
    "market_cap": {
      "type": [
        "number",
        "null"
      ]
    },
    "currency": {
      "type": [
        "string",
        "null"
      ],
      "description": "Trading currency of price and fair value."
    },
    "as_of": {
      "type": [
        "string",
        "null"
      ],
      "description": "Date of the verdict snapshot, YYYY-MM-DD."
    },
    "price": {
      "type": [
        "number",
        "null"
      ]
    },
    "price_as_of": {
      "type": [
        "string",
        "null"
      ]
    },
    "fair_value": {
      "type": [
        "number",
        "null"
      ],
      "description": "Null when withheld — see fair_value_usable and withheld_reason."
    },
    "fair_value_usable": {
      "type": "boolean",
      "description": "False when the company reports in a different currency than it trades in, which makes every price-to-fundamentals figure cross-currency nonsense. A false here is a deliberate suppression, not missing data."
    },
    "withheld_reason": {
      "type": [
        "string",
        "null"
      ],
      "description": "Why fair_value is null, when it is."
    },
    "upside_pct": {
      "type": [
        "number",
        "null"
      ],
      "description": "Percent, not a fraction."
    },
    "verdict": {
      "type": [
        "string",
        "null"
      ],
      "description": "Undervalued, Fairly valued or Overvalued."
    },
    "conviction": {
      "type": [
        "integer",
        "null"
      ],
      "description": "1-10."
    },
    "risk_level": {
      "type": [
        "string",
        "null"
      ]
    },
    "pe_trailing": {
      "type": [
        "number",
        "null"
      ]
    },
    "dividend_yield_pct": {
      "type": [
        "number",
        "null"
      ],
      "description": "Forward yield as a PERCENT, e.g. 2.9 for 2.9%."
    },
    "scores": {
      "type": "object",
      "description": "0-100, null where the inputs behind a score are missing.",
      "properties": {
        "value": {
          "type": [
            "number",
            "null"
          ]
        },
        "quality": {
          "type": [
            "number",
            "null"
          ]
        },
        "safety": {
          "type": [
            "number",
            "null"
          ]
        },
        "dividend": {
          "type": [
            "number",
            "null"
          ]
        },
        "composite": {
          "type": [
            "number",
            "null"
          ]
        },
        "piotroski_f_score": {
          "type": [
            "integer",
            "null"
          ],
          "description": "0-9."
        }
      }
    },
    "latest_annual": {
      "type": [
        "object",
        "null"
      ],
      "description": "As reported in the company's own filings — not estimates.",
      "properties": {
        "fiscal_year": {
          "type": [
            "integer",
            "null"
          ]
        },
        "revenue": {
          "type": [
            "number",
            "null"
          ]
        },
        "net_income": {
          "type": [
            "number",
            "null"
          ]
        },
        "eps_diluted": {
          "type": [
            "number",
            "null"
          ]
        },
        "free_cash_flow": {
          "type": [
            "number",
            "null"
          ]
        }
      }
    },
    "url": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "ticker",
    "covered"
  ]
}
🟢screen_stocks(screen, sector, limit)

Run one of Talval's stock screens over the covered universe and return the ranked results with fair value, upside and scores.

Input Schema

{
  "type": "object",
  "properties": {
    "screen": {
      "type": "string",
      "enum": [
        "undervalued",
        "high_quality",
        "safe_dividend",
        "undervalued_dividend"
      ],
      "description": "Which screen to run."
    },
    "sector": {
      "type": "string",
      "description": "Optional sector filter, e.g. 'Technology'."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 15,
      "description": "How many ranked rows to return. The screen is already ranked, so a smaller number gives the strongest names rather than a sample."
    }
  },
  "required": [
    "screen"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "screen": {
      "type": "string"
    },
    "label": {
      "type": [
        "string",
        "null"
      ]
    },
    "sector": {
      "type": [
        "string",
        "null"
      ],
      "description": "The sector filter applied, if any."
    },
    "rows": {
      "type": "array",
      "description": "Ranked. Empty when nothing clears the screen.",
      "items": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trading currency of the price and fair value."
          },
          "price": {
            "type": [
              "number",
              "null"
            ]
          },
          "fair_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "upside_pct": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, not a fraction: 12.5 means +12.5%."
          },
          "verdict": {
            "type": [
              "string",
              "null"
            ],
            "description": "Undervalued, Fairly valued or Overvalued."
          },
          "quality_score": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "ticker"
        ]
      }
    }
  },
  "required": [
    "screen",
    "rows"
  ]
}
🟢compare_stocks(tickers)

Put two or more tickers side by side on verdict, fair value, upside and scores.

Input Schema

{
  "type": "object",
  "properties": {
    "tickers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 8,
      "description": "Tickers to compare."
    }
  },
  "required": [
    "tickers"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "companies": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trading currency of the price and fair value."
          },
          "price": {
            "type": [
              "number",
              "null"
            ]
          },
          "fair_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "upside_pct": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, not a fraction: 12.5 means +12.5%."
          },
          "verdict": {
            "type": [
              "string",
              "null"
            ],
            "description": "Undervalued, Fairly valued or Overvalued."
          },
          "quality_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "conviction": {
            "type": [
              "integer",
              "null"
            ]
          },
          "fair_value_usable": {
            "type": "boolean"
          },
          "value_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "safety_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "dividend_yield_pct": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, e.g. 2.9."
          }
        },
        "required": [
          "ticker"
        ]
      }
    },
    "not_covered": {
      "type": "array",
      "description": "Tickers asked for that Talval does not cover.",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "companies",
    "not_covered"
  ]
}
🟢list_superinvestors

The investors Talval tracks through their quarterly 13F filings — portfolio size, position count and largest holdings.

Input Schema

{
  "type": "object",
  "properties": {}
}

Output Schema

{
  "type": "object",
  "properties": {
    "investors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Pass this to get_superinvestor."
          },
          "person": {
            "type": [
              "string",
              "null"
            ]
          },
          "manager": {
            "type": [
              "string",
              "null"
            ]
          },
          "n_positions": {
            "type": [
              "integer",
              "null"
            ]
          },
          "portfolio_value_usd": {
            "type": [
              "number",
              "null"
            ]
          },
          "quarter_end": {
            "type": [
              "string",
              "null"
            ],
            "description": "The reported quarter, YYYY-MM-DD."
          }
        },
        "required": [
          "slug"
        ]
      }
    }
  },
  "required": [
    "investors"
  ]
}
🟢get_superinvestor(slug)

One tracked investor's reported holdings and quarter-on-quarter activity. Call list_superinvestors first to get the slug.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Slug, e.g. 'berkshire'."
    }
  },
  "required": [
    "slug"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "found": {
      "type": "boolean",
      "description": "False when no tracked investor has that slug."
    },
    "person": {
      "type": [
        "string",
        "null"
      ]
    },
    "manager": {
      "type": [
        "string",
        "null"
      ]
    },
    "quarter_end": {
      "type": [
        "string",
        "null"
      ]
    },
    "portfolio_value_usd": {
      "type": [
        "number",
        "null"
      ]
    },
    "n_positions": {
      "type": [
        "integer",
        "null"
      ]
    },
    "holdings": {
      "type": "array",
      "description": "Largest first, capped at 30.",
      "items": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": [
              "string",
              "null"
            ]
          },
          "issuer": {
            "type": [
              "string",
              "null"
            ]
          },
          "pct_of_portfolio": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, e.g. 12.4."
          },
          "activity": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "activity": {
      "type": [
        "object",
        "null"
      ],
      "description": "Quarter on quarter. Null when there is no prior filing to compare against.",
      "properties": {
        "new_buys": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "added_to": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "reduced": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sold_out": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  },
  "required": [
    "slug",
    "found"
  ]
}
🟢stocks_of_the_week

Talval's current weekly picks — the latest Undervalued verdict per ticker, refreshed weekly.

Input Schema

{
  "type": "object",
  "properties": {}
}

Output Schema

{
  "type": "object",
  "properties": {
    "week_start": {
      "type": [
        "string",
        "null"
      ]
    },
    "note": {
      "type": [
        "string",
        "null"
      ],
      "description": "This week's written note, when there is one."
    },
    "picks": {
      "type": "array",
      "description": "Empty when nothing is published for this week yet.",
      "items": {
        "type": "object",
        "properties": {
          "rank": {
            "type": [
              "integer",
              "null"
            ]
          },
          "ticker": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "sector": {
            "type": [
              "string",
              "null"
            ]
          },
          "verdict": {
            "type": [
              "string",
              "null"
            ]
          },
          "conviction": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "ticker"
        ]
      }
    }
  },
  "required": [
    "picks"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
auth requiredversion not recorded—
verifiedversion not recorded7 tools
auth requiredversion not recorded—
verifiedversion not recorded7 tools
auth requiredversion not recorded—
verifiedversion not recorded7 tools
auth requiredversion not recorded—
verifiedversion not recorded7 tools
auth requiredversion not recorded—