MCP server for accessing Israeli State Budget data, budgetary support information, contracts, tenders, and related government financial datasets
BudgetKey presents three well-structured data query tools with comprehensive descriptions and clear usage patterns. All three tools have proper input schemas with type definitions and descriptions. Descriptions are detailed and actionable (200-500 chars), exceeding baseline minimums and providing explicit prerequisites and multi-step workflows. Tool naming follows verb_noun conventions (DatasetInfo, DatasetFullTextSearch, DatasetDBQuery). However, output schemas are not formally documented in the visible code, while the code fetches data from an external API, there is no explicit JSON Schema or field listing for responses returned to the LLM. Error handling is minimal: tools catch exceptions and return a basic {error: str(e)} without recovery guidance or categorization. The tools lack explicit per-parameter constraints (enums, min/max bounds) in the schema definitions, relying instead on free-text parameter descriptions to convey allowed values. Tool composition is sound, each tool has a single responsibility, and the workflow instructions guide proper sequencing.
Execute PostgreSQL-compatible SQL queries to obtain comprehensive, precise information from datasets. **CRITICAL Prerequisites**: 1. MUST call DatasetInfo first to understand the dataset schema 2. Use exact column names from the schema (case-sensitive) 3. If you need identifiers, call DatasetFullTextSearch first to find them **Usage Instructions**: - Use only identifiers found through DatasetFullTextSearch - NEVER guess identifiers - Filter by relevant time periods (year, date fields) - Use aggregate functions (SUM, COUNT, AVG) to summarize data when appropriate - ALWAYS include the `item_url` field in SELECT to provide direct links to data - Construct queries based on the exact schema from DatasetInfo **Query Best Practices**: - Format results in tables when possible - Use ORDER BY to sort results meaningfully - Apply WHERE clauses for time periods and specific filters - Use JOINs when querying related tables
Perform full-text search on a dataset to locate relevant items and identifiers. **Purpose**: Use this tool to find specific textual identifiers (IDs, codes, names) needed for precise queries. Do NOT use this tool for searching time periods or dates. **Usage Instructions**: 1. ALWAYS call DatasetInfo first to understand the dataset structure 2. Use free-text search to find entities by name, title, or description 3. Extract relevant identifiers (like entity_id, code, budget_code) from the results 4. Use these identifiers in your DatasetDBQuery calls for precise filtering 5. NEVER present search results directly to the user as your final answer **When to use**: - To find the entity_id of an organization mentioned by name - To find budget item codes by searching for keywords - To locate contracts by supplier name or description - When you need specific identifiers but only have descriptive text **Important**: - Search results are for YOUR use to find identifiers, not for presenting to users - Always follow up with DatasetDBQuery using the identifiers you found - If unsure which identifier to use in a query, search first - AVOID calling more than 4 tools in parallel to prevent memory overflow
Output schemas not documented. Tools fetch from external API but do not explicitly declare what fields, types, or structure are returned to the LLM. LLMs cannot plan downstream steps or extract required fields with confidence.
Error handling is minimal and non-actionable. Tools catch all exceptions as {error: str(e)}, returning raw exception messages. No error classification (retryable vs. user-fixable vs. fatal), no recovery guidance, no invalid-value feedback to help the LLM self-correct.
Input schemas lack constraints. The 'dataset' parameter accepts a free-form string with documentation of allowed values, but no JSON Schema enum constraint. The 'q' parameter in DatasetFullTextSearch and 'query' in DatasetDBQuery are unconstrained strings. Without enum or pattern validation, LLMs can pass invalid or hallucinated dataset IDs.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 79 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 61 | - | v1 |
Get comprehensive information about a dataset, including its columns and database schema. **CRITICAL**: Always call this tool BEFORE using DatasetFullTextSearch or DatasetDBQuery on any dataset. This tool provides essential information about: - Available columns and their data types - Database schema and table structure - Field descriptions and relationships **Usage Instructions**: 1. Call this tool first when working with any dataset 2. Review the schema to understand what fields are available 3. Use the column names exactly as shown when constructing SQL queries 4. Note any special fields like 'item_url' that provide links to data **When to use**: - Before performing any search or query on a dataset - When you need to understand what fields are available - To verify field names before constructing SQL queries
DatasetDBQuery 'page_size' parameter has a default but no validation bounds. Default is 50; no documented min/max. An LLM could pass page_size=999999, potentially causing API overload or timeout.