{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T17:27:46.166Z","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament","markdownUrl":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament.md","server":{"slug":"cyanheads-canada-parliament-mcp-server","name":"io.github.cyanheads/canada-parliament-mcp-server","registryName":"io.github.cyanheads/canada-parliament-mcp-server","description":"Track Canadian federal bills, MPs, House votes, and Hansard speeches.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"canada-parliament","type":"remote","identifier":"https://canada-parliament.caseyjhand.com/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament","version":"0.2.1","transport":null,"scoredAt":"2026-11-05T03:18:37.907Z"},"score":{"total":80,"tier":"high trust","status":"scored","weekDelta":3,"history":[{"date":"2026-11-05","total":80},{"date":"2026-11-04","total":79},{"date":"2026-11-03","total":79},{"date":"2026-11-02","total":78},{"date":"2026-11-01","total":78},{"date":"2026-10-31","total":77},{"date":"2026-10-30","total":77},{"date":"2026-10-29","total":77},{"date":"2026-10-28","total":76},{"date":"2026-10-27","total":73},{"date":"2026-10-26","total":73},{"date":"2026-10-25","total":72},{"date":"2026-10-24","total":72}]},"categories":[{"name":"Endpoint Security","score":83,"verdict":"partial","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation.","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."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.none_no_destructive","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.validated","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":72,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 2943 tokens (~327/item across 9 items; 8 tools + 1 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"327","items":"9","tools":"8","tokens":"2943","resources":"1"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":40,"verdict":"partial","reasons":["Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"12"}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["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."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 8 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."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"8"}},{"code":"toolsafety.manipulation_clean","args":{"units":"10","judged":"10"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a current MCP spec version (2026-07-28)."],"codes":[{"code":"protocol.current","args":{"version":"2026-07-28"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"canada-parliament","type":"remote","identifier":"https://canada-parliament.caseyjhand.com/mcp","withdrawn":false,"score":80,"current":true,"url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament","markdownUrl":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament.md"},{"slug":"cyanheads-canada-parliament-mcp-server","type":"npm","identifier":"@cyanheads/canada-parliament-mcp-server","withdrawn":false,"score":39,"current":false,"url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/cyanheads-canada-parliament-mcp-server","markdownUrl":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/cyanheads-canada-parliament-mcp-server.md"}],"facts":[{"label":"Endpoint","value":"https://canada-parliament.caseyjhand.com/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"0.2.1"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"canparl_search_bills","title":"Canparl Search Bills","description":"Find House and Senate bills in one session by title, number, type, chamber, status, or indexed MP sponsor. Sponsor results are the OpenParliament-indexed subset; fetch a bill for its sponsor, stages, divisions, and statute citation. Omitted session means the verified current official session. Follow nextOffset with identical filters.","inputs":[{"name":"billCode","type":"string","required":false,"description":"Exact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321."},{"name":"billType","type":"string","required":false,"description":"Official bill type from canparl_list_reference topic bill_types."},{"name":"limit","type":"integer","required":false,"description":"Maximum rows, default 10, effective cap 100; values through 10000 are accepted and clamp with a notice. Whole records may end the page early at the 24000-byte response budget; follow nextOffset."},{"name":"offset","type":"integer","required":false,"description":"Zero-based offset in the selected ordering."},{"name":"originatingChamber","type":"string","required":false,"description":"House, House of Commons, or Senate; case-insensitive."},{"name":"session","type":null,"required":false,"description":"Parliamentary session; omitted means current."},{"name":"sponsor","type":"string","required":false,"description":"MP OpenParliament slug or politician path/HTTPS URL (member.slug from canparl_get_member, or an includeFormer canparl_search_members row), or a current MP's official personId; Senators are not indexe…"},{"name":"status","type":"string","required":false,"description":"Official bill status from canparl_list_reference topic bill_statuses."},{"name":"titleContains","type":"string","required":false,"description":"Literal substring of any English or French long or short title; matching ignores case, accents, dash and quote styles, and repeated whitespace."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Normalized filters applied together with AND."},{"name":"bills","type":"array","required":false,"description":"Matching official bills ordered by chamber prefix, number, then split-bill suffix letter."},{"name":"cap","type":"integer","required":false,"description":"Effective page limit after the per-call cap."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"notice","type":"string","required":false,"description":"Limit clamp, coverage, empty-result, past-end, or response-budget guidance."},{"name":"pagination","type":"object","required":false,"description":"Local continuation in the filtered ordering, including a response-budget stop."},{"name":"provenance","type":"array","required":false,"description":"Original retrieval metadata from all source requests."},{"name":"session","type":"string","required":false,"description":"Verified official parliament-session token."},{"name":"shown","type":"integer","required":false,"description":"Number of bills in this page."},{"name":"sponsorCoverage","type":"string","required":false,"description":"Whether the result is restricted to the third-party sponsor index."},{"name":"total","type":"integer","required":false,"description":"Exact matching count after all filters and before pagination."},{"name":"totalCount","type":"integer","required":false,"description":"Exact matching count before slicing."},{"name":"truncated","type":"boolean","required":false,"description":"Whether more matching bills remain after this page."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":375},{"name":"canparl_get_bill","title":"Canparl Get Bill","description":"Read one House or Senate bill's official dossier. Large dossiers return an outline; re-call with one section and follow pagination.nextOffset for collections. Stages preserve nested records whole. Obtain billCode and session from canparl_search_bills; omitted session means the verified current official session.","inputs":[{"name":"billCode","type":"string","required":true,"description":"Bill code from canparl_search_bills, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321."},{"name":"limit","type":"integer","required":false,"description":"Maximum whole records per selected collection page, 1–100 per call; larger values up to 10000 return 100 with a notice, and the byte budget may reduce it."},{"name":"offset","type":"integer","required":false,"description":"Zero-based whole-record offset within the selected collection."},{"name":"section","type":"string","required":false,"description":"One section from the returned outline: sponsor, stages.house, stages.senate, stages.royalAssent, divisions, senateVoteDetails, publications, statute, summary.en, summary.fr, notes.en, notes.fr, miles…"},{"name":"session","type":null,"required":false,"description":"Parliamentary session; omitted means current."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Normalized requested bill identity."},{"name":"bill","type":"object","required":false,"description":"Official bill summary."},{"name":"disclosure","type":"string","required":false,"description":"Overflow, empty, unavailable, past-end, or response-budget-stop guidance."},{"name":"divisions","type":null,"required":false,"description":"House divisions, or null if unavailable."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"kind","type":"string","required":false,"description":"Absent for full dossier; outline lists sections; section returns one selection."},{"name":"milestones","type":"object","required":false,"description":"Reading milestones as UTC instants ending in Z (YYYY-MM-DDTHH:MM:SS[.fraction]Z), converted from LEGISinfo's Ottawa-time clocks; Senate times of day are LEGISinfo's recorded times. A value in another…"},{"name":"notes","type":"object","required":false,"description":"Official dossier notes; notes.en and notes.fr sections each return one language."},{"name":"notice","type":"string","required":false,"description":"Limit clamp or source coverage guidance when applicable."},{"name":"pagination","type":"object","required":false,"description":"Whole-record selection continuation."},{"name":"provenance","type":"array","required":false,"description":"Original retrieval metadata for every source request."},{"name":"publications","type":null,"required":false,"description":"Publications, or null if unavailable."},{"name":"sections","type":"array","required":false,"description":"Available section selectors."},{"name":"senateVoteDetails","type":null,"required":false,"description":"Complete variable Senate vote records; not House divisions."},{"name":"sponsor","type":"object","required":false,"description":"Official sponsor fields."},{"name":"stages","type":"object","required":false,"description":"All official stage containers."},{"name":"statute","type":null,"required":false,"description":"Enacted statute when both year and chapter exist; otherwise null."},{"name":"summary","type":"object","required":false,"description":"Library of Parliament legislative summary; summary.en and summary.fr sections each return one language."},{"name":"totalCount","type":null,"required":false,"description":"Selected collection total, or null for unavailable or scalar sections."},{"name":"webReferences","type":null,"required":false,"description":"Related documents, press releases, and costing notes, or null if unavailable."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":255},{"name":"canparl_search_members","title":"Canparl Search Members","description":"Find House MPs by name, riding, province, or caucus in the complete current official roster, or set parliament to search everyone who sat in that Parliament (36th onward) with official personIds and membership dates. Set includeFormer for OpenParliament's historical name index; its rows may contain only a name and slug. Follow nextOffset with identical filters and use detailLookup with canparl_get_member.","inputs":[{"name":"includeFormer","type":"boolean","required":false,"description":"Use the sparse historical name index instead of an official roster; parliament, riding, province, and party are rejected with it."},{"name":"limit","type":"integer","required":false,"description":"Maximum rows, default 25, effective cap 100; values through 10000 are accepted and clamp with a notice. Whole records may end the page early at the 24000-byte response budget; follow nextOffset."},{"name":"name","type":"string","required":false,"description":"Official roster: literal name substring; matching ignores case, accents, dash and quote styles, and repeated whitespace. Historical: OpenParliament's own match, where one token is surname lookup and…"},{"name":"offset","type":"integer","required":false,"description":"Zero-based offset in the selected ordering."},{"name":"parliament","type":"integer","required":false,"description":"Parliament number, such as 41, whose official House roster to search instead of the current one: everyone who sat in it, one row each with the caucus and riding last held there. The official roster o…"},{"name":"party","type":"string","required":false,"description":"Official caucus name; Bloc and Green aliases accepted; official rosters only, not includeFormer. With parliament, matches the one caucus each member last held in that Parliament, and that roster's ow…"},{"name":"province","type":"string","required":false,"description":"Province postal code or full English name; official rosters only, not includeFormer."},{"name":"riding","type":"string","required":false,"description":"Literal riding substring; matching ignores case, accents, dash and quote styles, and repeated whitespace. Official rosters only, not includeFormer."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Normalized AND filters and name semantics."},{"name":"cap","type":"integer","required":false,"description":"Effective page limit after the per-call cap."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"members","type":"array","required":false,"description":"Returned member identities."},{"name":"notice","type":"string","required":false,"description":"Limit clamp, empty page, historical coverage, or response-budget guidance."},{"name":"pagination","type":"object","required":false,"description":"Continuation in the selected source ordering."},{"name":"provenance","type":"array","required":false,"description":"Original source retrieval metadata."},{"name":"shown","type":"integer","required":false,"description":"Returned row count."},{"name":"total","type":null,"required":false,"description":"Exact filtered count of the official roster searched; null for historical index."},{"name":"totalCount","type":"integer","required":false,"description":"Exact filtered count of the official roster searched, current or parliament; absent for historical searches."},{"name":"truncated","type":"boolean","required":false,"description":"More queried rows remain."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":424},{"name":"canparl_get_member","title":"Canparl Get Member","description":"Read one House MP by a returned OpenParliament slug or official personId, current or former (36th Parliament onward). Pass exactly one identifier from canparl_search_members detailLookup. Official profiles survive unavailable OpenParliament enrichment. Recent ballots come newest first from the official House member-votes feed when the member has one official personId, filterable by votesSession (default: the member's latest session) and votesBillCode; otherwise from OpenParliament. Sponsored bills and recent ballots are independently pageable; set their limits to zero for profile-only lookup.","inputs":[{"name":"billsOffset","type":"integer","required":false,"description":"Zero-based sponsored bill page offset."},{"name":"personId","type":"string","required":false,"description":"Decimal official person ID, distinct from an OpenParliament slug: a current member's, or a former member's from the 36th Parliament onward, such as a canparl_search_members parliament row or a canpar…"},{"name":"recentVotes","type":"integer","required":false,"description":"Ballot rows to return, 0–10 per call; zero disables, and larger values up to 10000 return 10 with a notice."},{"name":"slug","type":"string","required":false,"description":"Returned OpenParliament slug, politician path, or HTTPS OpenParliament profile URL; never a guessed name. A digit-only value equal to a current official personId, or its /politicians/<digits>/ path o…"},{"name":"sponsoredBills","type":"integer","required":false,"description":"Sponsored bill rows to hydrate, 0–5 per call; zero disables, and larger values up to 10000 hydrate 5 with a notice."},{"name":"votesBillCode","type":"string","required":false,"description":"Keep official ballots on this bill, including a split-bill suffix such as C-15A; accepts c15, C 15, or bill C-15. Needs one official personId."},{"name":"votesOffset","type":"integer","required":false,"description":"Zero-based ballot page offset."},{"name":"votesSession","type":null,"required":false,"description":"Official ballot session such as 44-1; omitted means the member's latest session in the feed. Needs one official personId."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Normalized lookup and independent activity controls."},{"name":"cap","type":"object","required":false,"description":"Bounded workloads after the per-call caps."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"member","type":"object","required":false,"description":"Public member profile."},{"name":"memberships","type":null,"required":false,"description":"Source membership history, or null if unavailable."},{"name":"notice","type":"string","required":false,"description":"Workload clamp, coverage, and recovery guidance."},{"name":"openParliament","type":"object","required":false,"description":"OpenParliament identity outcome."},{"name":"provenance","type":"array","required":false,"description":"All successful source retrieval metadata."},{"name":"recentVotes","type":"object","required":false,"description":"Independently pageable activity section."},{"name":"shown","type":"object","required":false,"description":"Returned activity counts."},{"name":"sponsoredBills","type":"object","required":false,"description":"Independently pageable activity section."},{"name":"truncated","type":"object","required":false,"description":"Independent source continuations."},{"name":"unavailable","type":"array","required":false,"description":"Explicit unavailable enrichment outcomes."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":439},{"name":"canparl_search_votes","title":"Canparl Search Votes","description":"Find recorded House divisions in one session by bill, result, document type, date, or subject. Return newest first and pass session plus number to canparl_get_vote. Omitted session resolves from the current official bill feed. Follow nextOffset with identical filters.","inputs":[{"name":"billCode","type":"string","required":false,"description":"Exact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321."},{"name":"dateFrom","type":"string","required":false,"description":"Inclusive Ottawa civil date YYYY-MM-DD; independently optional."},{"name":"dateTo","type":"string","required":false,"description":"Inclusive Ottawa civil date YYYY-MM-DD; independently optional."},{"name":"documentType","type":"string","required":false,"description":"Official category from canparl_list_reference topic vote_document_types."},{"name":"limit","type":"integer","required":false,"description":"Maximum rows, default 25, effective cap 100; values through 10000 are accepted and clamp with a notice. Whole records may end the page early at the 24000-byte response budget; follow nextOffset."},{"name":"offset","type":"integer","required":false,"description":"Zero-based offset in the selected ordering."},{"name":"result","type":"string","required":false,"description":"Official result from vote_results; Passed and Failed are accepted aliases."},{"name":"session","type":null,"required":false,"description":"Parliamentary session; omitted means current."},{"name":"subjectContains","type":"string","required":false,"description":"Literal subject substring; matching ignores case, accents, dash and quote styles, and repeated whitespace."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Normalized AND filters."},{"name":"cap","type":"integer","required":false,"description":"Effective page limit after the per-call cap."},{"name":"divisions","type":"array","required":false,"description":"Matching divisions, date-time descending then number descending."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"notice","type":"string","required":false,"description":"Limit clamp, empty-result, past-end, or response-budget guidance."},{"name":"pagination","type":"object","required":false,"description":"Continuation within the filtered ordering."},{"name":"provenance","type":"array","required":false,"description":"Source retrieval metadata."},{"name":"session","type":"string","required":false,"description":"Resolved official session."},{"name":"shown","type":"integer","required":false,"description":"Returned division count."},{"name":"total","type":"integer","required":false,"description":"Exact matching count before pagination."},{"name":"totalCount","type":"integer","required":false,"description":"Exact matching count."},{"name":"truncated","type":"boolean","required":false,"description":"Whether more matches remain."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":283},{"name":"canparl_get_vote","title":"Canparl Get Vote","description":"Read a recorded House division, its full official tally, party totals, and a page of individual ballots. Ballot, personId, party, and province filters affect the ballot page only; nonvoters are absent. Omitted session means the verified current official session. Follow nextOffset with identical filters.","inputs":[{"name":"ballot","type":"string","required":false,"description":"Recorded ballot Yea, Nay, or Paired, case-insensitive; Yes and No are accepted as Yea and Nay."},{"name":"limit","type":"integer","required":false,"description":"Maximum returned ballots, 1–400 per call, default 30; larger values up to 10000 clamp to 400 with a notice. A page ends early at the 24000-byte response budget; follow nextOffset."},{"name":"number","type":"integer","required":true,"description":"Division number returned by canparl_search_votes or canparl_get_bill."},{"name":"offset","type":"integer","required":false,"description":"Zero-based offset in the selected ordering."},{"name":"party","type":"string","required":false,"description":"Canonical official caucus or certain Bloc/Green alias; historical observed caucuses are accepted."},{"name":"personId","type":"string","required":false,"description":"Decimal official person ID from canparl_search_members detailLookup or a ballot row; matches this division's recorded participants, including members no longer seated."},{"name":"province","type":"string","required":false,"description":"English province/territory name or one of the 13 postal codes."},{"name":"session","type":null,"required":false,"description":"Parliamentary session; omitted means current."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Normalized ballot filters and division identity."},{"name":"ballots","type":"array","required":false,"description":"Matching ballots ordered by caucus, surname, given name, then personId."},{"name":"ballotsMatched","type":"integer","required":false,"description":"Exact matching count before pagination."},{"name":"ballotsTotal","type":"integer","required":false,"description":"Complete recorded participant count."},{"name":"byParty","type":"array","required":false,"description":"Complete unfiltered participant aggregation by source caucus."},{"name":"cap","type":"integer","required":false,"description":"Effective ballot page limit after the per-call cap."},{"name":"division","type":"object","required":false,"description":"Verified full-session division metadata."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"notice","type":"string","required":false,"description":"Limit clamp, nonvoter, mismatch, empty, past-end, or response-budget guidance."},{"name":"pagination","type":"object","required":false,"description":"Continuation within matching ballots; nextOffset is offset plus ballots returned."},{"name":"provenance","type":"array","required":false,"description":"Retrieval metadata for every source request."},{"name":"shown","type":"integer","required":false,"description":"Returned ballot count."},{"name":"tally","type":"object","required":false,"description":"Official counts independent of local filters."},{"name":"tallyMatchesBallots","type":"boolean|null","required":false,"description":"Whether all three official counts match participants; null if any count is absent."},{"name":"totalCount","type":"integer","required":false,"description":"Matching ballot count before pagination."},{"name":"truncated","type":"boolean","required":false,"description":"Whether more matching ballots remain, including after a response-budget stop."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":287},{"name":"canparl_search_speeches","title":"Canparl Search Speeches","description":"Find indexed House Hansard speeches by speaker, bill debated or mentioned, or date. contains scans at most 100 candidate speeches per call; follow nextOffset without changing filters until exhausted before drawing a negative conclusion.","inputs":[{"name":"billDebated","type":"object","required":false,"description":"Bill debated; combined with all other scopes using AND."},{"name":"contains","type":"string","required":false,"description":"Local literal substring of the selected language's plain text; matching ignores case, accents, dash and quote styles, and repeated whitespace. A speech without text in that language never matches. Ca…"},{"name":"dateFrom","type":"string","required":false,"description":"Inclusive Ottawa civil date lower bound, YYYY-MM-DD; independently optional."},{"name":"dateTo","type":"string","required":false,"description":"Inclusive Ottawa civil date upper bound, YYYY-MM-DD; independently optional."},{"name":"language","type":"string","required":false,"description":"Hansard language of speaker, h1, h2, and content, and of the text contains scans: en (default) or fr. A field without text in that language is null, never filled from the other; older records carry n…"},{"name":"limit","type":"integer","required":false,"description":"Maximum returned matches, 1–10 per call; larger values up to 10000 clamp to 10 with a notice. A page ends early at the 24000-byte response budget, returning at least one match whole. Candidate pages…"},{"name":"mentionedBill","type":"object","required":false,"description":"Bill mentioned; combined with all other scopes using AND."},{"name":"offset","type":"integer","required":false,"description":"Raw candidate offset; keep every filter identical when continuing."},{"name":"politician","type":"string","required":false,"description":"Speaker OpenParliament slug or exact politician path/HTTPS URL (member.slug from canparl_get_member, or an includeFormer canparl_search_members row), or a current MP's official personId. A digit-only…"},{"name":"substantiveOnly","type":"boolean","required":false,"description":"Exclude procedural remarks when true; false includes substantive and procedural remarks."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"All normalized filters applied with AND; bill relationships rely on the source endpoint."},{"name":"cap","type":"integer","required":false,"description":"Effective maximum returned matches after the per-call cap."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"excludedCommittees","type":"integer","required":false,"description":"Visited candidates excluded because they were not House debate documents."},{"name":"exhausted","type":"boolean","required":false,"description":"True only after visiting every row of a source-terminal page."},{"name":"nextOffset","type":null,"required":false,"description":"First unvisited raw candidate offset, or null when exhausted; after a response-budget stop, the first match not returned."},{"name":"notice","type":"string","required":false,"description":"Limit clamp, coverage, continuation, procedural-filter, candidates without selected-language text, unavailable affiliation, and response-budget guidance."},{"name":"provenance","type":"array","required":false,"description":"Original retrieval metadata for scope validation, candidate pages fetched before the page ended, and memberships of returned speeches."},{"name":"scanned","type":"integer","required":false,"description":"Raw candidates visited, including excluded committee records; at most 100. A response-budget stop ends it before the first match not returned."},{"name":"shown","type":"integer","required":false,"description":"Number of returned matching speeches."},{"name":"speeches","type":"array","required":false,"description":"Matching House speeches in source order with complete prose in the selected language."},{"name":"truncated","type":"boolean","required":false,"description":"Whether raw candidates remain to be scanned; not an exact count of further matches."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":426},{"name":"canparl_list_reference","title":"Canparl List Reference","description":"List canonical session coverage and bill, division, and caucus vocabulary. Use source-specific terms when constructing filters. Omitted session means the verified current session for vocabulary. For topic sessions omit session; the entire global index is returned. Topic parties covers the current session only: its entries come from the current House roster, so a past division's caucuses come from canparl_get_vote byParty.","inputs":[{"name":"session","type":null,"required":false,"description":"Session for session-dependent vocabulary; omitted means current. Omit it for topic sessions; topic parties accepts only the current session."},{"name":"topic","type":"string","required":true,"description":"Reference topic used to construct source-specific filters."}],"outputs":[{"name":"appliedFilters","type":"object","required":false,"description":"Resolved reference scope."},{"name":"cap","type":"integer","required":false,"description":"Complete reference entry count; no display cap is imposed."},{"name":"currentSession","type":"string","required":false,"description":"Current session verified from the official default bill feed."},{"name":"entries","type":"array","required":false,"description":"Complete bounded reference vocabulary or real session union."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"notice","type":"string","required":false,"description":"Catalog-only or historical coverage guidance."},{"name":"provenance","type":"array","required":false,"description":"Source retrieval metadata."},{"name":"session","type":"string|null","required":false,"description":"Selected session, or null for the global session index."},{"name":"shown","type":"integer","required":false,"description":"All returned reference entries."},{"name":"topic","type":"string","required":false,"description":"Reference topic used to construct source-specific filters."},{"name":"totalCount","type":"integer","required":false,"description":"Exact number of reference entries."},{"name":"truncated","type":"boolean","required":false,"description":"Always false: the entire vocabulary is returned."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":135}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T03:18:37.000Z","track":"remote","endpoint":"https://canada-parliament.caseyjhand.com/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=caseyjhand.com","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-11-02T21:39:32Z","notAfter":"2027-01-31T22:39:21Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"secure","label":"Secure","name":"canada-parliament.caseyjhand.com.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"com.","outcome":"verified","label":"Verified"},{"zone":"caseyjhand.com.","outcome":"verified","label":"Verified"},{"zone":"canada-parliament.caseyjhand.com.","outcome":"verified","label":"Verified"}]},"auth":{"outcome":"none","label":"No authorisation required","gate":null,"gateLabel":null,"status":200,"authorizationServers":[]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":301},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-24","recent":[{"id":"chg_01a1a9b7-326d-71d6-9a30-77ca43c9b243","kind":"score.total_changed","summary":"Trust score (79 → 80)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a1a9b7-326d-71d6-9a30-77ca43c9b243"},{"id":"chg_01a19f69-1c8f-7c91-94d1-bab4004aeff7","kind":"score.total_changed","summary":"Trust score (78 → 79)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19f69-1c8f-7c91-94d1-bab4004aeff7"},{"id":"chg_01a1951e-508e-71e4-8d49-bb49178fa113","kind":"score.total_changed","summary":"Trust score (77 → 78)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a1951e-508e-71e4-8d49-bb49178fa113"},{"id":"chg_01a19432-d92e-7b4a-8860-54decce91ad3","kind":"param.description_changed","summary":"“canparl_get_member” reworded the description of “personId”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d92e-7b4a-8860-54decce91ad3"},{"id":"chg_01a19432-d92f-7227-8705-1a41c869fec0","kind":"tool.description_changed","summary":"Tool “canparl_list_reference” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d92f-7227-8705-1a41c869fec0"},{"id":"chg_01a19432-d92f-7aa0-ace0-9ce0a4520e4a","kind":"param.description_changed","summary":"“canparl_list_reference” reworded the description of “session”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d92f-7aa0-ace0-9ce0a4520e4a"},{"id":"chg_01a19432-d930-70cc-82a2-9d9f4c78bbd0","kind":"param.description_changed","summary":"“canparl_search_bills” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d930-70cc-82a2-9d9f4c78bbd0"},{"id":"chg_01a19432-d930-7664-a321-f9917ddde47d","kind":"param.description_changed","summary":"“canparl_search_bills” reworded the description of “titleContains”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d930-7664-a321-f9917ddde47d"},{"id":"chg_01a19432-d931-705e-ad50-be97443c09c2","kind":"tool.description_changed","summary":"Tool “canparl_search_members” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d931-705e-ad50-be97443c09c2"},{"id":"chg_01a19432-d931-7a2c-89aa-f9417232ca71","kind":"param.description_changed","summary":"“canparl_search_members” reworded the description of “includeFormer”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d931-7a2c-89aa-f9417232ca71"},{"id":"chg_01a19432-d932-7225-b19b-31eb3e13d17f","kind":"param.description_changed","summary":"“canparl_search_members” reworded the description of “name”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d932-7225-b19b-31eb3e13d17f"},{"id":"chg_01a19432-d932-7bd9-97ee-29d0420ad3ae","kind":"param.description_changed","summary":"“canparl_search_members” reworded the description of “party”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d932-7bd9-97ee-29d0420ad3ae"},{"id":"chg_01a19432-d933-7adb-835f-4fd809465d81","kind":"param.description_changed","summary":"“canparl_search_members” reworded the description of “province”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d933-7adb-835f-4fd809465d81"},{"id":"chg_01a19432-d934-7628-9ee1-b9fe2022a975","kind":"param.description_changed","summary":"“canparl_search_members” reworded the description of “riding”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d934-7628-9ee1-b9fe2022a975"},{"id":"chg_01a19432-d935-7930-9163-de36fe0f6255","kind":"param.added_optional","summary":"“canparl_search_members” added an optional parameter “parliament”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d935-7930-9163-de36fe0f6255"},{"id":"chg_01a19432-d938-725f-9162-aaf98ad20146","kind":"param.description_changed","summary":"“canparl_search_speeches” reworded the description of “contains”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d938-725f-9162-aaf98ad20146"},{"id":"chg_01a19432-d939-72e9-9082-dde52c6227d8","kind":"param.added_optional","summary":"“canparl_search_speeches” added an optional parameter “language”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d939-72e9-9082-dde52c6227d8"},{"id":"chg_01a19432-d939-7dbb-8a10-a966ca9f6c41","kind":"param.description_changed","summary":"“canparl_search_votes” reworded the description of “subjectContains”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d939-7dbb-8a10-a966ca9f6c41"},{"id":"chg_01a19432-d93a-756b-b423-f35d93c52058","kind":"server.version_changed","summary":"Server version (0.2.0 → 0.2.1)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d93a-756b-b423-f35d93c52058"},{"id":"chg_01a19432-d93a-7c8f-9cdc-7dd900dc99ee","kind":"server.instructions_changed","summary":"The server rewrote its instructions, which are the text every model session reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament#chg-chg_01a19432-d93a-7c8f-9cdc-7dd900dc99ee"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament/changelog.json"},"links":{"html":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament","markdown":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament.md","changelogJson":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament/changelog.json","changelogRss":"https://verifymcp.io/servers/cyanheads-canada-parliament-mcp-server/canada-parliament.xml","external":[{"label":"Remote endpoint","href":"https://canada-parliament.caseyjhand.com/mcp"},{"label":"Repository","href":"https://github.com/cyanheads/canada-parliament-mcp-server"}]}}