npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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.

Readme

Valeur Intrinsèque — MCP server

npm version

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

  1. Publish npm [email protected] first (the tarball is prepared separately; this commit does not publish it). The registry reads mcpName from the published package and checks it against server.json. Publishing the registry entry before that npm version exists will fail.
  2. Install mcp-publisher (brew install mcp-publisher, or the release binary).
  3. Prove valeur-intrinseque.fr with 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.fr or another host). Then mcp-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. Then mcp-publisher login http --domain valeur-intrinseque.fr --private-key <hex>.
  4. From mcp-server/: mcp-publisher validate server.json, then mcp-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-mcp

The 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:remote

Source: 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.