protogrid

Search / io.github.cyanheads/canada-parliament-mcp-server

canada-parliament-mcp-server

R0· no sign-in

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

v0.2.1 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality87good
Trust94of 100
Uptime, 30 days100%
Latency p50345 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "canada-parliament-mcp-server": {
      "type": "http",
      "url": "https://canada-parliament.caseyjhand.com/mcp"
    }
  }
}
claude mcp add --transport http canada-parliament-mcp-server https://canada-parliament.caseyjhand.com/mcp
[mcp_servers.canada-parliament-mcp-server]
url = "https://canada-parliament.caseyjhand.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "canada-parliament-mcp-server": {
      "type": "remote",
      "url": "https://canada-parliament.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "canada-parliament-mcp-server": {
      "type": "http",
      "url": "https://canada-parliament.caseyjhand.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=canada-parliament-mcp-server&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vY2FuYWRhLXBhcmxpYW1lbnQuY2FzZXlqaGFuZC5jb20vbWNwIn0%3D"
}
{
  "servers": {
    "canada-parliament-mcp-server": {
      "type": "http",
      "url": "https://canada-parliament.caseyjhand.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "canada-parliament-mcp-server": {
      "httpUrl": "https://canada-parliament.caseyjhand.com/mcp"
    }
  }
}
extensions:
  "canada-parliament-mcp-server":
    enabled: true
    name: "canada-parliament-mcp-server"
    type: streamable_http
    uri: "https://canada-parliament.caseyjhand.com/mcp"
    timeout: 300

Quality 87 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations8 of 8 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: canparl_search_bills (destructiveHint); canparl_get_member (destructiveHint); canparl_get_vote (destructiveHint); …
  • pass
    tools.token_costabout 5,427 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes8 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependencies100 · weight 15
  • pass
    deps.known_vulnsno known advisory in 130 resolved packages
  • pass
    deps.mcp_sdk_version@modelcontextprotocol/core 2.4.0, no known advisory
  • pass
    deps.resolvable@cyanheads/[email protected], @cyanheads/[email protected] resolved: 130 packages

8 tools, about 5,427 tokens to load them all · tool set bb8a0eb11c55 · tools last changed 2026-11-01 · checked 2026-11-07 18:01 UTC

Tool changes

  • canparl_list_referencechangeddescription, input schema, output schema
    before

    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.

    after · 63% of words in common

    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.

  • canparl_search_speecheschangedinput schema, output schema
  • canparl_get_votechangedinput schema, output schema
  • canparl_search_voteschangedinput schema, output schema
  • canparl_get_memberchangeddescription, input schema, output schema
    before

    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.

    after · 94% of words in common

    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.

  • canparl_search_memberschangeddescription, input schema, output schema
    before

    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.

    after · 65% of words in common

    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.

  • canparl_get_billchangedinput schema, output schema
  • canparl_search_billschangedinput schema, output schema

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance80
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +reachable +uptime-100% +updated-7d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@cyanheads/[email protected] npm64 dependencies, resolved · MCP SDK @modelcontextprotocol/core 2.4.0 · advisories checked 2026-11-07

No known advisory affects this dependency graph.

@cyanheads/[email protected] npm64 dependencies, resolved · MCP SDK @modelcontextprotocol/core 2.4.0 · advisories checked 2026-11-07

No known advisory affects this dependency graph.

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://canada-parliament.caseyjhand.com/mcp streamable-httpnoneyes100%345 ms2026-07-282026-11-07
packageregistryversionruntimesecrets
@cyanheads/canada-parliament-mcp-servernpm0.2.1npx
@cyanheads/canada-parliament-mcp-servernpm0.2.1npx

Tools (8)

canparl_get_billread-onlyRead 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.
canparl_get_memberread-onlyRead 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.
canparl_get_voteread-onlyRead 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.
canparl_list_referenceread-onlyList 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.
canparl_search_billsread-onlyFind 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.
canparl_search_membersread-onlyFind 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.
canparl_search_speechesread-onlyFind 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.
canparl_search_votesread-onlyFind 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.

Schemas: list_tools.

Similar MCP servers

More from io.github.cyanheads

And 153 more from this publisher.

Official server.json
{
  "name": "io.github.cyanheads/canada-parliament-mcp-server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://canada-parliament.caseyjhand.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.2.1",
  "packages": [
    {
      "version": "0.2.1",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@cyanheads/canada-parliament-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "CANPARL_USER_AGENT",
          "format": "string",
          "description": "Optional HTTP identification; blank uses the server default. CR/LF forbidden."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    },
    {
      "version": "0.2.1",
      "transport": {
        "url": "http://localhost:3010/mcp",
        "type": "streamable-http"
      },
      "identifier": "@cyanheads/canada-parliament-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "CANPARL_USER_AGENT",
          "format": "string",
          "description": "Optional HTTP identification; blank uses the server default. CR/LF forbidden."
        },
        {
          "name": "MCP_TRANSPORT_TYPE",
          "value": "http",
          "format": "string",
          "description": "Selects the HTTP transport."
        },
        {
          "name": "MCP_HTTP_HOST",
          "format": "string",
          "default": "127.0.0.1",
          "description": "The hostname for the HTTP server."
        },
        {
          "name": "MCP_HTTP_PORT",
          "format": "string",
          "default": "3010",
          "description": "The port to run the HTTP server on."
        },
        {
          "name": "MCP_HTTP_ENDPOINT_PATH",
          "format": "string",
          "default": "/mcp",
          "description": "The endpoint path for the MCP server."
        },
        {
          "name": "MCP_AUTH_MODE",
          "format": "string",
          "default": "none",
          "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/cyanheads/canada-parliament-mcp-server",
    "source": "github"
  },
  "description": "Track Canadian federal bills, MPs, House votes, and Hansard speeches."
}