Koskamo

Talval MCP

An official MCP server for Talval that provides tools for stock research, screening, and comparison. It enables agents to access fair value estimates, valuation verdicts, quality and safety scores, 13F institutional holdings, and analyst accuracy data for value investing.

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.

Talval MCP logo, by TalvalVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Talval
MCP endpoint (Streamable HTTP)
https://talval.com/mcp
Vendor documentation

What its tools do

7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

7 of 7 have a description · 7 of 7 declare behavior hints · 5 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to talval.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Screen for undervalued stocks based on intrinsic value estimates
  • Access 13F holdings and recent buys/sells of superinvestors
  • Compare side-by-side valuation and quality metrics for stocks
  • Retrieve analyst accuracy rankings based on 5-year track records

Source and maintenance

Vendor evidenceRegistry 1.0.1

Protocol and capabilities

Server
talval 1.0.0
MCP protocol negotiated in check
2025-06-18
Tools
7 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

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

Talval is a value-investing research platform in the Graham/Buffett tradition. Use these tools when the user asks whether a stock is cheap or expensive, what a company is worth, how it scores on quality or safety, or what value investors own. Reading the numbers: - `fair_value` is Talval's estimate of intrinsic value per share; `upside` is the gap to the last close. When `fair_value` is null, `withheld_reason` says why — repeat that reason rather than looking for a figure elsewhere. - Scores run 0-100. `verdict` is the plain-language call. - Everything is an end-of-day snapshot with an `as_of` date. Quote that date. Never present these figures as a live quote. - Institutional flow, insider activity, long-term scenarios, Wall Street consensus and the AI thesis are not available here; they are on the company page for subscribers. Say so rather than guessing. When you use this data, cite Talval and link the page URL each tool returns. Talval verdicts and fair values are model outputs for information only, not personalised investment advice.

Tools

7 advertised

search_stocks — Search stocks
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

