Koskamo

Energieausweis Express MCP

This MCP server allows AI agents to prepare German energy certificates (Energieausweis) for residential buildings. It checks eligibility, finds buildings in a 3D model, collects data from utility bills and photos, and facilitates the ordering process, while the actual payment and final confirmation are handled by the user on the vendor's website.

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.

Energieausweis Express MCP logo, by Energieausweis ExpressVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Energieausweis Express
MCP endpoint (Streamable HTTP)
https://energieausweis-express.de/mcp
Vendor documentation

What you can do with it

  • Check if a consumption certificate is possible for a given address
  • Find building details in the official 3D model
  • Upload utility bills and photos for energy calculation
  • Retrieve the final certificate PDF and invoice

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
energieausweis-express 1.0.0
MCP protocol
2025-06-18
Tools
11 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Energieausweis Express issues Verbrauchsausweise (consumption-based energy certificates under the German GEG/GModG) for residential buildings in Germany. A qualified Energieberater checks each order and signs the certificate; it is registered with the DIBt and delivered as a PDF by email. How an order goes: 1. check_eligibility: whether a Verbrauchsausweis is possible, the price and what is needed. 2. find_building with the address, then start_order with the building the user confirms. Keep order_id and order_token; every later tool needs both. Do not show the token to anyone else. 3. update_order with what you read from the bills and what the user tells you (facts, heating, consumption periods as printed on the bills); add_document for the bills if you have the files. 4. review_order: open points, the decision and the price. Fill what you can; the customer can add the rest, mostly photos, on our page. 5. Ask the user before you go on, with the price review_order returned, e.g. "Soll ich das für <Preis> bei Energieausweis Express vorbereiten? Sie bekommen dann eine E-Mail, prüfen alles und bestellen selbst." 6. request_confirmation: we email the customer a link. Nothing is ordered or charged by you: the customer checks the data, adds the photos, and orders and pays on our page. 7. Later: get_status, answer_inquiry when the Energieberater asks something, get_certificate and get_listing_facts once it is issued. Texts the tools return for the customer are German; pass them on as they are.

Tools

11 advertised

add_document — Upload a bill or photo
Advertised by the server during the last successful anonymous check.

Uploads a file to a draft order: an energy bill or Heizkostenabrechnung (rechnung) or a photo (street side, heating, type plate). JPG, PNG, WebP or PDF as base64, at most 10 MB, 20 files per order. Bills are read and compared with the entered consumption after the customer has ordered; the Energieberater checks the photos. Usually the customer takes the photos on our page after the confirmation email. Orders nothing.

