Koskamo

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.

MVG Metallverkaufsgesellschaft MCP logo, by MVG Metallverkaufsgesellschaft mbH & Co. KGVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by MVG Metallverkaufsgesellschaft mbH & Co. KG
MCP endpoint (Streamable HTTP)
https://mvg-frankfurt.de/mcp
Vendor documentation

What its tools do

25 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

25 of 25 have a description · 25 of 25 declare behavior hints · 0 of 23 with parameters document them all

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

Vendor evidenceRegistry 2.0.0

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
Server-advertised capabilities
{
  "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.

MVG Metallverkaufsgesellschaft (Frankfurt am Main): MCP-Server =======================================================Halbzeuge (Rohre, Profile, Flach-/Rundmaterial) ab Lager, Abholung oder Versand in Deutschland. Grundregeln ----------- 1. Laengen in Millimeter, Winkel in Grad, Geld in ganzen Cent. Jeder Preis kommt netto UND brutto (19 % USt), Kanal "online", genau der Preis des Online-Shops. Nenne dem Nutzer beides. 2. Preise nennt immer der Server. Nie schaetzen, nie aus alten Antworten uebernehmen, nie selbst Zuschlaege rechnen. 3. Dieser Server BESTELLT NICHT und BEZAHLT NICHT. Ein Angebot liefert eine checkout_url (Warenkorb der Website). Gib den Link dem Nutzer; ein Mensch bestellt und bezahlt dort. Behaupte nie, etwas sei bestellt oder bezahlt. 4. Werkstoffe nennst du mit "material" (lesbarer Code, z. B. "edelstahl-1.4301") bzw. "name". Dicken mit "label" ("2,0/3,5" heisst Riffelblech Grund/Gesamt). Steht ein reach_hinweis da, gib ihn weiter. Fragen zu REACH/RoHS: Erklaerung und RoHS-Einstufung je Werkstoffgruppe unter /reach-rohs (PDF /reach-rohs/reach.pdf, /reach-rohs/rohs.pdf; search_docs "RoHS"). Sichere nichts darueber hinaus zu. 5. Fertigungshinweise (requirements): "block" = so nicht fertigbar, erklaere den Grund und schlage eine Aenderung vor. "warn" = nur mit Zustimmung des Kunden; der Kunde bestaetigt sie im Warenkorb. Nimm nie selbst etwas an. Ohne Anmeldung (frei, mit Ratenbremse) -------------------------------------- find_materials Werkstoffe, Dicken, Formate; Halbzeug-Katalog-Suche (offset/limit, next_offset, facets) normalize_material freier Werkstoff-Text (V2A 2mm, AlMg3) -> material-Code get_price Richtpreis: Blech-Zuschnitt (sheet_cut), Kantteil (sheet mit segments_mm + bends), Halbzeug-Zuschnitt (profile mit article_nr aus find_materials), Zubehoer check_manufacturability Grenzen (Format, Laser-Dicke je Werkstoff, Loch, Steg, Rand, Biegung) und Pruefung eines beschriebenen Blechteils get_lead_time Fertigstellungs-/Liefertermine je Stufe, Schnellversand get_delivery_options alle Lieferstufen + Versandkosten zur PLZ fuer Positionen find_hole_operations Gewinde/Senkungen je Werkstoff + Dicke (Preis, ok/warn/block) get_shipping_estimate Packstuecke und Versandkosten (Richtwert) list_part_templates Formen des Teile-Editors (Rechteck, Ronde, Ring, Flansch, Lochbild, Langloch, Laschen ...) mit Parametern, Grenzen, Beispiel configure_part Laserteil aus Vorlage + Massen (+ Zusatzloecher): Pruefung, Preis, Vorschau-Zeichnung, Editor-Link configure_plate Sonderfall Lochplatte: Rechteck L x B + Loecher search_docs Magazin, Konstruktionsrichtlinien, FAQ, Preise, Versand get_agent_guidance dieser Text Hinweis: Die REST-Fassade nimmt Dateien zur Preispruefung auch ohne Anmeldung an (POST /v1/uploads + POST /v1/designs, 20 je Tag und IP, danach login_required). Angebote und Bestellungen brauchen immer eine Anmeldung. Mit Anmeldung (OAuth-Zustimmung des Kunden oder MVG-API-Key mvg_live_...) -------------------------------------------------------------------------- whoami fuer wen spricht der Zugang create_upload signierter Link fuer EINE STEP-, DXF-, AI- oder EPS-Datei (15 min; AI/EPS wird zu DXF in mm). Datei per PUT auf upload_url; kannst du sie nicht lesen, gib dem Nutzer browser_upload_url. NIE Dateiinhalt als Text oder Base64 in Argumente packen. upload_status Stand des Uploads: waiting, received, expired add_quote_parts weitere Positionen anhaengen (Stueckliste) → neue Fassung list_quotes eigene Angebote, neueste zuerst get_link Link: checkout (Warenkorb, weitergebbar), part/bending (Bilder) create_quote verbindliches Angebot (24 h) + checkout_url. Positionen: sheet_cut, sheet, profile, accessory, upload (upload_id, material; bei DXF/AI/EPS thickness_mm), design (design_id), part_draft (draft_id aus configure_part/_plate). Scope quotes:write. get_quote Angebot erneut lesen (mit checkout_url). Scope quotes:read update_quote_parts Mengen aendern, Positionen entfernen/ergaenzen → NEUES Angebot (supersedes); das alte bleibt unveraendert list_orders Bestellungen des Kundenkontos (nur OAuth mit Kundenkonto) check_order_status Status einer Bestellung (nur OAuth mit Kundenkonto) reorder_from_order Teile einer frueheren Bestellung neu anbieten (heutiger Preis, neu geprueft) → checkout_url; bestellt NICHTS (nur OAuth mit Kundenkonto) Typischer Ablauf ---------------- "Was kostet das?" → normalize_material bzw. find_materials → get_price → (bei Auftrag) create_quote → checkout_url an den Nutzer. "Ich brauche dieses Teil" (Platte, Flansch, Lasche mit Loechern, ohne Datei) → list_part_templates → configure_part (bzw. configure_plate) → Preis + preview_url + editor_url an den Nutzer; zum Bestellen editor_url (Warenkorb) oder angemeldet create_quote mit {"type":"part_draft","draft_id":..}. Welches Werkzeug? ----------------- * "Alu-Winkel 15 x 15 x 2", "Flachstahl 40 x 5", "Rohr 30 x 2": das ist ein HALBZEUG (Profil von der Stange) → find_materials kind "halbzeug", dann get_price type "profile". KEIN Kantteil. * Kantteil (type "sheet") nur fuer gekantetes Blech nach Zeichnung/Skizze (Schenkel + Biegungen, z. B. Abdeckwinkel 100/50 aus 2 mm Blech). * Rechteckiger Zuschnitt ohne Loecher → get_price type "sheet_cut" (schmalere Seite ab 20 mm; schmalere Streifen fertigen wir per Laser → configure_plate). * Platte/Ronde/Flansch/Lasche MIT Loechern oder Ausschnitten → configure_plate bzw. configure_part (Laserteil). Eigene CAD-Datei → create_upload. "Stueckliste (mehrere Dateien)" → create_upload mit filenames → je Datei hochladen → create_quote (bis 25 Positionen) bzw. add_quote_parts → dfm je Position zeigen → checkout_url. "Mit Gewinde M6" → find_hole_operations → hole_operations an der Position. "Hier meine STEP" → create_upload → Datei hochladen → create_quote mit {"type":"upload","upload_id":..,"material":.., "quantity":..} → requirements zeigen → checkout_url. "Andere Menge" → update_quote_parts(quote_id, changes=[{index,quantity}]). "Nochmal wie letztes Mal" → list_orders → reorder_from_order(order_id) → checkout_url an den Nutzer. Beispiele --------- Zuschnitt 500 x 300 mm, 2 mm Aluminium, 4 Stueck: get_price {"items":[{"type":"sheet_cut","material":"aluminium-almg3", "thickness_mm":2,"length_mm":500,"width_mm":300,"quantity":4}]} Winkel 100/50 mm, 300 mm lang, 2 mm Edelstahl, 2 Stueck: get_price {"items":[{"type":"sheet","material":"edelstahl-1.4301", "thickness_mm":2,"depth_mm":300,"segments_mm":[100,50], "bends":[{"angle_deg":90,"direction":"up"}],"quantity":2}]} Lochplatte 200 x 100 mm, 3 mm AlMg3, 6 Loecher Ø 9, 10 Stueck: configure_plate {"length_mm":200,"width_mm":100,"thickness_mm":3, "material":"aluminium-almg3","quantity":10,"holes":[ {"x_mm":20,"y_mm":20,"diameter_mm":9},{"x_mm":100,"y_mm":20,"diameter_mm":9}, {"x_mm":180,"y_mm":20,"diameter_mm":9},{"x_mm":20,"y_mm":80,"diameter_mm":9}, {"x_mm":100,"y_mm":80,"diameter_mm":9},{"x_mm":180,"y_mm":80,"diameter_mm":9}]} (x/y = Lochmitte ab linker unterer Ecke) Flansch Ø 200, Mittelloch 60, 4 Loecher Ø 9 auf Lochkreis 140, 3 mm Stahl: configure_part {"template":"flansch","params":{"D":200,"d":60,"nl":4, "dl":9,"lk":140},"material":"<code>","thickness_mm":3,"quantity":1} 4 Stueck Alu-Flachstange 20 x 5, je 1200 mm: find_materials {"kind":"halbzeug","query":"flach 20x5 alu"} → get_price {"items":[{"type":"profile","article_nr":"<art_nr>", "cuts":[{"length_mm":1200,"quantity":4}]}]} Fehler ------ Fachliche Fehler kommen als Werkzeug-Ergebnis mit isError=true und einem Problem-Dokument nach RFC 9457: code, title, detail, status, param, retryable, request_id. retryable=false heisst: Eingabe aendern, nicht wiederholen. Wichtige codes: invalid_request, not_manufacturable, quote_expired, pricing_unavailable (retryable), rate_limited (retryable), account_binding_required. Fehlt die Anmeldung, antwortet der Server mit HTTP 401 und startet die OAuth-Zustimmung. Viele Fehler bringen "suggestion" (naechster Schritt) und "example" (gueltiger Aufruf) mit. Ratenbremse: ohne Anmeldung je IP 60 Werkzeugaufrufe und 20 Berechnungen (get_price, get_lead_time, check_manufacturability ...) je Minute; mit Anmeldung 120 je Schluessel und Minute. rate_limited bzw. HTTP 429 nennt retry_after (Sekunden, auch als Header Retry-After) und rate_limits. So lange warten und denselben Aufruf einmal wiederholen; nicht parallel abfragen. Die Zahlen stehen auch in /.well-known/mcp.json unter rate_limits. Verfuegbarkeit: Der Server nennt Liefer- und Abholtermine (get_lead_time, lead_time in get_price). Nenne dem Nutzer immer diesen Termin. Bestellstatus: check_order_status/list_orders auf Nachfrage abfragen, hoechstens alle 15 Minuten; status_url zeigt dem Kunden den Stand ohne Agent. Statt Abfragen: POST /v1/webhooks (MVG-API-Key, Scope webhooks:write) meldet order.status_changed signiert an eine https-Adresse. Datei vom Nutzer: create_upload, browser_upload_url sofort weitergeben (15 min), mit upload_status pruefen (hoechstens alle 10 s), bei received create_quote. CO2e: get_price und die Angebots-Werkzeuge liefern pcf_kg_co2e; mit include_pcf=false entfallen diese Angaben. Staffelpreise: jede Angebotszeile (get_price, Angebote) hat scale_prices (gleiche Position mit anderer Menge, Cent). Fragt der Nutzer "was kostet es bei 50 Stueck", zuerst dort nachsehen; verbindlich ist nur ein neu gerechneter Preis. Fertigungsfeedback: check_manufacturability (mit part) und jedes Angebot (dfm) liefern status clean|warnings|blocked, counts {block, warn}, checkout_blocked_reason und issues[]: code, severity, title, detail (dem Nutzer woertlich nennen), where (Kantung bzw. Ort), limit (Grenzwert) und fix (anwendbare Aenderung: Feld + Wert, mit price_effect_net in Cent). Nur bei counts 0/0 "fehlerfrei" sagen. fix nicht ungefragt uebernehmen: dem Nutzer vorschlagen, nach Zustimmung mit geaenderten Werten neu rechnen. visual.part_svg_url (Querschnitt, betroffene Schenkel rot) und visual.bending_svg_url (Biegeschritte mit Werkzeug, Kollision rot) dem Nutzer zeigen oder verlinken; bends[] nennt je Kantung Winkel, Schenkel, Mindestschenkel und Innenradius. Upload-Teile (STEP/DXF, check_manufacturability mit design_id/upload_id und Angebots-Positionen type design): fix mit action move (by_mm, value = Weg), resize (diameter_mm) oder add_relief (Freischnitt mit at_mm, width_mm, depth_mm); price_effect_net mit price_effect_basis "estimate" ist ein Richtwert. Diese Korrekturen macht der Nutzer im CAD und laedt neu hoch. where.marker = Nummer im Bild visual.flat_svg_url (Abwicklung flacher Teile). bends[] nennt cad_radius_mm, expected_radius_mm (unser Werkzeug), radius_delta_mm und straight_flange_change_mm: die Aussenmasse bleiben, der gerade Teil des Schenkels aendert sich um diesen Wert (Bohrungen nahe der Rundung pruefen). Nachvollziehbarkeit: Preis-, Angebots-, Termin- und Katalogantworten tragen "meta": schema_version (Fassung der Felder; Aenderungen in der Server-Card unter changelog), request_id (bei Rueckfragen nennen), computed_at (UTC), valid_until (Angebot), binding (nur ein bestellbares Angebot ist verbindlich), price_version (wechselt, sobald sich eine Preisgrundlage aendert) und limits (Grenzen der Angabe, dem Nutzer bei Bedarf nennen). Jede Angebotszeile hat "components": Verkaufsbausteine in Cent (material, zuschnitt, laserzuschnitt, kantung, entgraten, artikel, fertigung oder position); ihre Summe ist total_net der Zeile. Zuschlaege stehen unter surcharges. Was du NICHT tun sollst ----------------------- * Keine Preise schaetzen, keine Zahlung behaupten, keine Zahlungsdaten erfragen. * Keine "warn"-Hinweise selbst annehmen. * Keine Lagerverfuegbarkeit versprechen. Nenne nur Termine aus get_lead_time. * Keine Artikelnummern raten, immer find_materials nutzen. LIEFERSTUFEN - Fertigungsteile: Standard 5 Werktage, Express 2 Werktage (Aufpreis 25 %), Economy 10 Werktage (Nachlass 3 %). - Halbzeuge, Profile, Zubehör und Reststücke haben dieselben Lieferstufen wie Blechteile (Economy, Standard, Express); Standardprofile mit Express 24 h wie Blech-Zuschnitte. - Express 24 h: bis 12 Uhr bestellt, am nächsten Werktag versandfertig (Blech-Zuschnitte und Standardprofile, bis 10 Stück je Position, wenn alle Positionen passen), Aufpreis 35 %. Ob eine Position passt, zeigt der Warenkorb. - Abholung in Frankfurt kostenlos. Paket-Laufzeit 1–2 Werktage nach dem Versandtag. Sortiment und Grenzen (aus den Website-Daten erzeugt) ----------------------------------------------------- Laserschneiden bis: Stahl bis 20 mm, Edelstahl bis 20 mm, Aluminium bis 20 mm, Kupfer bis 8 mm, Messing bis 8 mm. Kanten bis: Stahl bis 6 mm, Edelstahl bis 6 mm, Aluminium bis 8 mm. Groesstes Laserteil: 2980 x 1490 mm, laengste Kantung 3230 mm. Gewinde: M3 bis M16. Toleranz-Zusagen: Kantwinkel ± 0,5° (typisch ± 0,3° mit Winkelmessung), Laserschnitt ± 0,1 mm, DIN EN ISO 9013 Klasse 2, sofern in der Auftragsbestätigung nicht anders vereinbart. Gelochte Bleche: größere Winkel- und Maßtoleranzen, da die Lochung die Biegung beeinflusst.. ProFix: Aluminium-Systemprofile AlMgSi 0,5 (F25) nach EN 755-9: 20 × 20 MINI mit Nut 5; 30er MIDI mit Nut 8 (30 × 30 bis 60 × 60); 40er Serie mit Nut 8 (40 × 40 bis 40 × 160, Leicht/Schwer/Extraleicht); 80er Serie mit Nut 8 (80 × 80 bis 80 × 160, Leicht/Schwer/Extraleicht); dazu Sonderprofile (R80 45° Nut 8, 40 × 16 Nut 8, 80 × 16 Nut 8). Zuschnitt auf Fixlänge ab 20 mm, Stangenlänge 6000 mm. Versand: Versand innerhalb Deutschlands, Abholung in Frankfurt am Main. Lieferzeit und Preis nie selbst nennen: get_lead_time / get_price bzw. GET /api/online/lead-times und POST /v1/quotes fragen. Details je Werkstoff und Blechstaerke: /konstruktionsregeln, /v1/dfm/rules. Preis-Seiten ohne JavaScript (HTML, zum Verlinken/Zitieren, gleiche Engine wie der Shop): GET /preis/blech/<werkstoff>/<dicke>/<LxB>[?menge=n] (z. B. /preis/blech/almg3/2/700x500), GET /preis/halbzeug/<slug>/<laenge_mm>[?menge=n] (slug aus /halbzeuge-index.json, Feld s). Landingpages ohne Parameter: /blechzuschnitt/<gruppe>/<werkstoff>/<dicke>, /lochbleche/<werkstoff>/<lochbild>.

Tools

25 advertised

find_materials — Werkstoffe und Halbzeuge finden
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

find_materials input schema
{
  "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
}
find_materials annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
normalize_material — Werkstoff-Text zuordnen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

normalize_material input schema
{
  "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
}
normalize_material annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_hole_operations — Gewinde und Senkungen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

find_hole_operations input schema
{
  "type": "object",
  "required": [
    "material"
  ],
  "properties": {
    "material": {
      "type": "string",
      "maxLength": 64
    },
    "thickness_mm": {
      "type": "number",
      "maximum": 100,
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
find_hole_operations annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_price — Preis rechnen (ohne Anmeldung)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

get_price input schema
{
  "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
}
get_price annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_manufacturability — Fertigbarkeit pruefen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

check_manufacturability input schema
{
  "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
}
check_manufacturability annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_lead_time — Liefertermin
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

get_lead_time input schema
{
  "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
}
get_lead_time annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_delivery_options — Lieferoptionen mit Versandkosten
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

get_delivery_options input schema
{
  "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
}
get_delivery_options annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_shipping_estimate — Versandkosten schaetzen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

get_shipping_estimate input schema
{
  "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
}
get_shipping_estimate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_docs — Wissen durchsuchen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

search_docs input schema
{
  "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
}
search_docs annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_part_templates — Teile-Vorlagen (Formen)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

list_part_templates input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "group": {
      "enum": [
        "grund",
        "scheiben",
        "lochbild",
        "laschen",
        "knoten",
        "gekantet",
        "anwendung"
      ],
      "type": "string"
    },
    "query": {
      "type": "string",
      "maxLength": 80
    }
  },
  "additionalProperties": false
}
list_part_templates annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
configure_part — Laserteil konfigurieren (ohne Anmeldung)
Advertised by the server during the last successful anonymous check.

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).]

