Skip to main content
Glama

canada-parliament-mcp-server

Server Details

Track Canadian federal bills, MPs, House votes, and Hansard speeches.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/canada-parliament-mcp-server
GitHub Stars
1
Server Listing
canada-parliament-mcp-server

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: get_* for fetching single entities, search_* for finding collections, and list_reference for vocabulary. The boundaries between get_bill vs search_bills, get_member vs search_members, and get_vote vs search_votes are explicitly clarified in the descriptions.

Naming Consistency5/5

All tools follow a consistent canparl_ prefix plus verb_noun pattern (get_bill, search_bills, list_reference). Snake_case is used uniformly with no deviations.

Tool Count5/5

Eight tools are well-scoped for a parliamentary data server, covering bills, members, votes, speeches, and reference vocabulary without redundancy. Each tool earns its place in the lifecycle.

Completeness3/5

The surface covers House bills, members, votes, speeches, and reference data well, but notable gaps exist for a 'parliament' server: no Senate member lookup (despite bills covering both chambers) and no committee tools. These omissions could cause dead ends for agents needing upper-chamber or committee information.

Available Tools

8 tools
canparl_get_billCanparl Get BillA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum 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.
offsetNoZero-based whole-record offset within the selected collection.
sectionNoOne section from the returned outline; omit for full dossier or overflow outline.
sessionNoParliamentary session; omitted means current.
billCodeYesBill code from canparl_search_bills, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321.

Output Schema

NameRequiredDescription
billNoOfficial bill summary.
kindNoAbsent for full dossier; outline lists sections; section returns one selection.
errorNoPresent when the call failed. Absent on success.
notesNoOfficial dossier notes; notes.en and notes.fr sections each return one language.
noticeNoLimit clamp or source coverage guidance when applicable.
stagesNoAll official stage containers.
sponsorNoOfficial sponsor fields.
statuteNoEnacted statute when both year and chapter exist; otherwise null.
summaryNoLibrary of Parliament legislative summary; summary.en and summary.fr sections each return one language.
sectionsNoAvailable section selectors.
divisionsNoHouse divisions, or null if unavailable.
disclosureNoOverflow, empty, unavailable, past-end, or response-budget-stop guidance.
milestonesNoReading milestones as UTC instants ending in Z (YYYY-MM-DDTHH:MM:SS[.fraction]Z); a value in another shape is relayed as published. Royal assent is bill.royalAssentDate.
paginationNoWhole-record selection continuation.
provenanceNoOriginal retrieval metadata for every source request.
totalCountNoSelected collection total, or null for unavailable or scalar sections.
publicationsNoPublications, or null if unavailable.
webReferencesNoRelated documents, press releases, and costing notes, or null if unavailable.
appliedFiltersNoNormalized requested bill identity.
senateVoteDetailsNoComplete variable Senate vote records; not House divisions.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent, so safety is covered; the description adds the non-obvious behavior that large dossiers degrade to an outline with a continuation offset, and that nested records within stages are preserved intact. It does not mention permission scope or whether the outline call is itself counted against limits, so it stops short of full disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with the core action front-loaded and no filler. "Stages preserve nested records whole" is compressed to the point of being slightly cryptic for a first-time caller.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the overflow/outline workflow is the main thing an agent must know before calling. The remaining gap is how section names are shaped and what the notice on oversized limits looks like, but overall it is sufficient to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns extra by explaining that an omitted session means the verified current official session and that section must come from the returned outline. billCode provenance from canparl_search_bills is also reinforced, though the limit/offset semantics stay with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Read one House or Senate bill's official dossier"), bounded to a single bill, which cleanly separates it from canparl_search_bills and the other retrieval siblings. An agent knows immediately what this tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit procedural routing: obtain billCode and session from canparl_search_bills, and when the dossier is large, re-call with a single section from the outline and follow pagination.nextOffset. The conditional path for oversized results is spelled out rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canparl_get_memberCanparl Get MemberA
Read-onlyIdempotent
Inspect

Read one House MP by a returned OpenParliament slug or official current personId. 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.

NameRequiredDescriptionDefault
slugNoReturned 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 or profile URL, is read as that personId.
personIdNoDecimal official current person ID; distinct from an OpenParliament slug.
billsOffsetNoZero-based sponsored bill page offset.
recentVotesNoBallot rows to return, 0–10 per call; zero disables, and larger values up to 10000 return 10 with a notice.
votesOffsetNoZero-based ballot page offset.
votesSessionNoOfficial ballot session such as 44-1; omitted means the member's latest session in the feed. Needs one official personId.
votesBillCodeNoKeep 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.
sponsoredBillsNoSponsored bill rows to hydrate, 0–5 per call; zero disables, and larger values up to 10000 hydrate 5 with a notice.