add_document input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token",
    "kind",
    "content_base64"
  ],
  "properties": {
    "kind": {
      "type": "string",
      "description": "rechnung (energy bill or Heizkostenabrechnung), fassade_strasse (photo of the street side), fassade_garten, heizung (photo of the boiler or heat pump), typenschild (photo of its type plate) or sonstiges"
    },
    "filename": {
      "type": "string",
      "description": "the file's name, for your reference"
    },
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    },
    "content_base64": {
      "type": "string",
      "description": "the file, base64-encoded: JPG, PNG, WebP or PDF, at most 10 MB"
    }
  },
  "additionalProperties": false
}
add_document output schema
{
  "type": "object",
  "required": [
    "document_id",
    "kind",
    "mime",
    "size_bytes"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "mime": {
      "type": "string"
    },
    "check": {
      "type": "string"
    },
    "size_bytes": {
      "type": "integer"
    },
    "document_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
add_document annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
answer_inquiry — Answer the Energieberater's question
Advertised by the server during the last successful anonymous check.

Answers the open question (Rückfrage) about an ordered certificate with the customer's answers: values keyed by the item keys get_status listed, files the question asks for, and an explanation. Ask the customer first and send only what they confirmed.

answer_inquiry input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token"
  ],
  "properties": {
    "values": {
      "type": "object",
      "description": "the answers, keyed by the item keys get_status listed; numbers with a point, e.g. 2004 or 140.5",
      "additionalProperties": {
        "type": "string"
      }
    },
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "documents": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "required": [
          "kind",
          "content_base64"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "description": "rechnung (energy bill or Heizkostenabrechnung), fassade_strasse (photo of the street side), fassade_garten, heizung (photo of the boiler or heat pump), typenschild (photo of its type plate) or sonstiges"
          },
          "filename": {
            "type": "string",
            "description": "the file's name, for your reference"
          },
          "content_base64": {
            "type": "string",
            "description": "the file, base64-encoded: JPG, PNG, WebP or PDF, at most 10 MB"
          }
        },
        "additionalProperties": false
      },
      "description": "files the upload items ask for"
    },
    "explanation": {
      "type": "string",
      "description": "what the customer wants to add or explain, e.g. why a value can't be given; in German"
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    }
  },
  "additionalProperties": false
}
answer_inquiry output schema
{
  "type": "object",
  "required": [
    "order_number",
    "status",
    "status_text",
    "ordered",
    "certificate_ready"
  ],
  "properties": {
    "status": {
      "type": "string"
    },
    "ordered": {
      "type": "boolean"
    },
    "delivery": {
      "type": "string"
    },
    "status_text": {
      "type": "string"
    },
    "open_inquiry": {
      "type": [
        "null",
        "object"
      ],
      "required": [
        "asked_by",
        "items",
        "next_step"
      ],
      "properties": {
        "items": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "object",
            "required": [
              "key",
              "kind",
              "label"
            ],
            "properties": {
              "key": {
                "type": "string"
              },
              "hint": {
                "type": "string"
              },
              "kind": {
                "type": "string",
                "description": "number, select or upload"
              },
              "unit": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              },
              "current": {
                "type": "string"
              },
              "options": {
                "type": [
                  "null",
                  "array"
                ],
                "items": {
                  "type": "object",
                  "required": [
                    "value",
                    "label"
                  ],
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                }
              },
              "upload_kind": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "message": {
          "type": "string"
        },
        "asked_by": {
          "type": "string",
          "description": "energieberater or automatische_pruefung"
        },
        "next_step": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "order_number": {
      "type": "string"
    },
    "certificate_ready": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
answer_inquiry annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
check_eligibility — Check eligibility and price
Advertised by the server during the last successful anonymous check.
Advertised read-only

Checks whether Energieausweis Express can issue a Verbrauchsausweis (consumption-based energy certificate) for a residential building in Germany, before any order exists. Returns yes or no with the reason in German (including the rule for houses with a Bauantrag before 1 November 1977 and the change on 1 January 2027), the all-inclusive price, the delivery time and what is needed. Changes nothing.

check_eligibility input schema
{
  "type": "object",
  "properties": {
    "units": {
      "type": "integer",
      "description": "number of flats (Wohnungen) in the whole building, if known"
    },
    "purpose": {
      "type": "string",
      "description": "what the certificate is for: verkauf (sale), vermietung (letting), verlaengerung (lease extension), aushang (display or own records)"
    },
    "modernised": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "parts of the envelope renewed since construction: dach (roof or top floor ceiling insulated), aussenwand, fenster, kellerdecke"
    },
    "year_built": {
      "type": "integer",
      "description": "year the building was built (Baujahr), if known"
    },
    "residential_only": {
      "type": [
        "null",
        "boolean"
      ],
      "description": "true if the building is used for housing only; false if it also has shops, offices or practices"
    }
  },
  "additionalProperties": false
}
check_eligibility output schema
{
  "type": "object",
  "required": [
    "verbrauchsausweis_possible",
    "reason",
    "price_cents",
    "price",
    "delivery",
    "includes",
    "needed"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "price": {
      "type": "string"
    },
    "needed": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      }
    },
    "reason": {
      "type": "string"
    },
    "delivery": {
      "type": "string"
    },
    "includes": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      }
    },
    "price_cents": {
      "type": "integer"
    },
    "verbrauchsausweis_possible": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
check_eligibility annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false
}
find_building — Find the building
Advertised by the server during the last successful anonymous check.
Advertised read-only

Finds the building at a German address in our 3D building data. Returns the building at the address first, then nearby buildings, each with a building_ref for start_order and a short German description (type, storeys, footprint). If several addresses match, returns them instead: ask the user which one is meant. Where the address may be one of several buildings (semi-detached or terraced houses, several buildings on one plot), ask the user which is theirs. Changes nothing.

find_building input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "description": "street, house number, postcode and city, e.g. 'Buschkamp 12, 48161 Münster'"
    }
  },
  "additionalProperties": false
}
find_building output schema
{
  "type": "object",
  "required": [
    "next_step"
  ],
  "properties": {
    "address": {
      "type": "string"
    },
    "addresses": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      }
    },
    "buildings": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "required": [
          "building_ref",
          "at_address",
          "position",
          "type",
          "footprint_m2"
        ],
        "properties": {
          "use": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "at_address": {
            "type": "boolean"
          },
          "building_ref": {
            "type": "string",
            "description": "pass this to start_order as it is"
          },
          "footprint_m2": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "next_step": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
find_building annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false
}
get_certificate — Download the certificate
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns download links for the issued certificate and its invoice (PDF). The links work for one hour and open nothing else, so they can be shown to the user; call again for fresh ones. The customer also got both by email. Changes nothing.

