MCP
Connect an assistant
Add NestSolver to Claude, ChatGPT, Claude Code, Cursor, VS Code or another MCP client, by signing in or with a key, and ask it to plan a job.
The MCP server gives AI assistants the same calls as the API, as tools they can choose and fill in. An assistant connected to it can take "plan these cuts from 6 m bars with a 3 mm kerf" and come back with the bars, the drops and the waste. It runs at https://mcp.nestsolver.com/, speaks the Model Context Protocol over HTTP, and takes the same keys, under the same tiers and limits, as the API.
There are two ways in. Claude, Claude Desktop and ChatGPT add NestSolver as a connector: you paste the address, sign in, and pick a workspace. Coding assistants and other clients send a key instead.
Claude, Claude Desktop and ChatGPT
These add the server as a connector. There is no key to copy.
In Claude, on the web or in Claude Desktop:
-
Open Settings, then Connectors, and choose Add custom connector.
-
Name it NestSolver and paste this address:
https://mcp.nestsolver.com -
Choose Connect. A NestSolver window opens: sign in, pick the workspace, and choose Allow.
A connector added in Claude on the web shows in Claude Desktop too, under the same account. Claude Desktop needs no config file and no Node.js for it.
In ChatGPT:
- In ChatGPT's Settings, turn on Developer mode. It sits in the advanced settings for apps and connectors, on plans that allow custom connectors.
- Add a connector (ChatGPT calls the button Create or Add), name it NestSolver, paste the same address and pick OAuth for authentication.
- Sign in to NestSolver when ChatGPT asks, pick the workspace, and choose Allow.
The connection acts in the workspace you picked, under its plan, with the same limits, usage and request logs as a key. It shows under Connected apps on the portal's API keys page, where Disconnect ends it at once. To change workspace, disconnect and connect again. Authentication says how the sign-in works.
Clients that send a key
Make a key on the portal's API keys page. Right after you make it, the page shows each setup below with the key already filled in. Here, put your key where it says <key>.
Claude Code
Run this in a terminal:
claude mcp add --transport http nestsolver https://mcp.nestsolver.com/ \
--header "Authorization: Bearer <key>"
Run /mcp inside Claude Code to see it connected.
Cursor
Add the server to ~/.cursor/mcp.json, or .cursor/mcp.json in one project:
{
"mcpServers": {
"nestsolver": {
"url": "https://mcp.nestsolver.com/",
"headers": { "Authorization": "Bearer <key>" }
}
}
}
The API keys page also gives an install link that adds it in one click. The link carries your key, so open it only on your own computer.
VS Code
Add the server to .vscode/mcp.json in your project, or to your user mcp.json with the MCP: Open User Configuration command:
{
"servers": {
"nestsolver": {
"type": "http",
"url": "https://mcp.nestsolver.com/",
"headers": { "Authorization": "Bearer <key>" }
}
}
}
The API keys page gives an install link for VS Code too, with your key in it. Rather than keep the key in a project file, VS Code can ask for it once: set the header to "Bearer ${input:nestsolver-key}" and declare a password input with that id.
Windsurf and other JSON clients
Most clients take a server's address and headers in a JSON block like this. The property names vary a little: Windsurf calls the address serverUrl, Gemini CLI calls it httpUrl. The address and the header are what matter.
{
"mcpServers": {
"nestsolver": {
"type": "http",
"url": "https://mcp.nestsolver.com/",
"headers": { "Authorization": "Bearer <key>" }
}
}
}
Gemini CLI can also add it from a terminal:
gemini mcp add --transport http --header "Authorization: Bearer <key>" nestsolver https://mcp.nestsolver.com/
Codex CLI reads the key from an environment variable. Add this to ~/.codex/config.toml and set NESTSOLVER_KEY:
[mcp_servers.nestsolver]
url = "https://mcp.nestsolver.com/"
bearer_token_env_var = "NESTSOLVER_KEY"
The REST API
Any script can make the same calls over HTTPS with the same key. This one reads the month's usage, free:
curl https://api.nestsolver.com/v1/usage \
-H "Authorization: Bearer <key>"
The Quickstart solves a first cut list.
What to ask
Give lengths with their unit, and the kerf. Name what to aim for: fewest bars, least waste, the most reusable drop.
- Linear cuts: "Plan 4 rails of 1250 mm and 6 stiles of 840 mm from 6000 mm stock with a 3 mm kerf, keeping drops over 300 mm."
- Sheet cuts: "Cut 12 shelves of 600 × 300 mm and 4 sides of 1800 × 300 mm from 2440 × 1220 mm boards, 4 mm kerf, grain along the length, 2 mm PVC band on the long edges."
- Nests of saved parts: "Nest 20 of my saved part Bracket A and 8 of Flange on 3000 × 1500 mm sheets with 5 mm spacing." The assistant finds the parts by name with
list_parts, then starts the nest with their ids. - Loads into a saved space: "Load 40 cartons of 600 × 400 × 300 mm, 18 kg each, onto my saved EUR pallet." The assistant finds the space by name with
list_spaces, then starts the load. - A finished job: "Show me the plan for that nest, with the DXF link."
- Usage: "How much search time is left this month?"
Ask for a long list to be checked first: the check tools are free. Tools lists everything the assistant can call.
How a job runs
Linear and sheet cut lists solve inside one tool call. Nests and loads start as jobs: the assistant calls start_nest or start_load, then job_status until the job is done, then plan_report. The server's instructions tell the assistant to do exactly that, so a plain request works.
Checking it works
Ask the assistant for your usage. It calls the free usage tool and answers with the month's search time. Every tool call then shows on the portal's Request logs page under its tool name, with its status and how long it took, so you can see what the assistant did.
Troubleshooting
- 401: the key is missing, mistyped or revoked, or a connector was disconnected. Check the header reads
Authorization: Bearer <key>, or make a new key. A connector signs in again when you choose Connect. - 403: the option needs a higher plan, or a Free workspace has started its 5 loads this month. The answer names the lowest plan that takes it. Plans and limits lists them.
- 422: something in the request breaks a rule. Each problem names its field; the assistant can fix it and try again.
- 429: a per-minute budget is spent. Wait for the next minute and ask again.
- A job stays queued: every solve slot is busy with the workspace's other jobs, the plan's "solves at once". It starts when one of them finishes.
Keys and limits
A key or a connection acts in its workspace under the workspace's tier: the same job caps, budget sizes and search pool as the web and the API, with the MCP server's per-minute budgets counted apart from the API's. initialize, tools/list and the free tools count against the workspace's free calls; a ping and the client's notifications do not, though every message counts against its address's budget. Pings and notifications are not listed in the request logs.
Idempotency
A tools/call whose HTTP request carries an Idempotency-Key header runs once: a repeat with the same key, the same tool name and the same arguments gets the first answer back, whatever its JSON-RPC id. Choose a new key for each call; never set one as a fixed header in the client's configuration, or every later call with that key is refused or answered with the first call's result. Clients that do not send the header run every call they send. Idempotency and retries explains it.
The transport
The server speaks the protocol's HTTP transport: every message is a POST to / with one JSON-RPC body and one JSON answer. It accepts the MCP-Protocol-Version header for the 2025-11-25, 2025-06-18 and 2025-03-26 revisions and assumes 2025-03-26 when the header is missing. Batches are not accepted: send one message per request. A notification is answered 202 with no body, and a ping with an empty result. It opens no stream and keeps no session, so a client that only POSTs is enough.