Skip to main content
Glama

NeoDemos

Server Details

Source-anchored search and civic intelligence for Dutch municipal council records.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.8/5 across 7 of 7 tools scored.

Server CoherenceA
Disambiguation4/5

Each tool has a distinct primary function: advising on instruments, reviewing text, formatting citations, generating a memo, generating a council document, retrieving context, and gathering background data. However, adviseer_raadsinstrument and verzamel_context's instrument_doel option overlap in providing instrument advice, which could lead to misselection.

Naming Consistency4/5

Names follow a consistent verb_noun pattern in Dutch (adviseer_, beoordeel_, formatteer_, genereer_, verzamel_), with one deviation: get_neodemos_context uses the English verb 'get' instead of the Dutch imperative, breaking the pattern slightly.

Tool Count5/5

Seven tools is well within the ideal 3-15 range and each tool serves a clear purpose in the council-member workflow, from advising and generating documents to reviewing and gathering context. No tool feels redundant or out of place.

Completeness2/5

The set covers drafting and reviewing but references essential missing tools (zoek_raadshistorie, zoek_moties, lijst_vergaderingen, mijn_fractie_context, sla_fractie_artifact_op). This creates dead ends, such as genereer_fractienotitie requiring meeting_ids from a tool that is not available, and no way to search existing documents or save generated artifacts.

Available Tools

7 tools
adviseer_raadsinstrumentA
Read-onlyIdempotent
Inspect

Adviseert welk raadsinstrument past bij wat het raadslid wil bereiken, en weegt EXPLICIET de doorlooptijd mee — schriftelijke vragen zijn het traagste instrument (~30 dagen) en zijn vaak niet de juiste keuze bij een actueel onderwerp. Pure kennisbank: geen retrieval, geen DB-call, <10ms.

Gebruik deze tool wanneer:

  • Het raadslid iets wil bereiken (informatie, college ter verantwoording roepen, een uitspraak/besluit, nieuw beleid) en de vraag is WELK instrument daarvoor past.

  • Je op het punt staat 'stel schriftelijke vragen' te adviseren — check eerst hier of een sneller instrument (mondelinge vragen, interpellatie) beter past bij de urgentie.

  • Je een schriftelijke-vragen- of actua-template nodig hebt die de structuur en kwaliteitscriteria volgt (in lijn met het reglement van orde).

  • Je wilt weten WAT een instrument oplevert (uitkomsttype, college-verplichting, uitvoeringsplicht) zodat je het raadslid kunt uitleggen welke actie het college verplicht is te ondernemen na gebruik van het instrument.

Gebruik deze tool NIET wanneer:

  • De vraag inhoudelijk is over een dossier → zoek_raadshistorie / zoek_moties.

  • Je een bestaande motie/amendement wilt terugvinden → zoek_moties.

Retourneert: markdown met het aanbevolen instrument + alternatieven, inclusief:

  • doel, snelheid, binding, wettelijke basis, wanneer-wel/niet

  • uitkomsttype (raadsbesluit / college_handeling / antwoord_college / debat / onderzoek)

  • college_verplichting: wat het college verplicht is te doen na gebruik

  • uitvoeringsplicht: ja/nee (juridisch vs. politiek afdwingbaar)

  • typische_doorlooptijd_weken: numeriek, gegrond in het RvO

  • afdoeningsproces: pad naar afsluiting

  • een bijpassende RvO-template (bij vraag-instrumenten)

  • disclaimer dat exacte termijnen/quora per lokaal RvO verschillen en geverifieerd moeten worden.

