# io.github.cyanheads/uk-parliament-mcp-server (remote · uk-parliament.caseyjhand.com)

Search UK Parliament bills, members, votes, Hansard, written questions, and committees.

- Trust score: 76/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `uk-parliament.caseyjhand.com`: 76/100 (this document), [markdown](https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/uk-parliament.md), [page](https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/uk-parliament)
- npm · `@cyanheads/uk-parliament-mcp-server`: 72/100, [markdown](https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/cyanheads-uk-parliament-mcp-server.md), [page](https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/cyanheads-uk-parliament-mcp-server)

## Channel facts

- Endpoint: `https://uk-parliament.caseyjhand.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.2`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 83/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - 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.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 54/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3342 tokens (~371/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 33/100
  - Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 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.
- **Tool Safety**: 100/100
  - 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 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

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

io.github.cyanheads/uk-parliament-mcp-server is a hosted endpoint at https://uk-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.

### Claude

```bash
claude mcp add --transport http cyanheads-uk-parliament-mcp-server 'https://uk-parliament.caseyjhand.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "cyanheads-uk-parliament-mcp-server": {
      "url": "https://uk-parliament.caseyjhand.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "cyanheads-uk-parliament-mcp-server": {
      "type": "http",
      "url": "https://uk-parliament.caseyjhand.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.cyanheads-uk-parliament-mcp-server]
url = "https://uk-parliament.caseyjhand.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-uk-parliament-mcp-server": {
      "type": "remote",
      "url": "https://uk-parliament.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add cyanheads-uk-parliament-mcp-server --url 'https://uk-parliament.caseyjhand.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  cyanheads-uk-parliament-mcp-server:
    url: "https://uk-parliament.caseyjhand.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "cyanheads-uk-parliament-mcp-server": {
      "Transport": "http",
      "Url": "https://uk-parliament.caseyjhand.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add cyanheads-uk-parliament-mcp-server -t streamable-http -u 'https://uk-parliament.caseyjhand.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "cyanheads-uk-parliament-mcp-server": {
      "type": "http",
      "url": "https://uk-parliament.caseyjhand.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 76, +1)

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

### 2026-11-03 (score 75, +1)

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

### 2026-11-01 (score 74, +1)

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

### 2026-10-30 (score 73, +1)

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

### 2026-10-28 (score 72, +1)

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

### 2026-10-27 (score 71, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-26 (score 71)

First indexed and scored.

## MCP tools (9)

### `ukparl_lookup_reference` (~172 tokens)

Ukparl Lookup Reference

Resolve Parliament filter IDs and inspect source coverage before searching. Use identifiers for ID namespaces and required selectors, coverage for Hansard date limitations, or a named reference topic for filter IDs. Follow opaque collection cursors with the same filters; use contentCursor to reconstruct an oversized selected payload.

Input parameters:

- `contentCursor` (string): Opaque same-selection recursive content continuation.
- `cursor` (string): Opaque collection cursor; repeat the same normalized filters.
- `house` (string): Commons or Lords; required for active parties.
- `limit` (integer): Requested whole reference rows; positive safe integer, default 10, effective cap 20.
- `nameContains` (string): Case-insensitive AND tokens over the complete named reference set.
- `topic` (string, required): Reference topic or static identifier/coverage guide.

Output parameters:

- `applied` (object): Normalized selection applied by this call.
- `cap` (integer): Effective maximum whole reference rows per call.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `coverage` (object): Static typed historical coverage facts and official sources.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `error` (object): Present when the call failed. Absent on success.
- `identifiers` (object): Static typed identifier namespaces and supported selections.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Complete named reference rows in the selected page.
- `nameContains` (string): Complete normalized AND-token filter, retained through content continuation.
- `notice` (string): Licence, coverage and workload notices.
- `page` (object): Whole reference-row pagination.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `requestedLimit` (integer): Caller limit before an effective cap was applied.
- `retrieval` (string): Same-tool retrieval instruction.
- `shown` (integer): Actual whole reference rows selected for delivery.
- `sources` (array): All requests that supplied the complete reference set.
- `topic` (string): Selected reference topic on a full payload.
- `totalCount` (integer): Known complete selected guide or reference row count.
- `truncated` (boolean): Further reference rows remain after the selected page.

### `ukparl_search_bills` (~366 tokens)

Ukparl Search Bills

Search Westminster bill summaries by title, current or originating House, session, sponsoring member, department, reference stage, bill type or status, with optional official ordering. Use ukparl_lookup_reference for stage/type/department IDs and ukparl_get_bill for complete selected records. Department IDs are distinct from answering-body IDs. inAmendableStage=true restricts to amendable stages; false is unrestricted. No session or date scope is inferred. Follow collection cursors with the same filters; use contentCursor to reconstruct an oversized item.

Input parameters:

- `billTypeIds` (array): Reference bill types.
- `contentCursor` (string): Opaque same-selection lossless content continuation.
- `cursor` (string): Opaque collection continuation; preserve filters.
- `departmentId` (string): Members department ID from ukparl_lookup_reference topic=departments; distinct from answering-body IDs.
- `house` (string): Current Commons or Lords House.
- `inAmendableStage` (boolean): True restricts to amendable stages; false applies no restriction.
- `isDefeated` (boolean): Filter by defeated state, including false.
- `isWithdrawn` (boolean): Filter by withdrawn state, including false.
- `limit` (integer): Requested bills; positive safe integer, default 10, effective cap 20.
- `memberId` (string): Sponsoring member identifier.
- `originatingHouse` (string): Originating Commons or Lords House; omission includes all.
- `query` (string): Bill title search text.
- `sessionId` (string): Session identifier discovered in bill records.
- `sortOrder` (string): Official ordering; omission preserves the source default.
- `stageIds` (array): Reference stages, distinct from bill-specific stage IDs.

Output parameters:

- `applied` (object): Normalized filters; no implicit current-session scope.
- `cap` (integer): Effective per-call collection limit.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `error` (object): Present when the call failed. Absent on success.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Complete source bill summaries on this page.
- `notice` (string): Licence and empty/workload notices.
- `page` (object): Actual whole-item pagination.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `query` (string): Complete normalized query text, also reconstructed through content continuation.
- `requestedLimit` (integer): Caller limit before clamping.
- `retrieval` (string): Same-tool retrieval instruction.
- `shown` (integer): Actual whole records emitted or selected for lossless reconstruction.
- `totalCount` (integer): Source total matches.
- `truncated` (boolean): Further source matches remain after this selected page.

### `ukparl_get_bill` (~306 tokens)

Ukparl Get Bill

Retrieve a Westminster bill overview or select stages, stage, publications, amendments, amendment, motions or motion. Stage/amendment/motion selections require the bill-specific billStageId from section=stages; singular amendment/motion also require itemId from their parent collection. Use amendmentId for amendment retrieval and motion.id for motions. Filter only the amendments collection by amendmentNumber, decision or sponsoring memberId. Collection selectors paginate whole records. Overview leaves publications unchecked; select publications to discover actual supplied legislation.gov.uk statute links. Follow contentCursor with the original selection to reconstruct oversized records.

Input parameters:

- `amendmentNumber` (string): Published amendment number, retaining letter suffixes; amendments collection only.
- `billId` (string, required): Parent bill identifier from ukparl_search_bills.
- `billStageId` (string): Bill-specific stage occurrence ID, required for stage/amendment/motion selections.
- `contentCursor` (string): Lossless same-selection content continuation.
- `cursor` (string): Collection continuation; collections only.
- `decision` (string): Official amendment decision filter; amendments collection only.
- `itemId` (string): Amendment amendmentId or ping-pong motion.id; singular selections only.
- `limit` (integer): Collection records; positive safe integer, default 20, effective cap 50; collections only.
- `memberId` (string): Sponsoring member ID; amendments collection only.
- `section` (string): Selected bill section; overview by default.

Output parameters:

- `applied` (object): Normalized selection and actual source.
- `billId` (string): Parent bill ID.
- `cap` (integer): Effective per-call collection limit.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `detailLevel` (string): Selected source completeness.
- `error` (object): Present when the call failed. Absent on success.
- `found` (boolean): Whether the selected entity exists.
- `guidance` (string): Same-server recovery for an entity miss.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Whole selected collection records.
- `legislationHandoff` (object): Authoritative statute handoff.
- `notice` (string): Licence, workload and selected empty-collection notices.
- `page` (object): Actual emitted collection continuation.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `record`: Complete selected record.
- `requestedLimit` (integer): Caller limit before clamping.
- `retrieval` (string): Same-tool retrieval instruction.
- `section` (string): Selected bill section.
- `shown` (integer): Actual whole records emitted or selected for lossless reconstruction.
- `source` (object): Selected request provenance.
- `totalCount` (integer): Known selected collection total.
- `truncated` (boolean): Further source records remain after this selected page.

### `ukparl_search_members` (~252 tokens)

Ukparl Search Members

Find MPs and peers by name, location or constituency, party, House, and current or historical membership. currentOnly=false includes current and former members. asOf selects historical membership and accepts name only, without House, party or location filters. Search results preserve latest profile fields; retrieve sections with ukparl_get_member. Follow opaque cursors with unchanged filters and use contentCursor for oversized records.

Input parameters:

- `asOf` (string): Historical membership on YYYY-MM-DD; only name and pagination may accompany it.
- `constituency` (string): Source location or constituency text, not exact equality.
- `contentCursor` (string): Same-selection lossless content continuation.
- `currentOnly` (boolean): True restricts to current members; false includes former and current.
- `cursor` (string): Opaque collection cursor for the same filters.
- `house` (string): Filter most recent House; unavailable with asOf.
- `limit` (integer): Requested whole members; default 10, cap 20; safe over-cap integers are clamped.
- `name` (string): Name substring; omission searches all names.
- `partyId` (string): Party ID; active reference parties do not exhaust historical IDs.

Output parameters:

- `applied` (object): Effective source and workload; full filters stay in /query.
- `cap` (integer): Effective member workload cap.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `error` (object): Present when the call failed. Absent on success.
- `guidance` (string): Empty-result recovery guidance.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Whole summary member records.
- `mode` (string): Modern or dated historical search.
- `notice` (string): Licence, historical scope and workload notices.
- `page` (object): Collection continuation by actually emitted records.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `query` (object): Complete normalized filters and membership-date semantics.
- `requestedLimit` (integer): Original request when capped.
- `retrieval` (string): Same-tool retrieval instruction.
- `shown` (integer): Actual whole members emitted.
- `source` (object): Actual official search request.
- `totalCount` (integer): Source total before paging.
- `truncated` (boolean): Further whole member results remain.

### `ukparl_get_member` (~226 tokens)

Ukparl Get Member

Retrieve a member profile, roles, committee seats, official contact information, registered interests or recorded voting history. Roles without category lists available biography categories; select category to page whole periods. Interests and voting require an explicit House. Committee person IDs differ from member IDs. Voting uses native 20-row pages and reports recorded lobby and teller facts, without lifetime participation metrics. Follow collection cursors with unchanged selectors; use contentCursor to reconstruct oversized records.

Input parameters:

- `category` (string): Roles only: select one complete biography collection.
- `contentCursor` (string): Opaque same-selection lossless content continuation.
- `cursor` (string): Opaque whole-item collection continuation with unchanged selectors.
- `house` (string): Required for interests and voting; forbidden for other sections.
- `limit` (integer): Requested whole rows; default 20, cap 50 for local histories. Voting uses native 20-row pages independently of limit.
- `memberId` (string, required): Members API decimal identifier from ukparl_search_members.
- `section` (string): Selected member subsection; default profile.

Output parameters:

- `applied` (object): Normalized selectors, source and effective workload.
- `cap` (integer): Effective whole-item workload cap.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `error` (object): Present when the call failed. Absent on success.
- `found` (boolean): Whether the parent member exists.
- `guidance` (string): Absence, uncertainty or same-server follow-up guidance.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Whole selected source records tagged by kind.
- `links`: Selected source relationship links.
- `memberId` (string): Canonical Members API identifier.
- `membershipContexts` (array): Source person metadata, including people with unavailable or empty membership collections.
- `nativePage` (integer): Actual requested source voting page, starting at one.
- `nativePageSize` (integer): Native voting page size, independent of caller limit.
- `notice` (string): Licence, coverage and workload notices.
- `page` (object): Continuation by actual emitted items.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `record`: Whole member profile or explicit role category outline.
- `requestedLimit` (integer): Caller limit when a cap or native-page rule applies.
- `retrieval` (string): Same-tool retrieval instruction.
- `section` (string): Selected member subsection.
- `shown` (integer): Actual whole items emitted in this collection page.
- `source` (object): Actual selected source request.
- `totalCount` (integer): Complete selected collection count when known.
- `truncated` (boolean): Further whole collection items remain.

### `ukparl_search_divisions` (~392 tokens)

Ukparl Search Divisions

Search official Commons or Lords division summaries, or use detail, voters or party_totals with a divisionId from the same House. Search supports title/number text, member and inclusive division dates; member searches include memberVote with the recorded House-native lobby and teller flag. Detail preserves complete metadata and teller identities, with roster selectors for voters mode. Voters can filter exact source party labels and House-compatible lobbies. not_recorded means only the source list, never abstention. Party totals count listed non-tellers and tellers separately from official headline counts. Follow collection cursors with unchanged filters; reconstruct oversized content using contentCursor.

Input parameters:

- `contentCursor` (string): Opaque same-selection lossless content continuation, separate from collection cursor.
- `cursor` (string): Opaque search/voters collection continuation; repeat the same filters.
- `divisionId` (string): Division ID in the selected House; required outside search.
- `endDate` (string): Inclusive source division-date upper bound; search only.
- `house` (string, required): Selected House and division ID namespace.
- `limit` (integer): Positive safe integer; search default 5/cap 10, voters default 20/cap 50; detail and party_totals do not paginate.
- `lobby` (string): Voters only: Commons aye/no/not_recorded or Lords content/not_content.
- `memberId` (string): Members API ID; search returns this member's recorded lobby and teller flag, including divisions where they were a teller.
- `mode` (string): Operation; defaults to search; accepts case-insensitive canonical mode names.
- `party` (string): Exact case-insensitive source party label; voters only, not a party ID.
- `query` (string): Division title or number search text; search mode only.
- `startDate` (string): Inclusive source division-date lower bound; search only.

Output parameters:

- `applied` (object): Required normalized operation and actual workload metadata.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `error` (object): Present when the call failed. Absent on success.
- `found` (boolean): Selected division existence; absent in search mode.
- `guidance` (string): Actionable recovery for a missing division or unavailable complete roster.
- `house` (string): House scoping division IDs.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Explicit search summaries without full roster arrays.
- `mode` (string): Selected division operation.
- `notice` (string): Licence, coverage, empty-result and workload notices.
- `page` (object): Actual emitted whole-row collection continuation.
- `partyTotals` (array): Complete roster-derived party/lobby non-teller and teller counts.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `record` (object): Complete selected division metadata, teller identities and roster selectors.
- `requestedLimit` (integer): Caller limit when clamped to the operation cap.
- `retrieval` (string): Same-tool retrieval instruction.
- `selection` (object): Complete normalized filters retained through content delivery.
- `source` (object): Actual selected API request provenance.
- `totalCount` (integer): Known selected collection total; search arrays do not supply a total.
- `truncation` (object): Further collection rows remain; follow page.nextCursor.
- `voters` (array): Whole deduplicated selected voter rows, including tellers.

### `ukparl_search_hansard` (~305 tokens)

Search spoken Hansard

Search spoken Westminster Hansard contributions by topic, member, House, date or numeric debateSectionId. Returns full source contribution text where supplied, including HTML; previews are labelled summaries. Repeat with a returned debateSectionId to search that section, which does not establish an entire debate transcript. Historical completeness is not guaranteed, including the 2004–2006 website warning despite some API records. Use ukparl_lookup_reference topic=coverage for archive guidance. Follow collection cursors unchanged and contentCursor for lossless oversized contributions; retry timeouts with shorter date windows.

Input parameters:

- `contentCursor` (string): Opaque lossless content continuation; preserve original selection and collection cursor.
- `cursor` (string): Opaque collection continuation; repeat the same filters and effective limit.
- `debateSectionId` (string): Returned numeric debateSectionId, distinct from external debate IDs.
- `endDate` (string): Inclusive latest sitting date, real YYYY-MM-DD; must not precede startDate.
- `house` (string): Commons or Lords; exact official House aliases are accepted.
- `limit` (integer): Requested whole contributions; default 5, effective cap 20 with notice.
- `memberId` (string): Members API identifier discovered with ukparl_search_members.
- `query` (string): Spoken contribution search text; no date range is inferred.
- `startDate` (string): Inclusive earliest sitting date, real YYYY-MM-DD; no inferred archive cutoff.

Output parameters:

- `applied` (object): Normalized filters and actual workload.
- `cap` (integer): Actual collection workload cap.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `correctionsResultCount` (integer): Source CorrectionsResultCount metadata.
- `coverage` (object): Historical source facts; samples never establish complete coverage.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `divisionsResultCount` (integer): Source DivisionsResultCount metadata.
- `error` (object): Present when the call failed. Absent on success.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Whole Spoken contributions in source search order.
- `notice` (string): Licence, coverage, missing-text, empty-result and clamped-limit guidance.
- `page` (object): Actual emitted whole-item continuation, independent of content delivery.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `query` (string): Complete normalized search text, reconstructable during content delivery.
- `requestedLimit` (integer): Original request when above the workload cap.
- `retrieval` (string): Same-tool retrieval instruction.
- `searchTerms`: Source parsed terms, including explicit null.
- `shown` (integer): Whole contributions emitted or selected for reconstruction.
- `source` (object): Exact official Spoken request provenance, including empty pages.
- `spokenResultCount` (integer): Source SpokenResultCount, distinct from total matches.
- `totalCount` (integer): Source TotalResultCount.
- `truncated` (boolean): Further whole contributions remain; follow the collection cursor.
- `writtenResultCount` (integer): Source WrittenResultCount metadata.

### `ukparl_search_questions` (~436 tokens)

Search written questions

Search Westminster written questions and answer previews by text, exact UIN, asking or answering member, House, answering body, answer state and dates. An undated UIN returns candidates across sessions; narrow with tabling dates and retrieve mode=detail with a returned questionId for complete question and answer HTML, corrections and attachment links. A UIN is not a questionId and never determines House. Search includes all sessions and withdrawn questions. Follow collection cursors unchanged; use contentCursor for lossless oversized answers.

Input parameters:

- `answered` (boolean): True answered, false unanswered, omission either; search only.
- `answeredFrom` (string): Inclusive answer start YYYY-MM-DD; search only.
- `answeredTo` (string): Inclusive answer end YYYY-MM-DD; search only.
- `answeringBodyIds` (array): Up to 20 answering-body IDs resolved through ukparl_lookup_reference; search only.
- `answeringMemberId` (string): Answering Members API ID; search only, independent of asking memberId.
- `contentCursor` (string): Opaque lossless content continuation for this same selection.
- `cursor` (string): Opaque search continuation; repeat unchanged filters.
- `house` (string): Commons or Lords; search only.
- `limit` (integer): Search page size, default 10, cap 20; larger safe integers are capped. Omit in detail.
- `memberId` (string): Asking Members API ID; search only.
- `mode` (string): Search previews or retrieve one complete question.
- `query` (string): Question or answer content terms; search only.
- `questionId` (string): Positive decimal Questions API ID required in detail; UIN is not this ID.
- `tabledFrom` (string): Inclusive tabling start YYYY-MM-DD; search only.
- `tabledTo` (string): Inclusive tabling end YYYY-MM-DD; search only.
- `uin` (string): Exact UIN lookup string, such as 36068 or HL1234; preserves leading zeros. Search only; combine with tabling dates to narrow reused UINs.

Output parameters:

- `applied` (object): Effective filters, explicit upstream scope and date semantics.
- `cap` (integer): Effective search page-size cap.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `error` (object): Present when the call failed. Absent on success.
- `filters` (object): Complete normalized selection filters.
- `found` (boolean): Detail lookup success; false requires guidance.
- `guidance` (string): Same-tool recovery for missing or empty selections.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Selected search page; never automatically hydrated.
- `mode` (string): Selected question operation.
- `notice` (string): Licence, preview and workload notices.
- `page` (object): Whole-question search continuation.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `questionId` (string): Selected Questions API ID.
- `record` (object): Complete selected question including answer HTML and attachments metadata.
- `requestedLimit` (integer): Original page-size request when capped.
- `retrieval` (string): Same-tool retrieval instruction.
- `shown` (integer): Actually emitted whole search results.
- `source` (object): Actual selected official request.
- `total` (integer): Upstream total when known.
- `truncated` (boolean): Further whole search results remain.

### `ukparl_get_committee` (~617 tokens)

Get committees and evidence

Find Westminster committees with mode=search, then use committeeId for detail, members, inquiries or publications. Inquiries returns every committee business type, labelled by isInquiry; use businessId with mode=inquiry for complete business detail or to filter publications. Use publicationId with mode=publication for complete report/publication metadata and source links. Use mode=evidence with businessId and evidenceType=written|oral to list evidence; mode=evidence_detail requires evidenceId and evidenceType in the same namespace. Memberships retain all role periods; personId is distinct from Members API memberId. No document downloads or text extraction. Follow cursors with unchanged filters; contentCursor retrieves oversized records losslessly. Typed entities retain sourcePath relationships to reconstruct nested source metadata.

Input parameters:

- `acceptingEvidence` (boolean): Inquiries only: true selects accepting businesses; false leaves source selection unrestricted.
- `businessId` (string): Business ID required for inquiry and evidence; optional additional publication filter.
- `committeeId` (string): Committee ID required for detail, members and publications; optional for inquiries to discover businesses across committees.
- `contentCursor` (string): Opaque same-selection content continuation; reconstruct records before advancing collection cursor.
- `cursor` (string): Opaque collection continuation; repeat unchanged filters and effective limit.
- `evidenceId` (string): Evidence detail ID, scoped by evidenceType.
- `evidenceType` (string): Required for evidence list/detail; written and oral IDs are distinct.
- `house` (string): Commons, Lords or Joint, case-insensitive; exact House of Commons/Lords aliases also accepted. Search only.
- `limit` (integer): Collection size: search default 10 cap 20; nested default 20 cap 50. Safe over-cap values clamp. Omit for singular modes.
- `membership` (string): Members mode only, default all; filters role-period membership status.
- `mode` (string): Search, committee detail, members, business list/detail, publication list/detail or written/oral evidence list/detail.
- `openedFrom` (string): Inquiries opened on/after this ISO date.
- `openedTo` (string): Inquiries opened on/before this ISO date.
- `publicationId` (string): Publication ID required for publication detail.
- `publicationTypeIds` (array): Publications only: positive publication type IDs, serialized as repeated parameters.
- `publishedFrom` (string): Publications starting on/after this ISO date.
- `publishedTo` (string): Publications starting on/before this ISO date.
- `query` (string): Search terms for search, inquiries or publications; latter two require at least two characters.
- `sortOrder`: Inquiries: DateOpenedNewest|DateOpenedOldest|PublicationDateAscending|PublicationDateDescending. Publications: PublicationDateAscending|PublicationDateDescending|ResponseDateAscending|ResponseDateDes…
- `status`: Search: Current|Former|All. Inquiries: Open|Closed. Omitted uses source default.

Output parameters:

- `applied` (object): Effective operation, page size and explicit source visibility.
- `cap` (integer): Maximum collection workload for this mode.
- `collectionPage` (object): Collection continuation; reconstruct the outlined selected payload before following it.
- `contentPage` (object): Lossless recursive content continuation.
- `delivery` (string): Full selected payload, child outline, or JSON fragment.
- `error` (object): Present when the call failed. Absent on success.
- `filters` (object): Complete normalized caller selection.
- `found` (boolean): Singular lookup result; false requires guidance.
- `guidance` (string): Recovery for empty or missing selections.
- `identity` (object): Stable selected-record identifiers retained during content retrieval.
- `items` (array): Selected whole collection items.
- `mode` (string): Selected committee operation.
- `notice` (string): Licence, namespace, business and document-access notices.
- `page` (object): Whole-record collection continuation.
- `provenance`: Selected response provenance retained during content retrieval; source notices remain in the reconstructed payload.
- `record` (object): Complete selected source record with typed relationship pointers.
- `requestedLimit` (integer): Original page-size request when capped.
- `retrieval` (string): Same-tool retrieval instruction.
- `shown` (integer): Actually emitted whole collection records.
- `source` (object): Actual selected official request provenance.
- `sourcePage` (object): Source collection envelope metadata.
- `total` (integer): Source total collection records.
- `truncated` (boolean): Further whole collection records remain.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/uk-parliament#diagnostics

## Score history

- 2026-11-05: 76
- 2026-11-04: 75
- 2026-11-03: 75
- 2026-11-02: 74
- 2026-11-01: 74
- 2026-10-31: 73
- 2026-10-30: 73
- 2026-10-29: 72
- 2026-10-28: 72
- 2026-10-27: 71
- 2026-10-26: 71

## Common questions

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

io.github.cyanheads/uk-parliament-mcp-server is listed in the public MCP registry as io.github.cyanheads/uk-parliament-mcp-server. Search UK Parliament bills, members, votes, Hansard, written questions, and committees. This page covers its hosted endpoint (https://uk-parliament.caseyjhand.com/mcp).

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

io.github.cyanheads/uk-parliament-mcp-server scores 76 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/uk-parliament-mcp-server server expose?

io.github.cyanheads/uk-parliament-mcp-server exposes 9 tools: ukparl_lookup_reference, ukparl_search_bills, ukparl_get_bill, ukparl_search_members, ukparl_get_member, and 4 more. Their descriptions and schemas cost roughly 3,072 tokens of context every time the server is loaded.

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

No. We connected to io.github.cyanheads/uk-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/uk-parliament-mcp-server server still maintained?

io.github.cyanheads/uk-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.

## Links

- Remote endpoint: https://uk-parliament.caseyjhand.com/mcp
- Repository: https://github.com/cyanheads/uk-parliament-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/uk-parliament.xml
- Changelog JSON feed: https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/uk-parliament.json
- HTML version of this page: https://verifymcp.io/servers/cyanheads-uk-parliament-mcp-server/uk-parliament
