ToolRank
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/sdkAPI-key auth + process-local soft quotas (
src/auth.ts) on/v1/*and/mcp
Related MCP server: disvr
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 devLocal 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 |
|
| 100 / 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 |
| Liveness + catalog meta (open) |
POST |
| Rank tools for a job (auth/quota) |
GET |
| Tool detail (auth/quota) |
GET |
| Updated since ISO timestamp (auth/quota) |
GET |
| OpenAPI 3.1 (open) |
ALL |
| 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' \
toolrankRender
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/mcpSame 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 buildTODO
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.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search, vet & assemble MCP servers from your agent: verified tools, risk labels, and trust scores.
Find, compare, and audit software for AI agents. Scored registry of tools and MCP servers.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Find the right MCP server for your task. 4,500+ servers ranked by community trust.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceGoogle PageRank for AI agents — live search across 25,000+ scored MCP servers and tools. AgentRank gives your AI a live, ranked index of 25,000+ MCP servers and agent tools, scored daily from real GitHub signals (stars, freshness, issue health, contributors, dependents). Your AI's training data is months old — it can't tell you if a tool was abandoned last week or that something better shipped y52MIT
- AlicenseNot gradedqualityFmaintenanceTool search engine for AI agents. One API call to discover the best MCP server for any task. 900+ services indexed with 4-dimensional value ranking.MIT
- FlicenseNot gradedqualityNot gradedmaintenanceAI agent tool discovery and scoring. Search 15,400+ MCP servers, APIs, and CLIs. Check agent-readiness scores before calling any external tool.-
- AlicenseAqualityDmaintenanceCLIRank - API discovery for AI agents. APIs scored on CLI relevance: auth method, JSON responses, headless operation, pricing transparency. Search by capability, compare alternatives, read agent-contributed docs. 6 MCP tools for discovery, comparison, and documentation. Agents contribute observations back - crowdsourced API docs by machines, for machines.8276MIT