# io.github.minhtc/aifree

> Verified free AI offers, API free tiers, credits and student/startup programs from aifree.dev.

- name: io.github.minhtc/aifree
- version: 1.0.1
- connection class: R0 (autonomous)
- trust: 92/100
- quality: 77/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.minhtc%2Faifree
- tools: https://api.protogrid.dev/v1/servers/io.github.minhtc%2Faifree/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "aifree": {
      "type": "http",
      "url": "https://aifree.dev/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 98
- freshness: 100
- provenance: 75
- drivers: +repository +website +reachable +uptime-96% +updated-24d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 77/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 81 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 19 of 19 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_free_ai_offers (destructiveHint, idempotentHint); best_lists (destructiveHint, idempotentHint); ask_aifree (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 3,619 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 83 (weight 15)

- warn `stability.changes`: 16 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

### dependencies: 67 (weight 15)

- fail `deps.known_vulns`: 1 advisory to act on (malicious, or rated high or critical with a fix available): GHSA-27r3-jxmh-p828 in body-parser@2.3.0 (indirect, fixed in 2.4.0); 7 more of lower severity or without a fix
- pass `deps.mcp_sdk_version`: @modelcontextprotocol/sdk 1.32.1, no known advisory
- pass `deps.resolvable`: @aifree/mcp@1.0.1 resolved: 99 packages

- tools: 19, about 3,619 tokens to load them all
- tool set hash: 2a3b31a3c86f73191d3dd568ee4332ae
- tools last changed: 2026-11-12T18:54:10.848Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.minhtc/aifree.svg)](https://protogrid.dev/servers/io.github.minhtc/aifree)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-12 `is_free` added
  - Answers "is <brand, model or product> free?" from the verified catalog: free (true, false, or null when the name is unknown), a one-paragraph answer with the check date, the best verified offer (main limit, card rule, who qualifies, verified date) and the aifree.dev pages to cite. Unknown names return a search URL. Same record as GET /api/v1/is-free?q=.
- 2026-11-10 `calc` added
  - The aifree.dev rate-limit calculator: for req requests a day of about tok tokens, every free LLM API tier with a verdict (fits / short / not-published), its daily capacity, and a combo when no single tier fits. Same data as GET /api/v1/calc.
- 2026-11-09 `best_list` added
  - One published top list by slug (see best_lists): the picks with links, FAQ, sources and the Markdown body. Same data as GET /api/v1/best/{slug}.
- 2026-11-09 `best_lists` added
  - The published "best free X" top lists of aifree.dev/best: title, description, dates and the picks in order. Same data as GET /api/v1/best; call best_list for one list with links, FAQ and sources.
- 2026-11-05 `upcoming_deadlines` added
  - Offers whose free deal ends within N days (default 30), soonest first: slug, name, provider, expiryDate (last day, UTC), endsAt, daysLeft and the offer url. The data behind aifree.dev/calendar; same filters and paging as GET /api/v1/deadlines. "listed" rows are not yet verified by a person.
- 2026-11-04 `offer_history` added
  - What changed on one offer, newest first: its changelog events (listed, verified, terms_updated, expired, incidents, …) and edits to its public facts (what is free, limits, card rule, expiry, vendor URL), each with a { from, to } diff when fields changed. Same data and paging as GET /api/v1/offers/{slug}/history.
- 2026-11-04 `search_free_ai_offers` changed (inputSchema)
- 2026-10-28 `get_status` added
  - aifree.dev own status: overall verdict, 30-day uptime, per-path checks and background job health. Same report as GET /api/v1/status.
- 2026-10-28 `build_stack` added
  - The aifree.dev/stack builder: for a template (chat, rag, image, voice, agent, finetune) one free pick per slot (llm, emb, vec, host, gpu, tts, stt, image) with alternatives, the tightest published LLM requests per day, cards and programs to watch, and a shareable URL. Optionally pin a slot to an offer slug, require no card, or limit to a country.
- 2026-10-28 `list_providers` added
  - Every provider with public offers: slug, offer count, categories, free types and its offers with status and URL. Same data as GET /api/v1/providers.

Full history: https://api.protogrid.dev/v1/servers/io.github.minhtc%2Faifree/changes

## Dependencies

- npm @aifree/mcp@1.0.1: resolved, 98 dependencies, MCP SDK @modelcontextprotocol/sdk 1.32.1
  - GHSA-27r3-jxmh-p828 (high) in `` body-parser@2.3.0 ``, indirect, fixed in `` 2.4.0 ``, advisory summary: "body-parser vulnerable to Denial of Service via trailing bytes after a compressed request body" https://osv.dev/vulnerability/GHSA-27r3-jxmh-p828
  - GHSA-jpvv-r467-5p4w (moderate) in `` @hono/node-server@2.1.5 ``, indirect, fixed in `` 2.1.6 ``, advisory summary: "@hono/node-server: Backslash in the request path is parsed as a path separator, bypassing path-based access control at a reverse proxy" https://osv.dev/vulnerability/GHSA-jpvv-r467-5p4w
  - GHSA-qv5m-9pm6-hqp3 (moderate) in `` @hono/node-server@2.1.5 ``, indirect, fixed in `` 2.1.6 ``, advisory summary: "@hono/node-server: Unhandled \`ECONNRESET\` on the socket during an asynchronous WebSocket upgrade crashes the process" https://osv.dev/vulnerability/GHSA-qv5m-9pm6-hqp3
  - GHSA-46wx-v44x-9hh2 (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`csrf()\` does not check requests sent by hyperlink auditing (\`text/ping\`)" https://osv.dev/vulnerability/GHSA-46wx-v44x-9hh2
  - GHSA-4h7h-rv7c-7m2v (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`validator('form')\` skips validation for \`multipart/form-data\` requests with extra parameters" https://osv.dev/vulnerability/GHSA-4h7h-rv7c-7m2v
  - GHSA-4m76-xfj5-7975 (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`mount()\` and \`app.mount()\` can forward a path that bypasses middleware scoped inside the mount prefix" https://osv.dev/vulnerability/GHSA-4m76-xfj5-7975
  - GHSA-h7mg-cq63-vhpq (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: RegExpRouter skips wildcard middleware for some route sets and for paths with an encoded line terminator" https://osv.dev/vulnerability/GHSA-h7mg-cq63-vhpq
  - GHSA-3gg2-335m-rxc6 (low) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`css\` helper does not escape a closing tag split between the template and an interpolated value, allowing HTML injection" https://osv.dev/vulnerability/GHSA-3gg2-335m-rxc6

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://aifree.dev/mcp (streamable-http, auth none, reachable true, uptime30d 0.95604396)

## Packages

- npm @aifree/mcp@1.0.1

## Tools (19)

- `ask_aifree`: A short answer about free AI offers grounded in the verified catalog, citing only offer slugs it was shown. Declines questions outside the catalog. Cached per question for 24 h; subject to a daily budget.
- `best_list`: One published top list by slug (see best_lists): the picks with links, FAQ, sources and the Markdown body. Same data as GET /api/v1/best/{slug}.
- `best_lists`: The published "best free X" top lists of aifree.dev/best: title, description, dates and the picks in order. Same data as GET /api/v1/best; call best_list for one list with links, FAQ and sources.
- `build_stack`: The aifree.dev/stack builder: for a template (chat, rag, image, voice, agent, finetune) one free pick per slot (llm, emb, vec, host, gpu, tts, stt, image) with alternatives, the tightest published LLM requests per day, cards and programs to watch, and a shareable URL. Optionally pin a slot to an offer slug, require no card, or limit to a country.
- `calc`: The aifree.dev rate-limit calculator: for req requests a day of about tok tokens, every free LLM API tier with a verdict (fits / short / not-published), its daily capacity, and a combo when no single tier fits. Same data as GET /api/v1/calc.
- `check_eligibility`: Use when someone asks what free AI they qualify for given who they are, e.g. "I am a student in Vietnam with no credit card, what free AI can I get?". Same rules as the aifree.dev/unlock quiz: student and startup programs only when the profile says so, no-card drops offers that ask for a card, country drops offers recorded as other-countries-only (offers with no recorded region stay in and are counted in unrecordedRegionCount), building narrows by category. All parameters are optional; omitted ones mean not a student, no startup, anywhere, card OK, any category. Unknown values are ignored the same way. Returns verified rows first, then by USD value. totalUsd sums USD headline values of verified rows only (tokens, requests, images or minutes count as $0, no exchange rates); listed rows are public but not yet checked by a person. limit (default 20, max 50) only trims the returned list: total, verifiedCount and totalUsd cover every match. Each provider decides who qualifies; cite the offer url and the unlockUrl (the same result as a page).
- `compare_offers`: A markdown comparison table (provider, what is free, limits, card rules, catch, expiry, status) for 2-8 offer slugs.
- `find_models`: Which free API tiers serve an LLM model, with the published free-tier rate limits (RPM, RPD, TPM, TPD, requests/month), context window, tool calling and JSON mode (structured output). Same rows and ranking (most requests per day first) as the free LLM API picker. Search by model or provider name, optionally by family.
- `get_model`: One model by slug (an alias slug resolves to the canonical one) with every live free source: offer, provider, verified or listed, card rule, context and the published rate limits (rpm, rpd, tpm, tpd, rpmo; null = not published). Same record as GET /api/v1/models/{model}.
- `get_offer`: Full details for one offer by slug (the last path segment of an aifree.dev/offer/... URL), including the write-up and, for API free tiers, the models served with their published rate limits (rateLimit: rpm, rpd, tpm, optional tpd and rpmo; null = not published), the API id of each model when recorded (apiId), whether its vendor documents JSON mode / structured output (structuredOutput, omitted when unknown), and the API base URL with its request shape (apiBaseUrl, apiCompat: openai, anthropic, google or custom).
- `get_status`: aifree.dev own status: overall verdict, 30-day uptime, per-path checks and background job health. Same report as GET /api/v1/status.
- `is_free`: Answers "is <brand, model or product> free?" from the verified catalog: free (true, false, or null when the name is unknown), a one-paragraph answer with the check date, the best verified offer (main limit, card rule, who qualifies, verified date) and the aifree.dev pages to cite. Unknown names return a search URL. Same record as GET /api/v1/is-free?q=.
- `list_free_llm_apis`: Free LLM / inference API tiers and credits (Gemini, Groq, OpenRouter, Mistral, Cohere, NVIDIA, …) with their limits and card rules.
- `list_models`: Every model some live free offer serves (the data behind aifree.dev/model and GET /api/v1/models), most free sources first: slug, family, vendor, context window, tool calling, vision, JSON mode, open weights and how many free sources serve it. Filter by name, family, provider, capability or minimum context; then call get_model for the sources and rate limits.
- `list_providers`: Every provider with public offers: slug, offer count, categories, free types and its offers with status and URL. Same data as GET /api/v1/providers.
- `offer_history`: What changed on one offer, newest first: its changelog events (listed, verified, terms_updated, expired, incidents, …) and edits to its public facts (what is free, limits, card rule, expiry, vendor URL), each with a { from, to } diff when fields changed. Same data and paging as GET /api/v1/offers/{slug}/history.
- `recent_changes`: What was listed, verified, changed or expired recently, newest first.
- `search_free_ai_offers`: Find free AI tools, API free tiers, credits and programs. Free text plus optional filters; returns the best matches with limits, card rules and the page URL to cite.
- `upcoming_deadlines`: Offers whose free deal ends within N days (default 30), soonest first: slug, name, provider, expiryDate (last day, UTC), endsAt, daysLeft and the offer url. The data behind aifree.dev/calendar; same filters and paging as GET /api/v1/deadlines. "listed" rows are not yet verified by a person.
