protogrid

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

switzerland-parliament-mcp-server

R0· no sign-in

Search Swiss parliamentary business, votes, debates, members, and declared interests.

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

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

Connect

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

Quality 89 / 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.annotations7 of 7 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: chparl_get_votes (destructiveHint); chparl_search_transcripts (destructiveHint); chparl_get_member (destructiveHint); …
  • pass
    tools.token_costabout 4,155 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15

7 tools, about 4,155 tokens to load them all · tool set 49ab5ab1f5df · checked 2026-11-07 18:35 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

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-13d-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] npmthis version is not known to the dependency resolver

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

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://switzerland-parliament.caseyjhand.com/mcp streamable-httpnoneyes100%354 ms2026-07-282026-11-07
packageregistryversionruntimesecrets
@cyanheads/switzerland-parliament-mcp-servernpm0.1.2npx
@cyanheads/switzerland-parliament-mcp-servernpm0.1.2npx

Tools (7)

chparl_get_businessread-onlyRead a Swiss parliamentary business by canonical eight-digit businessId or exact published short number. Choose overview for metadata and available text sizes; texts for original published text, automatically outlined when several fields exceed the disclosure budget; or status_history, bills, related_business, preconsultations, or subjects for independently paged relationships. textFields selects complete original fields only in texts, even when large. Paging applies only to relationships. Use subjects to narrow chparl_search_transcripts; source text and HTML remain unchanged.
chparl_get_memberread-onlyRead a Swiss Parliament member by PersonNumber, which need not equal Person.ID. overview returns identity and every base MemberCouncil affiliation without pagination. Select council_terms for historical council terms, committees for published MemberCommittee rows, or interests for declared interests; those sections accept limit and offset. Missing paid status means unknown, and empty interests do not establish absence of conflicts of interest. Metadata labels remain in the selected language.
chparl_get_votesread-onlyFind Nationalrat roll calls with mode votes and businessId, sessionId, or both. Use mode members with voteId for one paged roll call, or personNumber without voteId for member history optionally filtered by businessId and sessionId. Use mode groups with voteId for complete decision counts by parliamentary group. Member roll calls start in the 2003 winter session and exclude Ständerat member votes; an empty result does not prove no vote occurred. Member counts cover only delivered rows; groups mode reads all published member rows before reporting totals. Verbatim decisionTexts accompany code buckets when published. Code meanings include 1 yes, 2 no, 3 abstention, 4 present, 5 did not participate, 6 excused under Art. 57 para. 4, 7 president does not vote, and 8 resigned. Unknown codes and missing decisions are retained. Follow nextOffset with the same mode and filters.
chparl_list_referenceread-onlyList Swiss Parliament reference entries and source coverage. Choose identifiers, coverage, or languages for server explanations; statuses for the official legacy/current status snapshot; or business_types, councils, cantons, parties, groups, committees, or sessions for live dictionaries. Date filters apply only to sessions. Follow nextOffset with the same topic, language, and dates; labels remain in the requested metadata language and missing labels stay unknown.
chparl_search_businessread-onlySearch Swiss parliamentary business by title substring, published submitter label, type, current status, submission session, inclusive submission dates, or committee role. Use chparl_list_reference to resolve codes and chparl_get_business to read a returned businessId. Follow nextCursor with unchanged filters; newest canonical business IDs appear first. Author searches omit the business total. Committee searches page role candidates and may return short pages without a distinct business total. Metadata labels remain in de, fr, or it without translation fallback.
chparl_search_membersread-onlyFind current or former Swiss Parliament affiliation records by name, council, canton, party, or parliamentary group. membership defaults to current; former selects inactive records and all omits the activity filter. query matches a substring of a published first, last, or official name. Use each record’s personNumber with chparl_get_member for identity, full council terms, committees, and declared interests. Follow nextOffset with the same filters.
chparl_search_transcriptsread-onlyFind Amtliches Bulletin passages by business, debate subject, speaker, session, council, or inclusive meeting dates. Supply at least a business, subject, speaker, session, or date bound. A text substring query additionally requires sessionId or a closed date range of at most 31 calendar days. Searches return metadata by default; includeText returns whole original passages, and an exact transcriptId defaults to full text. Metadata language never translates the speaker text; missing LanguageOfText remains unknown. Business searches cover every associated subject up to 20; larger debates require selecting subjectId through chparl_get_business section subjects. Follow nextOffset with unchanged 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/switzerland-parliament-mcp-server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://switzerland-parliament.caseyjhand.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.2",
  "packages": [
    {
      "version": "0.1.2",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@cyanheads/switzerland-parliament-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    },
    {
      "version": "0.1.2",
      "transport": {
        "url": "http://localhost:3010/mcp",
        "type": "streamable-http"
      },
      "identifier": "@cyanheads/switzerland-parliament-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "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/switzerland-parliament-mcp-server",
    "source": "github"
  },
  "description": "Search Swiss parliamentary business, votes, debates, members, and declared interests."
}