diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 83b02af..d921f38 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -19,6 +19,7 @@ const t = isDE ? { license: 'Lizenz', quickstart: 'Schnellstart', specification: 'Spezifikation', + configurator: 'Data Configurator', roadmap: 'Roadmap', team: 'Team', github: 'GitHub', @@ -31,6 +32,7 @@ const t = isDE ? { license: 'License', quickstart: 'Quickstart', specification: 'Specification', + configurator: 'Data Configurator', roadmap: 'Roadmap', team: 'Team', github: 'GitHub', @@ -51,6 +53,7 @@ const columns = [ links: [ { label: t.quickstart, href: prefix + '/quickstart/quickstart/' }, { label: t.specification, href: prefix + '/specification/overview/' }, + { label: t.configurator, href: prefix + '/configurator/', badge: 'Demo' }, ], }, { @@ -75,7 +78,7 @@ const columns = [ {link.external ? ( {link.label} ) : ( - {link.label} + {link.label}{link.badge && {link.badge}} )} ) )} @@ -159,6 +162,20 @@ const columns = [ .pencil-footer__col-list a:hover { color: var(--text-primary); } +/* Memo 127 follow-up: Demo badge next to the Data Configurator link */ +.pencil-footer__badge { + display: inline-block; + margin-left: 0.4rem; + padding: 1px 6px; + background: var(--sidebar-active-bg); + color: var(--accent); + border: 1px solid var(--accent); + border-radius: 4px; + font-size: 10px; + font-weight: 700; + letter-spacing: 0.04em; + vertical-align: middle; +} .pencil-footer__inner { max-width: 1100px; margin: 0 auto; diff --git a/src/components/Header.astro b/src/components/Header.astro index 020eeea..97141c3 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -18,16 +18,16 @@ const prefix = isDE ? '/de' : ''; // Roadmap and Team moved to Footer-Widget (PRD-012). // PRD-013 audit: DE-Mirror complete — navLinks branch on isDE; both locales // show 3 entries. EN: About/Docs/Blog. DE: Über/Docs/Blog. +// Memo 127 follow-up: the Data Configurator lives in the FOOTER (Resources) with a Demo +// badge, not in the top nav — keeps the header lean while it is still an early demo. const navLinks = isDE ? [ { text: 'Über', href: prefix + '/about/', match: '/about' }, { text: 'Docs', href: prefix + '/quickstart/what-is-flowmcp/', match: '/quickstart' }, { text: 'Blog', href: prefix + '/blog/', match: '/blog' }, - // { text: 'Configurator', href: prefix + '/configurator/', match: '/configurator' }, // Memo 121: demo-hidden, enable when public ] : [ { text: 'About', href: prefix + '/about/', match: '/about' }, { text: 'Docs', href: prefix + '/quickstart/what-is-flowmcp/', match: '/quickstart' }, { text: 'Blog', href: prefix + '/blog/', match: '/blog' }, - // { text: 'Configurator', href: prefix + '/configurator/', match: '/configurator' }, // Memo 121: demo-hidden, enable when public ]; --- diff --git a/src/data/configurator-payload.json b/src/data/configurator-payload.json index 2f8a1e7..2cfa435 100644 --- a/src/data/configurator-payload.json +++ b/src/data/configurator-payload.json @@ -1,7 +1,7 @@ { "meta": { "demo": true, - "note": "Demo payload for the FlowMCP Configurator. Namespaces/tools/counts/access/detVerified are GENERATED from the real v4 schemas + the deterministic grading island (scripts/build-configurator-payload.mjs). 'detVerified' = the deterministic test passes (HTTP 200 + non-empty data) — it is NOT a quality grade; LLM grading is still pending. UI marker: 'live-tested'.", + "note": "Demo of the FlowMCP Data Configurator. Sources, tools and counts are generated from the real FlowMCP v4 schemas (scripts/build-configurator-payload.mjs). Open Berlin data — free, nothing to buy. Export (download / copy) is coming soon.", "regionFocus": "Berlin", "source": "Memo 120/121 demo · flowmcp-schemas-private v4.0.0 · det-grading island projects/flowmcp/_grading" }, @@ -82,22 +82,9 @@ "luftdatenberlin" ] }, - { - "id": "german-mobility", - "label": "German Mobility", - "filters": { - "category": "mobility", - "region": "Germany" - }, - "recommended": [ - "transportrestdb", - "nextbike", - "autobahn" - ] - }, { "id": "berlin-culture", - "label": "Berlin Culture & Memory", + "label": "Culture & Memory", "filters": { "category": "culture", "region": "Berlin" @@ -109,16 +96,16 @@ ] }, { - "id": "open-data-germany", - "label": "Open Data Germany", + "id": "demokratie-bezirke", + "label": "Democracy & Districts", "filters": { - "region": "Germany", - "access": "tool-keyless" + "region": "Berlin", + "category": "admin" }, "recommended": [ - "nina", - "openplz", - "autobahn" + "oparl-mitte", + "oparl-neukoelln", + "berlinvergabe" ] }, { @@ -136,10 +123,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "Community GeoJSON (tifa365/berlin_club_history)", + "licenseToken": "Community GeoJSON", "detVerified": true, "status": "HAVE", "toolCount": 3, "desc": "Lost Berlin nightclubs — search by name, music and district.", + "provenance": { + "host": "raw.githubusercontent.com", + "root": "https://raw.githubusercontent.com", + "docs": "https://github.com/tifa365/berlin_club_history" + }, "tools": [ { "name": "listClubs", @@ -195,7 +188,50 @@ } ] } - ] + ], + "licenseAttribution": "tifa365/berlin_club_history" + }, + { + "namespace": "berlinevents", + "title": "Berlin Events & Assemblies", + "category": "culture", + "region": "Berlin", + "access": "tool-keyless", + "license": "DL-DE-BY-2.0 (berlin.de open data)", + "licenseToken": "DL-DE-BY-2.0", + "detVerified": true, + "status": "HAVE", + "toolCount": 3, + "desc": "Berlin street & folk festivals, Christmas markets, and officially registered assemblies/demos (police feed, daily).", + "provenance": { + "host": "www.berlin.de", + "root": "https://www.berlin.de", + "docs": "https://www.berlin.de/" + }, + "tools": [ + { + "name": "street_festivals", + "desc": "List all upcoming street- and folk-festivals in Berlin (Strassen- und Volksfeste) with district, date range, address and organizer from the Berlin.de open-data feed. Complementary to christmas_markets (seasonal markets). Keyless.", + "access": "tool-keyless", + "detVerified": true, + "params": [] + }, + { + "name": "christmas_markets", + "desc": "List all upcoming Christmas markets (Weihnachtsmaerkte) in Berlin with district, location, date range, organizer and opening hours from the Berlin.de open-data feed. Use street_festivals for year-round events. Keyless, seasonal coverage (Nov-Dec).", + "access": "tool-keyless", + "detVerified": true, + "params": [] + }, + { + "name": "police_assemblies", + "desc": "List all officially registered assemblies, demonstrations and rallies (Versammlungen / Aufzuege) in Berlin with date, time, topic, address and procession route from the Berlin police open-data feed. Useful for traffic planning and event-impact analysis. Keyless, updated daily.", + "access": "tool-keyless", + "detVerified": true, + "params": [] + } + ], + "licenseAttribution": "berlin.de open data" }, { "namespace": "berlinkriminalitaet", @@ -204,10 +240,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (Berlin Open Data)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 2, "desc": "Crime statistics per district and sub-region.", + "provenance": { + "host": "www.kriminalitaetsatlas.berlin.de", + "root": "https://www.kriminalitaetsatlas.berlin.de/K-Atlas", + "docs": "https://www.kriminalitaetsatlas.berlin.de/" + }, "tools": [ { "name": "getDistrictStatistics", @@ -223,7 +265,8 @@ "detVerified": true, "params": [] } - ] + ], + "licenseAttribution": "Berlin Open Data" }, { "namespace": "berlinmietspiegel", @@ -232,10 +275,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (gdi.berlin.de)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 2, "desc": "Residential location ratings from the Berlin rent index.", + "provenance": { + "host": "gdi.berlin.de", + "root": "https://gdi.berlin.de", + "docs": "https://daten.berlin.de/datensaetze/wohnlagen-nach-adressen-zum-berliner-mietspiegel-2024-wfs-eddbff85" + }, "tools": [ { "name": "getWohnlagen", @@ -277,7 +326,177 @@ } ] } - ] + ], + "licenseAttribution": "gdi.berlin.de" + }, + { + "namespace": "berlinsolar", + "title": "Berlin Solar Cadastre", + "category": "environment", + "region": "Berlin", + "access": "tool-keyless", + "license": "DL-DE-BY-2.0 (gdi.berlin.de Energieatlas)", + "licenseToken": "DL-DE-BY-2.0", + "detVerified": true, + "status": "HAVE", + "toolCount": 6, + "desc": "Berlin solar cadastre (Solarkataster) — PV installations, installed capacity and solar potential per district.", + "provenance": { + "host": "gdi.berlin.de", + "root": "https://gdi.berlin.de", + "docs": "https://daten.berlin.de/datensaetze/solaranlagen-photovoltaik-umweltatlas-wfs-dfb86f73" + }, + "tools": [ + { + "name": "getSolarByDistrict", + "desc": "Get PV installation summary per Berlin district (Bezirk). Returns number of installations, installed capacity in MWp, and city-wide totals. 12 districts total.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "COUNT", + "type": "number", + "required": false, + "note": "min 1 · default 12" + }, + { + "name": "CQL_FILTER", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getSolarByPostalCode", + "desc": "Get PV installation summary per postal code (PLZ). Returns number of installations, installed capacity in kWp, and city-wide totals. About 190 postal code areas.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "COUNT", + "type": "number", + "required": false, + "note": "min 1 · default 20" + }, + { + "name": "CQL_FILTER", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getLargePvInstallations", + "desc": "Get individual large PV installations (over 30 kWp) in Berlin. Returns address, installed capacity, number of modules, orientation, feed-in type, commissioning date, and coordinates. About 1900 installations.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "COUNT", + "type": "number", + "required": false, + "note": "min 1 · default 20" + }, + { + "name": "CQL_FILTER", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPublicPvInstallations", + "desc": "Get PV installations on public institution buildings in Berlin. Returns address, capacity, institution name, operator, contract type, green roof status, and commissioning year. About 1000 installations.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "COUNT", + "type": "number", + "required": false, + "note": "min 1 · default 20" + }, + { + "name": "CQL_FILTER", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getSolarPotentialByDistrict", + "desc": "Get theoretical PV potential per Berlin district. Returns total buildings, heritage building share, suitable roof area in million m2, and PV potential in MWp. 12 districts.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "COUNT", + "type": "number", + "required": false, + "note": "min 1 · default 12" + }, + { + "name": "CQL_FILTER", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPvCoverageByDistrict", + "desc": "Get PV expansion coverage rate per Berlin district. Compares installed capacity against theoretical potential and shows the percentage of untapped solar potential. 12 districts.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "COUNT", + "type": "number", + "required": false, + "note": "min 1 · default 12" + }, + { + "name": "CQL_FILTER", + "type": "string", + "required": false, + "note": "" + } + ] + } + ], + "licenseAttribution": "gdi.berlin.de Energieatlas" + }, + { + "namespace": "berlinvergabe", + "title": "Berlin Procurement Notices", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "DL-DE-BY-2.0 (berlin.de Vergabeplattform)", + "licenseToken": "DL-DE-BY-2.0", + "detVerified": true, + "status": "HAVE", + "toolCount": 1, + "desc": "Current city-wide public procurement notices (Vergabeplattform, RSS). No district filter — Berlin-wide.", + "provenance": { + "host": "www.berlin.de", + "root": "https://www.berlin.de", + "docs": "https://www.berlin.de/vergabeplattform/" + }, + "tools": [ + { + "name": "getProcurementNotices", + "desc": "Get current public procurement notices from the Berlin Vergabeplattform. Returns tender announcements including title, description, link, and publication date.", + "access": "tool-keyless", + "detVerified": true, + "params": [] + } + ], + "licenseAttribution": "berlin.de Vergabeplattform" }, { "namespace": "berlinwfs", @@ -286,10 +505,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (gdi.berlin.de / LAGeSo)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 11, "desc": "Berlin spatial layers — monuments, trees, fountains, graves, bathing water, events (WFS).", + "provenance": { + "host": "gdi.berlin.de", + "root": "https://gdi.berlin.de", + "docs": "https://gdi.berlin.de/" + }, "tools": [ { "name": "natural_monuments", @@ -743,7 +968,8 @@ } ] } - ] + ], + "licenseAttribution": "gdi.berlin.de / LAGeSo" }, { "namespace": "ckanberlin", @@ -752,10 +978,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (daten.berlin.de)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 5, "desc": "Discovery layer for the Berlin open-data portal — search datasets.", + "provenance": { + "host": "datenregister.berlin.de", + "root": "https://datenregister.berlin.de/api/3/action", + "docs": "https://datenregister.berlin.de/api/3/action/help_show" + }, "tools": [ { "name": "searchDatasets", @@ -833,151 +1065,188 @@ } ] } - ] + ], + "licenseAttribution": "daten.berlin.de" }, { - "namespace": "gedenktafelnberlin", - "title": "Berlin Memorial Plaques", - "category": "culture", + "namespace": "gdiberlin", + "title": "Berlin Geodata Catalog (GDI)", + "category": "economy", "region": "Berlin", "access": "tool-keyless", - "license": "Gedenktafeln in Berlin (Aktives Museum) — attribution", + "license": "DL-DE-BY-2.0 (gdi.berlin.de)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", - "toolCount": 2, - "desc": "~3,900 memorial plaques across Berlin — search by name and district.", + "toolCount": 3, + "desc": "Full-text search across 2,000+ official Berlin geodata records (GDI metadata catalog).", + "provenance": { + "host": "gdi.berlin.de", + "root": "https://gdi.berlin.de/geonetwork/srv/eng", + "docs": "https://gdi.berlin.de/geonetwork/srv/eng/catalog.search" + }, "tools": [ { - "name": "gedenktafelnSearch", - "desc": "Search Berlin memorial plaques by free text. Matches case-insensitively against name, dedication text, explanation, street and district. Returns up to \"limit\" plaques with corrected lat/lon coordinates.", + "name": "searchCatalog", + "desc": "Full-text search the GDI Berlin geodata catalog and return the GeoNetwork JSON index. Use any for the search term across title, abstract and keywords (omit it to browse the whole catalog). Paging is controlled with from and to (1-based, inclusive). The response carries a summary block with the total match count plus a metadata array; each record exposes title, abstract, type, geoBox and a geonet:info.uuid usable with getRecordByUuid.", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "query", + "name": "_content_type", "type": "string", "required": true, - "note": "min 2" + "note": "" }, { - "name": "limit", - "type": "number", - "required": false, - "note": "min 1 · max 100 · default 10" - } - ] - }, - { - "name": "gedenktafelnByDistrict", - "desc": "List Berlin memorial plaques located in a given district (Ortsteil), matched case-insensitively (substring). Returns up to \"limit\" plaques with corrected lat/lon coordinates.", - "access": "tool-keyless", - "detVerified": true, - "params": [ + "name": "fast", + "type": "string", + "required": true, + "note": "" + }, { - "name": "district", + "name": "any", "type": "string", "required": true, - "note": "min 2" + "note": "default" }, { - "name": "limit", + "name": "from", "type": "number", - "required": false, - "note": "min 1 · max 100 · default 10" + "required": true, + "note": "min 1 · default 1" + }, + { + "name": "to", + "type": "number", + "required": true, + "note": "min 1 · default 10" } ] - } - ] - }, - { - "namespace": "giessdenkiez", - "title": "Gieß den Kiez (Tree Watering)", - "category": "environment", - "region": "Berlin", - "access": "tool-keyless", - "license": "ODbL / CityLAB Berlin (public anon API)", - "detVerified": true, - "status": "HAVE", - "toolCount": 5, - "desc": "Berlin street trees, adoptions and waterings (CityLAB).", - "tools": [ + }, { - "name": "getTrees", - "desc": "List Berlin street trees with optional filters. Filter by district (bezirk) or by a coordinate bounding box (latMin/latMax/lngMin/lngMax). Returns species, planting year, location and rainfall sum (radolan_sum). Use the PostgREST select to keep payloads small.", + "name": "listByType", + "desc": "List GDI Berlin catalog records filtered by resource type. The type parameter selects the GeoNetwork resource class: \"dataset\" for geodata datasets, \"service\" for OGC services, \"service-download\" for download (WFS/Atom) services and \"service-view\" for view (WMS) services. Paging is controlled with from and to (1-based, inclusive); the response uses the same GeoNetwork JSON index structure as searchCatalog.", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "select", + "name": "_content_type", "type": "string", - "required": false, + "required": true, "note": "" }, { - "name": "bezirk", + "name": "fast", "type": "string", - "required": false, + "required": true, "note": "" }, { - "name": "lat", - "type": "string", - "required": false, + "name": "type", + "type": "enum", + "required": true, "note": "" }, { - "name": "lng", - "type": "string", - "required": false, - "note": "" + "name": "from", + "type": "number", + "required": true, + "note": "min 1 · default 1" }, { - "name": "limit", + "name": "to", "type": "number", - "required": false, - "note": "default 20 · max 1000" + "required": true, + "note": "min 1 · default 10" } ] }, { - "name": "getTreeById", - "desc": "Get the full record of a single tree by its cadastre id (e.g. 00008100:0037fcd1), including species, dimensions, owner, adoption/watering flags and the 365-day rainfall array (radolan_days).", + "name": "getRecordByUuid", + "desc": "Fetch a single GDI Berlin catalog record by its GeoNetwork uuid (the geonet:info.uuid value returned by searchCatalog or listByType). Returns the same GeoNetwork JSON index structure with a single metadata entry and a summary count of 1 when the uuid exists.", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "id", + "name": "_content_type", + "type": "string", + "required": true, + "note": "" + }, + { + "name": "fast", + "type": "string", + "required": true, + "note": "" + }, + { + "name": "uuid", "type": "string", "required": true, "note": "" } ] - }, - { - "name": "getAdoptedTrees", - "desc": "Return the aggregated adoption and watering status of all tracked trees. Each row gives a tree_id with adopted (1 if adopted) and watered (1 if recently watered) flags. Useful to find which trees citizens have taken care of.", - "access": "tool-keyless", - "detVerified": true, - "params": [] - }, + } + ], + "licenseAttribution": "gdi.berlin.de" + }, + { + "namespace": "gedenktafelnberlin", + "title": "Berlin Memorial Plaques", + "category": "culture", + "region": "Berlin", + "access": "tool-keyless", + "license": "Gedenktafeln in Berlin (Aktives Museum) — attribution", + "licenseToken": "Gedenktafeln in Berlin (Aktives Museum) — attribution", + "detVerified": true, + "status": "HAVE", + "toolCount": 2, + "desc": "~3,900 memorial plaques across Berlin — search by name and district.", + "provenance": { + "host": "www.gedenktafeln-in-berlin.de", + "root": "https://www.gedenktafeln-in-berlin.de", + "docs": "https://www.gedenktafeln-in-berlin.de/", + "tos": "no-tos-found" + }, + "tools": [ { - "name": "getWateredToday", - "desc": "List the trees that received water today, each with the total amount (in litres) poured. Reflects the live citizen watering activity in Berlin.", + "name": "gedenktafelnSearch", + "desc": "Search Berlin memorial plaques by free text. Matches case-insensitively against name, dedication text, explanation, street and district. Returns up to \"limit\" plaques with corrected lat/lon coordinates.", "access": "tool-keyless", "detVerified": true, - "params": [] + "params": [ + { + "name": "query", + "type": "string", + "required": true, + "note": "min 2" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100 · default 10" + } + ] }, { - "name": "getWateringsForTree", - "desc": "Return the full watering log of a single tree: every watering event with amount (litres), ISO-8601 timestamp and the username who watered it. Pass the tree cadastre id as t_id.", + "name": "gedenktafelnByDistrict", + "desc": "List Berlin memorial plaques located in a given district (Ortsteil), matched case-insensitively (substring). Returns up to \"limit\" plaques with corrected lat/lon coordinates.", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "t_id", + "name": "district", "type": "string", "required": true, - "note": "" + "note": "min 2" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100 · default 10" } ] } @@ -990,10 +1259,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "IHK Berlin open data — attribution", + "licenseToken": "IHK Berlin open data — attribution", "detVerified": true, "status": "HAVE", "toolCount": 3, "desc": "363k+ registered businesses — searchable.", + "provenance": { + "host": "media.githubusercontent.com", + "root": "https://media.githubusercontent.com", + "docs": "https://github.com/IHKBerlin/IHKBerlin_Gewerbedaten" + }, "tools": [ { "name": "searchBusinesses", @@ -1062,10 +1337,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "infraVelo open data — attribution", + "licenseToken": "infraVelo open data — attribution", "detVerified": true, "status": "HAVE", "toolCount": 2, "desc": "Berlin cycling-infrastructure projects by district.", + "provenance": { + "host": "www.infravelo.de", + "root": "https://www.infravelo.de/api/v1", + "docs": "https://www.infravelo.de/api/" + }, "tools": [ { "name": "getAllProjects", @@ -1097,10 +1378,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "CC-BY-4.0 (kulturdaten.berlin)", + "licenseToken": "CC-BY-4.0", "detVerified": true, "status": "HAVE", "toolCount": 7, "desc": "~13k cultural events, attractions and venues across Berlin.", + "provenance": { + "host": "api-v2.kulturdaten.berlin", + "root": "https://api-v2.kulturdaten.berlin/api", + "docs": "https://kulturdaten.readme.io/reference/introduction" + }, "tools": [ { "name": "listAttractions", @@ -1224,7 +1511,8 @@ } ] } - ] + ], + "licenseAttribution": "kulturdaten.berlin" }, { "namespace": "kultureinrichtungenberlin", @@ -1233,10 +1521,17 @@ "region": "Berlin", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (Sen Kultur Berlin)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 3, "desc": "Publicly funded cultural institutions in Berlin — list, filter, search.", + "provenance": { + "host": "www.berlin.de", + "root": "https://www.berlin.de", + "docs": "https://www.berlin.de/sen/kultur/kulturpolitik/foerderung/", + "tos": "no-tos-found" + }, "tools": [ { "name": "listInstitutions", @@ -1280,7 +1575,8 @@ } ] } - ] + ], + "licenseAttribution": "Sen Kultur Berlin" }, { "namespace": "luftdatenberlin", @@ -1289,10 +1585,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (luftdaten.berlin)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 6, "desc": "Berlin air-quality measuring network — stations and components.", + "provenance": { + "host": "luftdaten.berlin.de", + "root": "https://luftdaten.berlin.de/api", + "docs": "https://luftdaten.berlin.de" + }, "tools": [ { "name": "listStations", @@ -1350,7 +1652,8 @@ "detVerified": true, "params": [] } - ] + ], + "licenseAttribution": "luftdaten.berlin" }, { "namespace": "museumdigitalberlin", @@ -1359,10 +1662,17 @@ "region": "Berlin", "access": "tool-keyless", "license": "museum-digital (per-object licenses; imprint)", + "licenseToken": "museum-digital", "detVerified": true, "status": "HAVE", "toolCount": 6, "desc": "Berlin museum objects, institutions and collections (JSON API).", + "provenance": { + "host": "berlin.museum-digital.de", + "root": "https://berlin.museum-digital.de", + "docs": "https://berlin.museum-digital.de/", + "tos": "https://berlin.museum-digital.de/imprint" + }, "tools": [ { "name": "listObjects", @@ -1441,166 +1751,4179 @@ } ] } - ] + ], + "licenseAttribution": "per-object licenses; imprint" }, { - "namespace": "overpassberlin", - "title": "OpenStreetMap Berlin POIs", - "category": "geo", + "namespace": "oparl-charlottenburg-wilmersdorf", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Charlottenburg-Wilmersdorf" + }, + "title": "Charlottenburg-Wilmersdorf District Council", + "category": "admin", "region": "Berlin", "access": "tool-keyless", - "license": "ODbL (OpenStreetMap)", - "detVerified": true, + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, "status": "HAVE", - "toolCount": 3, - "desc": "OSM points of interest in Berlin by category/tag (Overpass).", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Charlottenburg-Wilmersdorf, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-charlottenburg-wilmersdorf.de", + "root": "https://www.sitzungsdienst-charlottenburg-wilmersdorf.de/oi/oparl/1.0" + }, + "family": "ALLRIS", "tools": [ { - "name": "findPoisByCategory", - "desc": "Find OSM points of interest in Berlin by a human-readable category preset. The bounding box defaults to the full Berlin extent and is given as GeoJSON order [minLon,minLat,maxLon,maxLat]; it is clamped to Berlin so queries cannot leave the city. Returns OSM elements with coordinates and tags.", + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "category", + "name": "name", "type": "enum", "required": true, "note": "" - }, + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ { - "name": "minLon", - "type": "number", - "required": false, + "name": "name", + "type": "enum", + "required": true, "note": "" }, { - "name": "minLat", - "type": "number", + "name": "bodyId", + "type": "string", "required": false, "note": "" }, { - "name": "maxLon", + "name": "page", "type": "number", "required": false, - "note": "" + "note": "min 1" }, { - "name": "maxLat", + "name": "limit", "type": "number", "required": false, - "note": "" + "note": "min 1 · max 100" }, { - "name": "limit", - "type": "number", + "name": "reverse", + "type": "boolean", "required": false, - "note": "default 50 · max 1000" - } - ] - }, - { - "name": "findPoisByTag", - "desc": "Find OSM points of interest in Berlin by an arbitrary OSM tag key/value (for example amenity=marketplace or artwork_type=statue). The bounding box is GeoJSON order [minLon,minLat,maxLon,maxLat], defaults to and is clamped to the Berlin extent. Returns OSM elements with coordinates and tags.", - "access": "tool-keyless", - "detVerified": true, - "params": [ - { - "name": "tagKey", - "type": "string", - "required": true, - "note": "min 1" + "note": "default false" }, { - "name": "tagValue", + "name": "created_since", "type": "string", - "required": true, - "note": "min 1" - }, - { - "name": "minLon", - "type": "number", "required": false, "note": "" }, { - "name": "minLat", - "type": "number", + "name": "created_until", + "type": "string", "required": false, "note": "" }, { - "name": "maxLon", - "type": "number", + "name": "modified_since", + "type": "string", "required": false, "note": "" }, { - "name": "maxLat", - "type": "number", + "name": "modified_until", + "type": "string", "required": false, "note": "" - }, + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ { - "name": "includeAreas", + "name": "name", "type": "enum", "required": true, - "note": "default nodes-only" + "note": "" }, { - "name": "limit", - "type": "number", + "name": "bodyId", + "type": "string", "required": false, - "note": "default 50 · max 1000" + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" } ] }, { - "name": "countPoisByTag", - "desc": "Count OSM elements matching an OSM tag key/value inside a Berlin bounding box, without returning the full element list. Cheap way to size a category before fetching it. Bounding box is GeoJSON order [minLon,minLat,maxLon,maxLat], defaults to and clamped to the Berlin extent.", + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "tagKey", - "type": "string", + "name": "name", + "type": "enum", "required": true, - "note": "min 1" + "note": "" }, { - "name": "tagValue", + "name": "bodyId", "type": "string", - "required": true, + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, "note": "min 1" }, { - "name": "minLon", + "name": "limit", "type": "number", "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, "note": "" }, { - "name": "minLat", - "type": "number", + "name": "created_until", + "type": "string", "required": false, "note": "" }, { - "name": "maxLon", - "type": "number", + "name": "modified_since", + "type": "string", "required": false, "note": "" }, { - "name": "maxLat", - "type": "number", + "name": "modified_until", + "type": "string", "required": false, "note": "" } ] - } - ] - }, + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-friedrichshain-kreuzberg", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Friedrichshain-Kreuzberg" + }, + "title": "Friedrichshain-Kreuzberg District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Friedrichshain-Kreuzberg, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-friedrichshain-kreuzberg.de", + "root": "https://www.sitzungsdienst-friedrichshain-kreuzberg.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-lichtenberg", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Lichtenberg" + }, + "title": "Lichtenberg District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Lichtenberg, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-lichtenberg.de", + "root": "https://www.sitzungsdienst-lichtenberg.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-marzahn-hellersdorf", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Marzahn-Hellersdorf" + }, + "title": "Marzahn-Hellersdorf District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Marzahn-Hellersdorf, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-marzahn-hellersdorf.de", + "root": "https://www.sitzungsdienst-marzahn-hellersdorf.de/oi/oparl/1.1" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-mitte", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Mitte" + }, + "title": "Mitte District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Mitte, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-mitte.de", + "root": "https://www.sitzungsdienst-mitte.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-neukoelln", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Neukölln" + }, + "title": "Neukölln District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Neukölln, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-neukoelln.de", + "root": "https://www.sitzungsdienst-neukoelln.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-pankow", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Pankow" + }, + "title": "Pankow District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Pankow, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-pankow.de", + "root": "https://www.sitzungsdienst-pankow.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-reinickendorf", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Reinickendorf" + }, + "title": "Reinickendorf District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Reinickendorf, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-reinickendorf.de", + "root": "https://www.sitzungsdienst-reinickendorf.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-steglitz-zehlendorf", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Steglitz-Zehlendorf" + }, + "title": "Steglitz-Zehlendorf District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Steglitz-Zehlendorf, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-steglitz-zehlendorf.de", + "root": "https://www.sitzungsdienst-steglitz-zehlendorf.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-tempelhof-schoeneberg", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Tempelhof-Schöneberg" + }, + "title": "Tempelhof-Schöneberg District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Tempelhof-Schöneberg, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-tempelhof-schoeneberg.de", + "root": "https://www.sitzungsdienst-tempelhof-schoeneberg.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "oparl-treptow-koepenick", + "wireNamespace": "oparl", + "boundParams": { + "name": "Berlin Treptow-Köpenick" + }, + "title": "Treptow-Köpenick District Council", + "category": "admin", + "region": "Berlin", + "access": "tool-keyless", + "license": "OParl (per-council licenses)", + "licenseToken": "OParl", + "detVerified": false, + "status": "HAVE", + "toolCount": 8, + "desc": "Council information — meetings, papers, members and agenda items — for Berlin Treptow-Köpenick, via OParl (ALLRIS). Pick your district.", + "provenance": { + "host": "www.sitzungsdienst-treptow-koepenick.de", + "root": "https://www.sitzungsdienst-treptow-koepenick.de/oi/oparl/1.0" + }, + "family": "ALLRIS", + "tools": [ + { + "name": "getBodies", + "desc": "List the bodies (Koerperschaften) of a German council. Pick the council via the name enum; the vendor path style is resolved internally.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + } + ] + }, + { + "name": "getMeetings", + "desc": "List meetings (Sitzungen) of a council body, paginated. Optional bodyId (default 1), page, created/modified date filters. limit and reverse are applied client-side. The newest meetings are on the last page: read pagination.totalPages, then call with that page and reverse=true (where the server reports totals).", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getMeeting", + "desc": "Get a single meeting (Sitzung) by id, including its agenda items. Requires the council name and the meeting id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPapers", + "desc": "List papers (Drucksachen) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getPaper", + "desc": "Get a single paper (Drucksache) by id, including reference, date and linked files. Requires the council name and the paper id.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getPersons", + "desc": "List persons (members) of a council body, paginated. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getOrganizations", + "desc": "List organizations (Gremien, Fraktionen, Dienststellen) of a council body, paginated. Filter the returned data by organizationType. Optional bodyId (default 1), page, date filters. limit and reverse client-side.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "page", + "type": "number", + "required": false, + "note": "min 1" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "min 1 · max 100" + }, + { + "name": "reverse", + "type": "boolean", + "required": false, + "note": "default false" + }, + { + "name": "created_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "created_until", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_since", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "modified_until", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "getAgendaItem", + "desc": "Get a single agenda item (Tagesordnungspunkt) by id, including its consultation and linked paper. Requires the council name and the agenda item id. Only available on OParl 1.1 endpoints (e.g. SD.NET RIM); not supported on ALLRIS 1.0.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "name", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "bodyId", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ] + }, + { + "namespace": "overpassberlin", + "title": "OpenStreetMap Berlin POIs", + "category": "geo", + "region": "Berlin", + "access": "tool-keyless", + "license": "ODbL (OpenStreetMap)", + "licenseToken": "ODbL", + "detVerified": true, + "status": "HAVE", + "toolCount": 3, + "desc": "OSM points of interest in Berlin by category/tag (Overpass).", + "provenance": { + "host": "overpass-api.de", + "root": "https://overpass-api.de/api/interpreter", + "docs": "https://wiki.openstreetmap.org/wiki/Overpass_API", + "tos": "https://wiki.openstreetmap.org/wiki/Overpass_API#Introduction" + }, + "tools": [ + { + "name": "findPoisByCategory", + "desc": "Find OSM points of interest in Berlin by a human-readable category preset. The bounding box defaults to the full Berlin extent and is given as GeoJSON order [minLon,minLat,maxLon,maxLat]; it is clamped to Berlin so queries cannot leave the city. Returns OSM elements with coordinates and tags.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "category", + "type": "enum", + "required": true, + "note": "" + }, + { + "name": "minLon", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "minLat", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "maxLon", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "maxLat", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "default 50 · max 1000" + } + ] + }, + { + "name": "findPoisByTag", + "desc": "Find OSM points of interest in Berlin by an arbitrary OSM tag key/value (for example amenity=marketplace or artwork_type=statue). The bounding box is GeoJSON order [minLon,minLat,maxLon,maxLat], defaults to and is clamped to the Berlin extent. Returns OSM elements with coordinates and tags.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "tagKey", + "type": "string", + "required": true, + "note": "min 1" + }, + { + "name": "tagValue", + "type": "string", + "required": true, + "note": "min 1" + }, + { + "name": "minLon", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "minLat", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "maxLon", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "maxLat", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "includeAreas", + "type": "enum", + "required": true, + "note": "default nodes-only" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "default 50 · max 1000" + } + ] + }, + { + "name": "countPoisByTag", + "desc": "Count OSM elements matching an OSM tag key/value inside a Berlin bounding box, without returning the full element list. Cheap way to size a category before fetching it. Bounding box is GeoJSON order [minLon,minLat,maxLon,maxLat], defaults to and clamped to the Berlin extent.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "tagKey", + "type": "string", + "required": true, + "note": "min 1" + }, + { + "name": "tagValue", + "type": "string", + "required": true, + "note": "min 1" + }, + { + "name": "minLon", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "minLat", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "maxLon", + "type": "number", + "required": false, + "note": "" + }, + { + "name": "maxLat", + "type": "number", + "required": false, + "note": "" + } + ] + } + ], + "licenseAttribution": "OpenStreetMap" + }, { "namespace": "simplesearchberlin", "title": "Berlin SimpleSearch", @@ -1608,10 +5931,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (berlin.de)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 2, "desc": "Cross-portal search across berlin.de services.", + "provenance": { + "host": "www.berlin.de", + "root": "https://www.berlin.de", + "docs": "https://berlinonline.github.io/open-data-handbuch/simplesearch-api/" + }, "tools": [ { "name": "searchList", @@ -1665,7 +5994,8 @@ } ] } - ] + ], + "licenseAttribution": "berlin.de" }, { "namespace": "stolpersteineberl", @@ -1674,10 +6004,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "CC-BY (stolpersteine-berlin.de)", + "licenseToken": "CC-BY", "detVerified": true, "status": "HAVE", "toolCount": 4, "desc": "Memorial stones for victims of National Socialism — searchable by location.", + "provenance": { + "host": "www.stolpersteine-berlin.de", + "root": "https://www.stolpersteine-berlin.de", + "docs": "https://www.stolpersteine-berlin.de/" + }, "tools": [ { "name": "getAllStones", @@ -1771,7 +6107,8 @@ } ] } - ] + ], + "licenseAttribution": "stolpersteine-berlin.de" }, { "namespace": "transportrestvbb", @@ -1780,10 +6117,16 @@ "region": "Berlin", "access": "tool-keyless", "license": "ToS: transport.rest (open, attribution)", + "licenseToken": "ToS: transport.rest", "detVerified": true, "status": "HAVE", "toolCount": 7, "desc": "Berlin & Brandenburg public transit (VBB) — stops, departures, journeys.", + "provenance": { + "host": "v6.vbb.transport.rest", + "root": "https://v6.vbb.transport.rest", + "docs": "https://v6.vbb.transport.rest/" + }, "tools": [ { "name": "searchLocations", @@ -1908,90 +6251,282 @@ "note": "" }, { - "name": "results", + "name": "results", + "type": "number", + "required": false, + "note": "default 50 · max 200" + }, + { + "name": "duration", + "type": "number", + "required": false, + "note": "default 30" + } + ] + }, + { + "name": "getReachableFrom", + "desc": "Find stops reachable from a given location within a travel time limit. Requires address, latitude, and longitude. Returns stops grouped by travel duration.. Use searchLocations first to find valid IDs", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "address", + "type": "string", + "required": true, + "note": "" + }, + { + "name": "latitude", + "type": "number", + "required": true, + "note": "" + }, + { + "name": "longitude", + "type": "number", + "required": true, + "note": "" + }, + { + "name": "maxDuration", + "type": "number", + "required": false, + "note": "default 20" + }, + { + "name": "maxTransfers", + "type": "number", + "required": false, + "note": "default 3" + } + ] + }, + { + "name": "planJourney", + "desc": "Plan a journey between two VBB stops/stations. Returns journey options with legs, transfers, duration, and real-time delay information. Use stop IDs from searchLocations.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "from", + "type": "string", + "required": true, + "note": "" + }, + { + "name": "to", + "type": "string", + "required": true, + "note": "" + }, + { + "name": "results", + "type": "number", + "required": false, + "note": "default 3 · min 1 · max 10" + }, + { + "name": "transfers", + "type": "number", + "required": false, + "note": "" + } + ] + } + ], + "licenseAttribution": "open, attribution" + }, + { + "namespace": "transportrestvbbext", + "title": "transport.rest VBB Extended", + "category": "mobility", + "region": "Berlin", + "access": "tool-keyless", + "license": "ToS: transport.rest (open, attribution)", + "licenseToken": "ToS: transport.rest", + "detVerified": true, + "status": "HAVE", + "toolCount": 7, + "desc": "Extended Berlin & Brandenburg transit — nearby stops, trip search, lines, route shapes and station autocomplete.", + "provenance": { + "host": "v6.vbb.transport.rest", + "root": "https://v6.vbb.transport.rest", + "docs": "https://v6.vbb.transport.rest/" + }, + "tools": [ + { + "name": "getNearbyLocations", + "desc": "Find stops and stations near geographic coordinates. Returns nearby locations sorted by walking distance in meters.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "latitude", + "type": "number", + "required": true, + "note": "" + }, + { + "name": "longitude", + "type": "number", + "required": true, + "note": "" + }, + { + "name": "results", + "type": "number", + "required": false, + "note": "default 8" + }, + { + "name": "distance", + "type": "number", + "required": false, + "note": "" + } + ] + }, + { + "name": "getTrip", + "desc": "Get detailed trip information including all stopovers, times, delays, and current position. Use tripId from departures or journey results.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "id", + "type": "string", + "required": true, + "note": "" + }, + { + "name": "stopovers", + "type": "boolean", + "required": false, + "note": "default true" + } + ] + }, + { + "name": "searchTrips", + "desc": "Search for currently running trips by line name, operator, or stop. Returns active vehicles with real-time positions and stopovers. VBB-exclusive endpoint.. Use IDs from results in getTrip", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "query", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "lineName", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "onlyCurrentlyRunning", + "type": "boolean", + "required": false, + "note": "default true" + }, + { + "name": "currentlyStoppingAt", + "type": "string", + "required": false, + "note": "" + } + ] + }, + { + "name": "searchStations", + "desc": "Autocomplete VBB station names using vbb-stations dataset. Returns richer data than /locations including address and facilities.", + "access": "tool-keyless", + "detVerified": true, + "params": [ + { + "name": "query", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "limit", "type": "number", "required": false, - "note": "default 50 · max 200" + "note": "default 3" }, { - "name": "duration", - "type": "number", + "name": "fuzzy", + "type": "boolean", "required": false, - "note": "default 30" + "note": "default false" + }, + { + "name": "completion", + "type": "boolean", + "required": false, + "note": "default true" } ] }, { - "name": "getReachableFrom", - "desc": "Find stops reachable from a given location within a travel time limit. Requires address, latitude, and longitude. Returns stops grouped by travel duration.. Use searchLocations first to find valid IDs", + "name": "getLines", + "desc": "Search and filter VBB transit lines by name, operator, or transport mode. Returns line details with route variants.. Use IDs from results in getLine", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "address", + "name": "name", "type": "string", - "required": true, - "note": "" - }, - { - "name": "latitude", - "type": "number", - "required": true, - "note": "" - }, - { - "name": "longitude", - "type": "number", - "required": true, + "required": false, "note": "" }, { - "name": "maxDuration", - "type": "number", + "name": "operator", + "type": "string", "required": false, - "note": "default 20" + "note": "" }, { - "name": "maxTransfers", - "type": "number", + "name": "mode", + "type": "string", "required": false, - "note": "default 3" + "note": "" } ] }, { - "name": "planJourney", - "desc": "Plan a journey between two VBB stops/stations. Returns journey options with legs, transfers, duration, and real-time delay information. Use stop IDs from searchLocations.", + "name": "getLine", + "desc": "Get detailed information about a specific transit line including all route variants with stop sequences.. Use searchTrips first to find valid IDs", "access": "tool-keyless", "detVerified": true, "params": [ { - "name": "from", + "name": "id", "type": "string", "required": true, "note": "" - }, + } + ] + }, + { + "name": "getShape", + "desc": "Get GeoJSON geographic shape data for a route. Use shape IDs from trip or line data for route visualization on maps.", + "access": "tool-keyless", + "detVerified": true, + "params": [ { - "name": "to", + "name": "id", "type": "string", "required": true, "note": "" - }, - { - "name": "results", - "type": "number", - "required": false, - "note": "default 3 · min 1 · max 10" - }, - { - "name": "transfers", - "type": "number", - "required": false, - "note": "" } ] } - ] + ], + "licenseAttribution": "open, attribution" }, { "namespace": "autobahn", @@ -2000,10 +6535,16 @@ "region": "Germany", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (Autobahn GmbH)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 6, "desc": "Roadworks, closures and traffic on the German Autobahn.", + "provenance": { + "host": "verkehr.autobahn.de", + "root": "https://verkehr.autobahn.de/o/autobahn", + "docs": "https://autobahn.api.bund.dev/" + }, "tools": [ { "name": "listRoads", @@ -2082,7 +6623,8 @@ } ] } - ] + ], + "licenseAttribution": "Autobahn GmbH" }, { "namespace": "destatis", @@ -2091,10 +6633,16 @@ "region": "Germany", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (DESTATIS)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": false, "status": "HAVE", "toolCount": 9, "desc": "Federal statistics database — tables and indicators.", + "provenance": { + "host": "www-genesis.destatis.de", + "root": "https://www-genesis.destatis.de/genesisWS/rest/2020", + "docs": "https://destatis.api.bund.dev/" + }, "tools": [ { "name": "search", @@ -2312,6 +6860,7 @@ ] } ], + "licenseAttribution": "DESTATIS", "keys": [ "STATISTISCHES_BUNDESAMT" ] @@ -2323,10 +6872,16 @@ "region": "Germany", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (Bundes-Klinik-Atlas)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 14, "desc": "All German hospitals — searchable, with proximity.", + "provenance": { + "host": "bundes-klinik-atlas.de", + "root": "https://bundes-klinik-atlas.de/fileadmin/json", + "docs": "https://bundes-klinik-atlas.de/" + }, "tools": [ { "name": "getAllHospitals", @@ -2612,7 +7167,8 @@ "detVerified": true, "params": [] } - ] + ], + "licenseAttribution": "Bundes-Klinik-Atlas" }, { "namespace": "nextbike", @@ -2621,10 +7177,16 @@ "region": "Germany", "access": "tool-keyless", "license": "GBFS (nextbike) — attribution", + "licenseToken": "GBFS (nextbike) — attribution", "detVerified": true, "status": "HAVE", "toolCount": 2, "desc": "Bike-sharing networks across 50+ German cities (GBFS).", + "provenance": { + "host": "api.nextbike.net", + "root": "https://api.nextbike.net/maps", + "docs": "https://github.com/ubahnverleih/WoBike/blob/master/Nextbike.md" + }, "tools": [ { "name": "getStationsAndBikes", @@ -2669,10 +7231,16 @@ "region": "Germany", "access": "tool-keyless", "license": "DL-DE-BY-2.0 (BBK)", + "licenseToken": "DL-DE-BY-2.0", "detVerified": true, "status": "HAVE", "toolCount": 9, "desc": "Official hazard and weather warnings (BBK).", + "provenance": { + "host": "warnung.bund.de", + "root": "https://warnung.bund.de", + "docs": "https://nina.api.bund.dev/" + }, "tools": [ { "name": "getDashboard", @@ -2758,7 +7326,8 @@ } ] } - ] + ], + "licenseAttribution": "BBK" }, { "namespace": "oparl", @@ -2767,10 +7336,16 @@ "region": "Germany", "access": "tool-keyless", "license": "OParl (per-council licenses)", + "licenseToken": "OParl", "detVerified": true, "status": "HAVE", "toolCount": 8, "desc": "Council information systems for German councils.", + "provenance": { + "host": "dev.oparl.org", + "root": "https://dev.oparl.org", + "docs": "https://dev.oparl.org/spezifikation" + }, "tools": [ { "name": "getBodies", @@ -3112,7 +7687,8 @@ } ] } - ] + ], + "licenseAttribution": "per-council licenses" }, { "namespace": "openplz", @@ -3121,10 +7697,16 @@ "region": "Germany", "access": "tool-keyless", "license": "ODbL (OpenPLZ)", + "licenseToken": "ODbL", "detVerified": true, "status": "HAVE", "toolCount": 8, "desc": "Postal codes and streets for DE / AT / CH.", + "provenance": { + "host": "openplzapi.org", + "root": "https://openplzapi.org", + "docs": "https://openplzapi.org/swagger/index.html" + }, "tools": [ { "name": "getGermanFederalStates", @@ -3307,7 +7889,8 @@ } ] } - ] + ], + "licenseAttribution": "OpenPLZ" }, { "namespace": "transportrestdb", @@ -3316,10 +7899,16 @@ "region": "Germany", "access": "tool-keyless", "license": "ToS: transport.rest (open, attribution)", + "licenseToken": "ToS: transport.rest", "detVerified": true, "status": "HAVE", "toolCount": 8, "desc": "Nationwide DB rail — stations, departures, journeys.", + "provenance": { + "host": "v6.db.transport.rest", + "root": "https://v6.db.transport.rest", + "docs": "https://v6.db.transport.rest/" + }, "tools": [ { "name": "searchLocations", @@ -3547,7 +8136,8 @@ } ] } - ] + ], + "licenseAttribution": "open, attribution" }, { "namespace": "wikidata", @@ -3556,10 +8146,16 @@ "region": "global", "access": "tool-keyless", "license": "CC0 (Wikidata)", + "licenseToken": "CC0", "detVerified": true, "status": "HAVE", "toolCount": 6, "desc": "Structured knowledge graph via SPARQL.", + "provenance": { + "host": "query.wikidata.org", + "root": "https://query.wikidata.org", + "docs": "https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service" + }, "tools": [ { "name": "countriesByPopulation", @@ -3663,6 +8259,111 @@ } ] } + ], + "licenseAttribution": "Wikidata" + }, + { + "namespace": "giessdenkiez", + "title": "Gieß den Kiez (Tree Watering)", + "category": "environment", + "region": "Berlin", + "access": "tool-key", + "license": "ODbL / CityLAB Berlin (public anon API)", + "licenseToken": "ODbL / CityLAB Berlin", + "detVerified": true, + "status": "HAVE", + "toolCount": 5, + "desc": "Berlin street trees, adoptions and waterings (CityLAB).", + "provenance": { + "host": "ieokxbqvqedpcyvwmrsb.supabase.co", + "root": "https://ieokxbqvqedpcyvwmrsb.supabase.co/rest/v1", + "docs": "https://www.giessdenkiez.de" + }, + "tools": [ + { + "name": "getTrees", + "desc": "List Berlin street trees with optional filters. Filter by district (bezirk) or by a coordinate bounding box (latMin/latMax/lngMin/lngMax). Returns species, planting year, location and rainfall sum (radolan_sum). Use the PostgREST select to keep payloads small.", + "access": "tool-key", + "detVerified": true, + "params": [ + { + "name": "select", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "bezirk", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "lat", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "lng", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "default 20 · max 1000" + } + ] + }, + { + "name": "getTreeById", + "desc": "Get the full record of a single tree by its cadastre id (e.g. 00008100:0037fcd1), including species, dimensions, owner, adoption/watering flags and the 365-day rainfall array (radolan_days).", + "access": "tool-key", + "detVerified": true, + "params": [ + { + "name": "id", + "type": "string", + "required": true, + "note": "" + } + ] + }, + { + "name": "getAdoptedTrees", + "desc": "Return the aggregated adoption and watering status of all tracked trees. Each row gives a tree_id with adopted (1 if adopted) and watered (1 if recently watered) flags. Useful to find which trees citizens have taken care of.", + "access": "tool-key", + "detVerified": true, + "params": [] + }, + { + "name": "getWateredToday", + "desc": "List the trees that received water today, each with the total amount (in litres) poured. Reflects the live citizen watering activity in Berlin.", + "access": "tool-key", + "detVerified": true, + "params": [] + }, + { + "name": "getWateringsForTree", + "desc": "Return the full watering log of a single tree: every watering event with amount (litres), ISO-8601 timestamp and the username who watered it. Pass the tree cadastre id as t_id.", + "access": "tool-key", + "detVerified": true, + "params": [ + { + "name": "t_id", + "type": "string", + "required": true, + "note": "" + } + ] + } + ], + "licenseAttribution": "public anon API", + "keys": [ + "GIESSDENKIEZ_PUBLIC_ANON_KEY" ] }, { @@ -3672,10 +8373,16 @@ "region": "Germany", "access": "tool-key", "license": "DB API Marketplace ToS (key)", + "licenseToken": "DB API Marketplace ToS", "detVerified": false, "status": "HAVE", "toolCount": 5, "desc": "Deutsche Bahn shared-mobility (GBFS) — needs a DB developer key.", + "provenance": { + "host": "apis.deutschebahn.com", + "root": "https://apis.deutschebahn.com/db-api-marketplace/apis/shared-mobility-gbfs/v2/de", + "docs": "https://developers.deutschebahn.com/db-api-marketplace/apis/product/shared-mobility-gbfs" + }, "tools": [ { "name": "getGbfsDiscovery", @@ -3713,6 +8420,7 @@ "params": [] } ], + "licenseAttribution": "key", "keys": [ "DB_CLIENT_ID", "DB_API_KEY" @@ -3725,10 +8433,16 @@ "region": "Germany", "access": "tool-key", "license": "DIP Bundestag ToS (free key)", + "licenseToken": "DIP Bundestag ToS", "detVerified": true, "status": "HAVE", "toolCount": 16, "desc": "Parliamentary documents and protocols — needs a free DIP key.", + "provenance": { + "host": "search.dip.bundestag.de", + "root": "https://search.dip.bundestag.de/api/v1", + "docs": "https://dip.bundestag.de/über-dip/hilfe/api" + }, "tools": [ { "name": "listDrucksachen", @@ -4195,6 +8909,7 @@ ] } ], + "licenseAttribution": "free key", "keys": [ "DIP_BUNDESTAG_API_KEY" ] @@ -4206,10 +8921,17 @@ "region": "global", "access": "tool-key", "license": "Ticketmaster Developer ToS (free key)", + "licenseToken": "Ticketmaster Developer ToS", "detVerified": false, "status": "HAVE", "toolCount": 6, "desc": "Events, attractions and venues worldwide — needs a free Discovery API key.", + "provenance": { + "host": "app.ticketmaster.com", + "root": "https://app.ticketmaster.com/discovery/v2", + "docs": "https://developer.ticketmaster.com/products-and-docs/apis/discovery-api/v2/", + "tos": "https://developer.ticketmaster.com/support/terms-of-use/" + }, "tools": [ { "name": "searchEvents", @@ -4422,6 +9144,7 @@ ] } ], + "licenseAttribution": "free key", "keys": [ "TICKETMASTER_API_KEY" ] @@ -4433,10 +9156,16 @@ "region": "Germany", "access": "resource-local", "license": "ODbL (OffeneRegister)", + "licenseToken": "ODbL", "detVerified": true, "status": "HAVE", "toolCount": 5, "desc": "5.3M German companies — local SQLite (FTS5), needs the bulk DB.", + "provenance": { + "host": "offeneregister.de", + "root": "https://offeneregister.de", + "docs": "https://offeneregister.de" + }, "tools": [ { "name": "searchCompany", @@ -4533,6 +9262,7 @@ ] } ], + "licenseAttribution": "OffeneRegister", "requiredLibraries": [ "better-sqlite3" ] @@ -4544,10 +9274,16 @@ "region": "global", "access": "resource-local", "license": "Mixed (OSM/Nominatim/local DBs)", - "detVerified": true, + "licenseToken": "Mixed", + "detVerified": false, "status": "HAVE", - "toolCount": 8, + "toolCount": 10, "desc": "Canonical geocoding orchestrator — keyless lookups + local SQLite + keyed station depth.", + "provenance": { + "host": "nominatim.openstreetmap.org", + "root": "https://nominatim.openstreetmap.org", + "docs": "https://nominatim.org/release-docs/latest/" + }, "tools": [ { "name": "geoResolve", @@ -4773,6 +9509,70 @@ } ] }, + { + "name": "geoTrails", + "desc": "geo-trails (Memo 122) — return German tourism trails (odta:Trail) as GeoJSON LineString features (RFC 7946, lon-first). Each route is a multi-vertex polyline (schema:geo -> schema:line, 290-1259 points) that follows the path bend-by-bend, so it renders as a real drawn line on a map. Optional name is a case-insensitive substring on the trail name. Bounded by limit (the graph has no spatial index; unbounded scans time out). Keyed: without OPEN_DATA_GERMANY_API_KEY this schema is disabled (the keyless geo tools stay available).", + "access": "tool-key", + "detVerified": false, + "params": [ + { + "name": "name", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "default 10 · min 1 · max 50" + } + ] + }, + { + "name": "geoNearbyDzt", + "desc": "geo-nearby-dzt (Memo 122) — DZT tourism entities (events, POIs, trails, lodging, food) within a radius around a point, as a lon-first GeoJSON FeatureCollection (circle-trimmed via Haversine; the graph has no GeoSPARQL). Optional types restricts to schema.org type names (comma list, e.g. TouristAttraction,Event). Optional enrich=transit attaches the nearest public-transit stop (_nearestTransitStop: DHID + walking distance) from the reified odta:GeoLinkObject. Keyed: disabled without OPEN_DATA_GERMANY_API_KEY (the keyless geoNearby sources:dzt path stays available).", + "access": "tool-key", + "detVerified": false, + "params": [ + { + "name": "lat", + "type": "number", + "required": true, + "note": "min -90 · max 90" + }, + { + "name": "lon", + "type": "number", + "required": true, + "note": "min -180 · max 180" + }, + { + "name": "radiusMeters", + "type": "number", + "required": false, + "note": "default 2000 · min 1 · max 50000" + }, + { + "name": "types", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "enrich", + "type": "string", + "required": false, + "note": "" + }, + { + "name": "limit", + "type": "number", + "required": false, + "note": "default 10 · min 1 · max 100" + } + ] + }, { "name": "geoStation", "desc": "geo-station (Memo 118) — depth pivot: resolve a German railway station from EXACTLY ONE selector {latlon, eva, dhid, bahnhofsnummer, name} to all five identifiers (bahnhofsnummer, EVA, DHID/IFOPT, AGS, RIL100) plus a canonical location, confidence and provenance. Keyed (DB StaDa + RIS::Stations); the dhid path bridges via the zHV registry. Without DB_CLIENT_ID/DB_API_KEY this schema is disabled (the keyless geo tools stay available). Ambiguous (0 or >1) selector input is rejected (GEO-STATION-001), never guessed. Optional opt-in enrich (comma list): elevators (FaSta lift state); departures is deferred (time-bound, flowmcp-grading#63).", @@ -4824,7 +9624,9 @@ ] } ], + "licenseAttribution": "OSM/Nominatim/local DBs", "keys": [ + "OPEN_DATA_GERMANY_API_KEY", "DB_CLIENT_ID", "DB_API_KEY" ], diff --git a/src/layouts/ConfiguratorLayout.astro b/src/layouts/ConfiguratorLayout.astro index 4de88ae..ee5b610 100644 --- a/src/layouts/ConfiguratorLayout.astro +++ b/src/layouts/ConfiguratorLayout.astro @@ -16,8 +16,8 @@ import payload from '../data/configurator-payload.json' const { lang = 'en' } = Astro.props const t = lang === 'de' - ? { title: 'Configurator', startWith: 'Starten mit:', sources: 'Quellen', source: 'Quelle', tools: 'Tools', tool: 'Tool', liveTested: 'live getestet', needsKey: 'braucht Key', local: 'lokal', cart: 'Dein Agent-Toolset', cartSubLine: 'Berlin Open Data · frei, nichts zu kaufen', exp2: 'Keine Installation — fertige Agent-Skill + kurze Anleitung.', cartEmpty: 'Noch nichts ausgewählt.', region: 'REGION', dataClass: 'DATENKLASSE', access: 'ZUGANG', category: 'KATEGORIE', clear: 'zurücksetzen', filterSources: 'Quellen filtern…', demo: 'DEMO-DATEN · JSON', exportBtn: 'Als Skill exportieren', readyOk: 'Bereit — kein Setup nötig', readyWarn: 'Setup nötig, bevor das läuft', selectedTools: 'AUSGEWÄHLTE TOOLS', tabSkill: 'Agent Skill', tabSel: 'flowmcp-Auswahl', tabCfg: 'Config JSON', copy: 'Kopieren', copied: 'Kopiert!', download: '.md laden', close: 'Schließen', emptyHint: 'Wähle Tools, dann hier exportieren.', dataSources: 'Datenquellen', legFree: 'frei · live getestet', legKey: 'braucht API-Key', legLocal: 'lokale Ressource', noResults: 'Keine Quellen für diese Filter.', filterN: '{n} Tools filtern…', selectAllTools: 'Alle wählen', deselectAllTools: 'Alle abwählen', segOff: 'Aus', segSome: 'Teils', segAll: 'Alle', allTools: 'Alle Tools', selectAllSources: 'Alle Tools wählen oder entfernen', selOf: '{n} von {m} gewählt', selOfTools: '{n} von {m} Tools gewählt', parameters: 'PARAMETER', required: 'erforderlich', optional: 'optional', subLine: 'Durchsuche FlowMCPs Datenquellen, wähle die Tools, die dein Agent braucht, und exportiere eine fertige Auswahl.', metaSources: 'offene Quellen', metaVerified: 'deterministisch verifiziert', modalTitle: 'Exportiere dein Agent-Toolset', howToUse: 'SO GEHT\'S', howToText: 'Füge die Agent-Skill in deinen Agenten ein oder kopiere die flowmcp-Auswahl in deine Config. Keyless-Tools laufen sofort; keyed-Tools brauchen ihren API-Key.', disclaimer: '„live getestet“ heißt: der deterministische Test war grün (HTTP 200 + Daten). Es ist KEINE Qualitätsbewertung — LLM-Grading steht noch aus.', allRegions: 'Alle Regionen', allSources: 'Alle Quellen', removeFilter: 'Filter entfernen', filtersBtn: 'Filter', toolset: 'Toolset', selected: 'ausgewählt', tapClose: '· zum Schließen daneben tippen ·', showMore: '{n} weitere Quellen zeigen', shownOf: '{shown} von {total} Quellen', scopedTo: 'Eingegrenzt auf', addRec: '{n} empfohlene hinzufügen', addRecDone: '{n} empfohlene hinzugefügt', allN: 'alle {n}', removeTool: 'Tool entfernen', regions: { Berlin: 'Berlin', Germany: 'Deutschland', global: 'Global' } } - : { title: 'Configurator', startWith: 'Start with:', sources: 'sources', source: 'source', tools: 'tools', tool: 'tool', liveTested: 'live-tested', needsKey: 'needs key', local: 'local', cart: 'Your agent toolset', cartSubLine: 'Berlin Open Data · free, nothing to buy', exp2: 'No install — get a ready-to-paste agent skill + short setup guide.', cartEmpty: 'Nothing selected yet.', region: 'REGION', dataClass: 'DATA CLASS', access: 'ACCESS', category: 'CATEGORY', clear: 'clear', filterSources: 'Filter sources…', demo: 'DEMO DATA · JSON', exportBtn: 'Export as Skill', readyOk: 'Ready to use — no setup needed', readyWarn: 'Setup needed before this runs', selectedTools: 'SELECTED TOOLS', tabSkill: 'Agent Skill', tabSel: 'flowmcp selection', tabCfg: 'Config JSON', copy: 'Copy', copied: 'Copied!', download: 'Download .md', close: 'Close', emptyHint: 'Select tools, then export here.', dataSources: 'Data sources', legFree: 'free · live-tested', legKey: 'needs API key', legLocal: 'local resource', noResults: 'No sources match these filters.', filterN: 'Filter {n} tools…', selectAllTools: 'Select all', deselectAllTools: 'Deselect all', segOff: 'Off', segSome: 'Some', segAll: 'All', allTools: 'All tools', selectAllSources: 'Select or clear all tools', selOf: '{n} of {m} selected', selOfTools: '{n} of {m} tools selected', parameters: 'PARAMETERS', required: 'required', optional: 'optional', subLine: "Search FlowMCP's data sources, pick the tools your agent needs, and export a ready-to-use selection.", metaSources: 'open sources', metaVerified: 'deterministically verified', modalTitle: 'Export your agent toolset', howToUse: 'HOW TO USE', howToText: 'Paste the Agent Skill into your agent, or copy the flowmcp selection into your config. Keyless tools run immediately; keyed tools need their API key.', disclaimer: '“live-tested” means the deterministic test passed (HTTP 200 + data). It is NOT a quality grade — LLM grading is still pending.', allRegions: 'All regions', allSources: 'All sources', removeFilter: 'remove filter', filtersBtn: 'Filters', toolset: 'Toolset', selected: 'selected', tapClose: '· tap outside to close ·', showMore: 'Show {n} more sources', shownOf: '{shown} of {total} sources', scopedTo: 'Scoped to', addRec: 'Add {n} recommended', addRecDone: '{n} recommended added', allN: 'all {n}', removeTool: 'Remove tool', regions: { Berlin: 'Berlin', Germany: 'Germany', global: 'Global' } } + ? { title: 'Data Configurator', startWith: 'Starten mit:', sources: 'Quellen', source: 'Quelle', tools: 'Tools', tool: 'Tool', liveTested: 'live getestet', needsKey: 'braucht Key', local: 'lokal', cart: 'Dein Agent-Toolset', cartSubLine: 'Berlin Open Data · frei, nichts zu kaufen', exp2: 'Keine Installation — fertige Agent-Skill + kurze Anleitung.', cartEmpty: 'Noch nichts ausgewählt.', region: 'REGION', dataClass: 'DATENKLASSE', access: 'ZUGANG', category: 'KATEGORIE', clear: 'zurücksetzen', filterSources: 'Quellen filtern…', demo: 'DEMO-DATEN · JSON', exportBtn: 'Als Skill exportieren', readyOk: 'Bereit — kein Setup nötig', readyWarn: 'Setup nötig, bevor das läuft', selectedTools: 'AUSGEWÄHLTE TOOLS', tabSkill: 'Agent Skill', tabSel: 'flowmcp-Auswahl', tabCfg: 'Config JSON', copy: 'Kopieren', copied: 'Kopiert!', download: '.md laden', close: 'Schließen', emptyHint: 'Wähle Tools, dann hier exportieren.', dataSources: 'Datenquellen', legFree: 'frei (keyless)', legLive: 'live getestet', legKey: 'braucht API-Key', legLocal: 'lokale Ressource', noResults: 'Keine Quellen für diese Filter.', filterN: '{n} Tools filtern…', selectAllTools: 'Alle wählen', deselectAllTools: 'Alle abwählen', segOff: 'Aus', segSome: 'Teils', segAll: 'Alle', allTools: 'Alle Tools', selectAllSources: 'Alle Tools wählen oder entfernen', selOf: '{n} von {m} gewählt', selOfTools: '{n} von {m} Tools gewählt', parameters: 'PARAMETER', required: 'erforderlich', optional: 'optional', subLine: 'Stell deinem KI-Agenten ein Toolset aus echten, offenen Berliner Datenquellen zusammen: durchsuchen, auswählen, exportieren. Noch eine frühe Demo.', metaSources: 'offene Quellen', metaVerified: 'live getestet', modalTitle: 'Exportiere dein Agent-Toolset', howToUse: 'SO GEHT\'S', howToText: 'Füge die Agent-Skill in deinen Agenten ein oder kopiere die flowmcp-Auswahl in deine Config. Keyless-Tools laufen sofort; keyed-Tools brauchen ihren API-Key.', disclaimer: 'Frühe Demo: Du kannst Datenquellen durchstöbern und ein Toolset zusammenstellen — der Export (Download / Kopieren) kommt bald.', allRegions: 'Alle Regionen', allSources: 'Alle Quellen', removeFilter: 'Filter entfernen', filtersBtn: 'Filter', toolset: 'Toolset', selected: 'ausgewählt', tapClose: '· zum Schließen daneben tippen ·', showMore: '{n} weitere Quellen zeigen', shownOf: '{shown} von {total} Quellen', scopedTo: 'Eingegrenzt auf', addRec: '{n} empfohlene hinzufügen', addRecDone: '{n} empfohlene hinzugefügt', allN: 'alle {n}', removeTool: 'Tool entfernen', provSource: 'Quelle', provLicense: 'Lizenz', demoBannerTitle: 'Das ist eine Demo', demoBannerText: 'Auswählen und ausprobieren geht schon — der Export (Download & Kopieren) kommt bald.', regions: { Berlin: 'Berlin', Germany: 'Deutschland', global: 'Global' } } + : { title: 'Data Configurator', startWith: 'Start with:', sources: 'sources', source: 'source', tools: 'tools', tool: 'tool', liveTested: 'live-tested', needsKey: 'needs key', local: 'local', cart: 'Your agent toolset', cartSubLine: 'Berlin Open Data · free, nothing to buy', exp2: 'No install — get a ready-to-paste agent skill + short setup guide.', cartEmpty: 'Nothing selected yet.', region: 'REGION', dataClass: 'DATA CLASS', access: 'ACCESS', category: 'CATEGORY', clear: 'clear', filterSources: 'Filter sources…', demo: 'DEMO DATA · JSON', exportBtn: 'Export as Skill', readyOk: 'Ready to use — no setup needed', readyWarn: 'Setup needed before this runs', selectedTools: 'SELECTED TOOLS', tabSkill: 'Agent Skill', tabSel: 'flowmcp selection', tabCfg: 'Config JSON', copy: 'Copy', copied: 'Copied!', download: 'Download .md', close: 'Close', emptyHint: 'Select tools, then export here.', dataSources: 'Data sources', legFree: 'free (keyless)', legLive: 'live-tested', legKey: 'needs API key', legLocal: 'local resource', noResults: 'No sources match these filters.', filterN: 'Filter {n} tools…', selectAllTools: 'Select all', deselectAllTools: 'Deselect all', segOff: 'Off', segSome: 'Some', segAll: 'All', allTools: 'All tools', selectAllSources: 'Select or clear all tools', selOf: '{n} of {m} selected', selOfTools: '{n} of {m} tools selected', parameters: 'PARAMETERS', required: 'required', optional: 'optional', subLine: "Assemble a toolset for your AI agent from real, open Berlin data sources: browse, pick, export. Still an early demo.", metaSources: 'open sources', metaVerified: 'live-tested', modalTitle: 'Export your agent toolset', howToUse: 'HOW TO USE', howToText: 'Paste the Agent Skill into your agent, or copy the flowmcp selection into your config. Keyless tools run immediately; keyed tools need their API key.', disclaimer: 'Early demo: browse the data sources and assemble a toolset — export (download / copy) is coming soon.', allRegions: 'All regions', allSources: 'All sources', removeFilter: 'remove filter', filtersBtn: 'Filters', toolset: 'Toolset', selected: 'selected', tapClose: '· tap outside to close ·', showMore: 'Show {n} more sources', shownOf: '{shown} of {total} sources', scopedTo: 'Scoped to', addRec: 'Add {n} recommended', addRecDone: '{n} recommended added', allN: 'all {n}', removeTool: 'Remove tool', provSource: 'Source', provLicense: 'License', demoBannerTitle: 'This is a demo', demoBannerText: 'Picking and exploring already works — export (download & copy) is coming soon.', regions: { Berlin: 'Berlin', Germany: 'Germany', global: 'Global' } } const { meta, accessClasses, categories, regions, collections, sources } = payload @@ -51,13 +51,13 @@ const LUCIDE = { } const icon = ( name, size = 16 ) => `` -// status marker matching the legend exactly (T6): free=green dot, key=key icon, -// local=square swatch; an extra check appears when the source is deterministically tested. +// status marker = access only (Memo 127 follow-up): green dot = free/keyless, key icon = +// needs key, square swatch = local resource. The "live-tested" check was dropped — every demo +// source is live-tested, so the marker carried no information and only confused. const statusMarker = ( s ) => { - const ver = s.detVerified ? `${icon( 'check', 11 )}` : '' - if( s.access === 'tool-key' ) { return `${icon( 'key-round', 13 )}${ver}` } - if( s.access === 'resource-local' ) { return `${ver}` } - return `${ver}` + if( s.access === 'tool-key' ) { return `${icon( 'key-round', 13 )}` } + if( s.access === 'resource-local' ) { return `` } + return `` } // FilterRail category taxonomy — canonical categories from the payload, only those that @@ -72,9 +72,9 @@ const railRegions = [ { id: 'global' } ].map( ( r ) => ( { ...r, label: t.regions[ r.id ], count: countRegion( r.id ) } ) ) const railAccess = [ - { id: 'tool-keyless', label: lang === 'de' ? 'Keyless (sofort nutzbar)' : 'Keyless (ready to use)', on: true }, - { id: 'tool-key', label: lang === 'de' ? 'Braucht API-Key' : 'Needs API key' }, - { id: 'resource-local', label: lang === 'de' ? 'Lokale Ressource' : 'Local resource' } + { id: 'tool-keyless', label: lang === 'de' ? 'Frei (keyless)' : 'Free (keyless)', on: true }, + { id: 'tool-key', label: lang === 'de' ? 'Braucht Key' : 'Needs key' }, + { id: 'resource-local', label: lang === 'de' ? 'Lokal' : 'Local' } ] // label maps handed to the client for dynamic headline/chips (T4) @@ -97,7 +97,7 @@ const frontmatter = { title: t.title, description: t.subLine, template: 'splash' {t.demo}

{t.subLine}

-
{sources.length} {t.metaSources} · {totalTools} {t.tools} · {detCount} {t.metaVerified}
+
{sources.length} {t.metaSources} · {totalTools} {t.tools}
@@ -176,7 +176,7 @@ const frontmatter = { title: t.title, description: t.subLine, template: 'splash'