ParametersJSON Schema
NameRequiredDescriptionDefault
doelYes
urgentieNonormaal
onderwerpNo
op_agendaNo
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds valuable context beyond that: it reveals the tool is a pure knowledge base without retrieval or database calls, has <10ms response, and includes a disclaimer about local variation in rules and procedures. It also details the structure of the return value, covering safety and performance traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but structured into clear sections (when to use, when not, return values). Every sentence adds information, and the bullet-style listing improves readability. It is more verbose than minimal, but given the complex nature of the tool and lack of output schema, this is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description fully details the return value: a markdown recommendation including target, speed, binding, legal basis, when/when-not, outcome type, college obligations, execution duty, typical processing time, and a template. It also includes disclaimers and links to alternatives, making the tool self-contained for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does not explain each parameter explicitly, but it provides examples of goals ('informatie, college ter verantwoording roepen, uitspraak/besluit, nieuw beleid') that map to 'doel', and discusses urgency and alternative instruments. However, it leaves 'onderwerp' and 'op_agenda' without clear guidance, so compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it advises which council instrument fits the council member's goal, with a specific verb and resource. It explicitly distinguishes itself from sibling tools by stating when NOT to use it (for content questions or finding existing motions, use search tools).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit 'Gebruik deze tool wanneer' and 'Gebruik deze tool NIET wanneer' sections, including concrete scenarios and named alternative tools (zoek_raadshistorie, zoek_moties). This gives clear guidance on when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

beoordeel_tekstA
Read-onlyIdempotent
Inspect

Eén deterministische review-tool voor concept-teksten van een raadslid/fractiemedewerker. Geen LLM, geen DB, <10ms. Kies de modus via soort:

  • vragen — scherpt concept schriftelijke/mondelinge vragen aan: flagt suggestief/sturend, meervoudig, gesloten ja/nee, vage kwantoren, en ongefundeerde vragen + 'scherper'-suggestie.

  • notitie / commissienotitie / fractienotitie — sanity-review (maximaal 10 opmerkingen): ontbrekend voor/tegen-eindoordeel, strategische opstelling, bronnen zonder paginanummer, ontbrekende samenvatting/vragen/bolletjes en suggestieve vragen — gegroepeerd op ernst (hoog/midden/laag).

  • spreektekst — rubriek met cijfer (1-10) + deelscores + verbeterpunten + duur-vs-spreektijd (opening, standpunt, onderbouwing, weerlegging, oproep, lengte ~130 wpm).

  • RvO-format check: motie | motie_vreemd | amendement | schriftelijke_vragen | mondelinge_vragen | initiatiefvoorstel | interpellatieverzoek — valideert structuur + RvO-regels (ontbrekend dictum, geen raadsvoorstel-ref bij amendement, gesloten vragen bij schriftelijke vragen, etc.). Gebruik dit na genereer_raadsstuk of op een handgeschreven concept.

Gebruik wanneer: het raadslid een concept heeft geschreven en wil weten wat scherper kan. NIET om corpus te doorzoeken → zoek_raadshistorie.

Retourneert: markdown met concrete verbeterpunten passend bij soort, gegroepeerd op ernst.

Positie in de drafting-keten: roep aan ná genereer_raadsstuk; verwerk de bevindingen in het concept en sla daarna op met sla_fractie_artifact_op(artifact_type=<doc_type>).

ParametersJSON Schema
NameRequiredDescriptionDefault
soortNovragen
tekstYes
spreektijd_secNo
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly/idempotent/non-destructive, and the description adds behavioral traits: deterministic, no LLM/DB, <10ms, maximum 10 comments for sanity reviews, grouping by severity, and speaking-time comparison at ~130 wpm. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though fairly long, the description is dense and well-structured: summary line, mode list, usage guidance, return format, and workflow position. Every sentence adds operational value; the 'Positie in de drafting-keten' section is especially useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description compensates by specifying markdown output with concrete improvement points grouped by severity, plus mode-specific outputs (e.g., rubric with 1-10 score for spreektekst). It also covers when not to use and where it fits among siblings, making the tool fully actionable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden; it thoroughly explains the `soort` modes and their different outputs, clarifies `tekst` as the handwritten/generated concept text, and `spreektijd_sec` is covered by the spreektekst-mode explanation ('duur-vs-spreektijd ... ~130 wpm'). This exceeds schema value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Eén deterministische review-tool voor concept-teksten van een raadslid/fractiemedewerker.' It clearly distinguishes this review tool from drafting and search siblings by stating it is NOT for corpus searching (→ zoek_raadshistorie) and should be used after genereer_raadsstuk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is explicit: 'Gebruik wanneer: het raadslid een concept heeft geschreven en wil weten wat scherper kan. NIET om corpus te doorzoeken → zoek_raadshistorie.' It also provides workflow position: call after genereer_raadsstuk, process findings, then save with sla_fractie_artifact_op.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

formatteer_bronvermeldingA
Read-onlyIdempotent
Inspect

Formatteert een bronvermelding zoals Erik die wil: mét paginanummer (en, indien bekend, alinea) — bijv. '(Begroting 2025, 12-10-2024, p. 41, alinea 3)'. Met spreker + quote levert de tool de volledige citaat-attributie in huisstijl: 'Volgens {spreker} ({partij}): "..." (bron, p. ..)'. Velden die ontbreken worden netjes weggelaten (nooit 'p. None'). Geen DB, geen netwerk.

Let op: paginanummers vereisen dat de paginametadata in het bronfragment aanwezig is (aanwezig bij sommige bronnen, afwezig bij andere — de tool degradeert netjes). Zin-/alinea-precisie op corpusniveau is aparte ontologie (WS30); deze tool is de formatteerlaag.

Gebruik wanneer: je een quote of bron netjes wilt vermelden met paginanummer/alinea.

Retourneert: de bronvermelding/citaat-string (markdown).

ParametersJSON Schema
NameRequiredDescriptionDefault
bronYes
datumNo
quoteNo
alineaNo
paginaNo
partijNo
sprekerNo
document_idNo
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and idempotent. The description adds meaningful behavioral context: 'Geen DB, geen netwerk' (no DB/network), missing fields are omitted cleanly ('nooit p. None'), graceful degradation when page metadata is absent, and a specified markdown return format. These details go beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence adds value: main function, special case for spreker+quote, missing-field behavior, metadata caveat, usage guidance, and return type. The structure front-loads the purpose and is well-organized without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no output schema, the description covers the main behavior, return format, and important caveats like page metadata dependency. However, the undocumented document_id and lack of a full parameter breakdown leave a minor completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It explains the spreker+quote combination and provides an example showing date, page, and paragraph, while stating that missing fields are omitted. However, not all parameters (e.g., document_id) are explained, leaving a gap for that field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific action: 'Formatteert een bronvermelding' (formats a citation) in a particular style, and distinguishes itself as 'de formatteerlaag' (the formatting layer) versus the separate corpus ontology (WS30). Sibling tools are for content generation and context, making this formatting tool's purpose clear and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states 'Gebruik wanneer: je een quote of bron netjes wilt vermelden met paginanummer/alinea' (use when you want to properly cite a quote or source with page/paragraph). It also notes that corpus-level precision is a separate ontology (WS30), providing a when-not. However, it does not explicitly name alternative sibling tools, only implies separation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

genereer_fractienotitieA
Read-onlyIdempotent
Inspect

Stelt de fractienotitie samen (Erik's hero-feature, WS23-core): een agenda-overzicht voor de komende ~2 weken op de portefeuille van de gebruiker, met bolletjes (🟢 positief / 🟠 spannend / 🟡 aandacht / ⚪ procedureel) en per agendapunt een detailblok waarvan de diepgang USER-RELATIEF is (diepgaand als het onderwerp in de portefeuille valt; beknopt binnen de commissie; bronnen als de gebruiker het debat zelf aanvroeg; vlucht daarbuiten; procedurele punten worden overgeslagen). De host-LLM levert uitsluitend meeting_ids uit lijst_vergaderingen; de tool haalt de gestructureerde vergadering en agenda zelf op. Zo hoeft de host geen markdown terug naar een ongedocumenteerd object te vertalen. Een onbekend ID, een vergadering zonder agenda of een vergadering buiten de horizon geeft een expliciete validatiefout, nooit een plausibel lege notitie. Automatische e-mailbezorging + de vrijdag/maandag-cron zijn aparte infrastructuur.

Positie in de keten: roep eerst mijn_fractie_context aan en neem daaruit de gebruikersnaam en fractienaam over. Vul covered_topics en followed_committees met bevestigde waarden of lege lijsten; verzin ze niet. Gebruik daarna lijst_vergaderingen(na_datum=<vandaag>, voor_datum=<horizon>, sortering='oudste_eerst') en geef de gekozen vergadering_id-waarden door als meeting_ids.

Gebruik wanneer: de gebruiker een fractienotitie/voorbereiding voor de komende vergaderingen wil.

Retourneert: markdown — bolletjes-legenda + agenda-overzicht + per-vergadering detailblok op maat.

ParametersJSON Schema
NameRequiredDescriptionDefault
vandaagNo
gebruikerYes
meeting_idsYes
horizon_dagenNo
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses that the tool fetches structured meeting data itself, that it returns explicit validation errors for unknown IDs or missing agendas (never a plausible empty note), and that email delivery and cron are separate infrastructure. This adds significant behavioral context not present in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed but every sentence delivers value: purpose, behavior, integration chain, validation, and return value. The structure is logical and front-loaded with the main outcome. It is longer than typical but appropriate for a complex hero-feature; the 'Positie in de keten' section is procedural and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (4 parameters, integration with two other tools, no output schema), the description covers all necessary context: what it returns (markdown with legend + overview + detail blocks), how it behaves on errors, and exactly which inputs to derive from prior tools. The absence of an output schema is mitigated by the explicit return description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well: it explains that meeting_ids come from lijst_vergaderingen, instructs to fill covered_topics and followed_committees with confirmed values or empty lists, and implies horizon via '~2 weken' and 'horizon_dagen'. However, the exact semantics of 'vandaag' (default null) and 'horizon_dagen' (default 14) are not fully specified, only implied, so a small gap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Stelt de fractienotitie samen', clearly stating the verb (compose) and resource (fractienotitie). It further specifies the output as an agenda-overview with color-coded bullets and per-agenda detail blocks, making it distinct from sibling tools like genereer_raadsstuk or adviseer_raadsinstrument.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Gebruik wanneer: de gebruiker een fractienotitie/voorbereiding voor de komende vergaderingen wil' and provides a full integration chain: first call mijn_fractie_context, then lijst_vergaderingen, then pass meeting_ids. It also clarifies that the host only supplies meeting_ids, not markdown, which serves as a boundary for when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

genereer_raadsstukA
Read-onlyIdempotent
Inspect

Genereert een volledig opgemaakt, RvO-conformant concept voor één van de zeven raadsstuk­typen. Geen DB, geen netwerk, <10ms — puur structurele kennis.

Gebruik deze tool wanneer:

  • Het raadslid een stuk wil indienen en een correct gestructureerd concept nodig heeft.

  • Je adviseer_raadsinstrument hebt gebruikt (welk instrument) en nu het daadwerkelijke stuk wilt renderen in het juiste format met RvO-verwijzingen.

  • Een concept al bestaat maar opnieuw in correct format moet worden gezet.

Gebruik deze tool NIET wanneer:

  • Je het juiste instrument nog moet kiezen → gebruik eerst adviseer_raadsinstrument.

  • Je een bestaand concept wilt beoordelen op inhoud → beoordeel_tekst.

  • Je een format-validatie wil uitvoeren op een bestaand concept → beoordeel_tekst met soort gelijk aan het doc_type.

doc_type keuzes: 'motie', 'motie_vreemd', 'amendement', 'schriftelijke_vragen', 'mondelinge_vragen', 'initiatiefvoorstel', 'interpellatieverzoek'.

velden zijn optioneel — ontbrekende velden worden vervangen door invul-placeholders [zoals dit] zodat het concept altijd een compleet, geldig skelet is.

gemeente bepaalt welk lokaal RvO-overlay (artikel­nummers, termijnen, indienings­route) wordt gebruikt. Default 'rotterdam'. Degradeert netjes naar het canonieke basis­format + disclaimer als er geen overlay beschikbaar is.

Retourneert: markdown-concept in de juiste RvO-structuur, met RvO-artikel­citaat en disclaimer.

Volgende stap in de drafting-keten: valideer het gegenereerde concept met beoordeel_tekst(tekst=<concept>, soort=<doc_type>) voordat je het presenteert of opslaat; sla daarna op met sla_fractie_artifact_op(artifact_type=<doc_type>).

ParametersJSON Schema
NameRequiredDescriptionDefault
veldenNo
doc_typeYes
gemeenteNorotterdam
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly/idempotent/non-destructive; the description adds valuable beyond-annotation context: no DB/network, <10ms performance, placeholders for missing fields, graceful degradation to a base format + disclaimer when no gemeente overlay exists, and return type (markdown with RvO citation and disclaimer). This aligns with annotations and enriches them, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: it opens with a one-sentence summary, then uses clear 'when/when-not' subheadings, followed by concise parameter explanations and a return value note. Every sentence adds necessary guidance for a 3-parameter, 7-type tool; no repetition of schema information or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and moderate complexity, the description fully covers purpose, selection criteria, parameter semantics, return value, and next-step integration into the drafting pipeline. It also clarifies edge cases (missing fields, missing overlay) and names sibling tools for disambiguation, making the description self-sufficient for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully compensates: doc_type is explained with the seven allowed values, velden is described as optional and automatically filled with placeholders, and gemeente is clarified with its default ('rotterdam') and fallback behavior. This goes beyond the schema's bare type/required/default fields, giving an agent everything needed to construct valid inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Genereert') and resource ('volledig opgemaakt, RvO-conformant concept voor één van de zeven raadsstuktypen'), clearly distinguishing this generation tool from siblings like adviseer_raadsinstrument (choosing instrument) and beoordeel_tekst (evaluation). It even names the seven doc_type values, making scope explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit 'Gebruik deze tool wanneer' and 'Gebruik deze tool NIET wanneer' sections, citing exact alternative tools (adviseer_raadsinstrument, beoordeel_tekst) and conditions. It closes with a recommended next-step workflow (validate with beoordeel_tekst, then save with sla_fractie_artifact_op), making usage decisively clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_neodemos_contextAInspect

Retourneert een structured primer met de beschikbare gemeenten, document-types, de huidige zittende wethouders van Rotterdam (uit raadslid_rollen), de coalition-history per college-periode, known limitations, en recommended tool sequences voor veelvoorkomende vraagpatronen. Cheap to call (<50ms). Cached op server-niveau als de DB bereikbaar is.

Gebruik deze tool wanneer:

  • Je een nieuwe sessie start — dit geeft je de ground-truth voor rol/tenure/coalition in plaats van dat je uit trainingsdata moet gokken.

  • Je een actuele referentiedatum nodig hebt voor 'vandaag', 'recent', 'vorige week' of vergelijkbare temporele termen — het today veld wordt per call berekend.

  • De vraag gaat over een historische stemming — check coalition_history voor de compositie op dát moment (GroenLinks/PvdA waren in 2018 coalitiepartij, niet oppositie).

  • Je niet zeker weet welke tool sequence past — zie recommended_tool_sequences.

Gebruik deze tool NIET wanneer:

  • De vraag al duidelijk in één retrieval tool past en je de context al kent.

  • Je al in dezelfde sessie de context hebt opgehaald (het verandert niet binnen één sessie).

Retourneert: markdown met secties voor gemeenten, document-types, raadssamenstelling, college-history, limitations, en recommended tool-sequences.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden. It discloses performance (<50ms), server-side caching, per-call calculation of the `today` field, and session-invariance. It also states the return format is markdown. However, it does not mention error behavior when the database is unreachable or any access restrictions, leaving a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a main purpose, bullet-pointed usage scenarios, and a return format summary. It is front-loaded with the core purpose and performance. While it is longer than necessary, every sentence provides actionable guidance and no filler, earning a 4 rather than a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a context-primer tool with no parameters and no output schema, the description is remarkably complete. It details the exact sections returned, explains the `today` field, gives historical examples, mentions known limitations, and directs users to recommended tool sequences. This leaves little ambiguity about when and how to use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema reflects that with no properties. The baseline for 0-parameter tools is 4, and the description appropriately clarifies that it takes no inputs and instead focuses on the contextual value it provides. No additional parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it returns a structured primer containing municipalities, document types, current aldermen, coalition history, limitations, and recommended tool sequences. This goes far beyond a simple verb+resource, providing a detailed inventory of the tool's output. It clearly distinguishes itself from siblings like verzamel_context by framing itself as a session-start primer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides dedicated 'Gebruik deze tool wanneer' and 'Gebruik deze tool NIET wanneer' sections with concrete conditions, such as starting a new session, needing a current date, handling historical votes, and avoiding redundant calls. It also references alternative tool sequences, making the usage context explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verzamel_contextA
Read-onlyIdempotent
Inspect