configure_part input schema
{
  "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
}
configure_part annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
configure_plate — Lochplatte konfigurieren (ohne Anmeldung)
Advertised by the server during the last successful anonymous check.

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).]

configure_plate input schema
{
  "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
}
configure_plate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_agent_guidance — Leitfaden fuer Agenten
Advertised by the server during the last successful anonymous check.
Advertised read-only

Reihenfolge, Einheiten, Verbote und Beispiele. Zu Beginn lesen. [Zugang: oeffentlich, ohne Anmeldung. Aendert Daten: nein.]

get_agent_guidance input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
get_agent_guidance annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
whoami — Zugang pruefen
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fuer wen spricht dieser Zugang, welche Rechte gelten? [Zugang: requires login: Scope catalog:read. Aendert Daten: nein.]

whoami input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
whoami annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_upload — Datei-Upload vorbereiten
Advertised by the server during the last successful anonymous check.

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).]

create_upload input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "filename": {
      "type": "string",
      "maxLength": 255
    },
    "filenames": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 255
      },
      "maxItems": 20,
      "minItems": 1
    }
  },
  "additionalProperties": false
}
create_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
upload_status — Upload-Stand
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

upload_status input schema
{
  "type": "object",
  "required": [
    "upload_id"
  ],
  "properties": {
    "upload_id": {
      "type": "string",
      "maxLength": 40
    }
  },
  "additionalProperties": false
}
upload_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_quote — Angebot erstellen
Advertised by the server during the last successful anonymous check.

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).]

