Skip to content

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

io.github.cyanheads/eu-parliament-mcp-servercyanheadsstreamable-httpv0.1.2Scanned

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

9 tools: 9 only read.

Tools: 0 delete, 0 irreversible, 0 write, 9 read.
  • Reads private data · 4
  • Reads text others write · 9
  • Can send data out · 0
  • No findings

Anlyon alternative

Run the operations that matter as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

9 tools

Only reads 9Show 9 read-only tools
  • euparl_get_mepRead an MEP identity or membership history including published committee, delegation, and political-group records.Reads text others writeNo findings

    Why it is in this group

    • The name "euparl_get_mep" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_get_plenary_votesDiscover sittings with mode sittings and year; default decisions pages compact summaries with labels and separate decided-on and recording document relations for sitting_id.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "euparl_get_plenary_votes" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Discover sittings with mode sittings and year; default decisions pages compact summaries with labels and separate decided-on and recording document relations for sitting_id. Optional document_id filters decisions before paging by exact document identity or hyphen-boundary descendant. Mode decision requires decision_id and returns one rich record with reference text and commentary; it rejects nondefault paging and snapshot. Optional decision-only 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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_get_procedureRead a procedure title, stage, events, participants, or linked parliamentary documents.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "euparl_get_procedure" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "read" and "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_list_proceduresList procedure references by procedure type.Reads text others writeNo findings

    Why it is in this group

    • The name "euparl_list_procedures" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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. Search exposes at most 10000 results; continue with page.next_offset when present, otherwise narrow process_type.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_list_questionsList parliamentary questions by year and work_type or retrieve metadata, source-file links and published answers with mode get and question_id.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "euparl_list_questions" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "file": it reads files.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_list_referenceList parliamentary codes, identifier formats, historical committees and political groups, or coverage limitations.Reads text others writeNo findings

    Why it is in this group

    • The name "euparl_list_reference" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    List parliamentary codes, identifier formats, historical committees and political groups, or coverage limitations. Choose organizations with organization_ids to resolve supported membership organization IDs into published names and dates; ordered per-item found false means no detail was published. Organization lookups page the supplied IDs with an effective maximum of 20 per call; repeat the same ID list with page.next_offset. Other topics retain historical coverage and an effective maximum of 100. These lists do not require snapshots; missing end dates do not establish current status.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_search_documentsSearch adopted texts, committee documents, or plenary documents, then retrieve metadata and source-file links with mode get and document_id.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "euparl_search_documents" says "search": a word for reading.

    What it can reach

    • private-dataThe name "euparl_search_documents" says "search" and "document": it reads documents.
    • private-dataThe description's first sentence says "search" and "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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. 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 texts expose at most 10000 search results; continue with page.next_offset when present, otherwise narrow supported filters.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_search_mepsFind MEPs by name, country, political group, gender, or parliamentary term.Reads text others writeNo findings

    Why it is in this group

    • The name "euparl_search_meps" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Find MEPs by name, country, political group, gender, or parliamentary term. Omitted term selects members in office today; explicit term selects that published term roster. Name matching requires every normalized token after case, diacritic, and punctuation normalization over the complete roster before paging. Country and group describe roster context, never voting-date affiliation. 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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • euparl_search_speechesSearch speech activities in parliamentary term 9 or 10, default 10, or retrieve one with mode get and speech_id.Reads text others writeNo findings

    Why it is in this group

    • The name "euparl_search_speeches" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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. Search exposes at most 10000 results; continue with page.next_offset when present, otherwise narrow text, title, person_id, activity_type or sitting dates.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data4
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

No check matched anything in these tool definitions. That is not a safety guarantee.

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.1.2. Values in angle brackets are yours to fill in.

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

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__eu-parliament__euparl_list_reference",
      "mcp__eu-parliament__euparl_list_procedures",
      "mcp__eu-parliament__euparl_get_procedure",
      "mcp__eu-parliament__euparl_search_documents",
      "mcp__eu-parliament__euparl_search_speeches",
      "mcp__eu-parliament__euparl_search_meps",
      "mcp__eu-parliament__euparl_get_mep",
      "mcp__eu-parliament__euparl_get_plenary_votes",
      "mcp__eu-parliament__euparl_list_questions"
    ],
    "ask": [],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as eu-parliament. Review it before you use it.

Capability tags behind 9 rules
  • mcp__eu-parliament__euparl_list_reference untrusted-input
  • mcp__eu-parliament__euparl_list_procedures untrusted-input
  • mcp__eu-parliament__euparl_get_procedure private-data, untrusted-input
  • mcp__eu-parliament__euparl_search_documents private-data, untrusted-input
  • mcp__eu-parliament__euparl_search_speeches untrusted-input
  • mcp__eu-parliament__euparl_search_meps untrusted-input
  • mcp__eu-parliament__euparl_get_mep untrusted-input
  • mcp__eu-parliament__euparl_get_plenary_votes private-data, untrusted-input
  • mcp__eu-parliament__euparl_list_questions private-data, untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.github.cyanheads/eu-parliament-mcp-server/verify?hash=8f3de33c1ab33465ae5f690fbfd8032fbe7976988b3aa9db3dc136ba8448e954" | jq -e '.changed == false'

Pinned hash 8f3de33c1ab3, from Oct 26, 2026, 04:17 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.github.cyanheads/eu-parliament-mcp-server/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.github.cyanheads/eu-parliament-mcp-server
[![anlyon.dev](https://anlyon.dev/badge/io.github.cyanheads/eu-parliament-mcp-server.svg)](https://anlyon.dev/servers/io.github.cyanheads/eu-parliament-mcp-server)

Source: MCP Registry · repository. Synced Oct 26, 2026, 04:17 UTC.