ComputeFirst documentation
ComputeFirst is a free service of 350 deterministic tools that AI agents call instead of spending tokens on code: CSV and JSON work, text diffs, UTC/ISO 8601 dates, exact math, graphs and more. Free. No sign-up needed. Your agent finds a tool, runs it and gets an exact, repeatable result instead of writing and debugging code for it. We build tools so your tokens go to your mission.
- MCP server:
https://computefirst.net/mcp(Streamable HTTP, no header needed) - Browse every tool: /tools · For agents: /llms.txt · Full OpenAPI spec (large; search instead): /openapi.json
Connect your AI
Add the MCP URL to your assistant. No key and no Authorization header are needed. A key is optional: sign_in with an email, or a passkey profile, gives one for saved tools, history, personal savings and its own daily allowance; send it as Authorization: Bearer KEY.
Claude Code
claude mcp add --transport http computefirst https://computefirst.net/mcp
Claude (claude.ai and Claude Desktop)
Settings → Connectors → Add custom connector. Name: ComputeFirst. URL: https://computefirst.net/mcp.
Codex
Add to ~/.codex/config.toml:
[mcp_servers.computefirst]
url = "https://computefirst.net/mcp"
Cursor
Add to ~/.cursor/mcp.json, or .cursor/mcp.json in a project:
{
"mcpServers": {
"computefirst": {
"url": "https://computefirst.net/mcp"
}
}
}
Gemini CLI
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"computefirst": {
"httpUrl": "https://computefirst.net/mcp"
}
}
}
VS Code
Add to .vscode/mcp.json:
{
"servers": {
"computefirst": {
"type": "http",
"url": "https://computefirst.net/mcp"
}
}
}
Other MCP clients
Use Streamable HTTP with the URL above and send Accept: application/json, text/event-stream.
MCP tools
search: Find tools for an English task (3 by default, up to 5), each with a 0–1 score; a confident first match includes its contract. Execute a suitable match directly; skip search for known versions. If nothing fits, call request_tool.describe: Get the selected tool input schema, limits and examples. Reuse its versioned contract.execute: Run a known tool with its exact input. Returns result and compact savings receipt. Large files should use the CLI.execute_batch: Run 1–20 known tools in one request. Optional bindings fill input keys from earlier results (JSON Pointer); include_result:false omits intermediates. Failed dependencies are skipped. Each success uses one allowance. Resolved inputs/results and aggregate output: 256 KiB. Rebuild failed inputs before retrying; no automatic replay.savings: Read savings, optionally by model: with a key, your measured and estimated totals; otherwise community verified totals. Unmeasured is not zero.feedback: Tell ComputeFirst what helped or went wrong (for a missing tool, prefer request_tool). Omit secrets and raw data. Use a stable request_id for retries.request_tool: Ask for a tool that does not exist yet: describe the task; example input/output help. Optional contact_email (needs email_consent:true, only with the person’s agreement) gets one email when it ships. Omit secrets.subscribe: Subscribe an email to new-tool announcements, only with the person’s explicit agreement (consent:true). Every email has an unsubscribe link.sign_in: Only with the person’s agreement (consent:true): free account for this email (unverified); returns an agent key once for saved tools, history, personal savings, higher limits and request tracking. newsletter:true adds new-tool emails.profile: Your account, keys, privileges and tool-request status (the person sees the same account). Needs a key.activity: Your recent calls and outcomes; pass next as before to page. Do not poll. Needs a key.saved_tools: List, save or remove a versioned tool in the person’s library. Reuse saved tools directly; avoid repeated discovery. Needs a key.report_savings: Tell us your model and, if you can, estimated_tokens_saved (tokens this work would otherwise cost you). Returns an estimated (client-reported) dollar value at list prices; unknown stays null. Measured comparisons add task_id, baseline_id, baseline, actual, whole_task:true, execution_ref.
Give us a little data, get more value
Everything above works without any data from you. Each piece your agent chooses to share unlocks something concrete:
| Your agent shares | It gets |
|---|---|
| Nothing | Every tool, free, within the daily limits below |
Its model and its own estimate of the tokens a call saved: report_savings | That estimate's dollar value at the model's list price, and, with a key, running totals |
An email: sign_in | A key for 90 days with saved tools, history, personal totals and its own daily allowance |
A tool it could not find: request_tool | We build it; with an email and consent, one email when it ships |
ComputeFirst does not measure the tokens your agent spends or saves: every dollar figure is your agent's own token estimate at list price. A model on execute or execute_batch is only recorded with the call (unusable values are ignored). The first successful execute or execute_batch of each UTC day carries a one-line invite field that says this; batch items never do.
Model and savings reports
Call report_savings (or POST /v1/savings, no key needed) with your model id and, if you can, your own estimate of the tokens the work would otherwise have cost:
{"model":"claude-opus-5-5","estimated_tokens_saved":{"input":1200,"output":400}}
With estimated_tokens_saved, the answer returns that estimate's dollar value at the model's public list price (a dated table, currently 2026-09-28, with Anthropic's published prices), labeled "estimated (client-reported)". Without it, or for a model without a dated price, the value stays null, never guessed. A measured whole-task comparison (task_id, baseline_id, baseline, actual, whole_task: true and the call's execution_ref) is also accepted and kept separate. Over HTTP, the header X-ComputeFirst-Model names your model on any call.
Sign in with an email
sign_in (MCP) or POST /v1/accounts/email with {"email": "...", "consent": true} returns a new agent key once; add "newsletter": true to also get new-tool emails. Only sign in with the person's agreement. The key adds saved_tools, activity, personal totals in savings, request status in profile and a higher daily limit.
The email is not verified yet, and nothing is sent to it. Each sign-in therefore creates its own account and key: nothing is merged with other accounts that use the same email, and no call can reach another account's data. Keys last 90 days. Saved tools and history belong to that key's account: a new sign-in (after expiry, or with a lost key) starts a new, empty account until email verification exists.
Use it over HTTP
No key needed. Search, read the contract, then execute:
curl "https://computefirst.net/v1/tools/search?q=convert+csv+to+json&limit=3"
curl https://computefirst.net/v1/tools/csv-to-json/versions/1.0.0
curl -X POST https://computefirst.net/v1/tools/csv-to-json/versions/1.0.0/execute \
-H "Content-Type: application/json" \
-d '{"csv":"name,city\nAda,London\n"}'
The response is {"result":[{"name":"Ada","city":"London"}]}. Every tool page shows its own example. /openapi.json is the full machine-readable spec with every tool's schema, several hundred KB: agents should search and read one contract instead.
Search tips
- Describe the task in plain English, for example "remove duplicate rows from a csv by email".
- An exact tool ID or operation phrase always ranks first. Known IDs can skip search and go straight to execute.
- Search returns up to 5 candidates (MCP default 3), each with a 0–1 score, and may return none; then the response carries a short
hintand you can request the tool (below). - Queries are English and lexical: up to 256 UTF-8 bytes and 40 distinct terms.
Batch and compose
Run up to 20 tools in one request with execute_batch (MCP) or POST /v1/execute-batch. A later operation can fill an input key from an earlier result with bindings (a JSON Pointer), and include_result: false leaves an intermediate result out of the response:
{"operations": [
{"id":"csv-to-json","version":"1.0.0","input":{"csv":"team,name\nb,Ada\na,Zoe\n"},"include_result":false},
{"id":"json-array-sort-objects","version":"1.0.0","input":{"keys":["team","name"]},"bindings":[{"key":"items","from":0,"path":""}]}
]}
Each operation reports its own outcome. Rebuild a failed input before retrying; successful operations are never replayed automatically.
Command-line client
A standalone Node.js 22.18+ client is available at /clients/cli/. Download /clients/cli/1.0.0/cli.mjs, verify its SHA-256 from /clients/cli/latest.json, and pass large local files with --input-file. No key is needed; the COMPUTEFIRST_API_TOKEN environment variable optionally sends one:
node cli.mjs search "compare two csv files" --base-url https://computefirst.net
node cli.mjs run csv-to-json 1.0.0 --input input.json --base-url https://computefirst.net
Limits
- Free, with daily limits (UTC days) that protect shared capacity. Without a key: 2,000 executions per network, shared by everyone on that network, within a pool of 20,000 for all calls without a key. With an email sign-in key: 5,000 per key, within a pool of 5,000 shared by all email keys. Passkey-profile keys, whose calls are content-recorded, share a pool of 1,000. A short-window limit also applies per network or key.
- Hosted assistants (claude.ai and other web connectors) call from shared addresses, so their users can share one network's allowance and short-window limit: sign in with an email for your own daily allowance.
- Over a limit, the service answers HTTP 429 with
retry_after(seconds). Shared pools are not a guarantee: on a very busy day a pool can run out before your own allowance does. - Request bodies up to 256 KiB of JSON. Batches hold 1 to 20 operations, and each resolved input, result and batch response is limited to 256 KiB.
- The same input to the same tool version always gives the same result. Dates and times are UTC and ISO 8601 only.
Missing a tool?
Call request_tool with a short description of the task (and an example input and output if you have one), or POST /v1/tool-requests. You may add an email, with consent, for one email when the tool ships; nothing else is sent to it. Requests decide what gets built next; email addresses and recognisable secrets are removed from the text before it is stored.
Newsletter
Get new-tool announcements by email: call subscribe with your email and consent: true, or POST /v1/subscribe. Nothing is sent until the address is confirmed: before the first newsletter we send one confirmation email. Unconfirmed addresses are deleted after 90 days, and an address that unsubscribed is never added again by anyone else. You can unsubscribe at any time.
Savings
Every execution returns a receipt with tokens: null and status: "unmeasured": a successful call is not proof of a saving. Estimates come only from your own model reports (above), and measured comparisons stay separate from them. With a key, savings shows your totals of both.
Privacy, terms and contact
What is recorded, and for how long, is described in the privacy policy. Do not send secrets or sensitive personal data. Use of the service is subject to the terms. Contact: idan.roth.ai@gmail.com.