valeur-intrinseque-mcp
v1.0.7
Published
Official MCP server for Valeur Intrinsèque's Score VI: intrinsic value, fundamental analysis, margin of safety, and a stock screener for value investing.
Maintainers
Readme
Valeur Intrinsèque — MCP server
Ask an AI if a stock is undervalued. This is the official MCP server for the Score VI: Valeur Intrinsèque's own 0–100 rating for intrinsic value, fundamental analysis, and margin of safety.
It speaks to Claude, Cursor, ChatGPT, VS Code, and any other MCP client. The same Score VI powers the calculator and stock screener on valeur-intrinseque.fr.
Install page: English · Français
What it does
You give a ticker. The server returns a Score VI out of 100, the criteria behind it, and the raw fundamental analysis an investor would open next: price, P/E, five-year statements, valuation multiples, moat, management, a comparison, or the stock screener.
get_intrinsic_value reads the published score (price, P/E, interpretation, citation). analyze_stock adds the scored criteria and the key ratios. Neither tool invents a per-share price target. The website calculator does estimate one — see How the method works.
Not investment advice. Scores and estimates are research inputs. They are not a recommendation to buy or sell, and they can be wrong or stale.
Example prompts
- "Is Apple undervalued?"
- "Compare LVMH, Hermès and Kering"
- "Top-scored European stocks"
- "Show the Score VI and the ten criteria for ASML"
- "What does Microsoft's balance sheet look like over five years?"
"Is Apple undervalued?" maps to analyze_stock or get_intrinsic_value (AAPL). The screener does not take a region argument: "Top-scored European stocks" means screen_stocks, then keep European listings (tickers such as MC.PA, RMS.PA, ASML.AS, SAP.DE).
Tools
Billable tools (analyze_stock, get_intrinsic_value, compare_stocks) share 2 free Score VI calls per month per API key, or per IP if you do not send a key. The other tools are not metered.
| Tool | Arguments | Returns |
| --- | --- | --- |
| analyze_stock | symbol (string, e.g. AAPL, MC.PA) | Profile, Score VI /100, each scored criterion, EPS, P/E, ROE, debt/equity, dividend yield, current ratio, book value per share, P/B. A per-share intrinsic value and margin of safety only if the payload already includes one. |
| get_intrinsic_value | symbol | Published Score VI, interpretation (≥70 solid, 40–69 mixed, below 40 weak), price, P/E, eliminatory-criterion flag, calculation date, citation, disclaimer. No criterion list. |
| compare_stocks | symbols (array of 2–8 tickers) | Side-by-side published score, price, P/E, and name. |
| screen_stocks | limit (number, 1–50, default 20) | Recently analyzed names, highest Score VI first: ticker, name, score, price. No country or sector filter. |
| get_financial_statements | symbol, statement (income | balance | cashflow) | Up to five years of that statement. |
| get_valuation_metrics | symbol | Year-end multiples the source publishes (P/E, P/S, P/FCF, P/OCF, plus P/B, PEG, dividend yield and EV/EBITDA when they exist). |
| get_stock_price | symbol | Latest price and currency. |
| get_price_history | symbol, range (1mo 3mo 6mo 1y 2y 5y, default 1y), interval (1d 1wk 1mo, default 1d) | Change, high, low, and the last 10 points. |
| get_moat_score | symbol | Competitive-advantage score from 1 to 5. |
| get_management_score | symbol | Management score from 1 to 5. |
Directory blurbs (tagline, short description, long description) live in LISTING.md.
Install in 30 seconds
Node.js 18+ for the local package. The remote URL needs no install.
Claude Desktop
Edit the config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"valeur-intrinseque": {
"command": "npx",
"args": ["-y", "valeur-intrinseque-mcp@latest"]
}
}
}Restart Claude. Ask "Is Apple undervalued?"
Claude custom connector
In Claude.ai: Settings → Connectors → Add custom connector.
- URL:
https://mcp.valeur-intrinseque.fr/mcp - Auth: none. Optional header
Authorization: Bearer vi_live_…if you want the monthly quota on your key.
Cursor
One-click install:
Add Valeur Intrinsèque to Cursor
Or Cursor Settings → MCP and paste:
{
"mcpServers": {
"valeur-intrinseque": {
"command": "npx",
"args": ["-y", "valeur-intrinseque-mcp@latest"]
}
}
}ChatGPT
Add a custom MCP connector (Developer mode) with the remote URL https://mcp.valeur-intrinseque.fr/mcp. No local process. Authentication can stay empty; a bearer token is optional.
VS Code
In user or workspace mcp.json (MCP: Open User Configuration):
{
"servers": {
"valeur-intrinseque": {
"type": "stdio",
"command": "npx",
"args": ["-y", "valeur-intrinseque-mcp@latest"]
}
}
}Remote, no Node:
{
"servers": {
"valeur-intrinseque": {
"type": "http",
"url": "https://mcp.valeur-intrinseque.fr/mcp"
}
}
}Any other MCP client
Local stdio:
{
"command": "npx",
"args": ["-y", "valeur-intrinseque-mcp@latest"]
}Remote Streamable HTTP: https://mcp.valeur-intrinseque.fr/mcp
Health check: GET https://mcp.valeur-intrinseque.fr/health
Remote or local
| | Local (npx, stdio) | Remote (https://mcp.valeur-intrinseque.fr/mcp) |
| --- | --- | --- |
| Where it runs | On your machine | Hosted Streamable HTTP server |
| Install | Node 18+ and npx | None |
| API key | Optional VI_API_KEY | Optional Authorization: Bearer or X-API-Key |
| Backend | https://valeur-intrinseque.fr (override with VI_API_URL) | Same API |
API key
A key is not required to connect or to call tools.
Create an optional vi_live_… key at valeur-intrinseque.fr/en/mcp (account page: /fr/mcp-pro or /en/mcp-pro). With a valid key, the 2 free Score VI calls per month belong to you. With no key, that quota follows the client IP. A key that is unknown, revoked or rotated away is rejected: it does not fall back to the IP quota. After the quota, billable tools return an upgrade message (or an x402 payment request when the host has configured it). Quotes, statements, moat, management, and the screener stay outside that quota, but they still reject an invalid key.
Local:
"env": { "VI_API_KEY": "vi_live_…" }Remote:
"headers": { "Authorization": "Bearer vi_live_…" }How the method works
The Score VI is Valeur Intrinsèque's own rating, computed once for the calculator, the screener, and this server (calculateIntrinsicValueScore). It is a number from 0 to 100.
Each available criterion gets 0–100 points from the distance to its bar, not a yes/no. Points are weighted. The published score is 70% of that weighted average and 30% of the weakest pillar (revenue growth, ROCE, free cash flow, P/E, PEG, stable profits, net margin). If two or more criteria score under 35 points, the result is multiplied by 0.92. Snapshot ratios use the last twelve months and the latest quarter. Profit history and revenue growth use annual accounts.
The ten criteria the score can include:
| Criterion | Bar | Weight | Role | | --- | --- | --- | --- | | Debt / equity | under 1.5 | 8 | Eliminatory if it fails | | Stable profits | no loss year in up to 10 years | 12 | Eliminatory; needs at least 5 years | | Revenue growth | above 15% a year (5-year CAGR) | 18 | Pillar | | ROCE | above 15% | 14 | Eliminatory and pillar | | Net margin | above 10% | 10 | Pillar | | P/E, or PEG | P/E under 25, or PEG under 1 | 14 | One valuation line. PEG is P/E divided by the 5-year revenue CAGR. A P/E under 40 can still pass when 5-year EPS growth is at least 40% and the moat is 5/5 | | Moat | at least 3/5 | 8 | Eliminatory when the 1–5 score is present and below 3 | | Free cash flow | above 0 | 12 | Pillar; points also follow the FCF margin | | Dilution | about 0% or lower (buybacks help) | 6 | | | Management | at least 3/5 | 8 | Eliminatory when the 1–5 score is present and below 3 |
A missing moat or management score is skipped or marked as still loading. It does not become a default 3/5. An eliminatory miss does not delete the score; get_intrinsic_value reports it separately. Reading bands: 70+ worth a closer look, 40–69 mixed, under 40 several quality or price tests fail.
The per-share intrinsic value on the website is separate from the Score VI. The fair-price band is earnings per share times a multiple that starts at 15: 18 when five-year EPS growth is at least 15% a year, 16 at 8% or more, 14 if growth is only positive, 12 if it is not. One extra point if ROE is above 20%. The multiple stays between 10 and 20. If EPS is missing, the band uses free cash flow per share times 16. Margin of safety is (estimate − price) / price. The MCP tools do not recompute that band; they return the Score VI, and analyze_stock prints a per-share value only when the API payload already contains one.
Official MCP registry
server.json is ready. It is not published by this repository change.
The old name io.github.louis-vld/valeur-intrinseque does not match this project. GitHub login only authorizes io.github.<github-login>/*. This code lives on GitLab (louisvld), and the registry has no io.gitlab.* namespace, so io.gitlab.louisvld/valeur-intrinseque would be rejected.
The name you can prove is the domain you control. valeur-intrinseque.fr reverses to fr.valeur-intrinseque. The server name is:
fr.valeur-intrinseque/valeur-intrinseque
That string is name in server.json and mcpName in package.json. They must stay identical.
What verification needs
- Publish npm
[email protected]first (the tarball is prepared separately; this commit does not publish it). The registry readsmcpNamefrom the published package and checks it againstserver.json. Publishing the registry entry before that npm version exists will fail. - Install
mcp-publisher(brew install mcp-publisher, or the release binary). - Prove
valeur-intrinseque.frwith one of these, then log in:- DNS. Add the TXT record the CLI prints on the apex
valeur-intrinseque.fr(not on_mcp.valeur-intrinseque.fror another host). Thenmcp-publisher login dns --domain valeur-intrinseque.fr --private-key <hex>. - HTTP. Host the file the CLI prints at
https://valeur-intrinseque.fr/.well-known/mcp-registry-auth. Thenmcp-publisher login http --domain valeur-intrinseque.fr --private-key <hex>.
- DNS. Add the TXT record the CLI prints on the apex
- From
mcp-server/:mcp-publisher validate server.json, thenmcp-publisher publish server.json.
Do not commit the private key. Rotate it by publishing a new TXT or well-known file and removing the old one.
Configuration
| Variable | Default | Role |
| --- | --- | --- |
| VI_API_URL | https://valeur-intrinseque.fr | Backend base URL |
| VI_API_KEY | empty | Optional vi_live_… key for local stdio |
| MCP_PORT | 3013 | HTTP port for node index.js --remote |
Docker
Glama and self-hosters can build the image already in this folder:
docker build -t valeur-intrinseque-mcp .
docker run --rm -p 3013:3013 -e VI_API_URL=https://valeur-intrinseque.fr valeur-intrinseque-mcpThe container runs node index.js --remote and exposes /mcp and /health. Building the image does not deploy the production host.
Tool text defaults to English. Set VI_LANG=fr (stdio) or send Accept-Language: fr (remote) for French. The free-quota message uses the limit returned by the API.
Development
cd mcp-server
npm install
npm test
npm start # stdio
npm run start:remoteSource: gitlab.com/louisvld/valeur-intrinseque (mcp-server/). Issues: GitLab issues.
En français
Valeur Intrinsèque est le serveur MCP du Score VI, la note sur 100 de la méthode du site : qualité fondamentale, valorisation et marge de sécurité. Ce n'est pas un conseil en investissement.
Exemples : « Apple est-elle sous-évaluée ? », « Compare LVMH, Hermès et Kering », « Quelles actions européennes ont le meilleur Score VI ? ».
Installation locale : npx -y valeur-intrinseque-mcp@latest. Point distant : https://mcp.valeur-intrinseque.fr/mcp. La clé API est facultative ; elle sert seulement à rattacher le quota (2 scores gratuits par mois) à votre compte plutôt qu'à l'adresse IP. Page d'installation : valeur-intrinseque.fr/fr/mcp.