get_certificate input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    }
  },
  "additionalProperties": false
}
get_certificate output schema
{
  "type": "object",
  "required": [
    "certificate_url",
    "links_valid_until"
  ],
  "properties": {
    "invoice_url": {
      "type": "string"
    },
    "valid_until": {
      "type": "string"
    },
    "certificate_url": {
      "type": "string"
    },
    "links_valid_until": {
      "type": "string"
    },
    "registration_number": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_certificate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false
}
get_listing_facts — Facts for a property listing
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns what a property listing must state about the energy certificate (§ 87 GEG): type of certificate, Endenergieverbrauch, main energy carrier of the heating, year built and Effizienzklasse, as ready-to-paste German text. Only once the certificate is issued. Changes nothing.

get_listing_facts input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    }
  },
  "additionalProperties": false
}
get_listing_facts output schema
{
  "type": "object",
  "required": [
    "certificate_type",
    "final_energy",
    "energy_carriers",
    "year_built",
    "efficiency_class",
    "valid_until",
    "registration_number",
    "text",
    "one_line"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "the mandatory facts, one per line, ready to paste into the listing"
    },
    "one_line": {
      "type": "string",
      "description": "the same in one line, for listing portals"
    },
    "year_built": {
      "type": "string"
    },
    "valid_until": {
      "type": "string"
    },
    "final_energy": {
      "type": "string"
    },
    "energy_carriers": {
      "type": "string"
    },
    "certificate_type": {
      "type": "string"
    },
    "efficiency_class": {
      "type": "string"
    },
    "registration_number": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_listing_facts annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false
}
get_status — Order status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Shows where the order stands, in plain German words: prepared, ordered, being checked by the Energieberater, waiting for an answer to a Rückfrage (with its questions), issued. Changes nothing.

get_status input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    }
  },
  "additionalProperties": false
}
get_status output schema
{
  "type": "object",
  "required": [
    "order_number",
    "status",
    "status_text",
    "ordered",
    "certificate_ready"
  ],
  "properties": {
    "status": {
      "type": "string"
    },
    "ordered": {
      "type": "boolean"
    },
    "delivery": {
      "type": "string"
    },
    "status_text": {
      "type": "string"
    },
    "open_inquiry": {
      "type": [
        "null",
        "object"
      ],
      "required": [
        "asked_by",
        "items",
        "next_step"
      ],
      "properties": {
        "items": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "object",
            "required": [
              "key",
              "kind",
              "label"
            ],
            "properties": {
              "key": {
                "type": "string"
              },
              "hint": {
                "type": "string"
              },
              "kind": {
                "type": "string",
                "description": "number, select or upload"
              },
              "unit": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              },
              "current": {
                "type": "string"
              },
              "options": {
                "type": [
                  "null",
                  "array"
                ],
                "items": {
                  "type": "object",
                  "required": [
                    "value",
                    "label"
                  ],
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                }
              },
              "upload_kind": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "message": {
          "type": "string"
        },
        "asked_by": {
          "type": "string",
          "description": "energieberater or automatische_pruefung"
        },
        "next_step": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "order_number": {
      "type": "string"
    },
    "certificate_ready": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
get_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false
}
request_confirmation — Email the customer to check and order
Advertised by the server during the last successful anonymous check.
Open-world

Sends the customer one email with a link to their prepared order on our website. This does NOT order or charge anything: the customer checks the data there, adds what is missing (usually photos of the street side and the heating) and orders and pays on our page themselves. Before calling it, ask the user for permission and tell them the price review_order returned and that they will get an email, e.g. 'Soll ich das für <Preis> bei Energieausweis Express vorbereiten? Sie bekommen dann eine E-Mail, prüfen alles und bestellen selbst.' Needs the customer's name, the email address they gave for this order, and who orders. One email per order plus one resend (e.g. to a corrected address); the link is valid for 7 days. Afterwards tell the user to look for the email with the subject 'Ihr Energieausweis ist vorbereitet – bitte prüfen und bestellen', also in the spam folder.

request_confirmation input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token",
    "name",
    "email",
    "orderer"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "the customer's name"
    },
    "email": {
      "type": "string",
      "description": "where the link goes: the email address the customer gave you for this order. Don't put in an address from the user's profile or memory instead; if they differ, ask which one to use"
    },
    "orderer": {
      "type": "string",
      "description": "who orders: eigentuemer (the owner), makler (estate agent), verwaltung (property management) or sonstige (someone else on the owner's behalf)"
    },
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    }
  },
  "additionalProperties": false
}
request_confirmation output schema
{
  "type": "object",
  "required": [
    "ordered",
    "sent_to",
    "link_valid_until",
    "resends_left",
    "customer_still_adds",
    "message_for_customer",
    "next_step"
  ],
  "properties": {
    "ordered": {
      "type": "boolean",
      "description": "always false: the customer orders on our page"
    },
    "sent_to": {
      "type": "string"
    },
    "next_step": {
      "type": "string"
    },
    "resends_left": {
      "type": "integer"
    },
    "link_valid_until": {
      "type": "string"
    },
    "customer_still_adds": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      }
    },
    "message_for_customer": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