Output Schema

NameRequiredDescription
capNoBounded workloads after the per-call caps.
errorNoPresent when the call failed. Absent on success.
shownNoReturned activity counts.
memberNoPublic member profile.
noticeNoWorkload clamp, coverage, and recovery guidance.
truncatedNoIndependent source continuations.
provenanceNoAll successful source retrieval metadata.
membershipsNoSource membership history, or null if unavailable.
recentVotesNoIndependently pageable activity section.
unavailableNoExplicit unavailable enrichment outcomes.
appliedFiltersNoNormalized lookup and independent activity controls.
openParliamentNoOpenParliament identity outcome.
sponsoredBillsNoIndependently pageable activity section.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and openWorldHint, but the description adds substantial behavioral context beyond them: official profiles survive unavailable enrichment, ballots come newest first, votesSession defaults to the member's latest session, and oversized limits cap with a notice. These details materially affect how an agent should invoke and interpret the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well front-loaded: the core read operation and identifier source come first, followed by fallback behavior and paging controls. Every sentence carries operational information, and none is redundant against the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations, full schema coverage, and an output schema, the remaining burden is behavioral guidance. The description covers identifier selection, enrichment fallback, ballot-source behavior, session defaults, paging, and limit caps, leaving no material gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the schema already documents parameters thoroughly. The description still adds useful cross-parameter guidance: pass exactly one identifier, use zero limits for profile-only lookup, and remember votesSession and votesBillCode require an official personId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Read one House MP' identified by slug or official personId. It also distinguishes the tool from sibling search tools by naming canparl_search_members.detailLookup as the source of identifiers, so an agent can tell what this tool is for without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to pass exactly one identifier from canparl_search_members detailLookup, explains the fallback between official House data and OpenParliament enrichment, and describes when recent ballots come from each source. It also tells the agent how to get profile-only results by zeroing out the bill and ballot limits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canparl_get_voteCanparl Get VoteA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum 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.
partyNoCanonical official caucus or certain Bloc/Green alias; historical observed caucuses are accepted.
ballotNoRecorded ballot Yea, Nay, or Paired, case-insensitive; Yes and No are accepted as Yea and Nay.
numberYesDivision number returned by canparl_search_votes or canparl_get_bill.
offsetNoZero-based offset in the selected ordering.
sessionNoParliamentary session; omitted means current.
personIdNoDecimal official person ID from canparl_search_members detailLookup or a ballot row; matches this division's recorded participants, including members no longer seated.
provinceNoEnglish province/territory name or one of the 13 postal codes.

Output Schema

NameRequiredDescription
capNoEffective ballot page limit after the per-call cap.
errorNoPresent when the call failed. Absent on success.
shownNoReturned ballot count.
tallyNoOfficial counts independent of local filters.
noticeNoLimit clamp, nonvoter, mismatch, empty, past-end, or response-budget guidance.
ballotsNoMatching ballots ordered by caucus, surname, given name, then personId.
byPartyNoComplete unfiltered participant aggregation by source caucus.
divisionNoVerified full-session division metadata.
truncatedNoWhether more matching ballots remain, including after a response-budget stop.
paginationNoContinuation within matching ballots; nextOffset is offset plus ballots returned.
provenanceNoRetrieval metadata for every source request.
totalCountNoMatching ballot count before pagination.
ballotsTotalNoComplete recorded participant count.
appliedFiltersNoNormalized ballot filters and division identity.
ballotsMatchedNoExact matching count before pagination.
tallyMatchesBallotsNoWhether all three official counts match participants; null if any count is absent.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, openWorld, so the safety profile is covered. The description adds genuinely non-obvious behavior: ballot/personId/party/province filters apply only to the ballot page, nonvoters are omitted from results, and pagination must continue with identical filters + nextOffset. It does not restate the safety annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with what is returned, then filter scoping, then the session default, then the pagination instruction. Nothing is redundant and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, a fully documented 8-parameter schema, and readOnly/idempotent annotations, the remaining burden is behavioral nuance — filter scope, nonvoter absence, and nextOffset continuation — all of which the description covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a baseline 3 would be defensible, but the description adds meaning the schema doesn't: it clarifies that four of the filters scope only the ballot page (not the tally), and that an omitted session resolves to the verified current session. This is real semantic lift beyond the field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) and resource set (a recorded House division, official tally, party totals, and a page of individual ballots), which is enough to distinguish it from canparl_search_votes by scope. It stops short of naming the sibling, so an agent must infer the search-then-fetch relationship (which only the schema's `number` description supplies).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains behavioral scoping clearly (filters affect only the ballot page; nonvoters are absent) and the session default, which implies when the tool is appropriate. However, it never states when to choose this over canparl_search_votes or how to obtain the required division number; that routing information lives only in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canparl_list_referenceCanparl List ReferenceA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
topicYesReference topic used to construct source-specific filters.
sessionNoParliamentary session; omitted means current.