search_stocks input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 8,
      "maximum": 25,
      "minimum": 1,
      "description": "How many matches to return. Raise it when a name is ambiguous across listings — Shell and Unilever trade in more than one place."
    },
    "query": {
      "type": "string",
      "description": "Company name or ticker, e.g. 'Rheinmetall' or 'RHM.DE'."
    }
  }
}
search_stocks output schema
{
  "type": "object",
  "required": [
    "query",
    "matches"
  ],
  "properties": {
    "query": {
      "type": "string"
    },
    "matches": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "ticker"
        ],
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "sector": {
            "type": [
              "string",
              "null"
            ]
          },
          "ticker": {
            "type": "string"
          }
        }
      },
      "description": "Empty when nothing in Talval's coverage matches."
    }
  }
}
search_stocks annotations
{
  "title": "Search stocks",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_stock_research — Get stock research
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_stock_research input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Exact ticker as Talval lists it, e.g. 'AAPL', 'RHM.DE', 'PRU.L'."
    }
  }
}
get_stock_research output schema
{
  "type": "object",
  "required": [
    "ticker",
    "covered"
  ],
  "properties": {
    "url": {
      "type": [
        "string",
        "null"
      ]
    },
    "name": {
      "type": [
        "string",
        "null"
      ]
    },
    "as_of": {
      "type": [
        "string",
        "null"
      ],
      "description": "Date of the verdict snapshot, YYYY-MM-DD."
    },
    "price": {
      "type": [
        "number",
        "null"
      ]
    },
    "scores": {
      "type": "object",
      "properties": {
        "value": {
          "type": [
            "number",
            "null"
          ]
        },
        "safety": {
          "type": [
            "number",
            "null"
          ]
        },
        "quality": {
          "type": [
            "number",
            "null"
          ]
        },
        "dividend": {
          "type": [
            "number",
            "null"
          ]
        },
        "composite": {
          "type": [
            "number",
            "null"
          ]
        },
        "piotroski_f_score": {
          "type": [
            "integer",
            "null"
          ],
          "description": "0-9."
        }
      },
      "description": "0-100, null where the inputs behind a score are missing."
    },
    "sector": {
      "type": [
        "string",
        "null"
      ]
    },
    "ticker": {
      "type": "string"
    },
    "country": {
      "type": [
        "string",
        "null"
      ]
    },
    "covered": {
      "type": "boolean",
      "description": "False when Talval does not cover this ticker; every other field is then null."
    },
    "verdict": {
      "type": [
        "string",
        "null"
      ],
      "description": "Undervalued, Fairly valued or Overvalued."
    },
    "currency": {
      "type": [
        "string",
        "null"
      ],
      "description": "Trading currency of price and fair value."
    },
    "industry": {
      "type": [
        "string",
        "null"
      ]
    },
    "conviction": {
      "type": [
        "integer",
        "null"
      ],
      "description": "1-10."
    },
    "fair_value": {
      "type": [
        "number",
        "null"
      ],
      "description": "Null when withheld — see fair_value_usable and withheld_reason."
    },
    "market_cap": {
      "type": [
        "number",
        "null"
      ]
    },
    "risk_level": {
      "type": [
        "string",
        "null"
      ]
    },
    "upside_pct": {
      "type": [
        "number",
        "null"
      ],
      "description": "Percent, not a fraction."
    },
    "pe_trailing": {
      "type": [
        "number",
        "null"
      ]
    },
    "price_as_of": {
      "type": [
        "string",
        "null"
      ]
    },
    "latest_annual": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "revenue": {
          "type": [
            "number",
            "null"
          ]
        },
        "net_income": {
          "type": [
            "number",
            "null"
          ]
        },
        "eps_diluted": {
          "type": [
            "number",
            "null"
          ]
        },
        "fiscal_year": {
          "type": [
            "integer",
            "null"
          ]
        },
        "free_cash_flow": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "description": "As reported in the company's own filings — not estimates."
    },
    "withheld_reason": {
      "type": [
        "string",
        "null"
      ],
      "description": "Why fair_value is null, when it is."
    },
    "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."
    },
    "dividend_yield_pct": {
      "type": [
        "number",
        "null"
      ],
      "description": "Forward yield as a PERCENT, e.g. 2.9 for 2.9%."
    }
  }
}
get_stock_research annotations
{
  "title": "Get stock research",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
screen_stocks — Screen stocks
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

screen_stocks input schema
{
  "type": "object",
  "required": [
    "screen"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 15,
      "maximum": 50,
      "minimum": 1,
      "description": "How many ranked rows to return. The screen is already ranked, so a smaller number gives the strongest names rather than a sample."
    },
    "screen": {
      "enum": [
        "undervalued",
        "high_quality",
        "safe_dividend",
        "undervalued_dividend"
      ],
      "type": "string",
      "description": "Which screen to run."
    },
    "sector": {
      "type": "string",
      "description": "Optional sector filter, e.g. 'Technology'."
    }
  }
}
screen_stocks output schema
{
  "type": "object",
  "required": [
    "screen",
    "rows"
  ],
  "properties": {
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "ticker"
        ],
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "type": [
              "number",
              "null"
            ]
          },
          "ticker": {
            "type": "string"
          },
          "verdict": {
            "type": [
              "string",
              "null"
            ],
            "description": "Undervalued, Fairly valued or Overvalued."
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trading currency of the price and fair value."
          },
          "fair_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "upside_pct": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, not a fraction: 12.5 means +12.5%."
          },
          "quality_score": {
            "type": [
              "number",
              "null"
            ]
          }
        }
      },
      "description": "Ranked. Empty when nothing clears the screen."
    },
    "label": {
      "type": [
        "string",
        "null"
      ]
    },
    "screen": {
      "type": "string"
    },
    "sector": {
      "type": [
        "string",
        "null"
      ],
      "description": "The sector filter applied, if any."
    }
  }
}
screen_stocks annotations
{
  "title": "Screen stocks",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_stocks — Compare stocks
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

compare_stocks input schema
{
  "type": "object",
  "required": [
    "tickers"
  ],
  "properties": {
    "tickers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 8,
      "minItems": 2,
      "description": "Tickers to compare."
    }
  }
}
compare_stocks output schema
{
  "type": "object",
  "required": [
    "companies",
    "not_covered"
  ],
  "properties": {
    "companies": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "ticker"
        ],
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "type": [
              "number",
              "null"
            ]
          },
          "ticker": {
            "type": "string"
          },
          "verdict": {
            "type": [
              "string",
              "null"
            ],
            "description": "Undervalued, Fairly valued or Overvalued."
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trading currency of the price and fair value."
          },
          "conviction": {
            "type": [
              "integer",
              "null"
            ]
          },
          "fair_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "upside_pct": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, not a fraction: 12.5 means +12.5%."
          },
          "value_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "safety_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "quality_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "fair_value_usable": {
            "type": "boolean"
          },
          "dividend_yield_pct": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, e.g. 2.9."
          }
        }
      }
    },
    "not_covered": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tickers asked for that Talval does not cover."
    }
  }
}
compare_stocks annotations
{
  "title": "Compare stocks",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_superinvestors — List superinvestors
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

list_superinvestors input schema
{
  "type": "object",
  "properties": {}
}
list_superinvestors output schema
{
  "type": "object",
  "required": [
    "investors"
  ],
  "properties": {
    "investors": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Pass this to get_superinvestor."
          },
          "person": {
            "type": [
              "string",
              "null"
            ]
          },
          "manager": {
            "type": [
              "string",
              "null"
            ]
          },
          "n_positions": {
            "type": [
              "integer",
              "null"
            ]
          },
          "quarter_end": {
            "type": [
              "string",
              "null"
            ],
            "description": "The reported quarter, YYYY-MM-DD."
          },
          "portfolio_value_usd": {
            "type": [
              "number",
              "null"
            ]
          }
        }
      }
    }
  }
}
list_superinvestors annotations
{
  "title": "List superinvestors",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_superinvestor — Get a superinvestor's portfolio
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_superinvestor input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Slug, e.g. 'berkshire'."
    }
  }
}
get_superinvestor output schema
{
  "type": "object",
  "required": [
    "slug",
    "found"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "found": {
      "type": "boolean",
      "description": "False when no tracked investor has that slug."
    },
    "person": {
      "type": [
        "string",
        "null"
      ]
    },
    "manager": {
      "type": [
        "string",
        "null"
      ]
    },
    "activity": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "reduced": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "added_to": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "new_buys": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sold_out": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "Quarter on quarter. Null when there is no prior filing to compare against."
    },
    "holdings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "issuer": {
            "type": [
              "string",
              "null"
            ]
          },
          "ticker": {
            "type": [
              "string",
              "null"
            ]
          },
          "activity": {
            "type": [
              "string",
              "null"
            ]
          },
          "pct_of_portfolio": {
            "type": [
              "number",
              "null"
            ],
            "description": "Percent, e.g. 12.4."
          }
        }
      },
      "description": "Largest first, capped at 30."
    },
    "n_positions": {
      "type": [
        "integer",
        "null"
      ]
    },
    "quarter_end": {
      "type": [
        "string",
        "null"
      ]
    },
    "portfolio_value_usd": {
      "type": [
        "number",
        "null"
      ]
    }
  }
}
get_superinvestor annotations
{
  "title": "Get a superinvestor's portfolio",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
stocks_of_the_week — Stocks of the week
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

stocks_of_the_week input schema
{
  "type": "object",
  "properties": {}
}
stocks_of_the_week output schema
{
  "type": "object",
  "required": [
    "picks"
  ],
  "properties": {
    "note": {
      "type": [
        "string",
        "null"
      ],
      "description": "This week's written note, when there is one."
    },
    "picks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "ticker"
        ],
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "rank": {
            "type": [
              "integer",
              "null"
            ]
          },
          "sector": {
            "type": [
              "string",
              "null"
            ]
          },
          "ticker": {
            "type": "string"
          },
          "verdict": {
            "type": [
              "string",
              "null"
            ]
          },
          "conviction": {
            "type": [
              "integer",
              "null"
            ]
          }
        }
      },
      "description": "Empty when nothing is published for this week yet."
    },
    "week_start": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}
stocks_of_the_week annotations
{
  "title": "Stocks of the week",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (4 of 4 answered).

  1. 2026-11-07: 2 of 2 checks answered
  2. 2026-11-09: 1 of 1 checks answered
  3. 2026-11-10: 1 of 1 checks answered

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
1226 ms
95th percentile latency
1226 ms

Maintenance history

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

  • · probe · passed · 1226 ms · metadata changed · 7 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 talval-mcp https://talval.com/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 talval-mcp --url https://talval.com/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start talval-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "talval-mcp": {
      "type": "http",
      "url": "https://talval.com/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 talval-mcp https://talval.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://talval.com/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": {
    "talval-mcp": {
      "serverUrl": "https://talval.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Talval 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 Talval 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