mcp-iati
OfficialThis server lets you explore, filter, summarize, and analyze IATI development-cooperation data (activities, transactions, sectors, countries, and organisations) through a set of dedicated tools.
Get an overview of the loaded IATI file: number of activities, reporting organisations, recipient countries, currencies, and financial totals.
Check the date coverage of activity and transaction dates.
List available categorical values such as activity statuses, transaction types, sectors, aid types, currencies, and more.
Search activities by title text and retrieve their IATI identifiers.
List activity statuses, reporting organisations, and recipient countries with activity counts.
Filter activities by recipient country, sector, participating organisation, status, and free text.
Get a summary of a single activity: title, status, organisations, dates, sectors, classifications, and financial totals.
List an activity's transactions in chronological order.
Compute commitment/disbursement totals grouped by year, reporting organisation, recipient country, or sector, with currencies kept separate.
Rank activities by highest commitment or disbursement totals, with optional country/sector/organisation/status filters.
Count activities grouped by country, sector, organisation, or status, optionally filtered by other dimensions.
Define IATI terms using the built-in glossary, e.g. "disbursement" or "policy marker".
Fall back to a no-tool response for questions outside the server's scope.
List complementary resources and links offered by the server.
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., "@mcp-iatiShow me total commitments by recipient country for 2024"
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.
MCP IATI
Note: Local proof of concept. Starting point for a future mcp-server
plugin that processes files following the
IATI standard (activities and organisations):
documented Python tools, with plugin_info/instructions/sample_questions,
a no_tool_disponible fallback tool and a tools module separate from the
registration wiring.
It defines tools for exploring activities, organisations, recipient countries, sectors and transactions from a configured IATI XML.
Available tools:
search_activities(text, limit=10): search activities by text in their title, description, sector names or participating organisation names, reporting where each match was found.list_activity_statuses(): list available activity statuses and counts.list_reporting_organisations(): list reporting organisations and their number of activities.list_participating_organisations(limit=100): list all participating organisations with their roles, ordered by number of activities.filter_activities(country, sector, organisation, status, text, limit=300): filter activities by any combination of recipient country, sector, participating organisation, activity status and title/description text (all optional, activities must satisfy every supplied one). Each value is resolved against the loaded data before filtering, and the response says how it matched and to which published value it resolved; when a value cannot be resolved, the response names the failing filter and lists the values available so the model can retry with an exact one. Country names in English, Spanish, Portuguese or French ("Brasil", "Bresil") are mapped to the ISO code (activities/country_aliases.py), so they match a file that only says "Brazil". The threefilter_activities_by_*tools below are thin wrappers over this one.list_recipient_countries(): list recipient countries and activity counts.filter_activities_by_country(country, limit=10): filter activities by recipient-country code or name.list_sectors(limit=100, country=None, organisation=None, status=None): list sector codes, names and vocabularies with activity counts, optionally restricted to the activities matching the filters ("which sectors do the activities in Argentina cover?"). Missing names for OECD DAC codes (vocabulary 1) are filled in from the standard DAC codelist.filter_activities_by_sector(sector, limit=10): filter activities by sector code or name (exact code first, then exact name, then name substring); on no match, the response lists the sectors available in the loaded data.filter_activities_by_participating_org(organisation, limit=10): filter activities by participating organisation reference or name (exact reference first, then exact name, then a fallback combining name substrings with closely similar names, to cope with misspelled published names), reporting each organisation's role and which match kind applied; on no match, the response lists the organisations available in the loaded data.
Text matching in the search and filter tools ignores case and accents, while responses always show the names exactly as published.
activity_summary(iati_identifier): show the main details of one activity: title, status, description, dates, recipient country, sectors, reporting and participating organisations (with their roles), default classifications and financial totals per transaction type.activity_transactions(iati_identifier, limit=50): list an activity's transactions in chronological order.transaction_totals_by_year(year_from=None, year_to=None, country=None, sector=None, organisation=None, status=None): group commitment and disbursement totals by year, transaction type and currency, while ignoring invalid dates/values and using the activity default currency when a transaction currency is missing.transaction_totals_by_organisation(limit=50): group commitments and disbursements by reporting organisation, keeping transaction types and currencies separate and clarifying that the reporting organisation is the publisher of the activity data, not necessarily the funder or implementer.transaction_totals_by_country(transaction_type="2", currency=None, limit=50, sector=None, organisation=None, status=None): group commitments and disbursements by recipient country, keeping transaction types and currencies separate and using a clear fallback label when country details are missing.transaction_totals_by_sector(transaction_type="2", currency=None, vocabulary=None, limit=50, country=None, organisation=None, status=None): allocate commitment or disbursement totals across sectors using the published percentages, keeping vocabularies and currencies separate and adding anUnallocated sectorbucket when percentages do not total 100%.top_activities_by_amount(transaction_type="2", currency=None, limit=10, country=None, sector=None, organisation=None, status=None): list activities with the highest commitment or disbursement totals, ranked independently for each currency ("top 5 activities by commitment in Argentina" iscountry="AR", limit=5).count_activities_by(group_by, country=None, sector=None, organisation=None, status=None, limit=50): the generic group-by: number of distinct activities per value of one dimension (country,sector,organisationorstatus), inside the optional filters on the other dimensions. "Sectors per country" iscount_activities_by("sector", country="AR"); "countries where organisation X participates" iscount_activities_by("country", organisation="X"). Returns a table and a bar chart.
The country, sector, organisation and status filters of the
aggregation tools above are resolved exactly like in filter_activities
(ISO code or name in several languages, sector code or name, organisation
reference or name, status code or label), and an unresolved value returns
the same "available values" message instead of an empty total.
define_term(term): explain an IATI term using the central glossary.
Guiding principle: these tools only use generic IATI standard fields (identifiers, statuses, organisations, recipient countries, sectors and transactions), never Brazil- or IADB-specific logic - they must work just as well with any other IATI XML (see the configuration variables below).
Where the data comes from
The XML files are official IATI publications, not versioned in this
repo. By default they are the Inter-American Development Bank's, downloaded
on demand from the bank's own hosting at
webimages.iadb.org/iati
(the same URLs the IATI Dashboard
indexes; the IADB refreshes them monthly) into the user data directory
(~/.local/share/mcp-iati/xml/ on Linux, via platformdirs) and refreshed
when the configured TTL expires. The .gitignore excludes any *.xml just
in case.
Any other publisher works the same way. The public
mcp.okfn.org/iati-caf/ instance serves the
activity file of CAF, Development Bank of Latin America and the
Caribbean through
MCP_IATI_DATASET=caf-actfile-46008-2603 (see below).
Finding a publisher's XML: the IATI Dashboard
The CKAN-based IATI Registry (iatiregistry.org) was replaced in December
2025 by IATI Account (publishers manage
their files there) and the IATI Dashboard
(public, read-only metadata about every reporting organisation and dataset).
The Dashboard exposes a JSON API without authentication:
# one publisher and its dataset count
curl https://dashboard.iatistandard.org/api/reporting-orgs/caf/
# its datasets, each with the XML URL currently published (`source_url`)
curl "https://dashboard.iatistandard.org/api/datasets/?reporting_org__short_name=caf"
# one dataset
curl https://dashboard.iatistandard.org/api/datasets/caf-actfile-46008-2603/Some publishers (CAF among them) put the release date in the XML filename,
so the URL changes with every update. MCP_IATI_DATASET takes the dataset
short name instead and resolves the current source_url through that API
on first use and whenever the cache TTL expires; the last resolved URL is
kept on disk so a Dashboard outage never stops a running server.
Related MCP server: mcp-ietf-datatracker
How the XML is processed
mcp_iati/activities/data.pyconverts the configured XML to flat CSVs and reuses the source-specific cache until its TTL expires, usingokfn_iati.IatiMultiCsvConverter().xml_to_csv_folder(...)(the same libraryckanext-iati-generatoruses in production, but in the XML -> CSV direction instead of CSV -> XML).The tools (
mcp_iati/activities/queries.py) query those CSVs withpandas, not the XML - this avoids reparsing a multi-MB file on every call.It uses
iadb-Brazil.xmlby default. To use another official IADB country file, a dataset from the IATI Dashboard, a remote URL or a local file, without touching code:# another IADB country file from https://webimages.iadb.org/iati/ export MCP_IATI_SAMPLE=iadb-Argentina.xml # or a dataset registered in the IATI Dashboard (CAF's activity file) export MCP_IATI_DATASET=caf-actfile-46008-2603 # or any remote IATI XML export MCP_IATI_XML_URL=https://example.org/activities.xml # or any local file (downloads nothing) export MCP_IATI_XML_PATH=/path/to/another-iati-file.xmlThe plugin's sample questions quote a country, a sector and an activity taken from the loaded file, so they stay meaningful for any publisher.
Configuration
Configuration is read once when the process starts. Restart the server after changing the source, data directory or cache duration.
Variable | Description | Default |
| Path to a local XML. It has priority and performs no download. | Not set. |
| HTTP(S) URL of a remote XML, used when no local path is configured. | Not set. |
| Short name of a dataset in the IATI Dashboard (e.g. | Not set. |
| Base URL of the IATI Dashboard API used to resolve |
|
| Name of an official IADB country file (from https://webimages.iadb.org/iati/), used when no path, URL or dataset is configured. |
|
| Directory for downloaded XML files and generated CSV files. | User data directory provided by |
| Configurable cache duration in seconds; must be greater than zero. |
|
| How long to keep serving a stale CSV cache after a failed refresh before retrying the conversion; must be greater than zero. |
|
Downloaded XML files and converted CSV folders are reused while they remain inside this TTL. Once it expires, the XML is downloaded again and the CSVs are regenerated. CSV caches use a key derived from the configured origin, so Argentina, Brazil and custom URLs never share the same converted files. If a remote refresh fails and a previous XML exists, that stale copy is used with a runtime warning instead of making the tools unavailable.
The source precedence is:
MCP_IATI_XML_PATH.MCP_IATI_XML_URL.MCP_IATI_DATASET.MCP_IATI_SAMPLE.The default
iadb-Brazil.xmlsample.
Example:
export MCP_IATI_XML_URL=https://example.org/iadb-Argentina.xml
export MCP_IATI_DATA_DIR=/var/cache/mcp-iati
export MCP_IATI_CACHE_TTL_SECONDS=2592000
uv run mcp-serverCSV tables used by the plugin
Table | Columns currently used | Relationship |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The CSV files are loaded as shared pandas DataFrames. Repeated tool calls reuse the same instances and do not download the XML, run the conversion or read the CSV files again. Optional tables yield an empty DataFrame when their CSV is missing, instead of an error.
The data preparation and conversion logic is kept separate from the query
logic. Additional CSV tables can be added through DATAFRAME_SPECS.
Development
# Install dependencies (mcp-server from git, okfn-iati from PyPI;
# the dev extra brings ruff and pytest)
uv sync --extra dev
# Lint
uv run ruff check srcAdding this to a local mcp-server
From the mcp-server/ folder, install this package into the same virtual
environment:
uv pip install -e ../mcp-iati
uv run mcp-serverThe tools become available with the mcp_iati_ prefix.
Charts
Besides the table, some tools return Chart.js specs in
structuredContent["charts"], which the chat gateway renders next to the
answer (same contract as the Uruguay energy-balance plugin):
Tool | Chart |
| grouped bars, commitments vs disbursements per year, one chart per currency |
| pie of the top 10 sectors plus "Other", one chart per vocabulary and currency |
| pie of activities by status |
| bars of activities per sector, one chart per vocabulary |
| bars of activities per organisation (the reporting organisation is left out of the chart) |
| bars of the largest activities, one chart per currency |
| bars of activities per group value (sectors: one chart per vocabulary) |
| cumulative lines per transaction type over time |
Currencies and sector vocabularies are never mixed in one chart, charts
with fewer than two points are skipped and a response carries at most
three charts. The builders live in src/mcp_iati/helpers/charts.py.
Chat gateway branding
The plugin describes itself to MCP clients through the standard channels
of mcp-server: set_plugin_info(description, instructions, sample_questions) in src/mcp_iati/__init__.py (plugin card, sample
question chips and the system prompt) and [project.urls] in
pyproject.toml (link badges on the card and in the tools drawer).
The shell of the chat gateway (site title, hero, tagline, footer) is not
plugin-aware; it uses generic copy unless a static/i18n/overrides.yaml
is present. deploy/gateway-overrides.yaml in this repo is that file with
IATI terms. To use it locally:
cp deploy/gateway-overrides.yaml ../mcp-chat-gateway/static/i18n/overrides.yamlThe deployment image fetches the same file from this repository, so editing it here is enough to change the deployed site.
IATI glossary
The tool descriptions and the plugin instructions share a central glossary
defined in src/mcp_iati/glossary.py. Its goal is that the model interprets
the standard's terms consistently and explains the distinctions that tend to
be ambiguous, especially between reporting, funding and implementing
organisations, and between commitment, disbursement and expenditure. The
define_term tool exposes it directly, so questions like "what does
'disbursement' mean?" are answered from the glossary (with the IATI standard
as the cited source) instead of from the model's own knowledge.
The glossary covers the whole IATI 2.03 activity standard as modelled by the okfn/okfn_iati library (its enums mirror the IATI codelists and its converter flattens each element to a CSV), grouped in these areas:
Area | Terms |
Identification and lifecycle | IATI activity, IATI identifier, activity status, activity date, description, hierarchy, related activity, activity scope, humanitarian flag |
Organisations | reporting organisation, participating organisation, organisation role, organisation type, provider organisation, receiver organisation, contact information |
Financial data | transaction, transaction type, transaction value, commitment, disbursement, expenditure, budget, planned disbursement, default currency, country budget item |
Aid classifications | aid type, finance type, flow type, tied status, collaboration type, disbursement channel, policy marker |
Sectors and geography | sector, recipient country or region, location |
Results and monitoring | result, indicator, indicator period |
Documentation and cross-cutting | document link, condition, vocabulary, codelist, narrative |
When adding a new tool, reuse the definitions from the central module
instead of duplicating them in its docstring (via glossary_text(...) for
the relevant terms). When the underlying library starts exposing a new IATI
element, add its term to the glossary in the matching group.
Tests
uv run pytestThe tests run offline: tests/conftest.py preloads the data cache with
synthetic DataFrames and sets MCP_IATI_XML_PATH, so nothing is downloaded.
They cover:
that the glossary includes the minimum concepts and that the tool descriptions expose the relevant terms to the model;
regression of the queries (tables, sources, empty cases);
the raw-data contract (
test_raw_data_in_ai_response.py): the gateway sends the AI only the text of the response, so every tool that returns a table must embed it verbatim in that text (done byhelpers.text_result). When adding a new tool with a table, add it to theDATA_TOOLSlist in that test.
On GitHub, .github/workflows/python-lint.yml runs ruff + pytest on every
push.
Available Tools
19 toolscore_list_available_resourcesA
List every complementary resource this server offers: documents, publications (PDF), reference datasets and external visualizers, each with its description and links.
Use this tool whenever the user asks which resources, documents,
publications, books or visualizers exist or are available, or
whether a specific one exists (e.g. "is there a data visualizer
for X?", "where can I download the annual report?").
Answer in the user's language and always include the links.Examples: - list_available_resources()
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full disclosure burden and steps up: it says results are exhaustive ('every'), that each item includes its description and links, and that it should 'Answer in the user's language.' This adds real behavioral context beyond the schema; it doesn't cover failure modes, but those are minor for a zero-parameter listing tool.
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?
Purpose is front-loaded in the first sentence, followed by usage triggers and behavioral notes in a logical order. The trailing 'Examples: list_available_resources()' line is mildly redundant for a zero-argument call, but the overall structure is tight with no wasted sentences.
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 zero-parameter, low-complexity tool with an output schema already present, the description covers everything needed to select and invoke it correctly: scope, when to use it, output contents, and response language. Nothing an agent needs 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?
The tool has zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond the empty schema. The description sensibly focuses on output behavior rather than inventing parameter guidance.
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?
States a specific verb and resource: 'List every complementary resource this server offers,' enumerating exact content types (documents, publications PDF, reference datasets, external visualizers). The scope is clearly distinct from all 18 siblings, which are IATI data-querying tools.
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 says 'Use this tool whenever the user asks which resources, documents, publications, books or visualizers exist or are available,' with concrete example queries like 'is there a data visualizer for X?'. It lacks an explicit when-not-to-use or named alternative, but the positive triggers are specific enough that selection ambiguity is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_activity_summaryA
Return the title, status, reporting organisation and totals per transaction type of an IATI activity.
Args:
iati_identifier: IATI identifier, for example "XI-IATI-IADB-BR-L1231".
Obtained with search_activities.
Relevant IATI terms:
- IATI identifier: Globally unique code identifying an IATI activity, also used to link it to its transactions and other information.
Reporting organisation: Organisation responsible for publishing and maintaining an activity's data; not necessarily the one funding or implementing the project.
Activity status: Stage of an activity within its lifecycle: pipeline/identification, implementation, completion, post-completion, cancelled or suspended.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Expenditure: Use of funds to purchase goods or services related to an activity; not a synonym of disbursement.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
| Name | Required | Description | Default |
|---|---|---|---|
| iati_identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clarifies semantic nuances, such as reporting organisation not necessarily being the funder and expenditure not being a synonym for disbursement, which helps avoid misinterpretation. However, it does not disclose error behavior, missing-activity handling, or data freshness, leaving notable gaps for an unannotated tool.
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 core purpose is front-loaded in the first sentence, and the glossary is organized by relevant IATI terms. The description is longer than strictly necessary, but each term supports correct use of the tool, especially around transaction types and financial terminology, so the length is mostly justified.
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?
The description provides enough domain context for a one-parameter tool: it explains key IATI concepts, gives an identifier example, and mentions that the identifier comes from search_activities. The output schema exists and likely documents return values, so the description does not need to restate them. Minor gaps around edge cases like missing activities prevent a higher score.
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 only the parameter name and type with 0% description coverage, but the description compensates well by giving a concrete example ('XI-IATI-IADB-BR-L1231') and explaining how to obtain the identifier via search_activities. This adds meaningful usage context beyond the bare 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 uses a specific verb 'Return' and names the exact resource (IATI activity) and fields (title, status, reporting organisation, totals per transaction type). This clearly differentiates it from sibling tools like activity_transactions or transaction_totals_by_year, which target different data granularity.
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 the tool is for retrieving a summary of a single IATI activity and states that the identifier is obtained via search_activities. However, it does not explicitly say when to choose this tool over alternatives such as activity_transactions or transaction_totals_by_year, so usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_activity_transactionsA
List the transactions associated with an IATI activity.
Transactions are returned in chronological order and include their
type, value, currency and published description.
Args:
iati_identifier: IATI identifier of the activity.
limit: Maximum number of transactions to return. Default: 50.
Returns:
A table containing the transactions associated with the
requested activity.
Relevant IATI terms:
- IATI identifier: Globally unique code identifying an IATI activity, also used to link it to its transactions and other information.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Transaction value: Amount of an individual transaction, expressed in the currency stated on the value or, if unspecified, in the activity's default currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Expenditure: Use of funds to purchase goods or services related to an activity; not a synonym of disbursement.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| iati_identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses chronological ordering and the included transaction fields, and 'List' implies a read-only operation. However, it does not address error behavior, pagination beyond the limit parameter, authentication requirements, or what happens when an invalid iati_identifier is supplied.
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 front-loaded with its purpose and follows a clear Args/Returns structure. The 'Relevant IATI terms' section is useful domain context but somewhat lengthy; not every definition is strictly required to invoke the tool correctly.
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 list operation with an output schema, the description covers the tool's purpose, parameters, return ordering, included fields, and relevant domain terminology. Minor gaps include explicit alternative routing and edge-case or error behaviour, but these are not critical at this complexity.
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 0%, but the description fully documents both parameters: iati_identifier is described as the IATI identifier of the activity, and limit is described as the maximum number of transactions to return with its default of 50. The glossary also reinforces the meaning of an IATI identifier.
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 opens with 'List the transactions associated with an IATI activity', which is a specific verb plus resource. It further specifies what the returned transactions include (type, value, currency, published description), clearly distinguishing it from sibling aggregation tools like mcp_iati_transaction_totals_by_year.
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 use case is implied: this tool returns individual transactions in chronological order, while sibling tools compute transaction totals by year, organisation, sector, or country. However, there is no explicit statement of when to choose this tool over alternatives or any exclusions, so the agent must infer the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_date_coverageA
Report the date range covered by the configured IATI data.
Use date_kind to select activity dates, transaction dates or both:
- activities: planned and actual start and end dates.
- transactions: dates of financial transactions.
- all: both activity and transaction dates.
The result reports the earliest and latest valid date together with
counts of records containing valid, missing or invalid dates.
Relevant IATI terms:
- IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
Activity date: Start or end date of an activity. Each date declares one of four types: planned start, actual start, planned end or actual end.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
| Name | Required | Description | Default |
|---|---|---|---|
| date_kind | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that the result reports the earliest and latest valid date together with counts of records containing valid, missing or invalid dates, and clarifies that it operates on the configured IATI dataset. This is adequate transparency for a read-only reporting tool.
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 purpose is front-loaded in the first sentence, followed by scannable bullet lists for parameter values and output behavior. The IATI glossary adds useful domain context without redundancy, though it is slightly longer than strictly necessary.
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 tool with one optional parameter, an output schema, and no annotations, the description is complete: it defines the parameter values, describes the computed result, and clarifies relevant IATI terminology. An agent has everything needed to select and invoke the tool 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 input schema has 0% description coverage and only provides a title and default for date_kind. The description fully compensates by enumerating the three allowed values (activities, transactions, all) and defining what each means in the IATI context.
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 opens with a specific verb and resource: 'Report the date range covered by the configured IATI data.' The explanation of activity dates vs transaction dates and valid/missing/invalid counts makes the tool's purpose distinct from sibling transaction-total and search tools.
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 explains how to choose date_kind values, but it does not explicitly state when to prefer this tool over siblings such as mcp_iati_file_overview or mcp_iati_transaction_totals_by_year. The intended use is implied by the purpose, but no explicit when/when-not guidance or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_define_termA
Explain what an IATI term means, according to the standard's glossary (activities, organisations, financial data, aid classifications, sectors and geography, results, documentation).
Useful for questions like "what does X mean?" or "what is the difference between X and Y?" (call it once per term).
Args: term: Word or phrase to look up, in English (e.g. "disbursement", "policy marker"). Partial matches are accepted.
Returns: A table with the matching glossary terms and their definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explains that partial matches are accepted, the lookup is in English, and the return is a table of matching glossary terms with definitions. This meaningfully describes the tool's behavior beyond the bare schema, though it does not cover edge cases like no-match behavior or multiple-term handling.
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 well structured with a clear overview, usage guidance, and explicit Args/Returns sections. Every sentence adds useful information, and important details like examples and partial-match behavior are included without unnecessary verbosity.
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 one-parameter lookup tool with an output schema, the description is complete. It covers purpose, usage, parameter semantics, and expected return format, while the output schema handles formal return typing. No critical information is missing for an agent to invoke it 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 schema has 0% description coverage, so the description must fully compensate. It does: the Args section explains that 'term' is a word or phrase in English, gives concrete examples ('disbursement', 'policy marker'), and notes that partial matches are accepted. This is exemplary parameter documentation.
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 verb ('Explain') and resource ('an IATI term according to the standard's glossary'), making the tool's purpose immediately understandable. It also lists glossary categories, which helps scope what the tool covers. It does not explicitly name a sibling alternative, but the glossary-lookup function is distinct from the other data-search and filtering tools.
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 says it is 'useful for questions like "what does X mean?" or "what is the difference between X and Y?"' and advises calling it once per term. This gives clear when-to-use guidance, though it does not state when not to use it or name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_file_overviewA
Summarise the contents of the configured IATI file.
Use this tool for general questions such as what the file contains,
how many activities it has, which organisations report them, which
recipient countries and currencies appear, and how much financial
activity is reported.
Financial totals are kept separate by transaction type and currency.
The result includes:
- Total number of activities.
- Reporting organisations and their activity counts.
- Recipient countries and their activity counts.
- Default currencies used by activities.
- Transaction totals by type and currency.
Relevant IATI terms:
- IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
Reporting organisation: Organisation responsible for publishing and maintaining an activity's data; not necessarily the one funding or implementing the project.
Recipient country or region: Country (ISO code) or supra-national DAC region that receives the intended benefits of an activity. May include a percentage when the activity is split across several territories.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Transaction value: Amount of an individual transaction, expressed in the currency stated on the value or, if unspecified, in the activity's default currency.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Expenditure: Use of funds to purchase goods or services related to an activity; not a synonym of disbursement.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and largely fulfills it by detailing exactly what the summary includes and clarifying IATI-specific semantics. It does not explicitly state that the tool has no side effects, but 'Summarise' and the read-only nature of an overview make this reasonably clear.
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 front-loaded with a practical summary and usage guidance before the longer glossary. The glossary is lengthy but earns its place by defining IATI terms that an agent would otherwise need to infer, though some definitions could be trimmed without harming understanding.
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 zero-parameter overview tool with an output schema, the description is complete: it states the tool's purpose, the types of questions to route to it, the full list of returned aggregates, and the domain vocabulary needed to interpret them. 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?
The tool takes zero parameters, so there is no parameter detail for the description to add. The baseline of 4 applies, and the description wisely spends its space clarifying the output and domain terms instead.
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 opens with a clear verb and resource: 'Summarise the contents of the configured IATI file.' It enumerates the exact questions the tool answers and the output categories, making its scope unmistakable and distinct from sibling search, filtering, and totals-by-dimension tools.
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 explicitly says 'Use this tool for general questions such as...' and lists representative queries, giving an agent clear selection criteria. It does not name alternatives or state when not to use it, but the general-questions framing strongly differentiates it from more specific sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_filter_activities_by_countryA
Filter IATI activities by recipient country.
The country may be provided as an ISO country code, such as "BR",
or as the country name published in the IATI data, such as "Brazil".
Use list_recipient_countries first when the available country codes
or names are unknown.
Args:
country: Recipient country code or name.
limit: Maximum number of activities to return. Default: 10.
Returns:
A table containing matching activity identifiers, titles,
statuses and recipient-country information.
Relevant IATI terms:
- Recipient country or region: Country (ISO code) or supra-national DAC region that receives the intended benefits of an activity. May include a percentage when the activity is split across several territories.
IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
IATI identifier: Globally unique code identifying an IATI activity, also used to link it to its transactions and other information.
Activity status: Stage of an activity within its lifecycle: pipeline/identification, implementation, completion, post-completion, cancelled or suspended.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| country | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses accepted input formats (ISO code or published country name), the default limit behavior, and the returned table's composition (identifiers, titles, statuses, recipient-country info). It does not detail exact-vs-partial matching or no-result behavior, but the core behavior is clearly specified.
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 operational details are front-loaded and organized into purpose, accepted values, prerequisite, Args, Returns, and glossary. The relevant IATI terms section is somewhat long, but each term connects to input or output semantics and is not 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?
For a two-parameter filter tool with a declared output table, the description is largely sufficient and even includes the prerequisite lookup call. It could be improved by relating this tool to search_activities or other filtering alternatives, but no critical invocation detail 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 0%, but the Args section fully explains both parameters: country accepts a code or name, and limit controls the maximum number of returned activities with a default of 10. The description adds examples and clarifies value formats, completely compensating for the empty schema descriptions.
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 opening sentence 'Filter IATI activities by recipient country' is a specific verb+resource statement that clearly names the operation and target. It is immediately distinguishable from siblings like list_recipient_countries or search_activities, and the accepted-input note adds further precision.
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 actionable sequencing guidance by telling the agent to call list_recipient_countries first when country codes or names are unknown. It does not explicitly contrast this tool with search_activities or state when not to use it, so it stops short of a full alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_list_activity_statusesA
List the activity statuses present in the loaded IATI data.
Use this tool to discover which lifecycle statuses are available
before filtering or analysing activities.
Returns:
A table containing each status code, its human-readable label
and the number of activities using it.
Relevant IATI terms:
- Activity status: Stage of an activity within its lifecycle: pipeline/identification, implementation, completion, post-completion, cancelled or suspended.
IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden, and it does well by framing the call as non-mutating and specifying the return contents: 'status code', 'human-readable label', and 'number of activities'. It could add more edge-case behavior, such as what happens when no IATI data is loaded, but the read-only nature and output shape are transparent.
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 front-loaded with the primary purpose, then usage, return shape, and relevant IATI terminology, keeping the most actionable information early. It is slightly redundant by later restating 'activity statuses' as 'lifecycle statuses', but every section otherwise 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 zero-parameter, non-mutating list tool with an output schema present, this description is complete: it explains the data scope, the intended use, the return columns, and the domain vocabulary. An agent has enough to decide when to call it and what to expect.
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 accepts zero parameters, so the input schema already describes everything that can be passed; the 0-param baseline is 4. The description adds useful context by scoping the result to the currently loaded IATI dataset, which helps even with no arguments.
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 opening sentence names a specific verb ('List') and a specific resource ('activity statuses present in the loaded IATI data'), then clarifies they are lifecycle statuses. This resource is distinct from sibling list tools such as list_sectors or list_reporting_organisations, so an agent can tell which list is intended without opening schemas.
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 says to use the tool 'before filtering or analysing activities' to discover which lifecycle statuses are available, providing clear context for when it is useful. It does not name alternative tools or state when not to use it, so it falls just short of fully explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_list_category_valuesA
List the values present in a categorical IATI field.
Use this tool to explore available values before applying filters.
Supported categories are:
- activity_status
- transaction_type
- sector
- organisation_type
- aid_type
- finance_type
- flow_type
- tied_status
- collaboration_type
- humanitarian
- default_currency
The result includes each code, its readable value, its vocabulary
when applicable, and the number of records containing it.
Relevant IATI terms:
- Codelist: Catalogue mapping the codes used in IATI to their allowed meanings.
Vocabulary: Classification system used to interpret an IATI code, such as the OECD DAC CRS for sectors and policy markers, UN COFOG, the SDG goals and targets, or the IASC humanitarian clusters.
Activity status: Stage of an activity within its lifecycle: pipeline/identification, implementation, completion, post-completion, cancelled or suspended.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Sector: Thematic or economic area an activity contributes to, indicated by a code, a vocabulary and, where applicable, a percentage; sectors can be declared at activity level or per transaction.
Organisation type: Classification of an organisation, such as government, local government, other public sector, international/national/regional NGO, public-private partnership, multilateral, foundation, private sector or academic.
Aid type: Modality of the aid, such as budget support, pooled funds, project-type interventions, technical assistance, debt relief or cash transfers; declared as an activity default and overridable per transaction.
Finance type: Financial instrument of the flow, such as standard grant, standard loan, reimbursable grant, bonds, equity, guarantees or debt relief/rescheduling; declared as an activity default.
Flow type: Classification of the resource flow's origin: official development assistance (ODA), other official flows, private development finance, foreign direct investment or other private flows.
Tied status: Whether the aid's procurement is restricted to suppliers from specific countries: tied, partially tied or untied.
Collaboration type: Institutional channel of the activity: bilateral, multilateral (inflows), bilateral through an NGO, bilateral through a multilateral, private sector outflows, or other.
Humanitarian flag: Marker declaring that an activity (or an individual transaction) relates entirely or partially to humanitarian aid.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the result includes: 'each code, its readable value, its vocabulary when applicable, and the number of records containing it.' This goes beyond the schema and clarifies the tool's non-mutating, exploratory nature, though it does not address limit behavior or invalid-category handling.
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 well structured and front-loaded with purpose and usage, but it becomes lengthy with a substantial glossary of 'Relevant IATI terms.' While these definitions add domain context, many are verbose and some are unnecessary for simply selecting a category value, making the description less concise than it could be.
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 two-parameter tool with an output schema, the description is largely complete: it covers the required category values, the result contents, and domain vocabulary. The main gap is that the optional 'limit' parameter's effect is not described, and behavior for an invalid category is not addressed, but an agent can still invoke the tool correctly with the provided information.
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 0%, so the description must compensate. It significantly helps the 'category' parameter by enumerating exact supported values, which are not provided as enums in the schema. However, the 'limit' parameter is not explained beyond its schema default of 100, leaving its semantics and effect on results undocumented.
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 opens with a specific verb and resource: 'List the values present in a categorical IATI field,' followed by an enumerated list of supported categories. This makes the tool's purpose clear, but it does not differentiate it from sibling tools like mcp_iati_list_activity_statuses or mcp_iati_list_sectors, which may overlap in functionality.
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 explicit usage context: 'Use this tool to explore available values before applying filters.' This tells the agent when to invoke it, but it does not contrast it with the specialized sibling list tools or state when those alternatives should be preferred, so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_list_recipient_countriesA
List the recipient countries present in the loaded IATI data.
Use this tool to discover which country codes are available before
filtering activities by recipient country.
Returns:
A table containing the recipient country code, country name and
number of related activities.
Relevant IATI terms:
- Recipient country or region: Country (ISO code) or supra-national DAC region that receives the intended benefits of an activity. May include a percentage when the activity is split across several territories.
IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to lean on, the description takes on the burden of explaining behavior. It discloses the output shape (a table with country code, name, and activity count), clarifies that 'recipient countries' includes regions, and grounds the result in the loaded IATI data. This goes well beyond a tautological statement.
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 well structured with a clear lead sentence, a usage note, a returns summary, and relevant IATI terms. It is slightly longer than strictly necessary, and the IATI definitions are auxiliary, but every section earns its place and the main purpose is 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 zero-parameter list tool, the description is complete: it states the scope, the intended use, the return format, and domain-relevant definitions. Since an output schema exists, the return value explanation is a bonus. Nothing needed to invoke the tool 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?
The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific detail, but none is needed because the input schema is empty. The usage guidance about discovering country codes is contextual rather than parameter-related.
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 opens with a specific verb and resource: 'List the recipient countries present in the loaded IATI data.' It clearly distinguishes this tool from sibling list tools like mcp_iati_list_sectors and mcp_iati_list_reporting_organisations by focusing on recipient countries and tying it to the filtering workflow.
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 states when to use it: 'Use this tool to discover which country codes are available before filtering activities by recipient country.' This gives clear context, although it does not mention any alternatives or when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_list_reporting_organisationsA
List the organisations that report activities in the loaded IATI data.
The reporting organisation is responsible for publishing and
maintaining the activity data. It is not necessarily the funding
or implementing organisation.
Returns:
A table containing the organisation reference, name and number
of activities reported.
Relevant IATI terms:
- Reporting organisation: Organisation responsible for publishing and maintaining an activity's data; not necessarily the one funding or implementing the project.
IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool returns a table containing organisation reference, name, and number of activities reported, and it clarifies an important conceptual nuance about reporting organisations. This is adequate for a simple read-only list with no parameters, although it omits minor details like ordering or whether the list is complete.
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 main sentence is direct and front-loaded, and the return-format section is useful. However, the 'Relevant IATI terms' section repeats the reporting-organisation definition almost verbatim from the earlier paragraph, and the IATI activity definition is not necessary for invoking this tool. The structure is clear but the content could be tightened.
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 zero-parameter tool with an output schema already present, the description supplies the needed context: it names the data source, the return shape, and the distinguishing concept of reporting organisations. Nothing essential for selecting or invoking this tool appears to be missing, though it could have been more concise.
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 input schema already fully covers the invocation surface; the description does not need to explain parameters. The baseline for a zero-parameter tool is therefore strong, and the description adds no irrelevant parameter information.
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 opens with a specific verb and resource: 'List the organisations that report activities in the loaded IATI data.' It also clarifies the reporting-organisation concept by distinguishing it from funding and implementing organisations, which helps narrow the tool's meaning. However, it does not explicitly distinguish itself from sibling tools such as transaction_totals_by_organisation, so it stops short of full sibling differentiation.
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 conveys that this tool is for reporting organisations and that these are not necessarily funding or implementing organisations, which gives useful context for choosing it. It does not explicitly name alternatives or state when not to use this tool, so the usage guidance is more implied than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_list_sectorsA
List the sectors present in the loaded IATI data.
Use this tool to discover the available sector codes and
vocabularies before performing sector-based analysis.
Args:
limit: Maximum number of sector values to return. Default: 100.
Returns:
A table containing vocabulary, sector code, sector name and
number of related activities.
Relevant IATI terms:
- Sector: Thematic or economic area an activity contributes to, indicated by a code, a vocabulary and, where applicable, a percentage; sectors can be declared at activity level or per transaction.
Vocabulary: Classification system used to interpret an IATI code, such as the OECD DAC CRS for sectors and policy markers, UN COFOG, the SDG goals and targets, or the IASC humanitarian clusters.
IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does state the return shape as 'a table containing vocabulary, sector code, sector name and number of related activities,' which is useful. However, it does not disclose details such as ordering, behavior when data is empty, or whether the operation is strictly read-only, leaving some ambiguity.
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 well structured with clear sections for purpose, arguments, return value, and relevant IATI terms. It is slightly longer than necessary due to the vocabulary definitions, but those definitions support correct use and the key information is 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 one-parameter tool with an output schema, the description covers the core needs: what the tool lists, when to use it, what the result table contains, and the parameter meaning. Minor gaps such as handling of missing data or ordering do not significantly impair an agent's ability to invoke it 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 input schema has no parameter descriptions, but the description explains 'limit' as the 'Maximum number of sector values to return' with a default of 100. This adds meaningful semantics beyond the bare integer type and default value in 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: 'List the sectors present in the loaded IATI data.' It also clarifies that the tool returns sector codes and vocabularies, which distinguishes it from sibling list tools like mcp_iati_list_activity_statuses or mcp_iati_list_recipient_countries.
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 says to use the tool 'to discover the available sector codes and vocabularies before performing sector-based analysis.' This gives clear context for when to call it, though it does not name alternatives or explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_no_tool_disponibleA
Call when no other tool can answer the question: topics that are not IATI activities, or questions outside the scope of the loaded data.
Args: reason: Brief explanation (1 sentence) of why no tool applies.
Examples: - no_tool_disponible(reason="not a question about IATI activities")
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It explains the intended invocation context and gives an example reason, but it never states what actually happens when the tool is called, such as whether it returns no data or simply records the reason. The role is inferable from the name but not fully disclosed.
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 compact and well-structured, with the call condition, an Args section, and an example. There is no filler, and the most important routing information appears first.
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 fallback tool with one optional parameter and an output schema, the description covers when to use it, why to use it, the parameter semantics, and a usage example. Nothing essential is missing for an agent to invoke it 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 schema only provides the parameter name, type, and default, with no description. The description adds meaningful semantics by explaining that 'reason' is a brief one-sentence explanation of why no tool applies, and it includes a concrete example. This fully compensates for the 0% schema description coverage.
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 this as the deliberate fallback tool, stating that it is for topics that are not IATI activities or questions outside the scope of the loaded data. This distinguishes it from the IATI data tool siblings by defining exactly what it is not.
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 gives an explicit when-to-use rule: call only when no other tool can answer the question. It also provides an example call. It does not enumerate sibling alternatives, but the routing criterion is specific enough to guide selection away from them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_search_activitiesA
Search IATI activities whose title contains the given text.
Useful as a first step to discover an activity's IATI identifier,
before requesting its summary with activity_summary.
Args:
text: Substring to search for in the title (case-insensitive).
limit: Maximum number of results to return. Default: 10.
Returns:
A table with the IATI identifier, title and status of each match.
Relevant IATI terms:
- IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
IATI identifier: Globally unique code identifying an IATI activity, also used to link it to its transactions and other information.
Activity status: Stage of an activity within its lifecycle: pipeline/identification, implementation, completion, post-completion, cancelled or suspended.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that the match is a case-insensitive substring search, that limit controls maximum results, and that the response is a table containing identifier, title, and status. This is transparent enough for a simple read-style search tool, though edge cases like empty results are not mentioned.
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 well-structured with clear Args/Returns sections and front-loads the main purpose. The 'Relevant IATI terms' block is somewhat verbose but provides useful domain context for an AI agent and does not overshadow the essential usage information.
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?
The tool is simple, has only two parameters, and an output schema is already present. The description covers the use case, parameter semantics, result contents, and domain terminology, so an agent has everything needed to select and call this tool 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?
With 0% schema description coverage, the description fully compensates by explaining both parameters: text is a case-insensitive substring to search for in the title, and limit is the maximum number of results with a default of 10. This adds real meaning beyond the bare schema types.
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 'Search IATI activities whose title contains the given text', naming a specific verb, resource, and matching mechanism. It also positions itself as a first step toward discovering an IATI identifier, which helps distinguish it from the sibling activity_summary 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 explicitly says it is useful as a first step to discover an activity's IATI identifier before requesting its summary with activity_summary. This gives a clear when-to-use signal and names a relevant sibling, though it does not enumerate exclusions for other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_top_activities_by_amountA
List activities with the highest commitment or disbursement totals.
Rankings are calculated independently for each currency, avoiding
comparisons between amounts expressed in different currencies.
Args:
transaction_type: Commitment or disbursement. Accepts commitment,
out commitment, disbursement, 2 or 3.
currency: Optional currency code, for example USD or EUR.
limit: Maximum results to return per currency. Default: 10.
Returns:
A table containing activity identifiers, titles, reporting
organisations, recipient countries, transaction type, currency
and total amount.
Relevant IATI terms:
- IATI activity: A development or cooperation intervention published under the IATI standard; it can represent a project, a programme or another unit of work.
IATI identifier: Globally unique code identifying an IATI activity, also used to link it to its transactions and other information.
Reporting organisation: Organisation responsible for publishing and maintaining an activity's data; not necessarily the one funding or implementing the project.
Recipient country or region: Country (ISO code) or supra-national DAC region that receives the intended benefits of an activity. May include a percentage when the activity is split across several territories.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Transaction value: Amount of an individual transaction, expressed in the currency stated on the value or, if unspecified, in the activity's default currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| currency | No | ||
| transaction_type | No | 2 |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that rankings are calculated independently per currency to avoid cross-currency comparisons, and it lists the return fields. However, it does not disclose potential edge cases, performance behavior, default currency handling when currency is null, or error conditions. It explains the expected behavior but is not exhaustive.
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 core description is concise and front-loaded with the main purpose and key behavior. However, the appended glossary of IATI terms is lengthy and generic, not tool-specific. While informative, it inflates the description size significantly and could be truncated or moved to documentation. The Args/Returns structure is clear, but overall conciseness suffers from the glossary overload.
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?
The tool has an output schema, so return values are covered externally. The description explains the parameters sufficiently and the glossary provides background on IATI concepts. Given the tool's simplicity (three optional parameters) and the existence of the output schema, the description gives enough for an agent to call it correctly. The only gap is explicit usage guidance versus siblings, but that is a separate dimension.
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 0%, so the description must compensate. It does so effectively: transaction_type lists acceptable values ('commitment, out commitment, disbursement, 2 or 3'), currency gives examples ('USD or EUR'), and limit specifies 'Maximum results to return per currency. Default: 10.' This adds meaning beyond the raw schema types, though it leaves some conceptual details (e.g., the meaning of 'out commitment') to the glossary.
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: 'List activities with the highest commitment or disbursement totals.' It also clarifies the per-currency ranking logic, which distinguishes it from sibling tools like transaction_totals_by_* that aggregate totals. This is a clear, unambiguous purpose that would let an agent pick this tool without opening schemas.
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 explains what the tool does but does not explicitly state when to use it versus alternatives. It mentions the ranking per currency and parameters, but there is no direct guidance on when to prefer this over e.g. mcp_iati_transaction_totals_by_country or mcp_iati_activity_transactions. Usage is implied from the purpose, but no exclusions or alternative conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_transaction_totals_by_countryA
Group commitments and disbursements by recipient country.
Amounts with different currencies and transaction types are reported
separately. Missing country names fall back to the country code, and
missing country data falls back to "Unknown recipient country".
Args:
transaction_type: Commitment or disbursement. Accepts commitment,
out commitment, disbursement, 2 or 3.
currency: Optional currency code, for example USD or EUR.
limit: Maximum number of grouped rows to return. Default: 50.
Returns:
A table containing the country code and name, transaction type,
currency and total amount.
Relevant IATI terms:
- Recipient country or region: Country (ISO code) or supra-national DAC region that receives the intended benefits of an activity. May include a percentage when the activity is split across several territories.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Transaction value: Amount of an individual transaction, expressed in the currency stated on the value or, if unspecified, in the activity's default currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| currency | No | ||
| transaction_type | No | 2 |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it discloses useful behavioral details: amounts in different currencies and transaction types are reported separately, missing country names fall back to codes, and missing country data falls back to 'Unknown recipient country'. It also clarifies the return table's contents, though it does not mention pagination, ordering, or read-only status.
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 well organized with Args, Returns, and Relevant IATI terms sections, and the key behavior is front-loaded in the first sentence. The IATI glossary is somewhat lengthy, but it provides useful domain context for an agent unfamiliar with IATI terminology.
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?
The description is complete enough to call the tool correctly: it covers parameter values, output columns, fallback behavior, and aggregation semantics. An output schema exists, and while the description goes beyond it usefully, it could still be improved by explicitly noting whether only one transaction_type is returned per call and how results are ordered.
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 0%, but the description fully compensates by explaining all three parameters. It gives accepted values for transaction_type ('commitment', 'out commitment', 'disbursement', '2', or '3'), states that currency is an optional code with examples, and specifies limit as the maximum grouped rows with a default of 50.
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 opens with a specific verb and resource: 'Group commitments and disbursements by recipient country.' It clearly defines the grouping dimension (country) and output (table with country, type, currency, total), which distinguishes it from sibling tools that group by year, organisation, or sector.
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 intended use is implied through the tool name and the grouping-by-country statement, but the description does not explicitly state when to prefer it over transaction_totals_by_year, transaction_totals_by_organisation, or transaction_totals_by_sector. No alternatives or exclusions are mentioned, so the agent must infer selection from naming context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_transaction_totals_by_organisationA
Group commitments and disbursements by reporting organisation.
Amounts with different currencies and transaction types are reported
separately. The reporting organisation publishes the activity data and
is not necessarily the organisation funding or implementing the
activity.
Args:
limit: Maximum number of grouped rows to return. Default: 50.
Returns:
A table containing the organisation reference and name,
transaction type, currency and total amount.
Relevant IATI terms:
- Reporting organisation: Organisation responsible for publishing and maintaining an activity's data; not necessarily the one funding or implementing the project.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Transaction value: Amount of an individual transaction, expressed in the currency stated on the value or, if unspecified, in the activity's default currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does well by explaining that amounts with different currencies and transaction types are reported separately, that the reporting organisation is not necessarily the funder or implementer, and that the result is a table with organisation, transaction type, currency, and total amount. This goes beyond the tool name and adds meaningful context.
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 core purpose, arguments, and return description are front-loaded and clearly separated. However, the extensive 'Relevant IATI terms' glossary is lengthy and contains generic domain definitions that are not necessary for calling this specific tool, making the description more bloated than needed.
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 tool with a single optional parameter and an output schema, the description covers the key semantics: grouping dimension, currency/type separation, output fields, and limit behavior. It is nearly complete; only minor details like output ordering or handling of empty results are absent.
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 0%, but the description compensates by fully documenting the only parameter: 'limit: Maximum number of grouped rows to return. Default: 50.' This adds meaning beyond the schema's bare 'Limit' title and is sufficient for correct invocation.
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 opens with a specific verb and resource: 'Group commitments and disbursements by reporting organisation.' This states exactly what the tool does and the output table is listed. It is clear, though it does not explicitly contrast with sibling aggregation tools like mcp_iati_transaction_totals_by_year, by_sector, or by_country.
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 about when to use this tool versus the many sibling tools (by year, by sector, by country, activity_transactions). There are no usage conditions, exclusions, or alternative recommendations. Users must infer the appropriate selection from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_transaction_totals_by_sectorA
Allocate commitments and disbursements across sectors.
Amounts are distributed using the published sector percentages.
Different vocabularies and currencies are reported separately.
Args:
transaction_type: Commitment or disbursement. Accepts commitment,
out commitment, disbursement, 2 or 3.
currency: Optional currency code, for example USD or EUR.
vocabulary: Optional sector vocabulary code, for example 1 or 2.
limit: Maximum number of grouped rows to return per vocabulary and
currency. Default: 50.
Returns:
A table containing the vocabulary, sector, transaction type,
currency and allocated total amount.
Relevant IATI terms:
- Sector: Thematic or economic area an activity contributes to, indicated by a code, a vocabulary and, where applicable, a percentage; sectors can be declared at activity level or per transaction.
Vocabulary: Classification system used to interpret an IATI code, such as the OECD DAC CRS for sectors and policy markers, UN COFOG, the SDG goals and targets, or the IASC humanitarian clusters.
Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Transaction value: Amount of an individual transaction, expressed in the currency stated on the value or, if unspecified, in the activity's default currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| currency | No | ||
| vocabulary | No | ||
| transaction_type | No | 2 |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well: it discloses that amounts are distributed using published sector percentages, that different vocabularies and currencies are reported separately, and that a table is returned. It does not explicitly state that this is a read-only operation, but the 'Returns a table' framing makes that reasonably clear.
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 tool summary, Args, and Returns sections are well-structured and front-loaded. However, the 'Relevant IATI terms' glossary is long and only tangentially operational; much of it defines domain concepts rather than helping an agent invoke the tool. It is not harmful, but it prevents the definition from being tightly concise.
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 read-style aggregation tool, the description provides the core needed context: allocation logic, grouping behavior, parameter meanings, defaults, and return columns. The missing usage guidance is a gap, but the presence of an output schema and thorough parameter documentation makes the tool callable without further lookup.
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 0%, so the description must fully compensate. It does: every parameter is covered, including accepted transaction_type values ('commitment, out commitment, disbursement, 2 or 3'), optional examples for currency and vocabulary, and the limit default of 50.
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 opening line states a specific operation and resource: allocating commitments and disbursements across sectors. The 'Returns' section clarifies that it produces a grouped table of totals. It does not explicitly contrast itself with sibling totals tools (by_year, by_country, by_organisation), so it stops short of full sibling differentiation.
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?
There is no explicit guidance about when to use this tool versus transaction_totals_by_year, transaction_totals_by_country, or transaction_totals_by_organisation. The sector-specific scope is implied by the name and first sentence, but no alternatives, prerequisites, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_iati_transaction_totals_by_yearA
Group commitments and disbursements by year and currency.
Only commitment and disbursement transactions are included. Amounts
with different currencies are always reported separately.
Args:
year_from: Optional first year to include.
year_to: Optional last year to include.
Returns:
A chronological table containing year, transaction type, currency
and total amount.
Relevant IATI terms:
- Transaction: Financial operation associated with an IATI activity, identified by its type, date, value and currency.
Transaction type: Code indicating the nature of a financial operation: incoming funds, commitment, disbursement, expenditure, interest payment, loan repayment, reimbursement, purchase or sale of equity, credit guarantee, incoming commitment, or outgoing/incoming pledge.
Transaction value: Amount of an individual transaction, expressed in the currency stated on the value or, if unspecified, in the activity's default currency.
Commitment: Financial obligation undertaken to provide funds to an activity; it does not necessarily represent a payment already made.
Disbursement: Transfer of funds from a provider organisation to a receiver organisation to finance an activity.
Default currency: Currency declared for an activity and used whenever a financial value does not explicitly specify another currency.
| Name | Required | Description | Default |
|---|---|---|---|
| year_to | No | ||
| year_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| force | No | Plain text message that bypasses LLM processing and should be printed exactly as provided in the user interface. |
| table | No | Two-dimensional list (list of rows) representing tabular data, e.g., from CSV or TSV sources. Each row should be a list of cell values. |
| charts | No | List of dictionaries containing data and configuration for rendering a Chart.js chart in the chat interface. |
| sources | Yes | URL(s) that users can nagivate to to download the data used for the analysis. E.g., landing page, feed, file endpoint, CKAN resource page, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It reveals key behavioral details: only commitments and disbursements are included, different currencies are never merged, and the result is a chronological table. For a read-only aggregation tool this is solid, though it does not explicitly state behavior when year_from/year_to are omitted.
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 opening sentence is clear and the Args/Returns sections are well structured. However, there is redundancy between 'Group commitments and disbursements...' and 'Only commitment and disbursement transactions are included,' and the 'Relevant IATI terms' glossary is long, containing definitions that are not all essential for invoking this specific tool.
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 tool with two optional parameters and an output schema, the description covers the core invocation contract: purpose, filter parameters, included transaction types, output columns, and the important currency-separation caveat. It lacks explicit guidance on preferring sibling transaction tools or on omitted-year behavior, but the essential context is present.
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 0%, and the description compensates by explaining both parameters: 'year_from: Optional first year to include' and 'year_to: Optional last year to include.' This adds meaning beyond the bare integer/null schema and default values. It stops short of a 5 because it does not clarify inclusivity or open-ended ranges.
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 opens with a specific verb and resource: 'Group commitments and disbursements by year and currency.' It names the two transaction types included and the return format, which clearly differentiates it from sibling tools like mcp_iati_transaction_totals_by_organisation or by_sector.
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 an explicit scope condition: 'Only commitment and disbursement transactions are included,' which tells an agent when not to use the tool. However, it does not explicitly name alternative tools or state a when-to-use/when-not-to-use rule relative to mcp_iati_activity_transactions or the other totals_by_* tools.
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.
19 tool updates
v0.1.0- First observed
core_list_available_resources - First observed
mcp_iati_activity_summary - First observed
mcp_iati_activity_transactions - First observed
mcp_iati_date_coverage - First observed
mcp_iati_define_term - First observed
mcp_iati_file_overview - First observed
mcp_iati_filter_activities_by_country - First observed
mcp_iati_list_activity_statuses - First observed
mcp_iati_list_category_values - First observed
mcp_iati_list_recipient_countries - First observed
mcp_iati_list_reporting_organisations - First observed
mcp_iati_list_sectors - First observed
mcp_iati_no_tool_disponible - First observed
mcp_iati_search_activities - First observed
mcp_iati_top_activities_by_amount - First observed
mcp_iati_transaction_totals_by_country - First observed
mcp_iati_transaction_totals_by_organisation - First observed
mcp_iati_transaction_totals_by_sector - First observed
mcp_iati_transaction_totals_by_year
TDQS
Scored across 19 tools
Most tools target distinct actions, but there is real overlap: list_category_values duplicates list_activity_statuses and list_sectors, and file_overview subsumes list_reporting_organisations and list_recipient_countries. Descriptions are detailed enough to disambiguate most cases, so confusion is containable.
Tool names overwhelmingly follow the mcp_iati_ prefix with snake_case and clear list_/filter_/search_ verbs. Deviations like no_tool_disponible (French) and core_list_available_resources (different prefix) prevent a perfect score.
19 tools sits in the 16-25 range that feels heavy for the server's purpose. Several specialized list_* tools could be consolidated into the generic list_category_values tool, though each tool does have a plausible niche.
The server covers file overview, activity search/summary, transactions, and several useful aggregations, but there are notable gaps: no filtering by sector, status, or reporting organisation, even though those values can be listed. This leaves some natural IATI questions answerable only partially.
Maintenance
Related MCP Connectors
UN FAOSTAT global food & agriculture statistics over a local SQLite mirror, via MCP.
World Bank MCP — wraps the World Bank Data API v2 (free, no auth)
USAspending MCP — Federal spending data from USAspending.gov API
data.gov.uk MCP — UK national open-data portal (CKAN API).
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates multiple XRPL data sources including LOS, Validator History Service, XRPL JSON-RPC, and XRPLMeta to provide comprehensive querying of XRPL network data, accounts, transactions, tokens, validators, and more via MCP tools.-
- AlicenseNot gradedqualityCmaintenanceEnables querying IETF documents, RFCs, working groups, and persons from the IETF Datatracker via MCP tools.4 npmMIT
- AlicenseNot gradedqualityAmaintenanceSearch and query government open-data portals (Socrata SODA API) via MCP.81 npm3Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables querying 29,500+ World Bank development indicators for 200+ countries across 60+ years via MCP, with 7 tools for browsing topics, sources, countries, and indicators.271 npm3Apache 2.0