ToolRank
Rank MCP servers/APIs for a job. Lexical ranking, 36 curated tools, no Stripe.
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
claude mcp add --transport http toolrank 'https://toolrank.onrender.com/mcp' --header 'Authorization: <Optional Bearer API key. Anonymous quota applies without it.>'
{
"mcpServers": {
"toolrank": {
"type": "http",
"url": "https://toolrank.onrender.com/mcp",
"headers": {
"Authorization": "<Optional Bearer API key. Anonymous quota applies without it.>"
}
}
}
}
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
ToolRank (private MVP → public-ready deploy)
Ranked shortlist of MCP servers / APIs for agent jobs — health, price_band, and install snippet.
Live: https://toolrank.onrender.com — OpenAPI at /openapi.json, Streamable HTTP MCP at /mcp.
Private build for Brandon Clark / ToolRank. All Rights Reserved (see LICENSE). GitHub: brandonclark1996-design/toolrank.
Honesty: Ranking is lexical (token overlap), not learned or sponsored. Catalog is 36 curated tools. health is often unknown. Stripe is not wired. Custom domain is not purchased.
Stack
- Node 20, TypeScript
- Hono HTTP API
- Zod validation
- JSON catalog (
data/catalog.json, 36 curated public tools) - MCP stdio (
npm run mcp) and Streamable HTTP (POST /mcp) via@modelcontextprotocol/sdk - API-key auth + process-local soft quotas (
src/auth.ts) on/v1/*and/mcp
Quick start (local)
cd /workspace/toolrank
cp .env.example .env
# Edit .env — set TOOLRANK_API_KEYS if you want keyed access locally
export TOOLRANK_API_KEYS='trk_live_test:builder'
npm install
npm test
npm run build
npm start # listens on 0.0.0.0:$PORT (default 8787)
# or: npm run dev
Local curl with a test key
export TOOLRANK_API_KEYS='trk_live_test:builder'
npm start
curl -s http://127.0.0.1:8787/health | jq .
curl -s http://127.0.0.1:8787/v1/search \
-H 'content-type: application/json' \
-H 'Authorization: Bearer trk_live_test' \
-d '{"job":"scrape website to markdown for RAG","constraints":{"budget":"any"},"limit":5}' | jq .
# Or X-API-Key:
curl -s http://127.0.0.1:8787/v1/search \
-H 'content-type: application/json' \
-H 'X-API-Key: trk_live_test' \
-d '{"job":"web search for research","limit":3}' | jq .
Anonymous (no key) works until the free IP quota is hit (20 / rolling 24h).
Auth + limits
| Caller | How | Soft limit (process-local, rolling 24h) |
|---|---|---|
| Anonymous | No key | 20 req / IP to /v1/* and /mcp |
free key | Authorization: Bearer <key> or X-API-Key: <key> | 100 / key |
builder key | same headers | 2000 / key |
- Env:
TOOLRANK_API_KEYS= comma-separated keys, optionalkey:plan(free\|builder). Example:trk_live_abc:builder,trk_live_xyz:free. Bare key →free. /healthand/openapi.jsonare always open (no auth / no quota).- Invalid key →
401{ error, schema_version, as_of } - Over quota →
429+Retry-After(seconds hint) - Authed
POST /v1/searchresponses includeplan(free\|builder) - Quotas are in-memory / process-local — fine for single-instance MVP; they reset on restart and do not sync across replicas.
Setting keys on the host (Brandon)
Do not commit real keys. Set TOOLRANK_API_KEYS in the host environment:
- Render: Dashboard → your Web Service → Environment → add
TOOLRANK_API_KEYS=trk_live_….…:builder,…(usesync: false/ secret). Redeploy. - Railway: Service → Variables →
TOOLRANK_API_KEYS. - Docker / VPS:
-e TOOLRANK_API_KEYS='…'or systemd/env file outside git. - Local:
export TOOLRANK_API_KEYS='trk_live_test:builder'beforenpm start.
Also set HOST=0.0.0.0 (default in code) and let the platform inject PORT.
HTTP API
Base: https://toolrank.onrender.com (or http://127.0.0.1:8787 locally).
| Method | Path | Description |
|---|---|---|
| GET | /health | Liveness + catalog meta (open) |
| POST | /v1/search | Rank tools for a job (auth/quota) |
| GET | /v1/tools/:id | Tool detail (auth/quota) |
| GET | /v1/fresh?since= | Updated since ISO timestamp (auth/quota) |
| GET | /openapi.json | OpenAPI 3.1 (open) |
| ALL | /mcp | Streamable HTTP MCP (auth/quota; same tools as stdio) |
Search body
{
"job": "string (required)",
"constraints": {
"budget": "free | paid | any",
"auth": "optional hint",
"runtime": "mcp | api | …"
},
"limit": 10,
"check_health": false
}
Optional check_health: true probes top results (2s timeout). Failures stay unknown (no false down).
Deploy (no custom domain / no Stripe)
Docker
docker build -t toolrank .
docker run --rm -p 8787:8787 \
-e TOOLRANK_API_KEYS='trk_live_prod:builder' \
toolrank
Render
- Blueprint:
render.yaml(Docker web service, free plan friendly). - Live hostname:
https://toolrank.onrender.com(no custom domain required). - Set
TOOLRANK_API_KEYSin the dashboard.
Railway
railway.toml(Dockerfile) orProcfile(web: node dist/index.jsafter build).- Set
TOOLRANK_API_KEYSin Variables. Use Railway’s public HTTP domain.
Build step for native Node hosts: npm ci && npm run build then node dist/index.js.
MCP
Tools: search_tools, get_tool, list_fresh (shared handlers for stdio + HTTP).
Streamable HTTP (production)
https://toolrank.onrender.com/mcp
Same API-key / anonymous quota as /v1/*. Official MCP Registry manifest: server.json (io.github.brandonclark1996-design/toolrank). Do not run mcp-publisher from this box unless asked.
Cursor / Claude HTTP MCP config snippet:
{
"mcpServers": {
"toolrank": {
"url": "https://toolrank.onrender.com/mcp"
}
}
}
stdio (local)
npm run mcp
{
"mcpServers": {
"toolrank": {
"command": "npm",
"args": ["run", "mcp"],
"cwd": "/workspace/toolrank"
}
}
}
Ranking
- Tokenize
job(drop stopwords). - Score tag / name / description matches.
- Boost matching
price_bandunder budget constraints. - Boost
health: up; penalizehealth: down. - Tiny preference for
mcp/bothinterfaces.
Honest lexical ranking — no paid placement. 36 curated tools. Health often unknown. Stripe not wired.
Docs
docs/AGENT.md— agent-readable usage (auth headers + limits)docs/llms.txt— compact machine summaryserver.json— Official MCP Registry manifest (not published yet)scripts/README-ingest.md— stub for future registry.modelcontextprotocol.io ingest
Tests & build
npm test # vitest — ranking, envelope, auth middleware, /mcp
npm run build
TODO
- [ ] Implement registry ingest (
scripts/README-ingest.md) - [ ] Persist health probe results between restarts
- [ ] Stripe / paid upgrades (not started)
- [ ] Custom domain (not purchased / not wired)
- [ ] Shared Redis (or similar) quotas if multi-instance
- [ ] Publish
server.jsonwith mcp-publisher (not run from this change)
License
All Rights Reserved — Brandon Clark / ToolRank. See LICENSE.
Questions fréquentes
Qu'est-ce que ToolRank ?
Rank MCP servers/APIs for a job. Lexical ranking, 36 curated tools, no Stripe.
Comment installer ToolRank ?
Il fonctionne comme serveur distant. Dans Claude Code : claude mcp add --transport http toolrank 'https://toolrank.onrender.com/mcp' --header 'Authorization: <Optional Bearer API key. Anonymous quota applies without it.>'. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour ToolRank ?
Oui. Il attend Authorization, à renseigner dans sa configuration.
ToolRank est-il open source ?
Son code est public sur GitHub, mais le dépôt ne déclare pas de licence standard.
Qui maintient ToolRank ?
Il est publié par brandonclark1996-design. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.