Output Schema

NameRequiredDescription
capNoComplete reference entry count; no display cap is imposed.
errorNoPresent when the call failed. Absent on success.
shownNoAll returned reference entries.
topicNoReference topic used to construct source-specific filters.
noticeNoCatalog-only or historical coverage guidance.
entriesNoComplete bounded reference vocabulary or real session union.
sessionNoSelected session, or null for the global session index.
truncatedNoAlways false: the entire vocabulary is returned.
provenanceNoSource retrieval metadata.
totalCountNoExact number of reference entries.
appliedFiltersNoResolved reference scope.
currentSessionNoCurrent session verified from the official default bill feed.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description adds genuine behavioral context beyond that: the omitted-session default resolves to the 'verified current session', and for topic=sessions the entire global index is returned when session is omitted — a non-obvious behavior worth disclosing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose and followed by the two behavioral rules; little waste. Minor noise from the loose 'bill, division, and caucus' enumeration that doesn't match the enum verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full annotation coverage, and 100% schema descriptions, the description only needs to carry defaults and special cases — which it does. It stops short of saying whether the returned vocabulary is exhaustive or how often session coverage changes, but nothing critical to invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description goes slightly beyond it by stating a cross-parameter rule not encoded anywhere in the schema: topic=sessions requires omitting session to get the global index, and it labels the default session as 'verified current'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'List' plus the objects (session coverage, bill/division/caucus vocabulary) make it clear this is a reference/vocabulary lookup rather than a data retrieval tool, which implicitly separates it from the get_/search_ siblings. The phrasing 'bill, division, and caucus vocabulary' only loosely maps to the actual enum values (bill_statuses, vote_results, vote_document_types, parties), so the exact scope needs a schema peek.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use source-specific terms when constructing filters' implies this should be consulted before building queries against the search tools, and the topic=sessions rule is stated. However, it never names an alternative tool or says explicitly 'call this before canparl_search_bills', leaving the routing inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canparl_search_billsCanparl Search BillsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum 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.
offsetNoZero-based offset in the selected ordering.
statusNoOfficial bill status from canparl_list_reference topic bill_statuses.
sessionNoParliamentary session; omitted means current.
sponsorNoMP 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 indexed. A digit-only value equal to a current personId, or its /politicians/<digits>/ path or profile URL, is read as that personId.
billCodeNoExact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321.
billTypeNoOfficial bill type from canparl_list_reference topic bill_types.
titleContainsNoLiteral case-insensitive substring of any English or French long or short title.
originatingChamberNoHouse, House of Commons, or Senate; case-insensitive.

Output Schema

NameRequiredDescription
capNoEffective page limit after the per-call cap.
billsNoMatching official bills ordered by chamber prefix, number, then split-bill suffix letter.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of bills in this page.
totalNoExact matching count after all filters and before pagination.
noticeNoLimit clamp, coverage, empty-result, past-end, or response-budget guidance.
sessionNoVerified official parliament-session token.
truncatedNoWhether more matching bills remain after this page.
paginationNoLocal continuation in the filtered ordering, including a response-budget stop.
provenanceNoOriginal retrieval metadata from all source requests.
totalCountNoExact matching count before slicing.
appliedFiltersNoNormalized filters applied together with AND.
sponsorCoverageNoWhether the result is restricted to the third-party sponsor index.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the bar is lower; the description still adds real behavior: sponsor results are only the OpenParliament-indexed subset, an omitted session resolves to the 'verified current official session', and pagination must reuse identical filters. It does not discuss the response-size/byte-budget truncation behavior, though that is covered by the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the primary capability, followed by scope caveat, default, and pagination rule. No sentence is redundant or restates the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations covering the safety profile, and full param documentation in the schema, the description supplies exactly the missing connective guidance: sibling routing, sponsor-coverage limitation, session default, and pagination continuation. Nothing needed to invoke it correctly appears absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description earns a point by summarizing which fields act as combinable filters and by flagging the sponsor-indexing caveat and session defaulting in agent-facing terms. It adds no syntax detail beyond the schema (slug formats, billCode variants, status reference topics are schema-only).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Find') plus the resource ('House and Senate bills') and enumerates the filterable dimensions (title, number, type, chamber, status, indexed MP sponsor). It also explicitly distinguishes itself from the sibling read tool by saying a bill must be fetched for sponsor, stages, divisions, and statute citation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative path — 'fetch a bill for its sponsor, stages, divisions, and statute citation' — which routes the agent to canparl_get_bill when detail is needed rather than search. It also states the default when session is omitted and the pagination contract ('follow nextOffset with identical filters'), leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canparl_search_membersCanparl Search MembersA
Read-onlyIdempotent
Inspect

