Free deterministic tools for math, data transforms, dates, text, statistics, finance, and units.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The account's recent calls and outcomes; pass next as before for older ones. Without a key: signed_in:false.
The account's recent calls and outcomes; pass next as before for older ones. Without a key: signed_in:false.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| before | string |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"before": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
}Input schema, limits and examples of one ComputeFirst catalog tool, by id and version.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| version* | string |
{
"type": "object",
"required": [
"id",
"version"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9_-]+$",
"maxLength": 100
},
"version": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
}Run one ComputeFirst catalog tool by id and version with its JSON input. Returns the deterministic result and an unmeasured savings receipt. Limits: computefirst.net/docs#limits.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| input* | object | |
| model | string | Optional: your model id, only so savings can be shown per model |
| version* | string |
{
"type": "object",
"required": [
"id",
"version",
"input"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9_-]+$",
"maxLength": 100
},
"input": {
"type": "object"
},
"model": {
"type": "string",
"maxLength": 256,
"description": "Optional: your model id, only so savings can be shown per model"
},
"version": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
}Run 1–20 ComputeFirst catalog tools in one request. Optional bindings fill an input key from an earlier result (JSON Pointer); include_result:false omits an intermediate. Steps after a failed dependency are skipped; nothing is retried automatically. Each success is one execution. Inputs, results and response: 256 KiB each. A factory work budget can skip an item with batch_work_limit; finance and exact decimal power/root/expression tools use the full factory allowance. Send additional factory operations separately. Split refused work; successful items are never retried automatically.
| Argument | Type | Description |
|---|---|---|
| model | string | Optional: your model id, only so savings can be shown per model |
| operations* | array |
{
"type": "object",
"required": [
"operations"
],
"properties": {
"model": {
"type": "string",
"maxLength": 256,
"description": "Optional: your model id, only so savings can be shown per model"
},
"operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"input"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9_-]+$",
"maxLength": 100,
"minLength": 1
},
"input": {
"type": "object"
},
"version": {
"type": "string",
"pattern": "^[a-zA-Z0-9.+_-]+$",
"maxLength": 100,
"minLength": 1
},
"bindings": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"from",
"path"
],
"properties": {
"key": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"from": {
"type": "integer",
"maximum": 19,
"minimum": 0,
"description": "Zero-based earlier operation index; no forward/self references."
},
"path": {
"type": "string",
"maxLength": 1024,
"description": "RFC 6901 JSON Pointer into that operation result, not its receipt. Empty selects the whole result."
}
},
"additionalProperties": false
},
"maxItems": 16,
"description": "Fill distinct top-level input keys from earlier successful results; keys must be absent from input."
},
"include_result": {
"type": "boolean",
"default": true,
"description": "False returns a success receipt only; the bounded result remains available to later bindings and consent-gated audit. Omission does not bypass the batch work budget."
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"additionalProperties": false
}Tell ComputeFirst what helped or went wrong (a missing tool fits request_tool). A stable request_id makes retries safe. Leave out secrets and raw data.
| Argument | Type | Description |
|---|---|---|
| message* | string | |
| category* | string | |
| request_id* | string | |
| execution_ref | string |
{
"type": "object",
"required": [
"category",
"message",
"request_id"
],
"properties": {
"message": {
"type": "string",
"maxLength": 1000,
"minLength": 1
},
"category": {
"enum": [
"missing_capability",
"useful",
"wrong_result",
"hard_to_use",
"other"
],
"type": "string"
},
"request_id": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"execution_ref": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
}Tools saved in the account's library (id, version, note). Without a key: signed_in:false and no tools.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}The signed-in account: keys, privileges and tool-request status. Without a key: signed_in:false and the optional extras.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Remove a tool id and version from the account's library. Without a key nothing changes.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| version* | string |
{
"type": "object",
"required": [
"id",
"version"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9_-]+$",
"maxLength": 100
},
"version": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
}Optional, for the person: your model id and, if known, your own estimate of the tokens a call saved (estimated_tokens_saved). Returns its dollar value at public list prices; unknown stays null. A measured comparison adds task_id, baseline_id, baseline, actual, whole_task:true, execution_ref.
| Argument | Type | Description |
|---|---|---|
| model* | string | |
| actual | object | |
| task_id | string | |
| baseline | object | |
| provider | string | |
| whole_task | any | |
| baseline_id | string | |
| execution_ref | string | |
| estimated_tokens_saved | object |
{
"type": "object",
"required": [
"model"
],
"properties": {
"model": {
"type": "string",
"maxLength": 100
},
"actual": {
"type": "object",
"required": [
"input",
"cached_input",
"output"
]
},
"task_id": {
"type": "string",
"maxLength": 100
},
"baseline": {
"type": "object",
"required": [
"input",
"cached_input",
"output"
]
},
"provider": {
"type": "string",
"maxLength": 40
},
"whole_task": {
"const": true
},
"baseline_id": {
"type": "string",
"maxLength": 100
},
"execution_ref": {
"type": "string",
"maxLength": 100
},
"estimated_tokens_saved": {
"type": "object",
"required": [
"input",
"output"
],
"properties": {
"input": {
"type": "integer",
"minimum": 0
},
"output": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Ask for a tool that does not exist yet: the task, optionally example input and output. Optional contact_email (with email_consent:true), only if the person wants one email when it ships. Leave out secrets.
| Argument | Type | Description |
|---|---|---|
| description* | string | |
| contact_email | string | |
| email_consent | boolean | |
| example_input | string | |
| example_output | string |
{
"type": "object",
"required": [
"description"
],
"properties": {
"description": {
"type": "string",
"maxLength": 4096,
"minLength": 1
},
"contact_email": {
"type": "string",
"maxLength": 254
},
"email_consent": {
"type": "boolean"
},
"example_input": {
"type": "string",
"maxLength": 4096
},
"example_output": {
"type": "string",
"maxLength": 4096
}
},
"additionalProperties": false
}Save a tool id and version to the account's library, with an optional note (saving again replaces the note). Without a key nothing is saved.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| note | string | |
| version* | string |
{
"type": "object",
"required": [
"id",
"version"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9_-]+$",
"maxLength": 100
},
"note": {
"type": "string",
"maxLength": 200
},
"version": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
}Savings totals, optionally for one model: with a key, the account's measured and estimated totals; otherwise community verified totals. Unmeasured is not zero.
| Argument | Type | Description |
|---|---|---|
| model | string |
{
"type": "object",
"properties": {
"model": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
}Search the ComputeFirst catalog (computefirst.net/tools) with an English task. Returns up to 5 tools (3 by default) with id, version and a 0–1 score; a confident first match includes its input contract. No match: request_tool can ask for one.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string | |
| include_contract | boolean |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 256
},
"include_contract": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
}Only when the person explicitly asks for a free account (consent:true): creates one for their email (unverified) and returns an agent key once, for saved tools, history, personal savings and a higher limit. The person stores the key in their client settings; do not repeat it in the conversation. newsletter:true only if they ask.
| Argument | Type | Description |
|---|---|---|
| email* | string | |
| consent* | any | |
| newsletter | boolean |
{
"type": "object",
"required": [
"email",
"consent"
],
"properties": {
"email": {
"type": "string",
"maxLength": 254
},
"consent": {
"const": true
},
"newsletter": {
"type": "boolean"
}
},
"additionalProperties": false
}Subscribe an email to new-tool announcements, only when the person asks for them (consent:true). Every email has an unsubscribe link.
| Argument | Type | Description |
|---|---|---|
| email* | string | |
| consent* | any |
{
"type": "object",
"required": [
"email",
"consent"
],
"properties": {
"email": {
"type": "string",
"maxLength": 254
},
"consent": {
"const": true
}
},
"additionalProperties": false
}