Skip to main content

System · Compute API · MCP

Live

The solvers are callable, not just readable.

Every calculator on this site is a pure function, and 5 of them are served as tools — over the Model Context Protocol for agents, and as plain GET endpoints for everything else. No key, no signup, no account. Each answer comes back with the URL of the published page that states the same numbers, so a model that cites it can be checked.

API 1.0.0 • Stateless streamable HTTP • No auth • CORS * • Free with attribution

Connect an agent in one command

The endpoint speaks streamable HTTP in single-JSON-response mode, so any MCP client that supports an HTTP transport can use it today without installing anything.

Claude Code

claude mcp add --transport http makerportal https://makerportal.ai/api/mcp

claude mcp list should then show it as connected.

Any client with a JSON config

{
  "mcpServers": {
    "makerportal": {
      "type": "http",
      "url": "https://makerportal.ai/api/mcp"
    }
  }
}

Clients that only speak stdio need a local shim process. That package is not published yet, so for now use a client with HTTP transport — the endpoint itself is the whole server.

Or just POST to it

No initialize handshake is required and there are no sessions, so a single POST is a complete interaction.

List the tools

curl -s -X POST https://makerportal.ai/api/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Call one

curl -s -X POST https://makerportal.ai/api/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"roomModes",
                 "arguments":{"width":12,"length":16,"height":8}}}'

What comes back

Solved on this build by the same function that rendered the page it points at — not a hand-written sample.provenance.canonicalUrl is the whole point: it names the published page stating these exact numbers, or the lane hub when the inputs are off the published grid, so an answer quoted from here can always be traced to something a human can read.

{
  "inputs": {
    "widthFt": 12,
    "lengthFt": 16,
    "heightFt": 8,
    "maxFreqHz": 300,
    "slug": "12x16x8"
  },
  "result": {
    "spec": {
      "widthFt": 12,
      "lengthFt": 16,
      "heightFt": 8
    },
    "volumeM3": 43.49467636531201,
    "fundamentals": [
      {
        "axis": "length",
        "freq": 35.166502624671914
      },
      {
        "axis": "width",
        "freq": 46.88867016622922
      },
      {
        "axis": "height",
        "freq": 70.33300524934383
      }
    ],
    "worstAxialGapHz": 35.16650262467192,
    "modeCounts": {
      "axial": 18,
      "tangential": 76,
      "oblique": 81,
      "total": 175
    },
    "…": "plus the ratio, Schroeder crossovers and pile-ups"
  },
  "provenance": {
    "method": "Rectangular-room eigenmode solution f = (c/2)·sqrt((nx/Lx)² + (ny/Ly)² + (nz/Lz)²) at c = 343 m/s, with axial/tangential/oblique classification, pile-up clustering below 200 Hz, the Bolt-area proportion test (Bolt, 1946, JASA), and Schroeder crossovers at two ASSUMED RT60 values. Pure geometry — no material data is involved, which is why RT60 is bracketed rather than stated.",
    "canonicalUrl": "https://makerportal.ai/lab/room-modes/12x16x8"
  },
  "license": "free-with-attribution"
}

The tools

Each one is the identical function that renders its published pages, assigned by reference in a single registry, so an answer here and an answer on the page cannot disagree. Every example below is a real request.

ToolWhat it solvesTry it
biquadDesignDesign one RBJ-cookbook biquad and report its numerical behaviour./api/v1/biquad-design?type=lowpass&freq=1000
roomModesSolve the eigenmodes of a rectangular room./api/v1/room-modes?width=12&length=16&height=8
llmVramFitDecide whether one LLM fits one accelerator, at every quantization./api/v1/llm-vram-fit?model=llama-3-1-8b-instruct&gpu=rtx-4090
solenoidFieldSolve the on-axis magnetic field of an air-core solenoid./api/v1/solenoid-field?diameter=25&length=100
roomShapeBandSolve the best rectangular room proportions for a given volume./api/v1/room-shape-band?volume=2400

What it does not do

No sessions, no stream

GET /api/mcp answers 405 and so doesDELETE. Both are correct, not faults: there is no SSE stream in single-JSON-response mode and there are no sessions to end. A fabricatedMcp-Session-Id changes nothing.

No proxying, no relay

There is no market-data relay and no model behind any of these. They are own-solver computation only and no request leaves the function, which is why an answer can be handed back with a citation rather than a disclaimer.

Rate limiting is best-effort

A 429 is a per-instance courtesy limit, not a quota: there is no shared counter, and identical/api/v1 requests are served from the edge cache without reaching a function at all.

Non-finite numbers are strings

A notch is −∞ dB at its centre and a low-pass is −∞ dB at Nyquist. JSON has no literal for that andnull would be a different claim, so those arrive as the strings "Infinity","-Infinity" and"NaN". They are documented in the OpenAPI schema.

Licence. Free to use and to quote with attribution and a link to the canonical page each answer names. Full terms at /terms; if you are building something with it, say hello.