{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T17:03:46.703Z","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament","markdownUrl":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament.md","server":{"slug":"cyanheads-eu-parliament-mcp-server","name":"io.github.cyanheads/eu-parliament-mcp-server","registryName":"io.github.cyanheads/eu-parliament-mcp-server","description":"Track European Parliament procedures, MEPs, votes, documents, speeches, and questions.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"eu-parliament","type":"remote","identifier":"https://eu-parliament.caseyjhand.com/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament","version":"0.2.2","transport":null,"scoredAt":"2026-11-05T03:19:20.968Z"},"score":{"total":74,"tier":"medium","status":"scored","weekDelta":1,"history":[{"date":"2026-11-05","total":74},{"date":"2026-11-04","total":74},{"date":"2026-11-03","total":74},{"date":"2026-11-02","total":74},{"date":"2026-11-01","total":74},{"date":"2026-10-31","total":74},{"date":"2026-10-30","total":73},{"date":"2026-10-29","total":73},{"date":"2026-10-28","total":72},{"date":"2026-10-27","total":72},{"date":"2026-10-26","total":71}]},"categories":[{"name":"Endpoint Security","score":83,"verdict":"partial","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation.","HTTPS is enforced; there's no plaintext access path.","The HSTS (Strict-Transport-Security) header is present.","DNSSEC is configured correctly; the domain's records validate against the full chain to the root."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.none_no_destructive","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.validated","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":70,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 4685 tokens (~468/item across 10 items; 9 tools + 1 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"468","items":"10","tools":"9","tokens":"4685","resources":"1"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"fail","reasons":["Stability check failed: schema churn in the 10 days we've observed: 0 tool removals, 9 breaking changes, 0 auth/transport breaks, 0 additions."],"codes":[{"code":"stability.churn","args":{"days":"10","added":"0","breaks":"9","removed":"0","auth_transport":"0"}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","100% of tool parameters carry a description.","Structured output schemas are declared (100% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"9"}},{"code":"toolsafety.manipulation_clean","args":{"units":"11","judged":"11"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a current MCP spec version (2026-07-28)."],"codes":[{"code":"protocol.current","args":{"version":"2026-07-28"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"eu-parliament","type":"remote","identifier":"https://eu-parliament.caseyjhand.com/mcp","withdrawn":false,"score":74,"current":true,"url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament","markdownUrl":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament.md"},{"slug":"cyanheads-eu-parliament-mcp-server","type":"npm","identifier":"@cyanheads/eu-parliament-mcp-server","withdrawn":false,"score":39,"current":false,"url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/cyanheads-eu-parliament-mcp-server","markdownUrl":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/cyanheads-eu-parliament-mcp-server.md"}],"facts":[{"label":"Endpoint","value":"https://eu-parliament.caseyjhand.com/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"0.2.2"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"euparl_list_reference","title":"List parliamentary reference data","description":"List parliamentary codes, identifier formats, historical committees and political groups, or coverage limitations. Choose organizations with organization_ids to resolve the organization IDs other tools return, decimal (org/5154) or code (org/IMCO, org/S-D, org/ep-9), into published names and dates; ordered per-item found false means no detail was published, as for a code in the wrong case. Organization lookups page the supplied IDs with an effective maximum of 20 per call; repeat the same ID list with page.next_offset. Live committees and political groups retain historical coverage and an acquisition bound of 1000 per page; static reference topics return the requested count or remaining entries without an output-size cap. These lists do not require snapshots; missing end dates do not establish current status.","inputs":[{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Whole-acquired local collections return the requested count or remaining rows, without an output-size cap. Bounded-mode acquisition limits: 1000 reference entries o…"},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"organization_ids","type":"array","required":false,"description":"Required nonempty list only for organizations; order and duplicates retained, with at most 20 looked up per page."},{"name":"topic","type":"string","required":true,"description":"Reference topic; organizations requires organization_ids, which other topics reject."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"items","type":"array","required":false,"description":"Whole reference entries on this page."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Whole-item page metadata."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"topic","type":"string","required":false,"description":"Requested reference topic."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":349},{"name":"euparl_list_procedures","title":"List parliamentary procedures","description":"List procedure references by procedure type. Titles, stages, and participants require euparl_get_procedure with a returned procedure_id. Use euparl_list_reference topic procedure_types for supported process_type codes. No keyword, year, committee, or stage filter is available. With process_type, every procedure of that type is listed in procedure_id order: continue with page.next_offset, passing the returned page.snapshot to detect a changed set. Without process_type, at most 10000 results are reachable and Parliament serves pages from two orderings, so pages can repeat or omit procedures; continue with page.next_offset when present, and set process_type for a complete walk.","inputs":[{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Whole-acquired local collections return the requested count or remaining rows, without an output-size cap. Bounded-mode acquisition limits: 1000 procedures. Larger…"},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"process_type","type":"string","required":false,"description":"Optional procedure-type code from euparl_list_reference topic procedure_types; case-insensitive and whitespace-trimmed."},{"name":"snapshot","type":"string","required":false,"description":"Returned page.snapshot of a process_type listing; optional at every offset, and a set that changed since fails snapshot_changed. Rejected without process_type."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"items","type":"array","required":false,"description":"Whole sparse procedure records on this page."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Whole-item page metadata."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":334},{"name":"euparl_get_procedure","title":"Read a parliamentary procedure","description":"Read a procedure title, stage, events, participants, or linked parliamentary documents. Default section overview returns scalar fields and collection counts; events, participants, and documents page one selected collection. Continue with page.next_offset and the returned snapshot; restart at offset 0 without snapshot if the collection changes. Historical participation groups remain historical. Missing detail succeeds with found false; discover references with euparl_list_procedures. Linked documents can be read with euparl_search_documents mode get; files are linked, not parsed.","inputs":[{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Whole-acquired local collections return the requested count or remaining rows, without an output-size cap. Values above the safe-integer range normalize to 90071992…"},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"procedure_id","type":"string","required":true,"description":"Procedure YYYY-NNNN or YYYY/NNNN, optional letter suffix and (TYPE), known eli/dl/proc/ prefix or exact public procedure URI."},{"name":"section","type":"string","required":false,"description":"Default overview returns scalars and counts; choose a collection for complete paged items."},{"name":"snapshot","type":"string","required":false,"description":"Previous collection snapshot; required for local offset above 0, optional at offset 0."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"available_sections","type":"array","required":false,"description":"Section counts on a found overview only."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"documents","type":"array","required":false,"description":"Selected deduplicated linked-document page sorted by document_id; present only for documents."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"events","type":"array","required":false,"description":"Selected event page in date order, undated events last and ties by id; present only for the events section."},{"name":"found","type":"boolean","required":false,"description":"Whether Parliament published procedure detail."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Selected collection continuation; absent on overview or missing detail."},{"name":"participants","type":"array","required":false,"description":"Selected historical participation page in date order, undated participations last and ties by id; present only for participants."},{"name":"procedure_id","type":"string","required":false,"description":"Normalized canonical procedure identifier."},{"name":"process_type","type":"string","required":false,"description":"Published procedure type."},{"name":"reference","type":"string","required":false,"description":"Exact published procedure reference."},{"name":"section","type":"string","required":false,"description":"Procedure retrieval section."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"source_url","type":"string","required":false,"description":"Public procedure source URL."},{"name":"stage","type":"string","required":false,"description":"Published current procedure stage."},{"name":"title","type":"object","required":false,"description":"Published procedure title in the actual selected language."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":304},{"name":"euparl_search_documents","title":"Search parliamentary documents","description":"Search adopted texts, committee documents, or plenary documents, then retrieve metadata and source-file links with mode get and document_id. Get accepts IDs from procedures, speeches, votes, questions and answers without a source family; parent_document_ids lead from subdivisions to parent files. Detail preserves adopted_document_ids, based_on_document_ids and public_register_ref; follow published document relations with mode get, while preserving ordinary missing-record and upstream-error outcomes for unavailable targets. Detail procedure_ids also read the procedure an adopted text, plenary or committee document publishes on its family record; adopted and based-on document relations never imply procedure links. Only adopted_texts supports text, title, sitting dates and related_process_id. Committee supports term but no year; plenary supports year but no term. Use euparl_list_reference topic document_types for family-specific work_type codes. Detail returns links, not extracted full text. Non-keyword adopted texts use doc-id:asc and aligned 100-row upstream pages independently of caller limit. Keyword searches retain relevance order and can repeat or omit records across pages. Adopted texts expose at most 10000 search results; continue with page.next_offset when present, otherwise narrow supported filters.","inputs":[{"name":"document_id","type":"string","required":false,"description":"Get-only canonical work ID, eli/dl/doc/ prefix or exact public URI; no family restriction."},{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Bounded-mode acquisition limits: 1000 documents, 10000 adopted texts, or 1000 keyword adopted texts. Larger bounded-mode limits normalize with a notice. Values abov…"},{"name":"mode","type":"string","required":false,"description":"Default search discovers records; get requires document_id and rejects source and all search filters."},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"related_process_id","type":"string","required":false,"description":"Adopted-texts-only procedure reference YYYY-NNNN, YYYY/NNNN(TYPE), known prefix or public URI."},{"name":"sitting_date","type":"string","required":false,"description":"Adopted-texts-only sitting date YYYY-MM-DD; start of range when sitting_date_end is supplied."},{"name":"sitting_date_end","type":"string","required":false,"description":"Adopted-texts-only inclusive range end YYYY-MM-DD; requires sitting_date and must not precede it."},{"name":"source","type":"string","required":false,"description":"Search-only family; omitted search defaults to adopted_texts. Omit entirely in get mode."},{"name":"term","type":"integer","required":false,"description":"Parliamentary term 0–10; adopted_texts and committee search only."},{"name":"text","type":"string","required":false,"description":"Adopted-texts-only keyword search in the requested language."},{"name":"title","type":"string","required":false,"description":"Adopted-texts-only title search in the requested language."},{"name":"work_type","type":"string","required":false,"description":"Search-only family-specific code from euparl_list_reference topic document_types; case-insensitive and whitespace-trimmed."},{"name":"year","type":"integer","required":false,"description":"Four-digit document year; adopted_texts and plenary search only."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"document","type":"object","required":false,"description":"Present only when get finds published detail."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"Get-only publication result; false for missing or empty detail."},{"name":"items","type":"array","required":false,"description":"Whole sparse records on a search page; absent in get mode."},{"name":"mode","type":"string","required":false,"description":"Executed retrieval mode."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Search continuation metadata; absent in get mode."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"source","type":"string","required":false,"description":"Effective family in search mode; absent in generic get."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":642},{"name":"euparl_search_speeches","title":"Search parliamentary speeches","description":"Search speech activities in parliamentary term 9 or 10, default 10, or retrieve one with mode get and speech_id. Text and title search return activity metadata, not transcripts. Follow document_ids with euparl_search_documents mode get and any returned parent_document_ids to source files. Use euparl_list_reference topic activity_types for activity_type codes. Get rejects search filters and nondefault paging. Non-keyword lists use sitting-date:asc,numbering:asc and aligned 100-row upstream pages independently of caller limit. Keyword searches retain relevance order and can repeat or omit records across pages. Search exposes at most 10000 results; continue with page.next_offset when present, otherwise narrow text, title, person_id, activity_type or sitting dates.","inputs":[{"name":"activity_type","type":"string","required":false,"description":"Search-only code from euparl_list_reference topic activity_types; case-insensitive and whitespace-trimmed."},{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Bounded-mode acquisition limits: 10000 speeches or 1000 keyword speeches. Larger bounded-mode limits normalize with a notice. Values above the safe-integer range no…"},{"name":"mode","type":"string","required":false,"description":"Default search discovers speech activities; get requires speech_id and rejects search filters."},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"person_id","type":"string","required":false,"description":"Search-only numeric MEP identifier, person/ prefix or exact public person URI."},{"name":"sitting_date","type":"string","required":false,"description":"Search-only sitting date YYYY-MM-DD; start date when a range end is supplied."},{"name":"sitting_date_end","type":"string","required":false,"description":"Search-only inclusive end date YYYY-MM-DD; requires sitting_date and cannot precede it."},{"name":"speech_id","type":"string","required":false,"description":"Get-only canonical activity ID, eli/dl/event/ prefix or exact public URI."},{"name":"term","type":null,"required":false,"description":"Search-only parliamentary term 9 or 10; omitted search defaults to 10. Omit in get mode."},{"name":"text","type":"string","required":false,"description":"Search-only keywords in the selected language; matching does not guarantee transcript output."},{"name":"title","type":"string","required":false,"description":"Search-only published activity title keywords in the selected language."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"Get-only publication result; false for missing or empty detail."},{"name":"items","type":"array","required":false,"description":"Whole speech activity records on the search page; absent in get mode."},{"name":"mode","type":"string","required":false,"description":"Executed speech retrieval mode."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Search continuation metadata; absent in get mode."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"speech","type":"object","required":false,"description":"Published activity detail when get succeeds."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":487},{"name":"euparl_search_meps","title":"Find members of the European Parliament","description":"Find MEPs by name, country, political group, gender, parliamentary term, or mandate date. Omitting term and mandate_date selects members in office today; term selects that published term roster; mandate_date selects members seated on that date. Name matching requires every normalized token after case, diacritic, and punctuation normalization over the complete roster before paging. Country and group are published for the selected roster, never inferred for another date. Continue with page.next_offset and snapshot; restart at offset 0 without snapshot after snapshot_changed. Read identity and membership history with euparl_get_mep. Empty matches succeed with guidance.","inputs":[{"name":"country","type":"string","required":false,"description":"Supported ISO alpha-2 country code, case-insensitive. United Kingdom members are published as GB (UK accepted), on historical rosters only. See euparl_list_reference topic mep_filters."},{"name":"gender","type":"string","required":false,"description":"Supported gender code FEMALE, MALE, NAP, NKN, or NST, case-insensitive."},{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Whole-acquired local collections return the requested count or remaining rows, without an output-size cap. Values above the safe-integer range normalize to 90071992…"},{"name":"mandate_date","type":"string","required":false,"description":"Members holding a seat on this YYYY-MM-DD date, not after today (UTC); exclusive with term. Country and group are matched and returned as published on that date. A term's first sitting day can return…"},{"name":"name_contains","type":"string","required":false,"description":"All-token name filter over the complete selected roster; case, diacritics, and punctuation are normalized, without fuzzy scoring. Must keep at least one letter or digit."},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"political_group","type":"string","required":false,"description":"Supported political group code, case-insensitive; accepts EPP, S&D, Verts/ALE, Greens/EFA, The Left, GUE/NGL, Renew, PfE, and Patriots aliases. Query aliases never rewrite historical organization ide…"},{"name":"snapshot","type":"string","required":false,"description":"Returned roster snapshot; required for offset above 0, optional at offset 0."},{"name":"term","type":"integer","required":false,"description":"Parliamentary term 0–10, exclusive with mandate_date; omitting both selects members in office today."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"items","type":"array","required":false,"description":"Complete member records on the selected local page."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Whole-item page metadata."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":563},{"name":"euparl_get_mep","title":"Read a member and membership history","description":"Read an MEP identity or membership history including published committee, delegation, and political-group records. Default section overview returns identity and membership_count; section memberships pages full membership records. Missing end dates do not establish current membership. Continue memberships with page.next_offset and snapshot; restart at offset 0 without snapshot after snapshot_changed. Missing detail succeeds with found false; discover IDs with euparl_search_meps.","inputs":[{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Whole-acquired local collections return the requested count or remaining rows, without an output-size cap. Values above the safe-integer range normalize to 90071992…"},{"name":"mep_id","type":"string","required":true,"description":"Decimal person ID, person/ prefix, or exact https://data.europarl.europa.eu/person/ URI."},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"section","type":"string","required":false,"description":"Default overview returns identity and membership count; memberships returns the selected history page."},{"name":"snapshot","type":"string","required":false,"description":"Returned membership snapshot; required for membership offset above 0, optional at offset 0."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"citizenship","type":"string","required":false,"description":"Published citizenship; distinct from country of representation."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"family_name","type":"string","required":false,"description":"Published family name."},{"name":"found","type":"boolean","required":false,"description":"Whether Parliament published member detail."},{"name":"given_name","type":"string","required":false,"description":"Published given name."},{"name":"membership_count","type":"integer","required":false,"description":"Parsed membership count on a found overview; absent relations do not prove no membership history."},{"name":"memberships","type":"array","required":false,"description":"Selected membership history page; present only on a found memberships response."},{"name":"mep_id","type":"string","required":false,"description":"Normalized decimal person identifier."},{"name":"name","type":"string","required":false,"description":"Published full name."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Membership continuation metadata; absent on overview or missing detail."},{"name":"place_of_birth","type":"string","required":false,"description":"Published place of birth, never inferred from citizenship."},{"name":"section","type":"string","required":false,"description":"Identity overview or separately paged membership history."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"source_url","type":"string","required":false,"description":"Public member source URL."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":272},{"name":"euparl_get_plenary_votes","title":"Explore plenary sittings, decisions, and voters","description":"Discover sittings with mode sittings and year; default decisions pages compact summaries with labels, separate decided-on, part-of and recording document relations, and vote items for sitting_id. Decisions and voters return the requested whole-item count or remaining rows without an output-size cap. Optional decisions-only label_contains selects a literal selected-language label substring, ignoring case, repeated whitespace and dash style without altering published text or establishing a final vote. Optional document_id filters decisions before paging by exact document identity or hyphen-boundary descendant; optional vote_item_id, such as a procedure's PLENARY_VOTE_RESULTS event, selects every decision of that vote item. Mode decision requires decision_id and returns one rich record with reference text and commentary; it rejects nondefault paging and snapshot. Optional decisions or decision mep_id returns independent recorded and intended positions with publication availability, without a roster lookup; empty positions do not prove absence from the vote. Mode voters requires decision_id and one position, paging recorded and intended voters independently. Missing arrays succeed with available false; published empty arrays have available true. Optional resolve_names requires explicit roster_term and joins only published names from that complete term roster, never voting-date affiliations or current-roster substitutes. Some IDs may remain unresolved. Continue local decisions or voters with page.next_offset and snapshot; restart at offset 0 without snapshot after snapshot_changed. Missing sitting decisions succeed empty; absent selected decision fails decision_not_found.","inputs":[{"name":"decision_id","type":"string","required":false,"description":"Required for decision and voters: exact returned canonical decision ID, known eli/dl/event/ prefix, or exact public event URI; forbidden for sittings and decisions."},{"name":"document_id","type":"string","required":false,"description":"Decisions-only document filter: canonical ID, eli/dl/doc/ prefix or exact public URI. Matches decided-on, part-of or recording relations by exact ID or hyphen-boundary descendant before paging."},{"name":"label_contains","type":"string","required":false,"description":"Decisions-only literal substring of the selected-language label, ignoring case, repeated whitespace and dash style; combines with document_id and vote_item_id before paging. Matching text does not es…"},{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Whole-acquired local collections return the requested count or remaining rows, without an output-size cap. Bounded-mode acquisition limits: 1000 sittings. Larger bo…"},{"name":"mep_id","type":"string","required":false,"description":"Decisions or decision member lookup: canonical numeric ID, person/ prefix or exact public person URI. Uses published arrays without a roster join; empty positions do not prove absence from the vote."},{"name":"mode","type":"string","required":false,"description":"Default decisions returns compact summaries; sittings discovers by year, decision returns one rich record, voters pages one position."},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"position","type":"string","required":false,"description":"Required only for voters: favor, against, abstention, intended_favor, intended_against, or intended_abstention."},{"name":"resolve_names","type":"boolean","required":false,"description":"Default false retains IDs only; true is voters-only and requires roster_term for complete names-only roster resolution."},{"name":"roster_term","type":"integer","required":false,"description":"Explicit parliamentary term 0–10 containing the sitting; required with resolve_names true, forbidden otherwise. No term is inferred from dates."},{"name":"sitting_id","type":"string","required":false,"description":"Required outside sittings: real YYYY-MM-DD date, MTG-PL-YYYY-MM-DD, known event prefix, or exact public event URI."},{"name":"snapshot","type":"string","required":false,"description":"Returned decisions or voter-position snapshot; required for local offset above 0, optional at offset 0; forbidden for sittings and decision."},{"name":"vote_item_id","type":"string","required":false,"description":"Decisions-only vote item filter: canonical MTG-PL-YYYY-MM-DD-VOT-ITM- ID, eli/dl/event/ prefix or exact public event URI, such as a procedure's PLENARY_VOTE_RESULTS event or a returned vote_item_ids…"},{"name":"year","type":"integer","required":false,"description":"Four-digit year, required only for sittings and forbidden in other modes."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"decision","type":"object","required":false,"description":"Complete selected rich decision, present only in decision mode."},{"name":"decision_id","type":"string","required":false,"description":"Normalized selected decision identifier; present in decision and voters modes."},{"name":"decisions","type":"array","required":false,"description":"Compact whole-decision page with selected-language labels, separate decided-on, part-of and recording document relations, and vote items."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"mode","type":"string","required":false,"description":"Sitting discovery, compact decision page, one rich decision, or one voter-position page."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"Selected sitting, compact decision, or voter-position page; absent for a rich decision. Local pages retain the requested count or remaining rows without a character budget; next_offset resumes at the…"},{"name":"position","type":"string","required":false,"description":"Selected recorded or intended position in voters mode."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"sitting_id","type":"string","required":false,"description":"Normalized selected sitting identifier; absent in sitting discovery."},{"name":"sittings","type":"array","required":false,"description":"Sitting discovery page, present only in sittings mode."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."},{"name":"voter_resolution","type":"object","required":false,"description":"Names-only provenance and complete-position resolution counts; names do not prove spelling or affiliation on the voting date."},{"name":"voters","type":"array","required":false,"description":"Independent page for one recorded or intended position, preserving published ID order."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":896},{"name":"euparl_list_questions","title":"List parliamentary questions","description":"List parliamentary questions by year and work_type or retrieve metadata, source-file links and published answers with mode get and question_id. Human citations such as E-000001/2025 retain their full year; omission of term checks canonical candidates for every overlapping parliamentary term and requires one verified match. Supply term to disambiguate; canonical IDs resolve directly. Use euparl_list_reference topic question_types for work_type codes. No keyword, author or addressee search is available. Empty answers means no answer relation was published in this response. Get rejects list filters and nondefault paging; continue lists with page.next_offset.","inputs":[{"name":"language","type":"string","required":false,"description":"Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated."},{"name":"limit","type":"number","required":false,"description":"Whole items requested; default 20. Bounded-mode acquisition limits: 1000 questions. Larger bounded-mode limits normalize with a notice. Values above the safe-integer range normalize to 90071992547409…"},{"name":"mode","type":"string","required":false,"description":"Default list discovers questions; get requires question_id and forbids year and work_type."},{"name":"offset","type":"integer","required":false,"description":"Zero-based collection offset; default 0."},{"name":"question_id","type":"string","required":false,"description":"Get-only canonical E-{term}-{year}-{sequence}, known document prefix/public URI, or human E-sequence/YYYY citation; E/P/O/G/K prefixes are case-insensitive and one-to-six-digit sequences are padded t…"},{"name":"term","type":"integer","required":false,"description":"Get-only term 0–10 to disambiguate a human citation; must agree with a canonical ID. Omit to verify candidates for every term overlapping the citation year."},{"name":"work_type","type":"string","required":false,"description":"List-only question code from euparl_list_reference topic question_types; case-insensitive and whitespace-trimmed."},{"name":"year","type":"integer","required":false,"description":"List-only four-digit question year."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Actual normalized retrieval scope and filters."},{"name":"available","type":"boolean","required":false,"description":"Whether the selected source array was published, including a published empty array."},{"name":"cap","type":"integer","required":false,"description":"Effective whole-item page limit."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"Get-only result; false only after complete citation resolution or missing published detail."},{"name":"items","type":"array","required":false,"description":"Whole sparse records on a list page; absent in get mode."},{"name":"mode","type":"string","required":false,"description":"Executed question retrieval mode."},{"name":"notice","type":"string","required":false,"description":"Publication, language fallback, empty-result or continuation guidance."},{"name":"page","type":"object","required":false,"description":"List continuation metadata; absent in get mode."},{"name":"question","type":"object","required":false,"description":"Question detail present only when a published record is found."},{"name":"shown","type":"integer","required":false,"description":"Whole items shown on this partial page."},{"name":"totalCount","type":"integer","required":false,"description":"Exact count only when published or computed over a complete collection."},{"name":"truncated","type":"boolean","required":false,"description":"True when this page returns only part of the selected collection."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":398}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T03:19:20.000Z","track":"remote","endpoint":"https://eu-parliament.caseyjhand.com/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=caseyjhand.com","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-11-02T21:39:32Z","notAfter":"2027-01-31T22:39:21Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"secure","label":"Secure","name":"eu-parliament.caseyjhand.com.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"com.","outcome":"verified","label":"Verified"},{"zone":"caseyjhand.com.","outcome":"verified","label":"Verified"},{"zone":"eu-parliament.caseyjhand.com.","outcome":"verified","label":"Verified"}]},"auth":{"outcome":"none","label":"No authorisation required","gate":null,"gateLabel":null,"status":200,"authorizationServers":[]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":301},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-26","recent":[{"id":"chg_01a1a490-99d1-75d8-9a5b-fd2a1b968ebe","kind":"param.description_changed","summary":"“euparl_get_mep” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d1-75d8-9a5b-fd2a1b968ebe"},{"id":"chg_01a1a490-99d1-7c20-9339-786834a4591f","kind":"tool.description_changed","summary":"Tool “euparl_get_plenary_votes” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d1-7c20-9339-786834a4591f"},{"id":"chg_01a1a490-99d2-7867-8a79-9dd4e34e5aae","kind":"param.description_changed","summary":"“euparl_get_plenary_votes” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d2-7867-8a79-9dd4e34e5aae"},{"id":"chg_01a1a490-99d2-7c90-b471-6b99d6766562","kind":"param.description_changed","summary":"“euparl_get_plenary_votes” reworded the description of “mep_id”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d2-7c90-b471-6b99d6766562"},{"id":"chg_01a1a490-99d3-744f-9846-3e91523d0c96","kind":"param.added_optional","summary":"“euparl_get_plenary_votes” added an optional parameter “label_contains”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d3-744f-9846-3e91523d0c96"},{"id":"chg_01a1a490-99d9-7059-9e99-1fc4dd1e952d","kind":"server.version_changed","summary":"Server version (0.2.1 → 0.2.2)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d9-7059-9e99-1fc4dd1e952d"},{"id":"chg_01a1a490-99d8-7b1e-9eca-9822f2a8585a","kind":"param.description_changed","summary":"“euparl_search_speeches” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d8-7b1e-9eca-9822f2a8585a"},{"id":"chg_01a1a490-99d8-756d-b8e8-65f305dc9570","kind":"tool.description_changed","summary":"Tool “euparl_search_speeches” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d8-756d-b8e8-65f305dc9570"},{"id":"chg_01a1a490-99d7-7e9f-b917-2f8c1724ee56","kind":"param.description_changed","summary":"“euparl_search_meps” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d7-7e9f-b917-2f8c1724ee56"},{"id":"chg_01a1a490-99d6-7345-af86-7d7461d7ca40","kind":"param.description_changed","summary":"“euparl_search_documents” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d6-7345-af86-7d7461d7ca40"},{"id":"chg_01a1a490-99d5-7d36-999f-cb21f5d9dbd0","kind":"tool.description_changed","summary":"Tool “euparl_search_documents” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d5-7d36-999f-cb21f5d9dbd0"},{"id":"chg_01a1a490-99d5-775b-acfd-3a3513d51f67","kind":"param.description_changed","summary":"“euparl_list_reference” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d5-775b-acfd-3a3513d51f67"},{"id":"chg_01a1a490-99d5-70c0-922a-bed77921798f","kind":"tool.description_changed","summary":"Tool “euparl_list_reference” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d5-70c0-922a-bed77921798f"},{"id":"chg_01a1a490-99d4-7aff-acb0-96bcb49d0f1e","kind":"param.description_changed","summary":"“euparl_list_questions” reworded the description of “question_id”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d4-7aff-acb0-96bcb49d0f1e"},{"id":"chg_01a1a490-99d4-755a-9265-49c3d4732343","kind":"param.description_changed","summary":"“euparl_list_questions” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d4-755a-9265-49c3d4732343"},{"id":"chg_01a1a490-99d3-7f33-9b5b-20c94939efc1","kind":"param.description_changed","summary":"“euparl_list_procedures” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d3-7f33-9b5b-20c94939efc1"},{"id":"chg_01a1a490-99d3-7a29-b865-f6f1760f2bf8","kind":"param.description_changed","summary":"“euparl_get_procedure” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d3-7a29-b865-f6f1760f2bf8"},{"id":"chg_01a1a490-99d0-76b0-85e4-a49dbb4d50b6","kind":"check.measure","summary":"Schema quality (420 → 468)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a490-99d0-76b0-85e4-a49dbb4d50b6"},{"id":"chg_01a1a014-7648-71b4-b97d-194ef68586ca","kind":"tool.description_changed","summary":"Tool “euparl_get_plenary_votes” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a014-7648-71b4-b97d-194ef68586ca"},{"id":"chg_01a1a014-764c-7987-b180-e9e91aa02320","kind":"tool.description_changed","summary":"Tool “euparl_list_reference” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament#chg-chg_01a1a014-764c-7987-b180-e9e91aa02320"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament/changelog.json"},"links":{"html":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament","markdown":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament.md","changelogJson":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament/changelog.json","changelogRss":"https://verifymcp.io/servers/cyanheads-eu-parliament-mcp-server/eu-parliament.xml","external":[{"label":"Remote endpoint","href":"https://eu-parliament.caseyjhand.com/mcp"},{"label":"Repository","href":"https://github.com/cyanheads/eu-parliament-mcp-server"}]}}