MVG Metallverkaufsgesellschaft MCP
Official MCP server for MVG Frankfurt providing access to sheet metal and stock parts catalog, instant pricing, DFM feedback, lead times, and ordering capabilities via REST API integration for AI agents.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mvg-frankfurt.de/mcpWhat its tools do
25 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (18)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to mvg-frankfurt.de ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Retrieve instant prices for sheet metal cuts and stock parts
- Check material availability and lead times
- Get DFM feedback with images for custom parts
- Place orders for metal components
Source and maintenance
Protocol and capabilities
- Server
- mvg-fertigung 2.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 25 advertised
- Resources
- 3 advertised
- Resource templates
- 0 advertised
- Prompts
- 4 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
25 advertised
find_materials — Werkstoffe und Halbzeuge finden
Bleche: Werkstoffe mit lesbarem Code (material), Dicken (mm + label), Tafelformaten und REACH-Hinweis. Halbzeuge (Rohre, Profile, Flach-, Rund-, Vierkantmaterial): art_nr, Abmessungen, kg/m, Stangenlaenge. query mit Massen wie 'flach 20x5 alu', 'rohr 30x2', 'edelstahl 1.4301'. Beispiel: 'Alu-Winkel 15 x 15 x 2' ist ein Halbzeug-Winkelprofil -> kind 'halbzeug', query 'winkel 15x15x2 alu', danach get_price type 'profile' (kein Kantteil). material bzw. art_nr gehen danach in get_price/create_quote/configure_part. Katalog durchsehen: kind 'halbzeug' mit kategorie, werkstoff und ranges (Massbereich), z. B. {"kind": "halbzeug", "kategorie": "U-Profil", "werkstoff": "edelstahl", "ranges": {"breite_mm": {"min": 30, "max": 50}}}. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"examples": [
{
"query": "flach 20x5 alu"
},
{
"kind": "halbzeug",
"ranges": {
"breite_mm": {
"max": 50,
"min": 30
}
},
"kategorie": "U-Profil",
"werkstoff": "edelstahl"
},
{
"kind": "blech",
"query": "edelstahl",
"thickness_mm": 2
}
],
"required": [],
"properties": {
"kind": {
"enum": [
"alle",
"blech",
"halbzeug"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 120
},
"offset": {
"type": "integer",
"minimum": 0
},
"ranges": {
"type": "object",
"properties": {
"dicke_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"hoehe_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"breite_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"schenkel_a_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"schenkel_b_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"durchmesser_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"wandstaerke_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"schluesselweite_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"aussendurchmesser_mm": {
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"minimum": 0
},
"min": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
}
},
"description": "Halbzeug: Massbereiche, z. B. {\"breite_mm\": {\"min\": 30, \"max\": 50}}. Schluessel wie die Einzelmasse.",
"additionalProperties": false
},
"dicke_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass dicke in mm (+-0,05)",
"exclusiveMinimum": 0
},
"hoehe_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass hoehe in mm (+-0,05)",
"exclusiveMinimum": 0
},
"breite_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass breite in mm (+-0,05)",
"exclusiveMinimum": 0
},
"kategorie": {
"type": "string",
"maxLength": 40,
"description": "Halbzeug-Form (Teiltext), z. B. Flachstange, Rundstange, Rundrohr, Winkel, Vierkantstange, Vierkantrohr, U-Profil, Rechteckrohr, Sechskantstange, T-Profil, Z-Profil, HEB-Traeger. Die Antwort nennt unter facets alle Formen."
},
"werkstoff": {
"type": "string",
"maxLength": 40,
"description": "Halbzeug-Werkstoff, z. B. 'aluminium', 'edelstahl', '1.4301', 'V2A', 'messing', 'stahl'"
},
"laser_only": {
"type": "boolean"
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"description": "nur Bleche mit dieser Dicke",
"exclusiveMinimum": 0
},
"schenkel_a_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass schenkel_a in mm (+-0,05)",
"exclusiveMinimum": 0
},
"schenkel_b_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass schenkel_b in mm (+-0,05)",
"exclusiveMinimum": 0
},
"durchmesser_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass durchmesser in mm (+-0,05)",
"exclusiveMinimum": 0
},
"wandstaerke_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass wandstaerke in mm (+-0,05)",
"exclusiveMinimum": 0
},
"schluesselweite_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass schluesselweite in mm (+-0,05)",
"exclusiveMinimum": 0
},
"aussendurchmesser_mm": {
"type": "number",
"description": "Halbzeug: genau dieses Mass aussendurchmesser in mm (+-0,05)",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}normalize_material — Werkstoff-Text zuordnen
Freier Werkstoff-Text (z. B. 'V2A 2mm', 'AlMg3', '1.4301 geschliffen', 'verzinkt 1,5') -> passende Blech-Werkstoffe mit 'material'-Code und Dicken. Vor get_price nutzen, wenn der Nutzer den Werkstoff frei beschreibt. Beispiel: {"query": "V2A 2mm"}. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"examples": [
{
"query": "V2A 2mm"
},
{
"query": "AlMg3",
"thickness_mm": 3
}
],
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"thickness_mm": {
"type": "number",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_hole_operations — Gewinde und Senkungen
Gewinde schneiden und Senkungen je Werkstoff und Dicke: Groessen mit Kernloch bzw. Durchgang, Preis je Stueck netto/brutto (Cent), ob die Groesse fuer diesen Werkstoff und diese Dicke geht (ok/warn/block mit Grund), Ruestpauschale je Auftrag und Lieferzeit-Regel. Verwendung in create_quote: hole_operations an der upload/design-Position. Beispiel: {"material":"aluminium-almg3","thickness_mm":4}. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [
"material"
],
"properties": {
"material": {
"type": "string",
"maxLength": 64
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_price — Preis rechnen (ohne Anmeldung)
Richtpreis netto und brutto (Kanal online, gleiche Engine wie der Shop) fuer Blech-Zuschnitt (sheet_cut), Kantteil (sheet) und Halbzeug-Zuschnitt (profile), dazu Zubehoer. Alle Kosten stecken im Preis, bei delivery.mode=shipping auch Versand. Nichts wird gespeichert; verbindlich und mit Warenkorb-Link wird es mit create_quote. type 'sheet' (Kantteil) nur fuer gekantetes Blech nach Zeichnung (Schenkel + Biegungen); Profile von der Stange (Winkel 15x15x2, Flach 40x5, Rohr) sind type 'profile' mit art_nr aus find_materials. Platten/Flansche MIT Loechern: configure_plate/configure_part. Antwort enthaelt pcf_kg_co2e (CO2e-Schaetzung cradle-to-gate, je Zeile und gesamt, Methode in pcf_method). Positionen IMMER als Liste items, auch bei einer Position. Beispiel: {"items": [{"type": "sheet_cut", "material": "aluminium-almg3", "thickness_mm": 2, "length_mm": 1000, "width_mm": 500, "quantity": 2}], "delivery": {"mode": "shipping", "postal_code": "60314"}} [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"examples": [
{
"items": [
{
"type": "sheet_cut",
"material": "aluminium-almg3",
"quantity": 2,
"width_mm": 500,
"length_mm": 1000,
"thickness_mm": 2
}
],
"delivery": {
"mode": "shipping",
"postal_code": "60314"
}
},
{
"items": [
{
"type": "sheet",
"bends": [
{
"angle_deg": 90
},
{
"angle_deg": 90
}
],
"depth_mm": 2000,
"material": "edelstahl-1.4301",
"quantity": 1,
"segments_mm": [
40,
60,
40
],
"measure_mode": "outside",
"thickness_mm": 1.5
}
]
},
{
"items": [
{
"cuts": [
{
"quantity": 4,
"length_mm": 1500
}
],
"type": "profile",
"article_nr": "4202"
}
],
"delivery": {
"mode": "pickup"
}
}
],
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"hem": {
"enum": [
"open",
"closed"
],
"type": "string",
"description": "sheet: Umschlag (Biegung unter 30 Grad) offen mit Spalt oder geschlossen zugedrueckt."
},
"cuts": {
"type": "array",
"items": {
"type": "object",
"required": [
"length_mm",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"length_mm": {
"type": "number",
"maximum": 12000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"type": {
"enum": [
"sheet_cut",
"sheet",
"profile",
"accessory",
"upload",
"design",
"part_draft"
],
"type": "string",
"description": "sheet_cut = rechteckiger Blech-Zuschnitt; sheet = Kantteil (Schenkel + Biegungen); profile = Halbzeug-Zuschnitt; accessory = Zubehoer; upload/design = CAD-Teil, part_draft = Entwurf aus configure_part/configure_plate (nur create_quote, mit Anmeldung)"
},
"bends": {
"type": "array",
"items": {
"type": "object",
"required": [
"angle_deg"
],
"properties": {
"angle_deg": {
"type": "number",
"maximum": 180,
"exclusiveMinimum": 0
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
},
"inner_radius_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 11,
"description": "sheet: genau eine Biegung weniger als Schenkel"
},
"depth_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet: Laenge der Kantung (zweite Kante)",
"exclusiveMinimum": 0
},
"draft_id": {
"type": "string",
"maxLength": 48,
"description": "part_draft: aus configure_part/configure_plate"
},
"material": {
"type": "string",
"maxLength": 64,
"description": "Werkstoff-Code aus find_materials, z. B. 'aluminium-almg3'"
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 3000,
"description": "sheet_cut: Breite (schmalere Seite ab 20 mm, Tafelschere; schmalere Streifen als Laserteil ueber configure_plate)",
"exclusiveMinimum": 0
},
"design_id": {
"type": "string",
"maxLength": 40
},
"length_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet_cut: Laenge",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"maxLength": 80,
"description": "eigene Bezeichnung/Kommission"
},
"upload_id": {
"type": "string",
"maxLength": 40,
"description": "upload: aus create_upload"
},
"article_nr": {
"type": "string",
"maxLength": 32,
"description": "profile/accessory: art_nr aus find_materials"
},
"operations": {
"type": "array",
"items": {
"enum": [
"entgraten"
],
"type": "string"
}
},
"segments_mm": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0
},
"maxItems": 12,
"minItems": 1,
"description": "sheet: Schenkellaengen entlang der Kontur"
},
"measure_mode": {
"enum": [
"inside",
"outside"
],
"type": "string",
"description": "sheet: Schenkelmasse aussen (outside) oder innen (inside) gemessen. Fehlt es, gilt outside und die Position wird in der Auftragspruefung geklaert."
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"visible_side": {
"enum": [
"outside",
"inside",
"any"
],
"type": "string",
"description": "sheet: Sichtseite des Kantteils (Pflicht bei Werkstoffen mit Sichtseite: geschliffen, Folie, eloxiert, lackiert, Riffel). Fehlt sie, wird sie in der Auftragspruefung geklaert."
},
"hole_operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"size",
"count"
],
"properties": {
"size": {
"type": "string",
"pattern": "^[Mm][0-9]{1,2}$"
},
"type": {
"enum": [
"gewinde",
"senkung"
],
"type": "string"
},
"count": {
"type": "integer",
"maximum": 500,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "upload/design/part_draft: Gewinde schneiden bzw. Senkungen je Teil (Groessen aus find_hole_operations), z. B. [{type:'gewinde', size:'M6', count:4}]"
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"delivery": {
"type": "object",
"required": [],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"mode": {
"enum": [
"pickup",
"shipping"
],
"type": "string"
},
"postal_code": {
"type": "string",
"maxLength": 10,
"description": "bei shipping Pflicht"
}
},
"additionalProperties": false
},
"include_pcf": {
"type": "boolean",
"default": true,
"description": "false = ohne CO2e-Angaben (pcf_kg_co2e, pcf_method)"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_manufacturability — Fertigbarkeit pruefen
Konstruktionsgrenzen fuer Werkstoff + Dicke (max. Format, max. Laser-Dicke je Werkstoff aus dem Maschinenpark, kleinster Lochdurchmesser, Steg, Randabstand, Biegung, Mindestschenkel) und, mit part, Pruefung eines Kantteils ohne Datei (tolerance_mm = gewuenschte Masstoleranz +/- mm). Mit design_id oder upload_id (Anmeldung, designs:write) wird eine CAD-Datei geprueft (flache Teile inkl. Konturen: Stege, Schlitze, Inseln, Kleinteile). Ergebnis: status ok|warn|block, ampel (fertigbar|hinweis|pruefanfrage|nicht_fertigbar), requirements und feedback: counts {block, warn}, issues[] mit where (Kantung/Ort), limit (Grenzwert) und fix (anwendbare Aenderung Feld + Wert, price_effect_net in Cent), bends[] je Kantung und visual (part_svg_url Querschnitt, bending_svg_url Biegeschritte mit Werkzeug, Kollision rot). Nur bei counts 0/0 fehlerfrei melden. Beispiel: {"material":"edelstahl-1.4301","thickness_mm":2,"part":{"depth_mm":500,"segments_mm":[5,100,40],"bends":[{"angle_deg":90},{"angle_deg":90}]}}. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {
"part": {
"type": "object",
"required": [
"depth_mm",
"segments_mm"
],
"properties": {
"bends": {
"type": "array",
"items": {
"type": "object",
"required": [
"angle_deg"
],
"properties": {
"angle_deg": {
"type": "number",
"maximum": 180,
"exclusiveMinimum": 0
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
},
"inner_radius_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 11,
"description": "sheet: genau eine Biegung weniger als Schenkel"
},
"depth_mm": {
"type": "number",
"maximum": 12000,
"exclusiveMinimum": 0
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Menge fuer price_effect_net (Standard 1)"
},
"segments_mm": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 12,
"minItems": 1
}
},
"additionalProperties": false
},
"material": {
"type": "string",
"maxLength": 64
},
"design_id": {
"type": "string",
"maxLength": 40
},
"upload_id": {
"type": "string",
"maxLength": 40
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"tolerance_mm": {
"type": "number",
"maximum": 10,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_lead_time — Liefertermin
Fertigstellungs-/Abholtermin und Zustellfenster je Stufe (Economy, Standard, Express) inkl. Regel Express 24 h (bis Stichzeit bestellt: naechster Werktag gegen eigenen Aufpreis bei kleinen Zuschnitt-Mengen). Mit items gilt der Termin fuer genau diese Positionen; ohne items die allgemeinen Regeln. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"hem": {
"enum": [
"open",
"closed"
],
"type": "string",
"description": "sheet: Umschlag (Biegung unter 30 Grad) offen mit Spalt oder geschlossen zugedrueckt."
},
"cuts": {
"type": "array",
"items": {
"type": "object",
"required": [
"length_mm",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"length_mm": {
"type": "number",
"maximum": 12000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"type": {
"enum": [
"sheet_cut",
"sheet",
"profile",
"accessory",
"upload",
"design",
"part_draft"
],
"type": "string",
"description": "sheet_cut = rechteckiger Blech-Zuschnitt; sheet = Kantteil (Schenkel + Biegungen); profile = Halbzeug-Zuschnitt; accessory = Zubehoer; upload/design = CAD-Teil, part_draft = Entwurf aus configure_part/configure_plate (nur create_quote, mit Anmeldung)"
},
"bends": {
"type": "array",
"items": {
"type": "object",
"required": [
"angle_deg"
],
"properties": {
"angle_deg": {
"type": "number",
"maximum": 180,
"exclusiveMinimum": 0
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
},
"inner_radius_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 11,
"description": "sheet: genau eine Biegung weniger als Schenkel"
},
"depth_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet: Laenge der Kantung (zweite Kante)",
"exclusiveMinimum": 0
},
"draft_id": {
"type": "string",
"maxLength": 48,
"description": "part_draft: aus configure_part/configure_plate"
},
"material": {
"type": "string",
"maxLength": 64,
"description": "Werkstoff-Code aus find_materials, z. B. 'aluminium-almg3'"
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 3000,
"description": "sheet_cut: Breite (schmalere Seite ab 20 mm, Tafelschere; schmalere Streifen als Laserteil ueber configure_plate)",
"exclusiveMinimum": 0
},
"design_id": {
"type": "string",
"maxLength": 40
},
"length_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet_cut: Laenge",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"maxLength": 80,
"description": "eigene Bezeichnung/Kommission"
},
"upload_id": {
"type": "string",
"maxLength": 40,
"description": "upload: aus create_upload"
},
"article_nr": {
"type": "string",
"maxLength": 32,
"description": "profile/accessory: art_nr aus find_materials"
},
"operations": {
"type": "array",
"items": {
"enum": [
"entgraten"
],
"type": "string"
}
},
"segments_mm": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0
},
"maxItems": 12,
"minItems": 1,
"description": "sheet: Schenkellaengen entlang der Kontur"
},
"measure_mode": {
"enum": [
"inside",
"outside"
],
"type": "string",
"description": "sheet: Schenkelmasse aussen (outside) oder innen (inside) gemessen. Fehlt es, gilt outside und die Position wird in der Auftragspruefung geklaert."
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"visible_side": {
"enum": [
"outside",
"inside",
"any"
],
"type": "string",
"description": "sheet: Sichtseite des Kantteils (Pflicht bei Werkstoffen mit Sichtseite: geschliffen, Folie, eloxiert, lackiert, Riffel). Fehlt sie, wird sie in der Auftragspruefung geklaert."
},
"hole_operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"size",
"count"
],
"properties": {
"size": {
"type": "string",
"pattern": "^[Mm][0-9]{1,2}$"
},
"type": {
"enum": [
"gewinde",
"senkung"
],
"type": "string"
},
"count": {
"type": "integer",
"maximum": 500,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "upload/design/part_draft: Gewinde schneiden bzw. Senkungen je Teil (Groessen aus find_hole_operations), z. B. [{type:'gewinde', size:'M6', count:4}]"
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"shipping_kind": {
"enum": [
"parcel",
"pallet"
],
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_delivery_options — Lieferoptionen mit Versandkosten
Alle Lieferstufen (Termin fertig, Zustellfenster, Aufpreis) und die Versandkosten zur Postleitzahl fuer genau diese Positionen in einem Aufruf; dazu Abholung (ohne Versandkosten). Termine, keine Lagerangaben. Beispiel: {"items":[...], "postal_code":"60314"}. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"hem": {
"enum": [
"open",
"closed"
],
"type": "string",
"description": "sheet: Umschlag (Biegung unter 30 Grad) offen mit Spalt oder geschlossen zugedrueckt."
},
"cuts": {
"type": "array",
"items": {
"type": "object",
"required": [
"length_mm",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"length_mm": {
"type": "number",
"maximum": 12000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"type": {
"enum": [
"sheet_cut",
"sheet",
"profile",
"accessory",
"upload",
"design",
"part_draft"
],
"type": "string",
"description": "sheet_cut = rechteckiger Blech-Zuschnitt; sheet = Kantteil (Schenkel + Biegungen); profile = Halbzeug-Zuschnitt; accessory = Zubehoer; upload/design = CAD-Teil, part_draft = Entwurf aus configure_part/configure_plate (nur create_quote, mit Anmeldung)"
},
"bends": {
"type": "array",
"items": {
"type": "object",
"required": [
"angle_deg"
],
"properties": {
"angle_deg": {
"type": "number",
"maximum": 180,
"exclusiveMinimum": 0
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
},
"inner_radius_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 11,
"description": "sheet: genau eine Biegung weniger als Schenkel"
},
"depth_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet: Laenge der Kantung (zweite Kante)",
"exclusiveMinimum": 0
},
"draft_id": {
"type": "string",
"maxLength": 48,
"description": "part_draft: aus configure_part/configure_plate"
},
"material": {
"type": "string",
"maxLength": 64,
"description": "Werkstoff-Code aus find_materials, z. B. 'aluminium-almg3'"
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 3000,
"description": "sheet_cut: Breite (schmalere Seite ab 20 mm, Tafelschere; schmalere Streifen als Laserteil ueber configure_plate)",
"exclusiveMinimum": 0
},
"design_id": {
"type": "string",
"maxLength": 40
},
"length_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet_cut: Laenge",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"maxLength": 80,
"description": "eigene Bezeichnung/Kommission"
},
"upload_id": {
"type": "string",
"maxLength": 40,
"description": "upload: aus create_upload"
},
"article_nr": {
"type": "string",
"maxLength": 32,
"description": "profile/accessory: art_nr aus find_materials"
},
"operations": {
"type": "array",
"items": {
"enum": [
"entgraten"
],
"type": "string"
}
},
"segments_mm": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0
},
"maxItems": 12,
"minItems": 1,
"description": "sheet: Schenkellaengen entlang der Kontur"
},
"measure_mode": {
"enum": [
"inside",
"outside"
],
"type": "string",
"description": "sheet: Schenkelmasse aussen (outside) oder innen (inside) gemessen. Fehlt es, gilt outside und die Position wird in der Auftragspruefung geklaert."
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"visible_side": {
"enum": [
"outside",
"inside",
"any"
],
"type": "string",
"description": "sheet: Sichtseite des Kantteils (Pflicht bei Werkstoffen mit Sichtseite: geschliffen, Folie, eloxiert, lackiert, Riffel). Fehlt sie, wird sie in der Auftragspruefung geklaert."
},
"hole_operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"size",
"count"
],
"properties": {
"size": {
"type": "string",
"pattern": "^[Mm][0-9]{1,2}$"
},
"type": {
"enum": [
"gewinde",
"senkung"
],
"type": "string"
},
"count": {
"type": "integer",
"maximum": 500,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "upload/design/part_draft: Gewinde schneiden bzw. Senkungen je Teil (Groessen aus find_hole_operations), z. B. [{type:'gewinde', size:'M6', count:4}]"
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"postal_code": {
"type": "string",
"pattern": "^[0-9]{5}$"
},
"shipping_kind": {
"enum": [
"parcel",
"pallet"
],
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_shipping_estimate — Versandkosten schaetzen
Packstueck-Rechner: wie die Teile verpackt werden (Karton, Flachpaket, Bund, Palette) und was der Versand netto/brutto kostet (Richtwert; verbindlich ist der Versand in get_price/create_quote mit delivery.mode=shipping). [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [
"postal_code",
"positions"
],
"properties": {
"country": {
"enum": [
"DE"
],
"type": "string"
},
"positions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"blech",
"profil",
"zubehoer"
],
"type": "string"
},
"material": {
"type": "string",
"maxLength": 64
},
"quantity": {
"type": "integer",
"maximum": 1000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 3000,
"minimum": 0
},
"length_mm": {
"type": "number",
"maximum": 12000,
"minimum": 0
},
"article_nr": {
"type": "string",
"maxLength": 32
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"postal_code": {
"type": "string",
"maxLength": 10
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_docs — Wissen durchsuchen
Sucht in Magazin, Konstruktionsrichtlinien, FAQ, Preis-, Versand- und Werkstoffseiten. Mit path statt query wird eine Seite vollstaendig gelesen (path aus einem Treffer). [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {
"path": {
"type": "string",
"maxLength": 120
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200
},
"section": {
"type": "string",
"maxLength": 40
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_part_templates — Teile-Vorlagen (Formen)
Alle Formen des Teile-Editors (/teile-designer): Rechteck, Quadrat, Ronde, Ring, Lochkreis-Flansch, Lochplatte, Langloch-Platte, Laschen, Knotenbleche, gekantete Winkel/Wannen ... je Vorlage id, Name, Parameter (key, Einheit, min/max, Vorgabe) und ein Beispiel-Aufruf fuer configure_part. Gruppe 'anwendung': fertige Kantteile fuer den Bau (fensterbank, mauerabdeckung, attikahaube, ortgangblech, traufblech, wandanschluss, kehlblech, sockelprofil, tropfkante, abdeckwinkel = L-Winkel; wanne und kiesfangleiste ueber den Teile-Editor) mit erlaubten Werkstoffen/Staerken und aliases (Suchbegriffe wie Mauerkrone, Wetterschenkel, Eckwinkel, Attikaabdeckung). query filtert auch nach aliases ('flansch', 'fensterbank', 'mauerkrone'), group nach Gruppe. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {
"group": {
"enum": [
"grund",
"scheiben",
"lochbild",
"laschen",
"knoten",
"gekantet",
"anwendung"
],
"type": "string"
},
"query": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}configure_part — Laserteil konfigurieren (ohne Anmeldung)
Teil aus einer Vorlage (template + params aus list_part_templates) plus optionale Zusatzloecher: der Server baut die Geometrie wie der Teile-Editor, prueft die Fertigbarkeit (Lochabstand Rand/Steg, Mindest-Loch-Ø je Dicke, Format) und rechnet den Shop-Preis netto+brutto inkl. aller Kosten (Kanal online). Ergebnis: status (ready|needs_review|price_unavailable|editor_only), price, lead_time, manufacturing_notes, preview_url (bemasste SVG-Zeichnung, 7 Tage), editor_url (Teile-Editor mit genau diesem Teil, dort in den Warenkorb), draft_id (7 Tage; angemeldet create_quote mit {type:'part_draft', draft_id}). Beispiel Flansch: {template:'flansch', params:{D:200,d:60,nl:4,dl:9,lk:140}, material:'aluminium-almg3', thickness_mm:3, quantity:1}. Koordinaten der extra_holes in mm ab linker unterer Ecke. Anwendungen (group 'anwendung', z. B. {template:'fensterbank', params:{L:1200,tiefe:150,ue:40,auf:20,ab:40,tropf:1}, material:'aluminium-almg3', thickness_mm:2}): Aussenmasse, Ergebnis mit price, manufacturability, order_item (fuer get_price/create_quote) und page_url (Seite mit vorbelegten Massen, dort in den Warenkorb). Speichert keine Kundendaten. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein (nur temporaerer Entwurf, 7 Tage).]
{
"type": "object",
"required": [
"template",
"material",
"thickness_mm"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80
},
"params": {
"type": "object",
"description": "Werte je Parameter-key der Vorlage (fehlende = Vorgabe)",
"additionalProperties": {
"type": "number"
}
},
"delivery": {
"type": "object",
"required": [],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"mode": {
"enum": [
"pickup",
"shipping"
],
"type": "string"
},
"postal_code": {
"type": "string",
"maxLength": 10,
"description": "bei shipping Pflicht"
}
},
"additionalProperties": false
},
"material": {
"type": "string",
"maxLength": 64
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"template": {
"type": "string",
"maxLength": 40
},
"extra_holes": {
"type": "array",
"items": {
"type": "object",
"required": [
"x_mm",
"y_mm",
"diameter_mm"
],
"properties": {
"x_mm": {
"type": "number"
},
"y_mm": {
"type": "number"
},
"diameter_mm": {
"type": "number",
"maximum": 2000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 150
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"corner_radius_mm": {
"type": "number",
"maximum": 1000,
"minimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}configure_plate — Lochplatte konfigurieren (ohne Anmeldung)
Einfachster Weg fuer 'Ich brauche dieses Teil': rechteckige Platte length_mm x width_mm mit runden Loechern (holes: x_mm/y_mm = Lochmitte ab linker unterer Ecke, diameter_mm), optional corner_radius_mm. Sonst wie configure_part: Fertigbarkeit, Shop-Preis netto+brutto, Lieferzeit, preview_url, editor_url, draft_id. Beispiel: Platte 200 x 100 x 3 AlMg3 mit 6 Loechern Ø 9 -> {length_mm:200, width_mm:100, thickness_mm:3, material:'aluminium-almg3', holes:[{x_mm:20,y_mm:20,diameter_mm:9}, ...]}. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein (nur temporaerer Entwurf, 7 Tage).]
{
"type": "object",
"required": [
"length_mm",
"width_mm",
"material",
"thickness_mm"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80
},
"holes": {
"type": "array",
"items": {
"type": "object",
"required": [
"x_mm",
"y_mm",
"diameter_mm"
],
"properties": {
"x_mm": {
"type": "number"
},
"y_mm": {
"type": "number"
},
"diameter_mm": {
"type": "number",
"maximum": 2000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 150
},
"delivery": {
"type": "object",
"required": [],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"mode": {
"enum": [
"pickup",
"shipping"
],
"type": "string"
},
"postal_code": {
"type": "string",
"maxLength": 10,
"description": "bei shipping Pflicht"
}
},
"additionalProperties": false
},
"material": {
"type": "string",
"maxLength": 64
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 1500,
"exclusiveMinimum": 0
},
"length_mm": {
"type": "number",
"maximum": 3000,
"exclusiveMinimum": 0
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"corner_radius_mm": {
"type": "number",
"maximum": 1000,
"minimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_agent_guidance — Leitfaden fuer Agenten
Reihenfolge, Einheiten, Verbote und Beispiele. Zu Beginn lesen. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}whoami — Zugang pruefen
Fuer wen spricht dieser Zugang, welche Rechte gelten? [Zugang: requires login: Scope catalog:read. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_upload — Datei-Upload vorbereiten
Signierter Link fuer EINE STEP-, DXF-, AI- oder EPS-Datei (15 Minuten, einmalig, STEP bis 50 MiB, DXF/AI/EPS bis 20 MiB; AI/EPS wird zu DXF in mm, Masse stehen in der Upload-Antwort unter vektor). Bytes per PUT auf upload_url; kannst du die Datei nicht lesen, gib dem Nutzer browser_upload_url. Danach create_quote mit {type:'upload', upload_id, material, quantity} (DXF/AI/EPS zusaetzlich thickness_mm). Nie Dateiinhalt als Text/Base64 senden. Wann browser_upload_url: wenn die Datei nur beim Nutzer liegt (Anhang nicht lesbar, Datei auf seinem Rechner). Link sofort weitergeben (15 min), dann mit upload_status pruefen, ob sie angekommen ist (state 'received'), erst danach create_quote. Stueckliste: filenames (bis 20) liefert je Datei einen eigenen Link. [Zugang: requires login: Scope designs:write. Aendert Daten: ja (Upload-Link).]
{
"type": "object",
"required": [],
"properties": {
"filename": {
"type": "string",
"maxLength": 255
},
"filenames": {
"type": "array",
"items": {
"type": "string",
"maxLength": 255
},
"maxItems": 20,
"minItems": 1
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}upload_status — Upload-Stand
Stand eines Uploads aus create_upload: waiting (Link offen, noch keine Datei), received (Datei da, weiter mit create_quote), expired (neuen Link holen). Hoechstens alle 10 Sekunden abfragen. [Zugang: requires login: Scope designs:write. Aendert Daten: nein.]
{
"type": "object",
"required": [
"upload_id"
],
"properties": {
"upload_id": {
"type": "string",
"maxLength": 40
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_quote — Angebot erstellen
Verbindliches Angebot (24 h) netto und brutto mit quote_id und checkout_url: der Link oeffnet den Warenkorb der Website mit genau diesen Positionen. Bestellen und bezahlen tut dort ein Mensch. Positionen wie get_price plus upload (aus create_upload) und design. requirements: block = nicht bestellbar (kein checkout_url), warn = Kunde bestaetigt im Warenkorb. Positionen als Liste items, Beispiel: {"items": [{"type": "sheet_cut", "material": "aluminium-almg3", "thickness_mm": 2, "length_mm": 1000, "width_mm": 500, "quantity": 2}], "delivery": {"mode": "shipping", "postal_code": "60314"}} [Zugang: requires login: Scope quotes:write. Aendert Daten: ja (Angebot).]
{
"type": "object",
"examples": [
{
"items": [
{
"type": "sheet_cut",
"material": "aluminium-almg3",
"quantity": 2,
"width_mm": 500,
"length_mm": 1000,
"thickness_mm": 2
}
],
"delivery": {
"mode": "shipping",
"postal_code": "60314"
},
"operation_key": "angebot-1"
}
],
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"hem": {
"enum": [
"open",
"closed"
],
"type": "string",
"description": "sheet: Umschlag (Biegung unter 30 Grad) offen mit Spalt oder geschlossen zugedrueckt."
},
"cuts": {
"type": "array",
"items": {
"type": "object",
"required": [
"length_mm",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"length_mm": {
"type": "number",
"maximum": 12000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"type": {
"enum": [
"sheet_cut",
"sheet",
"profile",
"accessory",
"upload",
"design",
"part_draft"
],
"type": "string",
"description": "sheet_cut = rechteckiger Blech-Zuschnitt; sheet = Kantteil (Schenkel + Biegungen); profile = Halbzeug-Zuschnitt; accessory = Zubehoer; upload/design = CAD-Teil, part_draft = Entwurf aus configure_part/configure_plate (nur create_quote, mit Anmeldung)"
},
"bends": {
"type": "array",
"items": {
"type": "object",
"required": [
"angle_deg"
],
"properties": {
"angle_deg": {
"type": "number",
"maximum": 180,
"exclusiveMinimum": 0
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
},
"inner_radius_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 11,
"description": "sheet: genau eine Biegung weniger als Schenkel"
},
"depth_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet: Laenge der Kantung (zweite Kante)",
"exclusiveMinimum": 0
},
"draft_id": {
"type": "string",
"maxLength": 48,
"description": "part_draft: aus configure_part/configure_plate"
},
"material": {
"type": "string",
"maxLength": 64,
"description": "Werkstoff-Code aus find_materials, z. B. 'aluminium-almg3'"
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 3000,
"description": "sheet_cut: Breite (schmalere Seite ab 20 mm, Tafelschere; schmalere Streifen als Laserteil ueber configure_plate)",
"exclusiveMinimum": 0
},
"design_id": {
"type": "string",
"maxLength": 40
},
"length_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet_cut: Laenge",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"maxLength": 80,
"description": "eigene Bezeichnung/Kommission"
},
"upload_id": {
"type": "string",
"maxLength": 40,
"description": "upload: aus create_upload"
},
"article_nr": {
"type": "string",
"maxLength": 32,
"description": "profile/accessory: art_nr aus find_materials"
},
"operations": {
"type": "array",
"items": {
"enum": [
"entgraten"
],
"type": "string"
}
},
"segments_mm": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0
},
"maxItems": 12,
"minItems": 1,
"description": "sheet: Schenkellaengen entlang der Kontur"
},
"measure_mode": {
"enum": [
"inside",
"outside"
],
"type": "string",
"description": "sheet: Schenkelmasse aussen (outside) oder innen (inside) gemessen. Fehlt es, gilt outside und die Position wird in der Auftragspruefung geklaert."
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"visible_side": {
"enum": [
"outside",
"inside",
"any"
],
"type": "string",
"description": "sheet: Sichtseite des Kantteils (Pflicht bei Werkstoffen mit Sichtseite: geschliffen, Folie, eloxiert, lackiert, Riffel). Fehlt sie, wird sie in der Auftragspruefung geklaert."
},
"hole_operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"size",
"count"
],
"properties": {
"size": {
"type": "string",
"pattern": "^[Mm][0-9]{1,2}$"
},
"type": {
"enum": [
"gewinde",
"senkung"
],
"type": "string"
},
"count": {
"type": "integer",
"maximum": 500,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "upload/design/part_draft: Gewinde schneiden bzw. Senkungen je Teil (Groessen aus find_hole_operations), z. B. [{type:'gewinde', size:'M6', count:4}]"
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"delivery": {
"type": "object",
"required": [],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"mode": {
"enum": [
"pickup",
"shipping"
],
"type": "string"
},
"postal_code": {
"type": "string",
"maxLength": 10,
"description": "bei shipping Pflicht"
}
},
"additionalProperties": false
},
"include_pcf": {
"type": "boolean",
"default": true,
"description": "false = ohne CO2e-Angaben (pcf_kg_co2e, pcf_method)"
},
"operation_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]*$",
"maxLength": 64,
"description": "Wiederholschutz: gleicher Wert beim erneuten Versuch, neuer Wert bei geaenderten Eingaben."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_quote — Angebot abrufen
Ein frueheres Angebot (jede Fassung) erneut lesen, mit checkout_url. [Zugang: requires login: Scope quotes:read. Aendert Daten: nein.]
{
"type": "object",
"required": [
"quote_id"
],
"properties": {
"quote_id": {
"type": "string",
"maxLength": 40
},
"include_pcf": {
"type": "boolean",
"default": true,
"description": "false = ohne CO2e-Angaben (pcf_kg_co2e, pcf_method)"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_quote_parts — Angebot aendern
Mengen aendern, Positionen entfernen (remove) oder ergaenzen (add_items). Ergebnis ist ein NEUES Angebot mit eigener quote_id und supersedes; das alte bleibt unveraendert abrufbar. index = lines[].index des Angebots. [Zugang: requires login: Scope quotes:write. Aendert Daten: ja (neue Angebotsfassung).]
{
"type": "object",
"required": [
"quote_id"
],
"properties": {
"changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"index"
],
"properties": {
"index": {
"type": "integer",
"maximum": 49,
"minimum": 0
},
"remove": {
"type": "boolean"
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"reference": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": false
},
"maxItems": 50
},
"delivery": {
"type": "object",
"required": [],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"mode": {
"enum": [
"pickup",
"shipping"
],
"type": "string"
},
"postal_code": {
"type": "string",
"maxLength": 10,
"description": "bei shipping Pflicht"
}
},
"additionalProperties": false
},
"quote_id": {
"type": "string",
"maxLength": 40
},
"add_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"hem": {
"enum": [
"open",
"closed"
],
"type": "string",
"description": "sheet: Umschlag (Biegung unter 30 Grad) offen mit Spalt oder geschlossen zugedrueckt."
},
"cuts": {
"type": "array",
"items": {
"type": "object",
"required": [
"length_mm",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"length_mm": {
"type": "number",
"maximum": 12000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"type": {
"enum": [
"sheet_cut",
"sheet",
"profile",
"accessory",
"upload",
"design",
"part_draft"
],
"type": "string",
"description": "sheet_cut = rechteckiger Blech-Zuschnitt; sheet = Kantteil (Schenkel + Biegungen); profile = Halbzeug-Zuschnitt; accessory = Zubehoer; upload/design = CAD-Teil, part_draft = Entwurf aus configure_part/configure_plate (nur create_quote, mit Anmeldung)"
},
"bends": {
"type": "array",
"items": {
"type": "object",
"required": [
"angle_deg"
],
"properties": {
"angle_deg": {
"type": "number",
"maximum": 180,
"exclusiveMinimum": 0
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
},
"inner_radius_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 11,
"description": "sheet: genau eine Biegung weniger als Schenkel"
},
"depth_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet: Laenge der Kantung (zweite Kante)",
"exclusiveMinimum": 0
},
"draft_id": {
"type": "string",
"maxLength": 48,
"description": "part_draft: aus configure_part/configure_plate"
},
"material": {
"type": "string",
"maxLength": 64,
"description": "Werkstoff-Code aus find_materials, z. B. 'aluminium-almg3'"
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 3000,
"description": "sheet_cut: Breite (schmalere Seite ab 20 mm, Tafelschere; schmalere Streifen als Laserteil ueber configure_plate)",
"exclusiveMinimum": 0
},
"design_id": {
"type": "string",
"maxLength": 40
},
"length_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet_cut: Laenge",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"maxLength": 80,
"description": "eigene Bezeichnung/Kommission"
},
"upload_id": {
"type": "string",
"maxLength": 40,
"description": "upload: aus create_upload"
},
"article_nr": {
"type": "string",
"maxLength": 32,
"description": "profile/accessory: art_nr aus find_materials"
},
"operations": {
"type": "array",
"items": {
"enum": [
"entgraten"
],
"type": "string"
}
},
"segments_mm": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0
},
"maxItems": 12,
"minItems": 1,
"description": "sheet: Schenkellaengen entlang der Kontur"
},
"measure_mode": {
"enum": [
"inside",
"outside"
],
"type": "string",
"description": "sheet: Schenkelmasse aussen (outside) oder innen (inside) gemessen. Fehlt es, gilt outside und die Position wird in der Auftragspruefung geklaert."
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"visible_side": {
"enum": [
"outside",
"inside",
"any"
],
"type": "string",
"description": "sheet: Sichtseite des Kantteils (Pflicht bei Werkstoffen mit Sichtseite: geschliffen, Folie, eloxiert, lackiert, Riffel). Fehlt sie, wird sie in der Auftragspruefung geklaert."
},
"hole_operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"size",
"count"
],
"properties": {
"size": {
"type": "string",
"pattern": "^[Mm][0-9]{1,2}$"
},
"type": {
"enum": [
"gewinde",
"senkung"
],
"type": "string"
},
"count": {
"type": "integer",
"maximum": 500,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "upload/design/part_draft: Gewinde schneiden bzw. Senkungen je Teil (Groessen aus find_hole_operations), z. B. [{type:'gewinde', size:'M6', count:4}]"
}
},
"additionalProperties": false
},
"maxItems": 50
},
"include_pcf": {
"type": "boolean",
"default": true,
"description": "false = ohne CO2e-Angaben (pcf_kg_co2e, pcf_method)"
},
"operation_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]*$",
"maxLength": 64,
"description": "Wiederholschutz: gleicher Wert beim erneuten Versuch, neuer Wert bei geaenderten Eingaben."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}add_quote_parts — Teile zum Angebot hinzufuegen
Stueckliste schrittweise: weitere Positionen (z. B. je hochgeladener Datei) an ein Angebot anhaengen. Ergebnis ist eine neue Fassung mit allen Positionen (supersedes = bisherige quote_id); mit der neuen quote_id weiterarbeiten. [Zugang: requires login: Scope quotes:write. Aendert Daten: ja (neue Angebotsfassung).]
{
"type": "object",
"required": [
"quote_id",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"hem": {
"enum": [
"open",
"closed"
],
"type": "string",
"description": "sheet: Umschlag (Biegung unter 30 Grad) offen mit Spalt oder geschlossen zugedrueckt."
},
"cuts": {
"type": "array",
"items": {
"type": "object",
"required": [
"length_mm",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"length_mm": {
"type": "number",
"maximum": 12000,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"type": {
"enum": [
"sheet_cut",
"sheet",
"profile",
"accessory",
"upload",
"design",
"part_draft"
],
"type": "string",
"description": "sheet_cut = rechteckiger Blech-Zuschnitt; sheet = Kantteil (Schenkel + Biegungen); profile = Halbzeug-Zuschnitt; accessory = Zubehoer; upload/design = CAD-Teil, part_draft = Entwurf aus configure_part/configure_plate (nur create_quote, mit Anmeldung)"
},
"bends": {
"type": "array",
"items": {
"type": "object",
"required": [
"angle_deg"
],
"properties": {
"angle_deg": {
"type": "number",
"maximum": 180,
"exclusiveMinimum": 0
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
},
"inner_radius_mm": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 11,
"description": "sheet: genau eine Biegung weniger als Schenkel"
},
"depth_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet: Laenge der Kantung (zweite Kante)",
"exclusiveMinimum": 0
},
"draft_id": {
"type": "string",
"maxLength": 48,
"description": "part_draft: aus configure_part/configure_plate"
},
"material": {
"type": "string",
"maxLength": 64,
"description": "Werkstoff-Code aus find_materials, z. B. 'aluminium-almg3'"
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
},
"width_mm": {
"type": "number",
"maximum": 3000,
"description": "sheet_cut: Breite (schmalere Seite ab 20 mm, Tafelschere; schmalere Streifen als Laserteil ueber configure_plate)",
"exclusiveMinimum": 0
},
"design_id": {
"type": "string",
"maxLength": 40
},
"length_mm": {
"type": "number",
"maximum": 12000,
"description": "sheet_cut: Laenge",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"maxLength": 80,
"description": "eigene Bezeichnung/Kommission"
},
"upload_id": {
"type": "string",
"maxLength": 40,
"description": "upload: aus create_upload"
},
"article_nr": {
"type": "string",
"maxLength": 32,
"description": "profile/accessory: art_nr aus find_materials"
},
"operations": {
"type": "array",
"items": {
"enum": [
"entgraten"
],
"type": "string"
}
},
"segments_mm": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0
},
"maxItems": 12,
"minItems": 1,
"description": "sheet: Schenkellaengen entlang der Kontur"
},
"measure_mode": {
"enum": [
"inside",
"outside"
],
"type": "string",
"description": "sheet: Schenkelmasse aussen (outside) oder innen (inside) gemessen. Fehlt es, gilt outside und die Position wird in der Auftragspruefung geklaert."
},
"thickness_mm": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"visible_side": {
"enum": [
"outside",
"inside",
"any"
],
"type": "string",
"description": "sheet: Sichtseite des Kantteils (Pflicht bei Werkstoffen mit Sichtseite: geschliffen, Folie, eloxiert, lackiert, Riffel). Fehlt sie, wird sie in der Auftragspruefung geklaert."
},
"hole_operations": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"size",
"count"
],
"properties": {
"size": {
"type": "string",
"pattern": "^[Mm][0-9]{1,2}$"
},
"type": {
"enum": [
"gewinde",
"senkung"
],
"type": "string"
},
"count": {
"type": "integer",
"maximum": 500,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "upload/design/part_draft: Gewinde schneiden bzw. Senkungen je Teil (Groessen aus find_hole_operations), z. B. [{type:'gewinde', size:'M6', count:4}]"
}
},
"additionalProperties": false
},
"maxItems": 25,
"minItems": 1
},
"quote_id": {
"type": "string",
"maxLength": 40
},
"include_pcf": {
"type": "boolean",
"default": true,
"description": "false = ohne CO2e-Angaben (pcf_kg_co2e, pcf_method)"
},
"operation_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]*$",
"maxLength": 64,
"description": "Wiederholschutz: gleicher Wert beim erneuten Versuch, neuer Wert bei geaenderten Eingaben."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}list_quotes — Meine Angebote
Angebote dieses Zugangs, neueste zuerst: quote_id, Datum, Ablauf, Status, Positionen, Summe, dfm_status, supersedes. Mit offset/limit blaettern. [Zugang: requires login: Scope quotes:read. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"offset": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_link — Link zu einem Angebot
Direkter Link fuer den Nutzer: kind 'checkout' (Warenkorb mit den Positionen, auch zum Weitergeben an Kollegen: wer den Link hat, sieht Positionen und Preis und kann bestellen), 'part' (Querschnitt mit Massen) oder 'bending' (Biegeschritte) einer Kantteil-Position (index). [Zugang: requires login: Scope quotes:read. Aendert Daten: nein.]
{
"type": "object",
"required": [
"quote_id",
"kind"
],
"properties": {
"kind": {
"enum": [
"checkout",
"part",
"bending"
],
"type": "string"
},
"index": {
"type": "integer",
"maximum": 49,
"minimum": 0
},
"quote_id": {
"type": "string",
"maxLength": 40
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_orders — Meine Bestellungen
Bestellungen des angemeldeten Kundenkontos (wie unter /konto): Nummer, Datum, Betrag, Zahl- und Auftragsstatus, Status-Link. Nur mit OAuth-Zustimmung eines Kundenkontos. [Zugang: requires login: OAuth-Zustimmung eines Kundenkontos, Scope orders:read. Aendert Daten: nein.]
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_order_status — Bestellstatus
Status einer Bestellung des angemeldeten Kundenkontos (order_id oder Nummer aus list_orders). Nur mit OAuth-Zustimmung eines Kundenkontos. Hoechstens alle 15 Minuten abfragen. Statt Abfragen: Ereignis-Meldungen order.status_changed ueber POST /v1/webhooks (MVG-API-Key, Scope webhooks:write, signiert). [Zugang: requires login: OAuth-Zustimmung eines Kundenkontos, Scope orders:read. Aendert Daten: nein.]
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}reorder_from_order — Teile nachbestellen (Angebot)
Teile einer frueheren Bestellung des angemeldeten Kundenkontos erneut anbieten (order_id oder Nummer aus list_orders; optional parts mit part_id und quantity). Preise und Fertigbarkeit werden HEUTE neu gerechnet, nie der alte Preis. Ergebnis: Angebot mit checkout_url in den Warenkorb, KEINE Bestellung, bestellt und bezahlt wird im Browser von einem Menschen. Nur mit OAuth-Zustimmung eines Kundenkontos. [Zugang: requires login: OAuth-Zustimmung eines Kundenkontos, Scope orders:read. Aendert Daten: ja (Angebot).]
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"parts": {
"type": "array",
"items": {
"type": "object",
"required": [
"part_id"
],
"properties": {
"part_id": {
"type": "string",
"pattern": "^[0-9a-f]+$",
"maxLength": 40
},
"quantity": {
"type": "integer",
"maximum": 10000,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 50
},
"order_id": {
"type": "string",
"maxLength": 80
},
"include_pcf": {
"type": "boolean",
"default": true,
"description": "false = ohne CO2e-Angaben (pcf_kg_co2e, pcf_method)"
},
"operation_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]*$",
"maxLength": 64,
"description": "Wiederholschutz: gleicher Wert beim erneuten Versuch, neuer Wert bei geaenderten Eingaben."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
4 advertised
teil_ohne_cad — Laserteil ohne CAD-Datei
Platte, Flansch, Lasche mit Loechern aus einer Beschreibung: Vorlage, Pruefung, Preis, Vorschau.
- beschreibung
- z. B. Flansch 200 mm, 4 Loecher M8, 3 mm Stahl, 10 Stueck (required)
kantteil_pruefen — Kantteil pruefen und anbieten
Schenkel und Biegungen pruefen, Befunde mit Bild zeigen, Korrekturen vorschlagen, Preis nennen.
- beschreibung
- z. B. U-Profil 60/20/60, 2 mm Stahl, 500 mm lang, 5 Stueck (required)
angebot_aus_step — Angebot aus STEP-Datei
Upload, Pruefung, Angebot mit checkout_url (Anmeldung noetig).
- werkstoff
- z. B. AlMg3 3 mm (required)
- menge
- Stueckzahl
halbzeug_zuschnitt — Halbzeug auf Laenge
Rohr, Profil, Flach- oder Rundmaterial finden und Zuschnitte rechnen.
- beschreibung
- z. B. 4x Alu-Flach 20x5, je 1200 mm (required)
Resources
3 advertised
agent-guide — Leitfaden fuer Agenten
Ablauf, Regeln, Beispiele und Grenzen (wie get_agent_guidance).
mvg://agent-guidechangelog — Aenderungen der Schnittstelle
schema_version und Aenderungen je Datum.
mvg://changelogmaterials — Blech-Werkstoffe
Werkstoff-Codes (material), Dicken und Formate fuer get_price.
mvg://materials90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
- 2026-11-09: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1919 ms
- 95th percentile latency
- 1919 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1919 ms · metadata changed · 25 tool(s), 3 resource(s), 0 resource template(s), 4 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http mvg-metallverkaufsgesellschaft-mcp https://mvg-frankfurt.de/mcpCodex
codex mcp add mvg-metallverkaufsgesellschaft-mcp --url https://mvg-frankfurt.de/mcpCursor
{
"mcpServers": {
"mvg-metallverkaufsgesellschaft-mcp": {
"url": "https://mvg-frankfurt.de/mcp"
}
}
}Cline
{
"mcpServers": {
"mvg-metallverkaufsgesellschaft-mcp": {
"type": "streamableHttp",
"url": "https://mvg-frankfurt.de/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"mvg-metallverkaufsgesellschaft-mcp": {
"type": "http",
"url": "https://mvg-frankfurt.de/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http mvg-metallverkaufsgesellschaft-mcp https://mvg-frankfurt.de/mcpClaude Desktop
https://mvg-frankfurt.de/mcpWindsurf
{
"mcpServers": {
"mvg-metallverkaufsgesellschaft-mcp": {
"serverUrl": "https://mvg-frankfurt.de/mcp"
}
}
}Let your agent find its tools
Find servers like MVG Metallverkaufsgesellschaft MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run MVG Metallverkaufsgesellschaft MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.