knesset-mcp
It is an MCP server for querying the Israeli Knesset's open data (bills, laws, MKs, parties, committees, sessions, votes, and more) using prebuilt shortcuts or generic OData access.
Find and profile people:
find_personlocates MKs/ministers by Hebrew name;get_personreturns their full role history, factions, committee roles, and bill counts.Search and inspect bills:
search_billsfilters by name, Knesset, status, type, or initiator;get_billgives the full story — status, sponsors, name changes, merges, sessions, votes, and documents.Explore votes:
get_voteshows one plenum vote's totals, faction breakdown, and how each MK voted;get_person_voteslists an MK's votes with context for what "for"/"against" meant.Get sessions:
get_sessionretrieves plenum sittings or committee meetings with agenda, documents, protocols, and votes.Query any table generically:
list_tables,describe_table,query, andget_recordprovide access to every Knesset OData table with filtering, sorting, expanding related records, and paging.No API key needed: the server handles API quirks such as paging limits, firewall restrictions, Hebrew text, and join keys automatically.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@knesset-mcpsearch for bills sponsored by איימן עודה"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
knesset-mcp
An MCP server for the Israeli Knesset's open data: bills, laws, regulations, MKs, parties, committees, plenum sessions, votes and parliamentary questions. It covers every table in the Knesset's OData v4 API, including per-MK plenum votes. No API key is needed.
Tools
Shortcuts for common questions, each one call that does the joins for you:
Tool | Answers |
| Who is this MK? Returns their Id, latest faction and Knessets served. |
| Every role someone held: MK, faction, minister, committee roles, plus bill counts. |
| Bills by Hebrew name, Knesset, status, type (government/private/committee) or sponsor. |
| One bill: status, sponsors, name history, merges, committee and plenum sessions, votes, documents. |
| One plenum vote: totals, breakdown by faction, and who voted how. |
| How one MK voted, newest first, with what each vote was about and what "for" meant on it. |
| One plenum sitting or committee meeting: agenda, documents and protocols, votes. |
Generic access to every table:
Tool | Does |
| All tables grouped by topic, with what each holds. |
| Fields, types, links usable in |
| Any OData query ( |
| One record by Id. |
All data is in Hebrew, so search with Hebrew terms. Tools that take names reject Latin text and ask for the Hebrew form.
Related MCP server: mcp-datagov-il
Setup
python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'Add to Claude Code (stdio):
claude mcp add knesset -- /absolute/path/to/knesset-mcp/.venv/bin/knesset-mcpRun as an HTTP service (for remote clients, or a claude.ai custom connector once hosted):
.venv/bin/knesset-mcp --transport streamable-http --host 0.0.0.0 --port 8000The endpoint is http://<host>:8000/mcp.
Tests
.venv/bin/pytest # offline unit tests
.venv/bin/pytest -m live # end-to-end against knesset.gov.ilAPI quirks this server handles
Checked against the live API on 2026-09-23:
Paging: the API returns 100 rows per page plus a
@odata.nextLink. The server follows it, up to 200 rows per tool call, and returnsnext_skipwhen more exist.Firewall: knesset.gov.il's firewall rejects any query containing
;and any$applywithaggregate(), answering with an HTML "access denied" page. Both are refused locally with an explanation. Vote tallies are counted in the server instead.$expandon single records (KNS_Bill(123)?$expand=...) returns HTTP 500. Records are always fetched asKNS_Bill?$filter=Id eq 123, where expand works.Table and type names differ in places (the set
KNS_DocumentQueriehas the typeKNS_DocumentQuery). The schema is read live from$metadata, so this is handled.Broken tables:
V_Lobbyists,V_LobbyistsClientsandKNS_DocumentQuerieare listed but return 404, andKNS_DocumentIsraelLawis empty.A bare "for" or "against" is meaningless: voting against "to accept the reservation" is not voting against the law. Every ballot
get_person_votesreturns carriesForMeansandAgainstMeansfrom the vote itself.Joins never stop at one page: internally,
fetch_allpages through every matching row (up to 2,000) and logs a warning if it hits that ceiling, instead of silently returning 200.Join keys that aren't obvious:
KNS_PlenumVoteResult.MkId=KNS_Person.Id, andItemIDon votes and agenda items is theKNS_Bill.Idwhen the item is a bill.Responses are cached in memory for an hour, and the schema for a day.
Not yet covered
Reading document contents. Tools return links to .pdf/.doc files, including protocols, but don't extract their text.
Analytics across many records, such as how often an MK voted against their party. Each call reads at most 200 rows. That needs a local mirror of the data.
Available Tools
11 toolsdescribe_tableARead-onlyIdempotent
Show a table's fields and types, its links to other tables (usable in $expand), and optionally one example row, so you can write a correct query.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name from list_tables, e.g. KNS_Bill | |
| include_sample | No | Also fetch one example row |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context not in annotations: it discloses that links appear and that an example row is optional, and it does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly worded sentence with no filler. The core behavior is front-loaded, and the purpose is attached immediately, making it easy for an agent to scan and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only introspection tool with only two parameters, strong annotations, and no output schema, the description covers what the tool returns and why to use it. Nothing necessary for correct invocation or interpretation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters thoroughly. The description's mention of 'optionally one example row' echoes the include_sample parameter but adds little beyond the schema, though the $expand context is helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and identifies the exact resource: a table's fields, types, links for $expand, and optional example row. This clearly distinguishes it from siblings like list_tables (table names only) and query (data retrieval), while stating its goal of enabling correct query construction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'so you can write a correct query' establishes the intended use context: call this before writing a query when you need schema or relationship information. It does not explicitly name alternatives or state when not to use it, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_personARead-onlyIdempotent
Find MKs and ministers by Hebrew name. Returns each match's Id (use it with get_person, get_person_votes, search_bills), latest faction and the Knessets they served in.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Hebrew name or part of it, e.g. 'נתניהו' or 'יאיר לפיד' | |
| current_only | No | Only people currently serving |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds what the response contains (matches' Ids, latest faction, served Knessets), which is useful because there is no output schema. It does not discuss pagination or match limits, but this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the primary action and input condition are front-loaded, and the return-value guidance follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter lookup with full schema coverage and safety annotations, the description covers the essential return shape and downstream usage. No important information an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents name and current_only, including an example. The description adds no parameter-specific detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the action ('Find'), the resource ('MKs and ministers'), and the search key ('Hebrew name'). It also distinguishes itself from get_person by explaining the returned Id can be chained into get_person, get_person_votes, and search_bills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use the tool: to find people by Hebrew name before fetching their details or votes. It gives downstream routing, though it does not explicitly state when not to use it or mention alternatives like query/get_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billARead-onlyIdempotent
Everything about one bill: details and status, initiators, name changes, merges and splits, committee and plenum sessions that discussed it, plenum votes on it (pass a vote Id to get_vote for how each MK and party voted), and document links.
| Name | Required | Description | Default |
|---|---|---|---|
| bill_id | Yes | KNS_Bill Id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, openWorldHint, and non-destructiveness, so the description does not need to restate those. It adds value by describing the aggregate, hub-like nature of the response and connecting to get_vote for deeper vote detail. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that leads with the core purpose and then packs every meaningful content type into a readable list. The parenthetical routing to get_vote earns its place and the whole definition is efficient despite its breadth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only getter with rich annotations, the description fully enumerates the return categories an agent needs to anticipate: status, history, sessions, votes, and document links. It also covers the natural follow-up path to get_vote. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: bill_id is described as 'KNS_Bill Id' and is required. The description adds no new semantic detail about where to find or format the bill_id, but at full schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb plus resource: it retrieves 'everything about one bill,' then enumerates the concrete data categories included (status, initiators, history, sessions, votes, documents). This clearly distinguishes it from siblings like search_bills and get_vote by emphasizing that this is the comprehensive single-bill endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the scope clear: use this when you need comprehensive details about one bill. It also provides a useful routing cue by directing the reader to get_vote for per-MK/party vote breakdowns. It does not explicitly state when not to use it versus search_bills, but the context is strong enough to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personBRead-onlyIdempotent
A person's profile: every role they held over time (MK and faction, minister, deputy minister, committee roles) plus how many bills they initiated.
| Name | Required | Description | Default |
|---|---|---|---|
| person_id | Yes | KNS_Person Id (from find_person) | |
| knesset_num | No | Only roles in this Knesset (long careers produce long output) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only output scope, not behavioral details like pagination, output size, or long-career warnings; no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with enumerations; every clause adds information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a good job of saying what the profile contains (roles and bill count). It does not mention identity fields or how to handle long career outputs, and the usage guidance gap slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already fully documented (person_id source and knesset_num filtering behavior). The description adds no parameter-level meaning beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names a specific resource ('a person's profile') and enumerates the returned content (roles over time, bill count), so an agent knows what the tool returns. It does not explicitly differentiate from siblings like find_person or get_person_votes, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance or alternatives; an agent cannot tell whether to pick get_person over find_person for a search task. The schema's 'from find_person' hint is external to the tool description and does not count toward this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_person_votesARead-onlyIdempotent
How one MK voted in the plenum, newest first, with what each vote was about. Pass a VoteID to get_vote to see how everyone else voted.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| skip | No | ||
| since | No | From date, YYYY-MM-DD | |
| until | No | To date, YYYY-MM-DD | |
| person_id | Yes | KNS_Person Id (from find_person) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, non-destructive, and idempotent, so the description need only add behavioral context. It adds ordering ('newest first') and content scope ('what each vote was about'), which is useful. It does not mention pagination or result limits, though top/skip parameters hint at them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, purposeful sentences with no filler. The core behavior is front-loaded, and the sibling distinction is delivered succinctly in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 5-parameter tool with pagination and date filters and no output schema. The description covers purpose and ordering but leaves pagination behavior, result shape, and date-filter usage largely implicit. The schema helps for some parameters, making this minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for person_id, since, and until, but top and skip have only titles, defaults, and ranges. The description adds no direct parameter explanations, though 'newest first' gives some ordering context for pagination. Overall it does not significantly supplement the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: showing how one MK voted in the plenum, newest first, with the subject of each vote. It distinguishes itself from get_vote by pointing out that get_vote shows how everyone else voted for a specific VoteID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use get_vote instead ('Pass a VoteID to get_vote to see how everyone else voted'), giving both the alternative and the condition that selects it. The intended use for this tool is also clear from the first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recordARead-onlyIdempotent
Fetch one record from any table by its Id, optionally with linked records.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The record's Id | |
| table | Yes | Table name, e.g. KNS_Committee | |
| expand | No | Links to include, e.g. KNS_Committee,KNS_Status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile: readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful scope context ('any table') and the linked-record option, but it does not disclose not-found behavior, error handling, or expand semantics. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence contains the operation, the resource type, the key constraint, and the optional behavior. No filler or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch tool with robust annotations and a fully documented schema, the description is nearly complete. An agent can invoke it correctly. A small gap is the lack of response/not-found behavior, but that is not essential for selecting or calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented. The description adds only the idea of optional linked records, which lightly reinforces the expand parameter but does not materially enrich parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch one record from any table by its Id', which clearly identifies the operation. It is implicitly distinguished from sibling get_* tools by the phrase 'any table', though it does not explicitly contrast itself with the more generic query tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context: use when you need a single record by ID, optionally with linked records. However, it does not explicitly say when to prefer this over alternatives like query or the dedicated get_person/get_bill tools, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessionARead-onlyIdempotent
One plenum sitting or committee meeting: when, which committee, the agenda items, documents (including protocols), and for plenum sittings the votes held.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Plenum sitting or committee meeting | |
| session_id | Yes | Session Id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the operation is read-only, idempotent, and non-destructive. The description adds useful content context, such as the inclusion of protocols and votes only for plenum sittings, but it does not disclose behavioral details like error handling or what happens when the session is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact phrase with no redundant words. It is front-loaded with the core entity and uses a colon to efficiently enumerate the returned contents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only lookup tool, the description, schema, and annotations together provide sufficient context to select and invoke the tool. It could be strengthened by mentioning where to obtain session_id or clarifying the committee/plenum disambiguation, but nothing critical is missing for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters with 100% coverage, including the enum values for kind. The description largely restates the kind distinction and adds that plenum sittings include votes, but it does not meaningfully expand on session_id or how the parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as a plenum sitting or committee meeting and enumerates its contents (time, committee, agenda, documents, votes), which distinguishes it from sibling tools like get_person or get_bill. It lacks an explicit verb such as 'retrieves' or 'returns', but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: if you need the details of one plenum sitting or committee meeting, this tool is appropriate. However, the description does not explicitly state when to prefer this over related tools like get_vote or get_record, nor does it provide exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_voteBRead-onlyIdempotent
One plenum vote: what was voted on, the totals, the breakdown by faction, and the names of the MKs behind each result.
| Name | Required | Description | Default |
|---|---|---|---|
| vote_id | Yes | KNS_PlenumVote Id (from get_bill, get_session or get_person_votes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the return content (voted on, totals, faction breakdown, MK names), which is useful context about what to expect. However, it does not mention potential errors, null returns, or any other behavioral traits, but this is partially mitigated by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the tool's purpose ('One plenum vote') and immediately details the output. There is no filler or repetition; every phrase contributes information about the response content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one well-documented parameter and safety annotations, the description is fairly complete. It lists the key output dimensions the agent needs. It does not describe exact formatting or error handling, but with no output schema, it provides sufficient expectation of what is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter vote_id, including its exact source and type. The description adds no additional parameter semantics; it relies entirely on the schema. Since the schema fully explains the parameter, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the resource (a single plenum vote) and the specific information it provides: what was voted on, totals, faction breakdown, and MK names. It implies a retrieval action though it lacks an explicit verb. It distinguishes itself from siblings through its singular focus on one vote, differing from get_bill or get_person_votes, but the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not state 'use when you have a vote ID' or recommend sibling tools like get_person_votes for listing a person's votes. The only usage hint appears in the schema's parameter description (source of vote_id), not in the tool description itself, so the agent receives no direct routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesARead-onlyIdempotent
List every Knesset table, grouped by topic, with what each one holds.
Use this to find the right table before describe_table and query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds that results are grouped by topic and include what each table holds, which is useful context but not rich behavioral detail beyond that (e.g., pagination or output format absent). This aligns with the moderate bar for read-only list tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The purpose is front-loaded, and the usage hint follows immediately. Every word contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with no parameters, the description fully covers what the tool does, how to use it, and when to use it. No output schema exists, so no return format is required. The description provides enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no semantics to add. The baseline for 0-param tools is 4, and the description doesn't need to elaborate on parameters since none exist. It does imply a global listing without filters, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List every Knesset table, grouped by topic, with what each one holds.' It specifies a distinct action (list) and resource (Knesset tables), and differentiates from siblings by noting it's a discovery tool to use before describe_table and query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides when to use: 'Use this to find the right table before describe_table and query.' This names the alternatives and the correct sequence, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryARead-onlyIdempotent
Query any Knesset table with OData v4 options. Returns up to 200 rows per call; when more exist the result includes next_skip. Text fields are Hebrew.
Example: table=KNS_CommitteeSession, filter="CommitteeID eq 4191 and StartDate ge 2026-01-01T00:00:00Z", orderby="StartDate desc", expand="KNS_CmtSessionItem($select=Name)".
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Rows to return | |
| skip | No | Rows to skip, for paging (use next_skip from the previous call) | |
| count | No | Also return the total number of matching rows | |
| table | Yes | Table name, e.g. KNS_Bill | |
| expand | No | Links to include, e.g. KNS_Person($select=FirstName,LastName). No ';'. | |
| filter | No | OData $filter, e.g. KnessetNum eq 25 and contains(Name,'דיור') | |
| select | No | Comma-separated fields to return (recommended, keeps output small) | |
| orderby | No | e.g. 'StartDate desc' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description doesn't need to restate safety. It adds valuable behavior: a 200-row cap, next_skip pagination signal, Hebrew text fields, and OData v4 syntax, going beyond annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences plus one compact example carry all the key operational details. There is no filler, and the most important constraints (row cap, pagination, language) are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic OData query tool with no output schema, the description covers pagination, row limits, text language, and gives a syntax example. It could be more complete with explicit guidance on how to discover table names or when to prefer sibling tools, but schema and annotations cover most remaining needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds meaning by showing a realistic combination of table, filter, orderby, and expand, and by explaining that skip should use next_skip from the previous call. This is helpful but not essential given the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Query any Knesset table with OData v4 options') followed by concrete behavior and an example. It implies a general-purpose role distinct from sibling tools like get_record or get_bill, but it does not explicitly name those distinctions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'any Knesset table' and the example imply this is the general-purpose query tool. However, there is no explicit when-to-use vs alternatives guidance, no exclusions, and no mention of specialized sibling tools like search_bills or get_person.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_billsARead-onlyIdempotent
Search bills by name, Knesset, status, type or initiator. Newest Knesset first. Each result includes its status in words; use get_bill for the full story of one bill.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| skip | No | ||
| text | No | Hebrew words in the bill's name, e.g. 'דיור' | |
| bill_type | No | Who proposed it | |
| status_id | No | KNS_Status Id, e.g. 118 = passed third reading (became law) | |
| knesset_num | No | Knesset number, e.g. 25 | |
| initiator_person_id | No | Only bills this person initiated (Id from find_person) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: results are ordered with newest Knesset first, and each result includes its status in words. This goes beyond the annotations and helps the agent understand what to expect from the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The first sentence states the core function and filter dimensions, the second adds ordering and result content, and the final clause routes to get_bill for deeper detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no required parameters, no output schema, and annotations covering safety, the description is quite complete. It covers what the tool does, how results are ordered, what each result includes, and how to get more detail. The only minor gap is that it doesn't mention pagination (top/skip) or the default result count, but those are visible in the schema with defaults. Given the tool's simplicity, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so the schema already documents most parameters. The description adds a high-level summary of filter dimensions but doesn't add detail beyond the schema for individual parameters. The 'text' parameter has an example in the schema, and 'status_id' has an example. The description's mention of 'status in words' hints at the status_id parameter's meaning but doesn't add significant new semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and resource ('bills'), and enumerates the filter dimensions (name, Knesset, status, type, initiator). It also distinguishes itself from get_bill by noting that search returns summaries and get_bill provides the full story. This clearly differentiates it from sibling tools like get_bill and find_person.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need to find bills by various criteria, and it explicitly points to get_bill for full details of a single bill. It doesn't explicitly state when not to use it or mention alternatives like find_person for person lookup, but the context is clear enough for an agent to select it appropriately.
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.
11 tool updates
v0.1.0- First observed
describe_table - First observed
find_person - First observed
get_bill - First observed
get_person - First observed
get_person_votes - First observed
get_record - First observed
get_session - First observed
get_vote - First observed
list_tables - First observed
query - First observed
search_bills
TDQS
Scored across 11 tools
Each tool targets a distinct entity or operation: table discovery, generic querying, people, bills, votes, and sessions are clearly separated. Even generic get_record is distinguishable from get_person/get_bill by its purpose as a raw record fetch.
Most tools follow a clear verb_noun pattern: list_tables, describe_table, find_person, get_person, search_bills, get_bill, get_vote, get_session. The bare 'query' tool is a minor outlier, but the overall convention is still predictable.
With 11 tools, the server is well-scoped for a Knesset data domain. Each tool covers a meaningful operation without redundancy or bloat.
The tool set covers the full read-only lifecycle: table discovery and schema inspection, generic querying, person profiles and voting records, bill search and detail, plenum votes, and sessions. The generic query and get_record tools also prevent dead ends for entities without dedicated endpoints.
Maintenance
Related MCP Connectors
Israel Government Procurement MCP — public tenders & exemption contracts (keyless).
Access U.S. congressional data - bills, votes, members, committees - via MCP.
data.gov.il MCP — Israel national open-data portal (CKAN API).
Search MPs and Lords, fetch profiles, synopses, and Westminster constituencies
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceProvides access to Israel's OpenBudget API, allowing users to query and search various government budget datasets including budget items, contracts, and support payments.12-
- AlicenseNot gradedqualityBmaintenanceProvides access to Israel's national open data portal (data.gov.il) via CKAN API, enabling listing of publishing organizations and thematic groups.331 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to query bills, committees, and members from the Israeli Knesset parliamentary information API via MCP tools.927 npm2MIT
- AlicenseAqualityAmaintenanceEnables searching and retrieving metadata of Israeli primary legislation via the Knesset's official OData API, including law names, status, and Basic Law classification.789 PyPI1Apache 2.0