Connected quoting
Bring your AI agent to Ahner.
Get real shop pricing, compare quantities, save a quote, and submit an order through Codex or another compatible AI agent.
No Ahner account, sign-in, or API key needed. Give your agent a drawing and the instructions below. Agents with file access and HTTP tools can upload directly; agents with MCP support can use a saved connection.
Upload through the API Connect with MCPMuse connection guide · Connector privacy notice
Uploading with an AI agent?
Use Ahner’s direct API for CAD uploads and quoting. Your agent can read the instructions and send your files without navigating the upload form or accessing our codebase.
Give your agent this request along with your drawing:
Upload these drawings through Ahner’s backend API. Read https://pricing.ahner-industrial.com/agents/quickstart.txt first. Use direct HTTP requests or the Ahner MCP tools. Create or reuse a private workspace, upload the files, and check their analysis status. Keep the workspace ID for follow-up requests. Do not submit an order.
Read the plain-text API quickstart · OpenAPI specification
The quickstart includes a standalone Python example and the upload, status, and pricing endpoints. No package installation or repository checkout is needed. Your agent must be able to read the drawing’s bytes and make HTTP requests, or have the Ahner MCP connection available.
Run a direct upload with Python
Save this example as ahner_upload.py, then run python3 ahner_upload.py /path/to/bracket.dxf. It prints your private workspace ID and upload result. Add --workspace-id with the returned ID to upload another drawing to the same workspace. Follow the quickstart to check analysis status and price your part.
import argparse
import base64
import json
from pathlib import Path
import urllib.error
import urllib.request
BASE = "https://pricing.ahner-industrial.com" + "/api/agent/v1"
# Never forward a drawing or workspace handle to a redirect target.
class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
opener = urllib.request.build_opener(NoRedirect())
def call(path, body=None):
request = urllib.request.Request(
BASE + path,
data=None if body is None else json.dumps(body).encode(),
headers={"Content-Type": "application/json", "Accept": "application/json"},
)
try:
with opener.open(request, timeout=120) as response:
return json.load(response)
except urllib.error.HTTPError as error:
raise SystemExit(f"HTTP {error.code}: {error.read(4096).decode(errors='replace')}")
parser = argparse.ArgumentParser(description="Upload CAD directly to Ahner.")
parser.add_argument("file", type=Path)
parser.add_argument("--workspace-id", help="Reuse the private ID from an earlier upload")
args = parser.parse_args()
capabilities = call("/capabilities")
if args.file.suffix.lower().lstrip(".") not in capabilities["supported_files"]:
raise SystemExit("Choose a DXF, STEP, or STP file.")
with args.file.open("rb") as source:
content = source.read(capabilities["max_upload_bytes"] + 1)
if not content or len(content) > capabilities["max_upload_bytes"]:
raise SystemExit("The drawing must contain 1 byte to 10 MiB.")
workspace = args.workspace_id or call("/workspaces", {})["workspace_id"]
# Retain this private ID even if the upload times out; list parts before retrying.
print(json.dumps({"workspace_id": workspace}), flush=True)
result = call("/parts", {
"workspace_id": workspace,
"filename": args.file.name,
"content_base64": base64.b64encode(content).decode("ascii"),
})
print(json.dumps(result, indent=2))
if result.get("errors") or not result.get("uploaded_part_ids"):
raise SystemExit("Check the upload result before continuing.")
From drawing to quote
- Share your drawing. Give your agent a DXF, STEP, or STP file up to 10 MiB. It starts a private quote workspace automatically. If it cannot access your file, ask for the private browser upload link and return to the same conversation after uploading.
- Tell it what to price. Include your material, thickness, quantities, and any bending or other work needed. Your agent checks available options and returns Ahner’s calculated prices.
- Save your quote. Provide your name and email for the quote. Your agent gives you a link to review it and continue through checkout.
- Confirm your order. Review the exact quantities, total, pickup details, and submission method before authorizing your agent to submit.
Keep your quote link and continue in the same agent conversation when possible. A new workspace starts fresh.
Use Ahner to quote this DXF in 1/4-inch carbon steel for 10, 25, and 50 pieces. Show me the price at each quantity, ask me for anything missing, and save a pickup quote for the quantity I choose. Ask for my confirmation before submitting an order.
Connect a compatible AI agent
Use an agent that supports MCP over Streamable HTTP, or one that can call a REST API. Ordinary chat windows do not automatically connect to outside tools; your chosen app must support this connection.
Add this MCP server address in your agent’s connection settings. No authentication is required:
https://pricing.ahner-industrial.com/api/agent/mcp
Building a custom integration? Use the OpenAPI specification. Call ahner_start_quote first to create a workspace, then reuse the returned workspace ID for uploads, pricing, quotes, and orders. Your agent handles this automatically.
Codex setup
Add this connection to your Codex config.toml, then restart your client:
[mcp_servers.ahner]
url = "https://pricing.ahner-industrial.com/api/agent/mcp"
tool_timeout_sec = 120
To ask for an extra approval before the order tool runs, you can also add:
[mcp_servers.ahner.tools.ahner_place_order]
approval_mode = "prompt"
Then attach your drawing and ask: “Use Ahner to show available materials and quote this drawing for 10 parts.”
You confirm before ordering
Your agent presents the calculated total and submission method before placing an order. Quote confirmations expire after 30 minutes; changed pricing requires a fresh quote.
Your agent can compare pickup and supported delivery services, then present the delivered total before you approve. Use your saved quote’s checkout link for online payment. Available submission methods come from Ahner; a PO remains subject to Ahner’s payment and acceptance process. Invoice and shop-review requests are not paid orders, and parts flagged for review require the shop’s review.
Drawing units and manufacturing questions are shown before quoting. Your agent can confirm a unit conversion with you or retry a failed analysis. After ordering, your agent can keep a private read-only order connection for 180 days so you can check progress after the quote session ends.