Find current House MPs by name, riding, province, or caucus. Set includeFormer for OpenParliament's historical name index; historical rows may contain only a name and slug. Follow nextOffset with identical filters and use detailLookup with canparl_get_member.

NameRequiredDescriptionDefault
nameNoCurrent: literal name substring. Historical: one token is surname lookup; multiple tokens are full recorded name lookup, not substring search.
limitNoMaximum 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.
partyNoOfficial caucus name; Bloc and Green aliases accepted; current roster only.
offsetNoZero-based offset in the selected ordering.
ridingNoLiteral riding substring; current roster only.
provinceNoProvince postal code or full English name; current roster only.
includeFormerNoUse the sparse historical name index instead of the complete current official roster.

Output Schema

NameRequiredDescription
capNoEffective page limit after the per-call cap.
errorNoPresent when the call failed. Absent on success.
shownNoReturned row count.
totalNoExact filtered current count; null for historical index.
noticeNoLimit clamp, empty page, historical coverage, or response-budget guidance.
membersNoReturned member identities.
truncatedNoMore queried rows remain.
paginationNoContinuation in the selected source ordering.
provenanceNoOriginal source retrieval metadata.
totalCountNoExact filtered current roster count; absent for historical searches.
appliedFiltersNoNormalized AND filters and name semantics.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, open-world behavior. The description adds non-obvious operational behavior: historical rows may contain only a name and slug, and pagination requires repeating the same filters via nextOffset. It also clarifies that includeFormer switches to a sparse historical index rather than the complete current roster.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is three sentences, front-loaded with core purpose, then historical caveat, then pagination and detail-routing instructions. Every sentence carries useful information with no wasted framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema is present, so the description need not explain return structure. It still covers scope, historical sparsity, pagination continuation, and the route to canparl_get_member for detail, which is sufficient for this read-only search tool with complete schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters, including name lookup modes, limit clamping, and province formats. The description adds little parameter-specific syntax beyond explaining the effect of includeFormer and the sparsity of historical rows, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Find'), resource ('current House MPs'), and filter axes (name, riding, province, caucus). It also distinguishes the historical mode via includeFormer and points detailed lookups to canparl_get_member, so an agent can separate it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states that the default is current MPs, instructs the agent to set includeFormer for the historical name index, tells it to follow nextOffset with identical filters, and directs detail lookups to canparl_get_member. This provides clear when-to-use guidance and an explicit sibling alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canparl_search_speechesCanparl Search SpeechesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum 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 contain 20 rows.
dateToNoInclusive Ottawa civil date upper bound, YYYY-MM-DD; independently optional.
offsetNoRaw candidate offset; keep every filter identical when continuing.
containsNoLocal case-insensitive Unicode-normalized literal English text substring; cannot be the only scope.
dateFromNoInclusive Ottawa civil date lower bound, YYYY-MM-DD; independently optional.
politicianNoSpeaker 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 value equal to a current personId, or its /politicians/<digits>/ path or profile URL, is read as that personId.
billDebatedNoBill debated; combined with all other scopes using AND.
mentionedBillNoBill mentioned; combined with all other scopes using AND.
substantiveOnlyNoExclude procedural remarks when true; false includes substantive and procedural remarks.

Output Schema

