Skip to main content

eu-parliament-mcp-server

io.github.cyanheads/eu-parliament-mcp-serverVersion 0.2.3

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

Status

Responds575 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:48 UTC
Latency
575 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://eu-parliament.caseyjhand.com/mcpResponds575 ms
No sign-in

Claude Code

claude mcp add --transport http eu-parliament-mcp-server https://eu-parliament.caseyjhand.com/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: eu-parliament-mcp-server
Remote MCP server URL: https://eu-parliament.caseyjhand.com/mcp

Cursor

{
  "mcpServers": {
    "eu-parliament-mcp-server": {
      "url": "https://eu-parliament.caseyjhand.com/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"eu-parliament-mcp-server","type":"http","url":"https://eu-parliament.caseyjhand.com/mcp"}'
Streamable HTTP
npm: @cyanheads/eu-parliament-mcp-server 0.2.3
Package only

npm (npx)

claude mcp add eu-parliament-mcp-server -- npx -y @cyanheads/eu-parliament-mcp-server@0.2.3
Streamable HTTP
npm: @cyanheads/eu-parliament-mcp-server 0.2.3
Package only

npm (npx)

claude mcp add eu-parliament-mcp-server -- npx -y @cyanheads/eu-parliament-mcp-server@0.2.3

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

9 tools

Tools of eu-parliament-mcp-server
Read-only
Idempotent
Open world
euparl_get_mepRead an MEP identity or membership history including published committee, delegation, and political-group records. Default section overview returns identity, membership_count and membership_classifications (count per classification code); section memberships pages full membership records, latest start_date first, filtered by classification and active_on before paging. 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.Not declaredYesYesYes
euparl_get_plenary_votesDiscover sittings with mode sittings and year. Mode vote_items lists what a sitting voted on: its PLENARY_VOTE_RESULTS vote items in published order, each with its title label, based-on documents, procedures, recording documents and decision_count, from one sitting-wide read; pass a vote_item_id to decisions mode for its decisions. Vote items on sittings before 2024 publish no decision links, so decision_count is absent there. Default decisions pages compact summaries with labels, separate decided-on, part-of and recording document relations, and vote items for sitting_id. Vote items, decisions and voters return the requested whole-item count or remaining rows without an output-size cap. Optional label_contains, in decisions or vote_items, selects a literal selected-language substring of decision labels (report citations, amendments) or vote item titles, ignoring case, repeated whitespace and dash style without altering published text or establishing a final vote; in a decision label a document_ids entry is cited with its prefix and term joined and the year after the number, so A-9-2022-0116 is A9-0116/2022 and the joint motion RC-9-2022-0257 is RC-B9-0257/2022. 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 joinsNot declaredYesYesYes
euparl_get_procedureRead 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.Not declaredYesYesYes
euparl_list_proceduresList 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.Not declaredYesYesYes
euparl_list_questionsList parliamentary questions by year and work_type or retrieve metadata, addressed institutions, original languages, 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.Not declaredYesYesYes
euparl_list_referenceList 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; a question's addressee_ids do not resolve here (COM is the Communist and Allies Group). 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.Not declaredYesYesYes
euparl_search_documentsSearch 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. Adopted-text rows carry title in the requested language, date and procedure_ids; committee and plenary rows carry identity only. An adopted-text page holds at most 100 rows. 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.Not declaredYesYesYes
euparl_search_mepsFind MEPs by name, person ID, 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. mep_ids names the person IDs other tools return (voter mep_id, participant person_ids, question creator person/ references) in one call; requested IDs absent from the roster come back in unmatched_mep_ids. Country and group are published for the selected roster, never inferred for another date; term rosters publish neither. 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.Not declaredYesYesYes
euparl_search_speechesSearch 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; set include_text for the published text of each speech with its speaker line and xml:lang tags, title and text then only in the selected language, and at most 100 search rows per call. Every row lists original_languages. 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.Not declaredYesYesYes

Details

Registry status
Active
Published
Nov 13, 2026
Updated
Nov 13, 2026
Website
Not given
Categories (suggested)
DocumentsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing