Track Canadian federal bills, MPs, House votes, and Hansard speeches.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
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.
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.
Zero-based whole-record offset within the selected collection.
One section from the returned outline; omit for full dossier or overflow outline.
Parliamentary session; omitted means current.
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | 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. |
| offset | integer | Zero-based whole-record offset within the selected collection. |
| section | string | One section from the returned outline; omit for full dossier or overflow outline. |
| session | any | Parliamentary session; omitted means current. |
| billCode* | string | 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. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"billCode"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 10000,
"minimum": 1,
"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."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based whole-record offset within the selected collection."
},
"section": {
"type": "string",
"description": "One section from the returned outline; omit for full dossier or overflow outline."
},
"session": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Parliamentary session; omitted means current."
},
"billCode": {
"type": "string",
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| slug | string | 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 or profile URL, is read as that personId. |
| personId | string | Decimal official current person ID; distinct from an OpenParliament slug. |
| billsOffset | integer | Zero-based sponsored bill page offset. |
| recentVotes | integer | Ballot rows to return, 0–10 per call; zero disables, and larger values up to 10000 return 10 with a notice. |
| votesOffset | integer | Zero-based ballot page offset. |
| votesSession | any | Official ballot session such as 44-1; omitted means the member's latest session in the feed. Needs one official personId. |
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | 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. |
| party | string | Canonical official caucus or certain Bloc/Green alias; historical observed caucuses are accepted. |
| ballot | string | Recorded ballot Yea, Nay, or Paired, case-insensitive; Yes and No are accepted as Yea and Nay. |
| number* | integer | Division number returned by canparl_search_votes or canparl_get_bill. |
| offset | integer | Zero-based offset in the selected ordering. |
| session | any | Parliamentary session; omitted means current. |
| personId | string | Decimal official person ID from canparl_search_members detailLookup or a ballot row; matches this division's recorded participants, including members no longer seated. |
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.
| Argument | Type | Description |
|---|---|---|
| topic* | string | Reference topic used to construct source-specific filters. |
| session | any | Parliamentary session; omitted means current. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"topic"
],
"properties": {
"topic": {
"enum": [
"sessions",
"bill_types",
"bill_statuses",
"vote_results",
"vote_document_types",
"parties"
],
"type": "string",
"description": "Reference topic used to construct source-specific filters."
},
"session": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Parliamentary session; omitted means current."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | 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. |
| offset | integer | Zero-based offset in the selected ordering. |
| status | string | Official bill status from canparl_list_reference topic bill_statuses. |
| session | any | Parliamentary session; omitted means current. |
| sponsor | string | 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 indexed. A digit-only value equal to a current personId, or its /politicians/<digits>/ path or profile URL, is read as that personId. |
| billCode | string | Exact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321. |
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.
| Argument | Type | Description |
|---|---|---|
| name | string | Current: literal name substring. Historical: one token is surname lookup; multiple tokens are full recorded name lookup, not substring search. |
| limit | integer | 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. |
| party | string | Official caucus name; Bloc and Green aliases accepted; current roster only. |
| offset | integer | Zero-based offset in the selected ordering. |
| riding | string | Literal riding substring; current roster only. |
| province | string | Province postal code or full English name; current roster only. |
| includeFormer | boolean | Use the sparse historical name index instead of the complete current official roster. |
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | 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 contain 20 rows. |
| dateTo | string | Inclusive Ottawa civil date upper bound, YYYY-MM-DD; independently optional. |
| offset | integer | Raw candidate offset; keep every filter identical when continuing. |
| contains | string | Local case-insensitive Unicode-normalized literal English text substring; cannot be the only scope. |
| dateFrom | string | Inclusive Ottawa civil date lower bound, YYYY-MM-DD; independently optional. |
| politician | string | 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 value equal to a current personId, or its /politicians/<digits>/ path or profile URL, is read as that personId. |
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | 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. |
| dateTo | string | Inclusive Ottawa civil date YYYY-MM-DD; independently optional. |
| offset | integer | Zero-based offset in the selected ordering. |
| result | string | Official result from vote_results; Passed and Failed are accepted aliases. |
| session | any | Parliamentary session; omitted means current. |
| billCode | string | Exact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321. |
| dateFrom | string | Inclusive Ottawa civil date YYYY-MM-DD; independently optional. |
| votesBillCode | string | 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. |
| sponsoredBills | integer | Sponsored bill rows to hydrate, 0–5 per call; zero disables, and larger values up to 10000 hydrate 5 with a notice. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"slug": {
"type": "string",
"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 or profile URL, is read as that personId."
},
"personId": {
"type": "string",
"description": "Decimal official current person ID; distinct from an OpenParliament slug."
},
"billsOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based sponsored bill page offset."
},
"recentVotes": {
"type": "integer",
"default": 10,
"maximum": 10000,
"minimum": 0,
"description": "Ballot rows to return, 0–10 per call; zero disables, and larger values up to 10000 return 10 with a notice."
},
"votesOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based ballot page offset."
},
"votesSession": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Official ballot session such as 44-1; omitted means the member's latest session in the feed. Needs one official personId."
},
"votesBillCode": {
"type": "string",
"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."
},
"sponsoredBills": {
"type": "integer",
"default": 5,
"maximum": 10000,
"minimum": 0,
"description": "Sponsored bill rows to hydrate, 0–5 per call; zero disables, and larger values up to 10000 hydrate 5 with a notice."
}
},
"additionalProperties": false
}| province | string | English province/territory name or one of the 13 postal codes. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"number"
],
"properties": {
"limit": {
"type": "integer",
"default": 30,
"maximum": 10000,
"minimum": 1,
"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."
},
"party": {
"type": "string",
"description": "Canonical official caucus or certain Bloc/Green alias; historical observed caucuses are accepted."
},
"ballot": {
"type": "string",
"description": "Recorded ballot Yea, Nay, or Paired, case-insensitive; Yes and No are accepted as Yea and Nay."
},
"number": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Division number returned by canparl_search_votes or canparl_get_bill.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based offset in the selected ordering."
},
"session": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Parliamentary session; omitted means current."
},
"personId": {
"type": "string",
"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."
},
"province": {
"type": "string",
"description": "English province/territory name or one of the 13 postal codes."
}
},
"additionalProperties": false
}| billType | string | Official bill type from canparl_list_reference topic bill_types. |
| titleContains | string | Literal case-insensitive substring of any English or French long or short title. |
| originatingChamber | string | House, House of Commons, or Senate; case-insensitive. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 10000,
"minimum": 1,
"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."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based offset in the selected ordering."
},
"status": {
"type": "string",
"description": "Official bill status from canparl_list_reference topic bill_statuses."
},
"session": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Parliamentary session; omitted means current."
},
"sponsor": {
"type": "string",
"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 indexed. A digit-only value equal to a current personId, or its /politicians/<digits>/ path or profile URL, is read as that personId."
},
"billCode": {
"type": "string",
"description": "Exact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321."
},
"billType": {
"type": "string",
"description": "Official bill type from canparl_list_reference topic bill_types."
},
"titleContains": {
"type": "string",
"description": "Literal case-insensitive substring of any English or French long or short title."
},
"originatingChamber": {
"type": "string",
"description": "House, House of Commons, or Senate; case-insensitive."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Current: literal name substring. Historical: one token is surname lookup; multiple tokens are full recorded name lookup, not substring search."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 10000,
"minimum": 1,
"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."
},
"party": {
"type": "string",
"description": "Official caucus name; Bloc and Green aliases accepted; current roster only."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based offset in the selected ordering."
},
"riding": {
"type": "string",
"description": "Literal riding substring; current roster only."
},
"province": {
"type": "string",
"description": "Province postal code or full English name; current roster only."
},
"includeFormer": {
"type": "boolean",
"default": false,
"description": "Use the sparse historical name index instead of the complete current official roster."
}
},
"additionalProperties": false
}| billDebated |
| object |
| Bill debated; combined with all other scopes using AND. |
| mentionedBill | object | Bill mentioned; combined with all other scopes using AND. |
| substantiveOnly | boolean | Exclude procedural remarks when true; false includes substantive and procedural remarks. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 10000,
"minimum": 1,
"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 contain 20 rows."
},
"dateTo": {
"type": "string",
"description": "Inclusive Ottawa civil date upper bound, YYYY-MM-DD; independently optional."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Raw candidate offset; keep every filter identical when continuing."
},
"contains": {
"type": "string",
"description": "Local case-insensitive Unicode-normalized literal English text substring; cannot be the only scope."
},
"dateFrom": {
"type": "string",
"description": "Inclusive Ottawa civil date lower bound, YYYY-MM-DD; independently optional."
},
"politician": {
"type": "string",
"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 value equal to a current personId, or its /politicians/<digits>/ path or profile URL, is read as that personId."
},
"billDebated": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Required bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321."
},
"session": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Required explicit parliament-session for this bill."
}
},
"description": "Bill debated; combined with all other scopes using AND.",
"additionalProperties": false
},
"mentionedBill": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Required bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321."
},
"session": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Required explicit parliament-session for this bill."
}
},
"description": "Bill mentioned; combined with all other scopes using AND.",
"additionalProperties": false
},
"substantiveOnly": {
"type": "boolean",
"default": true,
"description": "Exclude procedural remarks when true; false includes substantive and procedural remarks."
}
},
"additionalProperties": false
}| documentType |
| string |
| Official category from canparl_list_reference topic vote_document_types. |
| subjectContains | string | Literal Unicode-normalized case-insensitive subject substring. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 10000,
"minimum": 1,
"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."
},
"dateTo": {
"type": "string",
"description": "Inclusive Ottawa civil date YYYY-MM-DD; independently optional."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based offset in the selected ordering."
},
"result": {
"type": "string",
"description": "Official result from vote_results; Passed and Failed are accepted aliases."
},
"session": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d+-\\d+$",
"description": "Parliament-session token, such as 45-1."
},
{
"type": "object",
"required": [
"parliament",
"session"
],
"properties": {
"session": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive session number.",
"exclusiveMinimum": 0
},
"parliament": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive parliament number.",
"exclusiveMinimum": 0
}
},
"description": "Parliament and session numbers.",
"additionalProperties": false
}
],
"description": "Parliamentary session; omitted means current."
},
"billCode": {
"type": "string",
"description": "Exact bill code, including a split-bill suffix letter such as C-15A; accepts bill s321, S321, S 321, or S-321."
},
"dateFrom": {
"type": "string",
"description": "Inclusive Ottawa civil date YYYY-MM-DD; independently optional."
},
"documentType": {
"type": "string",
"description": "Official category from canparl_list_reference topic vote_document_types."
},
"subjectContains": {
"type": "string",
"description": "Literal Unicode-normalized case-insensitive subject substring."
}
},
"additionalProperties": false
}