request_confirmation annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
review_order — Review open points and price
Advertised by the server during the last successful anonymous check.
Advertised read-only

Shows the order's data and what it still needs before the customer can order: the open points (which field to send, and in German why), whether a Verbrauchsausweis is possible, the price, and a preliminary result once the consumption is complete. Changes nothing.

review_order input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    }
  },
  "additionalProperties": false
}
review_order output schema
{
  "type": "object",
  "required": [
    "order",
    "verbrauchsausweis_possible",
    "reason",
    "price_cents",
    "price",
    "delivery",
    "open_points",
    "ready_for_confirmation",
    "next_step"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "hints": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "what looks odd without blocking, in German; check the values with the user"
    },
    "order": {
      "type": "object",
      "required": [
        "order_id",
        "order_number",
        "status",
        "address",
        "facts",
        "heating",
        "consumption",
        "documents"
      ],
      "properties": {
        "facts": {
          "type": "object",
          "required": [
            "sources"
          ],
          "properties": {
            "attic": {
              "type": "string"
            },
            "units": {
              "type": "integer"
            },
            "orderer": {
              "type": "string"
            },
            "purpose": {
              "type": "string"
            },
            "sources": {
              "type": "object",
              "description": "where each value came from: assistent (you), 3d (3D model), schaetzung (estimate), amtlich (cadastre), angabe (the customer)",
              "additionalProperties": {
                "type": "string"
              }
            },
            "storeys": {
              "type": "integer"
            },
            "basement": {
              "type": "string"
            },
            "ownership": {
              "type": "string"
            },
            "roof_type": {
              "type": "string"
            },
            "modernised": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "string"
              }
            },
            "year_built": {
              "type": "integer"
            },
            "building_type": {
              "type": "string"
            },
            "living_area_m2": {
              "type": "number"
            },
            "residential_only": {
              "type": [
                "null",
                "boolean"
              ]
            }
          },
          "additionalProperties": false
        },
        "status": {
          "type": "string"
        },
        "address": {
          "type": "string"
        },
        "heating": {
          "type": "object",
          "required": [
            "sources"
          ],
          "properties": {
            "year": {
              "type": "integer"
            },
            "carrier": {
              "type": "string"
            },
            "cooling": {
              "type": "string"
            },
            "sources": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            "hot_water": {
              "type": "string"
            },
            "renewables": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "string"
              }
            },
            "ventilation": {
              "type": "string"
            },
            "hot_water_by": {
              "type": "string"
            },
            "cooled_area_m2": {
              "type": "number"
            },
            "district_heating": {
              "type": [
                "null",
                "object"
              ],
              "properties": {
                "supplier": {
                  "type": "string",
                  "description": "the Fernwärme supplier, e.g. Stadtwerke Münster"
                },
                "generation": {
                  "type": "string",
                  "description": "how the heat is made, as the supplier states: kwk_gas, kwk_kohle, kwk_erneuerbar (combined heat and power) or heizwerk_gas, heizwerk_kohle, heizwerk_erneuerbar (heating plant)"
                },
                "primary_factor": {
                  "type": [
                    "null",
                    "number"
                  ],
                  "description": "the Primärenergiefaktor the supplier publishes, if known"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "order_id": {
          "type": "string"
        },
        "documents": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "object",
            "required": [
              "document_id",
              "kind",
              "mime",
              "size_bytes"
            ],
            "properties": {
              "kind": {
                "type": "string"
              },
              "mime": {
                "type": "string"
              },
              "check": {
                "type": "string"
              },
              "size_bytes": {
                "type": "integer"
              },
              "document_id": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "consumption": {
          "type": "object",
          "required": [
            "periods",
            "vacancy_percent"
          ],
          "properties": {
            "periods": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "object",
                "required": [
                  "start",
                  "end",
                  "carrier",
                  "quantity",
                  "unit"
                ],
                "properties": {
                  "end": {
                    "type": "string"
                  },
                  "unit": {
                    "type": "string"
                  },
                  "start": {
                    "type": "string"
                  },
                  "carrier": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "kwh_is_gross": {
                    "type": "boolean"
                  },
                  "hot_water_kwh": {
                    "type": [
                      "null",
                      "number"
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "vacancy_percent": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "order_number": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "price": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    },
    "delivery": {
      "type": "string"
    },
    "next_step": {
      "type": "string"
    },
    "open_points": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "required": [
          "field",
          "title",
          "customer_can_add"
        ],
        "properties": {
          "field": {
            "type": "string",
            "description": "what to send, as the tools name it"
          },
          "title": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "customer_can_add": {
            "type": "boolean",
            "description": "true if the customer can add it on our page after the confirmation email"
          }
        },
        "additionalProperties": false
      }
    },
    "price_cents": {
      "type": "integer"
    },
    "preliminary_result": {
      "type": [
        "null",
        "object"
      ],
      "required": [
        "final_energy_kwh_per_m2_year",
        "efficiency_class",
        "note"
      ],
      "properties": {
        "note": {
          "type": "string"
        },
        "efficiency_class": {
          "type": "string"
        },
        "final_energy_kwh_per_m2_year": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "ready_for_confirmation": {
      "type": "boolean"
    },
    "verbrauchsausweis_possible": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
review_order annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false
}
start_order — Start a draft order
Advertised by the server during the last successful anonymous check.

Starts a draft order for the building the user confirmed (building_ref from find_building). Orders and charges nothing. Returns order_id and order_token, which every later tool needs; the token opens only this order, so keep it private and never show it to anyone. Also returns what our 3D building model and the cadastre already say about the building (estimates the customer can correct) and the open points.

start_order input schema
{
  "type": "object",
  "required": [
    "building_ref"
  ],
  "properties": {
    "building_ref": {
      "type": "string",
      "description": "the building_ref find_building returned for the building the user confirmed"
    }
  },
  "additionalProperties": false
}
start_order output schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token",
    "order_number",
    "order",
    "open_points",
    "next_step"
  ],
  "properties": {
    "order": {
      "type": "object",
      "required": [
        "order_id",
        "order_number",
        "status",
        "address",
        "facts",
        "heating",
        "consumption",
        "documents"
      ],
      "properties": {
        "facts": {
          "type": "object",
          "required": [
            "sources"
          ],
          "properties": {
            "attic": {
              "type": "string"
            },
            "units": {
              "type": "integer"
            },
            "orderer": {
              "type": "string"
            },
            "purpose": {
              "type": "string"
            },
            "sources": {
              "type": "object",
              "description": "where each value came from: assistent (you), 3d (3D model), schaetzung (estimate), amtlich (cadastre), angabe (the customer)",
              "additionalProperties": {
                "type": "string"
              }
            },
            "storeys": {
              "type": "integer"
            },
            "basement": {
              "type": "string"
            },
            "ownership": {
              "type": "string"
            },
            "roof_type": {
              "type": "string"
            },
            "modernised": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "string"
              }
            },
            "year_built": {
              "type": "integer"
            },
            "building_type": {
              "type": "string"
            },
            "living_area_m2": {
              "type": "number"
            },
            "residential_only": {
              "type": [
                "null",
                "boolean"
              ]
            }
          },
          "additionalProperties": false
        },
        "status": {
          "type": "string"
        },
        "address": {
          "type": "string"
        },
        "heating": {
          "type": "object",
          "required": [
            "sources"
          ],
          "properties": {
            "year": {
              "type": "integer"
            },
            "carrier": {
              "type": "string"
            },
            "cooling": {
              "type": "string"
            },
            "sources": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            "hot_water": {
              "type": "string"
            },
            "renewables": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "string"
              }
            },
            "ventilation": {
              "type": "string"
            },
            "hot_water_by": {
              "type": "string"
            },
            "cooled_area_m2": {
              "type": "number"
            },
            "district_heating": {
              "type": [
                "null",
                "object"
              ],
              "properties": {
                "supplier": {
                  "type": "string",
                  "description": "the Fernwärme supplier, e.g. Stadtwerke Münster"
                },
                "generation": {
                  "type": "string",
                  "description": "how the heat is made, as the supplier states: kwk_gas, kwk_kohle, kwk_erneuerbar (combined heat and power) or heizwerk_gas, heizwerk_kohle, heizwerk_erneuerbar (heating plant)"
                },
                "primary_factor": {
                  "type": [
                    "null",
                    "number"
                  ],
                  "description": "the Primärenergiefaktor the supplier publishes, if known"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "order_id": {
          "type": "string"
        },
        "documents": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "object",
            "required": [
              "document_id",
              "kind",
              "mime",
              "size_bytes"
            ],
            "properties": {
              "kind": {
                "type": "string"
              },
              "mime": {
                "type": "string"
              },
              "check": {
                "type": "string"
              },
              "size_bytes": {
                "type": "integer"
              },
              "document_id": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "consumption": {
          "type": "object",
          "required": [
            "periods",
            "vacancy_percent"
          ],
          "properties": {
            "periods": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "object",
                "required": [
                  "start",
                  "end",
                  "carrier",
                  "quantity",
                  "unit"
                ],
                "properties": {
                  "end": {
                    "type": "string"
                  },
                  "unit": {
                    "type": "string"
                  },
                  "start": {
                    "type": "string"
                  },
                  "carrier": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "kwh_is_gross": {
                    "type": "boolean"
                  },
                  "hot_water_kwh": {
                    "type": [
                      "null",
                      "number"
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "vacancy_percent": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "order_number": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "order_id": {
      "type": "string"
    },
    "next_step": {
      "type": "string"
    },
    "open_points": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "required": [
          "field",
          "title",
          "customer_can_add"
        ],
        "properties": {
          "field": {
            "type": "string",
            "description": "what to send, as the tools name it"
          },
          "title": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "customer_can_add": {
            "type": "boolean",
            "description": "true if the customer can add it on our page after the confirmation email"
          }
        },
        "additionalProperties": false
      }
    },
    "order_token": {
      "type": "string",
      "description": "opens only this order; keep it private"
    },
    "order_number": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
start_order annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
update_order — Enter order data
Advertised by the server during the last successful anonymous check.

Enters or corrects data of a draft order: facts about the building, the heating, and the consumption periods as printed on the bills, in the bill's unit (kWh; m3 of gas, with the bill's Brennwert and Zustandszahl; litres of oil; kg of pellets; we convert). The consumption is always the whole building's, also when the customer owns one flat: from a Heizkostenabrechnung take the Gesamtverbrauch der Liegenschaft, never the customer's own share. Send only what you know: fields left out stay as they are, and consumption.periods replaces all periods. Synonyms such as 'Gas' or 'heat pump' are accepted. Values are marked as entered by an assistant; the customer sees and confirms them before ordering. Returns the order as it is now and the open points. Orders nothing.

update_order input schema
{
  "type": "object",
  "required": [
    "order_id",
    "order_token"
  ],
  "properties": {
    "facts": {
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "attic": {
          "type": "string",
          "description": "beheizt (lived in, heated), unbeheizt (unheated loft) or keins (none, e.g. flat roof)"
        },
        "units": {
          "type": "integer",
          "description": "number of flats in the whole building"
        },
        "purpose": {
          "type": "string",
          "description": "verkauf (sale), vermietung (letting), verlaengerung (lease extension) or aushang (display or own records)"
        },
        "storeys": {
          "type": "integer",
          "description": "full storeys (Vollgeschosse), without attic and basement"
        },
        "basement": {
          "type": "string",
          "description": "keiner, unbeheizt or beheizt"
        },
        "ownership": {
          "type": "string",
          "description": "gebaeude if the customer owns the whole building, wohnung if one flat in it; the certificate always covers the whole building"
        },
        "modernised": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "string"
          },
          "description": "envelope parts renewed since construction: dach, aussenwand, fenster, kellerdecke; replaces the list"
        },
        "year_built": {
          "type": "integer",
          "description": "year the building was built"
        },
        "living_area_m2": {
          "type": "number",
          "description": "Wohnfläche of the whole building in m², all flats together"
        },
        "residential_only": {
          "type": [
            "null",
            "boolean"
          ],
          "description": "true if the building is used for housing only"
        }
      },
      "additionalProperties": false
    },
    "heating": {
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "year": {
          "type": "integer",
          "description": "Baujahr of the boiler or heat pump (with Fernwärme: of the transfer station), from the type plate or the chimney sweep's record"
        },
        "carrier": {
          "type": "string",
          "description": "main energy carrier of the heating: erdgas, fluessiggas, heizoel, fernwaerme, holzpellets, scheitholz, hackschnitzel, strom_waermepumpe, strom_direkt, steinkohle or braunkohle"
        },
        "cooling": {
          "type": "string",
          "description": "keine, or strom for electric air conditioning"
        },
        "hot_water": {
          "type": "string",
          "description": "zentral_enthalten (made by the heating, in its consumption, share unknown), zentral_gemessen (made by the heating, and the bill states the hot water share: send it as hot_water_kwh with each period) or dezentral (electric boilers or instantaneous heaters, not in the consumption)"
        },
        "renewables": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "string"
          },
          "description": "solarthermie, photovoltaik, biomasse (wood stove); replaces the list. A heat pump or wood heating counts on its own"
        },
        "ventilation": {
          "type": "string",
          "description": "fenster (windows), anlage (ventilation system) or anlage_wrg (with heat recovery)"
        },
        "hot_water_by": {
          "type": "string",
          "description": "with hot_water zentral_enthalten and periods of several carriers: the carrier whose system heats the water, or gemeinsam when several heat it together (e.g. a wood stove with a water jacket and a heat pump on one tank). A room stove without a water jacket heats no water. Leave it out if unknown: the hot water is then split by consumption"
        },
        "cooled_area_m2": {
          "type": "number",
          "description": "living area cooled by air conditioning, in m²"
        },
        "district_heating": {
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "supplier": {
              "type": "string",
              "description": "the Fernwärme supplier, e.g. Stadtwerke Münster"
            },
            "generation": {
              "type": "string",
              "description": "how the heat is made, as the supplier states: kwk_gas, kwk_kohle, kwk_erneuerbar (combined heat and power) or heizwerk_gas, heizwerk_kohle, heizwerk_erneuerbar (heating plant)"
            },
            "primary_factor": {
              "type": [
                "null",
                "number"
              ],
              "description": "the Primärenergiefaktor the supplier publishes, if known"
            }
          },
          "description": "with Fernwärme: how it is generated",
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "order_id": {
      "type": "string",
      "description": "the order_id start_order returned"
    },
    "consumption": {
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "periods": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "object",
            "required": [
              "start",
              "end",
              "carrier",
              "quantity",
              "unit"
            ],
            "properties": {
              "end": {
                "type": "string",
                "description": "last day of the billing period (inclusive), YYYY-MM-DD"
              },
              "unit": {
                "type": "string",
                "description": "unit as printed: kWh, MWh, m3, l, kg, t, rm (Raummeter) or srm"
              },
              "start": {
                "type": "string",
                "description": "first day of the billing period, YYYY-MM-DD"
              },
              "carrier": {
                "type": "string",
                "description": "energy carrier billed, e.g. erdgas, heizoel, fernwaerme, holzpellets, strom_waermepumpe"
              },
              "evidence": {
                "type": "string",
                "description": "the text you read this period from on the bill, verbatim, for the Energieberater"
              },
              "quantity": {
                "type": "number",
                "description": "consumption for heating and hot water in the period, as printed on the bill, as a plain number: German bills group thousands with a point, so 18.451 kWh is 18451"
              },
              "kwh_is_gross": {
                "type": [
                  "null",
                  "boolean"
                ],
                "description": "for kWh of gas: true if the bill states kWh by the Brennwert (gas bills usually do; default true for gas)"
              },
              "hot_water_kwh": {
                "type": [
                  "null",
                  "number"
                ],
                "description": "only if the bill states the energy for hot water separately, in kWh"
              },
              "calorific_value": {
                "type": "number",
                "description": "gas billed in m3 only: the Abrechnungsbrennwert (Hs) in kWh/m3 as printed; send it together with condition_factor"
              },
              "condition_factor": {
                "type": "number",
                "description": "gas billed in m3 only: the Zustandszahl as printed; send it together with calorific_value"
              }
            },
            "additionalProperties": false
          },
          "description": "the billing periods of the whole building, one per period on the bill; from a Heizkostenabrechnung the Gesamtverbrauch der Liegenschaft, never one flat's share; replaces all periods"
        },
        "vacancy_percent": {
          "type": [
            "null",
            "number"
          ],
          "description": "share of the living area that stood empty in the periods, in percent"
        }
      },
      "additionalProperties": false
    },
    "order_token": {
      "type": "string",
      "description": "the order_token start_order returned; it opens only this order, keep it private"
    }
  },
  "additionalProperties": false
}
update_order output schema
{
  "type": "object",
  "required": [
    "order",
    "open_points"
  ],
  "properties": {
    "hints": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "what looks odd without blocking, in German; check the values with the user"
    },
    "order": {
      "type": "object",
      "required": [
        "order_id",
        "order_number",
        "status",
        "address",
        "facts",
        "heating",
        "consumption",
        "documents"
      ],
      "properties": {
        "facts": {
          "type": "object",
          "required": [
            "sources"
          ],
          "properties": {
            "attic": {
              "type": "string"
            },
            "units": {
              "type": "integer"
            },
            "orderer": {
              "type": "string"
            },
            "purpose": {
              "type": "string"
            },
            "sources": {
              "type": "object",
              "description": "where each value came from: assistent (you), 3d (3D model), schaetzung (estimate), amtlich (cadastre), angabe (the customer)",
              "additionalProperties": {
                "type": "string"
              }
            },
            "storeys": {
              "type": "integer"
            },
            "basement": {
              "type": "string"
            },
            "ownership": {
              "type": "string"
            },
            "roof_type": {
              "type": "string"
            },
            "modernised": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "string"
              }
            },
            "year_built": {
              "type": "integer"
            },
            "building_type": {
              "type": "string"
            },
            "living_area_m2": {
              "type": "number"
            },
            "residential_only": {
              "type": [
                "null",
                "boolean"
              ]
            }
          },
          "additionalProperties": false
        },
        "status": {
          "type": "string"
        },
        "address": {
          "type": "string"
        },
        "heating": {
          "type": "object",
          "required": [
            "sources"
          ],
          "properties": {
            "year": {
              "type": "integer"
            },
            "carrier": {
              "type": "string"
            },
            "cooling": {
              "type": "string"
            },
            "sources": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            "hot_water": {
              "type": "string"
            },
            "renewables": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "string"
              }
            },
            "ventilation": {
              "type": "string"
            },
            "hot_water_by": {
              "type": "string"
            },
            "cooled_area_m2": {
              "type": "number"
            },
            "district_heating": {
              "type": [
                "null",
                "object"
              ],
              "properties": {
                "supplier": {
                  "type": "string",
                  "description": "the Fernwärme supplier, e.g. Stadtwerke Münster"
                },
                "generation": {
                  "type": "string",
                  "description": "how the heat is made, as the supplier states: kwk_gas, kwk_kohle, kwk_erneuerbar (combined heat and power) or heizwerk_gas, heizwerk_kohle, heizwerk_erneuerbar (heating plant)"
                },
                "primary_factor": {
                  "type": [
                    "null",
                    "number"
                  ],
                  "description": "the Primärenergiefaktor the supplier publishes, if known"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "order_id": {
          "type": "string"
        },
        "documents": {
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "object",
            "required": [
              "document_id",
              "kind",
              "mime",
              "size_bytes"
            ],
            "properties": {
              "kind": {
                "type": "string"
              },
              "mime": {
                "type": "string"
              },
              "check": {
                "type": "string"
              },
              "size_bytes": {
                "type": "integer"
              },
              "document_id": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "consumption": {
          "type": "object",
          "required": [
            "periods",
            "vacancy_percent"
          ],
          "properties": {
            "periods": {
              "type": [
                "null",
                "array"
              ],
              "items": {
                "type": "object",
                "required": [
                  "start",
                  "end",
                  "carrier",
                  "quantity",
                  "unit"
                ],
                "properties": {
                  "end": {
                    "type": "string"
                  },
                  "unit": {
                    "type": "string"
                  },
                  "start": {
                    "type": "string"
                  },
                  "carrier": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "kwh_is_gross": {
                    "type": "boolean"
                  },
                  "hot_water_kwh": {
                    "type": [
                      "null",
                      "number"
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "vacancy_percent": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "order_number": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "open_points": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "required": [
          "field",
          "title",
          "customer_can_add"
        ],
        "properties": {
          "field": {
            "type": "string",
            "description": "what to send, as the tools name it"
          },
          "title": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "customer_can_add": {
            "type": "boolean",
            "description": "true if the customer can add it on our page after the confirmation email"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
update_order annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
1167 ms
95th percentile latency
1167 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1167 ms · metadata changed · 11 tool(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 energieausweis-express-mcp https://energieausweis-express.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 energieausweis-express-mcp --url https://energieausweis-express.de/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start energieausweis-express-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "energieausweis-express-mcp": {
      "type": "http",
      "url": "https://energieausweis-express.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 energieausweis-express-mcp https://energieausweis-express.de/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "energieausweis-express-mcp": {
      "url": "https://energieausweis-express.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": {
    "energieausweis-express-mcp": {
      "serverUrl": "https://energieausweis-express.de/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Energieausweis Express 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 Energieausweis Express 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