NameRequiredDescription
capNoEffective maximum returned matches after the per-call cap.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of returned matching speeches.
noticeNoLimit clamp, coverage, continuation, procedural-filter, unavailable affiliation, and response-budget guidance.
scannedNoRaw candidates visited, including excluded committee records; at most 100. A response-budget stop ends it before the first match not returned.
speechesNoMatching House speeches in source order with complete English prose.
exhaustedNoTrue only after visiting every row of a source-terminal page.
truncatedNoWhether raw candidates remain to be scanned; not an exact count of further matches.
nextOffsetNoFirst unvisited raw candidate offset, or null when exhausted; after a response-budget stop, the first match not returned.
provenanceNoOriginal retrieval metadata for scope validation, candidate pages fetched before the page ended, and memberships of returned speeches.
appliedFiltersNoAll normalized filters applied with AND; bill relationships rely on the source endpoint.
excludedCommitteesNoVisited candidates excluded because they were not House debate documents.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds genuinely useful context beyond the annotations: the 100-candidate cap per call and the warning against drawing a negative conclusion before exhausting pagination. With readOnlyHint/idempotentHint already covering the safety profile, this is exactly the kind of extra operational context that earns credit. Its only flaw is the "nextOffset" naming, which blurs whether it refers to a response field or the offset input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose before the operational caveat; no filler. The second sentence is dense but each clause carries a distinct instruction (cap, pagination continuity, negative-conclusion warning). The only nit is the inconsistent "nextOffset" term.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, and annotations already cover read-only/idempotent/open-world semantics, so the description needs only purpose and pagination guidance; it provides both. The 100-candidate cap and the 'exhaust before concluding absence' rule are the key non-obvious facts for a search tool. The remaining gap is the offset/nextOffset terminology mismatch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters such as limit, dateFrom/dateTo, contains, and billDebated/mentionedBill are already fully documented, including the clamp behavior. The description only restates the filter dimensions (speaker, bill, date) without adding syntax or edge-case meaning beyond what the schema provides, so it sits at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific verb+resource ("Find indexed House Hansard speeches") and enumerates the three scope dimensions: speaker, bill debated/mentioned, and date. The resource is unambiguously distinct from siblings like canparl_search_bills, canparl_search_votes, and canparl_get_member, so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains pagination behavior: it returns up to 100 candidate speeches, and the agent should follow nextOffset with unchanged filters until exhausted before concluding a negative. However, it never states when to choose this tool over siblings such as canparl_get_bill for bill details, and the reference to "nextOffset" does not match the input parameter name "offset", which could momentarily confuse an agent about whether it should pass offset or nextOffset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canparl_search_votesCanparl Search VotesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum 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.
dateToNoInclusive Ottawa civil date YYYY-MM-DD; independently optional.
offsetNoZero-based offset in the selected ordering.
resultNoOfficial result from vote_results; Passed and Failed are accepted aliases.
sessionNoParliamentary session; omitted means current.
billCodeNoExact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321.
dateFromNoInclusive Ottawa civil date YYYY-MM-DD; independently optional.
documentTypeNoOfficial category from canparl_list_reference topic vote_document_types.
subjectContainsNoLiteral Unicode-normalized case-insensitive subject substring.

Output Schema

NameRequiredDescription
capNoEffective page limit after the per-call cap.
errorNoPresent when the call failed. Absent on success.
shownNoReturned division count.
totalNoExact matching count before pagination.
noticeNoLimit clamp, empty-result, past-end, or response-budget guidance.
sessionNoResolved official session.
divisionsNoMatching divisions, date-time descending then number descending.
truncatedNoWhether more matches remain.
paginationNoContinuation within the filtered ordering.
provenanceNoSource retrieval metadata.
totalCountNoExact matching count.
appliedFiltersNoNormalized AND filters.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered; the description adds genuine behavior beyond them. It discloses result ordering ('newest first'), the default session fallback, and the pagination contract (follow nextOffset with identical filters) — the latter not derivable from the input schema since nextOffset is returned, not passed. Minor gap: it doesn't mention paging can end early before limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with the core action and filter list front-loaded, followed by the result-ordering and pagination protocol. No filler. The second sentence compresses two distinct instructions ('newest first' and 'pass to canparl_get_vote'), which slightly blurs structure but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter, all-optional search tool with a live output schema, the description covers the essentials: what is searched, default ordering, session defaulting, and how to page and hand off to canparl_get_vote. With rich annotations and full schema coverage, the remaining omissions (page-size clamping behavior) are already documented in the limit parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters are already self-documenting (limit caps, date formats, billCode aliases, result aliases). The description adds only the omitted-session resolution rule, which the schema also states, plus the 'identical filters' constraint for offset continuation. Baseline 3 is appropriate given the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find recorded House divisions') plus the exact filter dimensions (bill, result, document type, date, subject) and a scope limit ('in one session'). It also clarifies the boundary against canparl_get_vote by naming the handoff, so an agent can distinguish this search tool from its detail-fetch sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational guidance: search here, then pass 'session plus number to canparl_get_vote', and follow nextOffset with identical filters. It explains session omission ('resolves from the current official bill feed'), which is a real decision point. It stops short of explicit exclusions (e.g. use canparl_search_bills for bill text), so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updates
    • First observedcanparl_get_bill
    • First observedcanparl_get_member
    • First observedcanparl_get_vote
    • First observedcanparl_list_reference
    • First observedcanparl_search_bills
    • First observedcanparl_search_members
    • First observedcanparl_search_speeches
    • First observedcanparl_search_votes

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.