ComputeFirst

Free deterministic tools for math, data transforms, dates, text, statistics, finance, and units.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
72%
Naming quality
89%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'request_tool' description lacks action verbin request_tool

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,551Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (1.99% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "computefirst": {
      "url": "https://computefirst.net/mcp"
    }
  }
}

Remote endpoints

https://computefirst.net/mcpstreamable-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search(query, limit, include_contract)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 256
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "include_contract": {
      "type": "boolean",
      "default": true
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "version"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "contract": {
            "type": "object"
          }
        }
      }
    },
    "method": {
      "type": "string"
    },
    "hint": {
      "type": "string"
    }
  },
  "required": [
    "results"
  ]
}
🟢describe(id, version)

Input schema, limits and examples of one ComputeFirst catalog tool, by id and version.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9_-]+$",
      "maxLength": 100
    },
    "version": {
      "type": "string",
      "maxLength": 100
    }
  },
  "required": [
    "id",
    "version"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "input_schema": {
      "type": "object"
    }
  },
  "required": [
    "id",
    "version",
    "input_schema"
  ]
}
🟢execute(id, version, input, model)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9_-]+$",
      "maxLength": 100
    },
    "version": {
      "type": "string",
      "maxLength": 100
    },
    "input": {
      "type": "object"
    },
    "model": {
      "type": "string",
      "maxLength": 256,
      "description": "Optional: your model id, only so savings can be shown per model"
    }
  },
  "required": [
    "id",
    "version",
    "input"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {},
    "savings": {
      "type": "object"
    },
    "invite": {
      "type": "string"
    }
  },
  "required": [
    "result"
  ]
}
🟢execute_batch(operations, model)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "operations": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "version",
          "input"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9_-]+$",
            "minLength": 1,
            "maxLength": 100
          },
          "version": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9.+_-]+$",
            "minLength": 1,
            "maxLength": 100
          },
          "input": {
            "type": "object"
          },
          "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."
          },
          "bindings": {
            "type": "array",
            "maxItems": 16,
            "description": "Fill distinct top-level input keys from earlier successful results; keys must be absent from input.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "key",
                "from",
                "path"
              ],
              "properties": {
                "key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 100
                },
                "from": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 19,
                  "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."
                }
              }
            }
          }
        }
      }
    },
    "model": {
      "type": "string",
      "maxLength": 256,
      "description": "Optional: your model id, only so savings can be shown per model"
    }
  },
  "required": [
    "operations"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "index",
          "status"
        ]
      }
    },
    "summary": {
      "type": "object",
      "required": [
        "succeeded",
        "failed"
      ],
      "properties": {
        "succeeded": {
          "type": "integer"
        },
        "failed": {
          "type": "integer"
        }
      }
    },
    "invite": {
      "type": "string"
    }
  },
  "required": [
    "results",
    "summary"
  ]
}
🟢savings(model)

Savings totals, optionally for one model: with a key, the account's measured and estimated totals; otherwise community verified totals. Unmeasured is not zero.

Input Schema

{
  "type": "object",
  "properties": {
    "model": {
      "type": "string",
      "maxLength": 100
    }
  },
  "additionalProperties": false
}
⚪feedback(category, message, request_id, execution_ref)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "enum": [
        "missing_capability",
        "useful",
        "wrong_result",
        "hard_to_use",
        "other"
      ]
    },
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000
    },
    "request_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "execution_ref": {
      "type": "string",
      "maxLength": 100
    }
  },
  "required": [
    "category",
    "message",
    "request_id"
  ],
  "additionalProperties": false
}
⚪request_tool(description, example_input, example_output, contact_email, email_consent)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4096
    },
    "example_input": {
      "type": "string",
      "maxLength": 4096
    },
    "example_output": {
      "type": "string",
      "maxLength": 4096
    },
    "contact_email": {
      "type": "string",
      "maxLength": 254
    },
    "email_consent": {
      "type": "boolean"
    }
  },
  "required": [
    "description"
  ],
  "additionalProperties": false
}
⚪subscribe(email, consent)

Subscribe an email to new-tool announcements, only when the person asks for them (consent:true). Every email has an unsubscribe link.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 254
    },
    "consent": {
      "const": true
    }
  },
  "required": [
    "email",
    "consent"
  ],
  "additionalProperties": false
}
⚪sign_in(email, consent, newsletter)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 254
    },
    "consent": {
      "const": true
    },
    "newsletter": {
      "type": "boolean"
    }
  },
  "required": [
    "email",
    "consent"
  ],
  "additionalProperties": false
}
🟢profile

The signed-in account: keys, privileges and tool-request status. Without a key: signed_in:false and the optional extras.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢activity(limit, before)

The account's recent calls and outcomes; pass next as before for older ones. Without a key: signed_in:false.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "before": {
      "type": "string",
      "maxLength": 100
    }
  },
  "additionalProperties": false
}
🟢list_saved_tools

Tools saved in the account's library (id, version, note). Without a key: signed_in:false and no tools.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡save_tool(id, version, note)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9_-]+$",
      "maxLength": 100
    },
    "version": {
      "type": "string",
      "maxLength": 100
    },
    "note": {
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "id",
    "version"
  ],
  "additionalProperties": false
}
🔴remove_saved_tool(id, version)

Remove a tool id and version from the account's library. Without a key nothing changes.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9_-]+$",
      "maxLength": 100
    },
    "version": {
      "type": "string",
      "maxLength": 100
    }
  },
  "required": [
    "id",
    "version"
  ],
  "additionalProperties": false
}
🟢report_savings(model, provider, execution_ref, estimated_tokens_saved, task_id, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "model": {
      "type": "string",
      "maxLength": 100
    },
    "provider": {
      "type": "string",
      "maxLength": 40
    },
    "execution_ref": {
      "type": "string",
      "maxLength": 100
    },
    "estimated_tokens_saved": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "input",
        "output"
      ],
      "properties": {
        "input": {
          "type": "integer",
          "minimum": 0
        },
        "output": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "task_id": {
      "type": "string",
      "maxLength": 100
    },
    "baseline_id": {
      "type": "string",
      "maxLength": 100
    },
    "baseline": {
      "type": "object",
      "required": [
        "input",
        "cached_input",
        "output"
      ]
    },
    "actual": {
      "type": "object",
      "required": [
        "input",
        "cached_input",
        "output"
      ]
    },
    "whole_task": {
      "const": true
    }
  },
  "required": [
    "model"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools