eu-parliament-mcp-server
io.github.cyanheads/eu-parliament-mcp-serverVersion 0.2.3Track European Parliament procedures, MEPs, votes, documents, speeches, and questions.
Status
Responds575 msAnswered our handshake without sign-in.- 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 msNo sign-in
Claude Code
claude mcp add --transport http eu-parliament-mcp-server https://eu-parliament.caseyjhand.com/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: eu-parliament-mcp-server
Remote MCP server URL: https://eu-parliament.caseyjhand.com/mcpCursor
{
"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.3Package only
npm (npx)
claude mcp add eu-parliament-mcp-server -- npx -y @cyanheads/eu-parliament-mcp-server@0.2.3Streamable HTTP
npm: @cyanheads/eu-parliament-mcp-server 0.2.3Package only
npm (npx)
claude mcp add eu-parliament-mcp-server -- npx -y @cyanheads/eu-parliament-mcp-server@0.2.3Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
9 tools
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 declared | Yes | Yes | Yes |
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 joins | Not declared | Yes | Yes | Yes |
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 declared | Yes | Yes | Yes |
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 declared | Yes | Yes | Yes |
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 declared | Yes | Yes | Yes |
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 declared | Yes | Yes | Yes |
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 declared | Yes | Yes | Yes |
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 declared | Yes | Yes | Yes |
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 declared | Yes | Yes | Yes |
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