create_quote input schema
{
  "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
}
create_quote annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_quote — Angebot abrufen
Advertised by the server during the last successful anonymous check.
Advertised read-only

Ein frueheres Angebot (jede Fassung) erneut lesen, mit checkout_url. [Zugang: requires login: Scope quotes:read. Aendert Daten: nein.]

get_quote input schema
{
  "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
}
get_quote annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_quote_parts — Angebot aendern
Advertised by the server during the last successful anonymous check.

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).]

update_quote_parts input schema
{
  "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
}
update_quote_parts annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
add_quote_parts — Teile zum Angebot hinzufuegen
Advertised by the server during the last successful anonymous check.

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).]

add_quote_parts input schema
{
  "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
}
add_quote_parts annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
list_quotes — Meine Angebote
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

list_quotes input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": false
}
list_quotes annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_link — Link zu einem Angebot
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

get_link input schema
{
  "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
}
get_link annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_orders — Meine Bestellungen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

list_orders input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
list_orders annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_order_status — Bestellstatus
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.]

check_order_status input schema
{
  "type": "object",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "maxLength": 80
    }
  },
  "additionalProperties": false
}
check_order_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
reorder_from_order — Teile nachbestellen (Angebot)
Advertised by the server during the last successful anonymous check.

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).]

reorder_from_order input schema
{
  "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
}
reorder_from_order annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

4 advertised

teil_ohne_cad — Laserteil ohne CAD-Datei

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Upload, Pruefung, Angebot mit checkout_url (Anmeldung noetig).

werkstoff
z. B. AlMg3 3 mm (required)
menge
Stueckzahl
halbzeug_zuschnitt — Halbzeug auf Laenge

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Ablauf, Regeln, Beispiele und Grenzen (wie get_agent_guidance).

agent-guide URI
mvg://agent-guide

MIME type: text/markdown

changelog — Aenderungen der Schnittstelle

Advertised by the server during the last successful anonymous check.

schema_version und Aenderungen je Datum.

changelog URI
mvg://changelog

MIME type: application/json

materials — Blech-Werkstoffe

Advertised by the server during the last successful anonymous check.

Werkstoff-Codes (material), Dicken und Formate fuer get_price.

materials URI
mvg://materials

MIME type: application/json

90-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.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-07: 1 of 1 checks answered
  2. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mvg-metallverkaufsgesellschaft-mcp https://mvg-frankfurt.de/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mvg-metallverkaufsgesellschaft-mcp --url https://mvg-frankfurt.de/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mvg-metallverkaufsgesellschaft-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mvg-metallverkaufsgesellschaft-mcp": {
      "url": "https://mvg-frankfurt.de/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mvg-metallverkaufsgesellschaft-mcp": {
      "type": "streamableHttp",
      "url": "https://mvg-frankfurt.de/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mvg-metallverkaufsgesellschaft-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "mvg-metallverkaufsgesellschaft-mcp": {
      "type": "http",
      "url": "https://mvg-frankfurt.de/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mvg-metallverkaufsgesellschaft-mcp https://mvg-frankfurt.de/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mvg-frankfurt.de/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing