Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/eu-parliament-mcp-server

REMOTE · EU-PARLIAMENT.CASEYJHAND.COM · 2 COMPONENTS

Track European Parliament procedures, MEPs, votes, documents, speeches, and questions.

+1 this week 74 Trust /100

Last scanned (5 hours ago)

Scores higher than 62% of remote servers

Reachable. Last reached 5 Nov 2026.

Category News and Social

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security83
Transport & Reachability100
Schema Quality & AI Usability70
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • 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. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability check failed: schema churn in the 10 days we've observed: 0 tool removals, 9 breaking changes, 0 auth/transport breaks, 0 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 0
    • Tool “euparl_get_plenary_votes” rewrote its description, which is the text the model reads security
    • Tool “euparl_search_speeches” rewrote its description, which is the text the model reads security
    • Tool “euparl_search_documents” rewrote its description, which is the text the model reads security
    • Tool “euparl_list_reference” rewrote its description, which is the text the model reads security
    • Schema quality: 420 → 468 ▼ functional
    • Server version: 0.2.1 → 0.2.2 functional
    • “euparl_get_plenary_votes” added an optional parameter “label_contains” cosmetic
    • “euparl_get_mep” reworded the description of “limit” cosmetic
    • “euparl_get_plenary_votes” reworded the description of “limit” cosmetic
    • “euparl_get_plenary_votes” reworded the description of “mep_id” cosmetic
    • “euparl_search_speeches” reworded the description of “limit” cosmetic
    • “euparl_search_meps” reworded the description of “limit” cosmetic
    • “euparl_search_documents” reworded the description of “limit” cosmetic
    • “euparl_list_reference” reworded the description of “limit” cosmetic
    • “euparl_list_questions” reworded the description of “question_id” cosmetic
    • “euparl_list_questions” reworded the description of “limit” cosmetic
    • “euparl_list_procedures” reworded the description of “limit” cosmetic
    • “euparl_get_procedure” reworded the description of “limit” cosmetic
  • 3 Nov 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “euparl_get_plenary_votes” rewrote its description, which is the text the model reads security
    • Tool “euparl_list_reference” rewrote its description, which is the text the model reads security
    • Tool “euparl_list_procedures” rewrote its description, which is the text the model reads security
    • Tool “euparl_search_documents” rewrote its description, which is the text the model reads security
    • Server version: 0.2.0 → 0.2.1 functional
    • “euparl_get_plenary_votes” added an optional parameter “vote_item_id” cosmetic
    • “euparl_list_procedures” added an optional parameter “snapshot” cosmetic
    • “euparl_get_plenary_votes” reworded the description of “document_id” cosmetic
  • 1 Nov 26 0
    • Stability: 0.17 → fail ▼ security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “euparl_list_reference” rewrote its description, which is the text the model reads security
    • Tool “euparl_search_meps” rewrote its description, which is the text the model reads security
    • Schema quality: 3507 → 3882 ▼ functional
    • “euparl_get_plenary_votes” changed the type of “limit”: integer → number ▼ functional
    • “euparl_get_procedure” changed the type of “limit”: integer → number ▼ functional
    • “euparl_list_procedures” changed the type of “limit”: integer → number ▼ functional
    • “euparl_list_questions” changed the type of “limit”: integer → number ▼ functional
    • “euparl_list_reference” changed the type of “limit”: integer → number ▼ functional
    • “euparl_search_documents” changed the type of “limit”: integer → number ▼ functional
    • “euparl_search_meps” changed the type of “limit”: integer → number ▼ functional
    • “euparl_search_speeches” changed the type of “limit”: integer → number ▼ functional
    • “euparl_get_mep” changed the type of “limit”: integer → number ▼ functional
    • First check of Schema quality: 100 functional
    • New resource “eu-parliament-guide” functional
    • Server version: 0.1.2 → 0.2.0 functional
    • “euparl_search_meps” added an optional parameter “mandate_date” cosmetic
    • “euparl_search_meps” reworded the description of “limit” cosmetic
    • “euparl_get_plenary_votes” reworded the description of “limit” cosmetic
    • “euparl_get_procedure” reworded the description of “limit” cosmetic
    • “euparl_list_procedures” reworded the description of “limit” cosmetic
    • “euparl_list_questions” reworded the description of “limit” cosmetic
    • “euparl_list_questions” reworded the description of “question_id” cosmetic
    • “euparl_list_reference” reworded the description of “limit” cosmetic
    • “euparl_search_documents” reworded the description of “limit” cosmetic
    • “euparl_search_meps” reworded the description of “country” cosmetic
    • “euparl_search_meps” reworded the description of “name_contains” cosmetic
    • “euparl_search_meps” reworded the description of “political_group” cosmetic
    • “euparl_search_meps” reworded the description of “term” cosmetic
    • “euparl_search_speeches” reworded the description of “limit” cosmetic
    • “euparl_get_mep” reworded the description of “limit” cosmetic
  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Oct 26 +1
    • Stability: unverified → 0.03 ▲ functional
  • 26 Oct 26 71

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://eu-parliament.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 2 Nov 2026 31 Jan 2027 ECDSA 256 ECDSA-SHA256 995a30681ab772540e934241ca1d576c
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of eu-parliament.caseyjhand.com. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
eu-parliament.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://eu-parliament.caseyjhand.com/mcp Verified 200
http (plaintext) http://eu-parliament.caseyjhand.com/mcp HTTPS enforced 301 https://eu-parliament.caseyjhand.com/mcp
MCP tools · 9 exposed · ~4,245 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
euparl_get_mep ~272

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.

NameTypeReqDescription
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
mep_idstringyesDecimal person ID, person/ prefix, or exact https://data.europarl.europa.eu/person/ URI.
offsetinteger–Zero-based collection offset; default 0.
sectionstring–Default overview returns identity and membership count; memberships returns the selected history page.
snapshotstring–Returned membership snapshot; required for membership offset above 0, optional at offset 0.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
citizenshipstring–Published citizenship; distinct from country of representation.
errorobject–Present when the call failed. Absent on success.
family_namestring–Published family name.
foundboolean–Whether Parliament published member detail.
given_namestring–Published given name.
membership_countinteger–Parsed membership count on a found overview; absent relations do not prove no membership history.
membershipsarray–Selected membership history page; present only on a found memberships response.
mep_idstring–Normalized decimal person identifier.
namestring–Published full name.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–Membership continuation metadata; absent on overview or missing detail.
place_of_birthstring–Published place of birth, never inferred from citizenship.
sectionstring–Identity overview or separately paged membership history.
showninteger–Whole items shown on this partial page.
source_urlstring–Public member source URL.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

euparl_get_plenary_votes ~896

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.

NameTypeReqDescription
decision_idstring–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.
document_idstring–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.
label_containsstring–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…
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
mep_idstring–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.
modestring–Default decisions returns compact summaries; sittings discovers by year, decision returns one rich record, voters pages one position.
offsetinteger–Zero-based collection offset; default 0.
positionstring–Required only for voters: favor, against, abstention, intended_favor, intended_against, or intended_abstention.
resolve_namesboolean–Default false retains IDs only; true is voters-only and requires roster_term for complete names-only roster resolution.
roster_terminteger–Explicit parliamentary term 0–10 containing the sitting; required with resolve_names true, forbidden otherwise. No term is inferred from dates.
sitting_idstring–Required outside sittings: real YYYY-MM-DD date, MTG-PL-YYYY-MM-DD, known event prefix, or exact public event URI.
snapshotstring–Returned decisions or voter-position snapshot; required for local offset above 0, optional at offset 0; forbidden for sittings and decision.
vote_item_idstring–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…
yearinteger–Four-digit year, required only for sittings and forbidden in other modes.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
decisionobject–Complete selected rich decision, present only in decision mode.
decision_idstring–Normalized selected decision identifier; present in decision and voters modes.
decisionsarray–Compact whole-decision page with selected-language labels, separate decided-on, part-of and recording document relations, and vote items.
errorobject–Present when the call failed. Absent on success.
modestring–Sitting discovery, compact decision page, one rich decision, or one voter-position page.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–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…
positionstring–Selected recorded or intended position in voters mode.
showninteger–Whole items shown on this partial page.
sitting_idstring–Normalized selected sitting identifier; absent in sitting discovery.
sittingsarray–Sitting discovery page, present only in sittings mode.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.
voter_resolutionobject–Names-only provenance and complete-position resolution counts; names do not prove spelling or affiliation on the voting date.
votersarray–Independent page for one recorded or intended position, preserving published ID order.

No examples provided.

euparl_get_procedure ~304

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.

NameTypeReqDescription
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
offsetinteger–Zero-based collection offset; default 0.
procedure_idstringyesProcedure YYYY-NNNN or YYYY/NNNN, optional letter suffix and (TYPE), known eli/dl/proc/ prefix or exact public procedure URI.
sectionstring–Default overview returns scalars and counts; choose a collection for complete paged items.
snapshotstring–Previous collection snapshot; required for local offset above 0, optional at offset 0.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
available_sectionsarray–Section counts on a found overview only.
capinteger–Effective whole-item page limit.
documentsarray–Selected deduplicated linked-document page sorted by document_id; present only for documents.
errorobject–Present when the call failed. Absent on success.
eventsarray–Selected event page in date order, undated events last and ties by id; present only for the events section.
foundboolean–Whether Parliament published procedure detail.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–Selected collection continuation; absent on overview or missing detail.
participantsarray–Selected historical participation page in date order, undated participations last and ties by id; present only for participants.
procedure_idstring–Normalized canonical procedure identifier.
process_typestring–Published procedure type.
referencestring–Exact published procedure reference.
sectionstring–Procedure retrieval section.
showninteger–Whole items shown on this partial page.
source_urlstring–Public procedure source URL.
stagestring–Published current procedure stage.
titleobject–Published procedure title in the actual selected language.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

euparl_list_procedures ~334

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.

NameTypeReqDescription
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
offsetinteger–Zero-based collection offset; default 0.
process_typestring–Optional procedure-type code from euparl_list_reference topic procedure_types; case-insensitive and whitespace-trimmed.
snapshotstring–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.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
errorobject–Present when the call failed. Absent on success.
itemsarray–Whole sparse procedure records on this page.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–Whole-item page metadata.
showninteger–Whole items shown on this partial page.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

euparl_list_questions ~398

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.

NameTypeReqDescription
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
modestring–Default list discovers questions; get requires question_id and forbids year and work_type.
offsetinteger–Zero-based collection offset; default 0.
question_idstring–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…
terminteger–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.
work_typestring–List-only question code from euparl_list_reference topic question_types; case-insensitive and whitespace-trimmed.
yearinteger–List-only four-digit question year.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
errorobject–Present when the call failed. Absent on success.
foundboolean–Get-only result; false only after complete citation resolution or missing published detail.
itemsarray–Whole sparse records on a list page; absent in get mode.
modestring–Executed question retrieval mode.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–List continuation metadata; absent in get mode.
questionobject–Question detail present only when a published record is found.
showninteger–Whole items shown on this partial page.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

euparl_list_reference ~349

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.

NameTypeReqDescription
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
offsetinteger–Zero-based collection offset; default 0.
organization_idsarray–Required nonempty list only for organizations; order and duplicates retained, with at most 20 looked up per page.
topicstringyesReference topic; organizations requires organization_ids, which other topics reject.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
errorobject–Present when the call failed. Absent on success.
itemsarray–Whole reference entries on this page.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–Whole-item page metadata.
showninteger–Whole items shown on this partial page.
topicstring–Requested reference topic.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

euparl_search_documents ~642

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.

NameTypeReqDescription
document_idstring–Get-only canonical work ID, eli/dl/doc/ prefix or exact public URI; no family restriction.
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
modestring–Default search discovers records; get requires document_id and rejects source and all search filters.
offsetinteger–Zero-based collection offset; default 0.
related_process_idstring–Adopted-texts-only procedure reference YYYY-NNNN, YYYY/NNNN(TYPE), known prefix or public URI.
sitting_datestring–Adopted-texts-only sitting date YYYY-MM-DD; start of range when sitting_date_end is supplied.
sitting_date_endstring–Adopted-texts-only inclusive range end YYYY-MM-DD; requires sitting_date and must not precede it.
sourcestring–Search-only family; omitted search defaults to adopted_texts. Omit entirely in get mode.
terminteger–Parliamentary term 0–10; adopted_texts and committee search only.
textstring–Adopted-texts-only keyword search in the requested language.
titlestring–Adopted-texts-only title search in the requested language.
work_typestring–Search-only family-specific code from euparl_list_reference topic document_types; case-insensitive and whitespace-trimmed.
yearinteger–Four-digit document year; adopted_texts and plenary search only.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
documentobject–Present only when get finds published detail.
errorobject–Present when the call failed. Absent on success.
foundboolean–Get-only publication result; false for missing or empty detail.
itemsarray–Whole sparse records on a search page; absent in get mode.
modestring–Executed retrieval mode.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–Search continuation metadata; absent in get mode.
showninteger–Whole items shown on this partial page.
sourcestring–Effective family in search mode; absent in generic get.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

euparl_search_meps ~563

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.

NameTypeReqDescription
countrystring–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.
genderstring–Supported gender code FEMALE, MALE, NAP, NKN, or NST, case-insensitive.
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
mandate_datestring–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_containsstring–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.
offsetinteger–Zero-based collection offset; default 0.
political_groupstring–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…
snapshotstring–Returned roster snapshot; required for offset above 0, optional at offset 0.
terminteger–Parliamentary term 0–10, exclusive with mandate_date; omitting both selects members in office today.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
errorobject–Present when the call failed. Absent on success.
itemsarray–Complete member records on the selected local page.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–Whole-item page metadata.
showninteger–Whole items shown on this partial page.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

euparl_search_speeches ~487

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.

NameTypeReqDescription
activity_typestring–Search-only code from euparl_list_reference topic activity_types; case-insensitive and whitespace-trimmed.
languagestring–Supported EU ISO-639-1 language, case-insensitive; default en; source text is never translated.
limitnumber–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…
modestring–Default search discovers speech activities; get requires speech_id and rejects search filters.
offsetinteger–Zero-based collection offset; default 0.
person_idstring–Search-only numeric MEP identifier, person/ prefix or exact public person URI.
sitting_datestring–Search-only sitting date YYYY-MM-DD; start date when a range end is supplied.
sitting_date_endstring–Search-only inclusive end date YYYY-MM-DD; requires sitting_date and cannot precede it.
speech_idstring–Get-only canonical activity ID, eli/dl/event/ prefix or exact public URI.
term––Search-only parliamentary term 9 or 10; omitted search defaults to 10. Omit in get mode.
textstring–Search-only keywords in the selected language; matching does not guarantee transcript output.
titlestring–Search-only published activity title keywords in the selected language.
NameTypeReqDescription
appliedFiltersobject–Actual normalized retrieval scope and filters.
availableboolean–Whether the selected source array was published, including a published empty array.
capinteger–Effective whole-item page limit.
errorobject–Present when the call failed. Absent on success.
foundboolean–Get-only publication result; false for missing or empty detail.
itemsarray–Whole speech activity records on the search page; absent in get mode.
modestring–Executed speech retrieval mode.
noticestring–Publication, language fallback, empty-result or continuation guidance.
pageobject–Search continuation metadata; absent in get mode.
showninteger–Whole items shown on this partial page.
speechobject–Published activity detail when get succeeds.
totalCountinteger–Exact count only when published or computed over a complete collection.
truncatedboolean–True when this page returns only part of the selected collection.

No examples provided.

Install

How do I install the io.github.cyanheads/eu-parliament-mcp-server server?

io.github.cyanheads/eu-parliament-mcp-server is a hosted endpoint at https://eu-parliament.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · eu-parliament.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-eu-parliament-mcp-server 'https://eu-parliament.caseyjhand.com/mcp'
Common questions

What is the io.github.cyanheads/eu-parliament-mcp-server server?

io.github.cyanheads/eu-parliament-mcp-server is listed in the public MCP registry as io.github.cyanheads/eu-parliament-mcp-server. Track European Parliament procedures, MEPs, votes, documents, speeches, and questions. This page covers its hosted endpoint (https://eu-parliament.caseyjhand.com/mcp).

Is the io.github.cyanheads/eu-parliament-mcp-server server safe to use?

io.github.cyanheads/eu-parliament-mcp-server scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/eu-parliament-mcp-server server expose?

io.github.cyanheads/eu-parliament-mcp-server exposes 9 tools: euparl_list_reference, euparl_list_procedures, euparl_get_procedure, euparl_search_documents, euparl_search_speeches, and 4 more. Their descriptions and schemas cost roughly 4,245 tokens of context every time the server is loaded.

Does the io.github.cyanheads/eu-parliament-mcp-server server require authentication?

No. We connected to io.github.cyanheads/eu-parliament-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/eu-parliament-mcp-server server still maintained?

io.github.cyanheads/eu-parliament-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.