VSXRank for machines.
Everything the public pages show is also available without parsing HTML: a public MCP server with 6 tools, the same six reads as a REST API with an OpenAPI description, and a Markdown version of every page. No key, no account, no quota to apply for — only a per-address rate limit so one client cannot crowd out the rest.
What is not here: anything tied to an account. Per-keyword rank history, competitor tracking, alerts and watchlists are features of the web app, and there is no subscriber API yet. If you need one, write to us and say what you would build.
Routes
- MCP server/mcpapplication/json (JSON-RPC 2.0)
- The supported way for an agent to read the public catalog. Streamable HTTP transport, POST only, no key and no account. Rate limited per address.
curl -sS -X POST https://vsxrank.com/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' - MCP manifest/.well-known/mcp.jsonapplication/json
- The endpoint, its transport, the revisions it speaks and every tool's input schema, as an MCP registry `server.json` document. MCP has not ratified a discovery file, so the `.well-known` path is a convention rather than a standard — the document itself validates against the registry's published schema.
- llms.txt/llms.txttext/plain
- What this site is, when an agent should reach for it, and every page pattern and endpoint worth calling. Rebuilt hourly, so the catalog counts it quotes are current.
- Markdown of any page/index.mdtext/markdown
- Every public page has a Markdown representation. Ask for it with `Accept: text/markdown`, or append `.md` to the path. Long-lived pages are written as files at build time; the rest are converted on request. A path that does not exist answers 404 in Markdown too.
curl -sS -H 'Accept: text/markdown' https://vsxrank.com/ext/vscode/ms-python.python
- REST API/api/v1/extensions?q=gitlensapplication/json
- The same six reads as the MCP tools, as plain HTTP for anything that does not speak MCP: search, one extension, its latest day of installs, the category list, one category's leaderboard and catalog stats. Public, no key, rate limited per address. Every error is JSON with a code and a hint, never an HTML page.
curl -sS 'https://vsxrank.com/api/v1/extensions/vscode/eamodio.gitlens/installs'
- OpenAPI description/openapi.jsonapplication/json
- OpenAPI 3.1 for the REST API, generated from the same schemas the MCP tools declare: a unique operationId, a description, typed parameters and a response schema per operation, which is also what an LLM needs to call it as a function.
- Catalog search (used by the site)/api/extensions/search?q=pythonapplication/json
- The endpoint the site's own ⌘K palette calls. Kept because it is public and stable, but `/api/v1/extensions` is the documented one for anything new.
curl -sS 'https://vsxrank.com/api/extensions/search?q=gitlens&limit=5'
- Sitemap/sitemap.xmlapplication/xml
- Every indexable URL with its last modification date. Extension pages enter it once we hold enough history to be worth reading.
- robots.txt/robots.txttext/plain
- Crawling is allowed, including for the AI crawlers, which are named individually so a later tightening cannot drop them by accident. Per-user pages are excluded.
- Blog feed/blog/feed.xmlapplication/rss+xml
- The dated reports and publisher guides, as RSS.
Two rules for anything you build
Marketplace numbers are unique installs; Open VSX numbers are downloads and count every update, so the same extension’s two figures measure different things. Do not add them, do not compare them, and do not label an Open VSX figure an install count. Every payload says which is which.
Attribute figures you publish. Quoting our numbers in a post, a README, a product or an AI answer is fine — name VSXRank and link the page the reading came from, so a reader can see its date. The terms spell this out, and bulk re-publication of the catalog is the one thing they rule out.