@makerportal/mcp
v0.1.1
Published
MCP server for the MakerPortal compute API — biquad filter design, rectangular-room eigenmodes, and LLM VRAM fit, computed by the same functions that render makerportal.ai.
Maintainers
Readme
@makerportal/mcp
Three deterministic engineering solvers as MCP tools, from makerportal.ai.
| Tool | What it answers |
|---|---|
| biquadDesign | RBJ-cookbook biquad coefficients at any sample rate, pole/zero geometry, the real −3 dB crossings, a Q sweep, a gain sweep, and what 16/24/32-bit word lengths do to stability and in-band error |
| roomModes | Every eigenmode of a rectangular room below a cutoff, axial/tangential/oblique, pile-ups, the Bolt-area proportion test, and Schroeder crossovers at two assumed RT60 values |
| llmVramFit | Whether a given model fits a given accelerator at every quantization — weight bytes, KV cache, headroom, the largest context that fits, and the bandwidth-limited decode ceiling |
Every tool runs the identical function that renders the published page. Not
a port of it, not a re-derivation — the same function, reached by reference
through one registry. So an answer from this server and the answer on
makerportal.ai cannot disagree, and a check in that repository re-computes
every published page through the registry and fails the build if one ever does.
Nothing is fetched from a third party and nothing is recalled by a language model. The same inputs always produce the same answer.
Licence, and what it does and does not cover
The code in this repository is MIT (see LICENSE) — a transport
shim, roughly 400 lines of JavaScript.
It does not cover the answers the package retrieves. Results from
makerportal.ai carry license: "free-with-attribution" and a
provenance.canonicalUrl; use them, and cite that URL.
This note lives here rather than at the foot of
LICENSE, and that is not cosmetic. GitHub classifies a licence by matching its TEXT, so six lines appended after the MIT body dropped the file below the detector's similarity threshold and the repository reportedNOASSERTION— no licence at all, on a package asking to be trusted. The same mistake was made and fixed inmakerportal/reference-vectorsthe same day. KeepLICENSEverbatim; put every clarification somewhere else.
Where this lives, and what it does not contain
This repository is the source for @makerportal/mcp.
It is public on purpose: the package's whole claim is that it is a transport
shim holding no answers of its own, and that claim is only worth anything if
you can read it.
boundary.test.mjs is what makes it a claim rather than a promise — it packs
the real tarball and greps every packed byte for solver symbols, so a filter
design or an eigenmode solve cannot be added here without failing CI.
Releases are published from .github/workflows/publish.yml. Every publish is
OIDC trusted publishing: the workflow exchanges a short-lived GitHub-issued
credential (bound to this repository, the publish.yml workflow file and the
npm-publish environment) for the publish itself, and npm generates the
provenance attestation automatically. No npm token can publish this package,
and no long-lived write credential exists anywhere in the pipeline.
Install
Nothing to install. Point your MCP client at it.
Claude Code
claude mcp add makerportal -- npx -y @makerportal/mcpClaude Code also speaks HTTP directly, in which case this package is not involved at all:
claude mcp add --transport http makerportal https://makerportal.ai/api/mcpCursor, Claude Desktop, and anything else reading mcpServers
~/.cursor/mcp.json (or .cursor/mcp.json for one project;
claude_desktop_config.json takes the same block):
{
"mcpServers": {
"makerportal": {
"command": "npx",
"args": ["-y", "@makerportal/mcp"]
}
}
}ChatGPT and other clients that take a remote URL
Add https://makerportal.ai/api/mcp as a remote MCP server. It is stateless
streamable HTTP, so there is no session to establish and nothing to keep warm.
Configuration
Both variables are optional. The keyless free tier is the default path and needs no configuration at all.
| Variable | Effect |
|---|---|
| MAKERPORTAL_LICENSE_KEY | Sent as Authorization: Bearer …. Never logged, never written to disk, never included in an error message |
| MAKERPORTAL_API_URL | Endpoint override, for development against a local server. Must be https:// — plain http:// is accepted only for localhost, 127.0.0.1 and [::1]. Defaults to https://makerportal.ai/api/mcp |
What comes back
Every result is the same envelope the HTTP API returns:
{
"inputs": { /* your inputs, parsed, with defaults filled in */ },
"result": { /* the solved analysis */ },
"provenance": {
"method": "…how it was computed and what its inputs are…",
"canonicalUrl": "https://makerportal.ai/lab/biquad/lowpass/1000-hz"
},
"license": "free-with-attribution"
}provenance.canonicalUrl is the published page stating exactly this answer
when your inputs are on the published grid, and the lane hub when they are not.
Cite it. That is the whole deal: the compute is free, and the attribution is
the price.
Two things worth knowing before you parse a result:
- Numbers that are not finite come back as the strings
"Infinity","-Infinity"and"NaN". These are real answers — a notch is −∞ dB at its centre frequency, a low-pass is −∞ dB at Nyquist. JSON has no numeric literal for them, andnullwould be a different claim. - Bad arguments come back as JSON-RPC
-32602with every valid value. Ask fortype: "bogus"and the error names all eight filter types. That list is there so an agent can fix its own next call.
What this package is
A transport shim, and deliberately nothing more: it translates stdio JSON-RPC into HTTP POSTs. There is no filter design, no eigenmode solve and no VRAM arithmetic in this package — a local copy would drift from the site the moment either side changed, and you would have no way to tell which of the two answers you were reading.
Trust boundary
This bridge forwards makerportal.ai's answers verbatim, which includes the
tool descriptions and instructions your agent may show the user. Installing
this package extends your agent's trust to that one host. Concretely:
- Every request is a POST to
https://makerportal.ai/api/mcp(or yourMAKERPORTAL_API_URL); no other network destination exists in this package, and nothing executes at install time. - Responses are size-capped and time-capped, and a credential in
MAKERPORTAL_LICENSE_KEYnever appears in an error message or a log. - Tool descriptions and instructions come from the server, like every MCP server. If that matters for your threat model, pin the version and read the changelog.
API without MCP
The same three solvers are plain GET endpoints, described by an OpenAPI 3.1 document:
https://makerportal.ai/api/v1/biquad-design?type=lowpass&freq=1000https://makerportal.ai/api/v1/room-modes?width=12&length=16&height=8https://makerportal.ai/api/v1/llm-vram-fit?model=llama-3-1-8b-instruct&gpu=rtx-4090https://makerportal.ai/api/openapi.json
Licence
MIT for this package. free-with-attribution for the answers — see LICENSE.