Bundelt server-side meerdere achtergrondbronnen voor een onderwerp in één antwoord, zodat je niet meerdere losse tools hoeft te ketenen. Alleen de via parameters gevraagde bronnen worden opgehaald (opt-in), zodat de call snel blijft. Beschikbare bronnen:

  • CBS-achtergrond (publieke StatLine open data, geen credentials): geef cbs_beleidsgebied (bv. 'wonen', 'inkomen', 'criminaliteit') voor EXACTE, geciteerde cijfers uit de gecureerde nationale-contextlaag (cache-first, WS85/ADR-0037; nooit vector-embedded) voor cbs_gemeente (default GM0599). Of geef cbs_zoekterm / cbs_tabel_id (+ optioneel cbs_perioden + cbs_extra_filters + cbs_top) voor ad-hoc live StatLine-zoek. Voor aggregerende Iv3-tabellen (84413NED rekeningen, 83641NED begrotingen — grootteklasse-niveau, NIET per gemeente) gebruik cbs_extra_filters (bv. {"RegioS": "LD03"}) en verhoog cbs_top (default 100). LET OP: CBS StatLine biedt jeugd-lasten UITSLUITEND op grootteklasse-niveau, NIET per gemeente; gebruik iv3_kerncijfers_gemeenten voor per-gemeente totale lasten (niet taakveld-specifiek). Netwerk-call.

  • CBS afgeleide cijfers (metrics-laag, WS85b): geef cbs_metric (bv. 'woningvoorraad_per_1000_inw') voor een BEREKEND cijfer (per-1.000 / Δ-t.o.v.-vorig-jaar / verhouding) mét bronherkomst; optioneel cbs_compare_regions (tussen regio's) OF cbs_compare_periodes (over de tijd) — precies één van beide — met vergelijkbaarheidswaarborg, OF cbs_rollup_region (bv. 'NL01') om op te rollen van leden naar ouder-niveau (anti-Simpson, dekkingsvlag).

  • CBS cube-engine (WS90/ADR-0054, vrije slice-and-dice): voor een vraag die NIET op een vaste cbs_metric past, geef eerst cube_describe (tabel-id/onderwerp) → krijg de maten met hun aggregation_type + toegestane ops + dimensieleden; geef daarna cube_query (een {table_id|topic, measures, filters, op, region, + max één vergelijkings-as}-dict). De engine compileert deterministisch en WEIGERT illegale ops ('je kunt geen gemiddelde middelen') of ONTHOUDT ZICH bij een onbekend lid / niet-vergelijkbare as i.p.v. een fout cijfer te geven.

  • CBS Iv3 per-gemeente financiële data (AUTORITATIEVE bron, ADR-0042): geef iv3_kerncijfers_gemeenten voor ELKE vraag over financiën per gemeente — dit queries fin_iv3_fact (NeoDemos eigen DB, alle 342 gemeenten, 2017–heden, geauditeerde CBS Iv3-data). NOOIT CBS StatLine hiervoor gebruiken (84413NED/83641NED = grootteklasse, niet per gemeente). Retourneert: totale lasten, overhead% (taakveld 0.4 ÷ totale lasten, BBV-beleidsindicator), overhead & uitvoering €/inwoner — per gemeente, gesorteerd op laagste overhead%. Optioneel iv3_jaar + iv3_verslagsoort ('jaarrekening' / 'begroting'). Kant-en-klare tabel + JSON-blok. Gebruik dit i.p.v. vraag_begrotingsregel voor vergelijkingen TUSSEN gemeenten. Voeg iv3_taakvelden toe voor een PER-TAAKVELD uitsplitsing (bv. ['6.72','6.71'] voor jeugd + WMO; laat leeg voor alle taakvelden). BBV-codes (selectie): 0.4=Overhead, 1.2=OOV, 2.1=Verkeer, 4.3=Onderwijs, 6.1=Samenkracht, 6.3=Inkomen, 6.71=WMO 18+, 6.72=Jeugdhulp 18-, 7.3=Afval, 7.4=Milieu, 8.3=Wonen.

  • RIVM gezondheidsdata (WS88, separate path): geef rivm_gezondheid (bv. 'levensverwachting', 'gezonde levensverwachting') voor EXACTE, geciteerde RIVM-cijfers per gemeente uit de gecureerde RIVM-contextlaag (cache-first, rivm_context_*; nooit vector-embedded). Bron: RIVM — Gezondheidsmonitor (GGD'en, CBS, RIVM), CC-BY 4.0. Tabel 50108NED (gezonde levensverwachting per gemeente, RegioS) live. Optioneel cbs_gemeente voor het regio-filter (default GM0599 Rotterdam). GEBRUIK DIT voor elke vraag over levensverwachting / gemeente-gezondheid — NIET cbs_beleidsgebied (CBS StatLine heeft geen per-gemeente gezondheidsdata).

  • Raadsinstrument-advies: geef instrument_doel ('informatie'/'controle'/'agenderen'/'besluit_wijzigen'/'nieuw_beleid'/'onderzoek') om te adviseren WELK instrument past, mét doorlooptijd-afweging en RvO-template.

Gebruik wanneer: je een onderwerp wilt staven met maatschappelijke cijfers en/of wilt weten welk raadsinstrument past — in één keer. Voor zware corpus-retrieval (notulen, moties): gebruik zoek_raadshistorie / zoek_moties apart (die zijn niet in deze orchestrator gebundeld om binnen de tijdslimiet te blijven).

KRITIEKE GUARDRAILS — DATA-INTEGRITEIT:

  1. Nooit een CBS-tabel-ID noemen dat je niet hebt geverifieerd. Als cbs_beleidsgebied niets oplevert (geen curated match), zeg dan eerlijk dat de data niet beschikbaar is in NeoDemos — NOOIT een tabel-ID suggereren dat je niet via deze tool hebt opgehaald. Een hallucinated tabel-ID is erger dan 'niet beschikbaar': de gebruiker gaat op zoek naar data die niet bestaat op de plek waar je hem stuurt.

  2. CBS StatLine heeft GEEN levensverwachting per individuele gemeente. Gebruik de rivm_gezondheid-parameter (bv. 'levensverwachting') — die haalt tabel 50108NED op uit de gecureerde RIVM-contextlaag (WS88). Verwijs NIET naar 85388NED of een ander onbekend CBS-tabel-ID voor gezondheidsdata.

  3. CBS StatLine heeft GEEN Iv3-lasten per individuele gemeente per taakveld. Dat is grootteklasse-niveau (84413NED/83641NED). Verwijs naar iv3_kerncijfers_gemeenten voor totale per-gemeente lasten, of leg de bronbeperking uit.

Retourneert: markdown met een sectie per gevraagde bron.

ParametersJSON Schema
NameRequiredDescriptionDefault
cbs_topNo
iv3_jaarNo
onderwerpYes
cbs_metricNo
cube_queryNo
cbs_gemeenteNoGM0599
cbs_periodenNo
cbs_tabel_idNo
cbs_zoektermNo
cube_describeNo
iv3_taakveldenNo
instrument_doelNo
rivm_gezondheidNo
iv3_verslagsoortNojaarrekening
cbs_beleidsgebiedNo
cbs_extra_filtersNo
cbs_rollup_regionNo
cbs_compare_regionsNo
instrument_urgentieNonormaal
cbs_compare_periodesNo
instrument_op_agendaNo
iv3_kerncijfers_gemeentenNo
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds significant behavioral context beyond these: it explains opt-in parameter fetching (only requested sources are fetched to keep the call fast), cache-first behavior, and network calls for some sources. Critically, it discloses refusal/abstention behavior: the cube engine 'WEIGERT illegale ops' or 'ONTHOUDT ZICH' rather than returning incorrect figures, and it provides integrity guardrails against hallucinated CBS table IDs. This is rich, non-redundant transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with clear headers, bullet lists, and bolded source names. It is front-loaded with the core purpose. Some repetition exists (e.g., the warning about CBS StatLine lacking per-gemeente health data appears both in the RIVM section and guardrail #2), which adds emphasis but could be trimmed. Overall, it is appropriately sized for the tool's complexity, but not maximally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity (22 parameters, multiple data sources, no output schema), the description is remarkably complete. It covers every source with usage details, parameter constraints, data-freshness/network behavior, and even states the return format ('markdown met een sectie per gevraagde bron'). Guardrails for data integrity ensure safe usage. No critical gaps are apparent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 22 parameters and 0% schema description coverage, the description carries the full burden of explaining parameters. It does so in depth: each parameter group (cbs_beleidsgebied, cbs_metric, cube_query, iv3_kerncijfers_gemeenten, rivm_gezondheid, instrument_doel) receives examples, constraints, and mutual exclusions (e.g., 'precies één van beide' for cbs_compare_regions vs cbs_compare_periodes). It clarifies defaults (cbs_gemeente default GM0599), explains how to use cbs_extra_filters and cbs_top for Iv3 tables, and describes the cube_describe/cube_query workflow. This far exceeds schema-provided meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific verb+resource statement: 'Bundelt server-side meerdere achtergrondbronnen voor een onderwerp in één antwoord' (bundles server-side multiple background sources for a topic into one answer). It enumerates distinct data sources (CBS, RIVM, IV3, raadsinstrument) and explicitly differentiates itself from sibling tools by noting that heavy corpus retrieval (zoek_raadshistorie / zoek_moties) is not bundled here. This distinguishes it from get_neodemos_context and other siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Gebruik wanneer' guidance and names alternatives: use this tool for societal figures and raadsinstrument advice in one call; for heavy corpus retrieval use zoek_raadshistorie/zoek_moties. It also gives strong exclusionary warnings: use iv3_kerncijfers_gemeenten instead of CBS StatLine for per-gemeente finances, and rivm_gezondheid instead of cbs_beleidsgebied for health data. This far exceeds typical when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Unifies 24 Dutch public-sector data sources into a single MCP interface, enabling AI assistants to search, combine, and retrieve structured data with provenance and cross-source linking.
    64
    10
    Apache 2.0
  • A
    license
    -
    quality
    C
    maintenance
    Provides access to Dutch Parliament (Tweede Kamer) open data through MCP tools, enabling querying of parliamentary information via natural language.
    9
    MIT

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources