Skip to content

ComputeFirst

by 321zz321 · remote · no sign-in to list tools · v1.0.0 · published by GitHub user 321zz321

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

Deletes · 1Changes · 11

15 tools: 1 can delete or cancel things, 11 change things and 3 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http computefirst https://computefirst.net/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "execute" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "execute" says "execute": a word for a change.

    What this check looks for
  • The server marks "execute_batch" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "execute_batch" says "execute": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

15 tools

Deletes or cancels 1Claude Code: deny
  • remove_saved_toolRemove a tool id and version from the account's library.No findings

    Why it is in this group

    • The name "remove_saved_tool" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove a tool id and version from the account's library. Without a key nothing changes.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
Changes things 11Claude Code: ask
  • activityThe account's recent calls and outcomes; pass next as before for older ones.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The account's recent calls and outcomes; pass next as before for older ones. Without a key: signed_in:false.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • executeRun one ComputeFirst catalog tool by id and version with its JSON input.1 finding

    Why it is in this group

    • The name "execute" says "execute": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "execute" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "execute" says "execute": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • execute_batchRun 1–20 ComputeFirst catalog tools in one request.1 finding

    Why it is in this group

    • The name "execute_batch" says "execute": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "execute_batch" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "execute_batch" says "execute": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • feedbackTell ComputeFirst what helped or went wrong (a missing tool fits request_tool).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • profileThe signed-in account: keys, privileges and tool-request status.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The signed-in account: keys, privileges and tool-request status. Without a key: signed_in:false and the optional extras.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • report_savingsOptional, for the person: your model id and, if known, your own estimate of the tokens a call saved (estimated_tokens_saved).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • request_toolAsk for a tool that does not exist yet: the task, optionally example input and output.No findings

    Why it is in this group

    • The name "request_tool" says "request": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • save_toolSave a tool id and version to the account's library, with an optional note (saving again replaces the note).No findings

    Why it is in this group

    • The name "save_tool" says "save": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • savingsSavings totals, optionally for one model: with a key, the account's measured and estimated totals; otherwise community verified totals.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Savings totals, optionally for one model: with a key, the account's measured and estimated totals; otherwise community verified totals. Unmeasured is not zero.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • sign_inOnly 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 s…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • subscribeSubscribe an email to new-tool announcements, only when the person asks for them (consent:true).No findings

    Why it is in this group

    • The name "subscribe" says "subscribe": a word for a change.
    Description, as the server wrote it
    Subscribe an email to new-tool announcements, only when the person asks for them (consent:true). Every email has an unsubscribe link.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 3Claude Code: allow
  • describeInput schema, limits and examples of one ComputeFirst catalog tool, by id and version.No findings

    Why it is in this group

    • The name "describe" says "describe": a word for reading.
    Description, as the server wrote it
    Input schema, limits and examples of one ComputeFirst catalog tool, by id and version.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_saved_toolsTools saved in the account's library (id, version, note).No findings

    Why it is in this group

    • The name "list_saved_tools" says "list": a word for reading.
    Description, as the server wrote it
    Tools saved in the account's library (id, version, note). Without a key: signed_in:false and no tools.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http computefirst https://computefirst.net/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__computefirst__search",
      "mcp__computefirst__describe",
      "mcp__computefirst__list_saved_tools"
    ],
    "ask": [
      "mcp__computefirst__execute",
      "mcp__computefirst__execute_batch",
      "mcp__computefirst__savings",
      "mcp__computefirst__feedback",
      "mcp__computefirst__request_tool",
      "mcp__computefirst__subscribe",
      "mcp__computefirst__sign_in",
      "mcp__computefirst__profile",
      "mcp__computefirst__activity",
      "mcp__computefirst__save_tool",
      "mcp__computefirst__report_savings"
    ],
    "deny": [
      "mcp__computefirst__remove_saved_tool"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as computefirst. Review it before you use it.